Skip to content

Add New York state supplementation for 2026 - #10158

Merged
hua7450 merged 9 commits into
mainfrom
ny-ssp-2026
Oct 20, 2026
Merged

hua7450 merged 9 commits into
mainfrom
ny-ssp-2026

Conversation

@hua7450

@hua7450 hua7450 commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

What and why

New York's State Supplement Program was missing from PolicyEngine-US. Add ny_ssp with the verified 2026 standards of need for living alone, living with others and the three certified congregate care levels (with the downstate premiums). It also includes the State Supplemental Personal Needs Allowance for SSI recipients in Medicaid facilities.

Closes #1478.

New York has administered its supplement itself since October 1, 2014, so the payment uses New York's own $1 minimum (18 NYCRR 398-4.6(c)) and no SSA rounding. The shared SSI state supplement helper (_ssi_state_supplement.py, identical to the copy in the sibling state SSP PRs) handles the income taper and couples. New York's own rules on top of it:

  • Congregate care couples: the standard of need is two times the individual standard (SSL 209(2)(c)-(e)). It is computed from the federal benefit rates, so it moves with each federal increase.
  • Spousal deeming: follows 18 NYCRR 398-2.1(ac) and 398-4.4(b), which pay the individual standard less the greater of the individual federal benefit rate or countable income (deemed income included). A code NOTE records SSA's method and SSL 209(4), which read differently.
  • Personal needs allowance: $25 in a residential health care facility, which is the default for a Medicaid-majority facility. $5 applies in an OPWDD intermediate care facility or an OMH hospital (SSL 209(2-a); 18 NYCRR 398-3.4). There is no state payment in a Medicaid-majority facility or an excluded setting (SSL 209(1)(d)).
  • Living arrangements: a ny_ssp_care_setting input sets the certified care levels, OPWDD and OMH facilities and excluded settings. Living alone counts only a person's housemates, never the person themselves. Foster children, family care residents and members living in a facility or another care setting don't end it (18 NYCRR 398-4.5(a)).
  • School attendance: 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 for it.

The supplement is added to household and SPM benefit totals and to SNAP and HUD unearned income. #10239 tracks New York CCAP and HEAP reading the supplement after this PR.

References

Additional section citations are included alongside the parameters and formulas.

Coverage limits

The registry marks New York as partial, verified for 2026. Grandfathered mandatory payments are not modeled. Earlier years use parameter backfilling and are unverified historical estimates, and no historical rate coverage is claimed.

Two federal SSI limitations carry over for spouses who live apart. With one marital unit, the federal model deems an ineligible spouse's income to a nursing-home resident on the $30 benefit. It also keeps the couple computation when a spouse is in a facility Medicaid does not mostly pay for or in an excluded setting. Separate marital units give the correct result (ny_ssp.yaml Cases 40 and 45; Case 41 pins the one-unit result).

Related: #10226 tracks the reform copies of spm_unit_benefits (such as the Texas rebate's), which this PR leaves unchanged.

