Skip to content

Count taxable employment disability benefits in federal gross income (IRC 105(a)) - #10185

Open
MaxGhenis wants to merge 14 commits into
mainfrom
fix-disability-benefits-gross-income
Open

MaxGhenis wants to merge 14 commits into
mainfrom
fix-disability-benefits-gross-income

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

disability_benefits ("Disability benefits from employment (not Social Security), except for worker's compensation") was in no federal gross income list, so the model never taxed employer-paid disability benefits or disability pensions. Several state provisions also subtracted it from a federal AGI that never contained it.

Law

  • IRC 105(a): amounts an employee receives through an accident or health plan are gross income to the extent they come from employer contributions not included in the employee's income, or are paid by the employer. IRC 104(a)(3) excludes the rest (plans the employee paid for with after-tax dollars).
  • IRS Pub. 525 (2024), file page 18:
    • Benefits from a plan "paid for by your employer" are income.
    • If both paid, only the part "due to your employer's payments" is income.
    • If you pay the entire cost, none is.
    • Premiums paid pre-tax through a cafeteria plan count as employer-paid.
    • Disability pensions go on Form 1040 line 1h until minimum retirement age, then line 5.

Change

  • New Person input tax_exempt_disability_benefits (IRC 104(a)(3)), default 0, uprated like disability_benefits.
  • New taxable_disability_benefits = max(0, disability_benefits - tax_exempt_disability_benefits) (IRC 105(a)), listed in gov.irs.gross_income.sources. It therefore reaches irs_gross_income, AGI, provisional income for Social Security and dependent_gross_income (the qualifying-relative test).
  • State provisions that remove disability income from a federal starting point now read the taxable part:
State Provision Law Change
VA va_disability_income_subtraction_person § 58.1-322.02(4): "to the extent included in federal adjusted gross income" taxable part
MT mt_disability_income_exclusion_person former MCA 15-30-2110(10) taxable part
LA la_disability_income_exemption_person R.S. 47:44.1(B); Schedule E code 49E taxable part (the old comment claimed the input was already taxable-only)
AR retirement/disability exemption sources; gross income lines 18A/18B § 26-51-307; AR1000F: "federal taxable amount from box 2a" taxable part
SC subtractions list § 12-6-1140(4) taxable part
OH deductions list R.C. 5747.01(A)(4): "to the extent included in federal adjusted gross income" taxable part
CO pension subtraction sources C.R.S. 39-22-104(4)(f): "to the extent included in federal adjusted gross income" taxable part
PA PIT: nontaxable_income_sources Tax Reform Code § 301(d)(i); 61 Pa. Code 101.6(c)(1); 2024 PA-40 instructions pp. 8, 13 taxable part subtracted (PA does not tax disability benefits other than regular wages)
PA Property Tax/Rent Rebate income PA-1000 line 11e (gross disability benefits) adds only the exempt part (the taxable part is in AGI)
  • Benefit programs (SNAP, SSI, TANF, LIHEAP, CCAP and the rest), Michigan household resources and Denver property tax relief still count total disability_benefits, as their income definitions require.

  • Earned income. Taxable disability pensions received before the plan's minimum retirement age are earned income and go on Form 1040 line 1h (Pub. 596 (2024), file page 8; railroad benefits excluded). New input disability_benefits_before_minimum_retirement_age (default 0; the model has no plan retirement age) gives earned_disability_benefits = min(input, taxable_disability_benefits). It counts in:

    • eitc_earned_income (EITC, and the ACTC through ctc_phase_in_relevant_earnings);
    • the dependent standard deduction in basic_standard_deduction (worksheet line 1z);
    • adjusted_earnings (child and dependent care credit; Pub. 503 (2024), file page 4).

    It also counts in:

    • filer_adjusted_earnings (kiddie-tax AMT exemption; IN, OK and WA federal-style credits);
    • IRA compensation (ira_compensation; Pub. 4491 (Rev. 10-2025), file page 144);
    • the federal filing requirement's unearned-income test (tax_unit_is_required_to_file) and Medicaid's filer test (medicaid_person_is_required_to_file).

    earned_income and tax_unit_earned_income themselves are unchanged, because benefit programs and state rules read them.

  • State disability income exclusions modelled on former IRC 105(d). These apply to people who retired on permanent and total disability. Each excludes disability pay up to $100 a week ($5,200 a year), reduced dollar for dollar by federal AGI over $15,000. They read the new permanent_disability_retirement_pay: retired_on_total_disability × total_disability_payments. total_disability_payments is the explicit input the Schedule R credit and DC already read. Its documentation now states the IRC 22(c)(2)(B)(iii) definition: the taxable part of wage-replacement pay from a plan that provides for disability retirement. taxable_disability_benefits alone doesn't show the plan qualifies. A limit to the wages and taxable disability benefits in federal AGI catches entries with nothing in AGI.

State Provision Law Notes
WI wi_disability_income_exclusion Schedule 2440W; Wis. Stat. 71.05(6)(b)4 under 65; joint return required (no separate return, and no head of household return by a separated spouse)
NY ny_disability_income_exclusion Tax Law 612(c)(3-b); IT-221 under 65; separate filers only if they lived apart all year; split between spouses in proportion to pay (IT-221 Example 5); with the pension exclusion, at most $20,000 per person
IA ia_disability_income_exclusion IA 2440; Schedule 1 line 19b code h (2023+) under 65; married filers who don't file jointly only if they did not live together
IN in_disability_retirement_deduction IC 6-3-2-9; Bulletin 70; Schedule 2 code 602 per person, no age limit; $7,500 threshold for separate filers

The employer's mandatory retirement age is not modelled.

Tests

  • Federal cases from Pub. 525's rules, all failing on main and passing here:
    • employer-paid, employee-paid, shared and joint-return cases;
    • 2024 income tax on a $30,000 disability pension (taxable income 15,400, tax 1,616);
    • provisional income for Social Security (taxable benefits 2,500);
    • dependent gross income;
    • the qualifying-relative $5,050 limit.
  • One case per state switch, each with a partly exempt amount, so the switch matters. 10 of 10 fail on main and pass here.
  • The PA PIT case fails with the PA line removed and the federal change kept.
  • Earned income:
    • a dependent filer with a $10,000 pre-retirement-age disability pension gets a standard deduction of $10,450 and owes no tax (2024 dependent worksheet);
    • a single filer with $10,000 gets EITC earned income $10,000 and EITC $632;
    • earned income is capped at the taxable part.
  • State exclusions:
    • WI 2440W: full, phased-down, two-spouse, age-65, not-retired, separate-return and self-paid-insurance cases;
    • NY: IT-221 Example 5, $5,520 and $3,680;
    • IA 2440 phase-down, and IN Bulletin 70 per-person, separate-filer and no-age-limit cases.
  • At head 2c76dd1, the 99 YAML files that read the new or changed variables pass (830 cases). At 3990a89, the WI, NY, IA and IN tax test folders and the federal EITC, child care credit and standard deduction folders passed.

Evidence is in ~/reviews/disability-benefits-gross-income-2026-10/: evidence/fails-on-main.md, research reports and the 51-state differential.

Methodology choice: Max's decision d1466

The law is settled, but the CPS-based input records the payer type (DIS_SC), not who paid the premiums.

  • CPS 2024 non-workers'-comp disability income is $41.8bn.
  • About 13% of it is "accident or disability insurance" (code 7), which Census's CPS tax model and CBO's public CPS code both treat as not taxable.
  • About 38% is government, military or railroad disability pensions (codes 3–6), which many states exempt through their pension exclusions.

This PR's default treats all of the input as employer-paid, matching the variable's definition. The recommended follow-up is a Microcosm change that supplies tax_exempt_disability_benefits (codes 7 and 8) and tags the government, military and railroad parts. d1466 also lays out the alternatives: hold the PR for that split, use a share parameter, or keep the status quo. Hold the merge for the ruling.

Known limitations and follow-ups

These are separate tasks; none is introduced by this PR except as noted:

  • Earned income default. disability_benefits_before_minimum_retirement_age defaults to 0. Whether the microdata should assume a part of the benefits is earned (an age proxy) is the earned-income sub-question in d1466. State rules that read tax_unit_earned_income (e.g. CO's refundable CTC, DC's EITC, HI and OR deductions) don't include it yet.
  • State exclusions still missing. DC D-2440, MN M1R and the federal Schedule R credit read total_disability_payments and have the consumer bugs found in review. NJ-2440 (NJ builds income from components) and KY are in the state follow-ups. Government, military and railroad disability pensions that some states exempt need the Microcosm split.
  • States that build income from components (AL, MS, IA 2022, NJ) don't add the taxable part. AL, which deducts federal income tax, now shows a small decrease for these filers.
  • Other gaps found along the way:
    • Montana still applies the disability exclusion after its 2024 repeal.
    • Louisiana's blind-exemption default blocks the disability exemption.
    • VA, SC, OH and CO skip permanent-and-total and plan-type conditions.
    • disability_benefits is missing from household net income.
    • The Schedule R and DC/MN/NJ consumers of total_disability_payments have bugs found in review. Wiring total_disability_payments to this PR's variable was tried, then reverted, for that reason.
  • Montana elderly credit (Count disability benefits and 2020 excluded unemployment compensation in Montana's elderly homeowner/renter credit income #10163). Whichever of Count disability benefits and 2020 excluded unemployment compensation in Montana's elderly homeowner/renter credit income #10163 and this PR lands second switches Montana's disability_benefits item to tax_exempt_disability_benefits, because the taxable part reaches the credit through AGI. This was agreed with Count disability benefits and 2020 excluded unemployment compensation in Montana's elderly homeowner/renter credit income #10163's session.

Hub microsimulation impact (current head)

A real microsimulation on the default dataset, main at the merge base 2f3053c845 against this PR's head e9efd0f877, for 2025 and 2026. The runs went one at a time under the shared heavy-job lock. Sums are weighted.

Output 2025 change 2026 change 2025 records changed (weighted) 2026 records changed (weighted)
disability_benefits +0 +0 0 (0) 0 (0)
irs_gross_income +22.95bn +24.04bn 680 (1,669,167) 679 (1,693,012)
adjusted_gross_income +22.95bn +24.04bn 635 (1,495,658) 635 (1,506,339)
taxable_income +16.27bn +17.27bn 559 (1,224,186) 563 (1,232,929)
income_tax_before_credits +2.55bn +2.71bn 557 (1,222,749) 561 (1,231,482)
taxable_social_security +2.70bn +2.94bn 100 (386,426) 103 (413,037)
eitc -65.35M -65.40M 53 (184,037) 51 (176,326)
refundable_ctc -19.45M -20.29M 36 (48,373) 37 (70,198)
is_qualifying_relative_dependent -141,741 -142,753 17 (141,741) 17 (142,753)
va_disability_income_subtraction +0 +0 0 (0) 0 (0)
oh_deductions +291.17M +314.65M 18 (66,735) 18 (67,211)
sc_subtractions +2,630 +1,629 2 (1) 5 (1)
co_pension_subtraction +28.37M +29.20M 2 (3,728) 2 (3,755)
la_disability_income_exemption_person +0 +0 0 (0) 0 (0)
mt_disability_income_exclusion +0 +0 0 (0) 0 (0)
ar_retirement_or_disability_benefits_exemption +0 +0 0 (0) 0 (0)
pa_property_tax_or_rent_rebate +0 +0 0 (0) 0 (0)
total_disability_payments +0 +0 0 (0) 0 (0)
section_22_income -58.72M -58.82M 6 (11,378) 6 (11,460)
elderly_disabled_credit +0 +0 0 (0) 0 (0)
pa_total_taxable_income +11 +0 2 (0) 5 (3)
state_income_tax +660.04M +676.97M 380 (850,685) 379 (853,005)
income_tax +2.59bn +2.75bn 549 (1,230,263) 553 (1,239,050)
household_net_income -3.27bn -3.45bn 565 (1,321,297) 567 (1,326,979)
household_benefits -14 -14 3 (0) 3 (0)

The microdata supplies only disability_benefits: tax_exempt_disability_benefits, disability_benefits_before_minimum_retirement_age, total_disability_payments and retired_on_total_disability are unset, so the whole input is treated as taxable (the d1466 default) and the earned-income and WI/NY/IA/IN exclusion changes don't move these aggregates. The state subtraction switches show no change for the same reason: taxable equals total. OH, CO and the section 22 base move only through AGI and taxable Social Security.

Comparison files are in fixes/10185-impact/ on the hub host.

axiom: us/statute/26/104/a/3 TheAxiomFoundation/rulespec-us#1724 queued; earned income us/statute/26/32/c/2 TheAxiomFoundation/rulespec-us#1748 queued; states TheAxiomFoundation/rulespec-us#1740 (VA), #1741 (MT), #1742 (AR), #1743 (SC), #1744 (OH), #1745 (CO), #1746 (PA-1000), #1747 (PA § 301(d)), #1749 (WI 2440W), #1750 (NY IT-221), #1751 (IA 2440), #1752 (IN 6-3-2-9) queued, LA extends #1493 (comment)

🤖 Generated with Claude Code

MaxGhenis and others added 3 commits October 12, 2026 19:08
Adds tax_exempt_disability_benefits (IRC 104(a)(3)) and taxable_disability_benefits
(IRC 105(a)) and lists the taxable part in gov.irs.gross_income.sources. State
subtractions that remove disability income from federal AGI (VA, MT, LA, AR, SC,
OH, CO) now read the taxable part; PA's rebate income adds only the exempt part.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 3 commits October 12, 2026 20:36
total_disability_payments (IRC 22(c)(2)(B)(iii)) now defaults to
taxable_disability_benefits for someone retired on permanent and total
disability, with tests from the 2024 Schedule R instructions' examples.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pennsylvania starts from federal gross income in the model, so the taxable
disability benefits now in federal gross income need a PA subtraction:
sick pay and disability benefits other than regular wages, including
third-party insurer payments, and disability distributions are not taxable
(61 Pa. Code 101.6(c)(1); 2024 PA-40 instructions pages 8 and 13).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 13, 2026
MaxGhenis and others added 4 commits October 13, 2026 03:50
…ate disability income exclusions

- disability_benefits_before_minimum_retirement_age (input, default 0) and
  earned_disability_benefits feed EITC/ACTC earned income, a dependent's
  standard deduction and child and dependent care credit earnings (Pub. 596
  p.8, Pub. 503 p.4).
- permanent_disability_retirement_pay (retired on permanent and total
  disability) feeds new exclusions modelled on former IRC 105(d): Wisconsin
  Schedule 2440W, New York IT-221, Iowa IA 2440 (from 2023) and Indiana
  IT-2440 (code 602).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…bility exclusions

Cases from the 2024 dependent standard deduction worksheet, Pub. 596, Pub. 503,
Schedule 2440W, IT-221 Example 5, IA 2440 and Indiana Bulletin 70.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 3 commits October 13, 2026 04:35
…Y limit, IRA and filing earned income

- permanent_disability_retirement_pay reads the explicit total_disability_payments
  input (payments from a plan providing for disability retirement), limited to
  wages and taxable disability benefits in federal AGI.
- WI and IA treat a separated spouse filing as head of household as married.
- Restore New York's ,000 combined disability and pension limit, which binds
  when above-the-line deductions keep AGI low.
- Disability pay treated as wages counts as IRA compensation and as earned
  income in the filing requirement's unearned-income test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…disability pay in Medicaid's filer test

- total_disability_payments documents IRC 22(c)(2)(B)(iii): the taxable part of
  qualifying disability pay. permanent_disability_retirement_pay keeps the
  wages-plus-taxable-benefits limit only as a consistency check.
- medicaid_person_is_required_to_file counts earned_disability_benefits as
  earned income.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Feeds the kiddie-tax AMT exemption and the federal-style IN, OK and WA credits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis marked this pull request as ready for review October 13, 2026 09:14
…fits-gross-income

# Conflicts:
#	policyengine_us/tests/policy/baseline/gov/irs/credits/earned_income/eitc_earned_income.yaml
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Hand-off to the US + core hub (session local_baf7c8a1-e7e2-41ac-9fb9-718d62c46acf, 2026-10-13)

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.

1 participant