Skip to content

Set Idaho's 2026 retirement benefits deduction cap from SSA's maximum benefit - #10717

Open
MaxGhenis wants to merge 2 commits into
mainfrom
fix-id-retirement-cap-2026
Open

MaxGhenis wants to merge 2 commits into
mainfrom
fix-id-retirement-cap-2026

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

What was wrong

PolicyEngine-US had no 2026 value for Idaho's retirement benefits deduction cap, so IRS uprating carried the 2025 amounts forward to $49,309 for unmarried filers and $73,963 on a joint return. Idaho Code § 63-3022A(2) ties the cap to the Social Security Administration's maximum benefit, and SSA's 2026 fact sheet gives that benefit.

The law

Idaho Code § 63-3022A(2) limits the deduction to "an amount not in excess of maximum retirement benefits under the social security act" and has the State Tax Commission publish the amounts each year. It defines those benefits by filing status:

  • (a), a joint return: "the maximum social security benefits payable for the tax year to a person attaining full retirement age in the tax year who has earned the maximum earnings creditable under social security", where the spouse "has no social security benefits except those payable on his record of earnings."
  • (b), an unmarried taxpayer: the same benefit for the worker alone.
  • (c), an unremarried widow or widower: the maximum benefit for a survivor reaching full retirement age on the record of a deceased spouse who had the maximum earnings.
  • (e): taxpayers outside (a) through (d) deduct nothing, so a married person filing separately gets $0.

The 2026 amounts

  • SSA's 2026 fact sheet puts the "Maximum Social Security Benefit: Worker Retiring at Full Retirement Age" at $4,018 a month for 2025 and $4,152 for 2026. SSA's website answers scripted requests with a 403, so this PR takes the figures from the Wayback Machine's capture and from a copy of the same sheet that Montana State University Billings posts. Both show the same amounts.
  • The Tax Commission's 2025 cap, $48,216, equals 12 times $4,018. Its joint amounts for 2021 through 2025 each equal 1.5 times its single amount, and its surviving spouse amounts equal its single amounts.
  • For 2026, that method gives 12 × $4,152 = $49,824 for single filers, heads of household and surviving spouses, and 1.5 × $49,824 = $74,736 on a joint return. The Tax Commission publishes its own figures with the 2026 forms; if they differ, the parameter should follow them.

Change

  • cap.yaml: 2026 values of $49,824 (single, head of household and surviving spouse) and $74,736 (joint), with the SSA fact sheet as a reference. Separate returns stay at $0.
  • Later years still extrapolate with IRS uprating, now from the 2026 values. For 2027 that gives $51,309 single and $76,963 joint, up from $50,778 and $76,167.

Invariants

For every input:

  • Before 2026, nothing changes.
  • For 2026, the cap equals 12 × $4,152 for single filers, heads of household and surviving spouses, 1.5 times that on a joint return, and $0 on a separate return.
  • id_retirement_benefits_deduction stays min(qualifying benefits, max(cap − head and spouse Social Security retirement benefits, 0)). So the new cap never lowers a deduction, and it raises one by at most the change in the cap: $515 single and $773 joint.

The change edits nothing but parameter values, so the example cases below test it.

Tests

id_retirement_benefits_deduction.yaml adds six cases: the 2026 cap for single, joint, head of household and surviving spouse returns; the 2026 single cap less $20,000 of Social Security ($29,824); and the 2025 single cap, unchanged at $48,216. On main, the five 2026 cases fail ($49,308.715 against $49,824, for example). With the change, all 14 cases in the file and all 457 cases under tests/policy/baseline/gov/states/id pass, as do test_source_conflicts.py and test_parameter_files.py.

Before and after

Idaho income tax for 2026, single filer aged 67 with $90,000 of taxable public pension income:

Before After
Retirement benefits deduction $49,309 $49,824
Idaho income tax $389.58 $362.27

The $27.31 drop equals 5.3% of the $515 rise in the cap.

Related

#10715, which applies Idaho's 2025 tests to military retired pay, left the 2026 cap at the uprated estimate; this PR sets it. The two PRs change different files and merge cleanly.

axiom: TheAxiomFoundation/rulespec-us#2079

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits November 8, 2026 04:51
… benefit

