Health Plan Decision Support · Illustrative Prototype

Where could Double Cup fit?

A population-fit and pilot-planning tool for examining whether behavioral-health need, access barriers, benefit-navigation friction, and community feasibility create a credible role for Double Cup in a specific health plan's population — and what a bounded pilot could look like.

This prototype uses seeded synthetic population data and illustrative scoring logic. It is designed to demonstrate a product and evaluation approach — not to make clinical, eligibility, actuarial, or purchasing decisions.
Orientation · 30-second read

What the tool decides

Every assessment resolves to one of three outcomes. Two of them are reasons not to build a pilot — which is the point. A high behavioral-health-need population does not automatically mean Double Cup is a fit.

● Pilot candidate

The evidence supports a bounded pilot

Need, access friction, and community feasibility line up well enough to design a small, measurable test — scoped to benefit awareness and completed navigation, not clinical care.

● Discovery required

Relevant, but the evidence isn't ready

The concept may fit, but missing or conflicting information prevents a responsible recommendation. The tool proposes what to learn first rather than overstating relevance.

● Not a current fit

Something else is more appropriate

Existing programs already cover the gap, or the community model isn't feasible here. The tool names what's working and what would need to change before reassessing.

Need alone is not fit. Community-partner feasibility, benefit structure, existing program strength, geographic concentration, and access barriers all move the recommendation independently — a plan can have severe unmet need and still be a "discovery required" or "not a current fit" because a coffee-shop connection model can't be delivered there yet.
Stage 1 · Configure a scenario

Assessment workspace

Choose one of four seeded synthetic Minnesota health plans, then adjust the assumptions to see how the recommendation moves. Nothing here is a real plan; every value is generated deterministically so a scenario reads the same on every refresh. Tip: to see the "insufficient evidence" behavior, toggle a critical field to not reported.

Select a plan scenario — each is engineered to exercise a different outcome and boundary of the model.
Selected scenario · synthetic

Adjust assumptions 0–100 illustrative indices
Assumptions edited

Fields marked CRIT are critical: if any is left as "not reported," the model refuses to overstate relevance and routes to discovery required. Use the "not reported" toggle to simulate missing data.

Stage 2 · Recommendation

Fit recommendation

An executive-readable read produced by generateRecommendation() from the deterministic evidence packet — schema-validated before it renders. Every conclusion below traces back to a displayed signal.

No assessment run yet

Pick a scenario above and press Run assessment. The recommendation, opportunity score, confidence, supporting and counter-evidence, and a pilot or discovery plan will appear here.

Stage 3 · Population & access evidence

The signals behind the score

These visuals redraw for the selected scenario. Values are synthetic and illustrative — they show the shape of the evidence a real assessment would weigh, not measured outcomes.

Six-dimension fit profile
Each axis is a weighted composite of the adjustable inputs (0–100).
Need × feasibility quadrant
Why need alone doesn't decide. Only the upper-right quadrant supports a pilot.
Benefit-navigation funnel
Illustrative flow from need signal to a closed navigation loop — where Double Cup would act.
Market comparison
Relative fit index across the scenario's synthetic markets.
Evidence completeness
How much of the required evidence is present. This caps confidence.
0%InsufficientAdequate100%
Expected pilot measurement ladder
If a pilot ran, what would be measured — from leading signal to plan value.
Architecture · Analytics vs. interpretation

How the recommendation is produced

A deliberate separation: deterministic analytics compute the numbers and enforce the rules; an interpretation layer turns the structured evidence packet into readable language. Version one runs that layer locally from templates — no model-provider API key ships in the browser — behind an interface a server-side model could later fill.

In one sentence: deterministic analytics decide and stay auditable; a model only phrases the result; schema validation and human review gate every output. This is the least-autonomous design that does the job — the pattern to prefer for a consequential, regulated recommendation.

01
Aggregate data
Seeded synthetic population & access signals.
Deterministic
02
Score & rules
Six dimensions, weights, decision rules, confidence cap.
Deterministic
03
Evidence packet
Structured facts: support, counter, missing.
Deterministic
04
Generate
generateRecommendation() — local templates now, model adapter later.
Interpretation
05
Human review
A reviewer accepts, edits, or rejects. Final approval stays human.
Human gate
06
Pilot decision
Plan chooses: pilot, discovery, or decline.
Human gate
07
Monitor
Offline eval + online metrics feed iteration.
Deterministic
Recommendation schema · validated before render
// Every field required; validation failure → safe error state
{
  "decision": "pilot_candidate | discovery_required | not_current_fit",
  "opportunityScore": 0-100,
  "confidence": "high | medium | low",
  "executiveSummary": "",
  "priorityPopulation": "",
  "supportingEvidence": [ ],
  "counterEvidence": [ ],
  "missingEvidence": [ ],
  "recommendedNextStep": "",
  "pilot": { geography, duration, population,
    primaryOutcome, leadingIndicators[],
    guardrails[], expansionThreshold, stopCriteria }
}
Why this separation matters

