Skip to content

Add Pennsylvania state supplementation for 2026 - #10167

Merged
hua7450 merged 7 commits into
mainfrom
pa-ssp-2026
Oct 16, 2026
Merged

hua7450 merged 7 commits into
mainfrom
pa-ssp-2026

Conversation

@hua7450

@hua7450 hua7450 commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

What and why

Pennsylvania's State Supplementary Payment (SSP) was missing from PolicyEngine-US. Add pa_ssp for 2026 under 55 Pa. Code Chapter 299, POMS SI 01415.058 K and the Pennsylvania MA and LTC handbooks.

  • Who administers what (§ 299.1(c)): Pennsylvania pays the independent and household-of-another supplements. SSA pays the domiciliary care and personal care home supplements, so those rows use SSA rounding and the $1 minimum (20 CFR 416.2020(c)).

  • 2026 levels, from POMS K.2 and MA Handbook 387 Appendix A:

    Arrangement Individual Couple
    Independent $22.10 $33.30
    Household of another $25.53 $38.44
    Domiciliary care $634.30 $1,347.40
    Personal care home $639.30 $1,357.40 (move month only)
    • § 299.37 still prints the pre-increase care home rows ($434.30 / $439.30). A comment in the rate files notes it.
  • Payment: the supplement less countable income above the FBR (§§ 299.21(b)(1), 299.36(a)(2)(iv)). The household-of-another level uses the one-third-reduced FBR. Spouse deeming follows POMS SI 01320.430 D, through the shared state supplement helper.

  • Medicaid facilities: SSI recipients get the $22.10 Supplement for Personal Needs (LTC Handbook 450.243). Otherwise Title XIX facility residents are ineligible (§ 299.21(b)(3)).

  • Care homes: entered with pa_ssp_care_home, for adults 18 and over (POMS K.1). pa_ssp_living_arrangement derives the arrangement, so entering a care home for one person leaves other household members unchanged.

The SSP is added to the household and SPM benefit totals and to SNAP and HUD unearned income. Half of it counts in Pennsylvania's Property Tax/Rent Rebate income (PA-1000 Line 4).

References

Additional section and page citations are included alongside the parameters and formulas.

Coverage limits

The registry marks Pennsylvania as partial, verified for 2026.

Not modeled:

  • the mandatory, grandfathered and essential-person supplements;
  • ancillary facility subsidies;
  • a split for a couple with mixed arrangements in the move month. The shared helper averages the two halves (POMS SI 02005.030 G.1), where SI PHI01415.010 Chart 35 note 2 pays each spouse half of their own couple rate. The couple total matches unless income reduces one spouse's half to zero.

Personal care home couples after the move month need ssi_claim_is_joint set to false, and that variable is yearly. Whether the PA-1000 treats the Supplement for Personal Needs as SSP is not stated; the model half-counts it.

Earlier years use parameter backfilling and are unverified historical estimates; no historical coverage is claimed.

Related:

Test plan

  • 37 Pennsylvania SSP YAML cases (20 in pa_ssp.yaml, 10 in pa_ssp_living_arrangement.yaml, 7 in integration.yaml), plus two new Property Tax/Rent Rebate cases. They cover:
    • each arrangement, the SSP-only reduction, the $1 minimum and the SPN;
    • care home precedence, a disabled child with a parent and a private medical facility;
    • two people with a care home input on one;
    • couples, deeming, and SNAP, HUD and household benefit wiring;
    • half-counted SSP in rebate income.
  • After merging main: all Pennsylvania cases (SSP and tax) and the state property tax credit tests pass locally, and the aggregate list integrity and program registry tests pass (677 passed, 10 skipped).
  • ruff format and git diff --check.
  • Changelog fragment in changelog.d/.

axiom: 55 Pa. Code §§ 299.21, 299.36, 299.37; POMS SI 01415.058 K; LTC Handbook 450.243 TheAxiomFoundation/rulespec-us#1783 queued

hua7450 and others added 3 commits October 12, 2026 14:28
…ests

- Accept reported SSI receipt for the $22.10 Supplement for Personal Needs
- Document that the personal care home couple rate applies only in the move month
- Clarify the unused Medicaid-institution couple value; cite Ch. 299 sections and LTC Handbook 450.243
- Registry placement and comments, SNAP reference title, programs.yaml note
- Federal-minimum, care-couple, SPN and separate-claim cases; whole-dollar boundary incomes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@hua7450
hua7450 marked this pull request as ready for review October 13, 2026 08:14
@hua7450
hua7450 requested a review from DTrim99 October 13, 2026 20:37
@DTrim99

DTrim99 commented Oct 13, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Add Pennsylvania state supplementation for 2026

PR #10167 (author: hua7450, head 5b27aceb40, merge-base 2e9eea7e6e). 15 files (+665/−4), 3 commits.

Summary

The PR adds Pennsylvania's State Supplementary Payment (SSP):

  • Parameters, all dated 2026-01-01:
    • gov.states.pa.dhs.ssp.amount.individual and .couple, broken down by pa_ssp_living_arrangement:

      Arrangement Individual Couple
      Independent living 22.10 33.30
      Household of another 25.53 38.44
      Domiciliary care 634.30 1,347.40
      Personal care home 639.30 1,357.40
      Medicaid institution 22.10 0 (unused)
    • care_age_threshold of 18.

    • A new federal gov.ssa.ssi.state_supplement.minimum_payment of $1.

  • Variables:
    • pa_ssp_living_arrangement (Person, MONTH). Its formula maps the federal living arrangement; domiciliary and personal care homes are input-only.
    • pa_ssp (Person, MONTH).
    • A shared helper, variables/gov/ssa/ssi/_ssi_state_supplement.py. It handles the income reduction, couple and spouse-deeming rules. For the SSA-administered care-home rows it also applies SSA rounding and the $1 minimum.
  • Aggregates and registry:
    • household_state_benefits (all four year blocks), spm_unit_benefits, SNAP unearned income and HUD unearned income.
    • A programs.yaml entry (partial, verified_years: "2026").
  • Tests: 24 YAML cases, 17 in pa_ssp.yaml and 7 in integration.yaml.

The 2026 policy content is right:

  • Amounts. All eight living-arrangement rates match 55 Pa. Code § 299.37 (state-administered rows) and POMS SI 01415.058 K.2 (SSA-administered rows). They also match PA's MA Eligibility Handbook 387 Appendix A 2026 totals. The $22.10 Supplement for Personal Needs (SPN) matches LTC Handbook 450.243.
  • Who administers what. Pennsylvania administers the independent and household-of-another rows; SSA administers the care-home rows (§ 299.1(c)). The code follows that split.
  • Rules the code follows correctly:
    • The SSP-only dollar-for-dollar reduction (§ 299.21(b)(1), § 299.36(a)(2)(iv)).
    • The age-18 floor for care homes (POMS K.1).
    • The $1 minimum (20 CFR 416.2020(c)).
    • The deeming computation (SI 01320.430 D).
  • Tests and CI. All 24 expectations check by hand and pass at the head. CI is green and the branch merges cleanly with main.

Four should-fix items remain:

  1. The axiom: needed line isn't valid for a staff PR.
  2. Three parameter descriptions don't follow the house template.
  3. Pennsylvania's own Property Tax/Rent Rebate counts half of the SSP, but pa_ssp isn't wired into that income definition.
  4. The first reference on both rate files (§ 299.37) prints the pre-increase care-home amounts.

Critical (must fix)

None.

Should address

1. axiom: needed isn't valid here, and this PR adds a program.

  • Where: the last line of the PR body, axiom: needed.
  • The rule. main's CLAUDE.md, "Axiom Parity (required for policy changes)", lists the accepted forms: encoded-correct, encoded, queued or n/a: <reason>. needed is reserved for external contributors who can't complete the Axiom work, and the author is PolicyEngine staff.
    • CONTRIBUTING.md#axiom-parity: "That covers a new program, a parameter or threshold update, an eligibility rule and a bug fix." This PR adds a new program, and none of the n/a grounds applies.
  • Nothing to point to yet.
    • rulespec-us main has no Pennsylvania SSP module. us-pa/ holds only policies/cms/ (CHIP and Medicaid levels) and policies/income_tax/.
    • Issue searches for "Pennsylvania supplementary", "Pennsylvania SSP", "299.37" and "Chapter 299" find nothing. The only open Pennsylvania pe-parity issue is Increase default age from 30 to 40 #1737 (CCW).
  • Precedent:
  • Fix: file a dispatch-ready pe-parity issue on the Add AMT parameters for 2020-2023 #1467 / DC CDCC #1708 model, then add a line such as axiom: 55 Pa. Code §§ 299.21, 299.36, 299.37; POMS SI 01415.058 K TheAxiomFoundation/rulespec-us#NNNN queued. The issue needs:
    • Module paths, for example:

      • us-pa/regulations/pa-code/title-55/chapter-299/299-37-optional-ssp-levels.yaml, plus the § 299.21 and § 299.36 rules
      • us-pa/policies/ssa/poms/si-01415-058/2026/pa-ssp-individual-state-supplement-levels.yaml and the couple counterpart, mirroring the existing DC and DE modules
      • us-pa/policies/dhs/ltc-handbook/450-243-supplement-for-personal-needs.yaml
    • Verbatim law, quoted under Verified correct:

      • § 299.21(a), (b)(1) and (b)(3)
      • § 299.36(a)(2)(iv)(A)–(B)
      • the § 299.37 independent and household-of-another rows
      • POMS K.1 codes G and H, the K.2.a/K.2.b G and H rows, and the K.2 NOTE
      • the LTC 450.243 SPN sentence
    • Required outputs (Person, monthly):

      • the rate table by arrangement
      • a Judgment: SSI-eligible except for income, AND countable income below FBR + SSP, AND not in a Title XIX facility for the optional SSP, AND age 18 or older for the care rows
      • Money: max(0, rate − max(0, countable − FBR))
      • the $22.10 SPN for SSI recipients in a Medicaid facility
      • the $1 floor for SSA-administered rows
    • Companion tests from the same sources (MA Handbook 387 Appendix A 2026 totals and POMS K.2):

      Case SSP Total payment
      Independent individual, no income 22.10 1,016.10
      Household-of-another individual 25.53 688.20
      Domiciliary-care individual 634.30 1,628.30
      Personal-care-home couple in the move month 1,357.40 2,848.40
      SSI recipient in a Medicaid institution 22.10 52.10
      SSP-only with $1,010 countable income 6.10 —

2. Three parameter descriptions don't follow the house template.

  • Where:
    • parameters/gov/states/pa/dhs/ssp/amount/individual.yaml:1: "Pennsylvania provides these monthly state supplementary payment rates for an eligible individual."
    • .../amount/couple.yaml:1: the same, "for an eligible couple".
    • .../care_age_threshold.yaml:1: "Pennsylvania requires this minimum age for federally administered domiciliary or personal care supplementation."
  • The template: "one sentence, spell the program out fully (no acronyms), [State] [verb] ... under the [Full Program Name] program."
    • None of the three has the "under the ... program" clause.
    • The sibling SSP parameters on main all do. For example, ga/dhs/ssp/amount.yaml: "Georgia provides this amount as the monthly supplement under the State Supplementary Payment program." And in/fssa/ssp (age): "Indiana sets this threshold as the minimum age for eligibility under the State Supplementary Payment program."
  • Fix:
    • individual.yaml: "Pennsylvania provides these amounts as the monthly individual payment under the State Supplementary Payment program."
    • couple.yaml: the same with "couple".
    • care_age_threshold.yaml: "Pennsylvania sets this age as the minimum for the domiciliary care and personal care home supplements under the State Supplementary Payment program."

3. Pennsylvania's Property Tax/Rent Rebate counts half of the SSP, but pa_ssp isn't in its income definition.

  • Where: variables/gov/states/pa/tax/property/property_tax_or_rent_rebate/pa_property_tax_or_rent_rebate_income.py:30-40. half_counted_benefits halves social_security, ssi and railroad_benefits only.
  • The source. 2025 PA-1000 instructions:
    • Line 4 (PDF p. 7): "Include one-half of your 2025 Social Security Benefits as shown in Box 5 of your benefit statement SSA-1099, one-half of your 2025 SSI, one-half of your 2025 Social Security Disability Income, and one-half of your 2025 State Supplementary Payment."
    • "State Supplementary Payment recipients" (PDF p. 3): "SSP is still considered reportable income. As with other Social Security income, only half of the SSP income needs to be included on Line 4 of the Property Tax/Rent Rebate claim form."
  • Why it is a finding now. Before this PR the SSP wasn't modeled, so nothing could be counted. Now that pa_ssp exists, the program that most directly targets PA's SSP population leaves it out. The checklist treats this as missing wiring, not double counting.
  • Probe at the head (2026): an aged single renter with $6,000 of rent and $4,900 of taxable pension.
    • SSI is 7,268 (12,168 − 4,900) and pa_ssp is 265.20.
    • PTRR income is 8,534 (4,900 + 7,268 / 2), so the rebate is $1,000.
    • Counting half the SSP gives 8,534 + 132.60 = 8,666.60. That is above the $8,551 bracket edge, so the rebate is $770 (pinned-income probe). The model overstates this household's rebate by $230.
  • Fix:
    • Add "pa_ssp" to the half_counted_benefits list.
    • Update benefit_income_rate.yaml's description to name the State Supplementary Payment.
    • Add the case above to the PTRR tests: income 8,666.60, rebate 770.

4. The first reference on both rate files prints the old care-home amounts.

  • Where: amount/individual.yaml:10-11 and amount/couple.yaml:10-11 list "55 Pa. Code § 299.37, Optional SSP levels" first.
  • What the code says. § 299.37 reads:
    • "Residing in a Domiciliary Care Home $434.30 $947.40"
    • "Residing in a Personal Care Home $439.30 $957.40"
    • "Source: amended April 13, 2012, effective July 1, 2011"
  • The conflict. The PR's DOMICILIARY_CARE / PERSONAL_CARE values are 634.30 / 1,347.40 and 639.30 / 1,357.40. They are right for 2026, per POMS SI 01415.058 K.2.a: "G | All | 994.00 | 634.30 | 1628.30" and "H | All | 994.00 | 639.30 | 1633.30"; and K.2.b, "1347.40" and "1357.40".
    • So a reader who opens the first reference sees amounts $200 (individual) and $400 (couple) lower, with nothing explaining the gap.
    • The rows are still corroborated by the second reference, so this is not a missing reference.
  • A better source. PA's own MA Eligibility Handbook 387 Appendix A, "Effective January 1, 2026", shows every 2026 row:
    • Independent: $1,016.10 / $1,524.30 = FBR + 22.10 / 33.30
    • Another individual's home: $688.20 / $1,032.44 = 662.67 + 25.53 / 994 + 38.44
    • Domiciliary care: $1,628.30 / $2,838.40
    • Personal care boarding home: $1,633.30 / $2,848.40
    • MA institution: $52.10 / $104.20 = $30 + $22.10 per person
  • Fix:
    • Add the Handbook 387 Appendix A reference and point the POMS hrefs at #k2a (individual) and #k2b (couple).
    • Add a one-line YAML comment by the care rows: § 299.37 still prints the pre-increase $434.30 / $439.30.
    • Alternatively, close Suggestion 1 by dating the older amounts. § 299.37 then corroborates the values it actually shows.

Suggestions

  1. Care-home and SPN amounts before 2023 (deferral documented in the PR body and Pennsylvania SSP 2017, 2018, 2019 #8568).
    • The leak. All values are dated only 2026-01-01, so they carry back to 2015. The probe at the head gives pa_ssp of 634.30 (domiciliary care) and 639.30 (personal care) for 2018-01, 2021-01 and 2022-01.
    • What SSA paid. The POMS January charts show:
      • SI 01415.050 (Jan 2018) through SI 01415.054 (Jan 2022): G $434.30 / $947.40 and H $439.30 / $957.40
      • SI 01415.055 (Jan 2023) onward: $634.30 / $1,347.40 and $639.30 / $1,357.40
    • The Handbook totals agree. The 2022 domiciliary total is $1,275.30 (841 + 434.30); the 2023 total is $1,548.30 (914 + 634.30).
    • Size of the error. The model overstates 2015–2022 care-home payments by $200 per individual and $400 per couple each month. The exact 2022 effective date isn't in the January charts; it needs the Pennsylvania authority, likely the 2022–23 budget.
    • The SPN. Appendix A's MA-institution totals are $45 for 2020–2024, which implies $30 + $15. The LTC Handbook's $22.10 text is "Updated December 23, 2024". The 2025 total of $60 is internally inconsistent, so confirm the SPN history before backdating it.
    • Unchanged rows. The independent and household-of-another rows haven't changed since the July 1, 2011 amendment.
    • Fix: widen Pennsylvania SSP 2017, 2018, 2019 #8568 (titled "Pennsylvania SSP 2017, 2018, 2019") to 2015–2025, including the care-home step and the SPN history.
  2. The Texas rebate reform's copy of spm_unit_benefits now omits pa_ssp.
    • Where: reforms/states/tx/rebate/tx_rebate.py:45-127 redefines spm_unit_benefits nationwide with a hard-coded list. It lacks pa_ssp, and it already lacks ca_state_supplement.
    • Probe at the head: a PA aged SSI-only single in 2027 has spm_unit_benefits of 14,823.46 at baseline and 14,558.26 under the reform, a drop of exactly the $265.20 pa_ssp. spm_unit_net_income falls by the same amount; household_net_income is unchanged.
    • Fix: insert "pa_ssp", # Pennsylvania benefits after "fl_oss", at line 65, as spm_unit_benefits.py does. Add ca_state_supplement while there, consistent with Add Wyoming state supplementation for 2026 #10174.
  3. Mixed-arrangement couple in the move month (integration Case 6, integration.yaml:128-159).
    • The PR pins [347.675, 347.68], the average of the two half couple rates. That follows SSA's national rule in SI 02005.030 G.1: "For multi-category or multi-living arrangement couples living together, average their individual OSS payment (unless the State provides specific couples multi-category levels)."
    • Pennsylvania's regional instruction says otherwise. SI PHI01415.010, Appendix I Chart 35, note 2: "The state supplement amount to the member(s) who move(s) into the PCBH is 1/2 of the couple's rate for OS-H for the month of move. The state supplement amount for the member who remains in a household situation is 1/2 of the couple's rate for OS-A or OS-B for the month of move."
      • So the split should be 16.65 (state-paid) and 678.70 (SSA-paid).
      • The couple total agrees to within half a cent (695.355 against 695.35), so household aggregates are right. The PR documents this as a limitation.
    • Fix (optional): give the helper a per-member split option, standard = couple_rate / 2 for joint couples, and pin [16.65, 678.70].
    • Default for personal-care couples. SSA treats a personal-care couple as individuals from the month after the move, so the usual month needs ssi_claim_is_joint: false. Consider saying so in pa_ssp.py's documentation as well as in the Enum's.
  4. Pin the remaining readings with tests. The default branch of pa_ssp_living_arrangement covers more than independent living.
    • Children and private-pay facilities. SSA's State Assistance Programs for SSI Recipients, January 2011, Pennsylvania defines "Living alone" to include "all recipients in private medical facilities ... where Medicaid is not paying more than 50 percent of the cost of care ... and all other individuals and couples residing in a federal Code A or C living arrangement". It also says "Blind and disabled children are eligible for optional supplementation."
    • Probes at the head:
      • A disabled 10-year-old living with a parent gets pa_ssp 22.10.
      • A household-of-another SSP-only person with $700 of Social Security gets 25.53 − (680 − 662.67) = 8.1967. That is an unrounded state-administered amount.
    • Fix: add these two cases. Assert pa_ssp_living_arrangement directly for the medical, household-of-another, child and private-pay paths.
  5. Polish.
    • Blank lines. The PR adds a stray blank line before metadata: in household_state_benefits.yaml (line 412) and in hud/annual_income/sources/unearned.yaml (line 33). Neither relates to Pennsylvania.
    • Case count. The PR body says "17 source-based YAML cases"; the PR has 24 (17 + 7).
    • Missing citation. pa_ssp.py:14-19 cites § 299.1 and § 299.36 but not § 299.21. That section holds the excess-income exception and the Title XIX exclusion, the two rules the formula leans on most.

Verified correct

  • Administration split. 55 Pa. Code § 299.1(c):

    • "(2) The SSA administers SSPs for an individual or couple that is ... (ii) Living in a DCH. (iii) Living in a licensed PCH."
    • "(3) The Commonwealth administers SSPs for an eligible individual or couple that does not qualify for an SSP under paragraph (2) and is ... (i) Living independently. (ii) Living in the household of another and receiving in-kind support and maintenance."
    • The code passes federal_payment_rules=care, so SSA rounding and the $1 floor apply only to the care rows. POMS K.1 code Z ("recipients in FLA A or FLA B who receive a State-administered supplement") matches.
  • Eligibility and the income reduction. § 299.21:

    • "(a) ... to be eligible for an optional SSP, the individual or couple shall be eligible for SSI."
    • "(b)(1) ... If the individual or couple meets all SSI requirements other than income, and if countable income does not exceed the combined FBR and applicable SSP, the individual or couple is eligible."
    • "(b)(3) ... living in a medical care facility where ... more than 50% of the cost of care is paid under Title XIX ... is ineligible for an optional SSP."
    • § 299.36(a)(2)(iv)(B): "Countable income is adjusted dollar for dollar against the appropriate SSP amount in § 299.37, plus the FBR."
    • SSA 2011: "Countable income is deducted first from the federal payment. Any income that remains to be counted after the federal payment has been reduced to zero is then deducted from the state supplementary payment."
    • The helper's rate − max(countable − FBR, 0) and the non-income is_ssi_eligible gate (categories, resources, immigration) match all three.
  • The household-of-another payment level uses the reduced FBR. POMS K.2.a row "B | Z | 662.67", and Handbook 2026 "$688.20" = 662.67 + 25.53. That supports using ssi_amount_if_eligible (one-third reduction) as the FBR.

  • Care homes:

    • Age floor. POMS K.1: code G and code H "Apply OS code ... to adult persons (age 18 and over) certified by the State".
    • Domiciliary couples keep the couple rate. Chart 35 note 2: "Couples can reside in a noninstitutional care arrangement such as DOMCARE. The couple is considered to be living in their own household."
    • Personal-care couples. The K.2 NOTE: "Apply the payment level for couples in Pennsylvania's PCBHs only in the month they move into the PCBH. You must regard them as individual recipients in the month following the month of move." That supports integration Cases 4 and 5.
  • Medicaid institutions. LTC Handbook 450.243 ("Updated December 23, 2024"): "If the SSI recipient has no other income or has countable income less than the current SSI personal needs allowance, the individual can get the SSI payment of $30.00 plus a state-issued Supplement for Personal Needs (SPN) of $22.10".

    • Gating on ssi > 0 | receives_ssi, per person and without SSA rounding, matches that text. It also matches Appendix A's 2026 couple total of $104.20 ($60 + 2 × 22.10).
    • Appendix A's "includes" note still prints "$15.00", but the 2026 totals ($52.10 / $104.20) and LTC 450.243 both give $22.10.
    • Probe: a couple both in a Medicaid facility gets SSI 30 each and pa_ssp 22.10 each.
  • Federal minimum and rounding.

    • 20 CFR 416.2020(c): "The Federal Government will not administer optional State supplementary payments in amounts less than $1 per month. Hence, optional supplementary payment amounts of less than $1 will be raised to a dollar."
    • SI 02001.005 A.2 applies the floor to the federal + SSP total. In Pennsylvania the SSP is reduced only after SSI reaches zero, so a sub-$1 SSP always stands alone and the two rules give the same result.
    • SI 02001.010: "Rounding applies only if there is a third digit ... Do not round up the fourth digit" and "Round Federal and State benefits separately". That matches ceil(floor(x × 1000) / 10) / 100.
  • Spouse deeming. SI 01320.430 D works in three steps:

    • 1: individual computation
    • 2.c–d: the couple OSS ("or the individual State supplement, if greater") minus excess over the couple FBR
    • 3.b: "The State supplement amount is the lesser of" the two

    The helper's own_payment, deemed_payment and min_ mirror those steps. Integration Case 7 pins them: min(22.10, 33.30) = 22.10.

  • Kept out of SSI income. § 299.1(c)(1): "The SSP is not considered income by the SSA in determining eligibility for SSI." pa_ssp isn't in the SSI income sources, so there is no circularity.

  • Code:

  • Wiring:

    • pa_ssp is in all four household_state_benefits year blocks (2023–2026), spm_unit_benefits, SNAP unearned (7 CFR 273.9(b)(2) "other assistance programs based on need") and HUD unearned, which is the batch convention.
    • The SNAP reference consolidation matches main's one-entry-per-document rule.
  • Hand checks: all 24 expectations. The 2026 FBR is $994 for an individual and $1,491 for a couple.

    • Unit Case 1: 22.10.
    • Case 2: 25.53.
    • Cases 3 and 4: 634.30 and 639.30.
    • Case 5: age 17 in a personal care home gives 0.
    • Case 6: SPN 22.10.
    • Case 7: 12,360 / 12 = 1,030; 1,030 − 20 = 1,010; 1,010 − 994 = 16; so 22.10 − 16 = 6.10.
    • Case 8: 1,036 − 20 = 1,016; the excess is 22, so 0.10 (state-administered, no floor).
    • Case 9: 1,037 − 20 = 1,017; the excess of 23 exceeds 22.10, so 0.
    • Case 10: resources of 2,001 give 0 (§ 299.36(a)(2)(iii)).
    • Cases 11 and 12: age 30 gives 0; Ohio gives 0.
    • Case 13: no take-up gives 0 (§ 299.36(b)(2)(iii)).
    • Case 14: 600 / 12 = 50, so 30 countable; SSI is 0 and the SPN is 0.
    • Case 15: 1,653 − 20 = 1,633; 639.30 − 639 = 0.30, raised to 1.
    • Case 16: 15,080 / 12 = 1,256.67; (1,256.67 − 85) / 2 = 585.83; SSI is 408.17 and pa_ssp is 22.10.
    • Case 17: reported receipt gives 22.10.
    • Integration Cases 1 and 2: 33.30 / 2 = 16.65 and 38.44 / 2 = 19.22.
    • Integration Case 3: 12 × 22.10 = 265.20; SNAP and HUD unearned income are 11,928 + 265.20 = 12,193.20.
    • Integration Case 4: 1,347.40 / 2 = 673.70.
    • Integration Case 5: 994 and 639.30 each.
    • Integration Case 6: documented averaging (Suggestion 3).
    • Integration Case 7:
      • own countable is 700 − 20 = 680
      • the spouse's 1,256.67 exceeds 497, so deeming applies
      • deemed income is (1,256.67 − 65) / 2 = 595.83
      • SSI is 1,491 − 1,275.83 = 215.17, and pa_ssp is 22.10
  • Changelog: changelog.d/pa-ssp-2026.added.md is top-level, typed added, and accurate.

  • Registry:

    • The programs.yaml entry sits under ssi_state_supplement.state_implementations with the WA/MO fields.
    • partial fits the unmodeled mandatory and essential-person supplements. parameter_prefix resolves.

Batch checks

  1. Axiom line: invalid (needed). No rulespec-us module or issue exists for PA SSP (Should 1).
  2. Parameter descriptions: three PA files are off-template (Should 2). The federal minimum_payment.yaml is acceptable.
  3. Backdating: the care-home rows leak $634.30 / $639.30 (and $1,347.40 / $1,357.40) back to 2015–2022, where POMS shows $434.30 / $439.30 ($947.40 / $957.40). The SPN was likely $15 before 2025. It is a documented deferral (Pennsylvania SSP 2017, 2018, 2019 #8568), so Suggestion 1.
  4. tx_rebate.py copy: it omits pa_ssp; the probe shows spm_unit_benefits down $265.20 (Suggestion 2).
  5. Aggregate wiring:
    • spm_unit_benefits, all four household_state_benefits blocks, HUD, SNAP and programs.yaml are present.
    • There is no double count with ssi.
    • Pennsylvania's own PTRR income omits the SSP the PA-1000 counts (Should 3).
  6. Income attribution:
    • It uses SSA countable income: couples combined and halved, SSP-only reduction, and SI 01320.430 deeming pinned by integration Case 7.
    • The private-pay facility and child (FLA C) paths follow SSA's 2011 definitions but aren't pinned (Suggestion 4).
    • The mixed-couple split follows SI 02005.030 G.1, not PA's PHI note (Suggestion 3).
  7. Sibling conflicts:
  8. CI: all 26 checks pass on head 5b27aceb40, with no failing job.
  9. State law first:
    • All 2026 rows match § 299.37, POMS SI 01415.058 K.2, MA Handbook 387 Appendix A and LTC 450.243.
    • The administration split, the effective date of January 2026 and the SSP-only rule match § 299.1, § 299.21 and § 299.36.
    • All 24 expectations check by hand.

Axiom line assessment

Invalid (Should 1).

CI status

All 26 checks pass (gh pr checks 10167). Three "skipping" entries belong to the superseded run 38358609883.

  • The run. Run 38367925733 (pull_request, 2026-10-13 08:14 UTC) on head 5b27aceb40, conclusion success.
  • Main since then. main has since changed only unemployment_compensation → total_unemployment_compensation in the shared income lists and tx_rebate.py, plus three programs.yaml lines. None of that affects this PR's logic.
  • Local run. The two new test files at the head with policyengine-core 3.33.2: 24 passed.
  • Partner tests. The PR touches no partner test files, and the Household API Partners job passes.

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.

All 2026 amounts check out against 55 Pa. Code § 299.37, POMS SI 01415.058 K.2 and MA Handbook 387 App. A, and so do the administration split, SSP-only reduction, deeming and all 24 YAML expectations. Four should items (see the comment above): (1) 'axiom: needed' isn't valid for staff and rulespec-us has no PA SSP module, so file a pe-parity issue and add a queued line; (2) three parameter descriptions are off the template; (3) PA property tax/rent rebate income omits half of pa_ssp, which PA-1000 Line 4 requires (an aged renter with a $4,900 pension gets $1,000 instead of $770); (4) the § 299.37 reference prints the old care-home rates, so cite MA Handbook 387 App. A and the POMS anchors.

hua7450 and others added 2 commits October 15, 2026 17:30
…erences

- Count half of the Pennsylvania SSP in Property Tax/Rent Rebate income
  (PA-1000 Line 4).
- Enter certified care homes through a new pa_ssp_care_home input, so the
  living arrangement formula no longer resets other household members.
- Cite POMS K.1/K.2.a/K.2.b and Handbook 387 Appendix A, note that § 299.37
  prints the pre-increase care home rows, and add § 299.21.
- Update descriptions and add living arrangement, child, private facility
  and PTRR tests.

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

hua7450 commented Oct 15, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks, David. The fixes are in 21a6021, followed by a merge of main (8e3f0e8). The shared helper is unchanged.

Should 1 (Axiom line): filed TheAxiomFoundation/rulespec-us#1783 (pe-parity). It has:

  • your module paths;
  • the verbatim Chapter 299, POMS K, Handbook and PA-1000 text;
  • the required outputs;
  • your six companion cases plus three more, mapped to the PE cases.

The source conflicts are in a separate comment on that issue, and the axiom line now points to it.

Should 2 (descriptions): the three files use your sentences.

Should 3 (Property Tax/Rent Rebate): pa_ssp is now in the half-counted list (PA-1000 Line 4 and the SSP note on p. 3). The benefit_income_rate description names the SSP.

  • I didn't use your household as the test. An independent recipient's SSP moves rebate income by at most $132.60 a year, so the case only works with a pension between $4,669 and $4,933. And § 1304(a)(4) indexes the brackets to CPI-U, so the $8,551 edge will move.
  • The new rebate Case 7 is a personal care home renter with $800 a month of Social Security: income 9,919.80 and rebate 770, about $1,370 above the edge.
  • Income Case 10 pins the half count on its own: 7,671.60 → 3,835.80.
  • The existing PTRR tests pin ssi: 0. Without a matching pin, pa_ssp still computed 265.20 there, so they now also pin pa_ssp: 0. No expected value changed.

Should 4 (references):

  • Both rate files cite POMS K.2.a (#k2a) or K.2.b (#k2b) and Handbook 387 Appendix A.
  • A comment on the care rows says § 299.37 still prints $434.30 / $439.30. Another notes that Appendix A's note prints $15.00 while its $52.10 total is $30 + $22.10.
  • care_age_threshold cites K.1 (#k1), and pa_ssp.py cites § 299.21.

Suggestion 1 (history): out of scope, and I didn't widen #8568.

Suggestion 2 (Texas rebate copy): #10226 tracks one spm_unit_benefits list that reforms append to, so this PR leaves tx_rebate.py unchanged.

Suggestion 3 (mixed couple in the move month): kept as a documented limitation.

  • A Pennsylvania-only split needs either a helper edit mirrored in eight PRs, or two helper runs keyed to the couple's higher and lower rates, which depends on the helper's internals.
  • The case affects only the move month.
  • The documentation now says the couple total matches unless income reduces one spouse's half to zero. With a couple excess over $33.30, the totals differ.
  • It also says ssi_claim_is_joint is yearly.

Suggestion 4 (readings):

  • New pa_ssp_living_arrangement.yaml (10 cases) pins:
    • own household, household of another, a Medicaid facility, a private facility (independent) and a child with a parent;
    • each care home input;
    • a nonresident;
    • the precedence: Medicaid facility over a care home, and a care home over the household of another.
  • pa_ssp.yaml adds a disabled 10-year-old with a working parent ([0, 22.10]) and a private medical facility (22.10). It also asserts SSI on Cases 2 (662.67) and 6 (30).
  • I didn't add the $700 household-of-another case. Its SSP-only band is $25.53 wide, and we avoid incomes set inside a narrow band. Case 7 already pins the SSP-only reduction, and Case 2's SSI pins the reduced FBR.

Suggestion 5 (polish):

  • I kept the blank lines before metadata:; they come from our formatting pass and are harmless.
  • The body's case count is updated, § 299.21 is cited, and integration Case 2's name is fixed.

One more fix I found: pa_ssp_living_arrangement was both a formula and the only way to enter a care home, with a default of NONE.

  • Entering PERSONAL_CARE for one person set everyone else in the simulation to NONE. They got 0 in place of 22.10, 25.53 or the SPN, and integration Case 6 carried an INDEPENDENT workaround.
  • Care homes now come from a new pa_ssp_care_home input, the same pattern as al_ssp_care_setting on main, and the arrangement is formula-only.
  • pa_ssp.yaml Case 20 pins two people with an input on one: [639.30, 22.10].
  • The changelog now mentions the rebate change.

On the merged head, these pass locally: all Pennsylvania cases (SSP and tax), the state property tax credit tests, and the aggregate list integrity and program registry tests (677 passed, 10 skipped).

@hua7450
hua7450 requested a review from DTrim99 October 15, 2026 21:34
@DTrim99

DTrim99 commented Oct 15, 2026

Copy link
Copy Markdown
Collaborator

PR Review (round 2): Add Pennsylvania state supplementation for 2026

PR #10167 (author: hua7450). This round reviews head 8e3f0e899d; round 1 reviewed 5b27aceb40. Two commits landed in between:

  • 21a60211e6, the review-response commit (16 files, +365/−41). It does the following:
    • counts half of pa_ssp in Pennsylvania Property Tax/Rent Rebate (PTRR) income (PA-1000 Line 4);
    • moves care homes to a new input, pa_ssp_care_home, so pa_ssp_living_arrangement is formula-only;
    • rewrites the three descriptions and the references, and adds YAML comments on the care rows and the SPN;
    • adds a 10-case pa_ssp_living_arrangement.yaml, three pa_ssp.yaml cases and two PTRR cases, and pins pa_ssp: 0 beside ssi: 0 in the existing PTRR cases.
  • A merge of main at 9560e7f183. Its tree (318a620202) is identical to an automatic merge, so it has no hand edits. The shared helper _ssi_state_supplement.py is unchanged.

Summary

Ziming fixed all four round-1 should items. The axiom line now points to rulespec-us#1783, which is open, labelled pe-parity, dispatch-ready and consistent with the head apart from one stale case count. He acted on every suggestion: he fixed most of them, deferred the Texas rebate copy to #10226, and declined the history, the move-month split and two small points with reasons.

He also fixed a bug round 1 missed: a care-home input on one person reset everyone else's arrangement to NONE. The new pa_ssp_care_home input matches 55 Pa. Code §§ 299.1, 299.2 and 299.22, POMS SI 01415.058 K and SI PHI01415.010 G.3. The New Hampshire bug pattern doesn't occur: mixed-state simulations match single-state ones. All 64 PR cases in the touched files pass locally. Only small suggestions remain. CI is still queued: 3 pass, 14 pending and none failed.

Round-1 findings status

Finding Status Evidence
Should 1: axiom: needed isn't valid for a staff PR that adds a program Fixed The PR body now ends axiom: 55 Pa. Code §§ 299.21, 299.36, 299.37; POMS SI 01415.058 K; LTC Handbook 450.243 TheAxiomFoundation/rulespec-us#1783 queued. #1783 is open, labelled pe-parity, dispatch-ready and consistent with the head. See the Axiom line assessment; Suggestion 1 has one correction.
Should 2: three parameter descriptions are off-template Fixed All three use round 1's sentences, ending "under the State Supplementary Payment program": amount/individual.yaml, amount/couple.yaml and care_age_threshold.yaml.
Should 3: PTRR income left out half of the SSP Fixed The list. pa_property_tax_or_rent_rebate_income.py:30-38 adds "pa_ssp" to the half-counted benefits, with a comment that the PA-1000 doesn't say whether the Supplement for Personal Needs counts as SSP. The PR body repeats that. The parameter. benefit_income_rate.yaml names the State Supplementary Payment, and its reference cites PDF pages 3 and 7 (#page 3,7, href #page=3). The tests. Rebate Case 7 (personal care home renter: income 9,919.80, rebate 770) and income Case 10 (7,671.60 → 3,835.80). Round 1's household at the head: income 4,900 + (7,268 + 265.20) / 2 = 8,666.60, so the rebate is 770 where it was 1,000. No double count. ssi adds only ssi_if_takes_up, the federal payment. pa_ssp isn't in AGI, the Line 11 list or any other PTRR term. The existing SSI handling. The PTRR cases pin ssi: 0 but pa_ssp reads SSI eligibility, not ssi, so they now also pin pa_ssp: 0. The diff adds only those pins; no expected value changed.
Should 4: the first reference on both rate files prints the old care-home amounts Fixed The references. The POMS hrefs point at #k2a (individual) and #k2b (couple), and care_age_threshold.yaml at #k1. All three anchors exist on the live POMS page. Both rate files add MA Eligibility Handbook 387 Appendix A, whose "Effective January 1, 2026" block I checked: $1,016.10 / $1,524.30, $688.20 / $1,032.44, $1,628.30 / $2,838.40, $1,633.30 / $2,848.40 and $52.10 / $104.20. The comments. The care-row comments match § 299.37 as printed ($434.30 / $439.30 and $947.40 / $957.40). The SPN comment matches Appendix A's NOTE ("MA Institution
Suggestion 1: care-home and SPN amounts before 2023 Declined with a reason (accepted) History is out of scope, and #8568 (open) isn't widened. The body says "Earlier years use parameter backfilling and are unverified historical estimates; no historical coverage is claimed", so this is a documented deferral, as in the siblings. #1783's first comment now dates the care step to between January 2022 ($1,275.30 = 841 + 434.30) and January 2023 ($1,548.30 = 914 + 634.30). The leak is unchanged for 2015–2022. The 2023–2025 aggregate blocks and the new PTRR wiring, whose parameters start in 2025, get the right care rows (Appendix A 2025: $1,601.30 = 967 + 634.30).
Suggestion 2: the spm_unit_benefits copy in tx_rebate.py omits pa_ssp Declined with a reason (deferred to #10226) #10226 (open) proposes one shared list that reforms append to. At the head, tx_rebate.py still goes from "fl_oss" (line 65) to "ks_sspp" (line 66). This matches the sibling SSP PRs.
Suggestion 3: the mixed-arrangement couple in the move month Kept as a documented limitation (accepted) The documentation. pa_ssp_living_arrangement now says the couple total matches "unless income reduces one spouse's half to zero", and that ssi_claim_is_joint is yearly. Both are right. With per-spouse excess e, the helper pays 2 × max(347.675 − e, 0) and the Chart 35 split pays max(16.65 − e, 0) + max(678.70 − e, 0). They agree for e ≤ 16.65 and differ above it. ssi_claim_is_joint is a YEAR formula variable. Elsewhere. The body lists the limitation under "Not modeled", and #1783 conflict 2 tabulates both readings. Why it stays. The helper is shared by eight PRs; that is a reasonable cost argument for a move-month case.
Suggestion 4: pin the remaining readings Fixed except the $700 case (declined with a reason, accepted) The new file. pa_ssp_living_arrangement.yaml pins own household, household of another, a Medicaid facility, a private facility, a child with a parent, each care-home input, both precedence rules and a nonresident. pa_ssp.yaml. Case 18 (disabled child, [0, 22.10]) and Case 19 (private facility, 22.10), plus SSI on Cases 2 (662.67) and 6 (30). Declined. The household-of-another SSP-only case sits in a $25.53 band. pa_ssp.py:31-33 documents the 662.67 base, Case 2's SSI pins it, and #1783 lists the reading under "Interpretations" with "No PE case".
Suggestion 5: polish Fixed except the blank lines (declined, accepted) Done. The body's count (37 = 20 + 10 + 7, matching the collected cases); § 299.21 in pa_ssp.py; integration Case 2's name. Kept. The two blank lines before metadata: stay, a harmless formatting artifact accepted in every sibling.

New findings

Critical (must fix)

None.

Should address

None.

Suggestions

1. #1783 gives the wrong case count for pa_ssp_living_arrangement.yaml.

  • Where. Use branched logic to determine NYS itemization #1783's PolicyEngine-US summary lists "pa_ssp_living_arrangement.yaml (6)". The head has 10 cases, which the PR body states correctly.
  • Fix. Change it to (10). The companion-test mapping is otherwise right: every PolicyEngine case it names exists at the head under that name.

2. Cite § 299.22 on pa_ssp_care_home.

  • Where. pa_ssp_care_home.py:17-20 cites § 299.1 and POMS K.1.
  • The rule. 55 Pa. Code § 299.22 is the eligibility section for the care-home SSP:
    • (a): "to receive an optional SSP for DCS, an individual or couple residing in a DCH shall meet the requirements for receipt of DCS, and submit an application under 6 Pa. Code § 21.23";
    • (b): "to receive an optional SSP for PCS, an individual or couple residing in a licensed PCH shall ... submit an application for an SSP for PCS to the area agency on aging".
  • Why. That is the certification the input stands for. The Enum label, "Licensed personal care home, certified for the supplement", already says so.
  • Fix. Add the § 299.22 URL. Optionally, also cite SI PHI01415.010, which the documentation quotes for G.3.

3. Pennsylvania Child Care Works counts SSI but not the SSP (optional).

  • Where. ccw/income/countable_income/sources.yaml lists ssi, and its comment marks item H as not modeled.
  • The rule. 55 Pa. Code Chapter 3042 Appendix A, Part I ("Income inclusions"):
    • E: "Social Security benefits, Supplemental Security Income, survivors' benefits and permanent disability insurance payments made by the Social Security Administration";
    • H: "Public assistance benefits or retirement benefits."
  • Why it counts. SSA pays the care-home SSP with the SSI check, and the Department pays the independent and household-of-another SSP. So pa_ssp counts under E or H either way.
  • Why optional. The reach is small: a family with a parent or a disabled child on SSI, usually $22.10 a month. Round 1 didn't raise it. It fits here, in a follow-up or in Keep one spm_unit_benefits list so reforms that add a benefit stop dropping baseline programs #10226's shared-list work.

Verified

  • The New Hampshire bug pattern doesn't occur here.

    • The pattern. Add New Hampshire state supplementation for 2026 #10156 failed because a state-gated integer variable with a default of 0 indexed a parameter with no key 0.

    • This PR's Pennsylvania-gated variables:

      • pa_ssp_care_home (Enum input, default NONE) is only compared with == in pa_ssp_living_arrangement.
      • pa_ssp_living_arrangement (Enum, default NONE) is the breakdown key of both rate files. Core runs the formula for everyone and masks afterwards, so non-residents do look up NONE. Both files define NONE: 0.
      • pa_ssp is a float. care_age_threshold is read by attribute.
      • The new formula builds its result with select, so nothing writes into a cached array.
    • Reproduced at the head (policyengine-core 3.32.29; each person has their own units):

      Population (2026) Result
      A Pennsylvania personal-care resident with $800 a month of Social Security and $6,000 rent; an Ohio resident with the same inputs, including pa_ssp_care_home; a Pennsylvania aged renter with a $4,900 pension; a New Jersey resident with the same; a Pennsylvania domiciliary-care resident; and a Massachusetts single, all in one simulation pa_ssp_living_arrangement [PERSONAL_CARE, NONE, INDEPENDENT, NONE, DOMICILIARY_CARE, NONE]. pa_ssp [639.30, 0, 22.10, 0, 634.30, 0] for January and [7,671.60, 0, 265.20, 0, 7,611.60, 0] for the year. PTRR income [9,919.80, 0, 8,666.60, 0, 9,769.80, 0], rebate [770, 0, 770, 0, 0, 0]. spm_unit_benefits, household_state_benefits and household_net_income each equal their single-state simulation (0 mismatches over 6 people and 9 variables).
      The same pattern as two YAML cases: Pennsylvania, Ohio, Pennsylvania and New Jersey for 2026-01; Pennsylvania, Ohio and Pennsylvania for 2026 Both pass: pa_ssp [639.30, 0, 22.10, 0]; PTRR income [9,919.80, 0, 8,666.60], rebate [770, 0, 770], household_state_benefits [7,671.60, 0, 265.20].
    • A harness caveat. A multi-person YAML case needs explicit marital units. Without them the builder put all three people in one unit and returned couple amounts. The PR's multi-person cases all list them.

  • The new care-home input (pa_ssp_care_home, in place of a formula variable that doubled as the only input):

    • The bug it fixes. An input for one person used to set everyone else's arrangement to the type default, NONE. pa_ssp.yaml Case 20 now gives [639.30, 22.10] for two people with an input on one. Integration Case 6 no longer needs its INDEPENDENT workaround.
    • The categories match the law:
      • § 299.37: "Residing in a Domiciliary Care Home" and "Residing in a Personal Care Home".
      • Appendix A: "Domiciliary Care" and "Personal Care Boarding Home".
      • § 299.2: a DCH is "A premises certified by an area agency on aging".
      • § 299.1(c)(2): "(ii) Living in a DCH. (iii) Living in a licensed PCH."
      • POMS SI 01415.058 K.1: codes G and H "Apply ... to adult persons (age 18 and over) certified by the State to reside in non-medical residential care facilities."
    • Care homes before the household of another. SI PHI01415.010 G.3: "Individuals/couples certified by the state to be eligible for DOMCARE/PCBH payments are considered to be in Federal Living Arrangement 'A' for the duration of the time they reside in the approved facility." K.2.a also lists G and H under federal code A. That supports living-arrangement Case 8 and the documentation's warning not to set the household-of-another SSI inputs as well.
    • A Medicaid facility before a care home. Care homes are "non-medical" (K.1), and § 299.21(b)(3) bars the optional SSP in a Title XIX facility. That supports Case 7.
    • The age floor. It still applies after the input: Case 5 (age 17) gives 0.
    • The pattern. It is the same as al_ssp_care_setting on main (Enum input, defined_for the state, default NONE). Living-arrangement Case 10 gives NONE to an Ohio resident with the input.
  • The Oklahoma lesson (Add Oklahoma state supplementation for 2026 #10165) doesn't apply.

    • The commit doesn't touch wage or premium handling.
    • Pennsylvania's own rule imports SSI's countable income. § 299.2: "Countable income—As defined in 20 CFR 416.1104 (relating to income we count)". § 299.36(a)(2)(iv): "Meet income requirements under 20 CFR Part 416, Subpart K".
    • So pa_ssp correctly inherits ssi_countable_income, including main's Document disjoint health premium inputs and correct consumer treatment #10046 exclusion of salary-reduction premiums (POMS SI 00820.102).
    • The PTRR wage base (AGI plus above-the-line deductions) is unchanged by this PR.
  • The PA-1000 text. I checked both quotes in the 2025 instructions:

    • PDF p. 3: "SSP is still considered reportable income. As with other Social Security income, only half of the SSP income needs to be included on Line 4".
    • PDF p. 7, Line 4: "one-half of your 2025 State Supplementary Payment".
    • The Rent Certificate lists "Personal Care Home" and "Domiciliary Care" as residence types, so rebate Case 7's renter can claim.
  • The 2026 amounts, rechecked on the live sources.

    • POMS K.2.a ("effective January 1, 2026"): G "994.00 | 634.30 | 1628.30", H "994.00 | 639.30 | 1633.30", B/Z "662.67" and D/Z "30.00".
    • K.2.b: G "1491.00 | 1347.40 | 2838.40" and H "1491.00 | 1357.40 | 2848.40".
    • Appendix A 2026, as in the table above.
  • New and changed expectations, checked by hand. The 2026 FBRs are $994 for an individual and $1,491 for a couple.

    • pa_ssp.yaml:
      • Case 2: SSI 994 × 2 / 3 = 662.67; SSP 25.53 (Appendix A: 688.20 = 662.67 + 25.53).
      • Case 6: SSI 30 (K.2.a D/Z); SPN 22.10; total 52.10.
      • Case 18: the parent's 15,080 / 12 = 1,256.67, and (1,256.67 − 20 − 65) / 2 = 585.83 is below the 994 parental allocation, so nothing is deemed. SSI [0, 994]; pa_ssp [0, 22.10]. K.2.a gives federal code C an SSA supplement of 0.00 (code Z), so the supplement is state-paid. SSA's 2011 Pennsylvania description puts code C in the "Living alone" category, at the independent rate.
      • Case 19: a private facility is federal arrangement A, so SSI 994 and SSP 22.10.
      • Case 20: [639.30, 22.10].
    • integration.yaml:
      • Case 4: SSI 745.50 each; 1,347.40 / 2 = 673.70 each.
      • Case 5: separate claims, so 994 and 639.30 each.
      • Case 6: (16.65 + 678.70) / 2 = 347.675. SSA rounding gives floor(347,675) / 10 = 34,767.5, rounded up to 34,768 cents, so 347.68.
    • PTRR:
      • Rebate Case 7: SSI (994 − (800 − 20)) × 12 = 2,568 and SSP 639.30 × 12 = 7,671.60. Taxable Social Security and AGI are 0, so income is (9,600 + 2,568 + 7,671.60) / 2 = 9,919.80. That falls in the 8,551–16,040 bracket, so 770. The 20% rent cap (1,200) doesn't bind.
      • Income Case 10: 7,671.60 / 2 = 3,835.80.
    • pa_ssp_living_arrangement.yaml Cases 1–10: each enum matches the formula's order: Medicaid facility, then domiciliary, then personal care, then household of another, then independent. A nonresident gets NONE.
  • Wiring at the head:

    • all four household_state_benefits blocks (2023–2026);
    • spm_unit_benefits.py;
    • SNAP unearned income;
    • HUD unearned income;
    • PTRR income (new);
    • programs.yaml (partial, verified_years: "2026").

    pa_ssp is still not an SSI income source (§ 299.1(c)(1)). PTRR reads pa_ssp, and nothing in pa_ssp's inputs reads a tax variable, so there is no cycle. The tests and probes compute without a cycle error.

  • The main merge. It brought in Document disjoint health premium inputs and correct consumer treatment #10046, Project Medicaid LTC home equity limits with CMS's rounded CPI-U increase #10162 and Stop Rest after cancellation, run Contrib after Baseline at 11 jobs, and share YAML runners by memory #10231 (CI). No Pennsylvania case sets pre_tax_health_insurance_premiums.

  • Changelog. changelog.d/pa-ssp-2026.added.md now mentions the rebate change, and is still top-level and typed added.

  • Tests.

    • Locally (policyengine-core 3.32.29), 64 of 64 pass:
      • the three SSP files (20 + 7 + 10);
      • the three PTRR files (7 + 9 + 10);
      • the aggregate case (1).
    • My two two-state cases also pass.
    • test_aggregate_list_integrity.py and test_programs_registry.py: 677 passed and 10 skipped.
    • In CI: Quick Feedback hasn't started yet.
  • Partner tests. The PR touches none, and Household API Partners passes.

Axiom line assessment

Valid: axiom: 55 Pa. Code §§ 299.21, 299.36, 299.37; POMS SI 01415.058 K; LTC Handbook 450.243 TheAxiomFoundation/rulespec-us#1783 queued.

  • Issue state.
    • The PR author filed Use branched logic to determine NYS itemization #1783 on 2026-10-15. It is open, labelled pe-parity, and the only rulespec-us issue a "Pennsylvania supplementary" search finds.
    • rulespec-us main (d8511cca76) still has no module: us-pa/ holds only policies/cms and policies/income_tax. So queued is the right form.
  • Dispatch-ready on the Add AMT parameters for 2020-2023 #1467 model:
    • Module paths:
      • us-pa/regulations/pa-code/title-55/chapter-299/299-37-optional-ssp-levels.yaml, plus the § 299.1, § 299.21 and § 299.36 modules;
      • us-pa/policies/ssa/poms/si-01415-058/2026/pa-ssp-individual-state-supplement-levels.yaml and the couple file;
      • us-pa/policies/dhs/ltc-handbook/450-243-supplement-for-personal-needs.yaml;
      • the PA-1000 Line 4 cross-reference.
    • Corpus status. Each row names its corpus status: POMS SI 01415.058 and Appendix A are in the corpus, and Chapter 299, LTC 450.243 and the PA-1000 are "Needs ingest", which is the recorded blocker.
    • Verbatim law. I checked these quotes against the live sources:
      • § 299.1(c)(2)-(3);
      • § 299.21(a), (b)(1) and (b)(3);
      • § 299.36(a)(2)(iv)(A)-(B);
      • § 299.37;
      • POMS K.1 G, H and Z, K.2.a, K.2.b and the NOTE;
      • Appendix A 2026;
      • the PA-1000 pp. 3 and 7.
    • Required outputs. Eight rows: the rate table, the arrangement order, eligibility, the SSP, the SPN, the SSA rows, couples and PTRR income.
    • Companion tests A–I come from Appendix A, POMS K.2, Chapter 299, LTC 450.243 and the PA-1000, not PolicyEngine output. Eight map to cases by name; D (the move-month couple, 2,848.40) has no case.
    • The source-conflict comment lists three conflicts. Each names the reading the PR takes and the case that pins it:
      • § 299.37's care rows against POMS and the Handbook;
      • averaging against splitting for a mixed couple in the move month;
      • the $15.00 NOTE against the $22.10 SPN.
  • Matches the head:
    • the variable and parameter names;
    • the input-based care homes and the arrangement order;
    • the 662.67 base in the household of another;
    • the PTRR half count.
  • One correction (Suggestion 1): the living-arrangement case count is 10, not 6.

CI status

3 pass, 14 pending, 0 failed (run 38810787566 on head 8e3f0e899d, pull_request, created 2026-10-15 21:33 UTC, still queued at 22:08 UTC).

  • Passed: PR validation, Package and compatibility, and Household API Partners.
  • Still pending:
    • Quick Feedback;
    • Microsimulation;
    • Rest (Python, shard-1 + variables);
    • all 11 Baseline shards.
  • Not yet listed. Since Stop Rest after cancellation, run Contrib after Baseline at 11 jobs, and share YAML runners by memory #10231, Rest (Python + variables) and the Contrib shards start after Baseline, so they don't appear yet.
  • Before merge. My local runs and mixed-state probes give no reason to expect a failure, but these jobs should pass before merge.

Branch status

Verdict: APPROVE

@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.

Approving round 2; details in the report above. All four round-1 should items are fixed. rulespec-us#1783 is open, pe-parity labelled and ready for the encoder. The descriptions follow the house template. PTRR income now counts half of pa_ssp per PA-1000, with no double count (the round-1 renter now gets $770). The care-home references and POMS anchors are correct. The new pa_ssp_care_home input matches §§ 299.1/299.2/299.22 and POMS K.1. The NH-sibling bug doesn't occur here: a 6-person PA/OH/NJ/MA simulation matches the single-state runs. 64 of 64 cases and the two-state cases pass. Fourteen CI jobs were still queued or running when I posted, with none failing; please confirm they finish green before merging. Three optional suggestions are in the report.

hua7450 and others added 2 commits October 15, 2026 22:26
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@hua7450
hua7450 merged commit 70e7ba6 into main Oct 16, 2026
27 checks passed
@hua7450
hua7450 deleted the pa-ssp-2026 branch October 16, 2026 05:16
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