Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/fix-mt-military-retirement-exemption.added.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Montana's working military retirement and survivor benefit exemption (MCA 15-30-2120(3)(n)) from tax year 2024: the lesser of half the return's military retirement pay or its Montana earned income, plus half of military survivor benefits.
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
description: Montana allows the working military retirement and survivor benefit exemption when this is true.
values:
0000-01-01: false
# 15-30-2120(3)(n) first applies to tax year 2024.
2024-01-01: true
metadata:
unit: bool
period: year
label: Montana military retirement exemption in effect
reference:
- title: MCA 15-30-2120(3)(n)
href: https://archive.legmt.gov/bills/mca/title_0150/chapter_0300/part_0210/section_0200/0150-0300-0210-0200.html
- title: Montana Revenue Interim Committee, Tax Benefits for Veterans (November 2025), p. 1
href: https://archive.legmt.gov/content/Committees/Interim/2025-2026/RIC/Meetings/November_12_13_2025/veteran-tax-benefits.pdf#page=1
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
description: Montana subtracts this share of military retirement pay, up to the filer's Montana earned income, under the working military retirement exemption.
values:
2024-01-01: 0.5
metadata:
unit: /1
period: year
label: Montana working military retirement exemption rate
reference:
- title: MCA 15-30-2120(3)(n)(i) and (8)(a)
href: https://archive.legmt.gov/bills/mca/title_0150/chapter_0300/part_0210/section_0200/0150-0300-0210-0200.html
- title: 2025 Montana Form WMRE, Part II, line 7
href: https://revenue.mt.gov/files/Forms/Montana-Working-Military-Retirement-and-Survivor-Benefit-Exemption.pdf#page=1
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
description: Montana subtracts this share of military survivor benefits under the survivor benefit exemption.
values:
2024-01-01: 0.5
metadata:
unit: /1
period: year
label: Montana military survivor benefit exemption rate
reference:
- title: MCA 15-30-2120(3)(n)(ii)
href: https://archive.legmt.gov/bills/mca/title_0150/chapter_0300/part_0210/section_0200/0150-0300-0210-0200.html
- title: 2025 Montana Form WMRE, Part III, line 2
href: https://revenue.mt.gov/files/Forms/Montana-Working-Military-Retirement-and-Survivor-Benefit-Exemption.pdf#page=1
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,11 @@ values:
- salt_refund_income # Form 2 Subtractions Schedule
- mt_other_subtractions
2024-01-01:
# MCA 15-30-2120(3)(n) allows exempting up to 50% of military retirement pay
# (capped at MT earned income, (3)(n)(i)) and up to 50% of military survivor
# benefits regardless of other income ((3)(n)(ii), Form WMRE); not yet modeled.
- mt_interest_exemption_person
- mt_tuition_subtraction_person
- mt_old_age_subtraction
# MCA 15-30-2120(3)(n), Form WMRE
- mt_military_retirement_exemption
# 2021 Mont. Laws ch. 503 (SB 399) section 65 repealed 15-30-2110, MCA,
# and with it the disability income exclusion, for tax years beginning
# after December 31, 2023 (section 70(1)).
Expand All @@ -34,6 +33,8 @@ values:
- mt_interest_exemption_person
- mt_tuition_subtraction_person
- mt_old_age_subtraction
# MCA 15-30-2120(3)(n), Form WMRE
- mt_military_retirement_exemption
# TODO: Remove this subtraction starting in 2029 because the federal
# Schedule 1-A deductions expire after 2028.
- mt_federal_obbba_subtraction
Expand All @@ -54,6 +55,8 @@ metadata:
href: https://leg.mt.gov/bills/mca/title_0150/chapter_0300/part_0210/section_0100/0150-0300-0210-0100.html
- title: 2025 Montana Form 2 Instructions
href: https://revenuefiles.mt.gov/files/Forms/Montana-Individual-Income-Tax-Return-Form-2-Instructions/2025_Montana_Individual_Income_Tax_Return_Form_2_Instructions.pdf#page=21
- title: 2025 Montana Form WMRE
href: https://revenue.mt.gov/files/Forms/Montana-Working-Military-Retirement-and-Survivor-Benefit-Exemption.pdf#page=1
- title: "2021 Montana Session Laws, chapter 503 (SB 399), section 65 (repealer) and section 70 (effective dates) #page 68,70"
href: https://archive.legmt.gov/content/Publications/sales/2021SessionLaws_V3_ERRATA-VERSION.pdf#page=68
- title: 2024 Montana Form 2 instructions, repealed deductions
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
# MCA 15-30-2120(3)(n), (8) and (9); 2025 Montana Form WMRE.

- name: A working retiree exempts half the military retirement pay
period: 2026
input:
people:
head:
age: 45
military_retirement_pay: 30_000
employment_income: 60_000
spouse:
age: 43
tax_units:
tax_unit:
members: [head, spouse]
households:
household:
members: [head, spouse]
state_name: MT
output:
# Form WMRE line 8: the lesser of 60,000 and 0.5 * 30,000.
mt_military_retirement_exemption: [15_000, 0]
mt_subtractions: [15_000, 0]

- name: Montana earned income limits the retirement exemption
period: 2025
input:
people:
head:
age: 50
military_retirement_pay: 30_000
employment_income: 8_000
tax_units:
tax_unit:
members: [head]
households:
household:
members: [head]
state_name: MT
output:
mt_military_retirement_exemption: 8_000

- name: A retiree with no Montana earned income gets no retirement exemption
period: 2026
input:
people:
head:
age: 67
military_retirement_pay: 45_000
social_security_retirement: 30_000
taxable_interest_income: 5_000
spouse:
age: 65
tax_units:
tax_unit:
members: [head, spouse]
households:
household:
members: [head, spouse]
state_name: MT
output:
mt_military_retirement_exemption: [0, 0]

- name: A survivor exempts half the survivor benefits with no earned income
period: 2025
input:
people:
head:
age: 70
military_retirement_pay_survivors: 10_000
tax_units:
tax_unit:
members: [head]
households:
household:
members: [head]
state_name: MT
output:
mt_military_retirement_exemption: 5_000

- name: Retirement pay and survivor benefits on one return each get their exemption
period: 2026
input:
people:
head:
age: 60
military_retirement_pay: 20_000
self_employment_income: 5_000
spouse:
age: 58
military_retirement_pay_survivors: 10_000
tax_units:
tax_unit:
members: [head, spouse]
households:
household:
members: [head, spouse]
state_name: MT
output:
# min(0.5 * 20,000, 5,000) + 0.5 * 10,000
mt_military_retirement_exemption: [10_000, 0]

- name: The spouse's military pay counts against the return's wages
period: 2026
input:
people:
head:
age: 50
employment_income: 60_000
spouse:
age: 48
military_retirement_pay: 30_000
tax_units:
tax_unit:
members: [head, spouse]
households:
household:
members: [head, spouse]
state_name: MT
output:
mt_military_retirement_exemption: [15_000, 0]

- name: A business loss does not reduce wages in the earned income limit
period: 2026
input:
people:
head:
age: 50
military_retirement_pay: 30_000
employment_income: 6_000
self_employment_income: -4_000
tax_units:
tax_unit:
members: [head]
households:
household:
members: [head]
state_name: MT
output:
# Form WMRE line 3 enters a business loss as 0.
mt_military_retirement_exemption: 6_000

- name: A dependent's military pay does not count on the filer's return
period: 2026
input:
people:
head:
age: 70
employment_income: 40_000
dependent:
age: 45
is_tax_unit_dependent: true
military_retirement_pay: 20_000
tax_units:
tax_unit:
members: [head, dependent]
households:
household:
members: [head, dependent]
state_name: MT
output:
mt_military_retirement_exemption: [0, 0]

- name: A filer who fails the residency or timing conditions gets no exemption
period: 2026
input:
people:
head:
age: 45
military_retirement_pay: 30_000
employment_income: 60_000
mt_military_retirement_exemption_eligible: false
tax_units:
tax_unit:
members: [head]
households:
household:
members: [head]
state_name: MT
output:
mt_military_retirement_exemption: 0

