From 6776bd50a9bf8b31a37cedd67ba6ba43f1090325 Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Fri, 16 Oct 2026 16:08:58 -0400 Subject: [PATCH 1/2] Phase out the Minnesota AMT exemption at 25% 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 --- .../fix-10204-mn-amt-phase-out-rate.fixed.md | 1 + .../mn/tax/income/amt/phase_out_rate.yaml | 15 +++++ .../gov/states/mn/tax/income/mn_amt.yaml | 56 +++++++++++++++++++ .../gov/states/mn/tax/income/amt/mn_amt.py | 6 +- 4 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 changelog.d/fix-10204-mn-amt-phase-out-rate.fixed.md create mode 100644 policyengine_us/parameters/gov/states/mn/tax/income/amt/phase_out_rate.yaml diff --git a/changelog.d/fix-10204-mn-amt-phase-out-rate.fixed.md b/changelog.d/fix-10204-mn-amt-phase-out-rate.fixed.md new file mode 100644 index 00000000000..703f8dcd6ff --- /dev/null +++ b/changelog.d/fix-10204-mn-amt-phase-out-rate.fixed.md @@ -0,0 +1 @@ +Phase out the Minnesota AMT exemption at 25% under Minn. Stat. 290.091, subd. 3(b), instead of the federal rate, which rises to 50% from 2026. diff --git a/policyengine_us/parameters/gov/states/mn/tax/income/amt/phase_out_rate.yaml b/policyengine_us/parameters/gov/states/mn/tax/income/amt/phase_out_rate.yaml new file mode 100644 index 00000000000..fc31ad4b5be --- /dev/null +++ b/policyengine_us/parameters/gov/states/mn/tax/income/amt/phase_out_rate.yaml @@ -0,0 +1,15 @@ +description: Minnesota reduces the alternative minimum tax exemption by this share of alternative minimum taxable income above the phase-out threshold. +values: + 2021-01-01: 0.25 + +metadata: + period: year + unit: /1 + label: Minnesota AMT exemption phase-out rate + reference: + - title: Minnesota Statutes Section 290.091, Subd. 3(b) (phase out under IRC 55(d)(2); IRC 55(d)(4) does not apply) + href: https://www.revisor.mn.gov/statutes/cite/290.091#stat.290.091.3 + - title: 26 U.S. Code ยง 55(d)(2) - 25 percent of alternative minimum taxable income above the threshold + href: https://www.law.cornell.edu/uscode/text/26/55#d_2 + - title: 2025 Minnesota Schedule M1MT form, Line 24 + href: https://www.revenue.state.mn.us/sites/default/files/2026-07/m1mt-25.pdf#page=1 diff --git a/policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/mn_amt.yaml b/policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/mn_amt.yaml index 99a16e65e7f..3a2e603a63b 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/mn_amt.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/mn_amt.yaml @@ -56,3 +56,59 @@ state_code: MN output: mn_amt: 2764.8 + +# Minn. Stat. 290.091, subd. 3(b): the exemption phases out at 25% under +# IRC 55(d)(2); IRC 55(d)(4), which sets the federal 50% rate from 2026, +# does not apply. 2026 joint exemption $97,470, threshold $150,000. +- name: MN AMT 2026 joint exemption phases out at 25%, not the federal 50% + absolute_error_margin: 0.01 + period: 2026 + input: + filing_status: JOINT + mn_amt_taxable_income: 300_000 + mn_basic_tax: 0 + state_code: MN + output: + # Reduction = 25% x (300,000 - 150,000) = 37,500. + # Exemption = 97,470 - 37,500 = 59,970. + # AMT = 6.75% x (300,000 - 59,970) = 6.75% x 240,030 = 16,202.03. + # (At 50% the exemption would be 22,470 and the AMT 18,733.28.) + mn_amt: 16_202.03 + +- name: MN AMT 2026 joint, no AMT when regular tax exceeds the 25% phase-out AMT + absolute_error_margin: 0.01 + period: 2026 + input: + filing_status: JOINT + mn_amt_taxable_income: 300_000 + mn_basic_tax: 17_000 + state_code: MN + output: + # max(0, 16,202.03 - 17,000) = 0. (At 50%: 18,733.28 - 17,000 = 1,733.28.) + mn_amt: 0 + +- name: MN AMT 2026 single, exemption fully phased out + absolute_error_margin: 0.01 + period: 2026 + input: + filing_status: SINGLE + mn_amt_taxable_income: 500_000 + mn_basic_tax: 0 + state_code: MN + output: + # 25% x (500,000 - 112,500) = 96,875 > 73,100 exemption, so exemption = 0. + # AMT = 6.75% x 500,000 = 33,750. + mn_amt: 33_750 + +- name: MN AMT 2025 joint control at the 25% phase-out rate + absolute_error_margin: 0.01 + period: 2025 + input: + filing_status: JOINT + mn_amt_taxable_income: 300_000 + mn_basic_tax: 0 + state_code: MN + output: + # 2025 joint exemption 95,390 - 25% x 150,000 = 57,890. + # AMT = 6.75% x (300,000 - 57,890) = 6.75% x 242,110 = 16,342.43. + mn_amt: 16_342.43 diff --git a/policyengine_us/variables/gov/states/mn/tax/income/amt/mn_amt.py b/policyengine_us/variables/gov/states/mn/tax/income/amt/mn_amt.py index 64de249c87c..fbcf4d1bad6 100644 --- a/policyengine_us/variables/gov/states/mn/tax/income/amt/mn_amt.py +++ b/policyengine_us/variables/gov/states/mn/tax/income/amt/mn_amt.py @@ -18,9 +18,11 @@ def formula(tax_unit, period, parameters): # calculate gross AMT amount filing_status = tax_unit("filing_status", period) p = parameters(period).gov.states.mn.tax.income - p_gov = parameters(period).gov.irs.income.amt.exemption.phase_out excess_taxinc = max_(0, taxinc - p.amt.income_threshold[filing_status]) - fractional_taxinc = excess_taxinc * p_gov.rate + # Minn. Stat. 290.091, subd. 3(b): the exemption phases out under + # IRC 55(d)(2) at 25%, and IRC 55(d)(4), which sets the federal 50% + # rate from 2026, does not apply. + fractional_taxinc = excess_taxinc * p.amt.phase_out_rate fractional_threshold = p.amt.fractional_income_threshold[filing_status] taxinc_amount = max_(0, fractional_threshold - fractional_taxinc) net_taxinc = max_(0, taxinc - taxinc_amount) From b68c38b1ece7a02f99c3b61147d7f77afe8b8bbf Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Sun, 25 Oct 2026 21:50:56 -0400 Subject: [PATCH 2/2] Use the published 2025 Minnesota AMT exemption amounts - Set the 2025 exemption to 95,300 (joint, surviving spouse), 71,470 (single, head of household) and 47,660 (separate), as on 2025 Schedule M1MT line 21 and the DOR TY2025 inflation-adjusted amounts table, which is added as a reference. - Expect 16,348.50 in the 2025 joint control case, and replace the 2025 single case's pinned model output with the M1MT line 21-27 result, 2,769.525. - Cite Minn. Stat. 290.091, subd. 3 and the 2025 M1MT in mn_amt. Co-Authored-By: Claude Opus 5.5 --- .../fix-10204-mn-amt-phase-out-rate.fixed.md | 2 +- .../amt/fractional_income_threshold.yaml | 12 +++++----- .../gov/states/mn/tax/income/mn_amt.yaml | 22 +++++++++---------- .../gov/states/mn/tax/income/amt/mn_amt.py | 2 ++ 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/changelog.d/fix-10204-mn-amt-phase-out-rate.fixed.md b/changelog.d/fix-10204-mn-amt-phase-out-rate.fixed.md index 703f8dcd6ff..987ff4b49c9 100644 --- a/changelog.d/fix-10204-mn-amt-phase-out-rate.fixed.md +++ b/changelog.d/fix-10204-mn-amt-phase-out-rate.fixed.md @@ -1 +1 @@ -Phase out the Minnesota AMT exemption at 25% under Minn. Stat. 290.091, subd. 3(b), instead of the federal rate, which rises to 50% from 2026. +Phase out the Minnesota AMT exemption at 25% under Minn. Stat. 290.091, subd. 3(b), instead of the federal rate, which rises to 50% from 2026, and correct the 2025 Minnesota AMT exemption amounts to $95,300, $71,470 and $47,660. diff --git a/policyengine_us/parameters/gov/states/mn/tax/income/amt/fractional_income_threshold.yaml b/policyengine_us/parameters/gov/states/mn/tax/income/amt/fractional_income_threshold.yaml index 4c13ec1de72..c6d8bd4779c 100644 --- a/policyengine_us/parameters/gov/states/mn/tax/income/amt/fractional_income_threshold.yaml +++ b/policyengine_us/parameters/gov/states/mn/tax/income/amt/fractional_income_threshold.yaml @@ -26,6 +26,8 @@ metadata: href: https://www.revenue.state.mn.us/sites/default/files/2025-07/m1mt-24.pdf#page=1 - title: 2025 Minnesota Schedule M1MT form, Line 21 href: https://www.revenue.state.mn.us/sites/default/files/2026-07/m1mt-25.pdf#page=1 + - title: Minnesota Department of Revenue, Tax Year 2025 Inflation-Adjusted Amounts, 290.091 Subd. 3 AMT Exemption + href: https://www.revenue.state.mn.us/sites/default/files/2024-12/inflation-adjusted-amounts-2025.pdf#page=3 - title: Minnesota Department of Revenue, Tax Year 2026 Inflation-Adjusted Amounts, 290.091 Subd. 3 AMT Exemption href: https://www.revenue.state.mn.us/sites/default/files/2025-12/inflation-adjusted-amounts-2026.pdf#page=3 @@ -34,33 +36,33 @@ JOINT: 2022-01-01: 82_150 2023-01-01: 87_960 2024-01-01: 92_710 - 2025-01-01: 95_390 + 2025-01-01: 95_300 2026-01-01: 97_470 HEAD_OF_HOUSEHOLD: 2021-01-01: 59_750 2022-01-01: 61_610 2023-01-01: 65_970 2024-01-01: 69_530 - 2025-01-01: 71_540 + 2025-01-01: 71_470 2026-01-01: 73_100 SURVIVING_SPOUSE: 2021-01-01: 79_660 2022-01-01: 82_150 2023-01-01: 87_960 2024-01-01: 92_710 - 2025-01-01: 95_390 + 2025-01-01: 95_300 2026-01-01: 97_470 SINGLE: 2021-01-01: 59_750 2022-01-01: 61_610 2023-01-01: 65_970 2024-01-01: 69_530 - 2025-01-01: 71_540 + 2025-01-01: 71_470 2026-01-01: 73_100 SEPARATE: 2021-01-01: 39_840 2022-01-01: 41_080 2023-01-01: 43_990 2024-01-01: 46_360 - 2025-01-01: 47_700 + 2025-01-01: 47_660 2026-01-01: 48_740 diff --git a/policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/mn_amt.yaml b/policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/mn_amt.yaml index 3a2e603a63b..702e7b079a4 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/mn_amt.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/mn_amt.yaml @@ -38,14 +38,8 @@ output: mn_amt: 675 -# 2025 test case -# Single filer with AMT taxable income at threshold (112_500) -# fractional_income_threshold = 10% of income_threshold = 0.1 * 112_500 = 11_250 -# AMT income above fractional threshold = 112_500 - 11_250 = 101_250 -# AMT = 6.75% * 101_250 - 0 basic tax = 6,834.375 -# But fractional income (10% threshold) = max(0.1 * 112_500 - AMT_taxable_income, 0) = 0 -# So AMT = max(0.0675 * 112_500, 675) - 0 = 7,593.75 -# Actual computed value is 2764.8 +# 2025 Schedule M1MT, single filer with AMT taxable income at the line 22 +# phase-out threshold of $112,500. - name: MN AMT 2025 single at threshold absolute_error_margin: 0.01 period: 2025 @@ -55,7 +49,10 @@ mn_basic_tax: 0 state_code: MN output: - mn_amt: 2764.8 + # Line 21 exemption 71,470; line 23 excess over 112,500 = 0, so line 25 + # exemption stays 71,470. Line 26 = 112,500 - 71,470 = 41,030. + # Line 27 AMT = 6.75% x 41,030 = 2,769.525. + mn_amt: 2_769.525 # Minn. Stat. 290.091, subd. 3(b): the exemption phases out at 25% under # IRC 55(d)(2); IRC 55(d)(4), which sets the federal 50% rate from 2026, @@ -109,6 +106,7 @@ mn_basic_tax: 0 state_code: MN output: - # 2025 joint exemption 95,390 - 25% x 150,000 = 57,890. - # AMT = 6.75% x (300,000 - 57,890) = 6.75% x 242,110 = 16,342.43. - mn_amt: 16_342.43 + # 2025 Schedule M1MT: line 21 joint exemption 95,300; line 24 reduction + # 25% x (300,000 - 150,000) = 37,500; line 25 exemption 57,800. + # Line 27 AMT = 6.75% x (300,000 - 57,800) = 6.75% x 242,200 = 16,348.50. + mn_amt: 16_348.50 diff --git a/policyengine_us/variables/gov/states/mn/tax/income/amt/mn_amt.py b/policyengine_us/variables/gov/states/mn/tax/income/amt/mn_amt.py index fbcf4d1bad6..2a2bc304810 100644 --- a/policyengine_us/variables/gov/states/mn/tax/income/amt/mn_amt.py +++ b/policyengine_us/variables/gov/states/mn/tax/income/amt/mn_amt.py @@ -8,8 +8,10 @@ class mn_amt(Variable): unit = USD definition_period = YEAR reference = ( + "https://www.revisor.mn.gov/statutes/cite/290.091#stat.290.091.3", "https://www.revenue.state.mn.us/sites/default/files/2023-02/m1mt_21.pdf", "https://www.revenue.state.mn.us/sites/default/files/2023-01/m1mt_22.pdf", + "https://www.revenue.state.mn.us/sites/default/files/2026-07/m1mt-25.pdf", ) defined_for = StateCode.MN