PolicyEngine US 1.720.6 charges Pennsylvania state income tax on qualified retirement distributions (pension, IRA, 401(k)) for retirees who have reached the plan's retirement age. Pennsylvania exempts this income entirely.
Statutory references:
- 72 P.S. §7303(a) (Pennsylvania Tax Reform Code) defines eight classes of taxable income. Qualified retirement distributions received by retirees who have met the plan's retirement age requirements are not included in any taxable class.
- PA DoR Personal Income Tax Bulletin 2008-03 and the REV-419 Schedule W-2S instructions (https://www.revenue.pa.gov/) explicitly confirm: "Retirement income, including but not limited to, payments from individual retirement accounts (IRA), 401(k) plans, and similar employer-sponsored
retirement plans, is generally not subject to Pennsylvania personal income tax when distributed after reaching retirement age (typically 59½)."
- Pennsylvania additionally exempts Social Security retirement benefits in full (PA Personal Income Tax does not adopt the federal taxation of SS).
Reproducer (PolicyEngine US 1.720.6):
from policyengine_us import Simulation
sim = Simulation(situation={
'people': {
'p0': {
'age': {2026: 67},
'taxable_pension_income': {2026: 40000},
'taxable_ira_distributions': {2026: 30000},
'social_security': {2026: 30000},
},
'p1': {
'age': {2026: 65},
'taxable_pension_income': {2026: 20000},
'social_security': {2026: 20000},
},
},
'tax_units': {
'tu': {'members': ['p0', 'p1'], 'filing_status': {2026: 'JOINT'}},
},
'households': {
'h': {'members': ['p0', 'p1'], 'state_code': {2026: 'PA'}},
},
})
print(float(sim.calculate('state_income_tax', 2026)[0]))
Actual: 938.00
Expected: 0.00
Why it's $0
Both spouses are past retirement age (65 and 67), so all four income components in this household are PA-exempt.
┌──────────────────────────┬─────────┬──────────────────────────────────────────────────────────────────────────────┐
│ Income │ Amount │ PA treatment │
├──────────────────────────┼─────────┼──────────────────────────────────────────────────────────────────────────────┤
│ Primary pension │ $40,000 │ Exempt — qualified retirement distribution received past plan retirement age │
├──────────────────────────┼─────────┼──────────────────────────────────────────────────────────────────────────────┤
│ Primary IRA distribution │ $30,000 │ Exempt — qualified plan, past 59½ │
├──────────────────────────┼─────────┼──────────────────────────────────────────────────────────────────────────────┤
│ Primary Social Security │ $30,000 │ Exempt — PA does not tax SS │
├──────────────────────────┼─────────┼──────────────────────────────────────────────────────────────────────────────┤
│ Spouse pension │ $20,000 │ Exempt — same as primary │
├──────────────────────────┼─────────┼──────────────────────────────────────────────────────────────────────────────┤
│ Spouse Social Security │ $20,000 │ Exempt — PA does not tax SS │
├──────────────────────────┼─────────┼──────────────────────────────────────────────────────────────────────────────┤
│ PA taxable income │ $0 │ │
└──────────────────────────┴─────────┴──────────────────────────────────────────────────────────────────────────────┘
Pre-retirement-age IRA / 401(k) distributions (the early-withdrawal case) ARE PA-taxable, so the variable shouldn't be unconditionally zeroed — the exemption is gated on age vs. the plan's retirement age (the planner's typical 59.5 proxy is fine).
Suggested fix
Add (or fix) a pa_qualified_retirement_subtraction TaxUnit variable that subtracts taxable_pension_income + taxable_ira_distributions + taxable_roth_conversions from pa_taxable_income when the recipient is age 59.5+. The Social Security exemption should already be present in PE's PA
model — please confirm during the fix that social_security flows into PA's exclusion list correctly.
PolicyEngine US 1.720.6 charges Pennsylvania state income tax on qualified retirement distributions (pension, IRA, 401(k)) for retirees who have reached the plan's retirement age. Pennsylvania exempts this income entirely.
Statutory references:
retirement plans, is generally not subject to Pennsylvania personal income tax when distributed after reaching retirement age (typically 59½)."
Reproducer (PolicyEngine US 1.720.6):
from policyengine_us import Simulation
sim = Simulation(situation={
'people': {
'p0': {
'age': {2026: 67},
'taxable_pension_income': {2026: 40000},
'taxable_ira_distributions': {2026: 30000},
'social_security': {2026: 30000},
},
'p1': {
'age': {2026: 65},
'taxable_pension_income': {2026: 20000},
'social_security': {2026: 20000},
},
},
'tax_units': {
'tu': {'members': ['p0', 'p1'], 'filing_status': {2026: 'JOINT'}},
},
'households': {
'h': {'members': ['p0', 'p1'], 'state_code': {2026: 'PA'}},
},
})
print(float(sim.calculate('state_income_tax', 2026)[0]))
Actual: 938.00
Expected: 0.00
Why it's $0
Both spouses are past retirement age (65 and 67), so all four income components in this household are PA-exempt.
┌──────────────────────────┬─────────┬──────────────────────────────────────────────────────────────────────────────┐
│ Income │ Amount │ PA treatment │
├──────────────────────────┼─────────┼──────────────────────────────────────────────────────────────────────────────┤
│ Primary pension │ $40,000 │ Exempt — qualified retirement distribution received past plan retirement age │
├──────────────────────────┼─────────┼──────────────────────────────────────────────────────────────────────────────┤
│ Primary IRA distribution │ $30,000 │ Exempt — qualified plan, past 59½ │
├──────────────────────────┼─────────┼──────────────────────────────────────────────────────────────────────────────┤
│ Primary Social Security │ $30,000 │ Exempt — PA does not tax SS │
├──────────────────────────┼─────────┼──────────────────────────────────────────────────────────────────────────────┤
│ Spouse pension │ $20,000 │ Exempt — same as primary │
├──────────────────────────┼─────────┼──────────────────────────────────────────────────────────────────────────────┤
│ Spouse Social Security │ $20,000 │ Exempt — PA does not tax SS │
├──────────────────────────┼─────────┼──────────────────────────────────────────────────────────────────────────────┤
│ PA taxable income │ $0 │ │
└──────────────────────────┴─────────┴──────────────────────────────────────────────────────────────────────────────┘
Pre-retirement-age IRA / 401(k) distributions (the early-withdrawal case) ARE PA-taxable, so the variable shouldn't be unconditionally zeroed — the exemption is gated on age vs. the plan's retirement age (the planner's typical 59.5 proxy is fine).
Suggested fix
Add (or fix) a pa_qualified_retirement_subtraction TaxUnit variable that subtracts taxable_pension_income + taxable_ira_distributions + taxable_roth_conversions from pa_taxable_income when the recipient is age 59.5+. The Social Security exemption should already be present in PE's PA
model — please confirm during the fix that social_security flows into PA's exclusion list correctly.