PolicyEngine / PolicyEngine/policyengine-us
Adults in the Medicaid coverage gap are charged the full benchmark premium
- Dominant language
- Python
- Stars
- 162
- Forks
- 212
- Avg merge
- 3d 3h
- Merged PRs (30d)
- 97
Description
**Observed** (API, 2026): a single childless 30-year-old in Wyoming with **$0 income** gets `spm_unit_medical_out_of_pocket_expenses` = $11,769 with `medicaid` = 0 and `premium_tax_credit` = 0. Texas: $6,962. The premium is flat below 100% FPL and drops to $336 at $16,000, so `household_net_income` jumps by $11,433 when the household crosses the poverty line — a large negative cliff in the wrong direction.
**Cause**: `takes_up_aca_if_eligible` defaults to `True`, and `pays_aca_premium` tests immigration status, other coverage and age, but not whether any subsidy exists. Adults below 100% FPL in a non-expansion state have no Medicaid pathway and no PTC (26 CFR 1.36B-2(b)(1)), yet the model charges them the full benchmark premium.
**Expected**: these households are uninsured in practice — Wyoming DOH's 2026 coverage chart labels 0–99% FPL "No Coverage" for non-disabled adults. Premium should be $0 there (or take-up should require subsidy eligibility). Affects AL, FL, GA, KS, MS, SC, TN, TX, WY (WI covers adults to 100% FPL).
**Repro**: `POST /us/calculate`, one person age 30, `employment_income` 0 / 8000 / 12000 / 16000, `state_name: WY`, requesting `medicaid`, `premium_tax_credit`, `spm_unit_medical_out_of_pocket_expenses`.
Related: #8168 (marketplace take-up calibration).
Contributor guide
Research direction
Start at the POST /us/calculate entry point and trace takes_up_aca_if_eligible and pays_aca_premium for a 30-year-old in Wyoming. Reproduce the 2026 cases with employment_income of 0, 8000, 12000, and 16000 while requesting Medicaid, premium_tax_credit, and spm_unit_medical_out_of_pocket_expenses. Done means adults below 100% FPL in non-expansion states are not charged the benchmark premium, without breaking subsidy-eligible cases.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- api, backend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 58/100