Repository navigation
Conversation
…credit The federal premium tax credit counted in household net income only when gov.simulation.include_health_benefits_in_net_income was on, which it is not by default. A reform to the credit then moved neither net income nor policyengine.py's budgetary impact. household_refundable_tax_credits now adds premium_tax_credit_in_force: the assigned credit, a refundable credit under 26 U.S.C. 36B, zeroed like the other federal refundable credits in a year the federal income tax is abolished. It doesn't go in income_tax, which stays what the return shows (most of the credit is paid in advance to the insurer) and what SPM resources net; SPM resources already count the credit through the marketplace premium net of it. The credit leaves the health-benefits list, and household_net_income_including_health_benefits subtracts it, so it is never counted twice. Tests whose households have a credit now count it: each such case names the credit as an output. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…l rate The roommate marginal tax rate tests and the zero-rate capital gains response test check mechanics the premium tax credit's phase-out would blur, so their households now have employer coverage. A separate case pins the phase-out: a single $60,000 earner in 2024 faces 12% + 7.65% + 8.5% = 28.15%. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Household net income now computes the premium tax credit for every household, and the credit's FPL fraction read the prior year's poverty guideline, so a 2015 household computed 2014 values, before the first modeled year (test_irmaa_first_modeled_year). For coverage in the first modeled year, the coverage year's guideline now stands in, as Colorado CCAP reads its parameters at the start of that year. The estate income invariant and the Social Security COLA differential check net income against tax-only arithmetic and main's literals, so their filers have employer coverage. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
An independent review at 1. With 2. Two smaller points:
|
|
A household from the 2017 cliffs analysis shows finding 1 on PolicyEngine US 2.116.0: a single Texas adult aged 40 in 2025, with wages of $30,000 and then $31,000.
Counting the credit once gives $709.50. At this PR's head the first $94 arrives through |
Summary
This PR counts the federal premium tax credit in household net income as a refundable tax credit. Until now it counted only when
gov.simulation.include_health_benefits_in_net_incomewas on, and that flag is off by default. So with default settings a reform to the credit moved neither household net income nor the budget. policyengine.py's budgetary impact is built from household taxes and benefits, plus the cost of Medicaid, CHIP and the Medicare Savings Programs, and the credit appeared in none of them. In the app such a reform scored $0 and showed no gains by decile, no winners and no change in inequality.What changes
household_refundable_tax_creditsaddspremium_tax_credit_in_force, beside the federal, state and local refundable credits. The new variable is the assigned credit (assigned_aca_ptc), a refundable credit under 26 U.S.C. 36B. Like the other federal refundable credits, it is zero in a yeargov.contrib.ubi_center.flat_tax.abolish_federal_income_taxabolishes the federal income tax. The credit now reacheshousehold_net_incomeandhousehold_taxthe way the EITC and refundable CTC do, whether or not health benefits count.income_tax. Most of the credit is paid monthly to the insurer in advance, and the return only reconciles the difference (net_premium_tax_credit, Form 8962 line 26).income_taxstays what the return shows. This keeps the household calculator and API partners from reporting the credit as a refund at filing, and it keeps federal income tax totals comparable to IRS and CBO figures, which book advance payments as outlays.marketplace_net_premium, since Decompose SPM MOOP premiums #8178). They subtractincome_tax, which this PR leaves alone.assigned_aca_ptcleaves thegov.household.household_health_benefitslist, so it counts once when the flag is on.household_net_income_including_health_benefitssubtractspremium_tax_credit_in_force, sincehousehold_net_incomeandhealthcare_benefit_valueboth count it now. Its value, and the marginal rate built on it, are unchanged.healthcare_benefit_valuestill includes the credit as the value of coverage.test_irmaa_first_modeled_year). For coverage in the first modeled year, the coverage year's guideline now stands in, as Colorado CCAP reads its parameters at the start of that year. No test pins a 2014 or 2015 credit.Effects
marginal_tax_ratenow includes the credit's phase-out and the 400% FPL cliff.household_net_income,household_tax,household_refundable_tax_credits, the health aggregates ormarginal_tax_rate.Tests
household_refundable_tax_credits.yaml:household_net_income.yaml: net income and household tax;household_net_income_including_health_benefits.yaml: the credit counts once;marginal_tax_rate.yaml: a single $60,000 earner in Texas in 2024 faces 12% + 7.65% + 8.5% = 28.15%, the enhanced schedule's phase-out above 400% FPL.premium_tax_credit_in_forceas an output, so the difference shows:test_marginal_tax_rate_coverage.py);household_health_benefits.yaml: with the flag on, the health benefits no longer include the credit.test_household_spm_resource_parity.py: the one-person reconciliation takes the credit out of the household side, as one of the items the two measures define differently.test_aggregate_list_integrity.pyadds the new variable to the household tax totals that reforms mustn't redefine.Checks run before pushing, on Modal (the laptop hasn't the memory):
All pass after the updates above. A run of 30 other Python test files failed the same tests on this branch as on main, from files the Modal run didn't mount (notebooks and CI config). CI runs the full suites.
axiom: n/a: accounting aggregate (household net income), not a statutory provision
🤖 Generated with Claude Code