The score and the decision are not produced by a language model. They come from auditable arithmetic and explicit rules, so a plan's analytics team can reproduce and challenge them. The interpretation layer only phrases what the packet already contains — it cannot invent a conclusion the evidence doesn't support.

The generator is honestly labeled a structured recommendation prototype. It is template-driven, not a live LLM call. Swapping in a server-side model means implementing one adapter behind generateRecommendation(packet) — the UI, schema validation, and safe error state stay unchanged.

If the returned object fails schema validation, the UI shows a safe error rather than partially rendering a misleading result.

The LLM seam · recommendation provider
Swap the interpretation layer without touching anything else
Active: Local template (default)

generateRecommendation(packet) is async and routes through a pluggable provider. The deterministic decision, score, evidence IDs, and request-scope disposition stay authoritative — a provider may phrase the prose, never change the verdict. Switching a provider re-scores the assessment and the whole golden suite live.

Request contract · what the server receives (no PHI, no secrets)
{ }
Reference server · the key lives here, never in the browser
NodePOST /api/recommend (Express + Claude)
// server.js — the API key stays server-side (env var).
import express from 'express';
import Anthropic from '@anthropic-ai/sdk';

const app = express();
app.use(express.json({ limit: '256kb' }));
const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });

app.post('/api/recommend', async (req, res) => {
  const packet = req.body;                 // evidence packet + disposition
  const msg = await client.messages.create({
    model: 'claude-sonnet-5',
    max_tokens: 1200,
    system: 'Phrase an executive recommendation from the '
      + 'supplied evidence ONLY. Do not change the decision, '
      + 'score, confidence, evidence IDs, or request disposition. '
      + 'Do not introduce evidence not in the packet. '
      + 'Return ONLY the fixed recommendation JSON schema.',
    messages: [{ role: 'user', content: JSON.stringify(packet) }]
  });
  res.json(JSON.parse(msg.content[0].text)); // client re-validates + reconciles
});
app.listen(8080);

The browser never holds the key. The client still validates the schema, reconciles authoritative fields, and checks groundedness on whatever the server returns — so a misbehaving model is caught, not trusted.

Where retrieval and tools would attach
Not built in this prototype — but this is the shape it would take, and what you'd evaluate.
Retrieval (RAG)If the tool answered from a plan's real benefit documents, a retrieval step would fetch permission-aware, effective-dated passages and pass them to the model. You'd evaluate recall on known-answer questions and citation validity — and require the answer to cite sources or refuse.
Tool useThe six deterministic calculators (scoring, feasibility rules, confidence cap) already act as tools: exact, auditable functions the pipeline calls. Real tools would add eligibility / benefit look-ups and ticket creation — kept deterministic, behind human approval for consequential actions.
Not needed hereThis use case has no live knowledge base or transactions to fetch, so RAG isn't required for the fit assessment itself. It becomes relevant the moment the tool must ground answers in a specific plan's documents.
AgentsDeliberately avoided. A planning loop adds autonomy this decision doesn't need. The bounded, one-shot workflow with human approval is the safer, more evaluable design.
Stage 4 · Evaluation Lab

Would this recommender be safe to ship?

A pre-LLM evaluation harness for the current deterministic baseline. It scores the recommendation system against a fixed suite of 20 golden cases — including cases it is supposed to fail loudly, like missing critical data and inappropriate-use requests — using stable evidence IDs and an explicit request-scope check, then computes an illustrative release gate. It is not forced to pass.

This suite evaluates deterministic scoring, evidence selection, request-scope controls, schema validity, and the provider's recommendations, plus two model-layer guards that compute now — groundedness (no hallucinated evidence) and decision fidelity (the model can't override the verdict). It does not yet measure retrieval quality, prompt sensitivity, judge calibration, or model cost — those activate only with a configured server model provider (see the seam above). By default it runs the local template; nothing here calls a live LLM.

✓ Built now

Working in this prototype — demonstrable live
  • Deterministic scoring, decision rules & confidence caps
  • Structured evidence packets with stable IDs
  • Versioned golden dataset + human-authored oracles
  • Request-scope controls, schema validation, safe error state
  • Provider seam + fault injection; groundedness & decision-fidelity checks
  • Release gates, report export, online-monitoring plan
Release gate · not yet run

Run the suite to compute the gate. Safety-critical gates (prohibited-evidence avoidance, critical missing-data detection, request-scope safety, schema validity, zero severe unsupported pilots, zero prohibited outputs) must be perfect or the result is "Not ready." Quality gates (decision agreement, evidence recall, precision, appropriate uncertainty) must each reach 90%.

