Skip to content

Add estate and trust income to state-built gross income lists - #10060

Merged
MaxGhenis merged 4 commits into
mainfrom
state-gross-income-estate-income
Oct 11, 2026
Merged

MaxGhenis merged 4 commits into
mainfrom
state-gross-income-estate-income

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

What changes

#9633 added estate_income (a beneficiary's estate or trust income, Schedule E Part III) to federal gross income. States that start from federal AGI picked that up. Six state income concepts are built from their own source lists and did not. This PR adds estate and trust income to each, following that state's loss rule.

State Concept (parameter) Law Losses
Alabama AGI (gov.states.al.tax.income.agi.gross_income_sources) Code of Ala. § 40-18-25(b)(1); Form 40, Part I, line 5: "Use line 5 to report income from rents, royalties, partnerships, S corporations, trusts, and estates." (2025 booklet, p. 15) Passed through. § 40-18-25(b) and Ala. Admin. Code r. 810-3-25-.11 follow federal Subchapter J for a beneficiary's income and deductions and switch off only IRC § 642(h). Alabama's Schedule K-1 (Form 41) passes depreciation, depletion and amortization to the beneficiary. See the note below.
Iowa, through 2022 Gross income (gov.states.ia.tax.income.gross_income.sources) IA 1040 line 10, "Rents, royalties, partnerships, estates, etc."; instructions: "Report the income or loss from federal Schedule E." (2022 instructions, p. 19) Passed through.
Mississippi AGI (gov.states.ms.tax.income.income_sources) Form 80-105 line 41, "Rental Real Estates, Royalties, Partnerships, S Corporations, Trusts, Etc.": "Enter the income or loss from activities reported on Federal Schedule E on this line." (2025 instructions, p. 11) Passed through.
New Jersey Gross income (new gov.states.nj.tax.income.gross_income.loss_eligible_categories.category_h) N.J.S. 54A:5-1(h): "Net gains or income derived through estates or trusts." Reported on NJ-1040 line 26 (2025 instructions, p. 21). Floored within the category. N.J.S. 54A:5-2: "a net loss in one category of gross income may not be applied against gross income in another category".
New Mexico Modified gross income (gov.states.nm.tax.income.modified_gross_income) NMSA 1978 § 7-2-2(L)(15): "income from an interest in an estate or a trust"; PIT-RC line 11 lists "Income from an estate or trust" (2025 instructions, p. 4). Floored per item. § 7-2-2(L): "undiminished by losses"; 3.3.1.10 NMAC.
Oklahoma Gross household income for the sales tax and property tax credits (gov.states.ok.tax.income.credits.gross_income_sources) Forms 538-S and 538-H line 11: "Enter gross (positive) income from rentals, royalties, partnerships, estates, trusts, and gains from the sale or exchange of property" (2025 packet, p. 51); Okla. Admin. Code 710:50-15-96(c). Floored per source. "YOU MAY NOT ENTER NEGATIVE AMOUNTS."

Iowa's income tax and child care credit read this list only through tax year 2022 (ia_net_income; the parameter itself has no end date). From 2023 the model starts Iowa from federal taxable income, which already carries the amount.

Alabama losses. A beneficiary's Schedule E Part III loss comes from depreciation, depletion and amortization the estate or trust apportions to them (federal Schedule K-1 box 9), which the Form 1041 instructions say "may be allocated to the beneficiary(ies) in amounts greater than their income". The § 642(h) final-year items that Alabama switches off go to other federal lines (box 11), not Schedule E. One source points the other way: the 2025 booklet (p. 24) says "A loss from an irrevocable trust cannot be claimed on Schedule E part II", citing r. 810-3-25-.05(8)(b), a rule titled "For Taxable Years Beginning Prior To January 1, 2005". estate_income does not separate trusts from estates, so the model follows the statute and the current rule. The first version of this PR floored Alabama at zero; the independent review caught it.

Lists reviewed and left unchanged

