Repository navigation
Description
For tax year 2017, the Montana Department of Revenue had high-income itemizers reduce their deductions on Worksheet VI-IDL. A filer used the worksheet once Montana AGI passed $261,500 single, $313,800 joint, $287,650 as head of household or $156,900 married filing separately. The model adds up Montana's 2017 itemized deductions with no such reduction, so it gives these filers a larger deduction and a lower Montana income tax than the department allows.
For example, a single Montana filer in 2017 has $400,000 of wages, $8,000 of real estate taxes and $30,000 of cash gifts to charity. The model counts $43,000 of Montana itemized deductions: the taxes, the gifts and a $5,000 federal income tax deduction. On the worksheet, this filer subtracts the smaller of two amounts from $43,000: 80% of the $38,000 in taxes and gifts ($30,400), or 3% of the $138,500 by which Montana AGI exceeds $261,500 ($4,155). The filer then deducts the remaining $38,845. When we set the model's Montana itemized deductions to $38,845, the model raises this filer's 2017 Montana income tax from $23,907.00 to $24,193.70, by $286.70.
The model overstates the deduction in 2017 household calculations for Montana itemizers above those thresholds. The department printed the same worksheet in its 2015 and 2016 instructions, with each year's thresholds. The model carries its 2017 Montana parameters back to 2015, so it skips the limitation in those years too. The department printed no such worksheet for 2018 through 2023, and from 2024 the model builds Montana taxable income from federal taxable income.
What the law says
In its 2017 Form 2 instructions for Schedule III line 30, the Department of Revenue tells filers whose Montana AGI exceeds those amounts to "mark the box on line 30 and complete Worksheet VI-IDL". The department also prints the four thresholds on line 30 of Schedule III, in its copy of the 2017 Form 2 in the same booklet. On Worksheet VI-IDL, the filer:
- adds Schedule III lines 4 through 6, 7e through 20 and 26 through 29 on line 1;
- adds lines 4, 5, 6, 7e, 15, 20 and 29 on line 2: medical and dental expenses, medical and long-term care insurance premiums, the federal income tax deduction, investment interest, casualty or theft losses, and gambling losses;
- takes 80% of line 1 minus line 2 on line 4;
- takes 3% of Montana AGI above the threshold on line 8;
- subtracts the smaller of lines 4 and 8 from line 1 on line 10, and enters the result on Schedule III line 30 and Form 2 line 42.
The department gives the worksheet a second column for a spouse who files separately on the same form (status 3a).
In section 15-30-2131(1)(a) of the Montana Code Annotated (2017), the Legislature allows the deductions that sections 161 and 211 of the Internal Revenue Code refer to, with listed exceptions. In ARM 42.15.525(1) (archived copy of the Secretary of State's rules site), the department has filers use Montana AGI wherever Congress, through the Internal Revenue Code, limits those deductions by a percent of AGI. For 2017, the department printed the same thresholds and rates that the model already stores for the federal limitation under section 68.
The Legislature defines the Internal Revenue Code as the Code as amended (MCA 15-30-2101(13), 2017 edition). In 26 U.S.C. 68(f), Congress switched the federal limitation off for tax years 2018 through 2025, and the department printed no limitation worksheet in its instructions for 2018 through 2023.
In the code
- In
mt_itemized_deductions_joint.pyL41-L59, the model adds interest, the other deductions and charity, and returns the sum with no limit:is_head = person("is_tax_unit_head", period) return is_head * (interest_ded + other_deductions + charitable_deduction)
- In
mt_non_medical_itemized_deductions_indiv.pyL45-L57 andmt_itemized_deductions_indiv.pyL31-L36, the model builds each spouse's separate column the same way. - In
mt_taxable_income_joint.pyL34-L38, the model takes the larger of that sum and the standard deduction. - The model stores no Montana limitation parameter under
parameters/gov/states/mt/tax/income/deductions/itemized/. - For the federal return, the model stores the same 2017 thresholds in
applicable_amount.yaml(lines 10, 31, 52 and 73), with the 3% rate inagi_rate.yamlL3 and the 80% rate initemized_deduction_rate.yamlL3.
Reproduction
We ran this at commit 045d1ae:
from policyengine_us import Simulation
YEAR = 2017
VARIABLES = [
"mt_agi_joint",
"mt_itemized_deductions_joint",
"mt_taxable_income_joint",
"mt_income_tax",
]
def situation(itemized=None):
filer = {
"age": {YEAR: 45},
"employment_income": {YEAR: 400_000},
"real_estate_taxes": {YEAR: 8_000},
"charitable_cash_donations": {YEAR: 30_000},
}
if itemized is not None:
filer["mt_itemized_deductions_joint"] = {YEAR: itemized}
group = {"members": ["filer"]}
return {
"people": {"filer": filer},
"tax_units": {"tax_unit": group},
"spm_units": {"spm_unit": group},
"families": {"family": group},
"marital_units": {"marital_unit": group},
"households": {"household": {**group, "state_code": {YEAR: "MT"}}},
}
# Worksheet VI-IDL line 10 for this filer is 38,845.
for label, itemized in [("model", None), ("worksheet", 38_845)]:
sim = Simulation(situation=situation(itemized))
values = {v: float(sim.calculate(v, YEAR).sum()) for v in VARIABLES}
print(label, " ".join(f"{v}={x:,.2f}" for v, x in values.items()))It prints:
model mt_agi_joint=400,000.00 mt_itemized_deductions_joint=43,000.00 mt_taxable_income_joint=354,600.00 mt_income_tax=23,907.00
worksheet mt_agi_joint=400,000.00 mt_itemized_deductions_joint=38,845.00 mt_taxable_income_joint=358,755.00 mt_income_tax=24,193.70
With YEAR = 2015 or YEAR = 2016, the model line comes out the same.
Fix
We can add a Montana step that applies Worksheet VI-IDL to the joint total and to each spouse's separate column, with Montana AGI and the worksheet's line 2 exclusions. The model already stores the worksheet's 2015, 2016 and 2017 thresholds and rates as federal limitation parameters, so the step can read them there, as the model does for Virginia's rates in va_reduced_itemized_deductions. The model could instead store Montana's own values for 2015 through 2017 and switch the limitation off from 2018.
Related
We left this limitation unmodeled in #10847, which corrected Montana's 2017 to 2020 parameters.
Activity