PolicyEngine / PolicyEngine/policyengine-us

employer_sponsored_insurance_premiums never reaches medical out-of-pocket

Open
#9,473 1 comment 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.