Found with grep -rn "gross_income_sources\|gross_income.sources" plus a sweep of every state tax parameter list that names a federal income component.

  • Arkansas (gross_income.sources.individual and .joint): already fixed in Count estate and Schedule F income in Arkansas gross income #9794.
  • Michigan household resources: already includes estate_income (Net Michigan business and rental losses in household resources (MI-1040CR lines 16, 17 and 30) #9790).
  • Puerto Rico gross income: already includes it.
  • Montana elderly homeowner/renter credit (gross_income_sources): the list starts from adjusted_gross_income_person, which is built from irs_gross_income, so it now carries estate income. No change.
  • Rhode Island property tax relief, Wisconsin homestead credit, West Virginia homestead excess property tax credit, Colorado sales tax refund MAGI and Utah homeowner's/renter's relief: each list starts from or adds to federal AGI. No change.
  • Pennsylvania: pa_total_taxable_income starts from irs_gross_income. No change.
  • Ohio business income (business_income.sources): the file already documents that trust income counts as business income only when it arises in a trade or business, which the model cannot observe. No change.
  • Ohio joint filing credit (credits.joint_filing.agi_subtractions): not changed, and uncertain. R.C. 5747.05(E)(1) measures each spouse's income "exclusive of interest, dividends and distributions, royalties, rent, and capital gains". Estate income now reaches Ohio AGI and counts as qualifying income. estate_income mixes rents and royalties (excluded) with business income (counted), and the statute does not name estate or trust income, so I left it as inherited rather than guess.
  • Retirement-income exclusion lists and earned-income tests (for example the Delaware and Georgia retirement exclusions, the Minnesota and North Dakota marriage credits): these are not gross income concepts. I did not review them for estate income.

One inherited flow looks wrong and is not fixed here: Massachusetts. ma_gross_income starts from irs_gross_income, so it now includes estate income. M.G.L. c. 62 § 10(a) says "No person shall be taxed under this chapter for income received from any trustee or other fiduciary, which income has itself been taxed under this section", and Form 1 taxes only "Income from any estate or trust not taxed directly". Whether a trust is taxed at the fiduciary level depends on facts the model does not have (§ 10(c)). That needs its own change.

Invariants

For a filer whose other income is wages, interest and partnership income, in every state above:

  1. Signed pass-through (Alabama, Iowa, Mississippi): the concept moves by exactly the estate amount.
  2. Floored pass-through (New Jersey, New Mexico, Oklahoma): the concept moves by exactly max(estate amount, 0). A loss never lowers it and never offsets other income.
  3. Differential against rental income: the estate amount moves the concept exactly as the same amount of rental income does, loss or gain, since each state puts both on the same form line or under the same loss rule.

policyengine_us/tests/core/test_state_estate_income_invariants.py checks all three with Hypothesis batches and a seeded population of 64 filers, three copies of each filer in each of the six states in one vectorized simulation.

Tests

  • Two hand-computed YAML cases per state (one gain, one loss) in al_agi.yaml, ia_gross_income.yaml, ms_agi.yaml, nj_gross_income.yaml, nm_modified_gross_income.yaml and ok_gross_income.yaml. The Oklahoma cases also check the sales tax credit: $18,000 of wages plus $3,000 of estate income is $21,000, over the $20,000 limit, so the $40 credit goes to zero.
  • The invariants test above: 2 passed locally in 20.7 s, or 47.7 s of wall time including the model import (22.8 s CPU, 1.32 GB peak RSS; macOS, /usr/bin/time -l, load average about 36). The file is new, so the figure before this PR is zero. It builds no extra tax-benefit system and lands in the Rest job's core group; I have no CI measurement for that group yet.
  • State tax test folders, run locally with test_batched.py --mode per-subdir --workers 1: all 1,134 passed (Alabama 84, Iowa 182, Mississippi 160, New Jersey 327, New Mexico 239, Oklahoma 142).
  • test_reference_urls.py, test_known_dead_reference_urls.py, test_no_concatenated_reference_urls.py and test_parameter_yaml_keys.py: 153 passed.
  • ruff format and ruff check clean on the changed Python files.

Check across all states

~/reviews/state-estate-income-2026-10-10/scripts/state_diff.py gives one household per state $5,000 of estate income and, separately, $5,000 of rental income, and compares the change in state_income_tax (2022, 2024, 2025; a $30,000 earner, an $80,000 earner and a 70-year-old renter with $12,000 of Social Security).

Before this PR, estate income left state tax unchanged, or lowered it through the deduction for federal tax, in Alabama, Iowa (2022), Mississippi and New Jersey, and left New Mexico's rebates unchanged for the renter. Every other difference between the two came from the federal qualified business income deduction, which applies to rental income and not to estate income.

After this PR, Mississippi, New Jersey and New Mexico move identically for the two income types in every scenario. Alabama and Iowa (2022) now rise with estate income, and what separates them from rental income is the same federal deduction:

Scenario (2022) Estate income, before Estate income, after Rental income
Alabama, $30,000 earner -$30.00 $232.50 $238.50
Alabama, $80,000 earner -$55.00 $195.00 $206.00
Iowa, $30,000 earner -$33.78 $261.59 $224.05
Iowa, $80,000 earner -$81.84 $290.16 $250.73
Mississippi, $30,000 earner $0.00 $250.00 $250.00
New Jersey, $30,000 earner $0.00 $87.50 $87.50
New Jersey, $80,000 earner $0.00 $318.50 $318.50
New Mexico, renter aged 70 $0.00 $320.00 $320.00

The script records only rows where the two differ by more than $0.50, so the after values for Mississippi, New Jersey and New Mexico are the rental values it found equal.

Alabama deducts federal income tax, and the federal tax on $5,000 of estate income is $120 (12% bracket) or $220 (22% bracket) higher than on rental income that takes the 20% deduction; 5% of that is the $6 and $11 gap. Iowa in 2022 deducts 75% of the federal qualified business income deduction (ia_qbi_deduction). Colorado, Idaho, Missouri, North Dakota and Oregon show the same gaps before and after this PR; I did not trace those.

The hub's microsimulation impact is in the section above.

al_agi.yaml is also edited by #9943, so whichever merges second needs a small rebase.

Review

An independent GPT-6.1 Sol review (Subfleet, at 81a53c8700) verified the five other states' rules, the page cites and all twelve cases, and requested changes on Alabama, fixed in 23c09348de. It also asked for the Iowa wording and the test timing above, and reported a Georgia retirement-exclusion gap that I added to #10062.

Axiom parity

axiom: TheAxiomFoundation/rulespec-us#1632 (Alabama § 40-18-25(b)), TheAxiomFoundation/rulespec-us#1633 (Iowa IA 1040 line 10, tax years 2021 and 2022), TheAxiomFoundation/rulespec-us#1634 (Mississippi Form 80-105 line 41), TheAxiomFoundation/rulespec-us#1635 (N.J.S. 54A:5-1(h)), TheAxiomFoundation/rulespec-us#1636 (NMSA § 7-2-2(L)(15)), TheAxiomFoundation/rulespec-us#1637 (Okla. Admin. Code 710:50-15-96(c)) queued

Each issue is labelled pe-parity and carries the module path, corpus rows, verbatim law, required outputs, a review_finding and the same hand-computed cases as the YAML tests here. The encoder is blocked because rulespec-us pins a corpus release that predates the cited rows; Iowa's 2021 and 2022 forms are not in the corpus at all. The federal side is already encoded: us:statutes/26/61#enumerated_gross_income_items includes income_from_an_interest_in_an_estate_or_trust.

Follow-ups

🤖 Generated with Claude Code

Hub microsimulation impact (current head)

A real microsimulation on the default dataset, main at the merge base 75cdd8019e against this PR's head 23c09348de, for 2026. The runs went one at a time under the shared heavy-job lock. Sums are weighted.

Output 2026 change 2026 records changed (weighted)
al_agi +971 10 (0)
ia_gross_income +439 4 (0)
ms_agi +782 3 (0)
nj_gross_income +1.82bn 20 (57,093)
nm_modified_gross_income +15,930 8 (0)
ok_gross_income +659.36M 11 (12,684)
state_income_tax +158.08M 32 (57,093)
income_tax +0 0 (0)
household_net_income -158.08M 32 (57,093)
household_benefits -5 2 (0)

Measured at the exact head against its merge base. New Jersey and Oklahoma gross income rise where estate and trust income now counts, and state income tax rises $158M across 32 records (57,093 weighted). The Alabama, Iowa, Mississippi and New Mexico changes fall only on records with zero weight in this dataset, so they don't move weighted totals.

Comparison files are in fixes/10060-impact/ on the hub host.

MaxGhenis and others added 3 commits October 10, 2026 09:00
Alabama, Iowa, Mississippi, New Jersey, New Mexico and Oklahoma build
their own income source lists, so they missed estate_income when
federal gross income gained it (#9633). Each state's law counts a
beneficiary's estate or trust income in the concept.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
YAML cases per state with hand-computed values, and a property test of
the pass-through identities.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review finding: a beneficiary's Schedule E Part III loss comes from
depreciation, depletion and amortization apportioned by the estate or
trust (Schedule K-1 box 9), not from the section 642(h) items that Code
of Ala. 40-18-25(b)(4) switches off. Alabama's Schedule K-1 (Form 41)
carries the same apportioned deductions, and r. 810-3-25-.11 follows
Subchapter J, so the amount enters Alabama AGI signed. Drops the floored
variable and moves the cases to al_agi.yaml.

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

Copy link
Copy Markdown
Contributor Author

Hand-off to the US + core hub

Head: 23c09348deb3d7a3e76ca52bab2d1608c7b8c8e1

Independent review: GPT-6.1 Sol via Subfleet. First pass at 81a53c8700 requested changes on the Alabama loss rule (~/reviews/state-estate-income-2026-10-10/out/review1.md); the fix is 23c09348de. Second pass at 23c09348de: APPROVE, no remaining findings (~/reviews/state-estate-income-2026-10-10/out/review2.md).

Passed locally at this head: the 40 YAML cases in the six touched test files; test_state_estate_income_invariants.py (2 passed); Alabama's tax folder (84). At 81a53c8700, before the Alabama-only change: the tax folders for Iowa (182), Mississippi (160), New Jersey (327), New Mexico (239) and Oklahoma (142), and the four reference and parameter-key guards (153).

Pending: all 25 CI jobs for this head were still queued when I handed off; PR validation has passed. No conflicts (MERGEABLE).

Before landing:

  • Fleet ops reports the Microsimulation job is red on every PR since 17:41Z from policyengine-core 3.33.1 (test_subsampling_never_changes_which_policy_a_holder_belongs_to). Merge main into this branch once that fix is in, then re-run CI. Nothing in this PR touches that test.
  • Leave tax unit dependents' income out of Alabama AGI #9943 also edits al_agi.yaml (and rewrites al_agi.py in a way that still reads this list). Whichever lands second needs a small rebase; keep both sets of cases.
  • No partner test files change.

Depends on: nothing. Hold or decision: none on this PR. d1266 (the Massachusetts default) concerns follow-up #10061 only.

Follow-ups owed, all filed: #10061 (Massachusetts, waits on d1266), #10062 (Iowa and Mississippi farm rent; New Mexico partnership and farm income; Georgia retirement exclusion), #10063 (federal benefit income lists). Axiom parity issues TheAxiomFoundation/rulespec-us#1632 to #1637 are queued and labelled pe-parity.

Still to add when CI finishes: the Rest job's core group time and peak RSS for the new invariants test, which the PR body says is not yet measured.

@MaxGhenis MaxGhenis closed this Oct 10, 2026
@MaxGhenis MaxGhenis reopened this Oct 10, 2026
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Reopened by the US + core hub to start a fresh CI run at the same head. The previous run failed on test_spm_system.py, which broke on every pull request when policyengine-core 3.33.1 was released; #10069 fixed it on main at 20:42Z on 2026-10-10. Nothing in this pull request changed.

@MaxGhenis
MaxGhenis merged commit f2dac92 into main Oct 11, 2026
51 of 52 checks passed
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

US + core hub merge audit, us#10060 at 23c09348deb3d7a3e76ca52bab2d1608c7b8c8e1 (squash): Add estate and trust income to state-built gross income lists.

@MaxGhenis
MaxGhenis deleted the state-gross-income-estate-income branch October 11, 2026 16:19
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