Skip to content

Add a Veterans Day post on state income taxes on military retired pay - #1523

Draft
MaxGhenis wants to merge 6 commits into
mainfrom
veterans-day-2026-post
Draft

MaxGhenis wants to merge 6 commits into
mainfrom
veterans-day-2026-post

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

Not for publication yet. Please don't merge: I'll make the publish call after the open items below.

What this adds

A Veterans Day post (dated 2026-11-11) on how much state income tax military retirees owe on their retired pay in each state in 2026, for two couples, plus a table of other veteran rules PolicyEngine models.

The article is generated. PolicyEngine/veterans-day-2026 holds the template (post/template.md), the renderer (scripts/render_post.py) and the PolicyEngine-US runs it reads, so every number and chart in the article comes from that repo's outputs/. Edit the template there and re-render; don't hand-edit the article.

Plan

🤖 Generated with Claude Code

…ed pay

The article is rendered from PolicyEngine/veterans-day-2026 (post/template.md and
scripts/render_post.py), so its numbers and charts come from that repo's outputs.
It is a draft: state checks and law citations are still in progress.

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

vercel Bot commented Nov 8, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
policyengine-calculator-next Ready Ready Preview Nov 9, 2026 4:45pm UTC
policyengine-website Ready Ready Preview Nov 9, 2026 4:45pm UTC

Request Review

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A photographic still life generated from the prompt in
PolicyEngine/veterans-day-2026 post/cover_prompt.md: 1800x840 WebP, teal
only in the notebook and folder, no legible text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The first cover repeated the 2025 SPM covers: an oak desk by a window
with a teal notebook, glasses and papers. The new one sets worn boots
with blank dog tags, a folded olive blanket, a teal mug and a teal knit
cap on a porch in late November light. PolicyEngine/veterans-day-2026
keeps the prompt in post/cover_prompt.md.

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

The statehouse's code pages return 404, so the post links the
Department of Revenue's ruling on S.C. Code § 12-6-1171.

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, could you check the state law in this post? I've also asked for your review on the six PolicyEngine-US fixes it draws on: PolicyEngine/policyengine-us#10702, PolicyEngine/policyengine-us#10713, PolicyEngine/policyengine-us#10714, PolicyEngine/policyengine-us#10715, PolicyEngine/policyengine-us#10716 and PolicyEngine/policyengine-us#10717. Two questions on the post itself:

  1. The lead still needs a count: how many of the 41 states with a broad income tax exempt all military retired pay in 2026, and how many tax some of it. What's your count?
  2. PolicyEngine-US gives Kansas's extra exemption to veterans flagged is_permanently_and_totally_disabled, while Kansas gives it to an honorably discharged veteran whom the VA pays at the 100% rate for a permanent service-connected disability (K.S.A. 79-32,121b(b)(2)). Should it read is_fully_disabled_service_connected_veteran instead?

I'm aiming to publish on Veterans Day, so a read by Tuesday afternoon would help.

@MaxGhenis
MaxGhenis requested a review from hua7450 November 9, 2026 16:56
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Ziming, could you check the Medicaid row in this post's table of other veteran rules? PolicyEngine-US exempts a veteran from the work requirement when both is_veteran and is_permanently_and_totally_disabled hold (medicaid_work_requirement_eligible). Under clause (IV) of sec. 71119, states must exempt "a veteran with a disability rated as total under section 1155 of title 38" (139 Stat. 312), a VA rating that need not be permanent. Should the exemption read is_fully_disabled_service_connected_veteran, our flag for a veteran fully disabled by a service-connected condition? I'm aiming to publish on Veterans Day, so a read by Tuesday afternoon would help.

@DTrim99

DTrim99 commented Nov 9, 2026

Copy link
Copy Markdown
Contributor

@MaxGhenis, here's my state-law check of the post. I've answered your two questions first, then listed corrections to the post.

(a) The 2026 count: 28 states exempt all military retired pay and 13 tax some of it

Who the 41 are. The post doesn't define "41 states with a broad income tax". The usual count works: 50 states minus Alaska, Florida, Nevada, New Hampshire, South Dakota, Tennessee, Texas, Washington and Wyoming. New Hampshire's interest and dividends tax ended with tax year 2025. In 2026, Washington taxes only long-term capital gains; the 9.9% tax on income over $1 million it enacted in 2026 (ESSB 6346) would start in 2028. DC isn't a state and taxes all of the pay, so I'd mention it separately, as the post already does. I suggest naming the nine excluded states in a parenthetical or footnote.

Count for tax year 2026, full-year residents:

  • 28 states exempt all military retired pay, at any age, amount, income and length of service.
    • 20 do it with a rule written for military retired pay. One of them, Utah, gives a credit equal to its tax rate times the pay instead of excluding it. That has the same effect, so I count it here.
    • 4 use a broader exclusion for government pensions: Kansas, Louisiana, Massachusetts and New York. Kansas and Massachusetts name military pay in the text.
    • 4 use a general retirement-income exclusion: Hawaii, Illinois, Mississippi and Pennsylvania.
  • 13 tax some of it: California, Colorado, Delaware, Georgia, Idaho, Kentucky, Maryland, Montana, New Mexico, North Carolina, Oregon, Vermont and Virginia. In each, whether the pay is taxed depends on the retiree's age, income, the amount of pay, years or dates of service, or work.
  • 0 of the 41 tax all of it. Oregon comes closest: for anyone whose service began after September 1991, it taxes the full pay, apart from a credit for low-income filers 62 and older.

A suggested lead: "Of the 41 states with a broad income tax, 28 exempt all military retired pay in 2026 and 13 tax some of it, depending on the retiree's age, income, length of service or work; the District of Columbia taxes all of it." Two caveats belong near it, and the post already shows both. First, "exempt" isn't the same as "no extra tax": Utah, South Carolina and Maine exempt the pay but count it in income tests. Second, so do the low-income credits that the retired couple loses (see (d)).

State 2026 Basis Rule for 2026 Law (statute; instructions) Recent change
AL Exempt Military All military retired pay Ala. Code § 40-18-20; 2025 Form 40 booklet, p. 7 —
AZ Exempt Military All, from 2021 A.R.S. § 43-1022(26); 2025 Form 140 instructions, line 29b —
AR Exempt Military All, from 2018 (Act 141 of 2017) A.C.A. § 26-51-307; 2025 AR1000F instructions —
CA Partial Military Up to $20,000 per return, 2025–2029, only if federal AGI ≤ $125,000 ($250,000 joint); a cliff, not a phase-out R&TC § 17132.9 (SB 132, 2025); FTB Pub. 1032 New for 2025; SB 1407 (2026, $40,000) not enacted
CO Partial Military under 55; general 55+ Under 55: up to $15,000 per person through 2028. 55–64: $20,000; 65+: $24,000 general pension subtraction C.R.S. 39-22-104(4)(y)(I)(D) ("before January 1, 2029"), (4)(f); 2025 Book 104 2026 bills not enacted
CT Exempt Military All C.G.S. § 12-701(a)(20)(B)(xvi); 2025 CT-1040 instructions —
DE Partial Military under 60; general 60+ Under 60: greater of $12,500 of military pension or $2,000 of pensions. 60+: $12,500 shared with other pensions and retirement income 30 Del. C. § 1106(b)(3)b; 2025 PIT-RES instructions SB 219 (2026): $15,000 (2027), $20,000 (2028), $25,000 (2029+); 60+ may take it; 60+ domicile test. Nothing changes for 2026
GA Partial Military under 62; general 62+ Under 62: $17,500, plus $17,500 more if Georgia earned income exceeds $17,500. 62–64: $35,000; 65+: $65,000 general retirement exclusion O.C.G.A. § 48-7-27(a)(5.1), (a)(5); 2025 IT-511 HB 266 (2025): up to $65,000 under 65, but section 3(b) starts it in tax year 2027, not 2026 as some coverage says
HI Exempt Retirement income Employer-funded pensions excluded; military retired pay is noncontributory HRS § 235-7(a)(3); 2025 N-11 instructions, p. 13 —
ID Partial Retirement deduction with a military test Counts only if the retiree is disabled, 62+, or worked and had to file; capped at the maximum Social Security benefit ($49,824; $74,736 joint by SSA's 2026 figure) less Social Security received Idaho Code § 63-3022A(1)(b), (2), (3); Form 39R instructions H.B. 40 and H.B. 479 (2025)
IL Exempt Retirement income Government and other qualified retirement plans 35 ILCS 5/203(a)(2)(F); 2025 IL-1040 instructions —
IN Exempt Military All, from 2022 IC 6-3-2-4; 2025 IT-40 booklet, p. 22 HB 1280 (2025) added Space Force, PHS, NOAA
IA Exempt Military All (plus a separate 55+ retirement exclusion) Iowa Code § 422.7(20); IA 1040 Schedule 1 —
KS Exempt Government pensions Federal and military retirement K.S.A. 79-32,117(c)(vii); 2025 K-40 instructions, Schedule S —
KY Partial Government/general Share from service before 1998 fully excluded; the rest shares the $31,110-per-person pension exclusion KRS 141.019(1)(g); 2025 Form 740 instructions; Schedule P 2025 and 2026 bills died
LA Exempt Government pensions Federal retirement benefits R.S. 47:44.2; 2025 IT-540 instructions, code 04E —
ME Exempt Military All 36 M.R.S. § 5122(2)(M-2) P.L. 2025 c. 452 covers all uniformed services from 2026
MD Partial Military; general 65+ $12,500 under 55, $20,000 at 55+; 65+ may put the rest in the § 10-209 pension exclusion Tax–Gen. § 10-207(q); 2025 resident booklet 2026 bills failed
MA Exempt Government pensions Uniformed services retired pay, contributory or not G.L. c. 62, § 2(a)(2)(E) —
MI Exempt Military Armed forces retirement pay MCL 206.30(1)(e) —
MN Exempt Military All Minn. Stat. § 290.0132, subd. 21 —
MS Exempt Retirement income Federal and other qualified retirement pay Miss. Code § 27-7-15(4)(k); Form 80-100 instructions —
MO Exempt Military All RSMo 143.121.3(12); MO-A line 10 —
MT Partial Military Lesser of 50% of the pay or Montana-source earned income, for 5 consecutive years, with residency conditions MCA 15-30-2120(3)(n), (8), (9); Form WMRE 2025 session repealed the 2033 sunset
NE Exempt Military All, from 2022 Neb. Rev. Stat. § 77-2716(15) —
NJ Exempt Military All N.J.S.A. 54A:6-26; 2025 NJ-1040 instructions —
NM Partial Military Up to $30,000 per retiree, no sunset NMSA § 7-2-5.13 (2024 HB 252 § 32) 2026 uncapped bills died
NY Exempt Government pensions Pensions of U.S. officers and employees, "including the military" Tax Law § 612(c)(3)(ii); 2025 IT-201-I, line 26 —
NC Partial Military Only with 20+ years of service or a medical retirement (10 U.S.C. ch. 61), or Bailey vesting by Aug. 12, 1989 G.S. 105-153.5(b)(5a), (b)(5); 2025 D-401 instructions —
ND Exempt Military All N.D.C.C. § 57-38-30.3(2)(r); 2025 ND-1 booklet —
OH Exempt Military All R.C. 5747.01(A)(23) —
OK Exempt Military All, from 2022 68 O.S. § 2358(E)(17); OAC 710:50-15-49(g); 2025 Form 511 packet —
OR Partial Federal pensions; general credit Only the share from service before Oct. 1, 1991; 62+ retirement income credit for low household income ORS 316.680(1)(e), 316.157; 2025 Pub. OR-17 2025 bills died
PA Exempt Retirement income Retirement pay is not compensation; regulation names uniformed services 72 P.S. § 7301(d); 61 Pa. Code § 101.6(c)(3) —
RI Exempt Military All, from 2023 R.I. Gen. Laws § 44-30-12(c)(11) —
SC Exempt Military All S.C. Code § 12-6-1171(A) (RR 22-11); 2025 SC1040 instructions Act 110 (2026) leaves § 12-6-1171 alone; its new deduction phases out on federal AGI, which includes the pay
UT Exempt (credit) Military Nonrefundable credit = 4.45% × the pay in AGI; can't be combined with the § 59-10-1019 retirement credit Utah Code § 59-10-1043; 2025 TC-40 instructions, code AJ SB 60 (2026): rate 4.45%
VT Partial Military All if federal AGI ≤ $125,000; phases to zero at $175,000 (any filing status) 32 V.S.A. § 5830e(d); 2025 IN-112 instructions Act 71 (S.51) of 2025
VA Partial Military Up to $40,000, any age Va. Code § 58.1-322.02(18); 2025 Form 760 instructions 2026 bills ($60,000; uncapped) carried over or failed
WV Exempt Military All W. Va. Code § 11-21-12(c)(7)(C) —
WI Exempt Military All Wis. Stat. § 71.05(1)(am) —
DC Taxed — None since 2015 D.C. Code § 47-1803.02(a)(2)(N) FY2026 and FY2027 Budget Support Acts add none

Laws enacted in 2025 or 2026 that I checked: California SB 132, Delaware SB 219, Georgia HB 266, Idaho H.B. 40/479, Indiana HB 1280, Maine c. 452, Montana's 2025 sunset repeal, South Carolina Act 110, Utah SB 60 and Vermont Act 71. Of these, only California's, Idaho's and Vermont's change whether 2026 pay is taxed, and Georgia's and Delaware's start in 2027. Bills in Virginia, Kentucky, Maryland, New Mexico, Colorado, Oregon and California (SB 1407) didn't pass.

(b) Kansas: yes, read is_fully_disabled_service_connected_veteran

The statute. K.S.A. 79-32,121b(b)(2), as amended by L. 2025, ch. 123, § 9 (text):

"(2) any individual who has been honorably discharged from active service in any branch of the armed forces of the United States and who is certified by the United States department of veterans affairs or its successor to be in receipt of disability compensation at the 100% rate, if the disability is permanent and was sustained through military action or accident or resulted from disease contracted while in such active service, such individual shall be allowed an additional Kansas exemption of $2,320 for tax year 2025 and all tax years thereafter."

For 2023 and 2024 the same words are in K.S.A. 79-32,121(b), at $2,250 "for tax year 2023 and all tax years thereafter". L. 2025, ch. 112, § 6 re-enacted that $2,250 sentence while ch. 123 enacted the $2,320 in 79-32,121b. The revisor flags the double amendment, and the 2025 instructions follow the $2,320.

The K-40 instructions repeat the statute word for word and add no other test:

  • 2023, p. 6: $2,250.
  • 2024, pp. 2 and 6: $2,250. The form line reads "enter the total number of disabled veterans being claimed including yourself. Multiply by $2,250".
  • 2025, p. 2: "An additional exemption allowance of $2,320 will be allowed for each qualified disabled veteran."

What the model reads now. On main, ks_disabled_veteran_exemptions_eligible_person (in ks_disabled_veteran_exemptions_person.py) returns in_effect * is_permanently_and_totally_disabled * is_veteran. is_permanently_and_totally_disabled is the model's general disability flag. Its other readers treat it as inability to work, the IRC 22(e)(3) sense: EITC and dependent rules, Medicaid, Iowa's pension exclusion, Minnesota's elderly and disabled subtraction, West Virginia's senior and disability deduction. It requires neither a service connection nor a VA rating. So today PolicyEngine-US:

  • gives the exemption to a veteran who is permanently and totally disabled from a condition unrelated to service. That is the group the VA's needs-based pension serves, not disability compensation, and the statute excludes them;
  • denies it to a veteran the VA pays at the 100% rate for a permanent service-connected disability who isn't flagged as unable to work. A 100% schedular rating doesn't bar employment.

A 2026 household run on main confirms it. A Kansas joint return whose head has $45,000 of veterans_benefits gets ks_exemptions of $20,640 with is_permanently_and_totally_disabled true, and $18,320 with is_fully_disabled_service_connected_veteran true instead.

What is_fully_disabled_service_connected_veteran means in the model. Its label is "Is a fully disabled veteran who became so as a result of an injury during service". It has no documentation or reference. Its current readers all use it for a 100% service-connected rating:

  • Missouri's property tax credit leaves out the VA payments of a veteran with a 100% service-connected disability (mo_ptc_gross_income).
  • Virginia's energy assistance treats "100% Veterans Administration disability benefits" as disability (va_eap_disabled).
  • Illinois's CTA pass, military_disabled_head and military_disabled_spouse also read it.
  • Michigan reads it today. #10714 moves Michigan to a new any-rating input, has_service_connected_disability, because Michigan sets no rating threshold. That input would be wrong for Kansas, which requires the 100% rate.

The code change:

class ks_disabled_veteran_exemptions_eligible_person(Variable):
    value_type = bool
    entity = Person
    label = "Eligible person for the Kansas disabled veteran exemption"
    definition_period = YEAR
    reference = (
        # 2023-2024: K.S.A. 79-32,121(b); 2025 and later: K.S.A. 79-32,121b(b)(2)
        "https://www.kslegislature.gov/li/b2025_26/statute/079_000_0000_chapter/079_032_0000_article/079_032_0121b_section/079_032_0121b_k/",
        "https://www.ksrevenue.gov/pdf/ip25.pdf#page=2",
    )
    defined_for = StateCode.KS

    def formula(person, period, parameters):
        p = parameters(period).gov.states.ks.tax.income.exemptions.disabled_veteran
        return p.in_effect & person("is_fully_disabled_service_connected_veteran", period)

Three related cleanups:

  • Drop is_veteran. The flag already describes a veteran, and is_veteran's formula is veterans_benefits > 0. Keeping it would deny the exemption to a user who sets the flag but doesn't enter the VA payments, which aren't federally taxable.
  • Drop unit = USD, which doesn't belong on a boolean.
  • Document the flag. Give is_fully_disabled_service_connected_veteran a documentation string and a reference (38 U.S.C. 1114(j), the total-disability rate). It should say the flag stands for a permanent rating: Kansas requires that "the disability is permanent", and a VA temporary total rating (38 CFR 4.29, 4.30) shouldn't count.

Tests that should change:

  • ks_disabled_veteran_exemption_2025.yaml. All seven cases set is_permanently_and_totally_disabled; switch them to is_fully_disabled_service_connected_veteran. "Disabled but not veteran" no longer makes sense under the new flag. Replace it with two cases:
    • a permanently and totally disabled veteran without a 100% service-connected rating gets no exemption (2025, single: $9,160);
    • a working veteran rated 100% service-connected, not flagged permanently and totally disabled, gets it ($11,480).
  • ks_disabled_veteran_exemptions_eligible_person.yaml.yaml. Switch the input in cases 1, 2 and 4. Case 3 is named "disabled, but not veteran" but repeats case 2's inputs (is_permanently_and_totally_disabled: false, is_veteran: true), so it adds nothing. Fix it, and drop the doubled .yaml extension.
  • No change needed in ks_exemptions.yaml cases 3 and 4, which set the eligibility variable directly, or in the two contrib reforms that add it.

Honorable discharge isn't modeled separately. PolicyEngine-US records no discharge status. is_veteran follows 38 U.S.C. 101(2), "other than dishonorable", which is broader than Kansas's "honorably discharged". The variable should say it assumes a flagged veteran was honorably discharged, as #10714 does for Michigan's honorable-or-general rule.

Effect on microsimulation. The dataset has no service-connected rating, so after the change the Kansas exemption reaches no one in microsimulation. Today it reaches people flagged permanently and totally disabled who have VA payments, a group that matches the statute poorly. The post's household results get more accurate.

(c) State-law corrections to the post

  1. New Mexico and Oklahoma belong in the retired couple's list (a PolicyEngine-US bug). Both count military retired pay in the income tests for refundable credits, and PolicyEngine-US doesn't.
    • New Mexico. Modified gross income (NMSA 7-2-2) counts pensions and retirement pay. The 2025 PIT-RC instructions list "an annuity, pension, retirement pay" and the line for "social security benefits, pensions, annuities".
    • Oklahoma. Gross household income is "taxable and nontaxable gross income" (Form 538-S, line 6 "Other pensions, annuities, and Individual Retirement Accounts"; OAC 710:50-15-96(c)).
    • The bug. nm_modified_gross_income and ok_gross_income list pension_income, which doesn't include military_retirement_pay, and neither list has military_retirement_income. A run on main shows both incomes at $30,000 (Social Security only) with or without the pay.
    • The effect. With the pay counted ($75,000), the couple loses New Mexico's low income comprehensive tax rebate ($152) and Oklahoma's sales tax relief credit ($80, over the $50,000 limit for filers 65 and older). The civilian-pension scenario already gives exactly those results.
    • For the post. After the fix the retired couple owes more in nine states and DC, not seven. The bar chart gains NM $152 and OK $80, and the credit list needs two more bullets. The fix belongs in policyengine-us: add military_retirement_income to gov.states.nm.tax.income.modified_gross_income and gov.states.ok.tax.income.credits.gross_income_sources. Michigan's household_resources.yaml has the same pattern and is worth checking for renters and homeowners.
  2. Kansas row in "Other rules for veterans". Add "honorably discharged". The row states the law correctly, but PolicyEngine-US models it differently until the (b) change lands, so either make that change or soften "models".
  3. Michigan row. The row states the law correctly (any rating, MCL 206.30(3)(b)), but main gives the exemption only to veterans flagged fully disabled. It matches only once #10714 merges.
  4. Medicaid row. The work requirement applies to the expansion adult group (and expansion-like waiver groups), not all enrollees. Suggested wording: "States must apply work requirements to expansion adults by January 1, 2027, or as late as December 31, 2028 with a federal good-faith exemption, and must exempt veterans with a disability rated as total."
  5. Indiana bullet. Make it "federal AGI under $10,000, with both spouses 65 or older". IT-40 line 1 is federal AGI.
  6. Maine. The income for the sales tax fairness credit is federal AGI plus nontaxable Social Security and other add-backs (§ 5213-A(1)). That's how the pay counts, and the post's wording is fine. With the fix in item 1, this is the same mechanism as New Mexico's and Oklahoma's.
  7. Verified as written:
    • Oregon: ORS 316.680(1)(e), service before October 1, 1991.
    • DC: no exclusion since 2015.
    • Delaware: $12,500 under 60, rising to $25,000 by 2029 under SB 219; $12,500 for 60+ in 2026.
    • Maryland: $12,500 under 55.
    • Colorado: $15,000 under 55, through 2028 per (4)(y)(I)(D).
    • California: $20,000, 2025–2029, $250,000 joint AGI limit. You could add that it is per return and a cliff.
    • Montana: (3)(n), (8), (9).
    • Utah: the 59-10-1043 credit, and the taxpayer credit phase-out at 1.3%.
    • South Carolina: Act 110 § 3 reduces the $30,000 deduction by (AGI − $80,000)/$110,000, rounded down to $10 under (c). That gives $2,727, rounded to $2,720.
    • Missouri: 143.121.3(12) is 100%; 143.171.2 gives 15% at $50,001 to $100,000. The bracket keys on "Missouri gross income", which is 15% here with or without the pay.
    • Alabama: the deduction is the full federal tax (booklet pp. 8 and 31).
    • Idaho: the $10 under 63-3082.
    • Hawaii: N-311 uses federal AGI under $60,000.
    • Arizona: 43-1072.01, federal AGI ≤ $25,000.
    • North Carolina: 20 years or a medical retirement.
    • SNAP row: P.L. 118-5 § 311; P.L. 119-21 § 10102.
  8. Optional context for the 45-year-old's zeros. Kentucky's $31,110 pension exclusion covers $30,000; Georgia's $17,500 + $17,500 covers it because the retiree has earned income; Virginia's cap is $40,000 and New Mexico's $30,000; Idaho's employment test is met ($60,000 of wages exceeds the $32,200 joint filing threshold). These states cap or condition the exemption but don't tax this couple.

(d) Chart spot-checks and anomalies

Hand checks against each state's law, 2026 (Δ = tax with the pay minus without):

State Couple Post Hand check OK?
AL 45 −180 Federal tax rises $3,600 (all at 12%). Alabama deducts federal tax in full and exempts the pay: 5% × $3,600 = −$180. Tax $2,378 → $2,198 matches the Form 40 schedule ($5,000 standard deduction, $3,000 exemption) ✓
MO 45 −25 15% × $3,600 = $540 more deduction × 4.7% = −$25.38 ✓
OR 45 2,310 Oregon taxes the pay but subtracts federal tax: ($30,000 − $3,600) × 8.75% = $2,310 ✓
DE 45 1,087 Taxable income $53,500 → $71,000 after the $12,500 exclusion: $6,500 × 5.55% + $11,000 × 6.6% = $1,086.75 ✓
MD 45 831 $17,500 × 4.75% = $831.25 (state tax only; the post leaves out county tax, as stated) ✓
CO 45 660 $15,000 × 4.4% ✓
MT 45 705 $15,000 × 4.7% ✓
UT 45 390 Credit offsets the 4.45% tax; taxpayer credit loses 1.3% × $30,000 = $390 ✓
SC 45 142 $2,720 × 5.21% = $141.71 ✓
DC 45 / 67 1,897 / 463 DC brackets with the model's standard deduction ($30,000 under Act 26-214, indexed to $30,650, plus $1,650 per spouse 65+). 67: $45,000 − $33,950 = $11,050 → $400 + 6% × $1,050 = $463 ✓ (confirm the indexed DC amount against the 2026 D-40)
DE 67 353 $45,000 − $12,500 − $11,500 standard deduction = $21,000 → $793 tax − $440 personal and age credits ✓
MT 67 272 Federal taxable income $17,100 − 2 × $5,660 Montana age-65 subtraction = $5,780 × 4.7% = $271.66. That subtraction is general, so "taxes all of the pay" stands ✓
HI 67 440 Federal AGI $0 → $64,600 crosses N-311's $60,000 line: 2 × $220 ✓
ME, IN, AZ, ID 67 215, 140, 50, 10 Mechanisms match § 5213-A, IT-40 Table A, A.R.S. 43-1072.01 and 63-3082 ✓
NM, OK 67 0, 0 Should be $152 and $80 (item (c)1) ✗ model
GA, VA, NM, KY, ID, NC, VT 45 0 Caps and tests above all cover $30,000 for this couple ✓

Sign anomalies (AL −180, MO −25). These aren't bugs. Both states exempt the pay and let filers deduct federal income tax. The pay raises federal tax by $3,600, so Alabama's deduction (all of it) and Missouri's (15% at this income) grow and state tax falls. Oregon has the same subtraction, but it taxes the pay, so there it only trims the increase. One display nit: the map's lowest bin is labeled "None" and also holds the two negative values. A separate "Less tax" bin, or "None or less" as the label, would match the note.

What changes when the six PRs merge. The run (checkout bfeef52eb9, which PolicyEngine/veterans-day-2026 records as 2.105.1 plus the Utah and Montana fixes) already includes #10702 and #10713. Without them, Utah would read about $1,725 and Montana about $1,410 for the 45-year-old, so the release the post cites must contain both. The other four don't move any published value:

  • #10714 (MI): affects only veterans with a service-connected disability.
  • #10715 (ID 2025 rules): the 45-year-old passes the employment test with room under the cap. The retired couple's pay now shares the cap: $74,736 − $30,000 = $44,736, leaving $264 in Idaho income, still under the standard deduction. Idaho stays at $0 and $10.
  • #10716 (DE): starts in 2027.
  • #10717 (ID cap): moves the cap by $773, which doesn't bind for these couples.

The NM/OK fix in (c)1 is the change that would alter the charts.

(e) Wording notes

  • The post reads neutrally. It describes each state's rule without judging it, and "owes more because of the pay" is accurate given that credits are included.
  • "PolicyEngine also models rules in benefit programs and other state taxes": the Kansas and Michigan rows are state income tax rules, so consider "and other state income tax rules".
  • Before publishing: fill the lead TODO (suggestion in (a)), replace "checkout bfeef52eb9" in both chart sources with the release number, and drop "Draft, not for publication:" from the posts.json description.
  • The template hard-codes "$2,720", "15%", "$15,000" and "Four states". They're right for these households, but a re-render after a model change won't update them.
  • Idaho's $10 is the permanent building fund tax; you could name it in the sentence.

@hua7450

hua7450 commented Nov 9, 2026

Copy link
Copy Markdown
Contributor

Yes, the exemption should read is_fully_disabled_service_connected_veteran. CMS's rule spells it out: 42 CFR 435.554(c)(4) exempts "a veteran with a temporary or permanent disability from the Department of Veterans Affairs, rated as 100 percent (total) under 38 U.S.C. 1155." is_permanently_and_totally_disabled is the tax definition (IRC 22(e)(3), unable to engage in substantial gainful activity). So today's test misses a veteran rated 100% who still works and a temporary 100% rating, and it exempts a veteran whose disability isn't service-connected. The Medicaid row is right as written. Optionally, it could note that a temporary rating counts.

I checked the other veteran disability rules for the same pattern and fixed them in PolicyEngine/policyengine-us#10768:

The CTA pass (10% or more) and North Carolina (chapter 61 medical retirement) would need inputs we don't have, so they stay as documented limits. Your Kansas and Michigan rows match who qualifies under the statutes.

None of this changes the post's figures. They're household calculations for a retiree with no service-connected disability, and the microdata carry none of these flags.

This branch was successfully deployed

2 active deployments
Preview – policyengine-website — 4e857dd1 Deployed Nov 9, 2026 by vercel[bot]
Preview – policyengine-calculator-next — 4e857dd1 Deployed Nov 9, 2026 by vercel[bot]
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.

3 participants