Skip to content

Apply Colorado, Connecticut, Illinois and Indiana rules for a filer who can be claimed as a dependent - #10049

Open
MaxGhenis wants to merge 35 commits into
mainfrom
claimable-filer-co-ct-il-in
Open

MaxGhenis wants to merge 35 commits into
mainfrom
claimable-filer-co-ct-il-in

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Absent the filing exception described below, a return on which the filer, or on a joint return either spouse, can be claimed as a dependent on another return has no dependents (IRC 152(b)(1); Publication 501, Dependent Taxpayer Test), and a childless filer who can be claimed gets no EITC (IRC 32(c)(1)(A)(ii)(III)). Colorado, Connecticut, Illinois and Indiana build credits, exemptions and deductions on those rules, but several formulas omitted the required filer-dependency checks.

The federal claimable-filer changes in #10087 merged on 2026-10-16, and this PR now targets main. The rules read the merged federal inputs the way their formulas do: "no dependents" (IRC 152(b)(1)) and the childless EITC bar read head_or_spouse_is_dependent_elsewhere_without_filing_exception, so the Publication 501 exception (the would-be claimant is not required to file and files at most for a refund) restores the dependents; rules that turn on an actual claim read claimed_as_dependent_on_another_return. A companion PR applies the same rules in DC, Georgia and Idaho: #10050.

Formula Rule now Source
co_eitc (ITIN and under-25 routes) No childless credit when either filer can be claimed; a claimable filer with a qualifying child keeps it C.R.S. 39-22-123.5(2.5) pays the credit the filer "would have been allowed, but for" a missing SSN; (2.7) pays the credit "allowed under section 32 (n)(1)" (HB23-1112, p.2-3). Neither waives the dependency bar.
co_ctc_qualifying_child (2022-2023) No child on such a return The credit is a share of the federal credit claimed by the resident individual (HB23-1112, p.4).
co_ctc_eligible_child (2024+) A claimable filer keeps the credit for an otherwise eligible IRC 152(c) qualifying child C.R.S. 39-22-129(2)(a)(II), (4.5) defines the child through IRC 152(c), without requiring allowable dependent status (HB23-1112, p.4); see reading 1.
co_family_affordability_credit A claimable filer keeps the credit for an otherwise eligible IRC 152(c) qualifying child C.R.S. 39-22-130(2)(a), (3) incorporates the statutory child definition (HB24-1311, p.3); see reading 1.
co_low_income_cdcc Counts only children under 13 who satisfy independent state dependency and federal child care qualifying-person conditions; a claimable filer has none, including incapable children, absent the filing exception C.R.S. 39-22-119.5(2)(b), (3)(a)(III)-(IV) separately requires IRC 152(a)(1) dependency and hypothetical IRC 21 eligibility. The federal disability exception does not waive the independent state requirement; see reading 1.
ct_property_tax_credit_eligible Through 2021, the under-65 route needs a dependent the return can validly claim C.G.S. 12-704c(b)(2): "for the taxable years commencing January 1, 2017, to January 1, 2021, inclusive", only a resident 65 or older or one "validly claiming one or more dependents"
ct_child_tax_rebate No child on such a return P.A. 22-118 sec. 411: a child claimed as a dependent on the 2021 federal return (TSSB 2022-5)
il_dependent_exemption None on such a return 35 ILCS 5/204(c): one for each exemption "allowable ... under Section 151"
il_personal_exemption_eligibility_status, il_personal_exemption A claimable but unclaimed filer retains the basic amount; an actually claimed filer loses it only when Illinois base income exceeds that amount, subject to the separate exemption income limit 35 ILCS 5/204(b), (g) (P.A. 103-9, p.357-360); see reading 3.
il_eitc (ITIN and age-18 extension) No childless credit when either filer can be claimed 35 ILCS 5/212; 2025 Schedule IL-E/EITC instructions, p.5, question 6: "Can you be claimed as a dependent ... Yes. STOP"
il_ctc Unchanged in behavior: a claimable filer keeps the credit for their own IRC 152 qualifying child (references and comment corrected to section 244) 35 ILCS 5/244(d): "qualifying child" has its IRC 152 meaning, which needs no allowable dependency; the 2026 draft instructions, p.2 say "at least one qualifying child"; see reading 2
il_income_tax_rebate_eligible, il_income_tax_rebate (2022 rebate on 2021 returns) A filer actually claimed elsewhere is ineligible (reads the claim input, so a filer who can be claimed but is not keeps it); a joint return keeps $100 while one spouse is not claimed; no per-dependent amount on a return with a claimable filer P.A. 102-0700 sec. 212.1(a), p.131-132: a taxpayer "who is claimed as a dependent on another individual's return for that year, is ineligible"; see reading 4
in_base_exemptions Each filer keeps $1,000; dependents count only when no filer can be claimed Information Bulletin 117, p.2: the own exemption stays "even if the individual can be claimed as a dependent"; 2025 IT-40 instructions, p.24 (state-authored copy; forms.in.gov blocks scripted downloads): "Could you, or your spouse if filing jointly, be claimed as a dependent on someone else's tax return? ... Yes. STOP. You cannot claim any dependents."
in_is_qualifying_dependent_child (additional and adoption exemptions) No child on such a return Same
in_nonpublic_school_deduction None on such a return Information Bulletin 107, p.1: a child who "qualifies as a dependent" under IRC 152

