Repository navigation
Conversation
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>
- 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>
…claimable-filer-ptc
…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>
This was referenced Oct 11, 2026
…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>
Keep reviewed main federal and filing changes. Reapply only the PTC branch changes, moving the coverage-family benchmark to the extracted pre-filing calculation.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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_eligibleignored whether a filer could be claimed, andaca_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).Stacked on the federal claimable-filer branch (
claimable-filer-federal, itself on #10024, whose helpershead_or_spouse_is_dependent_elsewhereandhead_spouse_count_not_dependent_elsewherethis uses). Base this PR onclaimable-filer-federaluntil both merge.Federal change
is_aca_tax_family_member(new, person),is_aca_filer(new, person)is_aca_fileruses 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)tax_unit_sizeis unchanged.aca_fpg(new)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_fractionaca_fpg(wastax_unit_fpgfor 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_magimedicaid_magidirectly, 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)is_aca_ptc_eligibleadditionally requirespays_aca_premium. This lets CSR distinguish an insured fourth child from someone outside the tax family.aca_ptc_below_fpl_immigration_exceptionis_aca_coverage_family_member(new),is_aca_marketplace_enrollee(new)aca_child_index,pays_aca_premiumaca_ptc_slcsp(new), withaca_ptc_slcsp_family_tier_categoryand_multiplierslcsp_age_curve_amount_personprices, 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_slcspreadsslcspdirectly, including supplied values.slcspstill prices the whole enrollment.aca_ptc,aca_ptc_before_filing_gateaca_ptcfiling-gate wrapper remains intact. Itsaca_ptc_before_filing_gatecalculation usesaca_ptc_slcsp; the filing decision and take-up behavior from main remain in the dependency path.aca_ptc_coverage_family_premium(new),used_aca_ptccoverage_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_eligibleis_aca_ptc_eligiblevalues continue to apply to premium-paying enrollees.slcsp_family_tier_category,slcsp_family_tier_multiplieraca_ptc_700_fpl_cliff,aca_ptc_additional_bracket,aca_ptc_simplified_bracketreformsis_aca_ptc_eligibleand none changes 36B(c)(1)(D), so each keeps the gate. Without it the reforms would pay claimable filers.selected_marketplace_plan_premium_proxykeeps its annual input API and sumsmonthly_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: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
aca_ptc_slcspaca_ptc_slcspaca_ptc_slcsp. See reading 2aca_ptc_slcspaca_ptc_slcsp; eligibility comment updatedaca_ptc_slcspnm_premium_assistance_mih_eligiblenow needs a coverage family memberaca_ptc_slcspnj_njhps_member_eligiblenow needs a tax family member (it does not readis_aca_ptc_eligible, to keep the 400-600% band); cap usesaca_ptc_slcsp. #9515 also edits these two files (citations only); land it firstslcsp, since their premium is in the household's net premium. See reading 1Not changed: Colorado OmniSalud (undocumented enrollees; reads neither the credit nor its eligibility). The Basic Health Program payment proxy reads
aca_magi_fractionand so now uses the tax family's poverty line, as its documentation says it mirrorsaca_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.
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.pyexercise 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: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.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 inaca_fpgcan differ from the old prior-year size convention;aca_fpg.yamltests that correction. Role-less filer corrections and explicit supplied inputs are tested separately rather than covered by a universal equality claim.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 formatand 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_premiumfixture that supplied observed premium payment without Marketplace enrollment. Four existing cases acrossmarketplace_net_premium.yamlandused_aca_ptc.yamlnow explicitly supplyis_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
coregroup; the Makefile’s recorded CI timing/memory notes and workflow boundaries were checked, with no runner or group changes.Review
Review r3: responses
group & enrolled & is_childfor the coverage family and rank covered children inaca_child_indexfor 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.is_aca_marketplace_enrolleeagainst 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.slcsp_age_curve_amount_person, including positive and zero quotes for enrolled nonpayers, throughslcsp_age_curve_amount_person_uncapped, suppliedmedicaid_magiwhen no dependent income must be removed, and explicitly suppliedis_aca_ny_age_29_dependent_childand 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.is_aca_filerbetween 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.The main-merge structure is retained:
aca_ptcstill applies main's filing gate, andaca_ptc_before_filing_gatestill reads the coverage-family benchmark. Readers of every changed variable were audited. The d1228 readings are unchanged by these fixes.Review r4: responses
falseremains authoritative during family-tier repricing. The NY case with enrolled children aged 20/19/18/10 and the youngest suppliedfalsechanges 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 formatand 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)
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.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.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_levelwhere 42 CFR 600.305 uses household income for "the applicable family size".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).
On ordinary returns,
aca_magi(throughmedicaid_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).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
f9b55fc4dd05f1bed921a4dd06cb8c81f6ceb2c7after #10087's squash merge. The initial83e03a92f6merge had 10 conflicts; the later main refresh merged cleanly: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, andhi/dependent_exemption_reform_test.yaml: this PR had not changed them against its federal base.aca_ptc.pyfiling wrapper and applied this PR's coverage-family benchmark change inaca_ptc_before_filing_gate.py, where main moved the calculation.files_return_for_aca_ptcgate inca_premium_subsidy_eligible.pyand 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
35a2cbcbb9exactly 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 formatalso passed.🤖 Generated with Claude Code