Problem
aca_ptc currently returns zero for all years before 2024, even when a tax unit is ACA PTC eligible and the model has historical benchmark premium inputs for that year.
Evidence in the code:
policyengine_us/variables/gov/aca/ptc/aca_ptc.py defines a base formula that returns 0 and only applies the real calculation in formula_2024.
policyengine_us/parameters/gov/aca/state_rating_area_cost.yaml contains rating-area SLCSP values for historical years, including 2018-2023 for many rating areas, and uses gov.aca.benchmark_premium_uprating.
policyengine_us/parameters/gov/aca/benchmark_premium_uprating.yaml includes historical KFF average benchmark premiums from 2014 through 2025.
Reproduction
A simple 2023 household can be eligible and have a nonzero SLCSP, but still receives zero PTC:
from policyengine_us import Simulation
situation = {
"people": {
"p": {
"age": {"2023": 40, "2024": 40},
"employment_income": {"2023": 30_000, "2024": 30_000},
"is_tax_unit_head": {"2023": True, "2024": True},
}
},
"tax_units": {"tu": {"members": ["p"]}},
"families": {"f": {"members": ["p"]}},
"spm_units": {"spm": {"members": ["p"]}},
"households": {
"h": {
"members": ["p"],
"state_name": {"2023": "TX", "2024": "TX"},
"county_str": {"2023": "HARRIS_COUNTY_TX", "2024": "HARRIS_COUNTY_TX"},
}
},
}
sim = Simulation(situation=situation)
print("2023 eligible", sim.calculate("is_aca_ptc_eligible", 2023))
print("2023 slcsp", sim.calculate("slcsp", 2023))
print("2023 aca_ptc", sim.calculate("aca_ptc", 2023))
print("2024 eligible", sim.calculate("is_aca_ptc_eligible", 2024))
print("2024 slcsp", sim.calculate("slcsp", 2024))
print("2024 aca_ptc", sim.calculate("aca_ptc", 2024))
Current output:
2023 eligible [ True]
2023 slcsp [5452.8394]
2023 aca_ptc [0.]
2024 eligible [ True]
2024 slcsp [5773.5938]
2024 aca_ptc [5113.5938]
Expected behavior
For years where the model has the required premium, age curve, rating-area, eligibility, and required contribution percentage parameters, aca_ptc should apply the PTC formula instead of returning zero solely because the year is before 2024.
At minimum, the formula should probably start in 2018, since state_rating_area_cost.yaml appears to have rating-area premiums from 2018 onward. If contribution-rate parameters support earlier years, then the start date could be earlier.
Why this matters
This affects both household calculations and budget/backtesting analyses. Historical analyses currently understate household health benefits and federal ACA PTC spending for pre-2024 years, despite having much of the historical premium data needed to calculate the credit.
Possible fix
Move the existing formula_2024 logic into an earlier dated formula, such as formula_2018, after checking the availability of aca_required_contribution_percentage, SLCSP rating-area costs, age curves, and eligibility parameters for those years. Add a regression test showing nonzero 2023 PTC for an eligible marketplace household with nonzero SLCSP.
Problem
aca_ptccurrently returns zero for all years before 2024, even when a tax unit is ACA PTC eligible and the model has historical benchmark premium inputs for that year.Evidence in the code:
policyengine_us/variables/gov/aca/ptc/aca_ptc.pydefines a baseformulathat returns0and only applies the real calculation informula_2024.policyengine_us/parameters/gov/aca/state_rating_area_cost.yamlcontains rating-area SLCSP values for historical years, including 2018-2023 for many rating areas, and usesgov.aca.benchmark_premium_uprating.policyengine_us/parameters/gov/aca/benchmark_premium_uprating.yamlincludes historical KFF average benchmark premiums from 2014 through 2025.Reproduction
A simple 2023 household can be eligible and have a nonzero SLCSP, but still receives zero PTC:
Current output:
Expected behavior
For years where the model has the required premium, age curve, rating-area, eligibility, and required contribution percentage parameters,
aca_ptcshould apply the PTC formula instead of returning zero solely because the year is before 2024.At minimum, the formula should probably start in 2018, since
state_rating_area_cost.yamlappears to have rating-area premiums from 2018 onward. If contribution-rate parameters support earlier years, then the start date could be earlier.Why this matters
This affects both household calculations and budget/backtesting analyses. Historical analyses currently understate household health benefits and federal ACA PTC spending for pre-2024 years, despite having much of the historical premium data needed to calculate the credit.
Possible fix
Move the existing
formula_2024logic into an earlier dated formula, such asformula_2018, after checking the availability ofaca_required_contribution_percentage, SLCSP rating-area costs, age curves, and eligibility parameters for those years. Add a regression test showing nonzero 2023 PTC for an eligible marketplace household with nonzero SLCSP.