Repository navigation
Add published 2026 amounts for KY, MI, MN, MO, NE, OR and WI income taxes - #9927
Conversation
Add dated 2026 values, with references, where the states have published their 2026 amounts, instead of projecting them with gov.irs.uprating: - KY standard deduction ($3,360, DOR release of September 4, 2025) - MI personal exemption ($5,900, 2026 Form 446) - MN standard deduction, aged/blind additional amount, dependent exemption and all bracket thresholds (Tax Year 2026 Inflation-Adjusted Amounts) - MO bracket thresholds (2026 Form MO-1040ES tax rate chart) - NE standard deduction, additional amount and personal exemption credit (2026 Form 1040N-ES) - OR bracket thresholds and federal tax subtraction caps (2026 Publication OR-ESTIMATE and 2026 withholding formulas) - WI standard deduction maximums and phase-out starts (2026 Form 1-ES instructions) Three existing tests pinned projected 2026 values and now use the published ones: the Wisconsin phase-out uprating test (which now also checks the rounded 2027 projection), the 2026 Michigan senior integration case, and the Minnesota HF4890 reform-disabled case. Fixes #9872. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… top rate MCL 206.30(2) rounds the indexed personal exemption to the nearest $100; the file rounded projections to $50 (2027: 6,100, not 6,050). The 2026 Form MO-1040ES and withholding formula keep Missouri's top rate at 4.7%, so the comment no longer treats 2026 as unconfirmed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Go through the Minnesota Department of Revenue's Tax Year 2026 Inflation-Adjusted Amounts line by line and add a dated 2026 value, with a reference to the page, wherever PolicyEngine's 2026 projection differed: - Disallowed exemption thresholds (290.0121 Subd. 2): 366,700 / 305,600 / 244,500 / 183,350 - Itemized and standard deduction limitation thresholds (290.0122 Subd. 2, 290.0123 Subd. 5): 244,400 (122,200 separate) and 337,800 (168,900) - Social Security simplified subtraction and public pension subtraction phase-out thresholds (290.0132 Subds. 26 and 34): 110,780 / 86,410 / 55,390 - Dependent care credit phase-out threshold (290.067 Subd. 1): 65,610 - Child and working family credit phase-out for other filers (290.0661 Subd. 4): 32,680; working family credit for two qualifying older children (290.0671 Subd. 1): 2,330 - K-12 education credit phase-out threshold (290.0674 Subd. 2): 77,550, and the matching income limit for one or two children, 83,550 - AMT exemption (290.091 Subd. 3): 97,470 / 73,100 / 48,740 - Renter's credit income bands (290.0693 Subd. 3) where the published lower bounds differ from the projection, including the 79,330 cutoff Stop uprating the alternate Social Security subtraction maximum and its phase-out threshold. Minn. Stat. 290.0132, subd. 26(j) indexes only the simplified subtraction phase-out thresholds in paragraph (c), and the Department of Revenue lists these amounts as "Not Indexed", so they stay at 5,840 / 4,560 / 2,920 and 88,630 / 69,250 / 44,315. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hua7450
left a comment
There was a problem hiding this comment.
Approving. Read all 49 parameter files and the 19 test files at 2c3bc8b, plus tests/core/test_state_uprating_rounding.py, and checked every 2026 value against the official publication for its state:
- MN: every amount equals the Department of Revenue's Tax Year 2026 Inflation-Adjusted Amounts (December 1, 2025) and the December 16, 2025 bracket release, with the statutory rounding (nearest $10 under 270C.22 and 290.06 subd. 2d; down to $50 under 290.0121 subd. 3, 290.0122 subd. 2(e) and 290.0123 subd. 6). Removing uprating from the two alternate Social Security subtraction files is right: 290.0132 subd. 26(j) indexes only the phase-out thresholds and the DOR table labels those amounts "Not Indexed"; no 2021 to 2025 value changed. The amounts you left on projection (renter's bands, CWFC joint threshold, child credit, WFC amounts, pension caps, 1,107,750) all reproduce the published figures with the current C-CPI-U factor.
- KY $3,360 (DOR release, KRS 141.081); MI $5,900 (Form 446 page 1 and the Treasury calendar-year page, MCL 206.30: 5,800 x 1.0227 = 5,931 rounded to $100, so it is the published amount, not a projection); MO 4.7% schedule with the 1,348 to 9,436 thresholds (MO-1040ES page 2 and the 2026 withholding formula); NE standard deduction and exemption credit (1040N-ES pages 4 to 6); OR brackets and federal tax subtraction caps (OR-ESTIMATE page 3 and the 2026 withholding formulas); WI standard deduction maximums and phase-out starts (Form 1-ES page 2, Wis. Stat. 71.05(22)(dt)).
All 36 new or changed test expectations recompute by hand (for example MN basic tax, HF4890 baseline 63,254.99, OR 1,431 / 1,987 / 830.50, WI 21,694.53 / 11,049.81 / 15,805.52, MO 59.56 / 397.47), and the Wisconsin assertions in the uprating test now pin the published 2026 starts and derive 2027 the way core's uprating does.
Nits, not blocking:
mn_basic_tax_2026.yamlandmn_child_and_working_families_credits_2026.yamlduplicate existing per-variable files; the 9851 conflict that motivated them is gone now that it merged, so the cases belong at the bottom of the existing files.cwfc/wfc/additional/amount.yamlnow has one dated 2026 bracket and two projected ones; dating all three (and the other MN amounts that happen to match today) would pin the published schedule against future CPI revisions.- The
k12_education/income_limit/base.yamlreference title names the phase-out threshold line, but the file holds the derived limit (threshold + 6,000); say so in the title. - The two not-indexed MN files still cite 270C.22.
- MI: the "nearest $100" sentence is MCL 206.30(7), not (2), in the comment and description.
- OR: Form OR-ESTIMATE labels its figures estimates and its 2025 estimate differed from the final 2025 instructions by $50; the 2026 withholding formulas agree with it and the final 2026 OR-40 instructions are not online yet, so a short comment that these await the OR-40 instructions would be fair.
Pre-existing, for follow-ups: core projects the round-down-$50 MN amounts from the rounded prior-year anchor, which is why those projections landed $50 low and will again for 2027; the MN itemized-threshold reference titles cite 290.0122 but link to 290.0123; the WI reference titles say 71.07(9)(b)(5) but link to 71.05(22).
Partly fixes #9872: KY, MI, MN, MO, NE, OR (brackets and federal tax subtraction cap) and WI (standard deduction). Maine and Louisiana need no change, and the Oregon standard deduction waits for the 2026 OR-40 instructions (see "Not changed" below).
For 2026, several state parameters had no dated value, so the model projected them with
gov.irs.uprating. This PR adds the amounts the states published for 2026, with references. Later years now project from the published 2026 value with each file's existing rounding rule.Change
deductions/standardexemptions/personaldeductions/standard/base(single, separate / joint, surviving spouse / head of household)deductions/standard/extra(married / unmarried)exemptions/amountrates/singlerates/joint,rates/surviving_spouserates/separaterates/head_of_householdrates(7 thresholds)deductions/standard/base_amount(single, separate / joint, surviving spouse / head of household)deductions/standard/additional_amount(unmarried / married, surviving spouse)exemptions/amount(personal exemption credit)rates/single,rates/separaterates/joint,rates/head_of_household,rates/surviving_spousesubtractions/federal_tax_liability/cap(all but separate)subtractions/federal_tax_liability/cap/separatedeductions/standard/max(single / joint, surviving spouse / separate / head of household)deductions/standard/phase_outstarts (single, head of household / joint / separate)All parameter paths are under
policyengine_us/parameters/gov/states/<st>/tax/income/.Two small fixes in files this PR already edits (added after review):
mi/tax/income/exemptions/personal.yaml: the projection now rounds to the nearest $100, as MCL 206.30(2) says ("rounded to the nearest $100.00 increment"); it rounded to $50. 2027: 6,100 (was 6,050).mo/tax/income/rates.yaml: a dated2026-01-01: 0.047top rate, with the comment updated; the 2026 MO-1040ES rate chart and withholding formula keep 4.7%, so 2026 is no longer an unconfirmed reduction year.Three existing tests pinned projected 2026 values. They now use the published amounts:
tests/core/test_state_uprating_rounding.py: the Wisconsin phase-out test pinned the projected 2026 starts (19,990 / 28,850 / 13,690). It now checks the published 2026 starts, and the 2027 projection from them rounded to the nearest $10.mi/tax/income/integration.yaml, 2026 senior case: personal exemption 5,950 → 5,900, tier 3 deduction 20,000 − 5,950 = 14,050 → 20,000 − 5,900 = 14,100. Taxable income ($10,000) and tax ($425) do not change.contrib/states/mn/hf4890/mn_hf4890.yaml, reform-disabled case: the 2026 baseline single tax at $700,000 moves from 63,255.60 to 63,254.99, from the published single thresholds.Evidence
KY. Kentucky DOR, "Kentucky DOR Announces 2026 Standard Deduction" (September 4, 2025): "the standard deduction for 2026 is $3,360".
MI. 2026 Form 446, Michigan Income Tax Withholding Guide, page 1: "Personal Exemption Amount: $5,900". Treasury's calendar-year page gives the same 2026 amount. The withholding personal exemption is the MCL 206.30(2) exemption.
MN. Tax Year 2026 Inflation-Adjusted Amounts, page 1: "290.0121, Subd. 1 Dependent Exemption … $5,300"; "290.0123, Subd. 1 Standard Deduction: Married Joint or Surviving Spouse $30,600; Head of Household $23,000; Single, Married Separate $15,300"; "Additional Standard Deduction for Aged or Blind: Married or Surviving Spouse $1,600; Single, Head of Household $2,000". Pages 2–3 give the 290.06 Subd. 2c bracket thresholds in the table above. The DOR release of December 16, 2025 gives the same brackets, for example "Single: up to $33,310 | $33,311 - $109,430 | $109,431 - $203,150 | $203,151 and over".
MO. 2026 Form MO-1040ES, page 2, Tax Rate Chart: "Over $1,348 but not over $2,696: 2.0% of excess over $1,348" through "Over $9,436: $263 plus 4.7% of excess over $9,436"; Example 2: "$263 + $134.61 (4.7% of $2,864) = $397.61". The 2026 Missouri Withholding Tax Formula annual table uses the same thresholds ($1,348.00 … $9,436.01 and over, 4.70%). The top rate stays 4.7% in 2026.
NE. 2026 Form 1040N-ES, page 4, worksheet line 5: "Single $8,850; Married, Filing Jointly $17,700; Head of Household $12,950; Married, Filing Separately $8,850". Page 5: additional amount "$2,050" for an unmarried individual 65 or older or blind, "$1,700" for a qualifying surviving spouse or a married individual. Page 6: "Include $176 for each Nebraska personal exemption". The worksheet lists no separate qualifying surviving spouse amount. The parameter keeps it equal to the joint amount, as on the 2025 booklet's line 6 table ($17,200 for both).
OR brackets and federal tax subtraction. Two DOR documents agree:
WI. 2026 Form 1-ES instructions, page 2, "2026 Standard Deduction":
The surviving spouse row of
max.yamlkeeps the joint amount, as in earlier years.Not changed
mainalready has $15,700 / $31,400 / $23,550, from P.L. 2025, c. 650, Pt. K, § 14 (36 M.R.S. § 5124-C(1-C)) and the MRS 2026 rate schedule revised May 20, 2026: "Standard Deduction: Single - $15,700 Married Filing Jointly - $31,400 Head of Household - $23,550". The $15,300 / $30,600 / $22,950 in the issue come from the superseded original 2026 schedule.mainalready uses the final RIB 26-019 amounts ($12,838 / $25,676, Use Louisiana's RIB 26-019 2026 standard deduction and retirement exemption #9791). The $12,875 / $25,750 in the issue come from the proposed regulation.mainalready has the 2026 Form 1-ES thresholds (single 15,110 / 51,950 / 332,720). The 2025 4.4% bracket base (Wisconsin 2025 second-bracket (4.4%) upper thresholds are wrong in all four filing-status schedules #9328) was fixed by Use the 2025 Wisconsin 4.4% bracket tops from the Form 1 instructions #9803 (merged), which this PR does not touch.mainalready has the 2026 Form 1040N-ES thresholds.Tests
New 2026 cases, each with the arithmetic from the source:
ky_standard_deduction_indiv: head and spouse each get $3,360.mi_personal_exemptions: 4 × $5,900.mn_standard_deduction: single $15,300, and joint aged 30,600 + 2 × 1,600.mn_basic_tax_2026.yaml(a new file; it was kept separate frommn_basic_tax.yamlto avoid a conflict with Correct two 2024 Minnesota bracket thresholds #9851, now merged): four cases, one per schedule.mn_exemptions: 2 × $5,300.wi_standard_deduction: one case for each schedule and phase-out segment.mo_income_tax_before_credits: the two MO-1040ES examples, without the chart's whole-dollar rounding of the base.or_income_tax_before_credits: Charts S and J.or_federal_tax_liability_subtraction: $8,750 single, $7,000 joint in the first phase-out step, and $4,375 separate.ne_standard_deduction: single, head of household aged, and joint both aged.ne_exemptions: 4 × $176.Results:
Against
mainparameters, 25 of the 26 new cases fail. The MN dependent exemption case passes because the projection already gives $5,300.All 26 pass with this change.
policyengine-core testontests/policy/baseline/gov/states/<st>andtests/policy/contrib/states/<st>:The MI and MN totals include the two updated cases above. In the full run, each case failed before its update. After the update, a rerun of its file passed:
mi/tax/income/integration.yaml6 passed,mn_hf4890.yaml11 passed.75 other YAML files that have a 2026-or-later household in one of these states (SNAP, ACA, Medicaid,
gov/states/tax/income, Multnomah County,reform/mo_refundable_eitc): 1,154 passed.pytest tests/core/test_state_uprating_rounding.py tests/core/test_state_indexed_frozen_parameters.py: 58 passed. Thecode_healthreference-URL and uprating-placement tests also pass.ruff format --check: clean.The branch merges cleanly with current
main, which now includes Correct two 2024 Minnesota bracket thresholds #9851 (2024 MN thresholds) and Use the 2025 Wisconsin 4.4% bracket tops from the Form 1 instructions #9803 (2025 WI brackets).Minnesota: the rest of the 2026 inflation-adjusted amounts (added after review)
Change
Commit 2c3bc8b goes through the Minnesota Department of Revenue's Tax Year 2026 Inflation-Adjusted Amounts line by line. Where PolicyEngine's projected 2026 value differed from the published amount, it adds a dated 2026 value with a reference to the page:
exemptions.agi_thresholddeductions.itemized.reduction.agi_threshold.low/highdeductions.standard.reduction.agi_threshold.low/highsubtractions.social_security.reduction.startsubtractions.social_security.alternative_amountsubtractions.social_security.income_amountsubtractions.pension_income.reduction.startcredits.cdcc.phaseout_thresholdcredits.cwfc.phase_out.threshold.othercredits.cwfc.wfc.additional.amount[2]credits.k12_education.income_thresholdcredits.k12_education.income_limit.baseamt.fractional_income_thresholdcredits.renters.{percent_of_income,claimant_share,max_credit}The alternate Social Security subtraction amounts are no longer uprated. Minn. Stat. 290.0132, subd. 26(j) says "The commissioner shall adjust the phaseout threshold amounts in paragraph (c), clauses (1) and (2)". That covers only the simplified subtraction, and the Department of Revenue lists the alternate amounts as "Not Indexed". A dated 2026 value equal to 2025 would have fixed 2026 but still let 2027 and later drift upward, so the uprating block is removed.
The K-12 income limit for one or two children has no separate published line. It is the published phase-out threshold plus the $6,000 over which subd. 2(a) reduces $1,500 by $1 per $4 (one child) or $3,000 by $2 per $4 (two children). The 2025 Schedule M1ED shows the same relationship: $75,820 threshold and $81,820 limit.
Evidence
Tests
mn_child_and_working_families_credits_2026.yamlwith 2 cases ($2,058.80 and $1,909.20). All 10 fail without the parameter changes and pass with them.policyengine-core test policyengine_us/tests/policy/baseline/gov/states/mn: 490 passed.policyengine-core test policyengine_us/tests/policy/contrib/states/mn: 23 passed.pytest tests/core/test_state_uprating_rounding.py tests/code_health: 185 passed.test_state_indexed_frozen_parameters.py,test_uprating_series.py,test_per_capita_uprating.py,test_build_metadata.py: 176 passed, 1 skipped.🤖 Generated with Claude Code
Follow-ups found in review (not in this PR)
🤖 Generated with Claude Code