Skip to content

Add New Jersey state supplementation for 2026 - #10157

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

hua7450 merged 7 commits into
mainfrom
nj-ssp-2026

Conversation

@hua7450

@hua7450 hua7450 commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

What and why

New Jersey's optional SSI supplement was missing from PolicyEngine-US. Add nj_ssp with the verified 2026 rates for each New Jersey living arrangement code, including the special rate for a recipient who lives only with an ineligible spouse.

The calculation uses the shared SSI state supplement helper (_ssi_state_supplement.py, identical to the copy in the sibling state SSP PRs). It handles the income reduction, couple halving, spouse-to-spouse deeming, SSA cent rounding and the $1 minimum. Under deeming it uses the higher individual rate, because New Jersey's individual rates exceed its couple rates in codes B and C. The supplement follows SSI eligibility and take-up, because SSA pays it with the federal benefit. Add it to household and SPM benefit totals and to SNAP and HUD unearned income.

Some situations need explicit inputs:

  • a couple who buys food separately from others at the same address, or lives only with foster children;
  • certified congregate care and residential health care settings;
  • spouses who claim as individuals after the month they enter a facility.

Every rate except the Medicaid-facility rate includes New Jersey's Lifeline utility payment. #10230 tracks counting the supplement net of the Lifeline in New Jersey LIHEAP.

The files live under gov/states/nj/njdhs/ssp, next to New Jersey's other Department of Human Services programs.

References

Coverage limits

The registry marks New Jersey as partial, verified for 2026. Mandatory grandfathered supplementation is not modeled. Earlier years use parameter backfilling and are unverified historical estimates; #8764 tracks earlier rates, and no historical rate coverage is claimed.

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

Test plan

  • 37 New Jersey YAML cases: 17 in nj_ssp.yaml, 11 in nj_ssp_living_arrangement.yaml and 9 in integration.yaml. They cover:
    • every arrangement code and the exclusions, including a disabled child living with parents;
    • the income phaseout, rounding and the $1 minimum;
    • couples, including deeming in codes B and C;
    • a congregate care couple in a small household-scale facility, and spouses paid as individuals after entering a facility;
    • annual benefit, SNAP, HUD and spm_unit_benefits integration.
  • After merging main: the 37 New Jersey cases and 243 federal SSI cases pass locally, and the aggregate list integrity and program registry tests pass (677 passed, 10 skipped).
  • ruff format and git diff --check.
  • Changelog fragment in changelog.d/.

axiom: POMS SI 01415.058 J; SI NY01415.025; SI 01320.430 D TheAxiomFoundation/rulespec-us#1771 queued

hua7450 and others added 3 commits October 12, 2026 14:19
…ation

- Registry placement and comments, SNAP reference title, shorter programs.yaml note
- Lowercase POMS anchor; document the C couple placeholder, mixed-arrangement averaging and the ineligible-spouse limitation
- Realistic ages and incomes in existing cases; couple-with-income and living-arrangement precedence tests

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

DTrim99 commented Oct 13, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Add New Jersey state supplementation for 2026

PR #10157 (author: hua7450, head 64c0d3ea64, merge-base 2e9eea7e6e). 16 files (+781/−4), 3 commits.

Summary

The PR adds New Jersey's federally administered optional State Supplementary Payment (SSP):

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

      OS code Arrangement Individual Couple
      B Living alone or with others 31.25 25.35
      C Living only with an ineligible spouse 152.99 25.35 (commented placeholder; no couple rate exists)
      A Certified congregate care 150.05 618.35
      I Certified residential health care 210.05 738.35
      D Household of another 44.31 93.08
      G Medicaid institution 20.00 40.00
      Z No supplement 0 0
    • The shared federal gov.ssa.ssi.state_supplement.minimum_payment of $1.

  • Variables:
    • nj_ssp_care_setting (Person, MONTH, input only): certified congregate care, certified residential health care, excluded setting, or none.
    • nj_ssp_living_arrangement (Person, MONTH). It maps the federal living arrangement and the care setting to the OS codes. Code C applies when the marital unit holds an SSI-ineligible spouse and makes up the whole household.
    • nj_ssp (Person, MONTH), computed by the shared helper variables/gov/ssa/ssi/_ssi_state_supplement.py. The helper handles the income reduction, couple halving, SI 01320.430 deeming, SSA rounding and the $1 minimum.
  • Aggregates and registry:
    • household_state_benefits (all four year blocks), spm_unit_benefits, SNAP unearned income and HUD unearned income.
    • A programs.yaml entry (partial, verified_years: "2026").
  • Tests: 34 YAML cases: 16 in nj_ssp.yaml, 11 in nj_ssp_living_arrangement.yaml and 7 in integration.yaml.

The 2026 policy content is right:

  • Amounts. All 13 nonzero rate cells match POMS SI 01415.058 J.2, January 2026. The code definitions match J.1 and New Jersey's regional instruction, SI NY01415.025.
  • Rules the code follows correctly:
    • Code C ("ONLY their ineligible spouse and NO other persons"), with an explicit-input route for the separate-household and foster-child exceptions.
    • The Z exclusions and the Title XIX G rate.
    • Federal administration, so SSA rounding and the $1 floor apply.
    • SSA's rule for the two states, New Jersey and Washington, whose individual rate exceeds the couple rate (SI 01320.430 C.7, D.2.c).
  • Couple rounding. POMS J.2.b footnote 1 explains the half-penny and the rounding up, which supports the 12.68-per-spouse result.
  • Tests and CI. All 34 expectations check by hand and pass at the head. CI is green and the branch merges cleanly with main.

Two should-fix items remain:

  1. The axiom: needed line isn't valid for a staff PR that adds a program.
  2. The two rate-file descriptions don't follow the house template.

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>. It also says: "If you are an external contributor and cannot complete the Axiom work, use axiom: needed; a maintainer will follow up."
    • The author is PolicyEngine staff, so needed doesn't apply.
    • 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.
  • 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: POMS SI 01415.058 J; SI NY01415.025; SI 01320.430 D TheAxiomFoundation/rulespec-us#NNNN queued. The issue needs:
    • Module paths, mirroring the DE and DC modules:

      • us-nj/policies/ssa/poms/si-01415-058/2026/nj-ssp-living-arrangement-variations.yaml
      • us-nj/policies/ssa/poms/si-01415-058/2026/nj-ssp-individual-state-supplement-levels.yaml
      • us-nj/policies/ssa/poms/si-01415-058/2026/nj-ssp-couple-state-supplement-levels.yaml
      • us-nj/policies/ssa/poms/si-ny01415-025/nj-oss-codes.yaml for the code C household rule, the foster-child exception and the post-entry couple rule
    • Corpus citations. The statutory basis SSA gives is N.J.S.A. 44:7-86.

    • Verbatim law, quoted under Verified correct:

      • the J.1 definitions of codes A, B, C, D, I, G and Z, and the J.1 Lifeline NOTE
      • the J.2.a and J.2.b rows and J.2.b footnote 1
      • the SI NY01415.025 code C paragraph
      • SI 01320.430 C.7 (with its NOTE) and D.1–D.3
    • Required outputs (Person, monthly):

      • the rate table by OS code
      • a Judgment for code C: lives only with an ineligible spouse (foster children allowed) and no other household member
      • a Judgment for the Z exclusions
      • Money: max(0, rate − max(0, countable − FBR))
      • the deeming rule: the lesser of the individual computation and max(couple rate, individual rate) − excess over the couple FBR
      • SSA rounding and the $1 floor
    • Companion tests from the same source (POMS J.2 totals):

      Case SSP Total payment
      B individual, no income 31.25 1,025.25
      C individual with an ineligible spouse, no income 152.99 1,146.99
      D individual, household of another 44.31 706.98
      I individual 210.05 1,204.05
      G individual, Title XIX facility 20.00 50.00
      B couple 25.35 (12.68 per member under footnote 1) 1,516.35
      A couple 618.35 2,109.35

2. The two rate-file descriptions don't follow the house template.

  • Where:
    • parameters/gov/states/nj/dhs/ssp/amount/individual.yaml:1: "New Jersey provides these monthly state supplementary payment rates for an eligible individual."
    • parameters/gov/states/nj/dhs/ssp/amount/couple.yaml:1: the same, "for an eligible couple".
  • The template: "one sentence, spell the program out fully (no acronyms), [State] [verb] ... under the [Full Program Name] program."
    • Neither file has the "under the ... program" clause.
    • The sibling SSP parameters on main all do:
      • ga/dhs/ssp/amount.yaml: "Georgia provides this amount as the monthly supplement under the State Supplementary Payment program."
      • The breakdown-by-arrangement files de/dhss/ssp/amount/individual.yaml and .../couple.yaml: "Delaware provides this amount as the individual State Supplementary Payment under the State Supplementary Payment program."
    • Add Pennsylvania state supplementation for 2026 #10167 (Pennsylvania) got the same finding for the same two files.
  • Fix:
    • individual.yaml: "New Jersey provides these amounts as the monthly individual payment under the State Supplementary Payment program."
    • couple.yaml: the same with "couple".
    • The federal minimum_payment.yaml description is acceptable as written.

