Skip to content

Keep a filer who can be claimed as a dependent out of the premium tax credit family, and apply each state premium program's rule - #10041

Draft
MaxGhenis wants to merge 37 commits into
mainfrom
claimable-filer-ptc
Draft

MaxGhenis wants to merge 37 commits into
mainfrom
claimable-filer-ptc

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Someone another taxpayer can claim as a dependent gets no premium tax credit, and a joint return where one spouse can be claimed computes the credit for the other spouse alone. The model applied neither rule: is_aca_ptc_eligible ignored whether a filer could be claimed, and aca_ptc, the benchmark premium, the poverty line, household income and the premium cap all counted the whole tax unit.

Input. The PR reads claimable_as_dependent_on_another_return (from #10024: a deduction for the person is allowable to another taxpayer, whether or not claimed). Form 1040 (2025) instructions, line 12a, p.33 has the box checked "If you or your spouse ... can be claimed as a dependent on someone else's return", with no refund-only carve-out, and Form 8962 line 1 keys on that box. The return still claims its dependents when the would-be claimant meets the refund-only filing exception (dependent_claimant_filing_exception; Form 1040 dependents worksheet, p.18; Publication 501's Dependent Taxpayer Test).

  • IRC 36B(c)(1)(D), "Denial of credit to dependents": "No credit shall be allowed under this section to any individual with respect to whom a deduction under section 151 is allowable to another taxpayer". 26 CFR 1.36B-2(b)(3) makes such an individual not an applicable taxpayer.
  • 26 CFR 1.36B-1(d)(2) (taxable years ending on or after 2020-12-31) defines the family as "the taxpayer, including both spouses in the case of a joint return, except for individuals who qualify as a dependent of another taxpayer under section 152", plus the dependents the taxpayer properly claims. IRC 152(b)(1) and Publication 501, p.11: "If you are filing a joint return and your spouse can be claimed as a dependent by another taxpayer, you and your spouse can't claim any dependents on your joint return."
  • Form 8962 instructions (2025), line 1, p.8: "if you are filing jointly and you checked the 'Someone can claim your spouse as a dependent' box on your tax return, you or your spouse is not included in the tax family size calculation". The 2021-2024 editions say the same (p.6 to p.7).
  • 26 CFR 1.36B-3(b)(2), (f)(1): the benchmark is the second-lowest-cost silver plan "offered to the taxpayer's coverage family", the family members enrolled that month.

Stacked on the federal claimable-filer branch (claimable-filer-federal, itself on #10024, whose helpers head_or_spouse_is_dependent_elsewhere and head_spouse_count_not_dependent_elsewhere this uses). Base this PR on claimable-filer-federal until both merge.

Federal change

Variable Rule now
is_aca_tax_family_member (new, person), is_aca_filer (new, person) A filer who cannot be claimed elsewhere; a dependent on the return when it has an applicable taxpayer and no filer is claimable outside the refund-only exception. A return whose every filer can be claimed has no family (36B(c)(1)(D)). is_aca_filer uses supplied or inferred head/spouse roles and completes an incomplete joint-filer set without an adult-age cutoff. It infers the oldest member, or the two oldest on a joint return, respecting supplied dependency hints when possible. The same inference identifies filers for household income. An age tie between a filer and dependent needs explicit head/spouse roles. A dependent another taxpayer could also claim stays in the family of the return that claims them.
aca_tax_family_size (new) Form 8962 line 1: the number of members. tax_unit_size is unchanged.
aca_fpg (new) Form 8962 line 4: the prior-year guideline for aca_tax_family_size. A return where every filer can be claimed has no tax family; it keeps the tax unit's guideline (a numerical convention, not a legal rule: the credit is $0 there, and readers that are not about the credit see the old value).
aca_magi_fraction Household income over aca_fpg (was tax_unit_fpg for the prior year, which also took the household size from the prior year; the size now comes from the tax year, as line 1 requires, which differs only when a prior-year size is supplied).
aca_magi Household income (1.36B-1(e)(1)) excludes tax-exempt interest and Social Security of dependents outside the tax family, while retaining both joint filers' MAGI additions. Return-level AGI still follows the model's general tax-role calculations; the ACA inference does not reconstruct it. With no out-of-family dependent it reads medicaid_magi directly, including a supplied value. When exclusion is necessary, it reconstructs AGI plus MAGI additions, removes the excluded amounts, then floors once at zero; this also handles signed Social Security. Medicaid calculations remain separate.
is_aca_ptc_eligible, is_aca_ptc_eligible_before_premium (new) Both require tax-family membership. The substantive eligibility variable includes the existing income and return-status requirements without the marginal-premium condition; is_aca_ptc_eligible additionally requires pays_aca_premium. This lets CSR distinguish an insured fourth child from someone outside the tax family.
aca_ptc_below_fpl_immigration_exception The lawfully present person must be in the tax family: "the taxpayer or a member of the taxpayer's family" (1.36B-2(b)(5)).
is_aca_coverage_family_member (new), is_aca_marketplace_enrollee (new) Coverage-family membership is Marketplace enrollment plus tax-family membership (1.36B-3(b)(2)). Enrollment is separate from marginal premium payment: a fourth covered child remains enrolled even though the three-child rating cap gives them no additional age-rated premium.
aca_child_index, pays_aca_premium The whole policy also ranks only Marketplace-enrolled children for its three-child premium limit. Adults and non-enrolled people receive the existing sentinel index 99; older children on employer coverage cannot remove a younger covered child's premium.
aca_ptc_slcsp (new), with aca_ptc_slcsp_family_tier_category and _multiplier The coverage family is priced separately, using its three oldest covered children in age-rated states (45 CFR 147.102(c)(1)) or its own family tier in NY/VT. Non-enrolled children use no ranking slots. Supplied slcsp_age_curve_amount_person prices, including positive and zero quotes for enrolled nonpayers, flow through an uncapped-price variable. Without a supplied quote, a child freed from the original family's cap is repriced. When every enrollee belongs to the tax family, aca_ptc_slcsp reads slcsp directly, including supplied values. slcsp still prices the whole enrollment.
aca_ptc, aca_ptc_before_filing_gate Main's aca_ptc filing-gate wrapper remains intact. Its aca_ptc_before_filing_gate calculation uses aca_ptc_slcsp; the filing decision and take-up behavior from main remain in the dependency path.
aca_ptc_coverage_family_premium (new), used_aca_ptc The credit cannot exceed the coverage family's enrollment premiums (1.36B-3(d)(1)(i)). Each month, allocate the selected plan premium by coverage_family_benchmark / (coverage_family_benchmark + other_family_benchmark), pricing the other enrollees separately; then sum the allocated monthly amounts (1.36B-3(a), (h)(1)). This applies to silver and bronze. The share is one when every enrollee is in the family, and the allocation is zero when no family member is enrolled.
marketplace_csr_eligible The model prices one policy per tax unit. Under 45 CFR 155.305(g)(3), every insured individual must satisfy the substantive PTC conditions for the shared policy to receive CSR. An enrolled claimable spouse blocks CSR even when the rating cap makes their marginal premium zero; an ordinary fourth covered child retains substantive eligibility. Supplied is_aca_ptc_eligible values continue to apply to premium-paying enrollees.
slcsp_family_tier_category, slcsp_family_tier_multiplier Shared functions price the requested enrollment group. Explicitly supplied family-child and NY age-29 predicates remain in the dependency graph, including for enrollees paying no marginal premium and returns with no claimable filer. Calculated family-child values retain the public premium-payment condition; separate-family repricing applies the uncapped child condition to calculated nonpayers.
aca_ptc_700_fpl_cliff, aca_ptc_additional_bracket, aca_ptc_simplified_bracket reforms Each overrides is_aca_ptc_eligible and none changes 36B(c)(1)(D), so each keeps the gate. Without it the reforms would pay claimable filers.

selected_marketplace_plan_premium_proxy keeps its annual input API and sums monthly_selected_marketplace_plan_premium_proxy. The monthly allocation uses the month-specific selected plan prices. When only an annual selected premium is supplied, the model distributes that total in proportion to the monthly selected-plan proxies; if those proxies are all zero, it distributes the total evenly. This timing assumption preserves the supplied annual amount; monthly premiums can be supplied through the new monthly variable when their timing is known.

Cost-sharing eligibility per person requires APTC eligibility (45 CFR 155.305(g)(1)), and 155.305(f)(1)(ii) requires "a member of the tax filer's family within the meaning of 26 CFR 1.36B-1(d)".

Worked cases (aca_ptc.yaml), $500 a month benchmark per enrollee, contiguous US, both spouses aged 30:

Household 2025 (MAGI $22,590) 2026 (MAGI $23,475)
Single, can be claimed $0 $0
Joint, one spouse can be claimed (either labelling) family 1, 150% FPL, 0%: $6,000 family 1, 150% FPL, 4.19%: $5,016.40
Joint, both can be claimed $0 $0
Joint, neither (control) family 2, 110% FPL: $12,000 family 2, 110% FPL, 2.1%: $11,507.03
Joint, one claimable, MAGI $18,000 119% FPL for one: $6,000 (control at 88%: $0)
Joint, one claimable whose claimant meets the refund-only exception, child ($250 a month), MAGI $30,000 family 2 (spouse and child), 146%: $9,000
Joint, one claimable, AGI $20,000, child with $20,000 tax-exempt interest household income $20,000 (was $40,000): $6,000
Lone 17-year-old filer, can be claimed (no head inferred) $0 (was $6,000)
Joint, one claimable, silver plan at 0.75 of benchmark ($9,000) credit used $4,500 (was $6,000), net premium $4,500; no CSR

The joint fixtures with a positive credit test the rule given the flag; see the note under the readings.

Before this PR, the joint one-claimable couple got the control's credit, and the single claimable filer got $6,000 (2025).

State premium programs, each checked against its own law

Program Its rule for an enrollee outside the federal tax family Change
Massachusetts ConnectorCare Requires APTC eligibility: 956 CMR 12.04(3)(a)2 to 12.04(2)(b) to 45 CFR 155.305(f); "Household" is "the tax filer and the individuals for whom a tax filer properly expects to claim a personal exemption" (12.03, p.4) Gate flows; wrap uses aca_ptc_slcsp
Connecticut Covered Connecticut Enrollees must be "eligible for premium and cost-sharing subsidies for a qualified health plan" (PA 21-2 (JSS) §16(b)(1), p.22) Gate flows; wrap uses aca_ptc_slcsp
Colorado Premium Assistance Payments "for Coloradans who receive the premium tax credit" (C.R.S. 10-16-1205(1)(b)(II), the payment authority Regulation 4-2-78 cites) Gate flows; residual cap uses aca_ptc_slcsp. See reading 2
Maryland premium assistance and Young Adult Subsidy Enrollee must be "a member of a tax filer's tax household" and the filer must meet the APTC requirements (COMAR 14.35.21.03A(1)) Gate flows (including the young-adult reduction); wrap uses aca_ptc_slcsp
California Premium Subsidy (c)(2) "Meets all eligibility requirements of the federal advance premium tax credit"; (d)(7)(B) "No state premium assistance shall be allowed ... to any individual who is claimed as a dependent of another return filer"; (d)(5) benchmark and (d)(10) family size have their 36B meanings (2026 Program Design, pp.2-3) Gate flows; subsidy uses aca_ptc_slcsp; eligibility comment updated
New Mexico Premium Assistance, base "qualify for the federal Premium Tax Credit" (2026 MAP manual, p.4) Gate flows; benchmark uses aca_ptc_slcsp
New Mexico Middle Income Household (above 400% FPL) "Meet all eligibility criteria for the federal PTC except for household income requirements" (Addendum, p.2) nm_premium_assistance_mih_eligible now needs a coverage family member
Vermont Premium Assistance "An individual or family eligible for federal premium tax credits under 26 U.S.C. § 36B" (33 V.S.A. 1812(a)(1)) Gate flows; cap uses aca_ptc_slcsp
New Jersey Health Plan Savings Treasury's 1332 addendum describes the program as for enrollees "otherwise eligible for the Advanced Premium Tax Credit" (p.8), written for its first plan year; Get Covered NJ: "Tax households with annual incomes up to 600%". No current NJ rule found addresses someone another taxpayer can claim, so this is an interpretation (reading 4) nj_njhps_member_eligible now needs a tax family member (it does not read is_aca_ptc_eligible, to keep the 400-600% band); cap uses aca_ptc_slcsp. #9515 also edits these two files (citations only); land it first
Washington Cascade Care Savings Policy §4(1) needs QHP eligibility, not APTC eligibility, and §4(2)'s exclusions do not include being claimable (2026 policy, p.11); Group 2 is "QHP-eligible residents ... not eligible for APTC Federal subsidies but eligible for CCS" at $250 PMPM (2026 methodology, pp.1, 5) A QHP-eligible enrollee outside the tax family moves from Group 1 ($55) to Group 2 ($250); the cap keeps slcsp, since their premium is in the household's net premium. See reading 1

Not changed: Colorado OmniSalud (undocumented enrollees; reads neither the credit nor its eligibility). The Basic Health Program payment proxy reads aca_magi_fraction and so now uses the tax family's poverty line, as its documentation says it mirrors aca_ptc; its enrollee premiums are unchanged (follow-up 3).

All modeled state programs start in 2026, so the state changes affect 2026 on.

2026 state cases (joint couple aged 30, one spouse claimable, MAGI $23,475, $500 a month benchmark each; federal credit $5,016.40), each under both labellings, with the nobody-claimable control and the both-claimable case: MA $983.60 (control $492.97), CT $983.60 ($492.97), CO $960 ($492.97), MD $983.60 ($492.97), NM $1,583.60 ($1,692.97), VT $352.13 ($352.13), NJ $240 ($0: control is below 138% FPL), WA $3,660 ($492.97); CA at MAGI $22,000: $785.92 ($462). Before this PR the model treated this couple as the control in every program.

Readings for Max

Readings 1–4 were accepted as built under d1228 and remain unchanged. Reading 5 records the additional methodology choice identified in r4.

  1. Washington, Group 2 poverty line. This PR measures the household's income against the tax family's poverty line for every Cascade Care member. The policy defines income as 36B(d)(2) household income and the FPL by 36B(d)(3)(B), but no retrieved WA source says which family size applies to a Group 2 member. Alternative: the tax unit's size for Washington only. The two readings differ only near the 250% ceiling.
  2. Colorado. This PR follows the statute (payments for "Coloradans who receive the premium tax credit"). Regulation 4-2-78 §4C defines an eligible enrollee as any QHP enrollee at or below 400% FPL, which would keep the claimable spouse in the count and cap: at the 2026 example above, $960 (this PR) against $1,308.
  3. Exchange "tax filer". 45 CFR 155.300 defines a tax filer as one expecting "that no other taxpayer will be able to claim him, her or them as a tax dependent". Read as "either spouse", an Exchange would deny advance payments to the whole couple, and the state wraps keyed to APTC eligibility with them. This PR follows the annual credit's per-member rule (1.36B-1(d)(2), Form 8962 line 1) for both.
  4. New Jersey. The NJHPS exclusion above is an interpretation of the program's federal alignment, not a rule found in current New Jersey authority.
  5. Timing of an annual-only selected premium (new in r4). 26 CFR 1.36B-3(a), (h) require monthly amounts but do not identify payment timing when only an annual premium is supplied. This PR weights that annual amount by monthly selected-plan price proxies; equal monthly amounts are an alternative. In the bronze example, the coverage-family allocation is $7,794.14 as built versus $7,845.60 with equal monthly amounts. This is an input-timing assumption for Max to consider; the code is unchanged.

Note on the input: a married person can be claimed only if the joint return is filed "only to claim a refund of income tax withheld or estimated tax paid", and Publication 501 Example 3 (p.11) holds that claiming a refundable credit defeats that. Applying that example to the premium tax credit is an inference. So a joint return that claims a positive credit while one spouse is claimable may not arise in practice; the model takes the flag as given and applies the line 1 rule, as the federal branch does for recovery rebates.

Invariants

The generated roleful returns in policyengine_us/tests/core/test_claimable_filer_ptc_invariants.py exercise these checks with Hypothesis in each year 2021-2026 (spouses claimable, actually claimed or neither, with and without the refund-only exception) and on a seeded population in 2025 and 2026, in Texas, New York, Vermont and the nine wrap states, reusing #10024's household builders. Separate YAML cases cover role-less minor filers, supplied inputs, changing monthly prices and empty enrollment:

  1. Swap invariance. Exchanging the two adults' head and spouse labels leaves the tax family size, aca_fpg, aca_magi, aca_magi_fraction, slcsp, aca_ptc_slcsp, aca_ptc, the coverage-family premium, the used credit, CSR eligibility, the number of eligible members and all nine state amounts unchanged.
  2. Identities. aca_tax_family_size = filers who cannot be claimed + (dependents if one filer is an applicable taxpayer and none is claimable outside the exception); no eligible person is outside the tax family; the generated benchmark is between zero and the whole enrollment's benchmark; ACA MAGI matches an independent income-removal calculation, including dependent additions and signed Social Security; used credit <= coverage-family premium <= selected premium; CSR requires every enrollee to satisfy the substantive PTC conditions even if they pay no marginal premium; no family member means no credit. For roleful returns where no filer can be claimed, benchmark, MAGI and family size retain the ordinary values. The current-year family size in aca_fpg can differ from the old prior-year size convention; aca_fpg.yaml tests that correction. Role-less filer corrections and explicit supplied inputs are tested separately rather than covered by a universal equality claim.
  3. Monotonicity. Marking another filer as claimed never raises the tax family size, never raises the benchmark while the same people are enrolled (checked person by person), and never raises the credit, with two intended exceptions, each tested in YAML: income crosses the 100% floor (below it for two, above it for one), or out-of-family dependents' income leaves household income. The test exempts exactly those two.

The seeded test also asserts it reaches the rule: returns with exactly one claimable filer and a positive credit, and in 2026 a positive state wrap.

Tests

649 tests passed across 45 files in the r4 rerun: all 35 merge-build files (562 tests) and ten additional dependency files (87 tests). All final file processes exited zero, and their logged passed counts match the expected-case manifest. The 22 r3 regressions and eight new r4 cases pass. The r4 cases showed six failures before the fix while both explicit-role controls already passed. make format and Ruff format/check passed. Tests ran one file per foreground process with the required four-thread caps; no microsimulations were run.

During r3 validation, the first attempt stopped at one existing marketplace_net_premium fixture that supplied observed premium payment without Marketplace enrollment. Four existing cases across marketplace_net_premium.yaml and used_aca_ptc.yaml now explicitly supply is_aca_marketplace_enrollee: true. Their dollar assertions are unchanged. No source code changed after that fixture failure; the resumed checks passed on the same source with the clarified inputs. The original child-index unit fixture also explicitly enrolls its six members; its expected ranking is unchanged.

The existing Python invariant file remains at 14 test functions and adds two families to each seeded-year simulation. During r3 validation, local macOS/Python 3.13 elapsed time including startup was 69.23 s before and 73.07 s after (pytest reported 38.54 s and 33.30 s); after-change peak RSS was 2.62 GiB. Before-change RSS was unavailable because the sandbox denied BSD time’s sysctl call. These are local measurements, not Linux CI results. This file stays in the existing Rest Python shard 2 core group; the Makefile’s recorded CI timing/memory notes and workflow boundaries were checked, with no runner or group changes.

Review

  • r1 (GPT-6.1 Sol, head 948f6be): REQUEST CHANGES, three blocking and four should-fix findings, all addressed in dc66236 and 44bfb6d. The blocking ones: the premium cap counted the whole policy, household income kept out-of-family dependents' income, and a lone claimable minor bypassed the gate. The should-fix ones: CSR on a shared policy, the invariant test's exemptions, the unchanged-when-nobody-claimed claim, and NJ evidence. The nit (duplicate reference) is fixed too.
  • r2 (GPT-6.1 Sol, head 44bfb6d): REQUEST CHANGES, three blocking and three should-fix findings. Follow-up fixes reached a4d9750; r3 then reviewed that head and identified the remaining defects addressed below.
  • r3 (GPT-6.1 Sol, head a4d9750, before the main merge): REQUEST CHANGES, three blocking and three should-fix findings. All six are addressed in this update; the PR remains a draft.
  • r4 (GPT-6.1 Sol, head 4d20fc9): REQUEST CHANGES, three P2 findings. The responses below address all three and disclose the annual-only premium timing choice; the PR remains a draft.

Review r3: responses

Finding Response and regression
1. Three-child allowance (blocking) Rank group & enrolled & is_child for the coverage family and rank covered children in aca_child_index for the whole policy, so only covered children consume the family's three ranking slots, as 45 CFR 147.102(c)(1) requires. The 2025 TX case with older children on other coverage now expects $2,483.70, including the enrolled youngest child; the whole-policy benchmark is $3,967.40.
2. CSR and an enrolled non-paying spouse (blocking) Check every is_aca_marketplace_enrollee against substantive PTC eligibility, separated from premium payment, under the shared-policy rule in 45 CFR 155.305(g)(3). The claimable fourth-ranked spouse makes CSR false; an ordinary fourth covered child remains eligible. The invariant and its enrollment signature now use actual enrollees and include both cases.
3. Supplied inputs bypassed (blocking) Preserve supplied slcsp_age_curve_amount_person, including positive and zero quotes for enrolled nonpayers, through slcsp_age_curve_amount_person_uncapped, supplied medicaid_magi when no dependent income must be removed, and explicitly supplied is_aca_ny_age_29_dependent_child and family-child predicates in tier pricing, including for nonpayers in the exact supplied month after the r4 completion below. Calculated family-child predicates remain premium-capped in the public variable; separate-family repricing uses the uncapped calculated condition for nonpayers. These preserve the existing price inputs while implementing the coverage-family benchmark and household-income rules in 26 CFR 1.36B-3(f) and 1.36B-1(e). Regressions cover the $6,000 mixed-family benchmark, $20,000 supplied MAGI and $12,000 NY benchmark; the existing supplied-price cases are retained.
4. Minor joint-filer fallback (should-fix) Share is_aca_filer between tax-family membership and MAGI, inferring two filers on role-less joint returns and respecting supplied dependency hints when possible. This preserves the joint-family treatment in 26 CFR 1.36B-1(d)(2), (e). Regressions cover ages 17/16, equal-age spouses in either order, explicit roles with an equal-age dependent, supplied dependency hints and retention of both filers' MAGI additions. Ages alone cannot resolve a filer/dependent tie; supply explicit head/spouse roles.
5. Monthly premium allocation (should-fix) Allocate each month's selected premium using that month's separate-family benchmarks, then sum, consistent with 26 CFR 1.36B-3(a), (h). The NY age-29-to-30 silver case now expects $5,876.99, replacing the annual-ratio result of $5,881.14. A bronze case also checks monthly prices and preservation of a supplied annual premium. The annual-only timing assumption is documented above.
6. Empty enrollment with a supplied premium (should-fix) Require an enrolled tax-family member before allocating any premium, consistent with the monthly coverage-family definition in 26 CFR 1.36B-3(b)(2). The employer-covered, both-claimable household with a supplied $7,000 annual premium receives a $0 coverage-family allocation.

The main-merge structure is retained: aca_ptc still applies main's filing gate, and aca_ptc_before_filing_gate still reads the coverage-family benchmark. Readers of every changed variable were audited. The d1228 readings are unchanged by these fixes.

Review r4: responses

Finding Response and regression
1. Washington Group 2 omits enrolled nonpayers (P2) Use Marketplace enrollment in both Group 2 readers, before the household cap, under Final PY2026 Cascade Care Savings policy §5(1)(c)–(d), p.14. The enrolled, fourth-ranked claimable spouse aged 19 now receives Group 2 assistance: household savings $2,640 → $5,640. The $6,693.12 residual cap does not bind.
2. Partially inferred joint return loses its minor filer (P2) Complete the joint-filer set when only one role exists, and use that set in family membership and MAGI. 26 CFR 1.36B-1(d)(2) includes both joint filers without an adult-age cutoff. Four YAML cases compare ages 18/17 with explicit-role controls: the claimable-18 case changes from [false,false] / $0 to [false,true] / $6,000; the claimable-17 case changes from [true,true] / $12,000 to [true,false] / $6,000. Both match their controls.
3. Supplied family-child predicate loses precedence for nonpayers (P2) Detect explicitly supplied family-child predicates separately from calculated, premium-capped values, following the uncapped-price input handling. An enrolled nonpayer's supplied false remains authoritative during family-tier repricing. The NY case with enrolled children aged 20/19/18/10 and the youngest supplied false changes from $850/month → $1,425/month. A second case supplies the predicate only in January: January is $1,425, while February retains its calculated $850 benchmark.

The three-child authority is 45 CFR 147.102(c)(1); 26 CFR 1.36B-3(f)(4) concerns family members residing in different locations. The four accepted d1228 readings and the annual-premium allocation code remain unchanged. The additional annual-only timing choice appears as reading 5 above.

R4 validation: 649 passed across 45 files, one foreground process per file with all required thread caps. All eight new r4 cases pass (six failed before; two explicit-role controls already passed), and a separate replay of the six r3 witness groups passes 20 cases across eight files. Existing YAML expectations are unchanged. make format and Ruff passed before every commit. No microsimulations were run.

R4 head: 09544440a74f18410a67a8d13a826746bf0372ea.

Microsimulation impact

Pending: real microsimulations on the default dataset, 2025 and 2026, base (claimable-filer-federal merged with main) against this branch merged with main.

Follow-ups (separate work)

  1. Alaska and Hawaii households given a single year get the contiguous-US ACA poverty line, because the guideline lookup reads the prior year's state (pre-existing in tax_unit_fpg(period.last_year); this PR keeps that read so it changes nothing else). Offered as a separate task.

  2. California's applicable percentage at exactly 150% FPL is 3.19% where the program design's table gives 0% ("100% up to 150%"), from searchsorted(side="right"). Offered as a separate task.

  3. Basic Health Program: the payment proxy's reference premium should cover only the hypothetical PTC coverage family: the payment is "95 percent of the premium tax credit for which the eligible individual would have qualified" (42 CFR 600.605(a)(1)), and BHP eligibility reads medicaid_income_level where 42 CFR 600.305 uses household income for "the applicable family size".

  4. The default dataset sets the dependency inputs for nobody, so none of the claimable-filer rules move a microsimulation. Offered as a separate task (microcosm).

  5. On ordinary returns, aca_magi (through medicaid_magi) adds dependents' tax-exempt interest and all their Social Security, but 1.36B-1(e)(1)(ii) counts another family member's income only if they "are required to file a return". Pre-existing and unchanged here (this PR removes only out-of-family dependents' amounts).

  6. Generic federal AGI role inference still treats a minor without an explicit spouse role as a tax-unit dependent, excluding their earnings. ACA filer inference here completes family membership and MAGI-addition retention; it does not reconstruct IRS AGI, deductions or loss limits. A separate generic-role correction should compare inferred 18/17 and 17/16 joint returns against explicit-role controls and preserve supplied AGI/MAGI precedence.

axiom: us:statutes/26/36B/c/1/D queued (TheAxiomFoundation/rulespec-us#1627)

Merge with main after #10087

Merged main through f9b55fc4dd05f1bed921a4dd06cb8c81f6ceb2c7 after #10087's squash merge. The initial 83e03a92f6 merge had 10 conflicts; the later main refresh merged cleanly:

  • Took main unchanged for nm_medical_expense_credit.py, nm_medical_expense_credit.yaml, ca_cdcc_relevant_expenses.yaml, va_low_income_tax_credit_eligible.py, va_low_income_tax_credit_eligible.yaml, and hi/dependent_exemption_reform_test.yaml: this PR had not changed them against its federal base.
  • Kept main's complete Maryland premium-assistance and New Mexico MIH eligibility test files, then appended this PR's original claimable-family cases.
  • Kept main's aca_ptc.py filing wrapper and applied this PR's coverage-family benchmark change in aca_ptc_before_filing_gate.py, where main moved the calculation.
  • Kept main's files_return_for_aca_ptc gate in ca_premium_subsidy_eligible.py and restored this PR's dependent-exclusion explanation.

Also retained main's deletion of two released federal changelog fragments. The merge resolution matches the original PR diff against 35a2cbcbb9 exactly in added/removed lines, allowing the ACA formula's move; main's reviewed filing/take-up changes remain intact.

Verification also repaired fixture inputs without changing assertions or model rules: supplied intended claimability throughout the mixed seeded batch; raised the fourth-child household's ACA MAGI from $40,000 to $50,000, above its $41,960 poverty line, to avoid main's coverage-gap gate; and supplied consistent base premiums and age multipliers for 20 partial-family pricing cases in six YAML files. The monthly family-tier and legacy New Mexico MIH fixtures also explicitly supply Marketplace enrollment, now separate from paying a premium; this preserves the filing, income-boundary, and in-effect gate checks. These were the merge-build fixture adjustments; the subsequent round-3 changes are recorded above.

Merge-build validation before the round-3 fixes: 537 tests passed across all 35 changed test files, one file per process with the required four-thread caps. Ruff 0.15.5 format/check passed for all 38 changed Python files; make format also passed.

🤖 Generated with Claude Code

MaxGhenis and others added 12 commits October 8, 2026 11:03
The federal standard deduction and 17 state formulas read only whether the
tax-unit head is claimed elsewhere, so a joint return where one spouse can be
claimed was taxed differently depending on which spouse was labelled head.
Each formula now applies its jurisdiction's rule for that case (either spouse,
single filers only, per spouse, or only when every filer is claimed), using
two new label-independent helpers. Adds swap-pair YAML cases and a Hypothesis
property test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… barred

The New Mexico, Maine and Hawaii renters gates counted filers who are not
claimed elsewhere, so a tax unit with neither a head nor a spouse (252 in
the default dataset) looked like one whose every filer was claimed. A new
helper, every_filer_is_dependent_elsewhere, requires a claimed filer and no
unclaimed one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ss EITC

- Hawaii's dependent standard deduction uses earned income net of the
  deductible part of self-employment tax, as the N-11 worksheet does.
- New Mexico's medical care credit needs a filer who is both 65 or older
  and not a dependent when a filer is a dependent elsewhere (NMSA 7-2-18.13).
- The federal EITC without a qualifying child requires that no filer can be
  claimed as a dependent (IRC 32(c)(1)(A)(ii)(III), Publication 596), so
  Missouri's working family credit no longer reaches such a couple.
- Hawaii's food/excise credit keeps minor children receiving public support
  (HRS 235-55.85(c)) on a joint return where one spouse can be claimed.
- Comments label the readings the law does not settle, and the property
  test covers the EITC and the food/excise exemption amount.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… meaning

- The federal and Oregon dependent worksheets use earned income net of the
  deductible part of self-employment tax, as Hawaii's now does.
- Hawaii's food/excise minor-child count excludes children who can be
  claimed by another taxpayer and the filers themselves (Form N-311 line 3).
- claimed_as_dependent_on_another_return documents what it stands for: a
  §151 deduction for the person is allowable to another taxpayer, so a
  person whose would-be claimer files only for a refund is not one
  (Publications 501 and 596); rules on actually being claimed read it too.
- Hawaii's renters comment labels the mixed joint reading as an inference;
  the Hawaii dependent threshold cites HRS 235-2.4(a)(3) on its page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A filer who can be claimed on another return is treated as having no
dependents (IRC 152(b)(1); on a joint return either spouse counts) and has no
personal exemption (IRC 151(d)(2)); one who is claimed gets no education
credits (25A(g)(3)), student loan interest deduction (221(c)) or recovery
rebate (6428(d)(2), 6428A(d)(2), 6428B(c)(2)). The model read none of these.
Now the child tax credit and credit for other dependents, the under-13 child
and dependent care qualifying person, exemptions_count and its RI, DE, OH, OR,
WI, HI and NM readers, the recovery rebates, the education credits and the
student loan interest deduction apply them symmetrically for joint returns.
Georgia keeps its own counts; the HI, WI and Treasury exemption reforms
follow the corrected count.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…it family

IRC 36B(c)(1)(D) excludes anyone another taxpayer can claim from being an
applicable taxpayer, and 26 CFR 1.36B-1(d)(2) leaves such a spouse out of a
joint return's family. Add is_aca_tax_family_member and aca_tax_family_size,
measure household income against the poverty line for that family (aca_fpg,
aca_magi_fraction), gate is_aca_ptc_eligible and the below-FPL immigration
exception on it, and price the credit on the coverage family's benchmark
(aca_ptc_slcsp, which equals slcsp whenever every enrollee is in the family).
The NY/VT family-tier logic becomes shared functions so the benchmark can
apply it to the coverage family. The three ACA reforms that override
is_aca_ptc_eligible keep the gate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e tax family

Massachusetts, Connecticut, Colorado, Maryland, California, New Mexico and
Vermont require each enrollee to be eligible for the federal credit, so the
gate flows through is_aca_ptc_eligible and their wraps use the coverage
family's benchmark. New Mexico's Middle Income Household component and New
Jersey Health Plan Savings require every federal criterion except income, so
they now read the tax family too. Washington's Cascade Care Savings pays its
non-federally-subsidized amount (Group 2) to a QHP-eligible enrollee without
a federal subsidy, so a claimable enrollee moves from Group 1 to Group 2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 12 commits October 10, 2026 09:35
- Child and dependent care: childcare expenses do not count on a return with a
  claimable filer unless a child under 13 still qualifies (IRC 21(b)(2)(A)(ii)).
- Tuition and fees deduction: not allowed to a filer who can be claimed (IRC
  222(c)(3)), so the education credit bar no longer makes such a filer eligible.
- Recovery rebates: the Armed Forces exception waives the identification rule
  only, not the exclusion of a spouse who is another taxpayer's dependent.
- Georgia: the contributed refundable credit and SB 520 reforms count the same
  children as ga_ctc_potential through a new ga_ctc_eligible_child.
- Education credits and student loan interest read the claimed input directly,
  since IRC 25A(g)(3) and 221(c) turn on an actual claim.
- One reference per source document; quote IRC 24(h)(4)(A) exactly.
- Tests: mixed-recipient care, tuition deduction, military rebates, Georgia
  refund cap, and the swapped New Mexico rebate case; the property test now
  covers the state readers of the exemption count.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	policyengine_us/tests/policy/baseline/gov/states/oh/tax/income/exemptions/personal/oh_personal_exemptions_eligible.yaml
#10024 now separates three facts: is claimed, can be claimed, and the would-be
claimant's filing exception.

- IRC 152(b)(1) gates (child tax credit, credit for other dependents, under-13
  care child and its expenses, dependents in exemptions_count, ARPA dependents,
  Ohio dependents, the Hawaii and Wisconsin reforms) read
  head_or_spouse_is_dependent_elsewhere_without_filing_exception, so a filer
  within the Publication 501 exception keeps their dependents.
- Own exemptions, recovery rebates and the tuition deduction read claimability.
- Education credits and student loan interest keep reading the claimed input.
- Tests: the filing exception and a filer who can be claimed but is not.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#10024's food/excise credit, Act 115 rebate and renters credit took claimable
filers off exemptions_count themselves. exemptions_count now leaves them out
(and, outside the filing exception, the return's dependents), so those credits
read it as it is; the filing-exception cases were one exemption short.

The renters credit also leaves out a dependent who can be claimed by another
taxpayer (Schedule X counts only people who cannot be), as the food/excise
credit already did.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Education credits: a dependent student is not eligible on a return whose
  filer can be claimed outside the filing exception (IRC 25A(f)(1)(A)(iii),
  152(b)(1)); the filer's own eligibility still turns on an actual claim.
- Recovery rebates: no credit when every filer is a dependent of another
  taxpayer (IRC 6428B(a)); the CARES and CAA child prerequisite is a spouse
  with a valid SSN, whether or not that spouse is an eligible individual.
- Child and dependent care: cdcc_qualifying_childcare_expenses holds the
  expense rule, and the single-parent work requirement reform and California's
  expenses read it.
- References: Georgia HB 136 page 3; one entry per recovery rebate statute;
  quote IRC 24(h)(4)(A) exactly in the test comment.
- Tests: dependent students, the two rebate cases, the reform and California
  expenses, and the Hawaii, Wisconsin and Treasury reforms with a claimable
  filer under both labellings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Education credits: is_barred_from_education_credits_by_dependency holds the
  claimed-filer and dependent-student rules; both eligibility formulas and the
  reconciliation SSN reform's Lifetime Learning Credit read it, so the reform
  no longer turns a barred student's tuition into that credit.
- Child and dependent care: childcare counts when any child under 18 is still a
  qualifying individual, so an incapacitated child aged 13 to 17 keeps it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Setting meets_eitc_identification_requirements on one person made it an input
for every person, so the other spouse lost their SSN too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…role-less units

- is_aca_tax_family_member reads claimable_as_dependent_on_another_return
  (#10024's split input: 36B(c)(1)(D) and 1.36B-1(d)(2) turn on being
  claimable, and Form 1040 line 12a, which Form 8962 line 1 keys on, has no
  refund-only carve-out). The return keeps its dependents when the would-be
  claimant meets the refund-only filing exception (Pub 501, Dependent
  Taxpayer Test), a return with no applicable taxpayer has no family, and a
  tax unit with neither a head nor a spouse uses each member's own
  claimability (a lone claimable minor no longer gets the credit).
- aca_magi leaves out the tax-exempt interest and Social Security of the
  return's dependents who are outside the tax family (26 CFR 1.36B-1(e)(1)).
- used_aca_ptc is capped at the coverage family's share of the selected plan
  premium (new aca_ptc_coverage_family_premium; 26 CFR 1.36B-3(d)(1)(i),
  (h)(1)), not the whole policy's premium.
- marketplace_csr_eligible applies 45 CFR 155.305(g)(3): the model prices one
  policy per tax unit, and a policy that also covers an enrollee without
  credit eligibility gets no cost-sharing reductions.
- aca_fpg documents that it sizes the family for the tax year; the NJHPS
  exclusion is labelled an interpretation; one reference per source in
  is_aca_coverage_family_member.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
YAML: refund-only exception (family keeps the child), single claimable filer
with the exception (no family), claimable but not claimed, lone claimable
and unclaimed 17-year-old filers, household income without an out-of-family
child's tax-exempt interest, the coverage-family premium cap (silver and
bronze), CSR under the family-policy rule, Colorado's binding residual
($420), and the tax year's family size against a supplied prior-year size.
Test inputs now use claimable_as_dependent_on_another_return.

Property test: Hypothesis runs every year 2021-2026 and draws claimable-but-
unclaimed spouses and the filing exception; the credit's monotonicity
exemption is limited to crossing the 100% floor or dependents' income leaving
household income; the benchmark check compares enrolled people, not counts;
new identities for household income, the premium cap and CSR.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…cation, MAGI floor

- A tax unit with neither a head nor a spouse is filed by its oldest member.
  When that member can be claimed elsewhere, nobody is in the tax family.
  Before, a claimable 17-year-old filing with an infant got $12,000.
- The coverage family is priced on its own. Its children are ranked for the
  three-oldest-children rule (45 CFR 147.102(c)(1)), and its family tier is
  built from its own members.
- A shared premium is allocated by each family's benchmark (26 CFR
  1.36B-3(h)(1)). The denominator is the coverage family's benchmark plus the
  benchmark of the enrollees outside it, not the whole policy's tier. An empty
  coverage family gets no share of the premium.
- Out-of-family dependents' tax-exempt interest and Social Security are
  removed before the single zero floor. A negative benefit no longer cuts
  household income.
- is_aca_marketplace_enrollee (enrolled) is split from pays_aca_premium
  (charged an age-rated premium). The family-tier child tests no longer
  depend on payment.
- Tests: YAML for each case under both head/spouse labellings. The property
  test now gives dependents tax-exempt interest and Social Security. It checks
  aca_magi against an expectation built from the inputs, and it exempts only
  that removal from monotonicity. Monotonicity runs under Hypothesis in every
  year 2021-2026. The "unchanged" identities apply only to returns with a
  head or spouse.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Base automatically changed from claimable-filer-federal to main October 16, 2026 06:10

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant