Repository navigation
Leave tax unit dependents' income out of Arkansas, Mississippi, New Jersey and Iowa income - #10667
Conversation
…ersey and Iowa income A dependent files their own Arkansas, Iowa, Mississippi or New Jersey return; only spouses combine income on one return. ar_agi_indiv, ar_agi_joint, ia_net_income and ms_agi now leave a dependent's amount off the filers' columns instead of moving it to a filer, and nj_agi and the New Jersey pension exclusion percentage sum total income over the head and spouse only. New Jersey's medical expense deduction no longer adds a dependent's self-employed health insurance deduction, which stays on the dependent's own return with the income it is figured against. Fixes the AR, IA, MS and NJ rows of #9814 (AL was fixed in #9943). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ment income exclusion Worksheet D takes the earnings test from NJ-1040 lines 15, 18, 21 and 22 and the maximum exclusion from the age-eligible filers' total income, so a dependent's wages and income no longer block or raise the exclusion. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PR Review: Leave tax unit dependents' income out of Arkansas, Mississippi, New Jersey and Iowa incomeSummaryThe legal premise holds in all four states. I checked the statute and the claimed years' instructions before the code. A dependent with income files their own return. Only spouses combine income on one return. None of the four states' booklets has a Form 8814-style line or election for a child's income. The model doesn't implement Form 8814, so a dependent's income never reaches the filers' federal AGI. Zeroing a dependent's column therefore drops nothing that legally stays on the parents' return. The AR, IA and NJ changes are correct, and so are the MS wage, interest and adjustment changes. I hand-checked 13 expectations and they all match. One Mississippi regression needs fixing. MS counts capital gains through There are also three should-address items:
Critical (must fix)C1. Mississippi: a dependent's capital gains change the parent's AGI, and the parent's capital loss can exceed the federal limit.
Should addressS1. No axiom line.
S2. Unpinned guard: Worksheet D total income now counts only age-eligible head and spouse.
S3. References repeat the same source document (CLAUDE.md reference rules).
Suggestions
Verified correct
Axiom line assessmentMissing (S1). The PR body has no CI statusAll 36 checks pass at head Branch status
Verdict: REQUEST_CHANGES |
DTrim99
left a comment
There was a problem hiding this comment.
Requesting changes per the review above: 1 critical (Mississippi AGI zeroes the dependent's share of a capital-gain amount that is loss-limited across all members, so a child's gains change the parent's MS AGI and the parent's loss escapes the $3,000 limit), 3 should (no axiom line; unpinned NJ exclusion change; duplicate same-document references), 3 suggestions.
Mississippi AGI read loss_limited_net_capital_gains_person, which nets and limits capital gains and losses over every tax unit member. With the dependent's column zeroed, a dependent's gains changed the parent's Mississippi AGI and could lift the parent's loss above the 26 USC 1211(b) limit. Mississippi now reads filer_loss_limited_net_capital_gains_person (copied byte for byte from #9894), which limits only the head's and spouse's own net loss and gives a dependent nothing. - Add ms_agi cases for a child's gain smaller and larger than the parent's loss, a child's loss against the parent's gain, and spouses sharing a limited loss. - Add a Worksheet D case with an age-eligible dependent who has income. - Merge same-document references (AR, IA, NJ, MS) into one href each. - Point the Worksheet D reference at PDF page 23 of the 2025 booklet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hua7450
left a comment
There was a problem hiding this comment.
Approving at 17e49be31d. I checked the follow-up commit against David's review.
Fixed
- Mississippi capital losses (David's critical).
income_sources.yamlnow usesfiler_loss_limited_net_capital_gains_person. It limits only the head's and spouse's own net loss, and a dependent has none. I checked the five newms_agicases by hand:- Parent's $10,000 loss with no child gain, a $5,000 child gain or a $20,000 child gain:
ms_agi37,000 each time. The tax is 4.4% × (37,000 − 3,400 − 8,000 − 1,500 − 10,000) = 620.40. - Child's $10,000 loss against the parent's $5,000 gain: 45,000.
- Spouses' $10,000 net loss limited to 3,000 and shared 8:2: [27,600, 19,400, 0].
- Parent's $10,000 loss with no child gain, a $5,000 child gain or a $20,000 child gain:
- Other cross-member allocations in the MS income list. I found none that matter.
taxable_social_securitygoes only to the head and spouse, and the retirement exemption subtracts it back out. - Worksheet D guard (S2). It's now tested: the age-eligible dependent parent with $20,000 of interest gives an exclusion of 10,000, not 30,000.
- Duplicate references (S3). Merged into one href each for AR, IA, MS and NJ, with the Worksheet D anchor moved to PDF p. 23.
Nits (optional)
- The PR body still has no
axiom:line (David's S1). - The overlap section should say that 9894 adds the same
filer_loss_limited_net_capital_gains_person.py. The section should also note that 10198 edits theearnings =line innj_other_retirement_income_exclusion.py, so whichever PR merges second keeps both changes. - The Tests section of the body doesn't list the new MS capital gain cases or the Worksheet D case.
Summary
Fixes the Arkansas, Iowa, Mississippi and New Jersey rows of #9814. #9943 fixed the Alabama row.
irs_gross_incomeleaves a tax unit dependent's income off the filer's federal return. These four states still put it on the filer's return:ar_agi_indiv,ia_net_incomeandms_agimoved each dependent's amount to a filer's column withmove_dependent_amounts_to_filer.ar_agi_jointmoved it to the head.nj_agisummednj_total_incomeover every member.Each state taxes a dependent on their own return. Only a married couple combines income on one return. This PR leaves a dependent's income off the filers' return in all four states. It follows #9943:
nj_agiand the Worksheet D total income (nj_retirement_exclusion_fraction) sumnj_total_incomeover the head and spouse withtax_unit_non_dep_add.nj_gross_incomeandnj_total_incomestill give each person's own amount, dependents included. A dependent's own return could use them.Law
Arkansas
Iowa
Mississippi
New Jersey
Where a dependent's income could be on a parent's return. That happens only through the federal Form 8814 election, which reaches federal AGI first. The model does not implement Form 8814, so no state case is modelled. In Iowa, an 8814 amount would flow into net income through federal AGI. None of the four states' instructions has a separate line for a child's income.
Before and after
The reproduction from #9814 on
mainate53b426082and on this branch. It uses a single parent with $40,000 of wages and one dependent child aged 16. Each cell gives the state income variable and the state income tax. A bold cell differs from the row with no child income.mainar_agi_indiv)ia_net_income)ms_agi)nj_agi)TY2025 unless the row says otherwise. Delaware and Montana also use
move_dependent_amounts_to_filer. Their bases are already free of a dependent's income in this reproduction, and this PR does not change them.What changes for whom
The changes apply only to tax units whose dependents have income.
ia_net_income, Iowa'sstate_agi, now leaves out the dependent's income.nj_other_retirement_income_exclusion, Worksheet D, line 28b) now uses only the filers' amounts. Its $3,000 earnings test adds NJ-1040 lines 15, 18, 21 and 22, the filers' own wages and business income, so a dependent's wages no longer take the exclusion away. Its maximum exclusion uses the total income of the age-eligible head or spouse only ("Joint filers: If only one spouse is 62 or older, only the income of that spouse can be excluded", 2025 NJ-1040 instructions, Worksheet D), not an age-eligible dependent's. New test: a 65-year-old head of household with $30,000 of interest and a $10,000 pension, and a dependent child with $5,000 of wages, gets $30,000 (main: $0).nj_medical_expense_deductionused to adddependents_self_employed_health_insurance_ald"because nj_agi counts every member's income". The exclusion of those premiums from the filers' medical base (C.54A:3-3(c)(3)) stays.nj_anchor,nj_anchor_eligible) and the property tax relief and StayNJ income (nj_property_tax_relief_income) still sumnj_gross_incomeover every member. Those programs have their own income definitions, which I did not research here.ok_gross_incomein the sales tax relief credit. 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 lists it as not covered.dependents_self_employed_*ALD variables no longer have a state user. They are kept.Overlap with open PRs
None of these PRs changes the formulas this PR changes. The textual overlaps:
ia_reportable_social_security.py, which this PR does not touch.tests/core/test_state_tax_head_spouse_swap_invariance.py, for Montana. Whichever PR merges second needs a small docstring merge. With both PRs, Arkansas, Iowa, Mississippi and Montana all leave the dependents' amounts off, and only Delaware still moves them.ia_reportable_social_security.py. There is no file overlap.ia_net_incomeas an input in its tests. It does not read a dependent's column, so it does not conflict.nj_medical_expense_deduction.pyandtests/core/test_medical_expense_premium_conservation.py. It keepsdependents_self_employed_health_insurance_ald"since New Jersey counts the dependent's income". This PR removes that premise, so the second PR to merge needs a rebase there.nj_gross_income.py. This PR leaves that file alone and changes only the tax-unit sums.ar_agi_jointas an input or test NJ credits. There is no conflict.Tests
New YAML cases. Each uses a parent with $40,000 of wages and a dependent child aged 16 who has $8,000 of interest or $5,000 of wages. State income equals the case with no child income.
ar_agi_indiv.yaml:ar_agi_indivandar_agi_joint[40,000, 0] for both child incomes.ms_agi.yaml:ms_agi[40,000, 0] for both child incomes.ia_net_income.yaml:ia_net_income[40,000, 0] and IA tax 1,332.05.ia_net_income[40,000, 0] andstate_agi40,000.nj_agi.yaml:nj_agi40,000,nj_taxable_income37,500 (40,000 − 1,000 − 1,500) and NJ tax −80.68.nj_agiis 0. Counting the child's wages would have put total income at 105,000 and the percentage at 50%.Existing tests that encoded the old behavior. Each now expects the dependent's amount to stay off the filers' return:
ar_agi_indiv.yaml, three cases. These are the "goes to the spouse with the greater AGI" and "equal AGI split" cases.ar_agi_joint.yaml: [1,200, −100, 0] becomes [900, −100, 0].ar_gambling_winnings_and_losses.yaml: a dependent's gambling winnings case,ar_agi_joint[51,000, 0] becomes [50,000, 0].ms_agi.yaml, four cases:ms_agibecomes 40,000 (was 47,793.52).ms_health_savings_account_adjustment.yaml:ms_agi[43,500, 28,500, 0] becomes [38,500, 28,500, 0].ms/tax/income/integration.yaml, first case. The child (age 10, $3,000 of wages) was in the head's column. The values are recomputed by hand in the test:ms_agi[20,000, 18,000].ia_net_income.yaml, four cases:nj_medical_expense_deduction.yaml, four dependent cases:nj_agi50,000 becomes 40,000, and the deduction 1,000 becomes 0.nj_agi40,000 becomes 30,000, and the deduction 1,000 becomes 0. The 500 of other expenses is under the 600 floor.nj_agi104,000 becomes 100,000, and the deduction 3,140 becomes 220.tests/core/test_medical_expense_premium_conservation.py: the NJ property no longer adds the dependents' SE deductions to the expected deduction.tests/core/test_state_tax_head_spouse_swap_invariance.py:Local runs on this branch:
policyengine-core test:states/ar: 1,052 passed.states/ms: 499 passed.states/nj: 779 passed.states/ia: 792 passed (this includes its Hypothesis file).pytest:policyengine-core testonstates/tax/income/state_agi.yamland the AR, IA, MS and NJ contrib tests: 55 passed.ruff formatandruff checkon the changed Python: clean.Fixes #9814
🤖 Generated with Claude Code