Skip to content

Add Montana's 2021–2023 partial pension, annuity, and IRA income exemption - #10392

Open
PavelMakarchuk wants to merge 2 commits into
mainfrom
mt-pension-exemption
Open

PavelMakarchuk wants to merge 2 commits into
mainfrom
mt-pension-exemption

Conversation

@PavelMakarchuk

@PavelMakarchuk PavelMakarchuk commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator

PolicyEngine did not model Montana's partial pension, annuity, and IRA income exemption for 2021–2023 (#10388). Montana AGI included all taxable pension and IRA income.

MCA 15-30-2110(2)(c), 2021 edition (archived June 30, 2022): "(c) (i) except as provided in subsection (2)(c)(ii) and subject to subsection (17), the first $4,070 of all pension and annuity income received as defined in 15-30-2101;"

Subsection (17) indexes the amounts. The section is repealed from January 1, 2024 (secs. 65, 70(1), Ch. 503, L. 2021).

2023 Montana Form 2, PDF page 6, Partial Pension, Annuity, and IRA Income Exemption Worksheet: "If you are married filing jointly, complete lines 1 through 3a in Columns A and B separately for each spouse." ... "3b If you are married filing jointly, add line 3a in Column A and line 3a in Column B and enter the total here in Column A" ... "7 Partial pension, annuity, and IRA income exemption. If single, head of household, or married filing separately, subtract line 6 from line 3a. If married filing jointly, subtract line 6 from line 3b. If less than zero, enter 0."

The 2021 and 2022 Form 2 (PDF page 6) have the same schedule.

Change

  • New parameters in gov.states.mt.tax.income.subtractions.pension:
    • in_effect: true for 2021–2023.
    • cap: $4,400, $4,640 and $5,060 for each taxpayer.
    • phase_out.threshold: $36,700, $38,660 and $42,140 of federal AGI.
    • phase_out.rate: $2 for each $1 above the threshold.
    • sources: taxable_pension_income, taxable_retirement_distributions, taxable_roth_conversions and military_retirement_pay (Form 2 page 1, lines 4b and 5b; MCA 15-30-2101(25)(b) and (d)). Survivor Benefit Plan annuities (military_retirement_pay_survivors) are left out: the 2023 line 34 instructions exclude death benefits, and Form 1099-R code 4 is for payments to a decedent's beneficiary.
  • New variables:
    • mt_pension_exemption_before_phase_out (person, worksheet lines 1–3a): the smaller of the cap and the head's or spouse's own pension, annuity, and IRA income.
    • mt_pension_exemption_indiv (person, lines 4–7 on a separate return): reduced by the person's own federal AGI, with the equal division of losses that mt_agi_indiv uses.
    • mt_pension_exemption_joint (tax unit, lines 3b–7 on a joint return): the spouses' combined amount, reduced once by the joint federal AGI.
  • The exemption is not in the subtractions list, because the joint and separate amounts differ. mt_agi_indiv and mt_taxable_social_security add the separate amount. mt_agi_joint and mt_taxable_social_security_joint add the joint amount. The Taxable Social Security Benefits Schedule needs it because its line 8 adds Subtractions Schedule line 35, which includes the exemption on line 34 (2022–2023 numbering).
  • This PR does not change subtractions.yaml, which open Fix Montana disability exclusion repeal, elderly credit receipt timing and occupancy tests #10331 edits.
  • Not modeled: premature distributions and death benefits inside pension and IRA income, which do not qualify, and the Tier II Railroad Retirement reduction on worksheet line 2. PE-US has no inputs that separate these amounts.
  • Before 2021, PE-US moves the first parameter values back to 2015, so 2015–2020 use the 2021 amounts. Other 2021 Montana parameters, such as the child and dependent care deduction's in_effect, work the same way. From 2024 the exemption is 0.

Tests

Expected values come from the worked examples in the Form 2 instructions (2021 PDF page 30, 2022 PDF page 31, 2023 PDF page 34) and from the worksheet.

