PolicyEngine / PolicyEngine/policyengine-us
employer_sponsored_insurance_premiums never reaches medical out-of-pocket
- Dominant language
- Python
- Stars
- 162
- Forks
- 212
- Avg merge
- 3d 3h
- Merged PRs (30d)
- 97
Description
**Observed** (API, 2026): with `has_esi: true`, `offered_aca_disqualifying_esi: true` and `employer_sponsored_insurance_premiums: 6500`, `spm_unit_medical_out_of_pocket_expenses` and `household_net_income` are byte-identical to the same household without ESI. Values of 6,500 and 13,000 give identical output. For a CA parent with one child at $60,000, MOOP is $5,220, all of it `marketplace_net_premium`.
**Cause**: `employer_sponsored_insurance_premiums` is consumed only by `gov/household/cbo_market_income_additions.yaml`; `spm_unit_health_insurance_premiums` has no employer-sponsored component. The variable is documented as the *employer*-paid premium, and there is no input for the employee's contribution.
**Expected**: an ESI household pays its employee share, not a marketplace premium. AHRQ MEPS-IC 2024 average employee contribution: $1,789 single / $7,216 family (Tables II.C.2, II.D.2).
**Repro**: TX single parent (children 3 and 7), `employment_income` 30000, the three ESI inputs on the parent, requesting MOOP and `premium_tax_credit`; compare to the same request without them.
Related: #8671.
Contributor guide
Research direction
Start with gov/household/cbo_market_income_additions.yaml and trace how employer_sponsored_insurance_premiums reaches household_net_income and spm_unit_health_insurance_premiums. Reproduce the TX household API comparison with and without the three ESI inputs, then inspect the MOOP and premium_tax_credit entry points. Done means an ESI household reflects its employee premium share rather than an unchanged marketplace premium, with the reported outputs distinguished.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100