PolicyEngine / PolicyEngine/policyengine-us
Separate Medicaid legal eligibility categories from cost/risk groups
- Dominant language
- Python
- Stars
- 162
- Forks
- 212
- Avg merge
- 3d 3h
- Merged PRs (30d)
- 97
Description
## Problem
`medicaid_category` currently serves two roles:
1. a **legal eligibility pathway**: why a person qualifies for Medicaid; and
2. a **cost/risk grouping input**: which per-capita Medicaid spending cell is assigned through `medicaid_group` and `medicaid_cost`.
Those are not the same concept. A policy reform can change the legal pathway that qualifies an already-enrolled person without changing their underlying expected medical cost. Reclassifying the person from one legal pathway to another should not by itself create a large Medicaid cost change.
## Current code shape
`medicaid_group.py` maps to `AGED_DISABLED` when:
- `medicaid_category == SSI_RECIPIENT`, or
- `is_ssi_recipient_for_medicaid`, or
- `is_optional_senior_or_disabled_for_medicaid`.
It does not classify a baseline Medicaid expansion/parent/adult enrollee as aged/disabled just because `is_ssi_disabled`, `is_disabled`, Medicare/disability evidence, age, or other stable risk traits are true.
So the spending group can change only because the legal eligibility route changes, even if the person's traits and enrollment status are unchanged.
## Concrete example from SSI asset-limit analysis
SSI eligibility reforms can change `medicaid_category` from an existing full-Medicaid pathway to `SSI_RECIPIENT`, which changes `medicaid_group` to `AGED_DISABLED` and creates a large Medicaid cost increase even when the person was already Medicaid-enrolled at baseline.
Run context:
- Dataset: rebuilt enhanced CPS 2024 H5 from `policyengine-us-data` SIPP/SSI work: `/Users/maxghenis/.codex-worktrees/us-data-sipp-ssi-sga-income-filter-20260524/policyengine_us_data/storage/enhanced_cps_2024.h5`
- Model: `policyengine-us==1.705.16`
- Audit files in `/Users/maxghenis/PolicyEngine/ssi-asset-limits`:
- `.local-results/net-fiscal/ten_twenty_2026_new_ssi_medicaid_model_buckets_peus_1_705_16.csv`
- `.local-results/net-fiscal/no_limit_2026_new_ssi_medicaid_model_buckets_peus_1_705_16.csv`
For the $10k/$20k SSI asset-limit reform:
- **267.2k** new SSI recipients were already Medicaid-enrolled at baseline but changed Medicaid spending group.
- This produced **+$3.94B/year** in modeled Medicaid cost, with no change in enrollment.
- Almost all were age 18-64, `is_ssi_disabled=true`, and reported Medicaid at baseline.
- Top state: North Carolina, **239.2k** people and **+$3.63B/year**.
For removing the SSI asset limit entirely:
- **615.6k** new SSI recipients were already Medicaid-enrolled but changed spending group.
- This produced **+$8.47B/year** in modeled Medicaid cost, again with no enrollment change.
## Why this matters beyond SSI
The same issue can arise for any reform or missing pathway that changes categorical route but not underlying health risk, for example:
- an expansion adult later qualifying through SSI, optional ABD, medically needy, or a working-disabled buy-in;
- a parent/caretaker or young adult moving into another pathway;
- state-specific Medicaid pathways being added or reordered;
- 209(b), MSP/QMB, or medically needy implementation changing legal category precedence.
The model should not let eligibility hierarchy changes masquerade as changes in expected medical spending.
## Suggested approach
- Separate legal pathway from spending/risk classification.
- Keep `medicaid_category` as a legal eligibility-pathway variable.
- Add or revise a separate cost-group variable based on stable enrollee traits and calibrated risk/spending cells, not just current policy pathway.
- Use traits such as age, disability evidence, Medicare status, pregnancy, child status, and possibly baseline/reporting evidence where appropriate.
- If legal pathway matters for federal/state financing, model that separately from total expected medical cost.
- Preserve category precedence for eligibility while avoiding mechanical `medicaid_cost` jumps when only category precedence changes.
## Acceptance criteria
- Add tests covering an already-Medicaid-enrolled person whose legal Medicaid pathway changes under a reform but whose traits and enrollment status do not.
- `medicaid_cost` does not change solely because the legal eligibility category changes, unless a documented financing or cost model intentionally says it should.
- Eligibility-pathway outputs remain available for legal/program analysis.
- Cost/risk-group outputs are documented as distinct from eligibility-pathway outputs.
- SSI asset-limit analyses can distinguish new Medicaid enrollment from cost/risk reclassification effects.
Contributor guide
Assessment
This issue has not been assessed yet.