Suggestions

  1. Amounts before 2021 (deferral documented in the PR body and New Jersey SSI 2017, 2018, 2019 #8764).
    • The deferral. The PR body says "Parameter backfilling does not establish verified historical coverage", programs.yaml claims only verified_years: "2026", and New Jersey SSI 2017, 2018, 2019 #8764 ("New Jersey SSI 2017, 2018, 2019") is open.
    • The leak. Every value is dated only 2026-01-01, so each one carries back to 2015. The probe at the head gives a Medicaid-facility single a nj_ssp of 20 for 2015-01, 2016-01 and 2018-01.
    • What SSA paid. The POMS January charts show:
      • SI 01415.047 (Jan 2015) through SI 01415.050 (Jan 2018): "D | G | All | 30.00 | 10.00 | 40.00" (individual) and "60.00 | 20.00 | 80.00" (couple)
      • SI 01415.051 (Jan 2019) onward: 20.00 and 40.00
      • C at 153.00 and couple levels of 618.36 / 25.36 / 738.36 / 93.09 through SI 01415.052 (Jan 2020)
      • 152.99 and .35 / .08 from SI 01415.053 (Jan 2021)
    • Size of the error.
      • The model overstates the Medicaid-facility supplement by $10 per person per month for 2015–2018. The January charts don't show the exact 2018 month of the change.
      • After each half is rounded, the one-cent differences matter only for code C (153.00 against 152.99) and the code D couple (46.55 against 46.54 per member).
      • Every other row has been unchanged since at least 2015, so 2021–2025 are already right.
    • Essential persons. The essential-person C row ("w/EP", 25.36 / 25.35) appears through the January 2024 chart and is gone from January 2025. The unmodeled grandfathered piece no longer matters for 2026.
    • Fix: widen New Jersey SSI 2017, 2018, 2019 #8764 to 2015–2020, covering the G step and the one-cent changes.
  2. The Texas rebate reform's copy of spm_unit_benefits now omits nj_ssp.
    • Where: reforms/states/tx/rebate/tx_rebate.py:53-127 redefines spm_unit_benefits nationwide with a hard-coded list. It lacks nj_ssp, and it already lacks ca_state_supplement.
    • Probe at the head: a New Jersey aged SSI-only single in 2027.
      • spm_unit_benefits is 13,777.01 at baseline and 13,402.01 under the reform, a drop of exactly the $375 nj_ssp.
      • spm_unit_net_income falls by the same amount.
      • household_net_income is unchanged at 14,428.01.
    • Fix: insert "nj_ssp", # New Jersey 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 and Add Pennsylvania state supplementation for 2026 #10167.
  3. Pin the couple and deeming readings with tests.
    • Congregate-care couples after the month of entry.
      • The rule. The SI NY01415.025 NOTE under codes A and I: "When a couple enters a Level 2 facility, they will usually get the couple FBR and couple OSS D for the month of change only. After that, they are treated as two individuals, since couple status can exist only in households, not institutions ... In such small scale 'household' (i.e., non-institutional) Level 2 facilities, couple status can continue."
      • What the PR pins. Integration Case 2 (integration.yaml:23, "Case 2, congregate care couple") pins the joint result: nj_ssp [309.18, 309.18], with SSI of 745.50 each. That is right only in the month of entry or in a small facility.
      • Probe at the head with separate marital units: SSI 994 and nj_ssp 150.05 each. That matches J.2.a, "A | A | All | 994.00 | 150.05 | 1144.05".
      • Fix: rename Case 2 to say it is the month of entry, and add the separate-claim case.
    • Deeming in code B.
      • The rule. New Jersey's code B individual rate (31.25) also exceeds the couple rate (25.35), so SI 01320.430 C.7's "greater of" applies outside code C too.
      • Probe at the head: an aged recipient, a 40-year-old spouse with $24,300 of Social Security, and a 12-year-old child.
        • Deemed countable income is 1,508: 2,025 − 497 (child allocation) − 20.
        • The excess over 1,491 is 17, so SSI is 0.
        • nj_ssp is 14.25 = 31.25 − 17, not the 8.35 the couple rate would give.
      • That result is correct but untested. Add it to integration.yaml.
    • An aged, blind or disabled spouse who declines SSI or is otherwise ineligible.
      • The rule. SI NY01415.025, code C: "An ineligible spouse for State supplementation purposes is determined by using Federal criteria, i.e., a spouse, either by marriage or holding out who is either ineligible for SSI or who chooses not to apply."
      • What the model does. is_ssi_ineligible_spouse keys only on aged/blind/disabled status, so the model treats such a couple as joint.
      • Probe: two people aged 65 and over, where the spouse has takes_up_ssi_if_eligible: false, get SSI [745.50, 0] and nj_ssp [12.68, 0]. The rule gives 994 + 152.99.
      • Fix. The PR's NOTE (nj_ssp.py:22-25) documents this, and the cause is the federal ssi_claim_is_joint / is_ssi_ineligible_spouse. An upstream follow-up issue is the right place to fix it.
  4. New Jersey LIHEAP counts the SSI check, which now includes nj_ssp, net of the Lifeline payment.
    • The source.
      • FY2027 LIHEAP Handbook, PDF p. 11: "For individuals receiving SSI, the PARTNERING AGENCY or other non-profit agency shall deduct the supplemental payment amount from the Tenant's Lifeline Credit program, which is included in the SSI check. The balance shall be considered as income to the household."
      • The FY2026 handbook says the same on PDF p. 10.
    • What the Lifeline is.
      • POMS J.1 NOTE: "All State Supplement payments, except for medicaid facilities, include a Lifeline payment which is a utility assistance program for older people and people with disabilities that offers an annual benefit amount for individuals who receive SSI."
      • N.J.S.A. 48:2-29.18 and 48:2-29.34(b) (LIHEAP Clearinghouse compilation): for SSI recipients the payment "shall consist of a special State utility supplement to the Supplementary Security Income program and shall be made in 12 monthly installments".
      • 48:2-29.17 sets "$225.00" and says "No household shall receive more than one annual credit". That is $18.75 a month, and its half (9.375) is the half-penny in J.2.b footnote 1.
    • What the model does. nj_liheap_countable_income_person counts ssi (nj/dca/liheap/income/sources/unearned.yaml:10) but not nj_ssp.
      • Probe: an aged single has countable income of 11,928, where the handbook gives 11,928 + 375 − 225 = 12,078.
      • The variable's documentation (nj_liheap_countable_income_person.py:25) says "The SSI variable carries no Tenants Lifeline supplement". That stays true of ssi, but the Lifeline now lives in nj_ssp.
    • Why this is a suggestion, unlike Pennsylvania's PTRR finding:
      • LIHEAP pays by monthly income band, and income_band.yaml's own comment says the two lowest bands differ in only one FY2027 renters cell.
      • The omitted amount is small: $12.50 a month in code B, if the individual rows carry the full $18.75, and $134.24 in code C.
      • Only a household just below a band edge moves. A near-edge probe (code C, spouse earning $12,000, $1,994 a month counted) shifts from band 1 to band 2 only when the non-Lifeline $134.24 is added.
      • POMS doesn't print the Lifeline share of the individual rows, so the fix needs a sourced parameter.
    • Fix:
      • Add a Lifeline parameter: $225 a year per household, under N.J.S.A. 48:2-29.17 and 48:2-29.33.
      • Count max(nj_ssp − Lifeline share, 0) in NJ LIHEAP, excluding code G, and update the documentation sentence.
      • Note in nj_ssp's documentation that every row except G includes the Lifeline.
    • Related. NJ CCAP's unearned_sources.yaml lists ssi from CCDF plan 2.2.4c and may warrant the same treatment. rulespec-us#1481 (the NJ LIHEAP draft) should carry the deduction.
  5. Two folders now exist for the New Jersey Department of Human Services.
    • The PR creates gov/states/nj/dhs/ssp, while main already keeps NJ CCAP under gov/states/nj/njdhs/ccap (parameters and variables).
    • The batch convention (pa/dhs, ga/dhs) favors dhs, so keeping dhs is reasonable. Either note a follow-up to rename njdhs to dhs, or move the SSP into njdhs and update parameter_prefix.
  6. Polish.
    • Blank lines. The PR adds a stray blank line before metadata: in household_state_benefits.yaml (line 412) and in hud/annual_income/sources/unearned.yaml (line 33). Neither relates to New Jersey.
    • Case count. The PR body says "22 source-based YAML cases". The PR has 34 (16 + 11 + 7).
    • Anchors.
      • amount/individual.yaml and amount/couple.yaml title the reference "J.2" but link #j, which opens the J.1 definitions. Point them at #j2a (individual) and #j2b (couple), which both exist.
      • The PR body's SI 01320.430 link ends #D, but POMS anchors are lowercase (#d).
    • References.
      • The second reference on both rate files, SI 01320.430 D, supports the method, not the amounts. It already sits on nj_ssp.py, so it can move there.
      • nj_ssp_living_arrangement.py cites only SI NY01415.025. Add SI 01415.058 J.1 (#j1), which defines the codes.
      • nj_ssp.py cites no state authority. SSA gives "Statutory basis for payment: New Jersey Statutes Annotated, 44:7-86."
    • spm_unit_benefits wiring isn't asserted. Integration Case 7 asserts SNAP, HUD and household_state_benefits, but removing nj_ssp from spm_unit_benefits.py would pass every test.

Verified correct

  • Rates. POMS SI 01415.058 J.2, "effective January 1, 2026":
    • J.2.a, individual:
      • "A | A | All | 994.00 | 150.05 | 1144.05"
      • "A | B | All | 994.00 | 31.25 | 1025.25"
      • "A | C | Individual | 994.00 | 152.99 | 1146.99"
      • "A | I | All | 994.00 | 210.05 | 1204.05"
      • "B | D | All | 662.67 | 44.31 | 706.98"
      • "C | B | All | 994.00 | 31.25 | 1025.25"
      • "D | G | All | 30.00 | 20.00 | 50.00"
    • J.2.b, couple:
      • "A | A | All | 1491.00 | 618.35 | 2109.35"
      • "A | B | All | 1491.00 | 25.35 | 1516.35"
      • "A | I | All | 1491.00 | 738.35 | 2229.35"
      • "B | D | All | 994.00 | 93.08 | 1087.08"
      • "D | G | All | 60.00 | 40.00 | 100.00"
    • Footnote 1 (couple rows A, B, I and D): "This amount is the total of the federal payment, the state supplement amount, and the lifeline payment. When added together and divided in half for each member of the couple, the result includes a half penny. The total is rounded up to accommodate system processing." That supports 12.675 → 12.68 per member. SSA's 2011 table printed the couple B level as 25.36, which is 2 × 12.68.
  • Codes (J.1):
    • C: "Use OS code C when a recipient lives with ONLY their ineligible spouse and NO other persons are part of the household ... If other persons, even minor children, are present in the household, you cannot apply this OS code ... There is no couple counterpart in this category."
      • The no_others household-size test and the commented C couple placeholder match.
      • The placeholder never binds: an explicit-C joint couple gets the B-equal 12.68, and under deeming the code uses max(25.35, 152.99).
    • B: "any child meeting the criteria for a Federal code C is automatically entitled to optional supplement B". Probe: a disabled 10-year-old living with parents gets nj_ssp 31.25.
    • Z: "in licensed medical facilities where Medicaid is paying less than 50 percent of the cost of care; in publicly operated community residences having 16 or less residents; and residing throughout a month in publicly operated emergency shelters", plus children in facilities paid by private health insurance. The other_medical branch and the EXCLUDED input cover this, and they take precedence over G.
    • I: "We must base our authorization for this payment on the recipient's verified residence at a facility listed in the New Jersey Congregate Care Directory." That makes the input-only care setting correct.
  • The regional instruction (SI NY01415.025):
    • "In this instance, an OSS C is permissible as long as no other person is in their household" (separate food purchase and preparation).
    • "An individual living alone only with an ineligible spouse and foster child(ren) will also qualify for the OSS C rate (effective 7/1/90)."
    • Both are routed through the explicit nj_ssp_living_arrangement input, which is documented and pinned by integration Case 6.
  • Administration.
    • SI NY01415.025 A: "Since the beginning of the SSI Program, SSA has administered Optional State Supplement (OSS) payments on behalf of New Jersey."
    • SSA, State Assistance Programs for SSI Recipients, January 2011, New Jersey:
      • "Optional State Supplementation. Administration: Social Security Administration. Effective date: January 1, 1974. Statutory basis for payment: New Jersey Statutes Annotated, 44:7-86."
      • "Scope of coverage: Optional state supplement provided to all aged, blind, and disabled recipients, including children, except those in publicly operated community residences or facilities where Medicaid pays less than 50 percent of the cost of care."
    • So the helper's default federal_payment_rules=True (SSA rounding and the $1 floor of 20 CFR 416.2020(c)) is right.
  • Deeming. SI 01320.430:
    • D.1.b: "use the full OSS for an individual, or the OSS for an individual with an ineligible spouse, in those States which provide such an OSS."
    • D.2.c: "However, if the State has an individual supplement rate (including a special rate for an eligible individual living with an ineligible spouse) which is greater than the State supplement for an eligible couple, use the higher individual State supplement."
    • D.3.b: "The State supplement amount is the lesser of" the two.
    • C.7 NOTE: "Currently, only the States of New Jersey and Washington have a higher OSS rate for an eligible individual than for an eligible couple."
    • The helper's own_payment, deemed_payment = max_(couple_rate, individual_rate) − excess and min_ mirror these steps. Integration Case 4 pins 13.99, and code B gives 14.25 (Suggestion 3).
  • Couples in a Medicaid facility. Probe: SSI 30 and nj_ssp 20 each, which matches J.2.b's "60.00 | 40.00 | 100.00".
  • Counted for SNAP. 7 CFR 273.9(b)(2)(i) (LII) counts "supplemental security income (SSI) ... or other assistance programs based on need".
    • The Lifeline share counts too. (c)(11) excludes only energy assistance "under any Federal law" and "A one-time payment or allowance ... for the costs of weatherization or emergency repair or replacement of an unsafe or inoperative furnace". New Jersey's monthly state-law Lifeline is neither.
    • The SNAP reference consolidation follows main's one-entry-per-document rule.
  • Kept out of SSI income. nj_ssp isn't in the SSI income sources, so there is no circularity, and no double count with ssi, which is federal only.
  • Code:
  • Hand checks: all 34 expectations. The 2026 FBR is $994 for an individual and $1,491 for a couple.
    • nj_ssp.yaml:
      • Cases 1–3: 31.25, 150.05 and 210.05.
      • Case 4: an excluded setting gives 0.
      • Case 5: SSI 30 and nj_ssp 20.
      • Case 6: a non-Medicaid facility gives 0.
      • Case 7: 44.31.
      • Case 8: 12,360 / 12 = 1,030; 1,030 − 20 = 1,010; 1,010 − 994 = 16; so 31.25 − 16 = 15.25, with SSI 0.
      • Case 9: 12,540 / 12 = 1,045; 1,045 − 20 = 1,025; the excess of 31 leaves 0.25, raised to 1.
      • Case 10: 12,543 / 12 = 1,045.25; 1,045.25 − 20 = 1,025.25; the excess of 31.25 leaves 0.
      • Cases 11–15: resources of 2,001, age 30, Ohio and no take-up each give 0; the disabled child gets 31.25.
      • Case 16: 18,240 / 12 = 1,520; 1,520 − 20 = 1,500, or 750 each; 750 − 745.50 = 4.50; 12.675 − 4.50 = 8.175, rounded up to 8.18.
    • integration.yaml:
      • Case 1: 25.35 / 2 = 12.675, rounded up to 12.68.
      • Case 2: 618.35 / 2 = 309.175, rounded up to 309.18.
      • Case 3: [152.99, 0].
      • Case 4:
        • 19,800 / 12 = 1,650, above 497, so deeming applies
        • 1,650 − 20 = 1,630, and the excess over 1,491 is 139
        • nj_ssp is min(152.99, 152.99 − 139) = 13.99, and SSI is 0
      • Case 5: with a child in the household, code B pays 31.25.
      • Case 6: the explicit C input pays 152.99.
      • Case 7: 12 × 31.25 = 375; SNAP and HUD unearned income are 11,928 + 375 = 12,303.
    • nj_ssp_living_arrangement.yaml: all 11 enum expectations follow the select order: exclusion, Medicaid institution, A, I, D, C, then B.
  • Changelog: changelog.d/nj-ssp-2026.added.md is top-level, typed added, and accurate.
  • Registry:
    • The programs.yaml entry sits under ssi_state_supplement.state_implementations with the WA/MO fields.
    • partial fits the unmodeled grandfathered supplementation and the input-only settings. parameter_prefix resolves.

Batch checks

  1. Axiom line: invalid (needed). rulespec-us has no NJ SSP module or issue (Should 1).
  2. Parameter descriptions: amount/individual.yaml and amount/couple.yaml are off-template (Should 2). The federal minimum_payment.yaml is acceptable.
  3. Backdating:
    • The Medicaid-facility G rate leaks $20 / $40 back to 2015–2018, where POMS shows $10 / $20.
    • Code C and the code D couple are a cent off through 2020.
    • 2021–2025 are right. This is a documented deferral (New Jersey SSI 2017, 2018, 2019 #8764), so Suggestion 1.
  4. tx_rebate.py copy: it omits nj_ssp; the probe shows spm_unit_benefits down $375 (Suggestion 2).
  5. Aggregate wiring:
    • spm_unit_benefits, all four household_state_benefits blocks, HUD, SNAP and programs.yaml are present.
    • There is no double count with ssi.
    • New Jersey's own LIHEAP counts the non-Lifeline SSP, but the effect is band-limited (Suggestion 4).
  6. Income attribution:
    • It uses SSA countable income: couples combined and halved, SSP-only reduction, and SI 01320.430 deeming with the higher individual rate, pinned by integration Case 4.
    • Code-B deeming and post-entry congregate-care couples are correct but unpinned (Suggestion 3).
    • An aged, blind or disabled spouse who declines SSI is treated as joint, a documented limitation inherited from federal SSI (Suggestion 3).
  7. Sibling conflicts:
  8. CI: all 26 checks pass on head 64c0d3ea64, with no failing job.
  9. State law first:
    • All 2026 rows match POMS SI 01415.058 J.2 (individual and couple).
    • The code definitions match J.1 and SI NY01415.025.
    • Federal administration (effective 1974) and the 2026-01-01 effective date match SSA's NJ description and the chart.
    • All 34 expectations check by hand.

Axiom line assessment

Invalid (Should 1).

CI status

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

  • The run. Run 38367904210 (pull_request, 2026-10-13 08:14 UTC) on head 64c0d3ea64, conclusion success.
  • Main since then. In the files this PR touches, main has changed only unemployment_compensation → total_unemployment_compensation in the shared income lists and tx_rebate.py, plus three programs.yaml lines (the California entry). The only other New Jersey change is unrelated (nj_medical_expense_deduction.py). None of it affects this PR's logic.
  • Local run. The three new test files at the head with policyengine-core 3.33.2: 34 passed.
  • Partner tests. The PR touches no partner test files, and the Household API Partners job passes.

Branch status

Verdict: REQUEST_CHANGES

@DTrim99 DTrim99 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 2026 policy is correct: all 13 rate cells match POMS SI 01415.058 J.2, the living-arrangement codes match J.1, the SI 01320.430 deeming is right, and all 34 YAML cases check by hand. Two should items (see the comment above): (1) 'axiom: needed' isn't valid for a staff PR adding a program; no NJ SSP module exists in rulespec-us, so file a dispatch-ready pe-parity issue and add a queued line; (2) the individual.yaml and couple.yaml descriptions are off the template.

hua7450 and others added 4 commits October 14, 2026 16:42
…ferences, add tests

- Move parameters, variables and tests from nj/dhs/ssp to nj/njdhs/ssp, the
  existing New Jersey Department of Human Services folder.
- Rate-file descriptions follow the template; references point to J.2.a and
  J.2.b; SI 01320.430 D stays on nj_ssp only.
- Cite SI 01415.058 J.1 on the living arrangement and SSA's New Jersey program
  description (statutory basis N.J.S.A. 44:7-86) on nj_ssp.
- Note the higher individual rate under deeming for codes B and C, and the
  Lifeline payment in every rate except G (issue 10230).
- Integration: Case 2 is the month of entry; Case 7 asserts spm_unit_benefits;
  Case 8 pays congregate care spouses as individuals after entry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…bled child case

- Integration Case 2 pays the couple congregate care rate, which SI NY01415.025
  keeps only in small household-scale facilities; the month of entry gets the
  couple OSS D and is not modelled.
- Integration Case 6's explicit code C applies to a couple living only with a
  foster child.
- nj_ssp Case 17: a disabled child living with parents gets code B.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Integration Case 9: a spouse earning the New Jersey cashier median and a child
in the household. Below the couple FBR, deeming pays the full 31.25 individual
rate, not the 25.35 couple rate (SI 01320.430 D.2.c).

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

hua7450 commented Oct 14, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks, David. The fixes are in e02eacf, 61f4392 and 8aefd6c, with a merge of main (a25d7ed) after the first.

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

  • your module paths and the corpus citations;
  • verbatim J.1, J.2.a and J.2.b with footnote 1, SI NY01415.025, and SI 01320.430 C.7 and D.1–D.3;
  • the required outputs;
  • companion tests mapped to the cases.

The axiom line now points to it.

Should 2 (descriptions): both rate files now read "New Jersey provides this amount as the monthly individual (couple) payment under the State Supplementary Payment program."

Suggestion 1 (earlier years): history is out of scope for this PR, as for the other state SSP PRs, and programs.yaml claims only 2026. #8764 stays the place for earlier rates.

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 (couple and deeming readings):

  • Congregate care couples: integration Case 2 is renamed to a small household-scale facility, not the month of entry. The SI NY01415.025 NOTE gives the couple "couple OSS D for the month of change only", and couple status continues only in small non-institutional facilities; the month of entry isn't modelled. New Case 8 puts the same spouses in separate marital units, as after the month of entry: SSI 994 and nj_ssp 150.05 each.
  • Code C with a child present: integration Case 6 forced code C with a 12-year-old in the household, which POMS allows only for a foster child. It is renamed to say the child is a foster child.
  • Disabled child with parents: new nj_ssp.yaml Case 17 pins your probe: federal code C, code B, SSI 994 and nj_ssp 31.25.
  • Code B deeming: new integration Case 9. It has an aged recipient, a spouse earning the New Jersey cashier median ($34,590, BLS OEWS May 2025) and a 12-year-old.
    • Countable income is 34,590 / 12 − 497 − 20 − 65, halved: 1,150.25.
    • SSI is 340.75.
    • nj_ssp is the full 31.25, where the couple rate would give 25.35.
    • Below the couple FBR any deemed income pays the full 31.25, so no tuned income is needed.
    • A NOTE in nj_ssp.py states the reading (SI 01320.430 D.2.c).
  • A spouse who chooses not to apply: this stays as the existing NOTE in nj_ssp.py. It comes from the federal ineligible-spouse logic.

Suggestion 4 (LIHEAP and the Lifeline): filed #10230. It will make New Jersey LIHEAP count nj_ssp net of the Lifeline, with a Lifeline parameter from N.J.S.A. 48:2-29.17, and check CCAP too. It needs this PR first. nj_ssp.py now notes that every rate except G includes the Lifeline.

Suggestion 5 (two folders): the SSP moved to gov/states/nj/njdhs/ssp, next to CCAP and WFNJ, and parameter_prefix is updated.

Suggestion 6 (polish):

  • Anchors: the rate files link #j2a and #j2b, and the PR body's SI 01320.430 link uses #d.
  • References:
    • SI 01320.430 D is now only on nj_ssp.py.
    • nj_ssp_living_arrangement.py cites J.1 (#j1).
    • nj_ssp.py cites SSA's New Jersey program description, which gives N.J.S.A. 44:7-86 as the statutory basis. I couldn't reach a current copy of the statute itself, because Justia and FindLaw block automated access.
  • spm_unit_benefits: integration Case 7 now asserts 13,443. That is SSI 11,928 + nj_ssp 375 + SNAP 1,140 at New Jersey's $95 minimum.
  • Case count: the PR body now gives 37.
  • I kept the blank lines before metadata:. They come from our formatting pass and are harmless.

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

@DTrim99

DTrim99 commented Oct 15, 2026

Copy link
Copy Markdown
Collaborator

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

PR #10157 (author: hua7450). This round reviews head 8aefd6ce83; round 1 reviewed 64c0d3ea64. Four commits landed in between:

  • e02eacf694, the review-response commit (9 files, +55/−15 with renames). It moves the program from nj/dhs/ssp to nj/njdhs/ssp, rewrites both rate descriptions and fixes their references, and adds four NOTEs, integration Case 8 and the spm_unit_benefits assertion;
  • a merge of main at 8ae01aa3cb (a25d7ed070). Its tree is identical to an automatic merge, so it has no hand edits;
  • 61f4392d39, which relabels integration Cases 2 and 6 and adds nj_ssp.yaml Case 17 (a disabled child living with parents);
  • 8aefd6ce83, which adds integration Case 9 (deeming in code B).

Summary

Ziming fixed both round-1 should items. The axiom line now points to rulespec-us#1771, which is open, labelled pe-parity, dispatch-ready and consistent with the head, and both rate descriptions follow the template. He fixed, documented or deferred every suggestion to a tracked issue (#8764, #10226 and the new #10230).

The New Hampshire bug pattern doesn't occur here. The New Jersey-gated arrangement variable masks non-residents to NONE, and both rate files key NONE. Two-state simulations run cleanly at the head. All 37 cases pass locally and in CI, all 27 checks are green, and the branch is 0 behind main and merges cleanly.

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: POMS SI 01415.058 J; SI NY01415.025; SI 01320.430 D TheAxiomFoundation/rulespec-us#1771 queued. The issue. #1771 is open, labelled pe-parity, dispatch-ready and consistent with the head. See the Axiom line assessment.
Should 2: the two rate-file descriptions are off-template Fixed Now. amount/individual.yaml:1 reads "New Jersey provides this amount as the monthly individual payment under the State Supplementary Payment program." amount/couple.yaml:1 is the same with "couple". Compared with round 1. This is round 1's wording, with "this amount" in place of "these amounts", which matches the Delaware and Georgia files.
Suggestion 1: values dated only 2026 leak back before 2021 Declined with a reason (documented deferral) Reason. History is out of scope for the batch, programs.yaml claims only 2026, and the PR body calls earlier years "unverified historical estimates". Still the case. A Medicaid-facility single still gets $20 for 2015–2018, where POMS shows $10. #8764. It wasn't widened: it still lists only the 2017–2019 charts and has no comments. #1771's "History (out of scope)" bullet now records the G step. See Suggestion 1.
Suggestion 2: the spm_unit_benefits copy in tx_rebate.py omits nj_ssp Declined with a reason (deferred to #10226) Reason. Ziming filed #10226 (open). It proposes one shared list that reforms append to, and it names #10157 among the PRs that rely on it. Still the case. tx_rebate.py goes from "fl_oss" (line 65) to "ks_sspp" (line 66). So a New Jersey SSI recipient loses $375 a year of SPM resources under the Texas-only reform until #10226 lands. The sibling SSP PRs get the same treatment.
Suggestion 3: pin the couple and deeming readings with tests Fixed (the declining spouse stays documented) Congregate-care couples. New integration Case 8 enters the spouses as separate marital units: SSI 994 and nj_ssp 150.05 each, matching J.2.a "A | A | All | 994.00 | 150.05 | 1144.05". Case 2 is relabelled "a small household-scale facility" instead of round 1's "month of entry", and Ziming's label is the better reading (see Verified). Code B deeming. New integration Case 9 pays 31.25, where the couple rate would give 25.35. If the helper's max_(couple_rate, individual_rate) used the couple rate alone, the case would fail. Case 4 already pins the excess subtraction (13.99). Disabled child. New nj_ssp.yaml Case 17 pins federal code C mapping to OS code B. Foster child. Integration Case 6 is relabelled to the foster-child exception. That is the only code C route with a minor present, since J.1 says "Always consider parent(s) with minor children to be in the same household and code the case OS code B". Declining spouse. It stays as the NOTE at nj_ssp.py:23-26. No upstream issue was filed, but #10138 already covers part of the gap (Suggestion 1).
Suggestion 4: NJ LIHEAP counts the SSI check net of the Lifeline, and nj_ssp isn't wired in Deferred to #10230, with the NOTE added The issue. #10230 (open) specifies the $225 Lifeline parameter (N.J.S.A. 48:2-29.17) and the max(nj_ssp − Lifeline share, 0) count, with no deduction for code G. It also covers the couple split, the documentation sentence and a CCAP check, and says it depends on this PR. The NOTE. nj_ssp.py:35-37 says every rate except the Medicaid-facility rate includes the Lifeline (J.1 NOTE).
Suggestion 5: two folders for the New Jersey Department of Human Services Fixed The move. Parameters, variables and tests now sit in gov/states/nj/njdhs/ssp, beside ccap and wfnj. Nothing left behind. git grep at the head finds no nj/dhs or nj.dhs path, and no nj/dhs folder remains in the parameter, variable or test trees. Updated paths. parameter_prefix is gov.states.nj.njdhs.ssp, the import in nj_ssp_living_arrangement.py:2 uses njdhs, and so does the parameter path in nj_ssp.py:22. The aggregates reference the variable name, so they needed no change.
Suggestion 6: polish Fixed except the blank lines (declined with a reason) Anchors. The rate files link #j2a and #j2b, and the PR body links SI 01320.430 #d. All three anchors exist on the live pages. References. SI 01320.430 D now sits only on nj_ssp.py. nj_ssp_living_arrangement.py:28-31 cites J.1 (#j1). nj_ssp.py:18 cites SSA's 2011 New Jersey description, which names N.J.S.A. 44:7-86; the statute itself couldn't be reached, which is acceptable. Case count. 37 = 17 + 11 + 9. Wiring. Integration Case 7 asserts spm_unit_benefits of 13,443, so dropping nj_ssp from spm_unit_benefits.py now fails a test. Blank lines. Those before metadata: in household_state_benefits.yaml and HUD unearned income stay. They are a harmless formatting artifact, accepted as in #10174, #10001 and #10156.

New findings

Critical (must fix)

None.

Should address

None.

Suggestions

1. Point the two remaining deferrals at their issues (optional; no change to behavior).

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 that has no key 0.

    • The arrangement variable. nj_ssp_living_arrangement is gated (defined_for = StateCode.NJ, line 25) and defaults to NJSSPLivingArrangement.NONE (line 27).

      • Both amount/individual.yaml:31-32 and amount/couple.yaml:35-36 have NONE: 0.
      • Both files key all seven enum members, so neither the masked default nor any select result can miss.
    • The other inputs.

      • nj_ssp_care_setting is not gated and is only compared, never used as a key.
      • The shared helper takes the two rates as arrays. It reads only federal scalars: gov.ssa.ssi.amount.individual, one_third_reduction_rate and state_supplement.minimum_payment (_ssi_state_supplement.py:31-37, 51).
      • No integer variable indexes any parameter in this PR.
    • Why the default matters. policyengine-core 3.32.29 runs a gated formula over the whole population once anyone passes defined_for. It then masks the result with np.where(mask, array, default_value) and converts Enum items to their index (Simulation._calculate). So non-residents reach p.individual[NONE], which is 0.

    • Reproduced at the head. Each person has their own units:

      Population Result
      New Jersey and Massachusetts aged singles, 2026-01 Arrangement LIVING_ALONE_OR_WITH_OTHERS, NONE; nj_ssp [31.25, 0]
      A New Jersey code C couple (65 and 40), a Pennsylvania single and a New York Medicaid-facility resident, 2026-01 Arrangement C, C, NONE, NONE; nj_ssp [152.99, 0, 0, 0]
      A New Jersey and a California resident, both with nj_ssp_care_setting: CONGREGATE_CARE, 2027-01 Arrangement CONGREGATE_CARE, NONE; nj_ssp [150.05, 0]
      New Jersey, Massachusetts and Pennsylvania aged singles, 2026 and 2027 Each person's household_net_income, spm_unit_benefits, household_state_benefits, SNAP, HUD unearned income and nj_ssp are identical to their single-state simulation. New Jersey's 2026 spm_unit_benefits is 13,443, as in integration Case 7.
    • CI evidence. The nine tests that failed on Add New Hampshire state supplementation for 2026 #10156 all pass on this head:

      • test_future_dated_reform_zero_impact_before_start, test_or_ctc_zero_from_2029 and both allocates_no_housing_share microsimulation tests;
      • test_no_formula_writes_into_a_cached_array for all four parameter sets;
      • test_every_state_with_a_claimed_spouse.
  • The amounts, against the live chart. POMS SI 01415.058 J.2 is now TN 95, "Effective Dates: 08/28/2026 - Present". It still shows the 2026 levels the PR encodes:

    • individual: A 150.05, B 31.25, C 152.99, I 210.05, D 44.31 and G 20.00;
    • couple: A 618.35, B 25.35, I 738.35, D 93.08 and G 40.00;
    • footnote 1's half-penny round-up.
  • The Case 2 relabel fits the regional instruction. SI NY01415.025 code A covers "an eligible individual/child/couple in Federal living arrangement (FLA) A".

    • The NOTE under codes A and I gives a couple entering a Level 2 facility "the couple FBR and couple OSS D for the month of change only". Couple status continues only "In such small scale 'household' (i.e., non-institutional) Level 2 facilities".
    • So J.2.b's A and I couple levels fit a couple in a small facility, not the month of entry, and round 1's suggested label was wrong.
    • The month of change itself isn't modelled. Update value of OASDI MTE for 2023 #1771 records it as an open reading.
  • Deeming in code B. SI 01320.430 (TN 60):

    • D.2.c: "if the State has an individual supplement rate ... which is greater than the State supplement for an eligible couple, use the higher individual State supplement".
    • D.3.b: "The State supplement amount is the lesser of" the two computations.
    • The C.7 NOTE names New Jersey and Washington.
    • Round 1's probe (an aged recipient, a 40-year-old spouse with $24,300 of Social Security and a 12-year-old) still gives 14.25 at the head.
  • Expectations checked by hand. The 2026 FBRs are $994 for an individual and $1,491 for a couple.

    • Integration Case 9:
      • Income: $34,590 / 12 = $2,882.50. Less the $497 child allocation, that leaves $2,385.50, which is above $497, so deeming applies.
      • Countable income: (2,385.50 − 20 − 65) / 2 = 1,150.25.
      • SSI: the lesser of 1,491 − 1,150.25 = 340.75 and the 994 individual amount, so 340.75.
      • nj_ssp: the own computation gives 31.25, and the deemed one gives max(25.35, 31.25) − 0 = 31.25. The lesser is 31.25.
      • The wage is a BLS OEWS figure I couldn't open, because BLS blocks automated requests. It is consistent: 16.63 × 2,080 = 34,590.40. The expected values follow from the inputs either way.
    • nj_ssp.yaml Case 17:
      • The parents are 40, with own_children_in_household, so they are ineligible parents and the child is in federal code C.
      • The parents have no income, so nothing is deemed and SSI is 994.
      • J.1: "any child meeting the criteria for a Federal code C is automatically entitled to optional supplement B". J.2.a "C | B | All | 994.00 | 31.25" gives 31.25.
    • Integration Case 8: separate marital units make each spouse an individual. SSI is 994 each, and J.2.a A/A gives 150.05 each.
    • Integration Case 7: 11,928 + 375 + 1,140 = 13,443.
      • SNAP: 994 + 31.25 = 1,025.25 a month. Less the $209 standard deduction, that is 816.25, and 30% of it rounds up to 245, so 298 − 245 = 53.
      • New Jersey's $95 minimum (gov.states.nj.snap.amount) raises that to 95, or 1,140 a year.
      • My probe gives the same 13,443.
    • Integration Case 2: 618.35 / 2 = 309.175, which rounds up to 309.18.
    • Integration Case 4: min(152.99, 152.99 − (1,630 − 1,491)) = 13.99.
    • Integration Case 6: the explicit code C input pays 152.99.
    • nj_ssp.yaml Case 5: SSI 30 and G 20.
    • nj_ssp.yaml Case 9: 31.25 − 31 = 0.25, raised to the $1 minimum.
    • nj_ssp.yaml Case 16: 12.675 − 4.50 = 8.175, which rounds up to 8.18.
  • The main merge. Since round 1, two main commits touch SSI inputs:

    No New Jersey case sets either input, and every expectation passes at the merged head.

  • Wiring at the head matches round 1:

    • all four household_state_benefits blocks;
    • HUD unearned income and SNAP unearned income;
    • spm_unit_benefits.py;
    • programs.yaml (partial, verified_years: "2026", prefix gov.states.nj.njdhs.ssp).

    nj_ssp is still not an SSI income source, so there is no circularity and no double count with ssi.

  • Tests:

    • Locally (policyengine-core 3.32.29): the three New Jersey files at the head pass, 37 of 37.
    • In CI: Quick Feedback ran the same files: 9, 17 and 11 passed.

Axiom line assessment

Valid: axiom: POMS SI 01415.058 J; SI NY01415.025; SI 01320.430 D TheAxiomFoundation/rulespec-us#1771 queued.

  • Issue state.
  • Dispatch-ready on the Add AMT parameters for 2020-2023 #1467 model. It has the same sections as Add SSDI Into MO Pension/SS/SSD Part C Formula #1766 and California CARE Eligibility #1769, which earlier rounds accepted: Encoding debt, Module paths and corpus citations, Source text (verbatim), Required outputs, Companion tests, Interpretations and gaps, and Plan.
    • Module paths. Six rows:

      • three us-nj/policies/ssa/poms/si-01415-058/2026/ modules (the codes and the individual and couple levels);
      • us-nj/policies/ssa/poms/si-ny01415-025/nj-oss-codes.yaml;
      • us-nj/statutes/44:7-86.yaml;
      • a payment module for the federal computation.

      SSA's 2011 New Jersey page is listed as a co-cited source.

    • Corpus citations. On axiom-corpus main (437198d6c3), manifests/us-ssa-poms-si-2026-09-10.yaml holds ssa-poms-si-01415-058 (the TN 95 title, expression date 2026-08-28) and ssa-poms-si-ny01415-025 (expression date 2022-09-13). The New Jersey row of manifests/ssi-agent-queue.yaml is agent_ready.

    • The recorded blocker. N.J.S.A. 44:7-86 and SSA's 2011 New Jersey page are marked "needs ingest", and each billed encoder run needs its own approval.

    • Verbatim law. I checked these quotes against the live pages; they match apart from line breaks:

      • J.1 code C, and the J.2.a and J.2.b tables with their footnotes;
      • SI NY01415.025 code C and the NOTE under codes A and I;
      • SI 01320.430's C.7 NOTE and D.2.c.
    • Required outputs. Eight rows (the two level tables, codes Z, G and C, the OS code, the per-person level and the payment), plus the payment formula, rounding and the $1 minimum.

    • Companion tests A–R take their values from the POMS levels and the FBRs, not from PolicyEngine output. Each maps to a case at the head, for example N → nj_ssp.yaml Case 17, K → integration Case 8, L → integration Case 4 and R → nj_ssp.yaml Case 16. I checked every mapping against the head's case numbers.

  • Matches the head:
    • the variable names and the gov.states.nj.njdhs.ssp parameter paths;
    • the 17 / 11 / 9 case counts;
    • the relabelled Cases 2 and 6;
    • the new Cases 8, 9 and 17.
  • Minor gap, not blocking. Integration Case 9 has no companion test. The issue records the code B deeming reading under "Interpretations and gaps", including the $0 point at a countable income of 1,522.25.

CI status

All 27 checks pass (gh pr checks 10157).

  • The run. Run 38639627718 (pull_request, 2026-10-14) on head 8aefd6ce83 passed on the first attempt.
  • What passed:
    • PR validation, and Package and compatibility;
    • Quick Feedback, which ran the three New Jersey files;
    • all 11 Baseline shards and all 9 Contrib shards;
    • Microsimulation and both Rest Python jobs;
    • Household API Partners.
  • Partner tests: the PR touches none.

Branch status

Verdict: APPROVE

@DTrim99 DTrim99 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving round 2; details in the report above. Both should items are fixed: rulespec-us#1771 is open, pe-parity and ready for the encoder (companion tests A–R mapped to cases), and both rate descriptions follow the house template. The move to nj/njdhs/ssp left nothing behind. New Cases 8, 9 (code B deeming) and 17 (disabled child) check by hand. I also checked for the NH-sibling bug (a state-gated default indexing a missing key) and it doesn't occur here: the living arrangement masks non-residents to NONE, which both rate files cover. NJ+MA, NJ+PA+NY and NJ+CA simulations run cleanly, with identical results combined vs. alone. 37 of 37 tests pass and all 27 CI checks are green. The deferrals (#10230, #10226, history) are reasonable.

@hua7450
hua7450 merged commit 342bc13 into main Oct 16, 2026
27 checks passed
@hua7450
hua7450 deleted the nj-ssp-2026 branch October 16, 2026 02:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants