Skip to content

Apply the federal EITC qualifications to Maryland, Maine and New Jersey EITC recomputations - #10525

Draft
MaxGhenis wants to merge 2 commits into
mainfrom
state-eitc-section-911-md-me-nj
Draft

MaxGhenis wants to merge 2 commits into
mainfrom
state-eitc-section-911-md-me-nj

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Status: draft. The code, tests, mutation checks and Axiom parity are done. The full-dataset microsim waits on host reservations (queued as imp-10525). Review round 2 is running.

Follows #9750, which applied 26 U.S.C. 32(c)(1)(C) to the federal eitc_eligible, eitc_section_911_eligible (DC, Washington and calculate_eitc_like_amount), and New Jersey's age path:

The term "eligible individual" does not include any individual who claims the benefits of section 911 (relating to citizens or residents living abroad) for the taxable year.

Changes

Maryland: federal_eitc_without_age_minimum

Md. Code Tax-Gen. 10-704(c)(3)(i): for "an individual without a qualifying child, the credit allowable for a taxable year under § 32 … is calculated without regard to: 1. the minimum age requirement under § 32(c)(1)(A)(ii)(II) …; or 2. the limitation under § 32(m)". The 2025 Resident Booklet, Instruction 18, reads: "If you do not meet the minimum age requirement under the federal credit and are otherwise eligible for the federal credit for those without a qualifying child, you may claim the state earned income credit".

The recomputation now applies the section 911 bar through eitc_section_911_eligible. The § 32(m) ITIN waiver remains unmodelled; the formula still requires an SSN, as on main, and the code comment says so. A follow-up covers it.

Maine: me_pro_forma_childless_eitc

36 M.R.S. 5219-S(5) computes the credit for a childless filer under 25 "in the same manner as it would be calculated if that individual were eligible for a federal earned income credit". Under 5219-S(6), "eligible individual" has "the same meaning as under Section 32(c)(1) of the Code except that" it "also includes" a childless individual aged 18 to 24 who meets 32(c)(1)(A)(ii)(I) and (III).

Maine Revenue Services' 2024 EITC worksheet has the filer "complete Steps 1 through 6 of the federal instructions", changing only the TIN and age answers. Step 1 of the federal instructions asks: "Are you filing Form 2555 …? Yes. STOP You can't take the credit."

The pro forma now applies the section 911 bar. The hub's log records the reading: the expansion replaces only the age element of 32(c)(1)(A), so (B)-(E) still apply. Subsection 7's override of (E) presupposes the same.

New Jersey: nj_childless_eitc_age_eligible and nj_eitc

P.L. 2021, c.130, §1a(4) makes a childless resident aged 18 or over eligible "if that resident individual is ineligible to claim the federal earned income tax credit due to age requirements. The resident individual shall meet all qualifications, except for the minimum or maximum age, for the federal earned income tax credit". §1a(1) pays a percentage "of the federal earned income tax credit that would be allowed".

The 2025 NJ-1040 instructions, line 58, say: "If you claimed and were allowed a federal earned income credit (EIC), enter 40% of your federal EIC amount." On the age path they say: "You met all federal EIC requirements except the age requirement … enter $260."

