Skip to content

Phase out the Minnesota AMT exemption at 25% instead of the federal 2026 rate - #10256

Open
PavelMakarchuk wants to merge 2 commits into
mainfrom
fix-10204-mn-amt-phase-out-rate
Open

PavelMakarchuk wants to merge 2 commits into
mainfrom
fix-10204-mn-amt-phase-out-rate

Conversation

@PavelMakarchuk

Copy link
Copy Markdown
Collaborator

Summary

mn_amt reduced the Minnesota AMT exemption at the federal phase-out rate, gov.irs.income.amt.exemption.phase_out.rate. That rate is 50% from 2026, because P.L. 119-21 added it to IRC 55(d)(4). Minn. Stat. 290.091, subd. 3(b) says the exemption "is subject to the phase out under section 55(d)(2)" and that "section 55(d)(4) of the Internal Revenue Code does not apply". IRC 55(d)(2) uses 25%, and the 2025 Schedule M1MT, line 24, says "Multiply line 23 by 25% (.25)".

This PR adds gov.states.mn.tax.income.amt.phase_out_rate (0.25 from 2021, the first year of the other Minnesota AMT parameters) and uses it in mn_amt. Results through 2025 do not change, because the federal rate was also 25%.

Issue reproduction (couple, wages split evenly), mn_amt on main and on this branch:

Wages Year main branch
$300,000 2025 0 0
$300,000 2026 192.13 0
$350,000 2026 974.06 0

Tests

Added to mn_amt.yaml (arithmetic in each case):

  • 2026 joint, AMT taxable income $300,000, basic tax 0: $16,202.03 (main gives $18,733.28 at 50%). Fails on main, passes here.
  • 2026 joint, $300,000, basic tax $17,000: $0 (main gives $1,733.28). Fails on main, passes here.
  • 2026 single, $500,000 (exemption fully phased out at either rate): $33,750. Control.
  • 2025 joint, $300,000: $16,342.43. Control.

Results: mn_amt.yaml 2 failed, 7 passed on main; 9 passed here. tests/policy/baseline/gov/states/mn/: 536 passed. Parameter code-health tests: 124 passed.

Fixes #10204

🤖 Generated with Claude Code

mn_amt used the federal AMT exemption phase-out rate, which is 50% from
2026 under IRC 55(d)(4). Minn. Stat. 290.091, subd. 3(b) applies the
IRC 55(d)(2) phase-out (25%) and excludes 55(d)(4), so add a Minnesota
phase-out rate parameter and use it in mn_amt.

Fixes #10204.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@PavelMakarchuk
PavelMakarchuk marked this pull request as ready for review October 23, 2026 17:03
@codecov

codecov Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (909176a) to head (17d6989).
⚠️ Report is 622 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main    #10256   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            4         1    -3     
  Lines           76        20   -56     
  Branches         2         0    -2     
=========================================
- Hits            76        20   -56     
Flag Coverage Δ
unittests 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

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

DTrim99 commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Phase out the Minnesota AMT exemption at 25% instead of the federal 2026 rate

Summary

mn_amt reduced the Minnesota AMT exemption at the federal gov.irs.income.amt.exemption.phase_out.rate, which P.L. 119-21 raises to 50% from 2026 through IRC 55(d)(4). The PR adds gov.states.mn.tax.income.amt.phase_out_rate (0.25 from 2021) and uses it instead.

  • Law. The fix is correct. I fetched Minn. Stat. 290.091, subd. 3(b): the exemption "is subject to the phase out under section 55(d)(2) … and section 55(d)(4) of the Internal Revenue Code does not apply." IRC 55(d)(2) says 25 percent. Minnesota's IRC conformity date is "as amended through May 1, 2023" (290.01, subd. 31), before P.L. 119-21, so either way the rate stays 25%. The 2025 Schedule M1MT line 24 reads "Multiply line 23 by 25% (.25)."
  • Code and tests. The code change is one line, vectorized and limited to MN. The three 2026 expectations check out by hand.
  • Problems.
    • The new 2025 control case pins $16,342.43. That figure uses a pre-existing 2025 exemption of $95,390, but the 2025 Schedule M1MT the PR cites and the Department of Revenue's TY2025 table both say $95,300, which gives $16,348.50.
    • The axiom: line is missing.

Critical (must fix)

None.

Should address

1. The 2025 control case pins a wrong 2025 exemption; fix the 2025 values.

Files: policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/mn_amt.yaml (the new "MN AMT 2025 joint control" case) and policyengine_us/parameters/gov/states/mn/tax/income/amt/fractional_income_threshold.yaml (the 2025 values, added in 7c84e25).

What's wrong. The parameter's 2025 values are JOINT / SURVIVING_SPOUSE 95,390, SINGLE / HEAD_OF_HOUSEHOLD 71,540 and SEPARATE 47,700. The new control case relies on them: "2025 joint exemption 95,390 − 25% × 150,000 = 57,890 … 16,342.43."

What the sources say.

  • The 2025 Schedule M1MT, which this PR adds as its own reference, says at line 21: "If Married Filing Jointly or Qualifying Surviving Spouse: enter $95,300 / If Married Filing Separately: enter $47,660 / If Single or Head of Household: enter $71,470".
  • The Department of Revenue's Tax Year 2025 inflation-adjusted amounts, "290.091, Subd. 3 AMT Exemption", gives the same $95,300 / $47,660 / $71,470.
  • The 2021–2024 values match their M1MT forms (79,660, 82,150, 87,960, 92,710), and 2026 matches the TY2026 table (97,470 / 48,740 / 73,100). Only 2025 is off.

Why this is not critical. The PR doesn't change the 2025 exemption, and its 2025 results equal main's. But it adds a test that locks in a 2025 amount contradicted by the form it cites, so the mismatch shouldn't merge unflagged.

Fix (preferred). In fractional_income_threshold.yaml, set the 2025 values to 95,300 (JOINT, SURVIVING_SPOUSE), 71,470 (SINGLE, HEAD_OF_HOUSEHOLD) and 47,660 (SEPARATE). Then change the control case to exemption 95,300 − 37,500 = 57,800 and AMT = 6.75% × 242,200 = 16,348.50. Check the other MN files whose 2025 expectations depend on these values; the earlier cases in mn_amt.yaml are 2021–2022 and don't.

Fallback. File an issue for the 2025 values and drop or annotate the 2025 control case.

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 Minnesota § 290.091 module (us-mn/statutes/290/ contains 0121, 0123, 06 and others, but no 091), and no issue mentions 290.091 or #10256. So encoded-correct isn't available.

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

  • the module path (us-mn/statutes/290/091.yaml);
  • the corpus citation and verbatim text of 290.091, subd. 3(a)–(c), IRC 55(d)(2), and 290.01, subd. 31;
  • required outputs: the exemption after a 25% phase-out above $150,000 / $112,500 / $75,000, the tentative AMT at 6.75%, and the AMT above regular tax;
  • companion cases computed from the 2025 Schedule M1MT lines 21–29 and the TY2026 inflation table, not from PE output.

Suggestions

  1. California has the same problem in 2026; file a follow-up issue. ca_amt_exemption.py:26-27 multiplies the AMTI excess by the federal gov.irs.income.amt.exemption.phase_out.rate. That rate becomes 50% from 2026, but the 2025 Schedule P (540) Exemption Worksheet, line 5, says "Multiply line 4 by 25% (.25)". The same California-owned 25% parameter would fix it.
  2. mn_amt reference list. The variable's reference cites only the 2021 and 2022 M1MT forms. Adding the 290.091 link next to the new comment would help readers.

Verified correct

  • Statute. Minn. Stat. 290.091, subd. 3(b): "The exemption amount determined under this subdivision is subject to the phase out under section 55(d)(2) of the Internal Revenue Code, except that alternative minimum taxable income as determined under this section must be substituted in the computation of the phase out, and section 55(d)(4) of the Internal Revenue Code does not apply." The history runs through 1Sp2025 c 13.
  • Federal rule. IRC 55(d)(2): "reduced … by an amount equal to 25 percent of the amount by which the alternative minimum taxable income … exceeds (A) $150,000 … (B) $112,500 … (C) 50 percent of the dollar amount applicable under subparagraph (A)". The 50% rate is only in 55(d)(4)(A)(ii)(IV) ("by substituting '50 percent' for '25 percent'"), which Minnesota excludes.
  • Conformity. Minn. Stat. 290.01, subd. 31: "'Internal Revenue Code' means the Internal Revenue Code of 1986, as amended through May 1, 2023." That is before P.L. 119-21 (July 4, 2025), so even without the exclusion Minnesota wouldn't pick up the 2026 change.
  • Form. The 2025 Schedule M1MT (PDF p. 1) has line 22 at $150,000 / $75,000 / $112,500, line 24 "Multiply line 23 by 25% (.25)" and line 27 "Multiply line 26 by 6.75% (.0675)". The new reference anchor shows line 24.
  • Hand-checked expectations.
    • 2026 joint, AMT taxable income 300,000, basic tax 0: reduction 25% × 150,000 = 37,500; exemption 97,470 − 37,500 = 59,970; 6.75% × 240,030 = 16,202.025, giving 16,202.03 (within 0.01). At 50% it would be 18,733.28.
    • 2026 joint, basic tax 17,000: max(0, 16,202.03 − 17,000) = 0. At 50% it would be 1,733.28.
    • 2026 single, 500,000: 25% × 387,500 = 96,875, more than the 73,100 exemption, so the exemption is 0 and the AMT is 6.75% × 500,000 = 33,750.
    • 2025 joint control: 16,342.43 is right against the parameter as it stands, but the official exemption gives 16,348.50 (Should 1).
    • The 2026 exemption, 97,470, matches the TY2026 inflation table (PDF p. 3).
  • Code.
    • The scalar parameter is multiplied into a vectorized expression.
    • Nothing else reads the MN rate, and the federal parameter is untouched.
    • Results for 2021–2025 don't change, since both rates were 0.25.
    • The NH Add New Hampshire state supplementation for 2026 #10156 pattern doesn't apply (no state-gated key).
  • Parameter. The description follows the house template, the unit is /1, the period is year, and there are three single-source references with no page text in the titles. The 0.25 value from 2021 lines up with the other MN AMT parameters.
  • Changelog. changelog.d/fix-10204-mn-amt-phase-out-rate.fixed.md is a top-level fragment with the fixed type.
  • Source-conflict ratchet (Tie source-conflict markers to the register shared with Axiom #10287). The new mn_amt.py comment matches neither CONFLICT_COMMENT_RE nor ATTEMPT_RE, the new parameter has no comments, and CI's guard job passes at this head (run after Tie source-conflict markers to the register shared with Axiom #10287).
  • 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 § 290.091 module and no matching issue. The recommended line is a dispatch-ready pe-parity issue marked queued (Should 2).

CI status

All 29 checks pass at 17d698997e (gh pr checks 10256), including the four Baseline states shards, Python Rest and PR validation. None is pending.

Branch status

The branch is 2 commits ahead of main and 7 behind. git merge-tree --write-tree PolicyEngine/main 17d698997e merges cleanly. Main hasn't changed the MN AMT variable, its parameters or mn_amt.yaml since the merge base.

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 fix is correct: 290.091 subd. 3(b) applies the 55(d)(2) 25% phase-out and says 55(d)(4) doesn't apply, and 2021-2025 are unchanged. Two should-address items: (1) the new 2025 control case pins 16,342.43 from the existing 2025 exemption of 95,390, but M1MT line 21 and DOR's TY2025 table say 95,300 / 47,660 / 71,470 (giving 16,348.50), so fix the values and test or file an issue; (2) there's no axiom line. Two suggestions, including CA AMT, which also picks up the federal 50% in 2026. Full report in the comment above.

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.

Minnesota AMT: the exemption phases out at the federal 50% rate from 2026; Minn. Stat. 290.091 keeps 25%

2 participants