The contributed Illinois and Indiana dependent exemption reforms replace two of these formulas; at their default parameters they now match the baseline for a claimable filer (Indiana's reform also stops moving a barred child into its personal portion), with regression cases under both joint labellings.

Rows from the audit that need no change here:

  • For ordinary children subject to the dependent-taxpayer bar, Colorado's regular child care credit is already zero through its federal-credit input (co_cdcc); the federal incapacity exception remains available. Connecticut's and Indiana's EITCs match federal eitc, gated in Make rules for a filer claimed elsewhere independent of which spouse is labelled head #10024. The federal student loan interest deduction that all four states start from also already applies its bar. YAML regression cases cover the Colorado credit and Connecticut and Indiana EITCs.
  • Connecticut's post-2021 property credit: the audit flagged an obsolete age/dependent prerequisite from 2022, but age_threshold drops to 0 in 2022, so every filer qualifies, which matches 12-704c(b)(2)'s "2017, to January 1, 2021, inclusive". No bug.
  • Illinois' K-12 education credit uses custodian status, not dependency.

Not modeled (no new programs here): Colorado's property tax, rent and heat rebate (separate application, "Were you claimed as a dependent"), and Indiana's $200 fallback automatic refund (IC 4-10-22-4.5, actually claimed for 2022).

Readings

These readings apply Max's statute-first ruling of 2026-10-19: the statute controls when forms or instructions conflict; forms fill gaps where the statute is silent. The three Colorado and Illinois items in the statute-backlog spec are resolved below. The remaining readings keep their existing behavior. No in-scope item is tied to d1741, d1742 or d1744, and this PR leaves the provisions protected by those decisions unchanged.

  1. Colorado paired reading.

    us-co:claimable-filer-child-and-family-credits

    Changed: Removed the draft's filer-claimability exclusions from co_ctc_eligible_child for 2024+ and co_family_affordability_credit, restoring main's statutory treatment. A claimable filer with $10,000 AGI and an eligible age-four child retains $1,200 CTC and $3,273 family credit in 2025 ($1,200 and $3,200 respectively in 2024).

    Kept: The 2022-2023 Colorado CTC dependent-taxpayer gate and the existing child-credit amounts and income thresholds.

    Why: C.R.S. 39-22-129(2)(a)(II), (4.5) and 39-22-130(2)(a), (3) incorporate IRC 152(c) qualifying-child status (HB23-1112, p.4, HB24-1311, p.3); IRC 152(b)(1) removes dependent status without erasing qualifying-child status. The 2025 booklet, p.7's federal-child-credit exclusion therefore does not control these statutory child definitions. The 2022-2023 CTC remains tied to the federal credit actually claimed.

    us-co:claimable-filer-disabled-child-care-credit

    Changed: Added an independent state dependency condition to co_low_income_cdcc, alongside age under 13 and is_cdcc_eligible; the tax-unit filer exclusion is broadcast to members. A claimable filer with an incapable age-ten child and $1,000 care expenses receives $0; the otherwise identical nonclaimable filer keeps $250.

    Kept: The federal disability exception in is_cdcc_eligible and the low-income credit's expense allocation, earned-income limit, rates and caps. The filing exception continues to restore allowable dependency.

    Why: C.R.S. 39-22-119.5(2)(b), (3)(a)(III)-(IV) independently requires an IRC 152(a)(1) dependent under 13 and hypothetical IRC 21 eligibility. Those cumulative conditions mean IRC 21's disability relaxation cannot waive Colorado's separate dependency requirement. The 2025 DR 0347 instructions, p.1 define qualifying expenses through Section 21 without expressly waiving the state's independent dependency condition.

  2. Illinois child tax credit. Changed: No eligibility change; the PR keeps its corrected section 244 references and comment. Kept: A claimable filer can receive the credit for their own IRC 152 qualifying child: $27.20 in the 2025 witness household ($13.60 in the 2024 probe). Why: 35 ILCS 5/244(d) defines a qualifying child through IRC 152 rather than requiring allowable dependent status. The 2024-2025 instructions, p.1's dependent-child wording does not override that definition. The 2026 draft instructions, p.2 also use qualifying-child wording. This matches the statutory reading used for Colorado's 2024+ child and family credits. Section 244 has not changed substantively since P.A. 103-592; P.A. 104-417 corrected a typo.

  3. Illinois personal exemption: actual claim versus claimability. Changed: il_personal_exemption_eligibility_status counts zero, one or two actual dependent claims among the tax-unit head/spouse members using claimed_as_dependent_on_another_return. This count distinguishes both spouses being claimed, which the previous Boolean addition collapsed to one. A claimable but unclaimed single filer with $10,000 Illinois base income keeps $2,850 in 2025 and $2,375 in 2021; an actually claimed 2025 filer above the basic amount gets $0. The single-filer branch now also includes equality at the basic-amount boundary: an actually claimed filer with exactly $2,850 Illinois base income receives one $2,850 basic amount, correcting the previous fallthrough to the two-amount status and $5,700. Kept: The prerequisite that Illinois base income exceed the basic amount, the separate exemption income-limit gate, all annual amounts, and the shared claimability helpers used by other rules. Why: 35 ILCS 5/204(b) requires an actual claim as well as base income above the basic amount (P.A. 103-9, p.357). The operative clause is unchanged across 2021-2025. IL-1040 Line C instead asks about claimability (2021, p.6, 2025, p.6); the statute controls. This also aligns the input distinction with the existing Illinois rebate rule below.

  4. Illinois 2022 rebate, one claimed spouse. Changed: No change in this revision. Kept: The exclusion reads actual claims; a claimable but unclaimed filer retains eligibility. A joint return with only one spouse actually claimed retains the existing $100 joint amount and no dependent amount. Why: P.A. 102-0700 sec. 212.1(a), p.131-132 excludes a taxpayer actually claimed on another individual's return. The current implementation applies that exclusion per taxpayer and retains the joint amount while one spouse remains eligible. The claimability wording on the 2021 return does not displace the statutory actual-claim condition. Under IRC 152(b)(2), a joint filer ordinarily can be claimed only for a refund-only return, so the one-claimed-spouse case is narrow.

  5. Childless EITC on a joint return: Colorado and Illinois. Changed: No change to the draft's filer-dependency gates. Kept: Either spouse being claimable without the filing exception bars the childless EITC, consistently with the federal rule in Make rules for a filer claimed elsewhere independent of which spouse is labelled head #10024. Why: The states' expanded eligibility routes do not waive the federal dependent-taxpayer bar, and Publication 596, p.18 requires that neither spouse be claimable when claiming the EIC jointly. Illinois' expanded worksheet omits its dependency question for joint filers; that omission does not establish a statutory waiver. The filing exception remains available through head_or_spouse_is_dependent_elsewhere_without_filing_exception.

  6. Connecticut's 2022 child rebate. Changed: No change to the draft's dependency input. Kept: The child must be properly claimable on the taxpayer's 2021 federal return; filer claimability prevents that dependent claim unless the filing exception applies. Why: Section 411(b)(1)'s valid-claim condition and TSSB 2022-5, p.1's proper-claim condition concern the child on that return. IRC 152(b)(1) and Publication 501, p.11 make allowable dependent status turn on filer claimability with the filing exception.

Invariants

  1. Swap invariance. Exchanging the two adults' head/spouse labels leaves every changed output unchanged, including separately drawn actual claims, claimability and filing exceptions.
  2. Monotonicity. Marking another filer as claimed never raises a changed output (none of them is capped by a liability the claim can raise).
  3. Identities without the filing exception. When head_or_spouse_is_dependent_elsewhere_without_filing_exception is true, the return has no Illinois dependent exemption, Colorado low-income child care credit, or Indiana additional exemption, and Indiana base exemptions are $1,000 per filer. The refund-only filing exception can restore dependent-based benefits. Colorado's 2024+ CTC and family credit instead retain eligible qualifying children; Illinois' own basic exemption depends on actual claims and its income conditions.
  4. Formula comparison when nobody is claimable. Inspection shows the added claimability gates are inactive when no filer can be claimed. Colorado's low-income child care credit additionally requires a qualifying child dependent and federal child care qualifying-person status, so an under-13 head or spouse no longer enters the old raw-age count. Illinois' personal-exemption change affects claimable but unclaimed filers above the basic amount, correctly distinguishes two actual claims, and corrects the single-filer equality boundary. Aggregate impact awaits the hub run.

Tests

  • Current revision — 82 YAML cases across 4 files passed; 5 Python tests across 1 file passed. The required inventory contains 409 unique files (408 YAML across baseline/contributed Colorado, Connecticut, Illinois and Indiana, plus the changed property file), including all 21 PR-changed test files; 404 required files remain incomplete. Each attempted file ran in its own foreground process, with OMP, OpenBLAS, MKL, VecLib and NumExpr capped at four threads and OMP_WAIT_POLICY=PASSIVE. Severe host contention made the first completed YAML files take about 33–34 minutes each. Validation was stopped before the six-hour job limit; every test process was reaped. No microsimulation files were identified or excluded. Only completed per-file passes are counted. Added regression cases cover the Colorado claimable/nonclaimable incapable-child witnesses, 2024-2025 Colorado CTC and family-credit statutory amounts, and Illinois actual-claim versus claimability cases for 2021 and 2025. Illinois cases also cover zero/one/two head/spouse claims, the claimed-child member mask, single-filer base incomes of $2,849/$2,850/$2,851, and the separate AGI gate. The existing swap and filing-exception controls remain.
Completed file Cases/tests Seconds
co_low_income_cdcc.yaml 19 2005.67
co_ctc.yaml 40 2051.30
il_personal_exemption.yaml 13 611.72
test_claimable_filer_co_ct_il_in_invariants.py 5 704.16
co_family_affordability_credit.yaml 10 931.93

Incomplete attempts at the end of validation:

policyengine_us/tests/policy/baseline/gov/states/il/tax/income/exemptions/il_personal_exemption_eligibility_status.yaml: stopped at the test deadline; no completed pass counted.

  • Property tests — passed 5 tests: policyengine_us/tests/core/test_claimable_filer_co_ct_il_in_invariants.py. These reuse the federal check_swap/check_monotone helpers across Colorado, Connecticut, Illinois and Indiana for 2021, 2023, 2025 and 2026. Claimability, actual claims and the filing exception are drawn separately; deterministic cases guarantee coverage of their distinctions. il_personal_exemption now joins the outputs checked for head/spouse swap invariance and monotonicity when another filer is actually claimed. The Colorado CTC zero identity remains only before 2024. The person-level family credit is covered through co_refundable_credits for swaps, and nonpublic-school attendance is covered by YAML.
  • Style checks — passed. make format (Ruff formatting and lint) passed before each of the six new commits. git diff --check gh/main...HEAD passed; the checkout is clean.
  • Historical evidence from the preceding review, before this statute-first revision: 271 YAML cases passed across 18 files, each in its own foreground process with thread caps; the complete property file passed 5 tests; Ruff 0.15.5 formatting and lint checks passed. A targeted mutation replacing the without-filing-exception helper with the ordinary claimability helper in il_dependent_exemption failed the 2025 filing-exception restoration identity ($0 instead of $2,850); restoring the production helper returned the property file to 5 passing tests. Those results describe the prior head and are not validation of this revision.

Microsimulation impact

Pending: the US + core hub adds its impact run here.

Follow-ups

axiom: TheAxiomFoundation/rulespec-us#1698 queued (CO1: EITC routes, child tax credit, family affordability credit, low-income child care) | TheAxiomFoundation/rulespec-us#1699 queued (IL1: dependent exemption, EITC, child tax credit) | TheAxiomFoundation/rulespec-us#1700 queued (IN1: exemptions, nonpublic school deduction) | CT 12-704c(b)(2) 2017-2021 gate n/a: expired and unencoded | CT P.A. 22-118 sec. 411 rebate n/a: expired and unencoded | IL sec. 212.1 rebate n/a: expired and unencoded; none encoded-correct

Merge with main

Merge commit feca5b20949dacc49a4aac78099355ae7100da82 incorporates upstream/main 461f78e1eed35f90019eb46d8ac8dc7cdcc78b61 without conflicts, preserving both parents and the existing PR history. Three statute-first implementation commits and two fixture-only corrections follow that merge; current head is 196c7c7206c2812842fed3472163abae8572266f. The Illinois boundary and AGI controls use independent single-filer cases. The fixture corrections change no production formula.

Historical integration: merge 29a702c5f546338a6c350ec335aafee9d479d70a incorporated main after #10087 squash-merged as 2daebf2ca8, with main at 1ef55c1197c6b466912e2f081d548d277e04e360. Conflicts in nm_medical_expense_credit.py, nm_medical_expense_credit.yaml, and ca_cdcc_relevant_expenses.yaml took main's reviewed versions because this PR had left them unchanged from its federal base. The obsolete federal changelog fragments were removed. The replay check at that earlier head preserved the original 37-path patch byte for byte. Subsequent merge 034486c14c incorporated main at 5ec60b209a4647be9daaf4f8a1500eb1bcdf8a94 without conflicts. These statements record earlier integration checks, not the current revision's result.

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>
…ho can be claimed as a dependent

A return on which the filer, or on a joint return either spouse, can be
claimed as a dependent has no dependents (IRC 152(b)(1)), and a childless
filer who can be claimed gets no EITC (IRC 32(c)(1)(A)(ii)(III)).

- Colorado: the ITIN and under-25 EITC routes pay the credit the filer "would
  have been allowed" (C.R.S. 39-22-123.5(2.5), (2.7)), so they keep the bar;
  the child tax credit (both regimes), the family affordability credit and the
  low-income child care credit count no child on such a return.
- Connecticut: the 2017-2021 property tax credit's dependent route and the 2022
  child tax rebate need a validly claimed dependent.
- Illinois: the dependent exemption, the ITIN and age-18 EITC extension, the
  child tax credit and the 2022 rebate (P.A. 102-0700 sec. 212.1) apply the
  bar.
- Indiana: each filer keeps the $1,000 exemption; dependent, additional,
  adoption exemptions and the nonpublic school deduction do not apply.

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

Section 212.1(a) (P.A. 102-0700) makes a taxpayer "who is claimed as a
dependent on another individual's return for that year" ineligible. The
exclusion is per taxpayer, so a joint return keeps the $100 joint amount while
one spouse is not claimed; such a return claims no dependents (IRC 152(b)(1)),
so it gets no per-dependent amount.

The property test checks swap invariance and monotonicity of the changed
Colorado, Connecticut, Illinois and Indiana outputs on Hypothesis and seeded
couples, and that Indiana keeps $1,000 per filer on a claimable return.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The flag is a tax-unit array and ages are per person; one-return YAML cases
broadcast, but a vectorized simulation with several returns does not. Adds a
two-return YAML case.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 10 commits October 10, 2026 08:23
…L CTC follows the IRC 152 qualifying child; CO low-income care credit keeps the IRC 21 disability exception

- The Illinois and Indiana dependent exemption reforms replace the fixed
  formulas; at their defaults they now match the baseline for a claimable
  filer (Indiana's older-dependent count no longer moves a barred child into
  the personal portion). Default-reform cases cover both joint labellings.
- Illinois child tax credit: 35 ILCS 5/244(d) gives "qualifying child" its IRC
  152 meaning, and the 2026 draft instructions say "at least one qualifying
  child", so a claimable filer keeps the credit for their own qualifying child
  (the 2024-2025 instructions said "child that is your dependent").
- Colorado low-income child care credit: C.R.S. 39-22-119.5(3)(a)(III)-(IV)
  need a dependent under 13 for whom the federal IRC 21 credit would be
  allowed, so the child test is now the federal qualifying-person test, which
  keeps a child incapable of self-care (IRC 21(b)(1)(B)).
- One IRC 32 reference per document; Colorado's child definition anchor is
  HB23-1112 page 4; the property test also checks the rebate eligibility.

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>
MaxGhenis and others added 2 commits October 11, 2026 12:20
…anch

The federal branch (#10087) now separates whether another taxpayer can claim
a filer (`claimable_as_dependent_on_another_return`) from an actual claim
(`claimed_as_dependent_on_another_return`), and adds the Publication 501
filing exception for the Dependent Taxpayer Test
(`head_or_spouse_is_dependent_elsewhere_without_filing_exception`).

- Rules that a return has no dependents (IRC 152(b)(1)) and the childless
  EITC bar read the filing-exception helper, as the federal formulas do.
- Rules that turn on an actual claim read the claim input: Illinois' 2022
  rebate (sec. 212.1, "who is claimed") and Georgia's HB 162 refund ("who was
  claimed").
- Rules that turn on being claimable read claimability: Georgia's low income
  credit ("claimed or ... eligible to be claimed") and Idaho's food tax
  credit ("can claim you"). DC Schedule H's "was a dependent" reads the
  person-level filing-exception helper.
- New cases for a filer who can be claimed but is not, and for the filing
  exception.

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

Copy link
Copy Markdown
Contributor Author

Picking this up for the US hub. I'll post a hand-off comment here when it's ready.


Generated by Claude Code

Resolve appended-case conflicts in CO, IL and IN test files by keeping both
sides, and keep this PR's dependent gate in il_eitc on top of main's
hoisted parameter lookup.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6FjKTA223kkKGWSie6
Core's entity-scoped output drops enum metadata and compared the integer 1
with PARTIALLY_ELIGIBLE, failing the joint case. A top-level output vector
keeps the enum comparison and the same expected statuses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6FjKTA223kkKGWSie6
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Ready for hub review

Head: 29ebbdbbce66819919abde7315c31740e2bf4bac. The PR stays a draft.

Main merge

Main didn't merge cleanly (seven conflicts), so ab044c71f9 merges current main:

  • Six YAML files (co_cdcc, co_eitc, co_family_affordability_credit, il_eitc, il_income_tax_rebate, in_eitc) had both sides appending cases at the end. I kept every case from both sides. For in_eitc.yaml, which git interleaved, I took main's whole file plus the PR's appended cases (21 cases), after checking that the PR's side only appended to the merge base.
  • policyengine_us/variables/gov/states/il/tax/income/credits/il_eitc.py:41-51: main moved p = parameters(...) to the top of the formula and added a pre-2023 branch. I kept the PR's dependency gate (head_or_spouse_is_dependent_elsewhere_without_filing_exception) and dropped its now-redundant p = line. Against main, the only change in this file is the PR's own gate and references.
  • I checked that no line of main was removed in any of the seven files (git diff origin/main shows only additions from the PR, apart from the PR's intended il_eitc.py change).

P2: the Illinois fixture

policyengine_us/tests/policy/baseline/gov/states/il/tax/income/exemptions/il_personal_exemption_eligibility_status.yaml:672-676: the joint case's three entity-scoped assertions become one top-level vector, [PARTIALLY_ELIGIBLE, PARTIALLY_ELIGIBLE, BOTH_ELIGIBLE], in tax-unit input order (head_claimed, spouse_claimed, neither_claimed), so each compares as an enum. Expected statuses are unchanged. The file passes 38 of 38 (the review saw 37 pass, 1 fail).

Tests (local, one file per process, at 29ebbdbbce)

File Result
il_personal_exemption_eligibility_status.yaml 38 passed
co_cdcc.yaml 13 passed
co_eitc.yaml 27 passed
ct_eitc.yaml 17 passed
ct_property_tax_credit_eligible.yaml 13 passed
ct_child_tax_rebate.yaml 35 passed
il_ctc.yaml 11 passed
il_eitc.yaml 20 passed
il_income_tax_rebate.yaml 16 passed
il_dependent_exemption.yaml 9 passed
il_personal_exemption.yaml 13 passed
in_additional_exemptions.yaml 7 passed
in_base_exemptions.yaml 8 passed
in_eitc.yaml 21 passed
in_nonpublic_school_deduction.yaml 7 passed
contrib/states/il/dependent_exemption_reform_test.yaml 9 passed
contrib/states/in/dependent_exemption_reform_test.yaml 13 passed
tests/core/test_claimable_filer_co_ct_il_in_invariants.py 5 passed
tests/code_health/test_source_conflicts.py 103 passed

277 YAML cases and 108 Python tests, 0 failed.

CI: the Pull request run at this head was skipped because the PR is a draft; CI hasn't run.

Judgment calls

  • The merge needed a newer policyengine-core than the PR's old lockfile, so the tests ran in a fresh uv sync environment of the merged tree.
  • No behaviour changed in this round beyond the merge; nothing else in the statute review needed a fix.

Generated by Claude Code

@MaxGhenis
MaxGhenis marked this pull request as ready for review November 3, 2026 23:39
@MaxGhenis

MaxGhenis commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor Author

Hub review in progress

Superseded by the final review: #10049 (comment)


Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Ready for hub review
VERDICT: APPROVE
29ebbdb
METHODOLOGY_CHOICE: yes

Round 3 independent review. The head has not moved past 29ebbdbbce. Since 196c7c7206, the PR has made two commits: merge ab044c71f9 and fixture commit 29ebbdbbce. The fixture commit changes only il_personal_exemption_eligibility_status.yaml (4 additions, 7 deletions) and keeps the three expected statuses.

METHODOLOGY_CHOICE is yes because the PR picks readings where the text allows more than one. It reads Colorado's 2024+ child credits through the statutory IRC 152(c) definition rather than the booklet. It reads Illinois' basic exemption as turning on an actual claim rather than claimability (Line C). It keeps the Illinois CTC for a claimable filer's own qualifying child. The body records each reading and its source.

No finding affects the model. The two findings below are PR-body edits for the hub to make before landing.

Findings

P2: The body's "Merge with main" and "Tests" sections describe 196c7c7206, not the head

The PR body, section "Merge with main", says: "Merge commit feca5b2094… incorporates upstream/main … without conflicts … current head is 196c7c7206…". The head is 29ebbdbbce, and the latest merge (ab044c71f9) had seven conflicts. The "Tests" section still says "82 YAML cases across 4 files passed", "404 required files remain incomplete" and, for il_personal_exemption_eligibility_status.yaml, "stopped at the test deadline; no completed pass counted". At the head, that file passes 38 of 38, and all 20 changed YAML files pass (table below). A reader of the body alone would believe the latest merge was clean and the Illinois fixture was unverified.

Command: gh api repos/PolicyEngine/policyengine-us/pulls/10049 --jq .body | grep -n "current head\|without conflicts\|stopped at the test deadline\|404 required" returns lines 75, 87 and 106 with the text quoted above.

Replacement for the first paragraph of "Merge with main":

Merge commit ab044c71f91b91f6fdcac1c3ac54879211969a06 incorporates main at 6145ad45132042adfade61175477ef4a94ee88a4. Seven files conflicted: six YAML files where both sides appended cases (co_cdcc, co_eitc, co_family_affordability_credit, il_eitc, il_income_tax_rebate, in_eitc) and il_eitc.py. Every case from both sides is kept once and unchanged, and il_eitc.py keeps main's pre-2023 branch. Fixture commit 29ebbdbbce66819919abde7315c31740e2bf4bac follows. It rewrites the Illinois joint fixture as a tax-unit vector without changing the expected statuses.

Replace the "Tests" summary and the completed-file table with the 22-file table under "Checked and sound" below, and delete the "Incomplete attempts" paragraph.

P2: The body has no impact: line

The body has axiom: (line 102) but no line starting impact:. The "Microsimulation impact" section says "Pending: the US + core hub adds its impact run here." The diff moves baseline outputs (witnesses below), so the hub's population run and an impact: line are needed before landing. This is the hub's own step, listed here only so it isn't missed.

Checked and sound

The merge (ab044c71f9, parents 196c7c7206 and main 6145ad4513, base 461f78e1ee). For each of the six YAML files, I parsed every case at the base, main's side, the PR's side and the merge. I compared whole case dictionaries, not names. The merged file equals the base, minus each side's removals, plus each side's additions. Nothing is missing, nothing is extra and nothing is duplicated:

File base main PR merged PR added main added PR removed main rewrote
co_cdcc 7 8 12 13 5 1 0 0
co_eitc 19 20 26 27 7 1 0 0
co_family_affordability_credit 4 6 10 12 6 2 0 0
il_eitc 9 14 15 20 6 7 0 2
il_income_tax_rebate 8 10 14 16 6 2 0 0
in_eitc 7 16 12 21 5 10 0 1

In all six files, the PR side's text begins with the base file byte for byte, so the PR only appended. That includes in_eitc.yaml, as the hand-off says. Where main rewrote a base case (2 in il_eitc, 1 in in_eitc), the merge keeps main's version. Three more Python files changed on both sides and merged without conflict: ct_child_tax_rebate.py, il_income_tax_rebate.py and il_income_tax_rebate_eligible.py. In each, the merge keeps main's added documentation block and adds only the PR's gate (git diff 6145ad4513 ab044c71f9 -- <file>). The head also merges cleanly with current main 25c4253483 (git merge-tree --write-tree, exit 0). Main's six newer commits touch none of the dependency gates; the one shared file, state_eitc_helpers.py, changes the separate-filer rule.

il_eitc.py. The merged formula keeps main's early return: if not p.expansion_in_effect: return tax_unit("eitc", period) * p.match. The PR's head_or_spouse_is_dependent_elsewhere_without_filing_exception gate sits after that return, so it applies only while expansion_in_effect is true. That parameter is false from 2000 and true from 2023-01-01, so the gate applies from 2023 on. It doesn't need to reach the earlier branch. Before 2023, il_eitc is federal eitc times the match rate, and federal eitc_demographic_eligible already gates childless filers on the same helper (childless_eligible = … & ~dependent_elsewhere). Pre-2023 claimable childless filers therefore already get $0 through the federal credit. The parameter's own reference names 35 ILCS 5/212(b-5), (b-10), (b-15) "for taxable years beginning on or after January 1, 2023". I could not fetch the statute itself (see below). The reference change from IRC 32(c)(3)(A) to 32(c)(1)(A)(ii) happened on the PR side before the merge (git diff 461f78e1ee 196c7c7206), so the merge dropped nothing from main.

The Illinois fixture (statute review P2). In policyengine-core's test_runner.py, a top-level output key calls check_variable with no entity_index. It compares the whole EnumArray from simulation.calculate with assert_enum_equals, in population order, which is the order the tax_units mapping is written. An entity-scoped output indexes actual_value[entity_index], which returns a bare element and loses the enum type; that caused round 2's failure. By hand, with the 2025 basic amount of $2,850 (joint threshold $5,700) and $10,000 base income for every unit:

  • head_claimed: claimed_count == 1, and the base income exceeds $5,700, so the partner_ineligible branch fires: PARTIALLY_ELIGIBLE.
  • spouse_claimed: the same, PARTIALLY_ELIGIBLE.
  • neither_claimed: on a joint return with claimed_count == 0, neither branch fires: BOTH_ELIGIBLE.

When I swapped entries 2 and 3 on a scratch copy, the file failed 1 and passed 37: il_personal_exemption_eligibility_status@2025: ['PARTIALLY_ELIGIBLE' 'PARTIALLY_ELIGIBLE' 'BOTH_ELIGIBLE'] differs from ['PARTIALLY_ELIGIBLE', 'BOTH_ELIGIBLE', 'PARTIALLY_ELIGIBLE'].

The defect reproduces at main. I ran the same witness script on main 25c4253483 and on the head. Each witness has one filer with $8,000 wages, either claimable without the filing exception or not claimable.

Witness main, claimable head, claimable head, not claimable
IL dependent exemption, 2025, child 5 2,850 0 2,850
IL EITC, 2024, childless, age 20 122.40 0 122.40
IL personal exemption, 2025, claimable but not claimed 0 2,850 2,850
IN base exemptions, 2025, child 5 2,000 1,000 2,000
CO EITC, 2024, childless, age 20 306 0 306
CO low-income CDCC, 2025, incapable child 10, $1,000 care 250 0 250
CT property-tax credit eligible, 2020, age 30, child 5 true false true

The hand values use the repo's parameters, because I couldn't reach the sources:

  • IL 2024: childless phase-in 7.65% × $8,000 = $612, × 20% = $122.40.
  • CO 2024: $612 × 50% = $306.
  • CO low-income CDCC: 25% × $1,000 = $250.
  • IN: $1,000 per exemption.

The CO CDCC result matches the body's "$250 … $0" witness.

Existing expectations the PR changes. In il_personal_exemption_eligibility_status.yaml, two existing cases change their expected status. "2024 Joint household, both claimable elsewhere, base income greater than $5,550" ($6,000) and the un-yeared "Joint household, both claimable elsewhere, base income greater than $4,750" ($5,000) move from PARTIALLY_ELIGIBLE to NOT_ELIGIBLE. On main, add(tax_unit, period, ["head_is_dependent_elsewhere", "spouse_is_dependent_elsewhere"]) gave a count that never reached 2 for these cases. The PR's tax_unit.sum reaches 2. Reading 3 in the body discloses this. The other 30 rewritten cases change only their input structure: the two inputs head_is_dependent_elsewhere and spouse_is_dependent_elsewhere become per-person claimable_as_dependent_on_another_return and claimed_as_dependent_on_another_return, and the outputs stay the same. The redundant third ineligibility term (claimed_count == 2 and income above twice the joint amount) was already on main.

Tests: each changed file in its own process, at the head, using uv sync --locked --extra dev as CI does, with thread caps of 4:

File Result Hand-off
co_cdcc 13 passed 13
co_low_income_cdcc 19 passed not run
co_ctc 40 passed not run
co_eitc 27 passed 27
co_family_affordability_credit 12 passed not run
ct_eitc 17 passed 17
ct_property_tax_credit_eligible 13 passed 13
ct_child_tax_rebate 35 passed 35
il_ctc 11 passed 11
il_eitc 20 passed 20
il_income_tax_rebate 16 passed 16
il_dependent_exemption 9 passed 9
il_personal_exemption 13 passed 13
il_personal_exemption_eligibility_status 38 passed 38
in_additional_exemptions 7 passed 7
in_base_exemptions 8 passed 8
in_eitc 21 passed 21
in_nonpublic_school_deduction 7 passed 7
contrib il dependent_exemption_reform_test 9 passed 9
contrib in dependent_exemption_reform_test 13 passed 13
test_claimable_filer_co_ct_il_in_invariants.py 5 passed 5
code_health/test_source_conflicts.py 103 passed 103

That is 348 YAML cases across 20 files, plus 108 Python tests. Every count matches the hand-off where the hand-off reported one: its 17 YAML files total 277 cases, the same as here. The property file needs hypothesis, which comes from the dev extra; a plain uv sync fails at collection.

Mutants, each in its own process on a scratch copy, restored afterwards (git status --porcelain empty):

Mutant Killed by
M1 (the body's): il_dependent_exemption reads head_or_spouse_is_dependent_elsewhere instead of the _without_filing_exception helper il_dependent_exemption.yaml, 1 failed of 9 ("2025 single filer who can be claimed keeps the dependent exemption when the would-be claimant meets the filing exception": 0 vs 2,850). Also the property test: "Illinois must restore dependents under the filing exception", 2 of 24 mismatched, 0 vs 2,375
M2: swap vector entries 2 and 3 in the Illinois joint fixture il_personal_exemption_eligibility_status.yaml, 1 failed of 38 (the joint symmetric case)
M3 (mine): drop & ~filer_is_dependent from il_eitc il_eitc.yaml, 5 failed of 20
M4 (mine): joint ineligibility fires on claimed_count > 0 instead of > 1 il_personal_exemption_eligibility_status.yaml, 3 failed of 38

Readers of the changed variables. I searched non-test code under policyengine_us/ for each changed variable:

  • co_ctc_eligible_child is read by co_ctc and co_ctc_eligible_children_count.
  • co_ctc_qualifying_child is read by co_federal_ctc_child_individual_maximum and the eligible_child parameter.
  • ct_property_tax_credit_eligible is read by ct_property_tax_credit, ct_property_tax_credit_potential and the ct_hb5009 reform. HB 5009 is a 2026 reform, and from 2022 the age threshold is 0, so its result is unchanged.
  • il_eitc is read by il_ctc and the il_sb3567 reform's il_ctc. The gate bars only the childless route, so a filer with a qualifying child keeps the same il_eitc, and the CTC built on it is unchanged. That matches reading 2.
  • il_dependent_exemption is read by il_total_exemptions; repeal_state_dependent_exemptions neutralizes it.
  • in_base_exemptions is read by in_exemptions. The repeal reform's override (head_spouse_count × $1,000) gives the same $1,000 per filer as the new baseline.
  • in_is_qualifying_dependent_child is read by in_qualifying_child_count and in_adoption_exemption.
  • The rest are read only by state credit and deduction lists.

No reader this PR makes reachable gets a worse result. The body's follow-up on SB3567's pre-2025 Illinois CTC is a defect that already exists on main.

Scope. git diff --name-only origin/main...pr-10049 lists nothing under .github/ or policyengine_us/tests/policy/baseline/partners/. git diff --check origin/main...pr-10049 is clean. The changelog fragment changelog.d/claimable-filer-co-ct-il-in.fixed.md is a top-level file. Open-PR searches by changed file name return #10583 (EITC without a child's SSN) and #10134 (repeal-reform claimable-filer rules), and neither changes any file in this PR. #10134 edits the repeal reform, which reads il_dependent_exemption and overrides in_base_exemptions; this PR leaves that reform unchanged.

CI. At 29ebbdbbce, Pull request run 41740935260 completed with success: 36 jobs, all success, including "Household API Partners", every Baseline shard and Full Suite - Microsimulation. The earlier run 41736058087 was skipped while the PR was a draft.

Baseline impact. The diff moves baseline outputs for every claimable head or spouse in CO, CT, IL and IN (witnesses above), and for Illinois joint returns where both spouses are actually claimed. The population check needs, per state, the count and weight of tax units with head_or_spouse_is_dependent_elsewhere_without_filing_exception true, and of Illinois units with a claimed head or spouse. It also needs the change in each changed credit, exemption and deduction, and in state income tax.

What I couldn't check

  • Sources. This session's network reaches only GitHub and the package indexes. Requests to ilga.gov, leg.colorado.gov, olls.info, cga.ct.gov, portal.ct.gov, tax.colorado.gov, tax.illinois.gov, in.gov, iga.in.gov, irs.gov, govinfo.gov, uscode.house.gov, ecfr.gov, law.cornell.edu and taxsim.nber.org were all refused at the proxy. I confirmed no statute, form or bulletin text, and I don't confirm or dispute the body's statutory readings. The hand values above come from the repo's parameter files.
  • Population impact. I ran no microsimulation; that needs the hub's data.
  • The property test's runtime and memory on the hub's machine. Here it took 125 s wall-clock (41.9 s inside pytest), unloaded on 4 vCPU.

Generated by Claude Code

@DTrim99

DTrim99 commented Nov 5, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Apply Colorado, Connecticut, Illinois and Indiana rules for a filer who can be claimed as a dependent

Summary

I read the statutes first, then the code. The PR gates the dependent-based state rules for a return whose filer (or, on a joint return, either spouse) can be claimed elsewhere. It uses the existing federal helpers: head_or_spouse_is_dependent_elsewhere_without_filing_exception for "has no dependents" (IRC 152(b)(1)) and the childless-EITC bar, and claimed_as_dependent_on_another_return where the statute turns on an actual claim. No variable is reinvented. Each changed gate matches the governing text for the years the PR claims, and each new gate is pinned by a YAML case. CI is green at the head, and the head merges cleanly with current main.

Three things should be fixed before merge:

  1. Illinois' joint-return branch for one actually claimed spouse still uses twice the basic amount as its threshold, which disagrees with the statute and with IDOR's chart.
  2. The existing source-conflict backlog items for this PR's readings are stale.
  3. The axiom: line doesn't cover the Illinois basic-exemption change or the Colorado incapable-child change. The three issues pin an old head, and "expired and unencoded" isn't a recognised n/a reason.

Critical (must fix)

None.

Should address

S1. Illinois joint return with one actually claimed spouse: the threshold is twice the basic amount, but the statute and IDOR use the basic amount (il_personal_exemption_eligibility_status.py, the partner_ineligible term joint & (claimed_count == 1) & (il_base_income > tax_unit_personal_eligibility_amount))

  • The code. For joint filers, tax_unit_personal_eligibility_amount is 2 × basic amount. So a joint return with one claimed spouse loses that spouse's amount only when Illinois base income exceeds $5,700 (2025).
  • The statute. 35 ILCS 5/204(b) (P.A. 103-9, p.357): "a taxpayer whose Illinois base income exceeds the basic amount and who is claimed as a dependent on another person's tax return ... shall not be allowed any basic amount". 86 Ill. Adm. Code 100.2055(b)(2) repeats this and says nothing about splitting a joint return's income.
  • IDOR's chart. The IL-1040 Line 10a chart (2025 instructions, p.8) reads "Married filing jointly | Yes - only one | $2,851 or greater | $2,850". The 2021 chart, p.8 reads "$2,376 or greater | $2,375".
  • Witness (static trace). 2025, joint, one spouse with claimed_as_dependent_on_another_return: true, il_base_income: 4_000:
    • claimed_count = 1, and 4,000 ≤ 5,700, so neither ineligible nor partner_ineligible fires. The result is BOTH_ELIGIBLE, so il_personal_exemption = 5,700 and Illinois tax = $0.
    • Under the statute and the chart, the exemption is $2,850 and the tax is (4,000 − 2,850) × 4.95% = $56.93.
    • The gap affects every claimed year (2021–2025). It is exactly the income band of the refund-only joint returns on which IRC 152(b)(2) lets a spouse be claimed.
  • Why it belongs in this PR. The behaviour is older than this PR. But the PR rewrites this formula and this line (claimable_count becomes claimed_count). Reading 3 says it "Kept: the prerequisite that Illinois base income exceed the basic amount". The both-claimed rows (≤ $5,700 gives $5,700; ≥ $5,701 gives $0) already follow the chart.
  • Tests. The existing cases named "Joint household, one claimed elsewhere, base income greater than $2,775" (2024) and "... greater than $2,375" (2021) use $6,000 and $5,000. Both are above twice the basic amount, so no case tests the band in between.
  • Fix. For joint & (claimed_count == 1), compare against the single basic amount (personal_eligibility_amount), not the doubled one. Add 2025 joint one-claimed cases at $2,850 (expect BOTH_ELIGIBLE), $2,851 and $4,000 (expect PARTIALLY_ELIGIBLE). If you would rather keep the doubled threshold, record it as a source conflict against the chart (CONTRIBUTING.md#source-conflicts, step 1) and explain the reading. Both the statute and the chart are against it.

S2. Update the existing source_conflicts/candidates.yaml items for the readings this PR implements

CONTRIBUTING.md#source-conflicts, step 1: "If the backlog already lists the conflict, it updates that item instead." Six items on main already name this PR, but their pe_us fields describe main, not the head:

  • us-co:claimable-filer-disabled-child-care-credit says follows: conflicting-source and code: [], with the note "Code not yet on main: co_low_income_cdcc". The head follows the statute reading ($0) in co_low_income_cdcc.py.
  • us-il:personal-exemption-claimed-vs-claimable says follows: conflicting-source and code: []. The head follows the statute (actual claim) in il_personal_exemption_eligibility_status.py; the note names il_personal_exemption.
  • us-il:2022-rebate-claimed-vs-claimable says follows: unknown and code: []. The head follows the statute in il_income_tax_rebate_eligible.py.
  • us-co:claimable-filer-child-and-family-credits says follows: conflicting-source and lists only co_ctc_eligible_child.py. The head keeps the statutory reading and also comments co_family_affordability_credit.py.
  • us-co:joint-childless-eitc-dependent-question and us-il:joint-childless-eitc-dependency-skip say follows: statute but have code: []. The deciding lines are in co_eitc.py and il_eitc.py.

Fix: set follows and code (and refresh the notes) in this PR, so the register entries written after merge pin the right files.

S3. The axiom: line is incomplete and its queued issues are stale

Fix:

Suggestions

  1. co_low_income_cdcc.py: the qualifying_individual (is_cdcc_eligible) term is redundant. Any child under 13 who is a tax-unit dependent on a return with no blocked filer already satisfies is_cdcc_eligible's age route. So deleting the term changes no formula-driven result, and no test can pin it without an input override. Either drop it, or keep it as documentation of (3)(a)(IV) and add an override case (is_cdcc_eligible: false on an otherwise eligible child gives 0), as the PR already does for is_qualifying_child_dependent.
  2. Filing-exception restoration is pinned only for IL's dependent exemption, IN's base exemptions and CO's low-income care credit (YAML plus the property identities). Swapping the helper for the ordinary head_or_spouse_is_dependent_elsewhere in the other formulas would pass every test. Those formulas are co_ctc_qualifying_child, the co_eitc routes, ct_property_tax_credit_eligible, ct_child_tax_rebate, il_eitc, il_income_tax_rebate, in_is_qualifying_dependent_child and in_nonpublic_school_deduction. Consider one dependent_claimant_filing_exception: true case per formula.
  3. co_ctc.yaml, "2023 joint return with neither spouse claimable gets the Colorado share of the federal child tax credit". The case asserts only co_federal_ctc_maximum: 2_000. Add a co_ctc expectation so the positive control tests the state credit its name promises.
  4. PR body. "Merge with main" still says the current head is 196c7c7206 and the merge was conflict-free. "Tests" still says "404 required files remain incomplete" and that il_personal_exemption_eligibility_status.yaml "stopped at the test deadline". Its links point at 196c7c7206. The author's own later comment has the replacement text.
  5. CLAUDE.md "Test design and CI cost". The new property file builds simulations and runs in the Rest core group. The body reports local elapsed time under heavy contention (704 s), but no peak memory and no before/after for the core group. Add the group's CI time and RSS from this PR's run, or say they're unavailable. The pattern itself is justified: it follows the existing per-state claimable-filer invariant files.

Verified correct

The law, read first, for each claimed year.

  • Colorado EITC routes.
    • C.R.S. 39-22-123.5(2.5)(d)/(e) pay the credit the filer "would have been allowed, but for the fact that the resident individual, the resident individual's spouse, or one or more of the resident individual's dependents do not have a social security number". (2.7)(b)/(c) pay the credit "allowed under section 32 (n)(1)" (HB23-1112, p.2-4).
    • Both waive only SSN or age, so IRC 32(c)(1)(A)(ii)(III) still bars a childless claimable filer. Pub 596 (2025), p.18: "neither you nor your spouse can be claimed as a dependent by another person if you claim the EIC on your joint return."
    • The with-child route stays open. Correct.
  • Colorado CTC.
    • For 2022–2023, (3)(a) allows the credit to "a resident individual who claims a federal child tax credit for an eligible child". Federal §24 requires a §151 deduction, so the gate in co_ctc_qualifying_child is right. The gate reaches the credit through co_federal_ctc_child_individual_maximum.
    • For 2024+, (2)(a)(II) defines the eligible child as "a qualifying child, as defined in section 152 (c)", and (4.5) gives the credit "for each eligible child of the taxpayer", with no federal-credit condition (HB23-1112, p.4-5). Keeping it for a claimable filer follows the statute.
  • Colorado family affordability credit. C.R.S. 39-22-130(2)(a): "'ELIGIBLE CHILD' MEANS A QUALIFYING CHILD, AS DEFINED IN SECTION 152 (C)" (HB24-1311, p.3). No change, which is correct.
  • Colorado low-income child care credit.
    • C.R.S. 39-22-119.5(2)(b): "'Dependent' has the same meaning as in section 152 (a)(1)". (3)(a)(III) requires "the care of a dependent of the taxpayer who is less than thirteen years old", and (IV) hypothetical §21 eligibility. The window is 2014–2016 and 2018–2025 (C.R.S. 2025, p.411).
    • Reading (III) as importing 152(b)(1), so that §21(b)(1)(B)'s disability relaxation can't satisfy it, is a recorded and ruled reading. The incapable-child cases pin it.
    • Requiring a tax-unit dependent also matches (2)(b), even though federal is_cdcc_eligible keeps an IRC 21(e)(5) child.
  • Connecticut property-tax credit. C.G.S. 12-704c(b)(2): "for the taxable years commencing January 1, 2017, to January 1, 2021, inclusive", only a resident 65 or older or one "who files a return under the federal income tax ... validly claiming one or more dependents". The gate is right for 2017–2021 and inert from 2022 (age_threshold 0).
  • Connecticut 2022 child rebate. P.A. 22-118 §411(b)(1) covers a child "that the eligible taxpayer validly claims as a dependent on such taxpayer's return filed under the federal income tax for the taxable year commencing January 1, 2021" (p.548). TSSB 2022-5, Q15: "properly claimed".
  • Illinois exemptions.
    • 35 ILCS 5/204(c) gives an exemption "for each exemption in excess of one allowable ... under Section 151", so the dependent-exemption gate is right. The filing-exception helper is the right one.
    • 204(b) turns on "is claimed", and the PR follows it against Line C ("If someone else can claim you", 2025 instructions, p.6). The conflict is recorded as a ruled candidate.
    • The equality fix (base income = basic amount keeps one amount) matches "exceeds" and the chart's "$2,850 or below".
  • Illinois EITC. 212(b-5)/(b-10) apply "without regard to any age requirements ... in Section 32(c)(1)(A)(ii)", and (b-15) "without applying the restrictions regarding social security numbers in Section 32(m)". The (III) dependency bar survives. The Schedule IL-E/EITC questionnaire, question 6 ("Can you be claimed as a dependent ... Yes. STOP") agrees. The gate sits after main's pre-2023 early return; before 2023 the federal credit already applies the bar.
  • Illinois CTC. 35 ILCS 5/244(d): "'qualifying child' has the meaning given to that term in Section 152". Behaviour is unchanged and the references are corrected.
  • Illinois 2022 rebate. P.A. 102-0700 §212.1(a): a taxpayer "who is claimed as a dependent on another individual's return for that year, is ineligible", plus "$100 for each person who is claimed as a dependent ... on the taxpayer's federal income tax return" (p.131-132). Reading actual claims for eligibility and allowable dependents for the add-on is right. The mixed-spouse $100 choice is disclosed (reading 4).
  • Indiana.
    • IC 6-3-1-3.5(a)(3) gives $1,000 for the taxpayer and each joint spouse, with no dependency bar. (a)(4)(A) gives $1,000 for "each of the exemptions provided by Section 151(c) ... (as effective January 1, 2017)", and (a)(5)(A) gives $1,500 for exemptions "allowed under Section 151(c)(1)(B)". All 151(c) items follow 152(b)(1).
    • IB 117, p.2: the own exemption "is available even if the individual can be claimed as a dependent".
    • IC 6-3-2-22's "dependent child ... qualifies as a dependent (as defined in Section 152 ...)" (IB 107, p.1).
    • I found no dependency bar in IC 6-3-3-9 (the elderly credit) or in IL 208.5 (the property rebate), so the PR's "no change" rows hold.

The code.

  • Mutation rule. Every new gate is pinned. Removing it fails a YAML case:
    • the CO 2023 co_federal_ctc_maximum 0 cases; the CO EITC age-30 (ITIN route) and age-19 (under-25 route) cases; the CO low-income CDCC incapable-child cases and the is_qualifying_child_dependent: false override;
    • the CT 2021 property-credit and rebate matrices;
    • IL's dependent exemption, EITC (age 30 and 19), rebate (single claimed; $50/$100 dependent add-on), claimed-vs-claimable, the $2,850 boundary and the both-claimed NOT_ELIGIBLE case;
    • IN's base, additional and nonpublic matrices;
    • both contributed reforms (the IN in_older_dependents_count gate is caught by the single claimable case: 2,000 vs 1,000).
  • Construction. Vectorization is sound (where, &, ~ and person.tax_unit broadcasts); entities and periods are correct. There is no new state-gated int/enum used as a parameter key. Callers checked: il_ctc is unchanged for filers with a child, and the repeal reforms are consistent.
  • Hand-checks (17):
    • CO low-income CDCC: min(0.25 × min(1,000, 10,000), 500) = 250; joint 0.25 × min(1,000, 5,000) = 250.
    • CO EITC: min(0.0765 × 10,000, 649) × 50% = 324.50; claimable filer with child 0.34 × 10,000 × 50% = 1,700.
    • CO CTC 2025: 1,200 (AGI 10,000 in the lowest tier); 2023 federal maximum 2,000; FATC 2024 3,200 (AGI below 15,000); FATC 2025 3,273.
    • CT EITC: 0.0765 × 1,000 × 40% = 30.60; CT rebate 250.
    • IL EITC: 0.0765 × 1,000 × 20% = 15.30; IL CTC 0.34 × 1,000 × 20% = 68, × 40% = 27.20.
    • IL rebate: 100 + 100 = 200 (joint plus child); 50 (claimable but unclaimed, no add-on).
    • IL exemption: 2,849/2,850 give 2,850 and 2,851 gives 0; AGI 250,000 gives 2,850 and 250,001 gives 0 (204(g) "exceeds").
    • IN: 1,000/2,000/3,000; additional 1,500; nonpublic 1,000.
  • References. These show the cited text: P.A. 103-9 p.357; HB23-1112 p.4; HB24-1311 p.3; Pub 596 p.18; IB 117 p.2; IB 107 p.1; C.R.S. 2025 title 39 p.411.
  • Merge resolution. Against main 6145ad4513, the review diff deletes no line in the six YAML files that conflicted (co_cdcc, co_eitc, co_family_affordability_credit, il_eitc, il_income_tax_rebate, in_eitc); they only gain cases. il_eitc.py keeps main's pre-2023 branch. The only test file with deletions is the restructured IL eligibility fixture, which the PR rewrites on purpose.
  • Housekeeping. The changelog changelog.d/claimable-filer-co-ct-il-in.fixed.md is top-level. Tests are in variable-named files. No partner-contract or .github files are touched.

Axiom line assessment

The line lists three queued issues and three n/a items:

CI status

gh pr checks 10049 at head 29ebbdbbce: 36 pass (run 41740935260), including every Baseline and Contrib shard, all nine Rest Python shards, Microsimulation, Household API Partners and PR validation (lint, changelog, guard tests). The 3 "skipping" entries belong to the superseded draft run 41736058087. There are no failures and nothing is pending.

Branch status

The branch is 35 commits ahead of main and 35 behind. git merge-tree --write-tree PolicyEngine/main 29ebbdbbce exits 0 (tree 45ef5d3c), with no conflicts. Since the merge base, main hasn't touched any file this PR changes. Related main-side changes, all compatible:

Verdict: REQUEST_CHANGES

@DTrim99 DTrim99 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting changes per the review above: 0 critical, 3 should (IL joint return with one claimed spouse still gets 2x the basic amount; six stale candidates.yaml entries naming this PR; axiom issues pin an old head and miss the IL 204(b) change), 5 suggestions.

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.

3 participants