Repository navigation
Conversation
…5,000 per separate column Form 2, Itemized Deductions Schedule, line 5 (2021-2023) adds lines 5a through 5d and caps the total at $10,000 (single, head of household, married filing jointly) or $5,000 (married filing separately). - mt_salt_deduction: a joint return's taxes are pooled and capped once, on the head. It had capped each spouse separately, so a couple with $8,000 each deducted $16,000. - mt_salt_deduction_indiv (new): each column of a return filed separately on the same form (status 2a) is capped at $5,000. The separate-columns path had used the tax unit's joint cap ($10,000). - Line 5a: add the tax unit's general sales taxes (state_sales_tax, local_sales_tax), split equally between a couple's columns. - From 2024 (schedule discontinued) the per-person amounts are as before; the 2024 Worksheet A change is separate. The 2021-2023 switch is gov.states.mt.tax.income.deductions.itemized. state_specific_deduction_applies, byte-identical to the file in #9903 and #9947. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ction
Review r1 found that local_income_tax is not always zero for a Montana
household: PolicyEngine levies the Kansas City and St. Louis earnings
taxes and the Philadelphia wage tax on earnings in those cities without a
residence test. Line 5 adds "any local income taxes that you paid".
- mt_salt_deduction: the joint return's line 5 adds local_income_tax.
- mt_salt_deduction_indiv: each column takes the tax unit's local income
tax in proportion to the person's own earnings taxed by those cities
("Deductions that are attributable to only one spouse must be claimed
by that spouse"); without such earnings it is divided like the sales
taxes.
- YAML: Kansas City cases for a single return, a joint return at the
cap, and two separate-column cases. The Hypothesis file adds Kansas
City earnings to its draws and reference calculation.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review r2: dividing the tax unit's local income tax by each spouse's share of taxable city earnings is exact only when everyone pays the same rate with no credit. PolicyEngine sets Philadelphia's rate per person and subtracts St. Louis credits per person. - New Person variables mo_kansas_city_earnings_tax_person, mo_st_louis_earnings_tax_person and pa_philadelphia_wage_tax_person hold each person's own tax, with the existing formulas. The tax-unit variables now add them up, so their values do not change. - mt_salt_deduction_indiv: each column takes its own spouse's city tax. Any other local income tax of the tax unit (none for a Montana household) is divided like the sales taxes. - YAML: first tests for the three city taxes; Montana cases for a Philadelphia reduced rate, a St. Louis credit, two cities with one column at the cap, and a joint return with two cities. - Hypothesis: St. Louis earnings and per-person credits in the draws. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PR Review: Cap Montana's 2021–2023 state and local tax deduction once per joint return and at $5,000 per separate columnSummaryThe fix is right in law. I checked the 2021, 2022 and 2023 Form 2 Itemized Deductions Schedule, line 5 (PDF p. 7 each year). It reads: "Add lines 5a through 5d, enter the total here, but not more than $10,000 if your status is single, head of household or married filing jointly; or $5,000 if you are married filing separately". The filing-separately rules say a status 2a return is split "between Columns A and B, with each column constituting its own return" (2021 instructions PDF p. 10, 2022 p. 11, 2023 p. 12).
I hand-checked 23 expectations and the PR body's household table. The branch is 729 commits behind main and conflicts with it in two YAML test files. I resolved them the obvious way (keep both renames) and ran a merged tree locally:
Two points remain open, both SHOULD:
Critical (must fix)None. Should address
Suggestions
Verified correctLaw
Formulas
Hand checks
City tax files: PR body table:
Other checks
Axiom line assessment
CI status
Branch status
Verdict: REQUEST_CHANGES |
DTrim99
left a comment
There was a problem hiding this comment.
Requesting changes: 0 critical, 2 should (the other_local_tax term is unpinned; the 2023 instructions are cited twice instead of one entry with a page-list title). The cap logic matches Form 2 line 5 for 2021-2023 and every filing status, and the merged tree passes locally. Branch note: 729 behind, with conflicts in two Montana YAML files (keep both renames). Full report in the comment above.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Summary
For 2021–2023, we cap Montana's state and local tax deduction at $10,000 per joint return and $5,000 per separate column. Previously, spouses used the joint cap in both calculations.
We pool eligible taxes per return in
mt_salt_deductionand assign the deduction to the head. We calculate separate columns withmt_salt_deduction_indiv, reusing each person's city tax and retaining tax-unit sums.Law
Montana incorporated federal itemized deductions while excluding state income taxes under former MCA 15-30-2131(1)(a).
Taxpayers choose general sales taxes or local income taxes under 26 USC 164(b)(5)(A). We follow that election over cumulative lines 5a and 5b on 2021, 2022 and 2023 Form 2.
Spouses filing separately on the same form each have a return under the 2023 allocation instructions, pages 12–13. We record the conflict as
us-mt:salt-sales-income-electionwith official excerpts.Invariants
Methodology choices
Microsimulation impact
To be measured before merge.
Tests
CI passed 36 jobs, 214 cases across 21 required files, and 103 source-conflict checks.
Cached local checks passed 44 unique cases across five required files: joint SALT 14, separate columns 17, Kansas City 1, St. Louis 1 and employee taxes 11. The 17 separate-column cases also passed uncached. 51 source-conflict candidate checks passed.
We retain seven property tests, up to six examples per Hypothesis test and 150 seeded tax units, including residual taxes and surviving spouses. When any unit has residual local tax, we set all units' local tax inputs.
The full suite runs this file once in Rest Python's policy group. All seven passed among 1,873 CI cases in 3.356 seconds, excluding shared startup. The group took 19:08.70 wall with 11.92 GiB peak RSS.
The local property attempt timed out after 900.8 seconds (903.471 seconds wall overall), reporting no assertion results; peak capped memory charge was 1,174.782 MiB. We did not complete local validation for 16 required files within 6 hours. No runtime mutant verdict is available.
axiom: former MCA 15-30-2131(1)(a) (Itemized Deductions Schedule line 5) TheAxiomFoundation/rulespec-us#1520 queued
🤖 Generated with Claude Code