Skip to content

Add uprating and rounding rules for ME, MN, and MT tax parameters - #9411

Open
jindal-git wants to merge 2 commits into
PolicyEngine:mainfrom
jindal-git:add-state-uprating-me-mn-mt
Open

Add uprating and rounding rules for ME, MN, and MT tax parameters#9411
jindal-git wants to merge 2 commits into
PolicyEngine:mainfrom
jindal-git:add-state-uprating-me-mn-mt

Conversation

@jindal-git

Copy link
Copy Markdown
Contributor

Summary of Changes

Adds inflation uprating and statutory rounding rules across state tax parameters in Maine, Minnesota, and Montana:

  1. Maine:

    • me/.../deductions/standard/amount.yaml: Added uprating: gov.irs.uprating with downward $50 rounding (interval: 50, type: downwards) per 36 MRSA § 5403.
    • me/.../deductions/standard/aged_or_blind.yaml: Added uprating: gov.irs.uprating with downward $50 rounding per 36 MRSA § 5403.
  2. Minnesota:

    • mn/.../deductions/itemized/reduction/alternate/income_threshold.yaml: Added downward $50 uprating per Minn. Stat. § 290.0122 Subd. 3.
    • mn/.../deductions/standard/reduction/alternate/income_threshold.yaml: Added downward $50 uprating per Minn. Stat. § 290.0123 Subd. 6.
    • mn/.../homestead_credit_refund/max_refund.yaml: Added nearest $10 uprating to all bracket thresholds and refund amounts per Minn. Stat. § 290A.04 Subd. 4 and § 270C.22.
    • mn/.../credits/marriage/minimum_individual_income.yaml: Added published 2025 threshold ($31,000) and nearest $1,000 uprating per Minn. Stat. § 290.0675 Subd. 3.
    • mn/.../credits/marriage/minimum_taxable_income.yaml: Added published 2025 threshold ($48,000) and nearest $1,000 uprating per Minn. Stat. § 290.0675 Subd. 3.
  3. Montana:

    • mt/.../subtractions/old_age/amount.yaml: Added nearest $10 uprating per MCA § 15-30-2120(3)(g) & (7)(b), and updated citation from repealed § 15-30-2110 to § 15-30-2120.
  4. Testing & Changelog:

    • Added 5 new regression tests in policyengine_us/tests/core/test_state_uprating_rounding.py (26 total passing).
    • Verified 596 Maine baseline tests, 561 Montana baseline tests, and 169 Minnesota tax baseline tests pass.
    • Added changelog fragment changelog.d/add-state-uprating-me-mn-mt.changed.md.

Closes #9410

@anth-volk anth-volk left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Program review

Base repository: PolicyEngine/policyengine-us
PR number: 9411
Reviewed head SHA: b5429fc
Merge base SHA: ea0637c
Mode: full
Scope: changed inflation-adjustment and rounding behavior and its direct consumers
Source manifest: /private/tmp/policyengine-command-runs/75c2761f5079/pr-9411-review-sources.json
Review status: PARTIAL

Source Documents

Critical

C1 — CRITICAL: Maine additional standard deduction is already $50 too low in 2026 (OPEN)

Location: policyengine_us/parameters/gov/states/me/tax/income/deductions/standard/aged_or_blind.yaml:26-30, repeated for every filing-status child.

Trigger and observed behavior: for tax year 2026, the added gov.irs.uprating metadata reapplies inflation to the rounded 2025 values and rounds down to $50, producing $2,000 for single/head-of-household filers and $1,600 for joint/separate/surviving-spouse filers; the added test asserts those outputs. Expected behavior: Maine §5124-C(1-B)(B) makes the additional deduction the amount allowed by IRC §63(c)(3); the IRS's 2026 published amounts are $2,050 and $1,650, respectively. Thus every aged/blind box reduces the Maine deduction by $50. This PR causes the mismatch by replacing the carried explicit amount with a fresh projection and by applying Maine §5403's $50-down rule even though §5403(2) adjusts the basic amount in §5124-C(1-B)(A)(1), not paragraph B. Sources: 36 M.R.S. §5124-C and IRS Rev. Proc. 2025-32, §3.15.

C2 — CRITICAL: Minnesota homestead-refund values use the income-tax lag, one year earlier than chapter 290A requires (OPEN)

Location: policyengine_us/parameters/gov/states/mn/tax/property/homestead_credit_refund/max_refund.yaml:26-30 and the corresponding uprating blocks on every nonzero threshold and refund amount through line 460.

Trigger and observed behavior: parameter year 2026 represents household income earned in 2026 for a refund payable in 2027, but gov.irs.uprating produces values using the index available for ordinary 2026 tax parameters; the snapshot returns a final eligibility threshold of $145,720. Expected behavior: §270C.22(1)(b),(d) says chapter 290A's statutory year is the household-income year and, after the statutory year 2023, a refund payable in 2027 uses the 12-month C-CPI-U period ending August 31, 2026 relative to the period ending August 31, 2023, followed by nearest-$10 half-up rounding. Applying that statutory timing to the stored index projection and the $135,410 statutory cutoff yields $146,650, $930 higher. Households with 2026 income from $145,720 through $146,649 are incorrectly made ineligible, and all nonzero maximum-refund bands use stale amounts. The cause is reuse of an IRS tax-year uprating stream rather than a chapter-290A refund-payable-year series. Sources: Minn. Stat. §290A.04 subd. 4 and Minn. Stat. §270C.22 subd. 1(b),(d),(e).

C3 — CRITICAL: Montana's old-age subtraction uses the wrong index and reference period (OPEN)

Location: policyengine_us/parameters/gov/states/mt/tax/income/subtractions/old_age/amount.yaml:25-29.

Trigger and observed behavior: for tax year 2026, the snapshot returns $5,790 by applying gov.irs.uprating, an IRS-oriented 12-month Chained CPI-U series, to the explicit rounded 2025 value. Expected behavior: MCA §15-30-2101(1),(12) defines ordinary CPI-U, U.S. city average/all items/1982-84=100, with the inflation factor equal to June of the preceding tax year divided by June 2023; §15-30-2120(3)(g),(7) applies that factor to the statutory $5,500 and rounds the result to nearest $10 for that tax year. The selected index, base period, lag, and rounded-value chaining therefore do not implement the statute, so future deductions for every taxpayer age 65 or older are not legally derived. The explicit 2025 value $5,660 remains correct and is independently published by Montana Revenue; the defect begins with automatic 2026 projection. Sources: MCA §15-30-2101, MCA §15-30-2120, and Montana Revenue 2025 tax tables and deductions.

Should Address

A1 — SHOULD ADDRESS: Maine basic-deduction metadata does not encode Maine's statutory window or fixed base (OPEN)

Location: policyengine_us/parameters/gov/states/me/tax/income/deductions/standard/amount.yaml:31-35, repeated for all filing statuses.

Maine requires the nonseasonally adjusted C-CPI-U 12-month average ending June 30 of the preceding calendar year divided by the corresponding average ending June 30, 2017, applied to the statutory $12,000 single/separate base; head-of-household is 1.5 times and joint/surviving-spouse twice that amount. Increases round down to $50, and §5403(13) prevents a lower adjustment than the preceding year. The PR instead chains gov.irs.uprating from the explicit rounded 2025 amounts; that stream is designed for a different federal reference window and does not express the 2017 base or Maine's nondecrease rule. In the stored projection the resulting 2026-2036 basic amounts happened to match the direct statutory computation, so this is not counted as a demonstrated value error, but the implementation can diverge after new CPI observations. The automatic change starts in 2026; explicit values through 2025 are unchanged. Sources: 36 M.R.S. §§5402(1), 5403(2),(13),(14) and §5124-C(1-B)(A).

A2 — SHOULD ADDRESS: Minnesota law does not establish separate CPI-uprated, nearest-$1,000 marriage-credit minima (OPEN)

Location: policyengine_us/parameters/gov/states/mn/tax/income/credits/marriage/minimum_individual_income.yaml:12-16 and minimum_taxable_income.yaml:13-17.

The explicit 2025 values, $31,000 and $48,000, agree with Minnesota Revenue's 2025 Schedule M1MA. Section 290.0675, however, derives the credit from the annually adjusted tax schedules and directs the commissioner to publish a table whose earnings brackets are no wider than $2,000; it does not independently index these two eligibility cutoffs or prescribe nearest-$1,000 rounding. The PR automatically produces $32,000 and $49,000 for 2026. Expected behavior is to derive the no-credit boundary from the statutory formula or encode the commissioner's published annual table. Until the 2026 schedule is compared, the extrapolated thresholds are not source-supported and may incorrectly admit or reject filers at the boundary. Source: Minn. Stat. §290.0675 subd. 3 and Minnesota Revenue 2025 M1MA.

A3 — SHOULD ADDRESS: nearest implements ties-to-even, not Minnesota's required half-up rule (OPEN)

Location: policyengine_us/parameters/gov/states/mn/tax/property/homestead_credit_refund/max_refund.yaml:26-30 and the corresponding rounding blocks throughout the scale.

Trigger/year: any projected threshold or maximum whose unrounded value ends exactly halfway between $10 increments. Expected under Minn. Stat. §270C.22(e): an amount ending in $5 rounds upward, so $3,485 -> $3,490. Observed: policyengine-core 3.30.2 maps type: nearest to Python round; the focused diagnostic returned $3,480 for $3,485 (and $3,500 for $3,495), demonstrating ties-to-even. The error can shift a homestead-refund income band or maximum by $10 in a tie year, but no currently generated tie year was established before recovery, so the issue is noncritical under the workflow rubric. The diff introduces this behavior by adding type: nearest. Evidence: core parameters/operations/uprate_parameters.py:379-391, Minnesota §270C.22(e), and the focused diagnostic artifact above.