Test plan

  • 59 New York YAML cases: 48 in ny_ssp.yaml and 11 in integration.yaml. They cover:
    • every living arrangement and care level, with the downstate premiums;
    • the income taper, state-only payments (including in another person's household and for a couple) and the $1 minimum;
    • the personal needs allowance by facility type;
    • minor children;
    • couples, including care couples in a small facility and after the month of entry, and spousal deeming;
    • foster children, foster youth claimants, family care residents and spouses in a facility or an excluded setting;
    • annual benefit, SNAP, HUD and spm_unit_benefits integration.
  • After merging main: the 59 New York cases pass locally, and the aggregate list integrity and program registry tests pass (692 passed, 10 skipped).
  • ruff format and git diff --check.
  • Changelog fragment in changelog.d/.

axiom: N.Y. Soc. Serv. Law § 209(1)(d), (2), (2-a), (3), (4); 18 NYCRR 398-2.1, 398-3.2, 398-3.4, 398-4.2(b), 398-4.4, 398-4.5, 398-4.6(c) TheAxiomFoundation/rulespec-us#1777 queued

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.

hua7450 and others added 2 commits October 15, 2026 11:29
…ds allowance, care setting input

- Congregate care couple rates follow Social Services Law 209(2)(c)-(e): two
  times the individual standard less the couple FBR, so they move with each
  federal increase; couple.yaml keeps the living alone and living with others
  amounts.
- Under spousal deeming, follow 18 NYCRR 398-2.1(ac) and 398-4.4(b): the
  individual standard less the greater of the individual FBR or countable
  income including deemed income. A NOTE quotes SSA's method and SSL 209(4).
- Personal needs allowance follows SSL 209(2-a) and 18 NYCRR 398-3.4: $25 by
  default in a Medicaid-majority facility, $5 for OPWDD and OMH facilities.
- New ny_ssp_care_setting input; the living arrangement reads it, and foster
  children and members in a medical facility do not end living alone.
- No state payment in an excluded setting or a Medicaid-majority facility.
- Descriptions follow the template; references cite 398-3.4 and 398-4.2.
- Tests: care setting inputs, couples after entry, deeming, facility and
  household-count cases, spm_unit_benefits.

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 db43e76, followed by a merge of main (03a3fc2).

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

  • your module paths;
  • verbatim SSL 209 and the Part 398 sections;
  • the required outputs;
  • your nine companion tests mapped to the cases.

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

Should 2 (descriptions): all ten New York files now follow the template, using the program's own name ("State Supplement Program", 398-2.1(af)), and the two personal needs files are distinct. I left the shared federal minimum_payment.yaml as it is: it was accepted in the New Jersey review, it must stay identical in six PRs, and New York doesn't use it.

Should 3 (PR body): the regular-attendance sentence now says part-time attendance under 20 CFR 416.1861 is not modeled, the case count is 53, and the body closes #1478.

Suggestion 1 (couple congregate care): fixed for future years; history stays out of scope.

  • The three congregate care couple rates are now 2 × (individual federal benefit rate + individual increment, including the downstate premium) − couple federal benefit rate, under 209(2)(c)-(e).
  • That reproduces 953.96, 1,029.96, 1,307, 1,367 and 1,885 for 2026, and it moves with the 2027 COLA. With the model's 2027 federal rates, the fixed values would have underpaid every congregate care couple $13.92 a month.
  • couple.yaml keeps only the living alone (104) and living with others (46) amounts.
  • I didn't add earlier dates and didn't widen New York SSI 2017, 2018, 2019 #8765.

Suggestion 2 (Texas rebate copy): filed #10226 to keep one spm_unit_benefits list that reforms append to. This PR leaves tx_rebate.py unchanged.

Suggestion 3 (New York programs that read SSI): filed #10239 for CCAP (404.5(b)(5)(vi)) and HEAP code A (393.4(c)(1)(iii)). Both need this PR first. IT-214 is unaffected from 2025, as you noted.

Suggestion 4 (personal needs allowance): fixed to follow SSL 209(2-a) and 398-3.4.

  • A Medicaid-majority facility resident now gets the $25 residential health care facility allowance by default.
  • The $5 row is renamed for OPWDD intermediate care facilities and OMH hospitals and is set through the new care setting input.
  • A general hospital is an excluded setting and pays $0.
  • The OTDA chart's footnote 4 ("Residents of other medical facilities receive a SSPNA of $5") is broader; a NOTE in ny_ssp.py says the model follows the statute.
  • ny_ssp.yaml Cases 18, 19 and 35 pin $25, $5 and $0.

Suggestion 5 (the NONE input trap):

  • New ny_ssp_care_setting input, as in the New Jersey and Nevada PRs. ny_ssp_living_arrangement is now a formula that reads it, so setting one person's care level no longer resets anyone else.
  • Foster children and members living in a medical facility no longer end living alone (398-4.5(a)(1)(vi), (a)(2)(ii)). The spouse at home in your probe now gets 87, and the spouse in the facility gets 25, with no input (Case 39).
  • There is no state payment in an excluded setting or a Medicaid-majority facility, including under deeming (Case 40).

Suggestion 6 (readings):

  • Spousal deeming: New York's sources differ. SSA's method (SI 01320.430 D) gives 7 in Case 6. SSL 209(4) subtracts the SSI benefit plus countable income, which gives 0 for almost every deemed claimant. 398-2.1(ac) and 398-4.4(b) subtract the greater of the individual FBR or countable income. The PR now follows the regulation, with a NOTE quoting all three:
    • Case 6 is 0;
    • new Case 11 (a spouse earning New York's part-time minimum wage, $16,640) pays 23.
  • A spouse who declines SSI: NOTE in ny_ssp.py (398-2.1(l)).
  • Level II and III couples after entry: Cases 3 and 4 are renamed to a couple in a small non-institutional facility. New Cases 9 and 10 put the spouses in separate marital units: SSI 994 and ny_ssp 405 and 694 each.
  • Untested readings:
    • Added the age-18 boundary (Case 36) and a married 17-year-old (Case 37).
    • Skipped the household-of-another $700 case and the $1,600 couple case. Each needs an income inside a $23 or $104 band.

Suggestion 7 (polish):

  • The chart references cite PDF page 1 (#page=1).
  • ny_ssp.py cites 398-3.4 and 398-4.2.
  • ny_ssp_is_minor has defined_for = StateCode.NY.
  • Integration Case 7 asserts spm_unit_benefits of 15,024: SSI 11,928 + ny_ssp 1,044 + SNAP 2,052 with the $877 utility allowance.
  • I kept the blank lines before metadata:. They come from our formatting pass and are harmless.

On the merged head, these pass locally: the 53 New York cases, 243 federal SSI cases, and the aggregate list integrity and program registry tests (677 passed, 10 skipped).

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

DTrim99 commented Oct 15, 2026

Copy link
Copy Markdown
Collaborator

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

PR #10158 (author: hua7450). This round reviews head 03a3fc2200; round 1 reviewed 92f6d9ab64. Two commits landed in between:

  • db43e764fc, the review-response commit (18 files, +504/−130). It derives the congregate-care couple rates from the federal benefit rate, switches spousal deeming to the 18 NYCRR 398-4.4(b) reading, renames the personal needs rows and defaults Medicaid-facility residents to the $25 allowance. It also adds the ny_ssp_care_setting input, rewrites the living-alone count, rewrites the ten descriptions and adds 11 cases;
  • a merge of main at 8ae01aa3cb, whose tree (11fac02201) is identical to an automatic merge, so it has no hand edits.

Summary

Ziming fixed all three round-1 should items. The axiom line now points to rulespec-us#1777, which is open, labelled pe-parity, dispatch-ready and consistent with the head. He also acted on every suggestion, fixing most of them, deferring two to new issues (#10226, #10239) and declining two cosmetic points with reasons.

The new logic checks against SSL § 209 and 18 NYCRR Part 398. The couple congregate-care rates now follow § 209(2)(c)-(e) in every year, including the 2015–2025 years round 1 flagged. The deeming, personal needs and care-setting changes follow 398-2.1, 398-3.4, 398-4.4 and 398-4.5. The New Hampshire bug pattern doesn't occur: mixed-state simulations run cleanly. All 53 cases pass locally and in CI.

One new should item: the rewritten living-alone count leaves out a claimant who is in foster care. So a disabled foster youth living with one foster parent gets the $87 living-alone rate instead of $23.

Round-1 findings status

Finding Status Evidence
Should 1: axiom: needed isn't valid for a staff PR that adds a program Fixed The line. The PR body now ends axiom: N.Y. Soc. Serv. Law § 209(2), (2-a), (3), (4); 18 NYCRR 398-2.1, 398-3.2, 398-3.4, 398-4.4, 398-4.5, 398-4.6(c) TheAxiomFoundation/rulespec-us#1777 queued. The issue. #1777 is open, labelled pe-parity, dispatch-ready and consistent with the head. See the Axiom line assessment; Suggestion 4 has two small additions.
Should 2: all ten New York parameter descriptions are off-template Fixed (the shared federal file declined with a reason, accepted) The ten files. Every New York description now ends "under the State Supplement Program", the program's own name (398-2.1(af)). The two personal needs files are distinct: residential_health_care_facility.yaml ("... to residential health care facility residents ...") and developmental_or_mental_health_facility.yaml ("... to residents of developmental disabilities intermediate care facilities and state psychiatric hospitals ..."). couple.yaml now says it covers "couples living alone or with others", which matches its two remaining keys. The federal file. gov/ssa/ssi/state_supplement/minimum_payment.yaml is unchanged. Reason: New York doesn't use it, it is byte-identical in seven open SSP PRs, and #10157's round 1 accepted it as written. That is consistent, so it's accepted.
Should 3: the PR body described a deleted regular-attendance input and gave the wrong case count Fixed The body now says "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 for it." It gives "53 New York YAML cases: 42 in ny_ssp.yaml and 11 in integration.yaml", which matches the 53 collected, and adds "Closes #1478".
Suggestion 1: couple congregate-care rows were 2026-only and leaked back Fixed (for every year, not only the future) The formula. ny_ssp.py:49-69 computes the three congregate-care couple rates as 2 * (fbr.individual + individual) - fbr.couple, with the downstate premium already in individual. couple.yaml keeps only living alone (104) and living with others (46). 2026. This reproduces 1,029.96 / 953.96 / 1,367 / 1,307 / 1,885. Earlier years. The individual increments have been constant since 2014, so the leak round 1 measured is gone. At the head a rest-of-state family-care couple gets 411.48 each in 2015, 423.98 in 2020 and 470.48 in 2025, the § 209 figures round 1 computed. An enhanced-care couple gets 877 each in 2015. 2027. The rates move with the COLA: 483.94 each for family care, 949.46 for enhanced care. Declined: dating the constant rows 2014-10-01 and widening #8765. Both are cosmetic now, since the backfilled values are right.
Suggestion 2: the spm_unit_benefits copy in tx_rebate.py omits ny_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: New York CCAP and HEAP read SSI but not the supplement Deferred to #10239 #10239 (open, filed 2026-10-15) specifies counting adult ny_ssp in CCAP under 404.5(b)(5)(vi), the comment update, and HEAP code A from ny_ssp_living_arrangement. It depends on this PR. IT-214 needs nothing from 2025.
Suggestion 4: Medicaid-facility residents defaulted to the $5 allowance Fixed Default. ny_ssp_living_arrangement.py:67-68 maps a federal medical-facility resident to RESIDENTIAL_HEALTH_CARE_FACILITY ($25) by default. It maps to DEVELOPMENTAL_OR_MENTAL_HEALTH_FACILITY ($5) only with that care setting, and to NONE ($0) with EXCLUDED, such as a general hospital. Source. This is 398-3.4 verbatim: "a resident of a residential health care facility as defined by section 2801 of the Public Health Law receives a $25 monthly benefit. An eligible 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 ... receives a $5 monthly benefit." NOTE. ny_ssp.py:119-123 records the chart's broader footnote 4. Tests. Cases 18, 19 and 35 pin 25, 5 and 0.
Suggestion 5: the NONE default made the documented spouse workaround zero the other spouse Fixed (but the new household count causes new Should 1) The input. ny_ssp_care_setting (Person, MONTH, default NONE) carries the care levels, the OPWDD/OMH facilities and excluded settings, and ny_ssp_living_arrangement is now a formula over it. Setting one person's care level no longer resets anyone else. The household count. Members in a medical facility and foster children no longer end living alone. Round 1's probe couple now gets [25, 87] with no input (Case 39), against the statutory [25, 87]. What remains. The separate-food and similar 398-4.5(a)(1) cases still need the arrangement set "for every member of the household", and the documentation says so. New problem. The foster-child exclusion also drops the claimant themselves (Should 1).
Suggestion 6: pin the deeming, declining-spouse, post-entry and untested readings Mostly fixed Deeming. Now the regulation reading, max(individual − max(countable − own FBR, 0), 0) (ny_ssp.py:94-108), with a NOTE (:82-93) quoting SI 01320.430 D, SSL 209(4), 398-2.1(ac) and (o). Case 6 is 0 and new Case 11 pays 23. Declining spouse. NOTE at :70-73 (398-2.1(l)). Post-entry couples. Cases 3 and 4 are relabelled "a small non-institutional facility", and new Cases 9 and 10 use separate marital units: SSI 994 and ny_ssp 405 and 694 each. Untested readings. Added the age-18 boundary (Case 36) and a married 17-year-old (Case 37). Skipped the household-of-another $700 case and the $1,600 couple case "because each needs an income inside a $23 or $104 band". That reason doesn't hold, because both are plain inputs (Suggestion 3).
Suggestion 7: polish Fixed except the blank lines (declined with a reason) Done: the chart references in downstate_counties.yaml, both premium files and couple.yaml drop "#page 1-2" and link #page=1; ny_ssp.py cites 398-2.1, 398-3.4 and 398-4.2; ny_ssp_is_minor has defined_for = StateCode.NY; integration Case 7 asserts spm_unit_benefits: 15_024, so dropping ny_ssp from spm_unit_benefits.py now fails a test. individual.yaml keeps "#page 1-2", which is right, because its NONE row rests on footnote 5 on PDF p. 2. Blank lines: the two before metadata: stay. They are a harmless formatting artifact, accepted as in #10174, #10001, #10156 and #10157.

New findings

Critical (must fix)

None.

Should address

1. A claimant who is in foster care is left out of their own household count, so the living-alone test inverts.

  • Where: ny_ssp_living_arrangement.py:59-62:

    household_member = ~person("is_in_foster_care", period) & ~in_facility
    alone = person.household.sum(household_member) == where(
        joint, person.marital_unit.sum(household_member), 1
    )

    The test compares the household count against 1 (or the couple's count), so it assumes the claimant counts themselves. A claimant with is_in_foster_care doesn't. Members in a facility don't reach this line, because the excluded and medical branches route them first. So the gap is only foster care.

  • The rule. 18 NYCRR 398-4.5:

    • (a): "Living alone means living in a private household composed of one SSP-eligible individual or one SSP-eligible couple."
    • (a)(1)(vi), "lives with only a foster child", describes the claimant's housemates. The claimant here is the foster parent.
    • (b): living with others covers a person who "resides in a dwelling with others and prepares food in common with at least one other person in the dwelling".
  • Probe at the head (2026-01, a 19-year-old who meets the SSI disability criteria and isn't a student, so not a minor):

    Household Arrangement ny_ssp Correct
    Foster youth and one foster parent LIVING_ALONE 87 LIVING_WITH_OTHERS, 23
    Same, without the foster flag LIVING_WITH_OTHERS 23 23
    Foster youth living alone (supervised independent living) LIVING_WITH_OTHERS 23 LIVING_ALONE, 87
    Foster youth and two foster parents LIVING_WITH_OTHERS 23 23 (right by accident)
  • Reach. New York keeps youth in foster care to 21, and a foster youth under 22 who is a full-time student is a minor (LIVING_WITH_OTHERS either way). So the error needs an aged, blind or disabled claimant who is 18 or older, not a student, and flagged is_in_foster_care. That flag is input-only (it is not among the inputs the microdata populates), so national totals are unaffected. New York CCAP and HEAP: read the State Supplement Program after it merges #10239's HEAP plan would inherit the count.

  • Fix: count the claimant whatever their own flags. I applied this in a scratch copy of the head:

    household_member = ~person("is_in_foster_care", period) & ~in_facility
    # The claimant always counts themselves, whatever their own flags.
    self_excluded = ~household_member
    alone = person.household.sum(household_member) + self_excluded == where(
        joint, person.marital_unit.sum(household_member) + self_excluded, 1
    )
    • With the patch, the foster youth with one foster parent gets LIVING_WITH_OTHERS and 23, and the youth living alone gets LIVING_ALONE and 87. The foster parent in that household is LIVING_ALONE, as (a)(1)(vi) provides.
    • All 53 cases still pass.
    • Add a case with the foster youth and one foster parent, expecting [LIVING_WITH_OTHERS, LIVING_ALONE] and ny_ssp: [23, 0].

Suggestions

1. Case 40 pins the federal model's deeming for a spouse in a nursing home, and its comment states it as law.

  • Where: ny_ssp.yaml:529-553. The comment reads: "the deemed income rules out the personal needs allowance (18 NYCRR 398-3.2(d))". Update 2023 tax brackets  #1777's "Readings to encode" lists Case 40 under the personal needs allowance.
  • What the model does. is_ssi_spousal_deeming_applies doesn't look at the facility. It deems $980 a month to the resident, so countable income is 980, SSI is 0 and there is no SSPNA.
  • The federal rule.
    • 20 CFR 416.1160(a)(1): "If you live in the same household with your ineligible spouse, we look at your spouse's income to decide whether we must deem some of it to you."
    • 20 CFR 416.1167(a)(2): entering a medical treatment facility is a temporary absence only while the person "[is] eligible for either benefit payable under § 416.212".
    • A resident on the $30 reduced benefit for full months isn't on a 416.212 temporary absence. So the spouse's income isn't deemed: SSI is $30, countable income is 0, and 398-3.2(d) allows the $25.
  • At the head with separate marital units: no deeming, SSI [30, 0] and ny_ssp [25, 0].
  • Why a suggestion. The cause is the federal deeming variable, as with the declining spouse. The New York code is right given its inputs.
  • Fix:
    • Either relabel Case 40 as pinning the federal model's deeming, with a NOTE citing 416.1160(a)(1) and 416.1167(a)(2), or enter the spouses as separate marital units and expect [25, 0].
    • Note it in Update 2023 tax brackets  #1777 and in a federal issue for is_ssi_spousal_deeming_applies.

2. With one marital unit, a spouse whose partner is in an excluded setting gets a quarter of the couple supplement.

  • Where: Case 41 (ny_ssp.yaml:555-572) asserts only the arrangement, [NONE, LIVING_ALONE].
  • What the head pays. The federal model still computes these spouses as a couple (SSI 745.50 each). The helper averages the two members' couple rates (0 and 104), so the spouse at home gets 26. The same happens when the partner has ny_ssp_care_setting: EXCLUDED.
  • What the readings give. 26 matches no reading:
    • As individuals (398-2.1(l): an eligible couple must "live together in the same residence"), the spouse at home lives alone and gets 87. The documented workaround, separate marital units, gives this.
    • As a couple, the spouse's half of the couple supplement is 52.
  • Documentation. ny_ssp_care_setting's documentation does say "Use separate marital units for a spouse living apart in an excluded setting", which is why this is a suggestion.
  • Fix: compute the spouse at home as an individual when the other spouse's arrangement is NONE or a facility row. Otherwise, assert ny_ssp: [0, 26] in Case 41 with a comment pointing to the workaround.

3. The two skipped readings don't need tuned incomes (optional).

Both are plain inputs. I ran them at the head:

  • Household of another, $700 a month of Social Security (social_security_retirement: 8_400 with the three one-third-reduction inputs):
    • countable income 680, SSI 0;
    • ny_ssp 5.67 = 23 − (680 − 662.67).
  • A couple living alone where one spouse has $1,600 a month (social_security_retirement: 19_200):
    • countable income 790 each, SSI 0;
    • ny_ssp 7.50 each = (1,595 − 1,580) / 2.

4. Two small additions to the axiom line and #1777.

  • The facility bar. The code applies SSL § 209(1)(d) and 398-4.2(b) (ny_ssp.py:109-117), and Update 2023 tax brackets  #1777 lists 398-4/2.yaml, but the axiom line names neither. Add "209(1)(d)" and "398-4.2(b)".
  • Update 2023 tax brackets  #1777 updates:
    • Record Case 40's federal premise (Suggestion 1).
    • After the Should 1 fix, note under "Living alone" that the claimant always counts themselves.

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.

    • The keyed variable. ny_ssp_living_arrangement is gated (defined_for = StateCode.NY) and defaults to NYSSPLivingArrangement.NONE. amount/individual.yaml keys all eight enum members, including NONE: 0 and both renamed facility rows. So the masked default and every select result hit a valid key.

    • Nothing else is used as a key.

      • couple.yaml is no longer indexed by the enum; it is read only as .LIVING_ALONE and .LIVING_WITH_OTHERS.
      • ny_ssp_care_setting (gated, default NONE) and ny_ssp_is_minor (now gated, bool) are only compared.
      • The personal needs parameters are read by attribute, and np.isin reads the county list.
    • Reproduced at the head (policyengine-core 3.32.29; each person has their own units):

      Population Result
      New York and Massachusetts aged singles, 2026-01 Arrangement LIVING_ALONE, NONE; ny_ssp [87, 0]
      The same pair, 2026 spm_unit_benefits [15,024, 15,429.84], household_state_benefits [1,044, 1,545.84], household_net_income [15,675, 15,429.84]; each equals its single-state simulation, and 15,024 matches integration Case 7
      A downstate New York family-care resident, a California resident also given ny_ssp_care_setting: FAMILY_CARE, and a Pennsylvania single, 2027-01 Arrangement FAMILY_CARE, NONE, NONE; ny_ssp [266.48, 0, 0]
      A New York nursing-home resident, a New Jersey single and a New York OPWDD resident, 2026-01 ny_ssp [25, 0, 5]
    • CI evidence. The jobs that caught Add New Hampshire state supplementation for 2026 #10156 pass on this head: Microsimulation and Rest (Python, shard-1 + variables).

  • The couple congregate-care rates against the statute.

    • The rule. SSL § 209(2)(c)-(e) sets each couple standard at "two times the amount set forth in subparagraph (i)", the individual standard.
    • The math. The supplement is 2 × (individual FBR + increment) − couple FBR. For 2026 that gives the chart's couple column on PDF p. 1: 1,029.96, 953.96, 1,367, 1,307 and 1,885.
    • At the head. The rates hold in 2015, 2020 and 2025, as shown in the status table, and a downstate residential-care couple gets 683.50 each in 2026 (2,858 − 1,491 = 1,367).
    • The 2027 reading. The increments stay fixed while the FBR rises. That assumes § 209(2)(f)'s pass-through continues, which is the pattern of every year since 2014.
  • The deeming reading against Part 398. 398-2.1 and 398-4.4:

    • (ac): "The State benefit rate is equal to the State standard of need for the recipient's applicable State Living Arrangement minus the FBR or a recipient's monthly Countable Income, whichever is greater."
    • 398-4.4(b): "The monthly SSP benefit amount equals the State benefit rate minus the greater of the FBR or countable income."
    • (o): "The FBR is the maximum amount of SSI payable to an individual or couple with no countable income." For a claimant with an ineligible spouse, that is the individual FBR.
    • (g): countable income "is all of a person's income ... which is not excluded by federal law or regulation in determining eligibility for SSI". Deemed income counts.
    • Ziming's reading. He subtracts once, since a literal double subtraction would pay nobody. He uses the claimant's own FBR (662.67 in another's household, under 20 CFR 416.1131(a)) and counts deemed income. That reading is defensible.
    • Effect. The override applies only where is_ssi_spousal_deeming_applies. Elsewhere the helper's taper is unchanged and equals 398-4.4(b) for non-deemed claimants.
    • Probe: an ineligible spouse with $750 a month of Social Security and a claimant in another's household gives countable income 730, SSI 264 and ny_ssp 0 (23 − 67.33).
  • The personal needs allowance against 398-3.2 and 398-3.4.

    • The rule. 398-3.2 requires "(b) be in active receipt of SSI benefits; ... (d) have no countable income, earned or unearned, other than the federal SSI benefit". The code's ssi > 0 & ssi_countable_income == 0 matches.
    • The (c) conflict. 398-3.2(c) ("reside in a residential health care facility regulated under article 28") conflicts with 398-3.4's $5 tier. The Update 2023 tax brackets  #1777 source-conflict comment records it, and following § 209(2-a) and 398-3.4 is the better reading.
    • No state payment in a facility. The new no_standard step (ny_ssp.py:109-117) zeroes the payment for NONE and both facility rows before the minimum. That implements § 209(1)(d) and 398-4.2(b), "a resident of a medical facility which is receiving medical assistance for the individual at a level exceeding 50 percent", including under the deeming override.
  • The care setting and living arrangement.

    • Selection order (ny_ssp_living_arrangement.py:64-84): excluded, then OPWDD/OMH (only with Medicaid paying most), then a residential health care facility, then the three care levels, then living with others, with living alone as the default.
    • Excluded routes. EXCLUDED, any facility without Medicaid paying most (chart footnote 5) and an OPWDD/OMH setting without it (Case 23) all give NONE.
    • Exceptions. (a)(1)(vi) and (a)(2)(ii) ("unless the minor child is a foster child") are right for a foster parent: a couple with a foster child gets LIVING_ALONE and 52 each in my probe. The same exclusion misfires for a foster youth claimant (Should 1).
  • New and changed expectations, checked by hand. The 2026 FBRs are $994 for an individual and $1,491 for a couple.

    • Integration Case 2: 2 × (994 + 228.48 + 38) − 1,491 = 1,029.96, or 514.98 each.
    • Integration Case 3: 2 × 1,399 − 1,491 = 1,307, or 653.50 each.
    • Integration Case 4: 2 × 1,688 − 1,491 = 1,885, or 942.50 each.
    • Integration Case 6: 1,017 − max(994, 1,530) < 0, so 0.
    • Integration Cases 9 and 10: separate marital units, so SSI 994 each and the individual rates 405 and 694.
    • Integration Case 11:
      • 16,640 / 12 = 1,386.67, above $497, so deeming applies;
      • (1,386.67 − 20 − 65) / 2 = 650.83;
      • SSI 1,491 − 650.83 = 840.17;
      • ny_ssp 1,017 − max(994, 650.83) = 23.
    • Integration Case 7: 11,928 + 1,044 + 2,052 = 15,024. My probe gives the same.
    • ny_ssp.yaml Case 18: SSI 30, countable 0, the default facility, so 25.
    • Case 19: the OPWDD/OMH setting with Medicaid paying most gives 5.
    • Case 23: the same setting without Medicaid paying most is excluded, so 0.
    • Case 35: EXCLUDED with Medicaid paying most gives NONE, SSI 30 and 0.
    • Case 36: 18 is not below 18, and the person isn't a student, so not a minor: LIVING_ALONE, 87.
    • Case 37: married under the SSI spouse test, so not a minor (398-2.1(t)); the 19-year-old spouse isn't one either.
    • Case 38: the foster child is left out of the count, so the 70-year-old lives alone (87). The child is a minor, so LIVING_WITH_OTHERS, and isn't ABD, so 0.
    • Case 39: one spouse in a Medicaid facility turns off the couple computation (20 CFR 416.414(b)(3)), so SSI [30, 994] and ny_ssp [25, 87].
    • Case 42: the 45-year-old in a facility is left out, so the 70-year-old gets 87.
  • The main merge. It brought in 59 commits. Two touch SSI inputs that ny_ssp reads:

    No New York case sets either input.

  • Unchanged from round 1:

    • _ssi_state_supplement.py (blob 5e0c84da3f);
    • the wiring: all four household_state_benefits blocks, HUD and SNAP unearned income, spm_unit_benefits.py and programs.yaml (partial, verified_years: '2026', prefix gov.states.ny.otda.ssp);
    • the changelog fragment.

    ny_ssp is still not an SSI income source (20 CFR 416.1124(c)(2)), so there is no circularity or double count. No stale NURSING_FACILITY or OTHER_MEDICAL_FACILITY reference remains.

  • Tests:

    • Locally (policyengine-core 3.32.29): the two New York files at the head pass, 53 of 53.
    • In CI: Quick Feedback ran the same files: 42 and 11 passed.

Axiom line assessment

Valid: axiom: N.Y. Soc. Serv. Law § 209(2), (2-a), (3), (4); 18 NYCRR 398-2.1, 398-3.2, 398-3.4, 398-4.4, 398-4.5, 398-4.6(c) TheAxiomFoundation/rulespec-us#1777 queued.

  • Issue state.
    • The PR author filed Update 2023 tax brackets  #1777 on 2026-10-15. It is open, labelled pe-parity, and is the only New York SSP issue. A search for "New York supplement" finds only Update 2023 tax brackets  #1777.
    • rulespec-us main (d8511cca76) still has no module: us-ny/regulations/18-nycrr/ holds only Parts 385 and 387, us-ny/statutes/ only NYC and TAX, and us-ny/policies/otda/ only snap and tanf-state-plan-2024-2026. So queued is the right form.
  • Dispatch-ready on the Add AMT parameters for 2020-2023 #1467 model. It has the same sections as California CARE Eligibility #1769 and Update value of OASDI MTE for 2023 #1771, which earlier rounds accepted.
    • Module paths:
      • us-ny/statutes/SOS/209.yaml;
      • 398-2/1, 398-3/2, 398-3/4, 398-4/2, 398-4/4, 398-4/5 and 398-4/6;
      • the 2026 chart as us-ny/policies/otda/ssp/2026-maximum-monthly-benefit-levels.yaml.
    • The recorded blocker. Each row is marked "needs ingest", because Part 398, SSL 209 and the chart are in no axiom-corpus manifest. The issue names L.2026 ch.56 Part L § 2 as the 2026 session-law source.
    • Verbatim law. I checked these quotes against LII; they match apart from elisions:
      • 398-2.1(g), (l), (o), (t) and (ac);
      • 398-3.2(b) and (d), and 398-3.4;
      • 398-4.4(b)-(c);
      • 398-4.5(a)(1)(vi), (a)(2), (b), (d) and (e).
    • Required outputs. Six rows: standard of need, living arrangement, minor child, the medical-facility bar, SSP (with the 209(4) form and the deeming form) and SSPNA.
    • Companion tests A–N take their values from the chart, § 209 and Part 398, not from PolicyEngine output. Each mapping matches a case name at the head, for example K → Case 35, M → integration Case 11 and N → integration Case 6. E and F have no PolicyEngine case, which is acceptable.
    • Source-conflict comment. It records four conflicts: deeming (SSA, statute and regulation), which facilities get the $5, the month of entry, and the SSPNA income test. Each names the reading the PR takes and the case that pins it.
  • Matches the head: the variable names, the 42 / 11 case counts, the computed couple rates, the regulation deeming reading and the $25 default.
  • Gaps (Suggestion 4):
    • the axiom line omits 209(1)(d) and 398-4.2(b);
    • Update 2023 tax brackets  #1777 cites Case 40, whose premise is federal (Suggestion 1);
    • "Living alone" should say the claimant always counts themselves once Should 1 is fixed.

CI status

25 pass, 1 fail (infrastructure), 1 pending (gh pr checks 10158; run 38761388089 on head 03a3fc2200, pull_request, 2026-10-15).

  • The failure is infrastructure, not the PR.
    • Baseline (household) ran for 19 minutes and stopped in marginal_tax_rate.yaml with "The runner has received a shutdown signal" and "Process completed with exit code 143".
    • No test in its log failed (no F or E result).
    • A re-run should clear it.
  • Still pending: Rest (Python + variables). It is the job that held test_every_state_with_a_claimed_spouse, one of Add New Hampshire state supplementation for 2026 #10156's failures. My mixed-state probes give no reason to expect a failure, but it hadn't finished when I checked.
  • Passed:
    • PR validation, and Package and compatibility;
    • Quick Feedback (the two New York files);
    • the other 10 Baseline shards and all 9 Contrib shards;
    • Microsimulation and Rest (Python, shard-1 + variables);
    • Household API Partners.
  • Partner tests: the PR touches none.

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.

Requesting changes for 1 should item; details in the round-2 report above. All three round-1 should items are fixed. rulespec-us#1777 is ready for the encoder, the descriptions follow the house template, and the PR body is current. The FBR-derived couple care rates, the deeming fixes, the $25 personal needs allowance default and the new care-setting input all check out. The NH-sibling bug doesn't occur here (NY+MA, NY+CA+PA and NY+NJ simulations run cleanly), and 53 of 53 tests pass. Should 1: the living-alone count at ny_ssp_living_arrangement.py:59-62 leaves out a claimant who is in foster care. Example: a disabled 19-year-old foster youth with one foster parent gets LIVING_ALONE $87 instead of $23, and one actually living alone gets $23 instead of $87. Fix: count the claimant themselves (verified in scratch; all 53 cases still pass), and add a case. CI note: the Baseline (household) failure is a runner shutdown (exit 143), not a test failure; re-run it.

hua7450 and others added 2 commits October 20, 2026 00:34
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A claimant in foster care now counts as living with others when they share a home, and as living alone when they don't (18 NYCRR 398-4.5). Family care residents and members in another care setting no longer end living alone. Relabel Cases 40 and 41 and add Cases 43-48.

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

hua7450 commented Oct 20, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks, David. The fixes are in 5927d59, after a merge of main (00d658c).

Should 1 (claimant in foster care): fixed. The living-alone count now looks only at a person's housemates, never the person themselves, so a claimant's own foster status no longer matters (ny_ssp_living_arrangement.py).

  • A foster youth with one foster parent lives with others, and the parent lives with only a foster child ((a)(1)(vi)). New Case 43 gives [LIVING_WITH_OTHERS, LIVING_ALONE] and ny_ssp [23, 0].
  • A foster youth living by themselves lives alone. New Case 44 gives 87.
  • The same line also counted members whose care setting puts them outside the private household. Housemates in an excluded setting, family care, residential care or enhanced residential care no longer end living alone, which also covers (a)(1)(viii), "lives with only a family care resident". So the separate-marital-unit entry in the ny_ssp_care_setting documentation now works. New Case 45 (a spouse in an excluded setting) gives [NONE, LIVING_ALONE] and [0, 87]; it gave 23 before. New Case 48 pins (a)(1)(viii): a claimant living with only a family care resident gives [LIVING_ALONE, FAMILY_CARE] and [87, 228.48], and the variable's documentation now says a family care resident counts through their own care setting.
  • One edge follows the literal (a)(1)(vi): two foster youths who share a home with no foster parent now each live alone (87). It needs the input-only foster flag and is rare, so it has no case.

Suggestion 1 (Case 40): took the second option. Case 40 now enters the nursing-home resident and the ineligible spouse at home as separate marital units, with a comment citing 20 CFR 416.1160(a)(1), 416.1167(a)(2) and 416.212. It asserts SSI [30, 0] and ny_ssp [25, 0] (398-3.2(d), 398-3.4).

Suggestion 2 (Case 41): took the second option. Case 41 now asserts SSI [745.5, 745.5] and ny_ssp [0, 26], with a known-limitation comment pointing to separate marital units (Case 45).

  • I didn't compute the spouse at home as an individual in ny_ssp.py. The federal model still pays the pair as a couple (745.50 each), so an individual supplement on top (832.50) would match neither reading: 1,081 as individuals or 797.50 as a couple. The cause is ssi_couple_computation_applies, which is outside this PR.
  • The assertion also makes Case 41 the case that pins the 209(1)(d) bar. Without the bar, the resident would get 26.

Suggestion 3 (the two skipped readings): added both, with your figures:

  • Case 46, household of another with $700 a month of Social Security: countable income 680, SSI 0 and ny_ssp 5.67 (685.67 − 680).
  • Case 47, a couple living alone with $1,600 a month: SSI 0 and ny_ssp 7.50 each ((1,595 − 1,580) / 2).

Suggestion 4 (axiom line and rulespec-us issue):

CI (Baseline household): agreed, a runner shutdown. I didn't rerun it; this push starts a new run.

The main merge: it brings in the 2027 COLA (#10225). The derived 2027 congregate care couple rates are now 485.48 each for rest-of-state family care and 951.00 each for enhanced care, in place of the 483.94 and 949.46 in your report. No 2026 result changes.

On the merged head, the 59 New York cases pass locally (48 in ny_ssp.yaml and 11 in integration.yaml), as do the aggregate list integrity and program registry tests (692 passed, 10 skipped).

@hua7450
hua7450 requested a review from DTrim99 October 20, 2026 05:40
@DTrim99 DTrim99 mentioned this pull request Oct 20, 2026
4 of 5 tasks
@DTrim99

DTrim99 commented Oct 20, 2026

Copy link
Copy Markdown
Collaborator

PR Review (round 3): Add New York state supplementation for 2026

PR #10158 (author: hua7450). This round reviews head 5927d594c4; round 2 reviewed 03a3fc2200. Two commits landed in between:

Summary

Ziming fixed the round-2 should item and acted on all four suggestions:

  • The should item. The count now leaves out the person themselves. That is algebraically the same test as round 2's patch. New Case 43 pins the foster youth with one foster parent at [LIVING_WITH_OTHERS, LIVING_ALONE] and ny_ssp [23, 0], and Case 44 pins a foster youth living alone at 87.
  • A wider fix. Housemates in a care setting no longer end living alone. As a result:
    • the documented separate-marital-unit workaround now works for a spouse in an excluded setting (Case 45; round 2's head gave 23);
    • 398-4.5(a)(1)(viii) now applies to family care residents without an override (Case 48).
  • The suggestions.
    • Case 40 now uses separate marital units and pays the $25.
    • Case 41 pins the one-unit result of 26, with a known-limitation comment.
    • Cases 46 and 47 add the two state-only readings.
    • The axiom line adds 209(1)(d) and 398-4.2(b), and Update 2023 tax brackets  #1777 matches the head.
  • The merge. All four hand resolutions are correct: each keeps main's side and adds only the ny_ssp line. The 2027 COLA changes no 2026 result, and the derived 2027 couple congregate-care rates follow § 209(2)(c)-(e).

CI is 27/27 green on the head. Two optional suggestions remain. Montana's SSP has since merged to main, so the branch now conflicts with main in three shared lists (branch note).

Prior findings status

Finding Status Evidence
Round-2 Should 1: a claimant in foster care was left out of their own household count Fixed The code. ny_ssp_living_arrangement.py:62-69 defines housemate = ~is_in_foster_care & ~in_facility & (care == NONE). It then sets housemates = household.sum(housemate) − housemate, spouse = marital_unit.sum(housemate) − housemate and alone = housemates == where(joint, spouse, 0). Round 2's patch added the person's self-exclusion to both sides; subtracting the person's own flag from both sides is the same test, plus the new care-setting term. The tests. Case 43 (a disabled 19-year-old foster youth who isn't a student, and a 45-year-old foster parent) expects [LIVING_WITH_OTHERS, LIVING_ALONE] and ny_ssp [23, 0], exactly as round 2 asked. Case 44 (a foster youth living alone) expects LIVING_ALONE and 87. Both pass in CI. The body. It now says "Living alone counts only a person's housemates, never the person themselves."
Round-2 Suggestion 1: Case 40 pinned the federal model's deeming for a nursing-home spouse Fixed (second option) The case. Case 40 now enters the spouses as separate marital units, with a comment citing 20 CFR 416.1160(a)(1), 416.1167(a)(2) and 416.212. It expects ssi [30, 0] and ny_ssp [25, 0], and its name now ends "receives the personal needs allowance". #1777 records the federal premise under "Personal needs allowance". Federal follow-up. The fix to is_ssi_spousal_deeming_applies is outside this PR. Ziming's correction holds. With one marital unit, the deeming override already gave 0, because the facility row's individual rate is 0. So Case 40 never exercised the 209(1)(d) bar.
Round-2 Suggestion 2: with one marital unit, the spouse of a partner in an excluded setting got 26 Fixed (second option; code change declined with a reason, accepted) The case. Case 41 now asserts ssi [745.5, 745.5] and ny_ssp [0, 26], with a known-limitation comment pointing to separate marital units (Case 45). The reason. The federal model still pays the couple 745.50 each. Adding the individual 87 would give 832.50, which matches neither reading: 994 + 87 = 1,081 as individuals, or 745.50 + 52 = 797.50 as a couple. The cause is ssi_couple_computation_applies, which is outside this PR. That holds. The bar. Case 41 now pins the 209(1)(d) bar: without no_standard, the helper's couple averaging would pay the resident 26 as well.
Round-2 Suggestion 3: the two skipped readings don't need tuned incomes Fixed Case 46 (household of another, $700 a month of Social Security) expects ssi_countable_income 680, ssi 0 and ny_ssp 5.67. Case 47 (a couple living alone, $1,600 a month) expects ssi [0, 0] and ny_ssp [7.5, 7.5]. Both match round 2's probes; the hand checks are below.
Round-2 Suggestion 4: additions to the axiom line and #1777 Fixed The line now reads "§ 209(1)(d), (2), (2-a), (3), (4); ... 398-4.2(b) ...". #1777: it quotes 209(1)(d)(i)-(iii) and 398-4.2(b) and records Case 40's federal premise. Its "Living alone" entry says only housemates count, never the claimant, and calls Case 41's 26 a PolicyEngine-US limitation.
Round-1 items (3 should, 7 suggestions) Closed in round 2 Nothing in this round reopens them. The two deferrals, #10226 and #10239, are still open. tx_rebate.py still goes straight from "fl_oss" to "ks_sspp" (lines 65-66), as in the sibling PRs.

New findings

Critical (must fix)

None.

Should address

None.

Suggestions

1. Record the reading for two foster youths who share a home (optional).

  • What the head does. Two foster youths who share a home with no foster parent each count zero housemates, so each lives alone and gets 87. Ziming's reply says so and grounds it in the literal 398-4.5(a)(1)(vi), "lives with only a foster child".
  • The other reading.
    • (a) defines living alone as "a private household composed of one SSP-eligible individual or one SSP- eligible couple".
    • (a)(2)(iv) excludes anyone who "resides in a dwelling with others and prepares food in common with at least one other person in the dwelling".
    • (a)(1)(vi) sits alongside the foster-child exception in (a)(2)(ii), so it most naturally describes a foster parent.
    • On this reading, two foster youths who share food live with others and get 23 each.
  • Why optional. The case needs the input-only is_in_foster_care flag on two adult claimants who are aged, blind or disabled and have no other housemate. The literal reading is also defensible.
  • Fix. Record the reading in a line of the comment at ny_ssp_living_arrangement.py:57-61 and in Update 2023 tax brackets  #1777's "Living alone" entry. To follow (a)(2)(iv) instead, count every housemate, foster or not, when the person is in foster care themselves.

2. One parenthetical in the PR body (optional).

The body says "Separate marital units give the correct result (ny_ssp.yaml Cases 40, 41 and 45)". But only Cases 40 and 45 use separate units; Case 41 uses one unit and pins the 26. Something like "(Cases 40 and 45; Case 41 pins the one-unit result)" would be exact.

Verified

  • The four hand resolutions (merge 00d658c3d8). Against main's parent c39af98694, each resolved file differs only by the ny_ssp line:

    • HUD unearned: ny_ssp after nv_oss. main's nj_ssp, pa_ssp, wy_ssp, nc_sa_countable_for_hud and nv_oss are kept.
    • SNAP unearned: ny_ssp between nv_oss and pa_ssp, in alphabetical order.
    • programs.yaml: the New York entry, unchanged from round 2, after North Carolina's. The NJ, PA, WY and NC entries are kept.
    • spm_unit_benefits.py: "ny_ssp" after "nc_sa", with the four sibling entries kept.
    • The automatic merge: household_state_benefits.yaml has - ny_ssp under "# New York benefits" in all four blocks (2023–2026).
    • No loss or duplication. No entry is dropped or duplicated, and CI's aggregate-list and registry tests pass.
  • What the main merge changes for New York.

    • The shared helper. _ssi_state_supplement.py is blob 5e0c84da3f at both heads and on main, and the federal minimum_payment.yaml is unchanged too. Pay CO, TX and NM SSI supplements to both members of an SSI couple #10145 touches neither; it changes the CO, TX and NM variables.

    • No New York parameter is uprated, so Update Social Security and SSI parameters for the 2027 COLA #10225 moves only the FBRs. Every 2026 expectation is unchanged.

    • 2027 against § 209(2)(c)-(e). The couple standard stays two times the individual standard, the pattern 2026 followed: 2025 amounts plus $27 per individual, so plus $54 for congregate-care couples. With FBRs of $1,029 and $1,544:

      • family care, rest of state: 2 × (1,029 + 228.48) − 1,544 = 970.96, or 485.48 each (Ziming's figure);
      • family care, downstate: 2 × 1,295.48 − 1,544 = 1,046.96, or 523.48 each;
      • residential care: 1,324 (662 each) in the rest of the state, and 1,384 (692 each) downstate;
      • enhanced residential care: 2 × 1,723 − 1,544 = 1,902, or 951.00 each (Ziming's figure).

      The other supplements stay at 87, 23, 104 and 46. 2027 remains an unverified projection until OTDA publishes its 2027 chart; the registry claims only 2026.

    • Countable income. Document disjoint health premium inputs and correct consumer treatment #10046 and Integrate modeled state unemployment insurance into income flows #9558 were already in round 2's base. New York's countable income is federal by definition: 398-2.1(g) counts income "which is not excluded by federal law or regulation in determining eligibility for SSI". So ssi_countable_income, which nets pre-tax premiums under POMS SI 00820.102, is right here. Oklahoma's gross-wage rule (Add Oklahoma state supplementation for 2026 #10165) has no New York counterpart.

  • The new count against 398-4.5.

    • (a)(1) treats as living alone a person who "(vi) lives with only a foster child" or "(viii) lives with only a family care resident placed by: the New York State Office of Mental Health (OMH), the New York State Office for Persons with Developmental Disabilities (OPWDD), or a district". The care == NONE term covers (viii) through FAMILY_CARE.
    • (a)(2): a person isn't living alone if "(i) the individual lives with an ineligible spouse" or "(ii) the individual or couple lives with a minor child for whom they have primary responsibility (unless the minor child is a foster child)". An ineligible spouse still counts as a housemate, and without a couple computation the count is compared with 0. So integration Cases 5, 6 and 11 still give living with others: Case 5 pays 23, Case 6 asserts the arrangement, and Case 11 pays 23.
    • (b)(1): living with others includes a person who "resides in a dwelling with others and prepares food in common with at least one other person in the dwelling". That is Case 43's foster youth.
    • Other care settings. Members in a residential, enhanced, OPWDD/OMH or excluded setting don't live in the private household, so leaving them out is right.
  • The Case 40 citation. Under 20 CFR 416.1167(a)(2), a temporary absence occurs when "You enter a medical treatment facility and are eligible for either benefit payable under § 416.212." The comment paraphrases it accurately.

  • New and changed expectations, checked by hand. The 2026 FBRs are $994 and $1,491.

    • Case 40.
      • With separate units there is no deeming. The resident gets the $30 reduced SSI with no countable income.
      • The resident's arrangement is RESIDENTIAL_HEALTH_CARE_FACILITY, so no_standard gives 0 and the allowance gives 25.
      • The spouse is 63 and not disabled, so SSI and ny_ssp are 0. The resident is out of the count, so the spouse is LIVING_ALONE.
    • Case 41.
      • The couple computation applies, so SSI is 1,491 / 2 = 745.50 each.
      • Medicaid doesn't pay most of the resident's care, so the resident is NONE.
      • The spouse at home has 0 housemates against a spouse count of 0, so LIVING_ALONE.
      • The couple rates are 0 and 104, so the spouse gets (0 + 104) / 4 = 26, and the bar zeroes the resident.
    • Case 43.
      • The youth is 19 and not a student, so not a minor (398-2.1(t)).
      • The youth has 1 − 0 = 1 housemate against 0, so LIVING_WITH_OTHERS. SSI is 994, so ny_ssp is 23.
      • The parent has 1 − 1 = 0 housemates, so LIVING_ALONE. The parent isn't aged, blind or disabled, so 0.
    • Case 44: 0 housemates, so LIVING_ALONE and 87.
    • Case 45.
      • The EXCLUDED spouse is NONE, so 0.
      • The other spouse has 0 housemates and no couple computation, so LIVING_ALONE and 87. Round 2's count gave 23.
    • Case 46.
      • 700 − 20 = 680, which exceeds 662.67 (994 × 2/3), so SSI is 0.
      • Living with others (398-4.5(b)(6)): 662.67 + 23 = 685.67, the chart's row F total.
      • 685.67 − 680 = 5.67, above the $1 minimum.
    • Case 47.
      • 1,600 − 20 = 1,580, which exceeds 1,491, so SSI is 0.
      • The couple standard is 1,491 + 104 = 1,595, the chart's row A total. (1,595 − 1,580) / 2 = 7.50 each.
      • Each spouse's only housemate is the other spouse, so both are LIVING_ALONE.
    • Case 48.
      • The family care resident is out of the count, so the 70-year-old is LIVING_ALONE and gets 87.
      • The 40-year-old is FAMILY_CARE outside the downstate counties, so 228.48.
  • The New Hampshire bug pattern still doesn't occur. This round adds no variable and no parameter key. The new term only compares ny_ssp_care_setting (gated, default NONE) with an enum member. Round 2's mixed-state reproduction still covers the keyed lookups. The jobs that caught Add New Hampshire state supplementation for 2026 #10156 (Microsimulation and both Rest (Python) jobs) pass on this head.

  • Wiring at the head is unchanged:

    • all four household_state_benefits blocks;
    • spm_unit_benefits.py;
    • SNAP and HUD unearned income;
    • programs.yaml (partial, verified_years: '2026').

    ny_ssp is still not an SSI income source.

  • The body. "59 New York YAML cases: 48 in ny_ssp.yaml and 11 in integration.yaml" matches the collected cases. The care setting's documentation says "Use separate marital units for a spouse living apart in an excluded setting", and Case 45 shows that this now works.

  • Changelog. changelog.d/ny-ssp-2026.added.md is unchanged, top-level and typed added.

  • Tests. I ran nothing locally, since CI is green on this head. Quick Feedback ran the touched files: ny_ssp.yaml 48 passed and integration.yaml 11 passed.

  • Partner tests. The PR touches none, and Household API Partners passes.

Axiom line assessment

Valid: axiom: N.Y. Soc. Serv. Law § 209(1)(d), (2), (2-a), (3), (4); 18 NYCRR 398-2.1, 398-3.2, 398-3.4, 398-4.2(b), 398-4.4, 398-4.5, 398-4.6(c) TheAxiomFoundation/rulespec-us#1777 queued.

  • Issue state.
    • Update 2023 tax brackets  #1777 is open and labelled pe-parity. It was last updated on 2026-10-20 at 05:39 UTC, with this round's changes. A search for "New York supplement" still finds only Update 2023 tax brackets  #1777.
    • rulespec-us main (5796861e58) still has no module. us-ny/regulations/18-nycrr/ holds only Parts 385 and 387, us-ny/statutes/ only NYC and TAX, and us-ny/policies/otda/ only snap and tanf-state-plan-2024-2026. So queued is still the right form.
  • Dispatch-ready. Round 2 confirmed the module paths, the "needs ingest" blockers, the verbatim law, the six required outputs and companion tests A–N. Since then, the 209.yaml row lists "(1)(d) facility bar", and the verbatim section adds 209(1)(d) and 398-4.2(b).
  • Matches the head:
    • the case counts (48 and 11);
    • every case name the issue cites, all of which exist at the head (Cases 1–3, 5, 6, 9–11, 18–21 and 35, and integration Cases 6 and 11);
    • the housemate-only count, pinned by Cases 38, 39, 41–45 and 48;
    • Case 40's federal premise and Case 41's limitation.
  • Source conflicts. The four in the first comment (2026-10-15) are unchanged and still match. Suggestion 1's reading could go under "Living alone".

CI status

27 pass, 0 pending, 0 failed (run 39375864951 on head 5927d594c4, pull_request, 2026-10-20 05:37–09:21 UTC).

  • Passed:
    • PR validation, and Package and compatibility;
    • Quick Feedback;
    • Household API Partners;
    • Microsimulation;
    • both Rest (Python) jobs, including Rest (Python + variables), which was still pending in round 2;
    • all 11 Baseline shards, including household, which a runner shutdown stopped in round 2;
    • all 9 Contrib shards.

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 3; details in the report above. Round 2's should item is fixed: the living-alone count now covers only housemates, so a claimant in foster care is no longer left out. Cases 43 and 44 pin both directions ($23 and $87), and the wider fix also makes the separate-unit workaround work for an excluded spouse (Case 45). All four suggestions are addressed or reasonably declined, and #1777 matches the head with 209(1)(d) and 398-4.2(b) added. The four hand resolutions in merge 00d658c are correct, and the 2027 COLA changes no 2026 result. All 8 new or changed expectations check by hand, and CI is 27/27 green. Branch note: Montana #8233 landed on main after this head and causes 3 conflicts (HUD, programs.yaml, spm_unit_benefits.py); keep both lines. Two optional suggestions are in the report.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

New York SSI State Supplement

2 participants