Repository navigation
AL, AR, MS and NJ add tax unit dependents' income to the filer's state income (Iowa net income too), although federal AGI leaves it out #9814
Description
Summary
irs_gross_income multiplies every source by ~is_tax_unit_dependent, so a dependent's income never enters the filer's federal AGI. The dependent reports it on their own return. A child's interest and dividends reach a parent's federal return only through the Form 8814 election (26 USC 1(g)(7)), which the model does not implement (see the net_investment_income documentation added in #9784).
The state income definitions of five states do the opposite. They add every tax unit member's income, dependents included, to the filer's state income:
| State | Variable on main |
How a dependent's income gets in |
|---|---|---|
| AL | al_agi (TaxUnit) |
adds = "gov.states.al.tax.income.agi.gross_income_sources" sums the person-level sources over every member |
| AR | ar_agi_indiv, ar_agi_joint (Person) |
explicit block: "allocate any dependent gross income to tax unit head" |
| IA | ia_net_income (Person) |
explicit block: "allocate any dependent net_income to tax unit head" |
| MS | ms_agi (Person) |
explicit block: "Allocate income from dependents to tax unit head." |
| NJ | nj_gross_income → nj_total_income (Person) → nj_agi (TaxUnit) |
nj_agi uses add(tax_unit, period, ["nj_total_income"]) over every member |
This applies to all of a dependent's income in these lists (wages, interest, dividends, pensions and so on), not only investment income. The PRD comparison found it through interest and dividends.
For Iowa, the tax from 2023 starts from federal taxable income (ia_taxable_income_consolidated), so the dependent's income does not change ia_income_tax in 2023 and later in the cases below. It still changes ia_net_income (Iowa's entry in state_agi) and the tax for 2022 and earlier.
What the state returns say
- Arkansas. 2025 AR1000F/AR1000NR instructions, printed page 11, "Income": the return has a column for the primary's income and a column for the spouse's income, and for other filing statuses "write all income in column A only". No line adds a dependent's income.
- Mississippi. 2024 Form 80-100 instructions, printed page 3, "Filing requirements": minor resident taxpayers file their own return when their gross income exceeds the personal exemption plus the standard deduction. Income goes in Column A (Taxpayer) and Column B (Spouse).
- New Jersey. 2025 NJ-1040 instructions, page 3: anyone whose gross income is over the filing threshold ($10,000 single, $20,000 head of household) must file, with no exception for dependents. Worksheet L refers to "dependents who do not file a New Jersey tax return", that is, dependents can file their own return.
- Alabama, Iowa. Sources not cited here.
Reproduction
from policyengine_us import Simulation
YEAR = 2025
STATE_INCOME = {"AL": "al_agi", "AR": "ar_agi_indiv", "IA": "ia_net_income",
"MS": "ms_agi", "NJ": "nj_agi", "GA": "ga_agi"}
def situation(state, child_income):
return {
"people": {
"parent": {"age": {YEAR: 40}, "employment_income": {YEAR: 40_000}},
"child": {"age": {YEAR: 16}, **{k: {YEAR: v} for k, v in child_income.items()}},
},
"tax_units": {"tu": {"members": ["parent", "child"]}},
"households": {"hh": {"members": ["parent", "child"], "state_name": {YEAR: state}}},
}
for state, income_var in STATE_INCOME.items():
for child_income in ({}, {"taxable_interest_income": 8_000}, {"employment_income": 5_000}):
sim = Simulation(situation=situation(state, child_income))
print(state, child_income,
"federal AGI", sim.calculate("adjusted_gross_income", YEAR)[0],
income_var, sim.calculate(income_var, YEAR).sum(),
"state income tax", round(float(sim.calculate("state_income_tax", YEAR)[0]), 2))A single parent with $40,000 of wages and one dependent child aged 16, TY2025. Federal AGI is $40,000 in every row. The expected state income and tax are the values in the "child has no income" row, because the child's income belongs on the child's own return.
| State | State income variable | Child has no income | Child has $8,000 interest | Child has $5,000 wages |
|---|---|---|---|---|
| AL | al_agi / tax |
40,000 / 1,607.00 | 48,000 / 2,007.00 | 45,000 / 1,837.88 |
| AR | ar_agi_indiv / tax |
40,000 / 956.71 | 48,000 / 1,268.71 | 45,000 / 1,151.71 |
| IA | ia_net_income / tax |
40,000 / 252.15 | 48,000 / 252.15 | 45,000 / 252.15 |
| MS | ms_agi / tax |
40,000 / 752.40 | 48,000 / 1,104.40 | 45,000 / 972.40 |
| NJ | nj_agi / tax |
40,000 / −80.68 | 48,000 / 59.32 | 45,000 / 6.82 |
| GA (control) | ga_agi / tax |
40,000 / 1,245.60 | 40,000 / 1,245.60 | 40,000 / 1,245.60 |
With YEAR = 2022, the Iowa tax also changes: 1,332.05 with no child income, 1,830.64 with $8,000 of child interest, and 1,643.14 with $5,000 of child wages.
These values are from policyengine-us 2.25.2 (the latest PyPI release on 2026-10-05). Version 1.811.2 (45d51ef5d4) gives the same values, except that the Arkansas tax is $0.04 lower in each row. The formulas listed above are unchanged on main at 4613f8c792.
Files on main
policyengine_us/variables/gov/states/al/tax/income/al_agi.pyandpolicyengine_us/parameters/gov/states/al/tax/income/agi/gross_income_sources.yamlpolicyengine_us/variables/gov/states/ar/tax/income/ar_agi_indiv.py,policyengine_us/variables/gov/states/ar/tax/income/ar_agi_joint.pypolicyengine_us/variables/gov/states/ia/tax/income/net_income/ia_net_income.pypolicyengine_us/variables/gov/states/ms/tax/income/ms_agi.pypolicyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_gross_income.py,nj_total_income.py,nj_agi.py
Possible fix
Sum the person-level sources over the head and spouse only, as irs_gross_income does:
al_agi: replace theaddswith a formula that usestax_unit_non_dep_add(added in Leave dependents' investment income out of the filer's NIIT base #9784) for the gross income sources.ar_agi_indiv,ar_agi_joint,ia_net_income,ms_agi: remove the "allocate dependent income to the head" blocks and return 0 for dependents.- NJ: mask dependents in
nj_gross_income(or sumnj_total_incomeover non-dependents innj_agi). - Add one test per state with a dependent who has income, and a control in which only the head has income.
Related: #9699 lists this gap under "Not in this PR" ("AL, AR, MS and NJ count dependents' income in state gross income"). Its invariant grid found the remaining differences in AL, AR, IA (AGI only), MS, NJ and OK; the OK case is ok_gross_income in the sales tax relief credit, which is not covered here. Also related: #9784 (NIIT base), #9646 / #9647 (dependents' losses), #9579 (dependents' SALT refunds), #9635 (EITC investment income test).
Found by the PRD comparison (PolicyEngine/prd-comparison case-level explanations, cause state_tax.dependent_investment_income): 16 CPS tax units, with a $639K total gap.
🤖 Generated with Claude Code
Activity
MaxGhenis commentedon Oct 6, 2026
Alabama sources for the AL row, and a fix in #9943:
The reproduction above on the #9943 branch (TY2025, AL):
al_agiThe remaining $19.12 with child wages is a separate leak, #9941. The parent itemizes, and Alabama's itemized deduction for FICA adds the child's $382.50. That is 5% × 382.50.
#9943 also pays the $1,000 dependent exemption at AGI of exactly $20,000 or $50,000, as § 40-18-19(a)(9) says ("equal to or less than"). That leaves AR, IA, MS and NJ open here.