Problem
PR #7753 proposes gating aca_ptc on tax_unit_is_filer — requiring a tax unit to be a filer before they can receive the Premium Tax Credit. This has the causal direction backwards.
How ACA PTC actually works
- Person is eligible for marketplace insurance
- Person enrolls on the marketplace → receives Advanced PTC (APTC) as a monthly premium reduction
- Receiving APTC creates a legal obligation to file a tax return to reconcile the credit (IRC § 36B)
- Person files → final PTC is computed on their return
The correct causal chain is: ACA enrollment → filing obligation, not filing → ACA eligibility.
Why this matters for microsimulation
In policyengine-us-data's calibration pipeline, we apply takeup draws for takes_up_aca_if_eligible (do they enroll?) and would_file_taxes_voluntarily (would they file if not required?). If aca_ptc is gated on is_filer, then tax units that enroll on the marketplace but wouldn't otherwise file voluntarily get $0 PTC — even though their enrollment itself obligates them to file.
This created a persistent mismatch between the calibration matrix (X@w) and the simulation output (sim.calculate) in policyengine-us-data, because the two paths handled the interaction differently.
Proposed fix
PR #7754 adds takes_up_aca_if_eligible as an OR condition in tax_unit_is_filer:
return required | files_for_credits | files_voluntarily | files_for_aca
This means ACA marketplace enrollment implies filing, which is the correct causal direction. The * is_filer gate proposed in #7753 becomes unnecessary — ACA enrollees will always pass it.
Recommendation
Problem
PR #7753 proposes gating
aca_ptcontax_unit_is_filer— requiring a tax unit to be a filer before they can receive the Premium Tax Credit. This has the causal direction backwards.How ACA PTC actually works
The correct causal chain is: ACA enrollment → filing obligation, not filing → ACA eligibility.
Why this matters for microsimulation
In policyengine-us-data's calibration pipeline, we apply takeup draws for
takes_up_aca_if_eligible(do they enroll?) andwould_file_taxes_voluntarily(would they file if not required?). Ifaca_ptcis gated onis_filer, then tax units that enroll on the marketplace but wouldn't otherwise file voluntarily get $0 PTC — even though their enrollment itself obligates them to file.This created a persistent mismatch between the calibration matrix (X@w) and the simulation output (sim.calculate) in policyengine-us-data, because the two paths handled the interaction differently.
Proposed fix
PR #7754 adds
takes_up_aca_if_eligibleas an OR condition intax_unit_is_filer:This means ACA marketplace enrollment implies filing, which is the correct causal direction. The
* is_filergate proposed in #7753 becomes unnecessary — ACA enrollees will always pass it.Recommendation