Add uprating and rounding rules for ME, MN, and MT tax parameters - #9411
Add uprating and rounding rules for ME, MN, and MT tax parameters#9411jindal-git wants to merge 2 commits into
Conversation
anth-volk
left a comment
There was a problem hiding this comment.
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
- pr-9411-source-me5403.html — cached original.
- pr-9411-source-me5124c.html — cached original.
- pr-9411-source-me5402.html — cached original.
- pr-9411-source-mn270C22.html — cached original.
- pr-9411-source-mn2900122.html — cached original.
- pr-9411-source-mn2900123.html — cached original.
- pr-9411-source-mn2900675.html — cached original.
- pr-9411-source-mn290A04.html — cached original.
- pr-9411-source-mt15302101.html — cached original.
- pr-9411-source-mt15302120.html — cached original.
- pr-9411-source-mt-2025-landing.html — cached original.
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.
|
Thanks for the detailed review and catch on the statutory nuances, @anth-volk! We've updated the branch to address all findings: Critical Findings
Should Address Findings
All regression tests and baseline suites for ME, MN, and MT pass cleanly. |
Summary of Changes
Adds inflation uprating and statutory rounding rules across state tax parameters in Maine, Minnesota, and Montana:
Maine:
me/.../deductions/standard/amount.yaml: Addeduprating: gov.irs.upratingwith downward $50 rounding (interval: 50, type: downwards) per 36 MRSA § 5403.me/.../deductions/standard/aged_or_blind.yaml: Addeduprating: gov.irs.upratingwith downward $50 rounding per 36 MRSA § 5403.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.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.Testing & Changelog:
policyengine_us/tests/core/test_state_uprating_rounding.py(26 total passing).changelog.d/add-state-uprating-me-mn-mt.changed.md.Closes #9410