PolicyEngine / PolicyEngine/policyengine-us

PA employer pensions received before age 59.5 are still taxed; Pennsylvania exempts them once plan retirement conditions are met

Open
#9,491 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
162
Forks
212
Avg merge
3d 3h
Merged PRs (30d)
97

Description

## Problem

`pa_nontaxable_pension_income` excludes an employer pension from Pennsylvania compensation only once the recipient reaches age 59.5 (`gov.states.pa.tax.income.retirement_age_threshold`). Pennsylvania has no age test for employer plans. It exempts the payments once the recipient retires from service after meeting the plan's own age or years-of-service condition. A 57-year-old drawing a periodic pension from a plan with a 30-years-of-service rule, or a public safety plan with an age-55 rule, is exempt under Pennsylvania law and taxed by the model.

59.5 was adopted in #9387 as the closest available proxy, replacing the age-65 `is_retired` convention that had no Pennsylvania basis at all. It is closer, but it is still an approximation, and this issue tracks the residual error.

## What Pennsylvania actually requires

61 Pa. Code 101.6(c)(8) puts IRA, SEP, Keogh and federally qualified employer pension plans in one scope, and exempts distributions "made upon or after his retirement from service after reaching a specific age or after a stated period of employment". No age appears in the regulation. The "specific age" is the plan's, not the state's.

The PA Personal Income Tax Guide, Gross Compensation chapter, introduces 59.5 in exactly one place: "For a plan that is not an employer provided plan and has no specific retirement criteria, such as an IRA, the qualifying retirement age is the period after which a distribution will not be subject to penalty for early withdrawal for Federal Income tax purposes (such as age 59 1/2, death, disability)." For employer plans, the same chapter says the payments "must come from an eligible Pennsylvania retirement plan and must be paid to persons retired from service after reaching a specific age or after a stated period of employment."

The 2023 PA-40 IN states no age for employer plans: all amounts from an eligible employer-sponsored retirement or old age benefit plan are taxable in the year received, except "Payments you receive after you qualify for retirement and retire."

## Current model boundary

| Age | Employer pension in PA AGI |
| --- | --- |
| 55 to 59.4 | Taxable |
| 59.5 and above | Excluded |

Verified against `policyengine_us/tests/policy/baseline/gov/states/pa/tax/income/taxable_income/pa_nontaxable_pension_income.yaml` at ages 59, 59.4, 59.5, 60 and 67 on branch `fix/pa-pension-retirement-age`.

## Categories the model does not reach at all

PA-40 IN item 5 makes all distributions nontaxable regardless of the Box 7 distribution code, and therefore regardless of age, from:

- State Employees' Retirement System (SERS)
- Pennsylvania School Employees' Retirement System (PSERS)
- Pennsylvania Municipal Employees' Retirement System (PMERS)
- U.S. Civil Service Commission Retirement Disability Plan

PA-40 IN item 6 adds retired or retainer pay of a member or former member of a uniformed service computed under Chapter 71 of Title 10. The PA-40 IN "income not taxable" list also names military pension benefits, Civil Service annuities and the United Mine Workers Pension.

The model has no plan-identity input, so a 57-year-old PSERS retiree is taxed on the pension. Closing this gap needs either plan-level inputs (plan type, retirement age or years of service met) or a Pennsylvania-specific imputation of whether the recipient has met the plan's retirement conditions.

## Possible directions

1. Add an input variable for whether the recipient has met the plan's retirement conditions, defaulting to the current age proxy when unknown.
2. Add a plan-type input covering the always-exempt Pennsylvania public plans and military retired pay.
3. Model retirement status from separation from service rather than age alone, so a pension recipient with no wage income is treated as retired.

## Sources

| Claim | Source | URL |
| --- | --- | --- |
| Employer plans grouped with IRA/SEP/Keogh; exemption keyed to the plan's own age or period of employment, no age named | 61 Pa. Code 101.6(c)(8) | https://www.pacodeandbulletin.gov/Display/pacode?file=/secure/pacode/data/061/chapter101/s101.6.html |
| 59.5 applies only to plans that are not employer provided and have no specific retirement criteria | PA Personal Income Tax Guide, Gross Compensation (DSM-12, 08-2025) | https://www.pa.gov/content/dam/copapwp-pagov/en/revenue/documents/formsandpublications/papersonalincometaxguide/documents/pitguide_grosscompensation.pdf |
| No age test for employer plans; SERS, PSERS, PMERS, U.S. Civil Service and uniformed service pay always nontaxable | 2023 PA-40 IN | https://www.pa.gov/content/dam/copapwp-pagov/en/revenue/documents/formsandpublications/formsforindividuals/pit/documents/2023/2023_pa-40in.pdf |

Follow-up to #9386 and #9387.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Contributor guide

Open the contributing guide

Research direction

Start with pa_nontaxable_pension_income and policyengine_us/tests/policy/baseline/gov/states/pa/tax/income/taxable_income/pa_nontaxable_pension_income.yaml, then review the cited Pennsylvania sources and follow-ups #9386 and #9387. The work is complete when the chosen treatment of plan retirement conditions and exempt plan categories is represented in the model and covered by tests for the affected ages and plans.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.