- name: Montana has no military retirement exemption before 2024
period: 2023
input:
people:
head:
age: 45
military_retirement_pay: 30_000
employment_income: 60_000
tax_units:
tax_unit:
members: [head]
households:
household:
members: [head]
state_name: MT
output:
mt_military_retirement_exemption: 0
mt_subtractions: 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
from policyengine_us.model_api import *


class mt_military_retirement_exemption(Variable):
value_type = float
entity = Person
label = "Montana working military retirement and survivor benefit exemption"
unit = USD
definition_period = YEAR
documentation = (
"Form WMRE computes the exemption for the whole return, so the tax "
"unit head carries it."
)
reference = (
"https://archive.legmt.gov/bills/mca/title_0150/chapter_0300/part_0210/section_0200/0150-0300-0210-0200.html",
"https://revenue.mt.gov/files/Forms/Montana-Working-Military-Retirement-and-Survivor-Benefit-Exemption.pdf#page=1",
)
defined_for = StateCode.MT

def formula(person, period, parameters):
p = parameters(period).gov.states.mt.tax.income.subtractions.military_retirement
tax_unit = person.tax_unit
filer = person("is_tax_unit_head_or_spouse", period)
eligible = filer & person("mt_military_retirement_exemption_eligible", period)
retirement_pay = tax_unit.sum(
eligible * person("military_retirement_pay", period)
)
survivor_benefits = tax_unit.sum(
eligible * person("military_retirement_pay_survivors", period)
)
# 15-30-2120(8): the lesser of the return's Montana source wage
# income or the rate times the military retirement pay. Form WMRE
# lines 2 to 5 count wages and the net income of a business, a
# partnership or S corporation, and a farm, each at least zero.
earned_income = 0
for source in [
"irs_employment_income",
"self_employment_income",
"partnership_s_corp_income",
"farm_income",
]:
earned_income = earned_income + max_(
0, tax_unit.sum(filer * person(source, period))
)
retirement_exemption = min_(p.rate * retirement_pay, earned_income)
# 15-30-2120(3)(n)(ii): survivor benefits need no earned income.
survivor_exemption = p.survivor_rate * survivor_benefits
is_head = person("is_tax_unit_head", period)
return p.in_effect * is_head * (retirement_exemption + survivor_exemption)
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from policyengine_us.model_api import *


class mt_military_retirement_exemption_eligible(Variable):
value_type = bool
entity = Person
label = "Meets the residency and timing conditions of the Montana military retirement exemption"
definition_period = YEAR
default_value = True
documentation = (
"MCA 15-30-2120(9): the retiree or survivor became a Montana resident on "
"or after June 30, 2023, or lived in Montana before the military "
"retirement pay or survivor benefits began; claims the exemption "
"within five consecutive years of meeting that condition (tax years "
"2024 through 2028 for residents from before July 2023); and has not "
"claimed it before moving out of Montana. Set this to false for a "
"filer who fails any of these conditions."
)
reference = (
"https://archive.legmt.gov/bills/mca/title_0150/chapter_0300/part_0210/section_0200/0150-0300-0210-0200.html",
"https://revenue.mt.gov/files/Forms/Montana-Working-Military-Retirement-and-Survivor-Benefit-Exemption.pdf#page=2",
)
defined_for = StateCode.MT
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@ class military_retirement_pay(Variable):
"such as CRSC and VA Dependency and Indemnity Compensation (DIC) should be reported "
"under veterans_benefits. Included in federal gross income under 26 U.S.C. § 61(a)(10).\n\n"
"Known limitations:\n"
"- Montana (MCA 15-30-2120(3)(n)): allows a deduction of up to 50% of military retired pay "
"(capped at Montana earned income) starting in 2024; this deduction is not yet modeled.\n"
"- North Carolina (N.C. Gen. Stat. § 105-153.5(b)(5a)): deduction requires either 20 years of military "
"service or medical retirement; entering military_retirement_pay alone without service record "
"variables (years_in_military or is_permanently_disabled_veteran) defaults to no deduction."
Expand Down
Loading