Suggestions

None.

Evidence Gaps

  • The official Minnesota 2025 M1MA and M1PR PDF routes returned 404, so their complete contents and physical page citations were not verified; official search-result extracts did corroborate the cited 2025 thresholds and table values.
  • No official Minnesota 2026 adjusted-amount bulletin or Schedule M1MA was acquired within the source-review budget, so the projected 2026 alternate-deduction and marriage-credit thresholds were not compared with commissioner-published values.

Notes

  • The federal-index implementation concern reported by the code reviewer overlaps the state-specific Maine, Minnesota, and Montana findings and is not counted separately.
  • The Minnesota alternate itemized- and standard-deduction thresholds use the correct index family, tax-year timing, and downward-$50 rounding direction based on the reviewed statutes, although the generic metadata cannot preserve the commissioner's publication vintage or direct statutory base calculation.
  • All represented nonzero Minnesota homestead-refund thresholds and maximum amounts receive adjustment metadata; the initial zero threshold and final zero amount remain fixed.
  • No partner contract file changed. These parameter changes can nevertheless alter partner-visible tax and refund calculations beginning in 2026.
  • At capture, the PR head was 69 commits behind the base branch and no status checks were attached. The final GitHub check at 2026-09-10T15:18:02Z confirmed that the PR remained open, its head was unchanged, and GitHub still reported it mergeable but blocked; the base branch had advanced to 0b9db3754da37cc236a8020da10669e952af0086.

Validation Summary

At reviewed head b5429fcf18f269bbaa80c3143a9f36c635048db2, all 26 Python uprating/rounding regression tests and 90 directly relevant Maine, Minnesota, and Montana YAML policy cases passed; the bounded combined invocation exited 0 in 88.15 seconds. git diff --check passed, the detached snapshot remained clean, and policyengine_us imported from the snapshot. These regression tests reproduce the generic adjustment implementation but do not independently validate state-specific index periods, fixed statutory bases, or Minnesota's half-up rounding rule. Source integrity: 11 official HTML originals accepted, 0 rejected, 0 discarded derivatives, and 0 rendered pages.

Timing

setup seconds: 3229.00s; parallel review seconds: 1344.00s; policy role seconds: 1344.00s; code role seconds: 797.00s; adjudication seconds: 72.00s; consolidation cleanup seconds: 104.00s; elapsed seconds: 4874.00s

Review Severity

REQUEST_CHANGES. Open findings: 3 critical, 3 should address, 0 suggestions.

@jindal-git

Copy link
Copy Markdown
Contributor Author

Thanks for the detailed review and catch on the statutory nuances, @anth-volk! We've updated the branch to address all findings:

Critical Findings

  • C1 & A1 (Maine Standard Deductions — Basic & Additional):
    • Aged / Blind Additional Deduction: Conforms directly to federal IRC § 63(c)(3) per 36 M.R.S. § 5124-C(1-B)(B). We added explicit 2026 values matching IRS Rev. Proc. 2025-32 § 3.15 ($2,050 for unmarried / $1,650 for married), eliminating the projection discrepancy. We retained the federal uprating metadata for 2027+.
    • Basic Standard Deduction: We added explicit 2026 statutory amounts published by Maine Revenue Services per 36 M.R.S. § 5124-C ($15,300 single/separate, $30,600 married joint / surviving spouse, $22,950 head of household), and retained downward-$50 rounding uprating metadata for 2027+.
  • C2 & A3 (Minnesota Homestead Credit Refund):
    • Because Minn. Stat. § 270C.22 uses an August 31 refund-payable-year index window (relative to 2023) and half-up rounding (which creates a 1-year lag and mismatch with federal tax-year gov.irs.uprating), we have reverted max_refund.yaml to the clean published 2025 schedule matching main. We will leave automatic uprating for a future PR that introduces the state-specific property tax indexing parameter.
  • C3 (Montana Old Age Subtraction):
    • MCA § 15-30-2101 specifies standard CPI-U (June-to-June relative to June 2023) rather than federal Chained CPI-U (gov.irs.uprating). We retained the verified published 2025 amount of $5,660 and removed the speculative uprating block pending a Montana CPI-U series implementation.

Should Address Findings

  • A2 (Minnesota Marriage Credit Minima):
    • Removed speculative uprating on minimum_individual_income.yaml and minimum_taxable_income.yaml, retaining the published 2025 values ($31,000 and $48,000 per Schedule M1MA).
  • Minnesota Alternate Deduction Reductions:
    • Retained the verified uprating metadata on itemized/.../alternate/income_threshold.yaml and standard/.../alternate/income_threshold.yaml with downward-$50 rounding per Minn. Stat. §§ 290.0122 Subd. 3 and 290.0123 Subd. 6.

All regression tests and baseline suites for ME, MN, and MT pass cleanly.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add uprating and statutory rounding rules for Maine, Minnesota, and Montana tax parameters

2 participants