Test 2021 2022 2023
Jim and Pam, joint, federal AGI $35,400, distributions $25,000 and $2,300 6,700 6,940 7,360
Single, AGI $37,400 / $39,400 / $43,000 3,000 3,160 3,340
Single, AGI $44,670 0
  • Joint compared with separate (2023): head wages $40,000, spouse pension $20,000. The joint exemption is 0, because 2 × (60,000 − 42,140) is more than 5,060. The spouse's separate exemption is 5,060, and the spouse's mt_agi_indiv is 14,940.
  • Integration (2023, single, $20,000 of pension, by hand from the 2023 Form 2): mt_income_tax is 170.76 at age 60 and 84.64 at age 70.
  • A dependent's pension (no exemption) and 2024 (repealed) are also tested.
  • All 1,010 tests in the Montana baseline and contrib folders pass, and 15 of them are new.
  • The code-health tests pass, except three that also fail on a clean main checkout in this environment (test_selective_test_batches reform folders and test_unscannable_files_fail_closed).

TAXSIM comparison

Single filer, $20,000 of pension (siitax; fiitax does not change):

Year Age TAXSIM-35 fiitax / siitax PE before fiitax / siitax PE after fiitax / siitax Form 2 by hand
2023 60 615.00 / 326.00 615.00 / 326.00 615.00 / 170.76 170.76
2023 70 430.00 / 84.64 430.00 / 207.20 430.00 / 84.64 84.64

TAXSIM gives the exemption only at 65 or older. That is PolicyEngine/policyengine-taxsim#1459.

In the 15,000-record TAXSIM census (with the Montana 50/50 pension split of PolicyEngine/policyengine-taxsim#1452), one household (record 41313, 2021–2023) changes. Its Montana tax falls by $141.85, $119.79 and $120.46. No record reaches the filing threshold.

Closes #10388

Refs PolicyEngine/policyengine-taxsim#1459

🤖 Generated with Claude Code

…ption

MCA 15-30-2110(2)(c) exempts the first $4,400 (2021), $4,640 (2022) or
$5,060 (2023) of each taxpayer's pension, annuity, and IRA income, reduced
by $2 for each $1 of federal AGI above $36,700, $38,660 or $42,140. The
Form 2 worksheet reduces each spouse's amount by their own federal AGI on
a separate return, and the spouses' combined amount once by the joint
federal AGI on a joint return, so the exemption is added in mt_agi_indiv
and mt_agi_joint (and the two Taxable Social Security schedules) rather
than in the subtractions list. Repealed from 2024.

Closes #10388

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

DTrim99 commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Add Montana's 2021–2023 partial pension, annuity, and IRA income exemption

Summary

The PR adds Montana's partial pension, annuity and IRA income exemption for TY2021–2023 under former MCA 15-30-2110(2)(c). It adds parameters for the cap ($4,400 / $4,640 / $5,060), the federal-AGI phase-out threshold ($36,700 / $38,660 / $42,140), the $2-per-$1 rate, the income sources and an in_effect flag (off from 2024). It adds three variables: a per-person amount before the phase-out (worksheet lines 1–3a), a separate-return amount reduced by each spouse's own federal AGI, and a joint amount reduced once by the joint federal AGI. The separate and joint amounts feed mt_agi_indiv / mt_agi_joint and the two taxable Social Security schedules (line 8 adds Subtractions Schedule line 35, which includes line 34).

Critical (must fix)

1. The income sources omit military retirement pay, so military retirees get no exemption in 2021–2023.

File: policyengine_us/parameters/gov/states/mt/tax/income/subtractions/pension/sources.yaml (values taxable_pension_income, taxable_retirement_distributions).

What's wrong. PolicyEngine models military retired pay as its own input, military_retirement_pay. It is part of military_retirement_income, which gov.irs.gross_income.sources adds to federal gross income with the comment "Military retirement pay and survivor benefit plan payments (IRC § 61, Form 1040 line 5b)". It is not part of taxable_pension_income (public plus private pension) or taxable_retirement_distributions. So a single military retiree with $20,000 of retired pay in TY2023 gets mt_pension_exemption_before_phase_out = 0 and Montana AGI of $20,000. The law gives $5,060 and Montana AGI of $14,940, the same as this PR's own integration case, where the 2023 tax difference is $326.00 against $170.76.

The law.

  • MCA 2021 § 15-30-2110(2)(c)(i) exempts "the first $4,070 of all pension and annuity income received as defined in 15-30-2101".
  • The PR's own sources.yaml reference, MCA 15-30-2101(25), defines that income to include "(b) payments received as the result of past service and cessation of employment in the uniformed services of the United States".
  • The 2023 Form 2 worksheet line 2 takes "the sum of page 1, line 4b and line 5b", and military retired pay is reported on line 5b.
  • Montana's separate 50% military retirement subtraction starts only in 2024 (MCA 15-30-2120(3)(n), as the military_retirement_pay documentation notes). So in 2021–2023 this exemption was the only relief, and adding the pay can't double count.

Fix. Add military_retirement_pay to sources.yaml and add a 2023 case: $20,000 of retired pay gives 5,060. Then decide on military_retirement_pay_survivors (SBP annuities) with a source. (25)(b) covers payments "received as the result of past service" in the uniformed services, but the instructions exclude "death benefits", so cite whatever settles it.

Should address

1. Test the joint "reduce once" rule in the phase-out range.

File: policyengine_us/tests/policy/baseline/gov/states/mt/tax/income/subtractions/pension/mt_pension_exemption_joint.yaml.

What's missing. The joint cases are either under the threshold (Jim and Pam: no reduction) or fully phased out (60,000: 0). In both, reducing the combined line 3b amount once gives the same result as reducing each spouse's amount, so neither pins the rule that defines mt_pension_exemption_joint.

The law. The 2023 worksheet says "If married filing jointly, subtract line 6 from line 3b", and the instructions (PDF p. 35) say "Complete lines 3b–7 in Column A only."

Fix. Add a TY2023 joint case in which each spouse has ≥ $5,060 of pension income and joint federal AGI is $43,000. Reducing once gives 10,120 − 2 × 860 = 8,400; reducing each spouse would give 2 × 3,340 = 6,680. A 2021 or 2022 version would also pin the earlier thresholds on the joint path.

2. Add the axiom: line to the PR body.

The body has no axiom line in any form, and Pavel is staff. rulespec-us has no module or issue for this exemption: searches for "15-30-2110" and "Montana pension" find only #1741 (the disability exclusion) and the medical and deduction issues.

Recommended line. File a dispatch-ready pe-parity issue and use axiom: rulespec-us#<n> queued. The issue should have:

  • a module path under us-mt/statutes/15-30/2110 for (2)(c);
  • the verbatim text of 2021 MCA 15-30-2110(2)(c)(i)–(ii) and (17), and 15-30-2101(25);
  • required outputs: the per-taxpayer amount before the phase-out, the separate-return amount and the joint amount;
  • companion cases from the 2021/2022/2023 instruction examples (6,700 / 6,940 / 7,360; 3,000 / 3,160 / 3,340; 0 at $44,670).

Record the corpus blocker. rulespec-us#1520's prerequisites note that § 15-30-2110 exists in the corpus only as a repeal marker, so the 2021–2023 text has to be added.

Suggestions

  1. Years before 2021. in_effect starts 2021-01-01: true, so it and the amounts extrapolate backward. The exemption then applies before 2021 at the 2021 amounts, while the statute's base amounts ($4,070 and $30,000, indexed under (17)) gave lower figures in earlier years. The body discloses this. Consider adding earlier indexed values from the prior instructions, or a comment beside in_effect.
  2. Roth conversions. Worksheet line 2 takes all of Form 1040 line 4b, and a Roth conversion is an IRA distribution included there (15-30-2101(25)(d) excludes only premature distributions). taxable_roth_conversions is in federal gross income but not in sources. Settle whether it counts and say so in the comment.
  3. Disability exclusion ordering, a note for Fix Montana disability exclusion repeal, elderly credit receipt timing and occupancy tests #10331. The 2023 disability exclusion worksheet (instructions PDF p. 34, line 5) uses "Montana Subtractions Schedule, line 35, without this exemption", which includes this line 34 exemption. PolicyEngine doesn't model that $15,000 phase-out today (mt_disability_income_exclusion_person is just min(cap, benefits)), so nothing breaks. If the phase-out is added later, it needs this exemption.

Verified correct

  • Statute. MCA 2021 § 15-30-2110(2)(c) (archived 2022-06-30), as quoted in the PR: (i) "the first $4,070 of all pension and annuity income received as defined in 15-30-2101", subject to (17) indexing. The $2-per-$1 reduction applies above $30,000 of federal AGI "as shown on the taxpayer's return", or "on their joint return" for a joint filing. The section was repealed for 2024 by Ch. 503, L. 2021 (SB 399), and the 2023 instructions (PDF p. 35) say "Beginning in Tax Year 2024, this deduction is repealed."
  • Amounts and examples, all from the Form 2 instructions:
    • 2021 (PDF p. 30): "you cannot exclude more than $4,400 per taxpayer" and "reduced by $2 for every dollar … exceeds $36,700, regardless of your filing status". Examples: Jim and Pam $6,700; "$37,400 … $3,000 ($4,400 − ($700 × $2))"; zero above $38,900.
    • 2022 (PDF pp. 31–32): $4,640 and $38,660; Jim and Pam $6,940; "$39,400 … $3,160"; zero above $40,980.
    • 2023 (PDF pp. 34–35): $5,060 and $42,140; "up to $10,120" on a joint return; Jim and Pam $7,360; "$43,000 … $3,340"; "more than $44,670 … not eligible".
    • The separate-return rule: "the lesser of your retirement income or $5,060 applies separately to both spouses as long as your separately stated Federal Adjusted Gross Income is $42,140 or less."
  • Worksheet. The 2023 Form 2 (PDF p. 6) has line 1 (maximum), line 2 (lines 4b + 5b less Subtractions Schedule line 33, the Tier II railroad amount), line 3a (the smaller of the two), line 3b (the joint sum), line 4 (federal AGI from page 1, line 11), line 6 ((line 4 − line 5) × 2) and line 7 (3a or 3b less line 6, not below 0), carried to Subtractions Schedule line 34. That schedule's line 35 combines lines 1–34, which supports adding the exemption to the Social Security schedules. The Tier II reduction and the premature-distribution exclusion aren't modeled; the body discloses both.
  • Hand-checked expectations (22).
    • Before the phase-out, 2023: 25,000 → 5,060; 1,000 pension + 1,300 IRA → 2,300; a dependent's pension → [0, 0]; 2024 → 0.
    • Separate returns: 2021 AGI 37,400 → 4,400 − 1,400 = 3,000; 2022 39,400 → 4,640 − 1,480 = 3,160; 2023 43,000 → 5,060 − 1,720 = 3,340; 2023 44,670 → 5,060 − 5,060 = 0 (the exact zero point).
    • 2023 couple filing separately (head wages 40,000, spouse pension 20,000): exemptions [0, 5,060]; mt_agi_indiv [40,000, 14,940].
    • Joint, Jim and Pam (federal AGI 8,100 + 25,000 + 2,300 = 35,400, under every threshold): 6,700, 6,940 and 7,360; 2023 mt_agi_joint 35,400 − 7,360 = 28,040.
    • Joint, 2023, AGI 60,000: 2 × 17,860 is more than 5,060, so 0, and mt_agi_joint 60,000.
    • Integration, 2023 single, $20,000 pension, age 60: Montana AGI 14,940; standard deduction 20% = 2,988; one 2,960 exemption; taxable income 8,992; tax 3% × 8,992 − 99 = 170.76.
    • Same filer at age 70: two exemptions give 6,032; tax 2% × 6,032 − 36 = 84.64. Both match the 2023 table's 3% and 2% bracket formulas.
  • Code.
    • if not p.in_effect branches on a scalar parameter.
    • head_or_spouse * min_(cap, income) limits the exemption to filers.
    • The separate path uses adjusted_gross_income_person + mt_loss_ald_reallocation, the same per-spouse base as mt_agi_indiv.
    • The joint path uses the tax unit's adjusted_gross_income. That is federal AGI, not Montana AGI, so there's no circularity.
    • Keeping the exemption out of mt_subtractions is right, because the joint and separate amounts differ. All four AGI and Social Security readers add the matching variant.
    • The variables are limited to MT, and the NH Add New Hampshire state supplementation for 2026 #10156 pattern doesn't apply.
  • Other readers. The readers of mt_agi_indiv / mt_agi_joint (standard deduction, medical floor, child and dependent care deduction, taxable income, and the state_agi mapping) should all see Montana AGI after line 34, and they do. The elderly homeowner/renter credit's gross household income doesn't read Montana AGI.
  • Changelog. changelog.d/mt-pension-exemption.added.md is a top-level fragment with the added type.
  • References. Each parameter cites the archived 2021 MCA and the Form 2 or instructions page that shows the value. The 2023 in_effect reference points at PDF p. 35, which has the repeal sentence.
  • Source-conflict ratchet (Tie source-conflict markers to the register shared with Axiom #10287). None of the new comments (in sources.yaml, the new variables, mt_agi_* and the Social Security files) matches CONFLICT_COMMENT_RE or ATTEMPT_RE, and none of those files is in KNOWN_UNMARKED. The guard passes statically, and CI's guard job is green at this head.
  • Partner tests. No files under tests/policy/baseline/partners/** are touched.

Axiom line assessment

There is no axiom: line (checked in every format). rulespec-us has no module or issue for MCA 15-30-2110(2)(c). The recommended line is a new dispatch-ready pe-parity issue marked queued, recording the corpus blocker (Should 2).

CI status

All 27 checks pass at 1ad2436b46 (gh pr checks 10392). None is pending or failing.

Branch status

The branch is 1 commit ahead of main and 29 behind. git merge-tree --write-tree PolicyEngine/main 1ad2436b46 merges cleanly. Main hasn't changed any Montana variable or parameter since the merge base.

Sibling checks:

Verdict: REQUEST_CHANGES

@DTrim99 DTrim99 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The structure, caps, thresholds and AGI/SS wiring match the 2021 MCA 15-30-2110(2)(c) and the 2021-2023 instructions, and 22 expectations hand-check. One critical: sources.yaml omits military_retirement_pay, but 15-30-2101(25)(b) counts uniformed-services retirement pay and worksheet line 2 takes 1040 lines 4b + 5b, so MT military retirees get $0 in 2021-2023, when this was their only relief (the 50% military subtraction starts in 2024). Add it with a test, and decide SBP survivors with a source. Two should-address items: a joint case in the phase-out range to test reduce-once, and the missing axiom line. Three suggestions. Full report in the comment above.

…n exemption

- Add military_retirement_pay (MCA 15-30-2101(25)(b); Form 1040 line 5b) and
  taxable_roth_conversions (worksheet line 2 takes all of line 4b) to the
  exemption's sources. Survivor Benefit Plan annuities stay out: the 2023
  line 34 instructions exclude death benefits, and Form 1099-R code 4 is for
  payments to a decedent's beneficiary.
- Test joint returns in the phase-out range for 2021-2023, where reducing
  line 3b once by the joint federal AGI differs from reducing each spouse.
- Note that years before 2021 use the 2021 cap and threshold.

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.

Montana 2021–2023: add the partial pension, annuity, and IRA income exemption (MCA 15-30-2110(2)(c))

2 participants