Main reached the age path for any federally ineligible childless filer aged 18 or over, and so paid $260 to filers the federal credit turns away for other reasons. The age path now requires:

  • Federal ineligibility because of age. No filer or spouse meets the federal age test. Dependents' ages no longer count, and the 2021 student minimum of 24 applies (32(n)(1)).
  • An SSN valid for the EITC for the filer and any spouse (32(c)(1)(E), 32(m)). New Jersey has no ITIN rule.
  • A positive federal credit, recomputed without the age test, meaning the federal earned income and AGI limits: min(phased_in, max(0, maximum − reduction)) > 0. Main compared phased_in > reduction. That test denied the credit to a low earner whose unemployment compensation put the reduction above the phase-in amount but below the maximum. Example: age 20, $1,000 of wages and $12,000 of unemployment compensation; main gives $0, the law gives $259.60.
  • The section 911 bar (from Deny the refundable CTC and the EITC to section 911 filers (26 U.S.C. 24(d)(3), 32(c)(1)(C), 6012(c)) #9750) and the existing investment income, separate filer and age 18 tests.

The federal path pays 40% of eitc to every filer with eitc_eligible. Main also required phased_in > reduction, added by #6884, and sent the rest to the $260 path. Example: age 40, $1,000 of wages and $12,000 of unemployment compensation; federal EITC $76.50, so main gives $259.60, and this PR gives $30.60.

The age-path amount stays 40% of the federal childless maximum: $259.60 in 2025, which line 58 rounds to $260.

Tests

YAML. There are new cases in the four changed test files:

  • New Jersey: federal age, a spouse in range, a dependent's age, SSN on single and joint returns, the 2021 ages 18, 19, 23 (student) and 70, the unemployment examples above, non-take-up, and a parent with a reduction above the phase-in amount.
  • Maryland and Maine: section 911 below and inside the federal age range, joint returns, the housing exclusion alone, and controls.

Two existing NJ cases changed expectations:

  • A childless 30-year-old meets the federal age test, so the renamed case now expects false on the age path.
  • A household's age went from 30 to 20 so that it still tests the qualifying-child rule.

Invariants (tests/test_state_eitc_federal_qualifications.py) hold over a 1,260-household grid in 2025 and 2021. A Hypothesis version (…_property.py) covers 2021, 2022, 2025 and 2026.

  • A section 911 claimant gets no federal, NJ, MD or ME credit, with or without children.
  • New Jersey's age path never overlaps eitc_eligible, a paid federal credit, federal age eligibility, a qualifying child or a missing SSN.
  • A federally eligible NJ filer gets exactly 40% of eitc, and so does any NJ filer who meets the federal age test or has a qualifying child. Any other NJ amount is 0 or 40% of the childless maximum, and it is positive only when the recomputed federal credit is.
  • Maryland's pro forma is never below eitc for a federally eligible filer, and equals it whenever eitc is paid. This is a differential check against the federal computation.
  • Both pro formas lie between 0 and the recomputed federal credit, and are zero outside their states.
  • Entitlement, not only bounds. Take a childless filer and spouse with SSNs, no section 911 claim and, as in every generated household, no investment income, separate return or dependency elsewhere.
    • New Jersey pays 40% of the childless maximum whenever the filer fails the federal age test and the recomputed credit is positive.
    • Maryland's pro forma equals the recomputed credit when the filer or spouse is under the federal maximum age.
    • Maine's pro forma equals the recomputed credit for the 18–24 cohort failing the federal age test, and me_eitc pays the statutory childless rate on it (20% in 2021, 50% from 2022).
    • maine_known_gap excludes, by name, the pre-existing Maine bug that Extend Maine's childless EITC expansion to 2021 students aged 19 to 23 #10526 fixes: 2021 full-time students aged 19–23.

Main's code fails these invariants: NJ fails non-overlap in both years, and MD and ME fail the section 911 invariant.

Mutations. Each guard, removed or reverted on its own, fails exactly its own cases:

Mutation YAML cases failed
NJ: drop the federal age test 5
NJ: drop the SSN test 3
NJ: count dependents' ages 1
NJ: drop the student minimum 1
NJ: restore phased_in > reduction on the age path 1
NJ: restore main's federal path 2
MD: drop the section 911 bar 4
ME: drop the section 911 bar 1

Three more mutations target the entitlement invariants:

Runs at 0295745827. All 298 YAML cases in the 46 files that reference the changed variables or the NJ, MD and ME income taxes pass, as do the 9 cases of the contrib test that reads me_eitc. The two new Python files pass.

Why Python, and what it costs. YAML can't state a property over every household. These files check the law's for-all statements over a 1,260-household grid per year, plus Hypothesis draws, against reference calculations written independently in the test:

  • the federal age test, including the 2021 student minimum;
  • the 40% match;
  • the recomputed federal credit, from its phase-in, maximum and reduction;
  • Maine's statutory rates.

The pattern follows test_ctc_foreign_earned_income_exclusion.py and its property file from #9750. The files build household Simulations on the default system, with no reforms, copied parameter trees or datasets. They fall in the Rest Python remaining group, not REST_REMAINING_HEAVY_TESTS, which holds modules that retain extra systems.

Local measurements (macOS, Python 3.14, host load about 110; not Linux CI):

  • both files: 34 s in pytest, 107 s wall, 2.2 GB peak RSS;
  • import plus one household: 32.5 s and 1.09 GB.

So the addition is about 75 s and 1.1 GB above import. CI timings come from the first non-draft run.

Impact

Pending: a full default-dataset run for 2026, base main against this head, with a state breakdown. It covers eitc, nj_eitc, nj_childless_eitc_age_eligible, md_eitc, federal_eitc_without_age_minimum, me_eitc and me_pro_forma_childless_eitc, plus state income tax and household net income. The section 911 parts should measure zero. The pinned default dataset (populace-us-2024-spm-20260909, read 2026-10-28) carries none of the inputs that elects_section_911_exclusion reads: none of its 382 columns has foreign or 911 in its name, so every Form 2555 leaf and foreign_housing_exclusion takes its zero default, and foreign_earned_income_exclusion, which reads only those leaves, is zero. The NJ change can move NJ totals both ways: filers aged 25 to 64 who don't take up the federal credit lose $259.60, and low earners with a reduction above the phase-in amount gain.

Limitations and interactions

Review

Round 1 (GPT-6.1 Sol, subfleet run --task review --tier hard, head 785a43411b) returned REQUEST_CHANGES. It found no regression the PR introduced, and couldn't run the full-model suites in its sandbox. Its four findings and the fixes:

  1. The invariants accepted Maine's 2021 student underpayment. Fixed by the entitlement invariants and the labeled maine_known_gap; Extend Maine's childless EITC expansion to 2021 students aged 19 to 23 #10526 fixes the bug.
  2. Maine's ITIN rule. Now documented as not yet modelled. A separate follow-up applies the MD and ME waivers.
  3. NJ's dependent-elsewhere bar. Stays with Apply New Jersey, North Dakota, Ohio, Oklahoma and Pennsylvania rules for a filer who can be claimed as a dependent #10043, now noted in the code.
  4. Two claims broader than the code. The changelog and the comments now match the code.

Round 2 is running at 0295745827.

Axiom parity

  • axiom: us-md/statute/gtg/10-704 rulespec-us#1422 queued (extended with a section 911 companion case in this comment)
  • axiom: us-me/statute/36/5219-S rulespec-us#1964 queued
  • axiom: us-nj/statute/54a:4-7 rulespec-us#1965 queued (the module's rules are right; it lacks companion cases separating the two (a)(4) conditions)

🤖 Generated with Claude Code

Maryland's federal_eitc_without_age_minimum (Md. Code Tax-Gen. 10-704(c)(3))
and Maine's me_pro_forma_childless_eitc (36 M.R.S. 5219-S(5)-(6)) recompute
the federal EITC for childless filers without the federal minimum age, but
neither waives 26 U.S.C. 32(c)(1)(C), which denies the credit to anyone who
claims the benefits of section 911. Both now use eitc_section_911_eligible.

New Jersey's age path (P.L. 2021, c.130, section 1a(4)) now reaches only a
childless filer who is ineligible for the federal credit "due to age
requirements" and meets "all qualifications, except for the minimum or
maximum age": no filer or spouse meets the federal age test (dependents'
ages no longer count, and the 2021 student minimum applies), the filer and
any spouse have SSNs valid for the EITC, and the federal credit recomputed
without the age test is positive. A federally eligible filer gets 40% of the
federal EITC allowed, whatever its size, in place of the phase-in versus
reduction test that denied the credit when unearned income put the
reduction above the phase-in amount.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The invariant tests bounded each credit but accepted underpayment. They now
also check that a childless filer with SSNs and no section 911 claim who
fails only the federal age test gets New Jersey's 40% of the childless
maximum, and Maryland's and Maine's full recomputed federal credit (Maine at
its childless rate). The grid adds a full-time student aged 20, who takes New
Jersey's 2021 age path. Maine's 2021 full-time students aged 19-23, whom the
model still leaves out of the cohort, are excluded by name as a known gap.

Comments and the changelog no longer say the New Jersey age path requires
only age ineligibility: it does not yet apply the dependent-elsewhere bar.
Maine's pro forma documents that it does not model 5219-S(7)'s ITIN rule.

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

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant