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..987ff4b49c9 --- /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, 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/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..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,4 +49,64 @@ 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, +# 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 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 64de249c87c..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 @@ -18,9 +20,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)