You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part 3/4/5 of the architecture described in #8089. Filed as a dedicated issue because ACA has the largest MOOP magnitude among the rules-computable premium components.
Same shape as CHIP
PolicyEngine-US already computes premium_tax_credit (the subsidy). What's missing is a net Marketplace premium:
(Or more simply, applicant-contribution-based net premium for the benchmark silver plan.)
The CPS-imputed health_insurance_premiums_without_medicare_part_b in PolicyEngine-US already includes whatever a Marketplace enrollee reported paying post-PTC. So on a baseline run, MOOP is roughly right. But a PTC reform (e.g., eliminate the enhanced PTC, shift applicable-figure curves) changes computed PTC while imputed MOOP stays put, and SPM resources don't move.
with imputed_residual = imputed_total − baseline_computed_sum (baseline computed at the CPS reference year's rules, 2024, mirroring the CHIP approach).
What's needed, roughly
Rules-based marketplace_net_premium variable in policyengine-us.
Silver benchmark × applicable-figure formula.
Gated on Marketplace enrollment (new flag or use an existing "does this tax unit buy on Marketplace" indicator; CPS has Marketplace coverage flag).
Tax-unit or SPM-unit entity.
Calibration for Marketplace premium revenue per enrollee by state, sourced from HHS Marketplace effectuated enrollment + issuer premium data (or simpler, use average benchmark × applicable-figure at tax-unit-MAGI).
MOOP swap in cliff-watch (and eventually in the baseline us-data imputation) to avoid double-count.
Why this matters for cliff-watch specifically
ACA subsidy cliffs are famously large — the subsidy-cliff removal through the ARPA/IRA enhanced PTC is a policy reform itself, so users simulating a return to pre-ARPA rules want the net-income impact to show up. With CPS-imputed MOOP alone, that reform shows up only as a premium_tax_credit drop on the benefits side, not as the corresponding premium spike on the costs side. Users see half the cliff.
Medicare Part B as well
The same follow-up should set up computed Medicare Part B:
Gated on Medicare enrollment (age ≥ 65 or disability-eligible). Current PolicyEngine-US uses medicare_part_b_premiums as a pure CPS-imputed input. Rules-based would respond to income cliffs (IRMAA tier crossings at MAGI thresholds) and to reforms to IRMAA breakpoints.
Suggested sequencing
Rules-based medicare_part_b_premium variable (cleanest — single statutory formula).
Rules-based marketplace_net_premium variable (requires Marketplace enrollment flag; more data work).
Part 3/4/5 of the architecture described in #8089. Filed as a dedicated issue because ACA has the largest MOOP magnitude among the rules-computable premium components.
Same shape as CHIP
PolicyEngine-US already computes
premium_tax_credit(the subsidy). What's missing is a net Marketplace premium:(Or more simply, applicant-contribution-based net premium for the benchmark silver plan.)
The CPS-imputed
health_insurance_premiums_without_medicare_part_bin PolicyEngine-US already includes whatever a Marketplace enrollee reported paying post-PTC. So on a baseline run, MOOP is roughly right. But a PTC reform (e.g., eliminate the enhanced PTC, shift applicable-figure curves) changes computed PTC while imputed MOOP stays put, and SPM resources don't move.Same swap the CHIP side needs:
with
imputed_residual = imputed_total − baseline_computed_sum(baseline computed at the CPS reference year's rules, 2024, mirroring the CHIP approach).What's needed, roughly
marketplace_net_premiumvariable in policyengine-us.Marketplacecoverage flag).Why this matters for cliff-watch specifically
ACA subsidy cliffs are famously large — the subsidy-cliff removal through the ARPA/IRA enhanced PTC is a policy reform itself, so users simulating a return to pre-ARPA rules want the net-income impact to show up. With CPS-imputed MOOP alone, that reform shows up only as a
premium_tax_creditdrop on the benefits side, not as the corresponding premium spike on the costs side. Users see half the cliff.Medicare Part B as well
The same follow-up should set up computed Medicare Part B:
Gated on Medicare enrollment (age ≥ 65 or disability-eligible). Current PolicyEngine-US uses
medicare_part_b_premiumsas a pure CPS-imputed input. Rules-based would respond to income cliffs (IRMAA tier crossings at MAGI thresholds) and to reforms to IRMAA breakpoints.Suggested sequencing
medicare_part_b_premiumvariable (cleanest — single statutory formula).marketplace_net_premiumvariable (requires Marketplace enrollment flag; more data work).household_health_costslist in policyengine-us (parallel to the existinghousehold_health_benefits; extends Net chip_premium from household_net_income #8088).Related