Where this sits in the offline → online release path
This suite
Gate 1
Safety & policy pass
Hard gates = 100%.
Gate 2
Beats baseline
Quality gates ≥ 90% on the locked set.
Gate 3
Latency & cost fit
Activates with a real model provider.
Gate 4
Bounded pilot
Human review + rollback. Live, small cohort.
Gate 5
Online outcomes
Adoption & impact — see the measurement plan.
Categories: Clear fit · 5Clear non-fit · 3Ambiguous · 3Incomplete data · 3Conflicting · 2Equity-sensitive · 2Adversarial · 2
Case
Scenario & oracle expectation
Expected
Verdict
Failure taxonomy

When a case fails, the runner tags it with a failure type: incorrect fit classification · missed required evidence · selected prohibited evidence · ignored counterevidence · overstated certainty · missing-data failure · wrong request-scope disposition · unsafe/prohibited output · output-schema failure. Request-scope, prohibited-output, missing-data, and schema failures are safety-critical and force the gate to "Not ready." Boundary disagreements are flagged Decision required — a product-policy question, not a code defect.

Stage 5 · From offline eval to live pilot

Online monitoring plan

Passing the offline gate earns a limited internal pilot, not a launch. These are the measures that would be watched once real reviewers and real members are involved — grouped by what they tell us.

Product behavior

Is the tool being used as intended?
  • Assessment completion rate
  • Time to recommendation
  • Human-review completion rate
  • Recommendation override rate
  • Most frequently missing evidence

Recommendation quality

Do reviewers trust the output?
  • Reviewer agreement with decision
  • Evidence-citation acceptance
  • Counterevidence completeness
  • Reassessment rate
  • High-severity error rate

Pilot value

Is a live pilot doing anything real?
  • Benefit-awareness improvement
  • Navigation initiation & completion
  • Appropriate service connection
  • Repeat program engagement
  • Member-reported connection / belonging
  • Operational burden on plan & partners
Guardrails · non-negotiable
No individual clinical decisions
No individual eligibility determinations
No PHI in the public prototype
Human approval before any client action
Evidence, assumption, and recommendation kept visibly distinct
Rollback if severe-error thresholds are exceeded
Under the hood

How this assessment works

The full model is here — formulas, weights, decision rules, and honest limitations. Progressive disclosure: the primary path stays readable; the arithmetic lives in these panels.

ModelThe six dimensions and how they're scored

Each dimension is a weighted blend of the adjustable 0–100 inputs. Nothing is random; the same inputs always produce the same score.

  • Unmet behavioral-health need = 0.5·need index + 0.3·outpatient follow-up gap + 0.2·social-isolation signal
  • Access friction = 0.55·network wait time + 0.45·transportation friction
  • Benefit-navigation friction = 0.5·(100 − existing EAP/navigation engagement) + 0.5·outpatient follow-up gap
  • Engagement opportunity = 0.55·social-isolation signal + 0.45·digital engagement
  • Community feasibility = 0.6·community-partner coverage + 0.4·geographic concentration
  • Operational & measurement readiness = 0.55·operational readiness + 0.45·benefit-document completeness
WeightsOverall opportunity score & incremental-fit penalty

The overall opportunity score is a weighted sum of the six dimensions:

Unmet behavioral-health need22% Access friction20% Community feasibility18% Benefit-navigation friction16% Engagement opportunity14% Operational & measurement readiness10%

The raw score is then multiplied by an incremental-fit factor = 1 − 0.4·(existingProgramStrength/100), where existing strength = 0.6·overlapping-intervention strength + 0.4·EAP engagement. This is why a plan whose gap is already covered scores lower even when raw need is high — Double Cup is measured on incremental value, not absolute need.

RulesDecision rules that override the raw score

Classification is not a simple threshold. These rules run after scoring, in order:

  • Missing critical fields → discovery required. If outpatient follow-up gap, network wait time, community-partner coverage, or operational readiness is "not reported," the tool routes to discovery and caps confidence at low. It will not overstate relevance on absent evidence.
  • Feasibility floor blocks pilots. If community feasibility < 35, the outcome cannot be "pilot candidate" no matter how high need is — a coffee-shop model can't run without feasible partners.
  • Strong existing programs → not a current fit. If existing program strength ≥ 68 and adjusted opportunity < 52, the tool recommends strengthening what already works instead.
  • Otherwise: adjusted opportunity ≥ 58 with feasibility ≥ 45, adequate data, and non-low confidence → pilot candidate; adjusted < 40 → not a current fit; everything between → discovery required.
  • No pilot on need alone. There is no path where high behavioral-health need by itself produces a pilot recommendation.
ConfidenceHow confidence is calculated

Confidence is driven by data completeness and internal conflict, independent of the score. Completeness = share of the twelve inputs reported, blended with benefit-document completeness. Then:

  • Any critical field missing → low, always.
  • High need (>60) paired with low feasibility (<35) is flagged as conflicting evidence and knocks confidence down a tier.
  • Completeness ≥ 78 → high · 55–77 → medium · <55 → low.

Confidence is shown as an explicit chip with a plain-language reason, and it is displayed with both color and a filled-bar count so it never depends on color alone.