Idaho Code 63-3022A(2) caps the deduction at the maximum Social Security
benefit for a worker reaching full retirement age in the tax year. SSA's
2026 fact sheet gives $4,152 a month, so the cap is $49,824 for unmarried
filers and unremarried survivors and $74,736 (1.5 times, adding the
spouse's benefit on the worker's record) on a joint return. PolicyEngine-US
had extrapolated $49,309 and $73,963 from 2025 with IRS uprating.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

David, until the Idaho Tax Commission publishes its 2026 cap for the retirement benefits deduction, the PR sets it the way the Commission set 2025's. It takes 12 times SSA's maximum monthly benefit at full retirement age, $49,824, and 1.5 times as much, $74,736, on a joint return. Have you seen the Commission's figure, or another method? If you can look by Tuesday afternoon, we can merge it before the Veterans Day post (PolicyEngine/policyengine-app-v2#1523).

@DTrim99

DTrim99 commented Nov 9, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Set Idaho's 2026 retirement benefits deduction cap from SSA's maximum benefit

Summary

The 2026 values are right. Idaho Code § 63-3022A(2) ties the cap to the maximum Social Security benefit for a worker reaching full retirement age (FRA). SSA's 2026 figure is $4,152 a month, and the Tax Commission's method for 2021-2025 (12 times the monthly amount, and 1.5 times that on a joint return) gives $49,824 and $74,736. The filing-status mapping matches (2)(a)-(c) and (e), every new value has a test, and the static guards pass on the tree merged with main.

Two things are left. First, SSA's 2027 fact sheet is already out. By the PR's own numbers, setting 2026 moves the extrapolated 2027 cap further from what the same method gives. Second, the axiom line has no status word.

Critical (must fix)

None.

Should address

  1. The 2027 cap is now further off, and SSA's 2027 figure is already published (cap.yaml, SINGLE / JOINT / SURVIVING_SPOUSE / HEAD_OF_HOUSEHOLD).
    • SSA's 2027 COLA fact sheet (Wayback capture, 2026-10-31) lists "Maximum Social Security Benefit: Worker Retiring at Full Retirement Age $4,152/mo. $4,188/mo." for 2026 and 2027. SSA's maximum-taxable benefit examples table gives the same $4,188 for retirement at 67 in January 2027, which is FRA for people born in 1960.
    • The method the PR uses for 2026 gives 12 × $4,188 = $50,256 for single filers, heads of household and surviving spouses, and 1.5 × $50,256 = $75,384 on a joint return.
    • The PR leaves 2027 to IRS uprating from the new 2026 values. Its body puts the result at $51,309 single and $76,963 joint, which I confirmed: the uprating ratio is 50,778 / 49,308.715 = 1.0298, and 49,824 × 1.0298 = 51,309.
    • Those figures overshoot the method's amounts by $1,053 and $1,579. Main's extrapolation ($50,778 and $76,167) overshoots by only $522 and $783, so this change doubles the 2027 error.
    • Uprating can't track this amount. SSA's figure rises only 0.87% from 2026 to 2027 (4,188 / 4,152), while IRS uprating gives 2.98% and SSA's COLA is 3.6%.
    • Fix: add 2027-01-01: 50_256 to SINGLE, SURVIVING_SPOUSE and HEAD_OF_HOUSEHOLD, add 2027-01-01: 75_384 to JOINT, and add the 2027 fact sheet as a reference. Then add two 2027 cases to id_retirement_benefits_deduction.yaml: single with $60,000 → 50,256, and joint with $80,000 → 75,384.
    • The Commission's own figures should replace both years once it publishes them.
  2. Axiom line has no status word. The PR body says axiom: TheAxiomFoundation/rulespec-us#2079, which is not one of the valid forms (encoded-correct, encoded, queued or n/a).
    • Issue New York TANF resource limit #2079 is OPEN, labelled pe-parity and pinned to head fdb199816e. It cites the statute, the SSA sheet and the 2025 Form 39R, and gives required outputs and test cases.
    • For queued, CONTRIBUTING.md#axiom-parity also needs the encoder blocker recorded in the issue. The issue names none: its "Encoding gap" section only says that no us-id/statutes/63-3022A module exists yet. It also paraphrases (2)(a)-(c) rather than quoting them verbatim.
    • Fix: change the line to axiom: TheAxiomFoundation/rulespec-us#2079 queued, add the blocker and the verbatim text of (2)(a), (b), (c) and (e) to the issue, and update its outputs and tests for 2027 if item 1 is adopted.

Suggestions

  1. Ground the 1.5 factor in the Social Security Act (cap.yaml, JOINT comment). Right now the comment rests only on the Commission's 2021-2025 practice.
    • Under 42 U.S.C. 402(b)(2), a spouse claiming at FRA gets 50% of the worker's primary insurance amount. So (2)(a)'s benefit for "a person ... whose spouse has no social security benefits except those payable on his record of earnings" is 1.5 times the worker's benefit.
    • The Commission applies 1.5 to the annual amount instead of rounding the spouse's benefit down to the dollar the way SSA does. In 2022, 1.5 × 40,140 = 60,210, while (3,345 + 1,672) × 12 = 60,204. With an even monthly amount ($4,152, or $4,188 in 2027) the two methods agree, but a comment would explain any future odd-dollar year.
  2. Reference title. The page's own title is "2026 Cost-of-Living Adjustment (COLA) Fact Sheet". Using it, perhaps prefixed with "Social Security Administration," would make the source easier to find than the descriptive title.
  3. Mark 2026 as derived until the Commission publishes. The PR body says the Commission's figures should replace these. A short YAML comment such as "derived pending the 2026 Form 39R instructions" would keep that visible in the file.
  4. Offset gap (pre-existing, outside this PR).
    • id_retirement_benefits_deduction subtracts only social_security_retirement. But § 63-3022A(3) and Form 39R lines 8b-8c (2025 instructions, p. 45) also subtract federal Railroad Retirement Act benefits.
    • The PR body's invariant restates the current formula, so this is a separate follow-up, not part of this PR.

Verified correct

  • Statute:
    • § 63-3022A(2) defines the cap by status: (a) for a joint return (worker plus a spouse drawing only on the worker's record), (b) for an unmarried taxpayer, and (c) for an unremarried widow or widower at FRA on a maximum earner's record, which equals (b). Under (e), anyone else deducts nothing.
    • The parameter maps these correctly: SINGLE and HEAD_OF_HOUSEHOLD to (b), JOINT to (a), SURVIVING_SPOUSE to (c) and SEPARATE to $0.
    • (2) also has the Commission "ascertain benefit changes ... and publish the appropriate deduction amounts ... annually."
  • SSA 2026 figure: the 2026 fact sheet (Wayback capture, 2026-10-24) lists the FRA maximum as $4,018/mo. for 2025 and $4,152/mo. for 2026. SSA's FAQ KA-01897 also gives $4,152 for 2026.
  • Commission method: each of the Commission's 2021-2025 single amounts is 12 times SSA's FRA maximum for that year:
    • 2021: 3,148 × 12 = 37,776
    • 2022: 3,345 × 12 = 40,140
    • 2023: 3,627 × 12 = 43,524
    • 2024: 3,822 × 12 = 45,864
    • 2025: 4,018 × 12 = 48,216, which matches line 8a of the 2025 Form 39R instructions
    • Each joint amount is exactly 1.5 times the single amount for the same year.
  • 2026 values: 12 × 4,152 = 49,824, and 1.5 × 49,824 = 74,736, which also equals (4,152 + 2,076) × 12.
  • No Commission 2026 figure exists yet. I checked the Commission's retirement-benefits deduction page, the latest instructions (2025, posted 2026-03-02) and IDAPA 35.01.01 Rule 130, which states no amounts. The PR's derived values are a reasonable placeholder.
  • Mutation rule: removing any one of the four new 2026 values reverts that status to the uprated $49,308.72 or $73,963.07, which fails the matching new case. The SEPARATE value stays $0 under uprating.
  • Changelog: top-level changelog.d/fix-id-retirement-cap-2026.fixed.md, with a sensible type.
  • Code and guards:
    • No variable changes and no new state-gated keys, so the NH Add New Hampshire state supplementation for 2026 #10156 pattern doesn't apply.
    • On the tree merged with main, test_military_retirement_readers.py (Count military SBP annuities in state benefit income lists #10317) and the source-conflict ratchet (test_conflict_sounding_comments_do_not_grow, KNOWN_UNMARKED counts) both pass. None of the new comments match the conflict regex.
    • One scanner self-test, test_unscannable_files_fail_closed, failed in the local run. It reads only synthetic strings, no repository files, so it is a local Python-build artifact. CI's Python shards run it.
  • PR body arithmetic:
    • 49,824 − 49,308.715 = 515.29 and 74,736 − 73,963.07 = 772.93.
    • The tax change in the before/after table is 389.58 − 362.27 = 27.31, which equals 5.3% × 515.29 at Idaho's 2026 rate in the model.
    • I checked only the change, not the absolute tax amounts.
  • Sibling Apply Idaho's 2025 eligibility tests and cap to military retired pay #10715:
    • It changes different files, and its head merges cleanly with this head.
    • Its tests pin only the 2025 cap (its invariant's CAP_2025 and the YAML values $48,216, $28,216 and $42,324) and no 2026 deduction amount, so the expectations don't conflict.
    • Once both merge, military retired pay that passes Apply Idaho's 2025 eligibility tests and cap to military retired pay #10715's tests shares the cap set here.
  • No pinned old values: no other test pins the old uprated 2026 cap, and no partner test files are touched.

Hand-checked expectations (formula: min(qualifying benefits, max(cap − head and spouse SS retirement, 0))):

  1. 2026 single, $60,000: min(60,000, 49,824) = 49,824 ✓
  2. 2026 joint, $80,000 + $0: min(80,000, 74,736) = 74,736 ✓
  3. 2026 single, $60,000 with SS $20,000: max(49,824 − 20,000, 0) = 29,824, and min(60,000, 29,824) = 29,824 ✓
  4. 2026 head of household, $60,000: 49,824 ✓
  5. 2026 surviving spouse, $60,000: 49,824 ✓
  6. 2025 single, $60,000: min(60,000, 48,216) = 48,216 ✓
  7. 2022 joint, head SS $15,000, spouse SS $10,000 and dependent SS $10,000 (excluded), with $45,000: 60,210 − 25,000 = 35,210, and min(45,000, 35,210) = 35,210 ✓
  8. 2022 single, SS $40,140, with $38,700: max(40,140 − 40,140, 0) = 0 ✓
  9. 2022 surviving spouse, SS $10,000, with $30,000: 40,140 − 10,000 = 30,140, and min(30,000, 30,140) = 30,000 ✓
  10. 2022 separate: cap 0 → 0 ✓

Axiom line assessment

axiom: TheAxiomFoundation/rulespec-us#2079 has no status word, so the form is invalid (Should address #2).

  • Issue New York TANF resource limit #2079 is OPEN, labelled pe-parity and matches head fdb199816e: $49,824 and $74,736 for 2026, $0 separate, and the PR's six cases.
  • Its test cases come from the same external figures as the YAML (SSA's monthly maximum and the Commission's published amounts).
  • For queued it still needs a recorded encoder blocker and verbatim statute text, plus 2027 outputs if those values are added.

CI status

At head fdb199816e, 9 checks pass and 17 are still pending; none have failed.

  • Passed:
    • Quick Feedback, which ran all 457 cases under tests/policy/baseline/gov/states/id and the changed file's 14 cases on the PR merge ref
    • PR validation
    • Package and compatibility
    • Household API Partners
    • Baseline household, reform, rest-a and rest-b
    • Plan Rest Python shards
  • Pending: Baseline contrib-hhs, irs, ssa-usda and states shards 1-4; Microsimulation; Rest Python shards 1-9.

Branch status

Verdict: REQUEST_CHANGES

@DTrim99 DTrim99 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Requesting changes per the review above: 0 critical, 2 should (add the 2027 cap from SSA's published $4,188 maximum — uprating from the new 2026 value doubles main's 2027 error; the axiom line needs a status word and #2079 needs its blocker and verbatim text), 4 suggestions. The 2026 values are correct.

This branch has not been deployed

No deployments
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.

2 participants