Skip to content

The model skips Montana's 2017 itemized deduction limitation for high-income itemizers #10919

Open

Description

@MaxGhenis

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions