Skip to content

Add New York state supplementation for 2026 - #10158

Open
hua7450 wants to merge 3 commits into
mainfrom
ny-ssp-2026
Open

hua7450 wants to merge 3 commits into
mainfrom
ny-ssp-2026

Conversation

@hua7450

@hua7450 hua7450 commented Oct 12, 2026

Copy link
Copy Markdown
Collaborator

What and why

Implements New York State Supplement Program for researched 2026 coverage, with state-specific eligibility, payment rules, and integration into benefit totals and SNAP/HUD income.

Models the 2026 individual and couple rates, downstate care premiums, income taper, minimum payment, and institutional personal-needs allowance. Certified care, separate-food household exceptions and separate institutional SSI claims require explicit inputs. Regular student status accepts an explicit regular-attendance determination, with full-time student status as the fallback. Grandfathered mandatory payments are not modeled.

Parameter backfilling does not establish verified historical coverage.

References

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

Test plan

  • 40 source-based YAML cases passed on this separate state branch.
  • Synthetic national simulation: 153 households, 204 people, all 50 states and DC; finite nonnegative benefit and income aggregates.
  • make format, reference/registry checks, and git diff --check.
  • State changelog fragment.

axiom: needed

hua7450 and others added 3 commits October 12, 2026 14:20
… tests

- Apply the not-married / not-head-of-household test to minors under 18 too, per person
- Read is_full_time_student directly instead of a wrapper variable
- Registry placement and comments, SNAP reference title, shorter programs.yaml note
- Pinpoint SSL 209 and 18 NYCRR 398-4.4 references
- Make the deeming test exercise deeming; add minor-branch and earned-income cases

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

DTrim99 commented Oct 13, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Add New York state supplementation for 2026

PR #10158 (author: hua7450, head 92f6d9ab64, merge-base 2e9eea7e6e). 23 files (+1,077/−4), 3 commits.

Summary

The PR adds New York's State Supplement Program (SSP), which the Office of Temporary and Disability Assistance (OTDA) administers:

  • Parameters under gov.states.ny.otda.ssp:
    • amount.individual and amount.couple, broken down by ny_ssp_living_arrangement, all dated 2026-01-01. They hold the rest-of-state rows: living alone 87 / 104, living with others 23 / 46, family care 228.48 / 953.96, residential care 405 / 1,307, enhanced residential care 694 / 1,885, and 0 for the medical-facility and NONE rows.
    • family_care_downstate_premium (38) and residential_care_downstate_premium (30) per person, applied in the nine downstate_counties: the five New York City counties plus Nassau, Rockland, Suffolk and Westchester.
    • minimum_payment ($1 from 2014-10-01), minor_age (18) and student_minor_age (22).
    • personal_needs.nursing_facility ($25) and .other_medical_facility ($5), both from 1988-01-01.
    • The shared federal gov.ssa.ssi.state_supplement.minimum_payment, which New York doesn't use.
  • Variables:
    • ny_ssp_is_minor (Person, YEAR): under 18, or under 22 and a full-time student, and neither married nor a household head.
    • ny_ssp_living_arrangement (Person, MONTH, default NONE). It maps the federal living arrangement and the household size to living alone, living with others, the medical-facility rows or NONE. Certified care levels I–III and the nursing-facility row are input only.
    • ny_ssp (Person, MONTH). It calls the shared helper _ssi_state_supplement.py with federal_payment_rules=False, so there is no SSA rounding. It then applies New York's $1 minimum and adds the State Supplemental Personal Needs Allowance (SSPNA) for SSI recipients in a Medicaid facility who have no other countable income.
  • Aggregates and registry:
    • ny_ssp is added to household_state_benefits (all four year blocks), spm_unit_benefits, SNAP unearned income and HUD unearned income.
    • There is a programs.yaml entry (partial, verified_years: '2026').
  • Tests: 42 YAML cases, 34 in ny_ssp.yaml and 8 in integration.yaml.

The 2026 policy content is right:

  • Amounts. Every individual and couple row matches SSL § 209(2) as amended for 2026 and the 2026 OTDA rate chart (PDF p. 1). The downstate split matches the statute's county list.
  • Formula. The income taper follows SSL § 209(4) and 18 NYCRR 398-4.4(b), including state-only (SSP-only) payments.
  • Administration. New York has administered every category itself since October 1, 2014. So skipping SSA rounding is right, and New York's own $1 minimum (398-4.6(c)) applies.
  • Other rules the code follows correctly:
    • the SSPNA amounts and income test (§ 209(2-a), 398-3.2, 398-3.4)
    • the medical-facility exclusions
    • the living-arrangement rules for spouses, minor children and household of another (398-4.5)
    • the minor-child definition (398-2.1(t))
  • Tests and CI. All 42 expectations check by hand and pass at the head. CI is green and the branch merges cleanly with main.

Three should-fix items remain:

  1. The axiom: needed line isn't valid for a staff PR that adds a program.
  2. All ten New York parameter descriptions (and the shared federal one) are off-template.
  3. The PR body describes a regular-attendance input that the last commit deleted, and it gives the wrong case count.

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.
    • On rulespec-us main, us-ny/regulations/18-nycrr/ holds Parts 385 and 387 but no Part 398. us-ny/statutes/ holds only NYC/ and TAX/. us-ny/policies/otda/ covers only SNAP and the TANF state plan.
    • Issue searches for "New York supplement", "New York SSP", "State Supplement Program", "18 NYCRR 398", "Social Services Law 209", "SSPNA" and "New York SSI" find no SSP issue. The only New York hit is NH TANF #1480 (HEAP).
  • 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: N.Y. Soc. Serv. Law § 209(2), (2-a), (3), (4); 18 NYCRR 398-2.1(t), 398-3.2, 398-3.4, 398-4.4, 398-4.5, 398-4.6(c) TheAxiomFoundation/rulespec-us#NNNN queued. The issue needs:
    • Module paths, following the existing us-ny/statutes/TAX/601.yaml and us-ny/regulations/18-nycrr/387/... layout. For example:

      • us-ny/statutes/SOS/209.yaml
      • us-ny/regulations/18-nycrr/398-2/1.yaml (minor child, (t))
      • 398-3/2.yaml and 398-3/4.yaml (SSPNA)
      • 398-4/2.yaml, 398-4/4.yaml, 398-4/5.yaml and 398-4/6.yaml
      • us-ny/policies/otda/ssp/2026-maximum-monthly-benefit-levels.yaml for the chart
    • Corpus citations and the blocker.

    • Verbatim law, quoted under Verified correct:

      • § 209(2) for 2026, with (2-a), (3)(a)–(e) and (4)
      • 398-2.1(t), 398-3.2, 398-3.4, 398-4.2(b), 398-4.4(b)–(c), the 398-4.5 categories and 398-4.6(c)
    • Required outputs (Person, monthly):

      • the standard-of-need table by arrangement, region and individual or couple
      • Money: max(0, standard − (SSI + countable income)) with the $1 minimum
      • Judgments for the living arrangements, the minor-child test and the medical-facility bar
      • the SSPNA: $25 or $5 by facility type, only with no countable income other than the $30 SSI
    • Companion tests from the 2026 chart and § 209:

      Case SSP Total
      Individual living alone, no income 87 1,081
      Individual living with others 23 1,017
      Household of another (federal code B) 23 685.67
      Family care, downstate, individual 266.48 1,260.48
      Family care, rest of state, couple 953.96 2,444.96
      Residential care, downstate, couple 1,367 2,858
      Enhanced residential care, individual 694 1,688
      Living alone with $1,030 Social Security: 1,081 − (0 + 1,010) 71 1,081
      DOH nursing-home resident on the $30 SSI SSPNA 25 55

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

  • Where (line 1 of each file under parameters/gov/states/ny/otda/ssp/):
    • amount/individual.yaml: "New York provides these monthly State Supplement Program rates for an eligible individual, excluding the downstate care premium."
    • amount/couple.yaml: the same, "for an eligible couple".
    • downstate_counties.yaml: "New York pays higher family and residential care supplements in these counties."
    • family_care_downstate_premium.yaml: "New York adds this monthly amount per person to the family care rate in downstate counties."
    • residential_care_downstate_premium.yaml: the same, for the residential care rate.
    • minimum_payment.yaml: "New York provides at least this monthly State Supplement Program payment when the computed benefit is positive."
    • minor_age.yaml: "New York treats people below this age as minors for State Supplement Program living arrangements."
    • student_minor_age.yaml: "New York treats an unmarried student who is not a household head as a minor below this age."
    • personal_needs/nursing_facility.yaml and personal_needs/other_medical_facility.yaml share one sentence: "New York provides this monthly state personal needs allowance in this medical facility category."
  • The template: "one sentence, spell the program out fully (no acronyms), [State] [verb] ... under the [Full Program Name] program."
    • None of the ten has the "under the ... program" clause, and two don't name the program at all.
    • The two personal-needs files can't be told apart by their descriptions.
    • The sibling SSP parameters on main follow the template. For example, ga/dhs/ssp/amount.yaml: "Georgia provides this amount as the monthly supplement under the State Supplementary Payment program." And ks/kdhe/sspp/payment/amount.yaml: "Kansas provides this amount as the monthly cash payment under the State Supplemental Payment Program."
    • The program's own name is "State Supplement Program" (18 NYCRR 398-2.1(af)).
  • Fix, for example:
    • amount/individual.yaml: "New York provides this amount as the monthly individual payment under the State Supplement Program." Use "couple" in couple.yaml.
    • downstate_counties.yaml: "New York pays the higher family care and residential care amounts in these counties under the State Supplement Program."
    • family_care_downstate_premium.yaml: "New York adds this amount per person to the monthly family care payment in these counties under the State Supplement Program." Use "residential care" in the residential file.
    • minimum_payment.yaml: "New York sets this amount as the minimum monthly payment under the State Supplement Program."
    • minor_age.yaml: "New York treats people below this age as minor children under the State Supplement Program."
    • student_minor_age.yaml: "New York treats unmarried students who do not head a household as minor children below this age under the State Supplement Program."
    • personal_needs/nursing_facility.yaml: "New York provides this amount as the monthly personal needs allowance to nursing home residents under the State Supplement Program."
    • personal_needs/other_medical_facility.yaml: "New York provides this amount as the monthly personal needs allowance to residents of developmental disabilities intermediate care facilities and state psychiatric hospitals under the State Supplement Program."
  • The shared federal parameter has the same gap.

3. The PR body describes behavior the last commit removed.

  • Where: the PR body says "Regular student status accepts an explicit regular-attendance determination, with full-time student status as the fallback." It also says "40 source-based YAML cases passed".
  • What the head does.
    • The first commit (24a6b153e5) added ny_ssp_regularly_attends_school, a YEAR input that defaulted to is_full_time_student and cited 20 CFR 416.1861.
    • The third commit (92f6d9ab64, "Fix issues from review") deleted that variable and its test.
    • ny_ssp_is_minor.py:29 now reads is_full_time_student directly. Its documentation (lines 22-23) says "Part-time attendance that counts as regular attendance under 20 CFR 416.1861 is not captured by is_full_time_student."
    • No input for a regular-attendance determination is left. The only route is to override ny_ssp_is_minor itself.
    • The PR has 42 cases (34 + 8), not 40.
  • Precedent. Add Oklahoma state supplementation for 2026 #10165 (Oklahoma) got a should-fix finding for the same pattern: "the PR body claims essential-spouse and TANF-input handling that the last commit removed".
  • Fix: replace the sentence with something like "Regular school attendance uses full-time student status; qualifying part-time attendance under 20 CFR 416.1861 is not modeled (override ny_ssp_is_minor)", and change the count to 42.

Suggestions

  1. Couple congregate-care amounts before 2026, and dating the constant rows (deferral documented: "Parameter backfilling does not establish verified historical coverage").
    • Rows that are already right in earlier years. The individual increments and the living-alone and living-with-others couple increments haven't changed since at least January 2014:
      • POMS SI 01415.046 K.2 (January 2014) shows "A,C | A | All | 721.00 | 87.00 | 808.00" and "B | All | 721.00 | 23.00 | 744.00"; C at 266.48 / 228.48; D at 435.00 / 405.00; E at 694.00; "B | F | All | 480.67 | 23.00"; and couple A 104.00 and B 46.00.
      • The 2025 text of SSL § 209(2) gives $1,054 / $1,554, $990 / $1,496, $1,233.48 / $1,195.48, $1,402 / $1,372 and $1,661. Each is the 2025 FBR ($967 / $1,450) plus the same increments.
      • So the 2015–2025 values for these rows are right.
    • The couple congregate-care rows move every year.
      • § 209(2)(c)–(e) set each couple standard as "two times the amount set forth in subparagraph (i)", the individual standard.
      • The couple supplement is therefore 2 × (individual FBR + individual increment) − couple FBR. That changes with every cost-of-living adjustment. POMS January 2014 shows couple C 892.96 / 816.96, D 1,230 / 1,170 and E 1,748, against the PR's 1,029.96 / 953.96, 1,367 / 1,307 and 1,885.
    • The leak. amount/couple.yaml:21-28 dates the 2026 figures 2026-01-01, so they carry back to 2015.
      • Probe at the head: a rest-of-state family-care couple gets ny_ssp 476.98 each in 2015-01, 2020-01, 2025-01 and 2026-01, and an enhanced-care couple gets 942.50 each.
      • What the statute gives (family care, rest of state): 411.48 each in 2015 (2 × 961.48 − 1,100 = 822.96), 423.98 in 2020 and 470.48 in 2025. For enhanced care in 2015: 877 each.
      • So the model overpays $131 (2015), $106 (2020) and $13 (2025) per couple per month. These values also feed the 2023–2025 household_state_benefits blocks the PR wires.
      • From 2027 it will underpay, once the FBR rises and § 209(2)(f) passes the increase through.
    • Fix:
      • Compute the three congregate-care couple rates in ny_ssp.py as 2 * (ssi.amount.individual + individual_rate) − ssi.amount.couple, with the premium already in individual_rate. Keep the stored couple values only for living alone and living with others. This reproduces 1,029.96 / 953.96 / 1,367 / 1,307 / 1,885 for 2026 and is right in every year.
      • Date the constant rows to 2014-10-01 (the start of state administration), citing POMS SI 01415.046 K.
      • Add "Closes New York SSI State Supplement #1478" (open since 2022, "New York SSI State Supplement"). Widen New York SSI 2017, 2018, 2019 #8765 ("New York SSI 2017, 2018, 2019") to 2015–2025.
  2. The Texas rebate reform's copy of spm_unit_benefits now omits ny_ssp.
    • Where: reforms/states/tx/rebate/tx_rebate.py:53-127 redefines spm_unit_benefits nationwide with a hard-coded list. It lacks ny_ssp and already lacks ca_state_supplement.
    • Probe at the head: a New York aged SSI-only single in 2027.
      • spm_unit_benefits is 15,317.26 at baseline and 14,273.26 under the reform. The drop is exactly the $1,044 ny_ssp.
      • spm_unit_net_income falls by the same amount.
      • household_net_income is unchanged at 15,968.26.
    • Fix: insert "ny_ssp", # New York 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. New York programs that read SSI.
    • Child Care Assistance Program (CCAP).
      • The rule. 18 NYCRR 404.5(b)(5)(vi): "Public assistance or welfare payments include public assistance payments such as ADC, SSI (including State supplemental payments), and home relief."
      • What main says. ny/ocfs/ccap/income/countable_income/sources.yaml:65-66 lists "state supplementary payments to SSI recipients, countable under 404.5(b)(5)(vi). PolicyEngine has no state supplement variable." After this PR that comment is no longer true, and ny_ccap_countable_income.py:39 counts adult ssi only.
      • Why this is a suggestion, unlike Oklahoma's and Pennsylvania's findings:
        • The family share is 1% of income above the poverty guideline, with a $1-a-week minimum (family_share_rate.yaml, minimum_weekly_family_share.yaml).
        • A parent who lives with a child is never "living alone", so the parent's SSP is $23 a month.
        • Probe at the head: a disabled SSI parent, a spouse earning $20,000 and a 3-year-old. SSI is 11,384 and ny_ssp 276. CCAP income is 31,384 against a poverty guideline of 27,320. The family share is 4.33 a month with or without the $276.
      • Fix: add adult ny_ssp next to adult ssi in ny_ccap_countable_income.py and update the comment.
    • Home Energy Assistance Program (HEAP) "Code A".
      • 18 NYCRR 393.4(c)(1)(iii) makes categorically eligible "households, any member of which is in receipt of SSI as a couple or individual living alone (SSI Living Arrangement Code A)".
      • The FY2026 State Plan, PDF p. 5 defines it as "(state and federal living arrangement code of "A")".
      • ny_heap_categorically_eligible.py:36-39 approximates state code A from SPM membership. Reading ny_ssp_living_arrangement == LIVING_ALONE together with the federal own-household test would use the state code directly. It would also pick up the separate-food and foster-child living-alone cases. This can be a follow-up.
    • IT-214. ny_household_gross_income adds ssi (line 12), but that measure drives the credit only through tax year 2024. From 2025 the credit uses federal AGI, so it doesn't matter for the 2026 claim.
  4. Medicaid-facility residents default to the $5 allowance.
    • The rule. SSL § 209(2-a) and 18 NYCRR 398-3.4:
      • $25 for "a resident of a residential health care facility as defined by section twenty-eight hundred one of the public health law", which means nursing homes.
      • $5 only for "a resident of an intermediate care facility operated or issued an operating certificate by the office for people with developmental disabilities or a patient of a hospital operated by the office of mental health".
    • What the code does.
      • ny_ssp_living_arrangement.py:52-55 maps every Medicaid-majority facility resident to OTHER_MEDICAL_FACILITY, labelled "Other qualifying Medicaid medical facility". The $25 needs an explicit NURSING_FACILITY.
      • ny_ssp.yaml Case 19 pins 5.
      • So the default is right only for the narrow developmental-disabilities intermediate-care and state-psychiatric-hospital group:
        • a nursing-home resident, the usual Title XIX placement, gets $5 instead of $25
        • a resident of any other Medicaid facility, such as a general hospital, gets $5 where the statute pays nothing
      • The documentation (lines 35-39) states the choice, which is why this is a suggestion.
    • Fix: default Medicaid-majority facility residents to NURSING_FACILITY, or add a facility-type input that defaults to a nursing home. Relabel the $5 row with the statutory facility types and add a case for each.
  5. The documented workaround for an institutionalized spouse resets the other spouse.
    • Where: ny_ssp_living_arrangement.py:32-34 says "The household count includes a spouse who lives in a medical facility ... so set the arrangement of the spouse at home explicitly." Because default_value = NONE (line 25), an input for one member sets every other member to NONE.

    • Probe at the head (2026-01): an aged couple where spouse 1 is in a Medicaid facility.

      Input Arrangements SSI ny_ssp
      No input [OTHER_MEDICAL_FACILITY, LIVING_WITH_OTHERS] [30, 994] [5, 23]
      Home spouse set to LIVING_ALONE, as documented [NONE, LIVING_ALONE] [30, 994] [0, 87]
      Only NURSING_FACILITY on spouse 1 [NURSING_FACILITY, NONE] [30, 994] [25, 0]

      Following the instruction fixes the home spouse but takes away the institutionalized spouse's allowance.

    • Precedent. Add Rhode Island state supplementation for 2026 #10168 (Rhode Island) Suggestion 3 has the same NONE-default pattern.

    • Fix: say "set the arrangement of both spouses" in the documentation. Better, move the explicit routes (certified care level, separate food, nursing home) to boolean or enum inputs with a neutral default, and leave ny_ssp_living_arrangement formula-only.

  6. Write down and pin the remaining readings.
    • Spousal deeming.
      • Integration Case 6 (integration.yaml:122-158) pins 7: the helper takes the lesser of the individual computation (23) and couple rate 46 minus the $39 excess. That is SSA's method for federally administered supplements, SI 01320.430 D.
      • New York has administered its supplement itself since 10/1/2014, so POMS doesn't bind it.
      • SSL § 209(4) pays "the difference between the monthly standard of need applicable to such individual or couple and the sum of such individual's or couple's supplemental security income benefit plus countable income". With the individual living-with-others standard, that is $1,017 − ($0 + $1,530), which is 0.
      • The PR's reading is plausible, since it is what SSA applied for New York before October 2014. But nothing in ny_ssp.py says so.
      • Fix: cite SI 01320.430 D in ny_ssp.py and state the reading in a comment, or find OTDA guidance.
    • An aged, blind or disabled spouse who declines SSI.
      • The rule. 398-2.1(l) requires both members of an eligible couple to be "in active receipt of SSI". 398-4.5(a)(2)(i) treats "the individual lives with an ineligible spouse" as not living alone.
      • Probe at the head: two people aged 65, where spouse 2 has takes_up_ssi_if_eligible: false, get SSI [745.50, 0] and ny_ssp [52, 0]. The state rule gives SSI 994 and SSP 23.
      • Fix. The cause is the federal ssi_couple_computation_applies, the same limitation as Add New Jersey state supplementation for 2026 #10157 Suggestion 3. Add a NOTE in ny_ssp.py.
    • Level II and III couples after the month of entry.
      • The rule. 398-4.5(d) and (e): "After the month of entry into a congregate care level II facility that is classified as an institution for purposes of federal SSI benefits, couples are treated as consisting of two individuals, since couple status can exist only in households, not institutions."
      • What the PR pins. Integration Cases 3 and 4 pin the couple rate (653.50 and 942.50 each).
      • Probe at the head with separate marital units: SSI 994 and ny_ssp 405 each.
      • Fix: rename Cases 3 and 4 to say they cover the month of entry or a non-institutional facility, and add the separate-claims case. The variable documentation already mentions it.
    • Correct but untested:
      • household of another with $700 a month of Social Security: SSI 0 and ny_ssp 5.67 = 23 − (680 − 662.67)
      • a living-alone couple where one spouse has $1,600 a month of Social Security: ny_ssp 7.50 each = (1,595 − 1,580) / 2
      • the age-18 boundary of minor_age; no case sits at 18
      • a married minor
  7. Polish.
    • Blank lines. The PR adds a stray blank line before metadata: in household_state_benefits.yaml:408 and hud/annual_income/sources/unearned.yaml:33. Neither relates to New York.
    • References:
      • downstate_counties.yaml and both premium files title the chart "#page 1-2", but everything they cite is on PDF p. 1.
      • ny_ssp.py cites 398-3.2 but not 398-3.4 (the $25 / $5 split), 398-4.2(b) (the Medicaid-facility bar) or, if you keep the deeming path, SI 01320.430 D.
    • defined_for. ny_ssp_is_minor has none. Add StateCode.NY, like its two siblings.
    • spm_unit_benefits wiring isn't asserted. Integration Case 7 asserts SNAP, HUD and household_state_benefits, but removing ny_ssp from spm_unit_benefits.py would pass every test.

Verified correct

  • Statute, 2026 amounts. SSL § 209(2) as amended for 2026:
    • "for an eligible individual living alone, $1,081.00; and for an eligible couple living alone, $1,595.00"
    • "for an eligible individual living with others with or without in-kind income, $1,017.00; and for an eligible couple living with others with or without in-kind income, $1,537.00"
    • family care "$1,260.48 if such individual is receiving such care in the city of New York or the county of Nassau, Suffolk, Westchester or Rockland ... (iii) for an eligible individual receiving such care in any other county in the state, $1,222.48", couples "two times the amount"
    • residential care $1,429.00 / $1,399.00; enhanced residential care $1,688.00; couples "two times the amount"
    • The 2025 text's (f) passes through the January 2026 increase ("shall be increased to reflect any increases in federal supplemental security income benefits ... effective on or after January first, two thousand twenty-six"). The 2026 totals are the 2025 totals plus $27 and $41.
  • The 2026 OTDA chart (PDF p. 1, "Revised October 27, 2025"; "Statutory References: Chapter 56 of the Laws of 2025"):
    • "A A Living Alone $994 $87 $1,081 $1,491 $104 $1,595"
    • "A, C B Living with Others $994 $23 $1,017 $1,491 $46 $1,537"
    • "B F Living in the Household of Another $662.67 $23 $685.67 $994 $46 $1,040"
    • family care: downstate "$994 $266.48 $1,260.48 $1,491 $1,029.96 $2,520.96"; rest of state "$994 $228.48 $1,222.48 $1,491 $953.96 $2,444.96"
    • residential care: downstate "$994 $435 $1,429 $1,491 $1,367 $2,858"; rest of state "$994 $405 $1,399 $1,491 $1,307 $2,798"
    • enhanced residential care "$994 $694 $1,688 $1,491 $1,885 $3,376"
    • "D Z Title XIX (Medicaid Certified) Institutions $30 $0 $30"
    • Every stored value and the premiums (266.48 − 228.48 = 38; 435 − 405 = 30; couple premiums 76 and 60) reproduce these rows.
    • PDF p. 2, footnote 4: "Recipients in nursing homes licensed by DOH receive an additional monthly grant of $25 issued by OTDA called a State Supplement Personal Needs Allowance (SSPNA). Residents of other medical facilities receive a SSPNA of $5."
    • Footnote 5's no-supplement cases (private facility with Medicaid under 50%, small publicly operated residences, public emergency shelters) match the excluded path and the documented NONE input.
  • The downstate counties. POMS SI 01415.046 K footnote 1 lists "Bronx, Kings, Manhattan, Nassau, Queens, Richmond, Rockland, Suffolk, and Westchester counties". These are exactly the nine downstate_counties.
  • Formula.
    • 18 NYCRR 398-4.4: "(b) The monthly SSP benefit amount equals the State benefit rate minus the greater of the FBR or countable income. (c) The State benefit rate will be established based on the individual's or the couple's State living arrangement on the first day of the month."
    • The helper's max_(standard − max_(countable − federal_amount, 0), 0) is the same thing.
    • State-only payments. 398-2.1(aj) defines an "SSP-only recipient", and (p)(5) lists "N01 - Non-pay - recipient countable income exceeds Title XVI federal benefit rate". is_ssi_eligible carries no income test, so Case 10 pays 71 with SSI 0.
    • Eligibility. 398-4.2(a)(3) requires "monthly countable income less than the State standard of need", which Case 12 pins at exactly 0.
  • Household of another.
    • 398-4.5(b)(6) puts a person "categorized by the SSA as Living in the Household of Another" in living with others.
    • 20 CFR 416.1131(a) says "we count one-third of the Federal benefit rate as additional income". So the state reduction starts only above the reduced $662.67 rate.
    • The helper's use of ssi_amount_if_eligible (662.67) gives that result. Probe: $700 of Social Security gives 5.67, which is 1,017 − (680 + 331.33).
  • Administration.
    • POMS SI 01415.046 A: "New York (effective 10/01/14, New York began self-administering all categories)".
    • New York is absent from the January 2026 list in SI 01415.058 A.
    • 398-1.1: the OTDA Commissioner "is responsible for the administration of all State benefits".
    • So federal_payment_rules=False (no SSA rounding) is right.
  • Minimum payment.
    • 398-4.6(c): "The minimum monthly benefit issuance for SSP is $1." It is dated 2014-10-01, the regulation's effective date.
    • Raising 0.25 to 1 (Case 11) matches SSA's parallel wording in SI 02001.005 A.2: "more than $0 but less than $1, we pay $1.00".
  • SSPNA:
    • § 209(2-a): "on or after January first, nineteen hundred eighty-eight the state payment for personal needs for such persons shall be in the amount of twenty-five dollars a month", plus the $5 tier. So the 1988-01-01 dates are right.
    • 398-3.2(d): "have no countable income, earned or unearned, other than the federal SSI benefit provided to residents of medical facilities for whom the Medical Assistance Program pays at least 50 percent of the cost of care".
    • The ssi_countable_income == 0 test matches. Case 20 ($21 of Social Security, countable $1) gives 0, and Case 21 ($20, fully excluded) gives 25.
  • Exclusions.
    • § 209(1)(d) bars a month spent "in a medical facility which is receiving medical assistance payments for him at a level exceeding fifty per cent of the cost of his care, or ... in a medical facility which is not certified under the state's medical assistance program".
    • 398-4.2(b)(2) applies the same bar on the first of the month.
    • The zero rows for the facility categories and the excluded → NONE path implement both. Case 22 pins it.
  • Living arrangements. 398-4.5:
    • Living alone means "living in a private household composed of one SSP-eligible individual or one SSP- eligible couple".
    • "(2) An individual or couple is not considered to be living alone if: (i) the individual lives with an ineligible spouse; (ii) the individual or couple lives with a minor child for whom they have primary responsibility ... (iii) the individual is a minor child".
    • (b)(2) "is a minor child who is not living in a congregate care facility", and (e) "A minor child residing in a congregate care level III facility is considered to be living with others".
    • The nb_persons() == where(joint, 2, 1) test and the minor and minor_enhanced_care branches match. Integration Case 5 gives [23, 0], Cases 24 and 33 give 23, and Case 27 accepts an explicit family-care placement for a minor under (c).
    • The separate-food, foster-child and attendant cases under (a)(1) need an explicit input, as documented.
  • Minor child.
    • 398-2.1(t): "A minor child is a person under age 18, or under age 22 and a student regularly attending school, college, or vocational training and who is neither married nor a head of a household."
    • § 209(3)(b): "under the age of eighteen, or under the age of twenty-two if attending school".
    • The 18 and 22 parameters match. is_household_head has no formula on main, so it defaults to false and only an explicit head is excluded (Case 32).
  • Counted for SNAP and HUD; kept out of SSI income.
    • 7 CFR 273.9(b)(2)(i) counts SSI and "other assistance programs based on need".
    • 20 CFR 416.1124(c)(2) excludes state supplementation from SSI income. ny_ssp isn't in the SSI source lists, so there is no circularity.
    • No generic state-supplement variable on main pays New York, so there is no double count. The SNAP reference consolidation follows main's one-entry-per-document rule.
  • Code:
  • Hand checks: all 42 expectations. The 2026 FBR is $994 for an individual and $1,491 for a couple.
    • ny_ssp.yaml:
      • Cases 1–9: 87, 23, 23 (household of another), 228.48, 266.48 (Bronx), 266.48 (Nassau), 405, 435 (Westchester) and 694.
      • Case 10: 12,360 / 12 = 1,030; 1,030 − 20 = 1,010; 87 − 16 = 71.
      • Case 11: 13,209 / 12 = 1,100.75; 1,100.75 − 20 = 1,080.75; 87 − 86.75 = 0.25, raised to 1.
      • Case 12: 13,212 / 12 = 1,101; 1,101 − 20 = 1,081; 87 − 87 = 0.
      • Cases 13–17: resources of 2,001, New Jersey, age 30, no take-up and NONE each give 0.
      • Case 18: SSI 30 and SSPNA 25.
      • Case 19: the default facility gives 5.
      • Case 20: 252 / 12 = 21; 21 − 20 = 1 countable, so 0.
      • Case 21: 240 / 12 = 20, fully excluded, so 25.
      • Cases 22 and 23: 0.
      • Cases 24, 25, 28, 33 and 34: minors get 23.
      • Cases 26, 29, 30 and 31: adults in level III get 694.
      • Case 27: 228.48.
      • Case 32: a 17-year-old head is not a minor, so living alone gives 87.
    • integration.yaml:
      • Case 1: 104 / 2 = 52.
      • Case 2: (953.96 + 2 × 38) / 2 = 514.98.
      • Case 3: 1,307 / 2 = 653.50.
      • Case 4: 1,885 / 2 = 942.50.
      • Case 5: [23, 0].
      • Case 6:
        • 18,600 / 12 = 1,550, above 497, so deeming applies
        • 1,550 − 20 = 1,530, so SSI is 0
        • ny_ssp is min(23, 46 − 39) = 7
      • Case 7: 12 × 87 = 1,044. SNAP and HUD unearned income are 11,928 + 1,044 = 12,972.
      • Case 8: 16,640 / 12 = 1,386.67; (1,386.67 − 85) / 2 = 650.83; SSI 343.17; ny_ssp 87.
  • Changelog: changelog.d/ny-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 input-only care levels and the unmodeled grandfathered payments. parameter_prefix resolves.

Batch checks

  1. Axiom line: invalid (needed). rulespec-us has no Part 398 or § 209 module and no NY SSP issue (Should 1).
  2. Parameter descriptions: all ten New York files are off-template, and so is the shared federal minimum_payment.yaml (Should 2).
  3. Backdating:
    • The individual rows, the living-alone and living-with-others couple rows and the SSPNA are right back to 2014 (POMS SI 01415.046 K; SSL § 209 for 2025).
    • The couple congregate-care rows overpay $13–$131 per couple per month in 2015–2025.
    • This is a documented deferral, so Suggestion 1.
  4. tx_rebate.py copy: it omits ny_ssp; the probe shows spm_unit_benefits down $1,044 for a New York SSI-only single in 2027 (Suggestion 2).
  5. Aggregate wiring:
    • All four household_state_benefits blocks, spm_unit_benefits, HUD, SNAP and programs.yaml are present.
    • There is no double count with ssi.
    • New York CCAP counts the SSP under 404.5(b)(5)(vi) and its comment now misstates the model, but the effect is negligible (Suggestion 3).
  6. Income attribution:
    • It uses SSA countable income: couples combined and halved (probe 7.50 each), state-only payments, and the household-of-another taper at $662.67.
    • The SSPNA requires zero other countable income, as 398-3.2(d) does.
    • The deeming path follows SI 01320.430 D, which isn't confirmed for a state-administered supplement.
    • A declining ABD spouse is treated as joint, and level II and III couples keep couple status after entry.
    • Medicaid-facility residents default to the $5 tier (Suggestions 4–6).
  7. Sibling conflicts:
  8. CI: all 26 checks pass on head 92f6d9ab64, with no failing job.
  9. State law first:
    • Read: SSL § 209 (2025 and 2026 text); 18 NYCRR 398-1.1, 2.1, 3.1–3.4 and 4.1–4.7; the 2026 OTDA chart; POMS SI 01415.046 A and K, SI 01415.058 A and SI 02001.005; and 20 CFR 416.1131.
    • Every 2026 amount by arrangement, region and individual or couple matches. So do the state administration (since 10/1/2014) and the January 1, 2026 effective date.
    • All 42 expectations check by hand.

Axiom line assessment

Invalid (Should 1).

CI status

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

  • The run. Run 38367907498 (pull_request, 2026-10-13 08:14 UTC) on head 92f6d9ab64, conclusion success.
  • Main since then. In the files this PR touches or depends on, main has changed only these, none of which affects this PR's logic:
    • unemployment_compensation → total_unemployment_compensation in the SNAP list, spm_unit_benefits.py and tx_rebate.py
    • three programs.yaml lines (the California entry)
    • unrelated New York tax and unemployment insurance files
  • Local run. The two new test files at the head with policyengine-core 3.33.3: 42 passed.
  • Partner tests. The PR touches no partner test files, and the Household API Partners job passes.

Branch status

  • Position: 35 commits behind main, 3 ahead.
  • Merge: git merge-tree --write-tree PolicyEngine/main 92f6d9ab64 is clean (tree c48a021b2f).
  • Sibling conflicts. The sibling SSP PRs insert lines at the same places, in household_state_benefits.yaml, hud/.../unearned.yaml, snap/.../unearned.yaml, programs.yaml and spm_unit_benefits.py.

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 match SSL 209(2) and the OTDA 2026 chart. The taper follows 18 NYCRR 398-4.4(b) and SSL 209(4), the living arrangements and SSPNA income test are right, and all 42 cases check by hand. Three should items (see the comment above): (1) 'axiom: needed' isn't valid for staff, and rulespec-us has no Part 398 / SSL 209 module, so file a pe-parity issue and add a queued line; (2) all 10 NY parameter descriptions are off the template; (3) the PR body still describes the regular-attendance input that the last commit deleted, and its case count is out of date.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants