Skip to content

Add Wisconsin state supplementation for 2026 - #10173

Open
hua7450 wants to merge 5 commits into
mainfrom
wi-ssp-2026
Open

hua7450 wants to merge 5 commits into
mainfrom
wi-ssp-2026

Conversation

@hua7450

@hua7450 hua7450 commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

What and why

Wisconsin's state SSI supplement was missing from PolicyEngine-US. Add wi_ssp for 2026 (Wis. Stat. 49.77 and 49.775). DHS, not SSA, pays it, and a monthly payment can have three parts.

  • Regular supplement (wi_ssp_regular; DMS Operations Memo 26-12). Any federal SSI payment brings the full state rate. The rates rise 10% on May 1, 2026:

    Arrangement Through April 2026 From May 2026
    Individual $83.78 $92.16
    Eligible couple (split between the spouses) $132.05 $145.26
    Recipient with an SSI-ineligible spouse $130.43 $143.47
    Household of another $135.05 $148.56

    Incarcerated recipients and those in a medical treatment facility are excluded, unless wi_ssp_institutional_continuation is set.

  • Exceptional Expense supplement (wi_ssi_e; SSI-E Handbook). $95.99, rising to $105.59, for a recipient certified by the county (wi_ssi_e_certified). A certified couple gets $345.36, rising to $379.90, split between the spouses. There is no SSI-E in another person's household.

  • Caretaker Supplement (wi_cts; Wis. Stat. 49.775; CTS Handbook). $275 for the first eligible child of an SSI parent and $165 for each additional child.

    • The AFDC-style filing unit is built from parent IDs, with the Buening test for a non-SSI co-parent.
    • The gross and net income tests use the Area I / Area II tables by group size, with the $90 work expense, the $30 and one-third disregards, child support paid, pregnancy allowances and the $1,000 asset limit.
    • The dependent care deduction comes only off the group's earned income left after the other disregards (45 CFR 233.20(a)(11)(i)(D), 1997 edition).
    • SSI recipients' income and assets are disregarded.
  • W-2. wi_works_eligible now excludes a unit whose custodial parents all receive SSI, in every year (Wis. Stat. 49.145(2)(i); W-2 Manual 2.2.1). Such parents may receive the Caretaker Supplement instead.

  • Inputs. All new inputs default to 0 or false, so entering one for one person leaves other household members unchanged:

    • wi_cts_tribal_area_i, for Oneida Tribe households outside the listed Area I counties;
    • wi_cts_other_qualifying_immigration_status, for statuses the immigration enum can't represent;
    • wi_cts_other_countable_resources, for Handbook 3.2.2 assets that SSI resources omit.

The supplement is added to the household and SPM benefit totals. FoodShare counts the regular supplement and the Caretaker Supplement but not SSI-E (FoodShare Handbook 4.3.4). HUD counts all of wi_ssp except SSI-E that pays a family member for home care in the assisted unit (wi_ssi_e_for_home_care).

References

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

Coverage limits

The registry marks Wisconsin as partial, verified for 2026.

Not modeled:

  • grandfathered state-only SSI recipients (Wis. Stat. 49.77(2)(a)3), so neither is their 10% May 2026 increase to a partial state payment (Memo 26-12, p. 2);
  • Huber Law childcare releases, incapacitated-adult care costs and income outside the SSI cash-income sources.

Microsimulation approximations:

  • Without parent IDs, the family is one filing unit and one SSI parent receives the whole award. Married SSI parents who each have their own child get [440, 0] instead of the handbook's 275 each (Scenario 1).
  • Without parent IDs, parenthood comes from own_children_in_household; with neither, the payment is 0.
  • Parent IDs can't tell a step-parent from a parent. Handbook 3.1.1 excludes step-parents, so a step-parent named in a child's parent IDs makes the child ineligible.
  • Groups larger than 12 need wi_cts_large_group_net_income_limit, so they get 0 by default.

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

Related:

Test plan

  • 100 Wisconsin YAML cases (53 in wi_cts.yaml, 17 in wi_ssp.yaml, 13 in wi_ssp_countable_for_hud.yaml, 10 in integration.yaml and 7 new in wi_works_eligible.yaml). They cover:
    • each regular and SSI-E rate before and after May 2026, couples and the institutional rules;
    • the Caretaker Supplement filing unit, both Buening examples and handbook Scenarios 4, 5, 7 and 8;
    • the income and asset tests, disregards, the care deduction cap, incarceration and the one-third input;
    • two households with an input on one only;
    • the W-2 exclusion with and without parent IDs;
    • SNAP, HUD and household benefit wiring.
  • After merging main: all 461 Wisconsin cases pass locally, and the aggregate list integrity and program registry tests pass (677 passed, 10 skipped).
  • ruff format and git diff --check.
  • Changelog fragments in changelog.d/.

axiom: Wis. Stat. 49.77; Wis. Stat. 49.775; Wis. Stat. 49.145(2)(i); DMS Operations Memo 26-12; CTS Handbook P-23131 TheAxiomFoundation/rulespec-us#1788 queued

hua7450 and others added 3 commits October 12, 2026 14:37
…Caretaker Supplement groups

- Pay the one-eligible-spouse rate only with an SSI-ineligible spouse
- HUD SSI-E exclusion uses the HUD disability test (plus blindness); one boolean caregiver input
- Receipt gates use (ssi > 0) | receives_ssi in SSP, CTS and W-2; drop the state-only SSI input
- CTS: one group per SSI parent, co-parent filing unit fix, paroled children eligible, no marital-unit proxy
- Remove the redundant large-group input; SSI-E not payable in household of another
- Registry placement and comments, SNAP title, HUD metadata revert, programs.yaml note, references
- Tests for each fix; realistic households

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
@DTrim99 DTrim99 mentioned this pull request Oct 13, 2026
4 tasks done
@hua7450
hua7450 requested a review from DTrim99 October 13, 2026 20:38
@DTrim99

DTrim99 commented Oct 14, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Add Wisconsin state supplementation for 2026

PR #10173 (author: hua7450, head 139139fbe9, merge-base 2e9eea7e6e). 69 files (+4,658/−5), 3 commits.

Summary

Wisconsin pays its own state SSI supplement. The Department of Health Services administers it, not SSA. A monthly state SSI payment can have up to three parts: the regular supplement, the SSI Exceptional Expense supplement (SSI-E) and the Caretaker Supplement (CTS) for SSI parents' children. The PR models all three as wi_ssp and also changes Wisconsin Works (W-2) eligibility.

What the diff contains:

  • Regular supplement and SSI-E (6 parameters, 9 variables):
    • wi_ssp_eligible (Person, MONTH, defined_for = StateCode.WI) requires SSI receipt (ssi > 0 or receives_ssi). It excludes incarcerated people and people in a medical treatment facility, unless the wi_ssp_institutional_continuation input is set.
    • wi_ssp_regular pays one of these:
      • $83.78 for an individual, rising to $92.16 from May 2026
      • half of $132.05 / $145.26 to each member of an eligible couple
      • $130.43 / $143.47 to a recipient with an SSI-ineligible spouse, or $135.05 / $148.56 in another person's household
    • wi_ssi_e pays $95.99 / $105.59, or half of $345.36 / $379.90 to each spouse when both are certified. It requires the wi_ssi_e_certified input and excludes the household-of-another arrangement.
    • Two income-routing variables:
      • wi_ssp_countable_for_snap counts the regular supplement and CTS, but not SSI-E.
      • wi_ssp_countable_for_hud counts all of wi_ssp, except SSI-E that pays for family-member care in the assisted unit. That exception needs the wi_ssi_e_for_home_care input.
  • Caretaker Supplement (22 parameters, 19 variables plus the helper module _wi_cts.py):
    • Filing unit. It builds the AFDC-style standard filing unit from parent links, including the Buening test for a non-SSI co-parent.
    • Income and asset tests. It applies the gross and net tests by area and group size, with the $90 work expense, $30 and one-third disregards, the dependent care deduction, child support paid, pregnancy allowances and the $1,000 asset limit.
    • Payment. It pays $275 for the first eligible child and $165 for each additional child to the caretaker parent.
    • Without parent links (as in microsimulation), it treats the family as one unit and pays one SSI parent.
  • W-2 (wi_works_eligible.py): an SPM unit is now ineligible when every custodial parent in it receives SSI.
  • Shared files: household_state_benefits (all four year blocks), spm_unit_benefits, SNAP and HUD unearned income (through the two routing variables), programs.yaml (partial, verified_years: "2026") and the changelog.
  • Tests: 91 new YAML cases:
    • wi_cts.yaml: 46 (1,875 lines, 40% of the diff)
    • wi_ssp.yaml: 17
    • wi_ssp_countable_for_hud.yaml: 13
    • integration.yaml: 10
    • wi_works_eligible.yaml: 5 added

What is right for 2026:

  • Amounts. Every regular and SSI-E amount, old and new, matches DMS Operations Memo 26-12 (p. 2), effective May 1, 2026.
    • The SSI-E state totals ($197.75 and $525.16) in the SSI-E Handbook's May 2026 rate table confirm that SSI-E is added on top of the regular supplement.
  • Caretaker Supplement amounts and limits. The $275 / $165 amounts match Wis. Stat. 49.775(4). All 72 income-limit cells match Handbook 5.2.1–5.2.5. The 20 Area I counties match 5.2.3.
  • Eligibility. The rules match Wis. Stat. 49.77 and 49.775, the CTS Handbook and the SSI Administration Handbook:
    • any federal SSI payment brings the full state rate
    • both co-resident parents must receive SSI
    • SSI children are excluded
    • the 18-year-old student rule
    • SSI people's income and assets are disregarded
    • Buening
    • one payment per child
  • The handbook's own examples reproduce. Both Buening examples (pp. 33–34) and Scenarios 1, 4, 5, 7, 8, 10 and 11 (pp. 68–75) come out as the handbook says, either through the PR's tests or my probes.
  • Benefit routing. FoodShare counts CTS but disregards SSI-E, as FoodShare Handbook 4.3.4 says.
  • W-2. The W-2 exclusion follows Wis. Stat. 49.145(2)(i).
  • Tests and CI. All 97 cases in the touched test files pass at the head, and the 45 I hand-checked add up. CI is green, and the branch merges cleanly with main.

I found no critical items. Four should-fix items remain:

  1. axiom: needed isn't valid for a staff PR. This is the same item as in the sibling reviews.
  2. 21 of the 22 Caretaker Supplement parameter descriptions are off the house template.
  3. The W-2 eligibility change isn't disclosed in the PR body or the changelog. In one probe it removes $7,836 a year of W-2 from an SSI parent.
  4. Three new branches have no test: the W-2 fallback without parent links (the path microsimulation takes), the Caretaker Supplement's incarceration exclusion for a child, and the additional one-third disregard input.

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)", requires one of 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 covers "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: Wis. Stat. 49.77; Wis. Stat. 49.775; DMS Operations Memo 26-12 TheAxiomFoundation/rulespec-us#NNNN queued. The issue needs:
    • Module paths, for example:
      • us-wi/statutes/49/49.77.yaml for (2)(a)2 and (3s)
      • us-wi/statutes/49/49.775.yaml for (2), (2m), (3) and (4)
      • us-wi/statutes/49/49.145.yaml for (2)(i)
      • us-wi/policies/dhs/dms-operations-memo-26-12/state-ssi-payment-levels.yaml for the May 2026 table
      • us-wi/policies/dhs/ssi-e-handbook/ for 2.1.9, 3.1.1 and 6.1
      • us-wi/policies/dhs/caretaker-supplement-handbook/ for 3.1.1–3.1.10, 3.2, 3.3.1 and the 5.2 tables
    • Corpus citations, plus the blocker if a source isn't in the corpus yet.
    • Verbatim law: the passages quoted under Verified correct.
    • Required outputs (Person, monthly):
      • The Money parameters: the four regular rates and the two SSI-E rates, before and after May 2026; $275 / $165; the 5.2 tables; $90, $30, one-third, $175 / $200, $71 and $1,000.
      • A Judgment for the state supplement: receives federal SSI AND resides in Wisconsin AND is not incarcerated AND has not been in a nursing home past 90 days.
      • A Money output for the regular supplement by living arrangement and couple status.
      • SSI-E for a certified recipient who is not in the household-of-another arrangement.
      • A Money output for CTS: first child plus additional children, if the filing unit passes the gross, net and asset tests.
    • Companion tests from the same sources, not from PolicyEngine output:
      • SSI-only individual: 83.78 in April 2026 and 92.16 in May 2026 (memo p. 2).
      • Eligible couple, May 2026: 145.26 for the couple.
      • One spouse eligible: 143.47 living independently, 148.56 in another's household.
      • SSI-E individual: 92.16 + 105.59 = 197.75. Both spouses certified: 525.16 (SSI-E Handbook 6.1).
      • SSI-E recipient in the household of another: no SSI-E (SSI-E Handbook 3.1.1).
      • CTS with one child: 275; with three children: 605 (CTS Handbook 5.2.6).
      • Buening Example 1: 275; Example 2: 0 (CTS Handbook 3.3.1).
      • Scenario 1, married SSI parents each with their own child: 275 + 275 (CTS Handbook 5.4.1).
      • Custodial parent receiving SSI: not eligible for W-2 (Wis. Stat. 49.145(2)(i)).

2. 21 of the 22 Caretaker Supplement parameter descriptions are off the house template.

  • Where: line 1 of every file under parameters/gov/states/wi/dhs/ssp/cts/ except eligible_immigration_statuses.yaml. Examples:
    • first_child.yaml: "Wisconsin uses this amount as its Caretaker Supplement first eligible child benefit."
    • care_young_age.yaml: "Wisconsin uses this amount as its Caretaker Supplement young child care age limit." This value is an age, not an amount.
    • earned_fraction.yaml: "Wisconsin uses this amount as its Caretaker Supplement additional earned income disregard fraction." This value is a fraction.
    • student_hours_limit.yaml: "... part-time student weekly work limit." This value is a number of hours.
    • gross/area_1.yaml: "Wisconsin sets these Caretaker Supplement gross income limits for Area 1."
    • area_i_counties.yaml: "Wisconsin uses Area I Caretaker Supplement income limits in these counties."
  • The template: "one sentence, spell the program out fully (no acronyms), [State] [verb] ... under the [Full Program Name] program."
    • None of the 21 has the "under the ... program" clause.
    • The six regular and SSI-E files and eligible_immigration_statuses.yaml do. For example, amount/individual.yaml: "Wisconsin provides this amount as the individual payment under the State Supplementary Payment program."
  • Fix, using "Caretaker Supplement program" throughout. For example:
    • first_child.yaml: "Wisconsin provides this amount as the monthly payment for the first eligible child under the Caretaker Supplement program."
    • additional_child.yaml: "Wisconsin provides this amount as the monthly payment for each additional eligible child under the Caretaker Supplement program."
    • gross/area_1.yaml: "Wisconsin limits monthly gross income to these amounts by assistance group size in Area I counties under the Caretaker Supplement program." Use the same pattern for gross/area_2, gross_pregnant/* ("including one pregnancy allowance") and net/* ("net income (the assistance standard)").
    • care_young_age.yaml: "Wisconsin applies the higher dependent care deduction to children below this age under the Caretaker Supplement program."
    • earned_fraction.yaml: "Wisconsin disregards this share of remaining earned income under the Caretaker Supplement program."
    • student_hours_limit.yaml: "Wisconsin exempts a continuing part-time student's earnings when weekly work hours are below this number under the Caretaker Supplement program."
    • area_i_counties.yaml: "Wisconsin applies the Area I income limits in these counties under the Caretaker Supplement program."
    • The remaining files follow the same pattern.

3. The W-2 eligibility change isn't disclosed in the PR body or the changelog.

  • Where:
    • variables/gov/states/wi/dcf/works/eligibility/wi_works_eligible.py:27-56 adds ~all_custodial_parents_on_ssi to W-2 eligibility for every year.
    • The PR body's "What and why" describes only the state supplement. changelog.d/wi-ssp-2026.added.md mentions only the Caretaker Supplement and the state supplement.
  • The change is right in law, but it moves W-2 results.
    • Wis. Stat. 49.145(2)(i) makes an individual eligible for a W-2 position only if "The individual is not receiving supplemental security income under 42 USC 1381 to 1383c or state supplemental payments under s. 49.77".
    • W-2 Manual 2.2.1 says "Not receive SSI or state supplemental payments."
  • Probe (2026; disabled SSI parent aged 30 with a 3-year-old, with and without parent links):
    • At the merge-base, wi_works is 7,836, paid on top of SSI of 11,928.
    • At the head, wi_works is 0 and wi_cts is 3,300.
    • Reviewers and users of W-2 results should know this ships with the PR.
  • Fix:
    • Add a bullet to the PR body.
    • Add a sentence to the changelog, such as "Exclude custodial parents who receive SSI from Wisconsin Works under Wis. Stat. 49.145(2)(i)." It could go in a separate .fixed.md fragment.

4. Three new branches have no test.

  • Where:
    • The W-2 fallback. wi_works_eligible.py:39-44 falls back to is_parent when the household has no parent ids. That is the path microsimulation takes. The five new W-2 cases all set person_id and parent_1_id, and none of the six existing cases has an SSI recipient.
    • Child incarceration. wi_cts_child_eligible.py:30 excludes an incarcerated child (~is_incarcerated). No case sets it for a child; Case 13 of wi_ssp.yaml covers only an incarcerated recipient.
    • The one-third disregard input. In wi_cts_net_income.py:32-36, wi_cts_additional_fraction_disregard drives both the $30 and the one-third disregard. No case sets it. Case 20 reaches the one-third branch only through wi_cts_received_recently.
  • Why it matters. Each is a separate branch of new logic, and removing any of them would pass the suite.
  • Probes at the head (2026-01):
    • W-2 without links. SSI parent and child, own_children_in_household: 1: wi_works_eligible false. The same household without SSI: true.
    • Child incarceration. A 16-year-old child of an SSI parent with is_incarcerated: wi_cts_child_eligible false and wi_cts 0.
    • One-third input. An 18-year-old senior with $7,540 of wages and the fraction input, plus a 14-year-old sibling: net income is (628.33 − 90 − 30) × 2/3 = 338.89, and wi_cts is 440.
  • Fix: add these three cases to wi_works_eligible.yaml and wi_cts.yaml.

Suggestions

  1. Caretaker Supplement amounts before July 2023 (the PR body disclaims historical coverage).
    • The leak. cts/first_child.yaml:3 and cts/additional_child.yaml:3 have only 2026-01-01: 275 and 165, so both carry back to 2015.
      • Probe at the head: one child gives wi_cts 275 in 2015-01, 2020-01 and 2023-06; two children give 440.
    • The law before July 2023.
      • CTS Handbook 1.1, p. 6: "1999 Wisconsin Act 9 increased the benefit to $250 per month for the first eligible child and $150 per month for each subsequent eligible child. This change was effective in November 1999. 2023 Wisconsin Act 19 increased the benefit to $275 per month for the first eligible child and $165 per month for each subsequent eligible child. This change was effective in July 2023."
      • The SSI-E Handbook rate table, p. 29 dates the new amounts "Effective July 1, 2023".
      • So the model overstates by $25 for the first child and $15 for each additional child from 2015 to June 2023.
    • Fix:
      • first_child.yaml: 1999-11-01: 250 and 2023-07-01: 275.
      • additional_child.yaml: 1999-11-01: 150 and 2023-07-01: 165.
      • Add the Handbook 1.1 reference to both files.
    • The regular and SSI-E amounts need no change. They are right back to at least 2011. The memo says Wisconsin's state supplementary payments "had previously been unchanged since 1994", and the 2011 table in SSI Administration Handbook 4.1.7 shows the same $83.78 / $132.05 / $130.43 / $135.05, with SSI-E state totals of $179.77 / $477.41. So backdating them gives correct values.
  2. The Texas rebate reform's copy of spm_unit_benefits now omits wi_ssp.
    • Where: policyengine_us/reforms/states/tx/rebate/tx_rebate.py:53-122 redefines spm_unit_benefits with a hard-coded list. It already lacks ca_state_supplement, and after this PR it also lacks wi_ssp.
    • Probe at the head: a Wisconsin aged SSI-only single in 2027 has spm_unit_benefits of 13,807.18 at baseline and 12,701.26 under the reform. The drop is exactly the $1,105.92 wi_ssp (12 × 92.16).
    • Fix: insert "wi_ssp", # Wisconsin 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. The dependent care deduction applies against unearned income and when no one works.
    • What the code does. cts_financial_test subtracts wi_cts_dependent_care_deduction from each member's total net income. The deduction comes from pre_subsidy_childcare_expenses and doesn't require any earnings in the group.
    • The handbook. Handbook 3.2.1.2.3, p. 31 lists "Dependent care deduction of $200 per month for each child under the age of 2 and $175 per month for each incapacitated adult and each child age 2 or older" without saying what it comes off.
    • The AFDC rule the program inherits.
      • Wis. Stat. 49.775(2)(c) ties eligibility to the AFDC criteria.
      • Under that AFDC rule, the care disregard came from earnings: 45 CFR 233.20(a)(11)(i) (10-1-97 edition), p. 97. It reads "the State must disregard from the monthly earned income ... of each individual whose needs are included in the eligibility determination: ... (D) An amount equal to the actual cost for the care of each dependent child ... not to exceed $175 ... and not to exceed $200 for each dependent child who is under age two."
    • Fix: cap the group's care deduction at its earned income remaining after the other disregards. Or state the PR's reading in the variable documentation and pin a case with care costs and only unearned income.
  4. Write down the microsimulation approximations.
    • One payee per family. Without parent links, one SSI parent per family receives the whole award. Probe of Scenario 1 (married SSI parents, each with their own child), unlinked: wi_cts is [440, 0], but the handbook (p. 68) says "There will be two CTS supplements in the amount of $275 each". With links the PR gives [275, 275].
    • Parenthood comes from one input. The unlinked path depends on own_children_in_household. Without it (the YAML default), is_parent is false and the payment is 0.
    • Large groups. Groups larger than 12 need the wi_cts_large_group_net_income_limit input, so they get 0 by default.
    • Fix: list these in the programs.yaml notes, next to the grandfathered state-only recipients the notes already mention.
  5. Polish.
    • Blank lines. The PR adds a stray blank line before metadata: in household_state_benefits.yaml (line 412) and in hud/annual_income/sources/unearned.yaml (line 34). Neither relates to Wisconsin.
    • Case count. The PR body says "76 source-based YAML cases". The PR adds 91 (46 + 17 + 13 + 10 + 5).
    • defined_for. wi_ssp_countable_for_snap is a SNAP list member with no defined_for. It doesn't leak, because both components are Wisconsin-gated, but defined_for = StateCode.WI matches wi_ssp_countable_for_hud.
    • Consistency:
      • wi_ssi_e.py compares against arrangement.possible_values.ANOTHER_PERSONS_HOUSEHOLD, while wi_ssp_regular.py imports SSIFederalLivingArrangement. Pick one.
      • The bracket labels say "Area 1" and "Area 2" where the handbook says Area I and Area II.
    • PR body. The sentence beginning "The continuing April 2026 award receives ..." concerns only grandfathered state-only recipients, whom the PR doesn't model. Say that, or drop it.

Verified correct

  • Statutes:
    • Wis. Stat. 49.77(2)(a)2 entitles "Any needy person or couple residing in this state and receiving benefits under federal Title XVI".
    • (3s)(a) authorizes "an increased state supplement ... if the person needs at least 40 hours per month of supportive home care, daily living skills training or community support services". This is SSI-E.
  • Amounts and administration. DMS Operations Memo 26-12, "EFFECTIVE DATE May 1, 2026":
    • The table (p. 2): "Eligible individual $83.78 $92.16 / Eligible couple $132.05 $145.26 / Couple/one spouse eligible $130.43 $143.47". The household-of-another rows are the same except "Couple/one spouse eligible $135.05 $148.56". SSI-E: "Eligible individual $95.99 $105.59 / Eligible couple $345.36 $379.90". All 12 parameter values match.
    • Policy (p. 2): "Everyone who qualifies for federal SSI payments of any amount automatically gets the maximum state payment." That supports the flat payment with no income reduction (wi_ssp.yaml Case 7: SSI of 27.30 still gets 92.16).
    • No COLA (p. 2): "state supplementary payments are not subject to annual cost-of-living adjustments (COLA)". So freezing the amounts after May 2026 is right (2027 probe: 92.16 a month).
    • State administration. Wisconsin isn't on SSA's POMS SI 01415.058 A list of federally administered supplements for January 2026. CTS Handbook 1.1, p. 7: "DHS contracts with several data processing firms ... to process SSI payments, to which CTS benefits are added." So no SSA rounding applies.
  • Eligibility and termination. SSI Administration Handbook 2.1:
    • 2.1.1: "a person must first apply for and be found eligible to receive federal SSI".
    • 2.1.8 lists "Admission to a nursing home longer than 90 days, effective the first of the month following the 90th day after admission" and "Incarceration".
    • That matches wi_ssp_eligible and the continuation input (Cases 11–13, integration Case 9).
  • SSI-E. SSI-E Handbook (P-20679, May 2026):
    • Couples. 2.1.9, p. 10: "If both members of the couple are certified for SSI-E, the payment level is the couple rate for SSI-E" (integration Cases 4–5).
    • Household of another. 3.1.1, p. 13: "Such persons are considered in the SSI-B or SSI-D living arrangements ("household of another") and are not eligible for SSI-E" (Case 17).
    • Rate table. 6.1, p. 29: state payments of "$197.75" (individual) and "$525.16" (couple). Those equal 92.16 + 105.59 and 145.26 + 379.90, so SSI-E stacks on the regular supplement as the PR models.
  • FoodShare. FoodShare Handbook 4.3.4 counts "Caretaker Supplement (CTS) payments" and "Net Supplemental Security Income (SSI) payments". It also says "Disregard SSI-E income for FoodShare." That matches wi_ssp_countable_for_snap (integration Cases 7, 8 and 10).
  • HUD.
    • PIH 2023-27 G.11, p. 81 excludes state-authorized payments "to enable a family member who has a disability to reside in the family's assisted unit". It adds: "Both the person providing the care and the person who has the disability must be family members ... and must live in the same assisted household."
    • The PR applies that exclusion only through an opt-in input and otherwise counts SSI-E, as SSI-E Handbook 4.1.1 (p. 24) does. It counts CTS.
  • Caretaker Supplement. CTS Handbook P-23131 (Release 25-01) and Wis. Stat. 49.775:
    • Who qualifies:
      • 49.775(2)(b): "If the dependent child has 2 custodial parents, each custodial parent receives supplemental security income" (Case 21).
      • (2)(d): "The dependent child does not receive supplemental security income" (Case 3).
      • (3): "the department may not make more than one payment ... per month for the support of that dependent child" (Cases 22 and 35).
    • Amounts:
      • (4): "$250 per month and $25 per month for one dependent child and $150 per month and $15 per month for each additional dependent child", which is $275 / $165.
      • Handbook 5.2.6, p. 65 (Cases 1 and 2).
    • Parent's SSI receipt: 3.1.3, p. 19: "Parents in a CTS assistance group must be current recipients of SSI state supplemental benefit payments in Wisconsin". So wi_ssp_regular > 0 is the receipt test (Cases 4 and 5).
    • 18-year-olds: 3.1.10, p. 21: "Is enrolled in high school ... and Is expected to graduate high school or get a GED before turning 19" (Cases 6–8).
    • Excluded income and assets:
      • 3.2, p. 30: "Income and assets of any members of the household who receive SSI are disregarded" (Case 13).
      • 3.2.1.1, p. 30: "disregard all child support ... for the gross and net income tests" (Case 9).
    • Net test: 3.2.1.2.3, p. 31: "$90 work-related expense", "Disregard of $30 or $30 and one-third", "Child support paid to someone outside of the AG", and the four continuing-minor rules (Cases 16–20, 28, 43–46).
    • Assets: 3.2.2, p. 31: "$1,000 asset limit" (Cases 14, 15 and 30).
    • Buening: 3.3.1, pp. 33–34. Both worked examples reproduce exactly: 700 > 550, so 275 for Jill (Case 26); 500 ≤ 550 but 700 > 647, so 0 (Case 27).
    • Tables: 5.2.1–5.2.5, pp. 62–65. All 12 rows × 6 columns match, as do the "$25 per person for groups larger than 12" and "$71 for each additional pregnant woman" rules.
    • Areas: 5.2.3, p. 63 lists 20 Area I counties. All 20 enum names resolve. The Oneida and Winnebago tribal exceptions are left to the wi_cts_area_i override, and the documentation says so.
    • Scenarios: 5.4.1, pp. 68–75. Probes at the head reproduce Scenario 1 (275 + 275), Scenario 10 (the grandmother on SSI gets 275 for the minor parent, and the grandchild is outside the unit) and Scenario 11 (the minor SSI parent gets 275). A non-SSI step-parent earning $3,000 a month is kept out of the unit, so 275 (3.1.1, p. 18).
  • Immigration. Handbook 3.1.4, pp. 19–20 (permanent residents; 8 U.S.C. 1153/1157/1158/1160/1182; Cuban-Haitian entrants; PRUCOL) supports the eight listed statuses. That includes withholding of deportation, a PRUCOL category, and parole under 1182(d)(5) (Cases 24, 25 and 39).
  • W-2. Wis. Stat. 49.145(2)(i) and W-2 Manual 2.2.1, quoted in Should 3.
    • The PR keeps a non-SSI co-parent eligible (Case 9) and doesn't exclude a household for a child on SSI (Case 8). That matches "The individual is not receiving" being a condition on the applicant.
  • Kept out of SSI income. None of wi_ssp's parts is an SSI income source, so there is no circularity.
    • CTS Handbook 1.1, p. 7: "For SSI purposes, CTS benefits are viewed as part of Wisconsin's SSI state supplemental payment."
    • wi_ssp holds only state money, so summing it with ssi in the aggregates doesn't double-count.
  • Code:
    • Vectorized throughout (where, select, np.bincount, np.minimum.at, group sums). The filing-unit closure loop iterates over whole arrays until it converges.
    • No hard-coded policy values.
    • Periods are correct:
      • YEAR flows (ssi_earned_income, ssi_unearned_income, child_support_received, pre_subsidy_childcare_expenses, child_support_expense) use period, so they are divided by 12.
      • YEAR stocks and flags (age, resources, school status, is_ssi_ineligible_spouse, immigration, is_parent) use period.this_year.
    • List guard. wi_ssp carries defined_for = StateCode.WI, so test_members_are_state_gated passes. wi_ssp is in all four household_state_benefits blocks (2023–2026).
    • Callers. wi_ssp and wi_cts are referenced only in the lists and variables this PR edits.
    • References. Each is one entry per document, and every #page= anchor I opened shows the cited text: memo p. 2; CTS pp. 18, 19, 21, 30, 31, 33, 62–65; SSI-E pp. 7, 10, 13, 24, 29; PIH 2023-27 p. 81; PIH 2024-38 pp. 3–4. Multi-page titles use the #page a-b form.
  • Hand checks: 45 expectations across all five files, all of which add up. The 2026 FBR is $994 for an individual and $1,491 for a couple.
    • wi_ssp.yaml:
      • Case 5: 4 × 83.78 + 8 × 92.16 = 1,072.40.
      • Case 7: SSI = 994 − (986.70 − 20) = 27.30, so 92.16.
      • Case 8: 2,067.52 > 994, so 0.
      • Cases 9 and 10: 83.78 + 95.99 = 179.77; 92.16 + 105.59 = 197.75.
      • Case 17: SSI 662.67; SSI-E 0; 92.16.
    • integration.yaml:
      • Case 1: 145.26 ÷ 2 = 72.63 each.
      • Cases 2 and 3: 143.47; 148.56.
      • Case 4: (145.26 + 379.90) ÷ 2 = 262.58.
      • Case 5: 72.63 + 105.59 = 178.22, and 72.63.
      • Case 6: SNAP unearned income 11,928 + 1,072.40 = 13,000.40.
      • Case 7: wi_cts 12 × 275 = 3,300; wi_ssp 4,372.40; SNAP unearned income 11,928 + 1,072.40 + 3,300 = 16,300.40.
      • Case 8: HUD unearned income 11,928 + 2,301.08 = 14,229.08; SNAP unearned income 13,000.40.
      • Case 9: individual rate 92.16 with the spouse in a facility.
      • Case 10: spm_unit_benefits 11,928 + 2,301.08 = 14,229.08.
    • wi_cts.yaml:
      • Case 2: 275 + 2 × 165 = 605.
      • Cases 10, 11 and 12: 3,732 / 12 = 311 ≤ 311; 312 > 311; 305 > 301 (Area II).
      • Cases 16 and 17: 401 − 90 = 311; 402 − 90 = 312.
      • Cases 18 and 19: gross 576 ≤ 576; 577 > 576.
      • Case 20: (570 − 90 − 30) × 2/3 = 300 ≤ 311.
      • Case 28: 700 − 90 − min(200, 175) = 435 ≤ 550, so 440.
      • Case 41: gross 628.33 ≤ 707; net 0 ≤ 311 + 71 = 382.
      • Case 43: 628.33 − 90 − 30 = 508.33 ≤ 550.
      • Case 45: 538.33 − 200 = 338.33 ≤ 533 (Area II), with gross 628.33 ≤ 987.
      • Case 46: subgroup 500 − 85 = 415 ≤ 550; group 700 − 85 = 615 ≤ 647, so 275.
    • HUD and W-2:
      • HUD Case 4: SSI = 994 − (698.90 − 20) = 315.10.
      • HUD Case 12: 1,072.40 + 3,300 = 4,372.40.
      • W-2 Cases 7–11: the custodial-parent logic gives false / true / true / false / false.
  • Probes at the head:
    • A married SSI couple with a child in common gets one 275 payment, to the lower person_id parent, plus 72.63 each in regular supplement.
    • An eligible individual whose ineligible spouse earns $60,000 gets SSI 0 and wi_ssp 0.
  • Changelog: changelog.d/wi-ssp-2026.added.md is top-level and typed added (see Should 3 for the missing W-2 sentence).
  • Registry:
    • The programs.yaml entry sits under ssi_state_supplement.state_implementations, after WA, with the batch's fields.
    • partial fits the unmodeled grandfathered state-only recipients.
    • parameter_prefix resolves.

Batch checks

  1. Axiom line: SHOULD (Should 1). axiom: needed is invalid for a staff PR. rulespec-us us-wi/ has only CMS and income-tax policies and no SSP or CTS issue, so a dispatch-ready pe-parity issue and a queued line are needed.
  2. Parameter descriptions: SHOULD (Should 2). 21 of the 22 CTS files lack "under the ... program" (several call an age, fraction or hour count "this amount"). The six regular and SSI-E files and eligible_immigration_statuses follow the template.
  3. Backdating: SUGGESTION (Suggestion 1). CTS's $275 / $165 leaks into 2015 to June 2023, when the law paid $250 / $150 (effective November 1999). The regular and SSI-E amounts are correct back to at least 2011 ("unchanged since 1994"; the 2011 SSI Administration Handbook table). The PR claims only 2026 and disclaims backfilled years.
  4. tx_rebate.py copy: SUGGESTION (Suggestion 2). It omits wi_ssp, which cuts 2027 spm_unit_benefits by $1,105.92 for an aged single. ca_state_supplement is still missing too.
  5. Aggregate wiring: complete, with no double count.
    • wi_ssp is in spm_unit_benefits and all four household_state_benefits blocks.
    • The routing variables carry it into HUD unearned income (wi_ssp_countable_for_hud, which counts CTS and SSI-E unless the home-care exclusion applies) and SNAP unearned income (wi_ssp_countable_for_snap, regular plus CTS, without SSI-E per FoodShare 4.3.4).
    • It has a programs.yaml entry and holds only state amounts.
  6. Income attribution: pass, with items.
    • Pinned: an eligible couple split 50/50; the one-eligible-spouse rates only with an SSI-ineligible spouse (an SSI-eligible spouse in a facility leaves the individual rate, integration Case 9); deemed income affecting only the SSI > 0 gate (the probe with a step-parent earning $3,000 a month gives SSI 282 and the full $130.43 rate); SSI-E per certified person with the couple rate when both are certified; Caretaker Supplement income from the filing unit only, with SSI people excluded.
    • Not pinned: the unlinked one-payee approximation (Suggestion 4) and the dependent care deduction reading (Suggestion 3).
  7. Sibling conflicts (branch note):
  8. CI: all 26 checks pass on head 139139fbe9, with no failing job. The Rest job ran 1h28m9s, close to the 90-minute cap, as on the siblings.
  9. State law first: done.
    • Read:
      • Wis. Stat. 49.77, 49.775, 49.145(2) and 49.19(4)
      • DMS Operations Memo 26-12 (pp. 1–3)
      • CTS Handbook P-23131 (pp. 6–7, 17–34, 60–82)
      • SSI-E Handbook P-20679 (pp. 5–25, 29)
      • SSI Administration Handbook 2.1, 3.1 and 4.1
      • FoodShare Handbook 4.3.4
      • W-2 Manual 2.2.1
      • POMS SI 01415.058 A
      • HUD PIH 2023-27 (pp. 80–82) and PIH 2024-38 (pp. 1–4)
      • 45 CFR 233.20(a)(11) (1997 edition)
    • SSA's "State Assistance Programs for SSI Recipients" page returned 403 from here. The 2011 DHS table stood in for it.
    • Every 2026 amount by living arrangement, couple status and SSI-E certification checks out, as do the state administration and the May 1, 2026 effective date. 45 expectations check by hand.

Axiom line assessment

Invalid (Should 1).

CI status

All 26 checks pass (gh pr checks 10173). Three "skipping" entries belong to the superseded run 38361635754 (same head, 07:16 UTC).

  • The run. Run 38367946145 (pull_request, 2026-10-13 08:14 UTC) on head 139139fbe9, conclusion success.
  • Microsimulation. The Microsimulation job (36m16s) passes. The Caretaker Supplement filing-unit code runs nationally in it, because household_state_benefits includes wi_ssp.
  • Partner tests. The PR touches none, and the Household API Partners job passes.
  • Local runs with policyengine-core 3.33.3:
    • the four new Wisconsin SSP files plus wi_works_eligible.yaml: 97 passed (91 new, 6 existing)
    • the whole wi/dcf test directory: 197 passed
    • test_aggregate_list_integrity.py: 22 passed

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 4 should items. (1) axiom: needed is reserved for external contributors, and rulespec-us has no Wisconsin SSP or CTS module or issue. Please file a dispatch-ready pe-parity issue and add a queued line. (2) 21 of 22 CTS parameter descriptions are off the house template. (3) The W-2 eligibility change under Wis. Stat. 49.145(2)(i) is correct but isn't mentioned in the PR body or changelog. (4) Three branches have no tests: the W-2 fallback when no parent links exist, CTS child incarceration, and the additional fraction disregard input. The 2026 amounts all match DMS Ops Memo 26-12 and Handbook 5.2, and 97 of 97 tests pass. Details are in the full report above.

@hua7450

hua7450 commented Oct 15, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks, David. The changes are in 0e2793d, followed by a merge of main (bd14e92).

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

  • your module paths;
  • the verbatim 49.77, 49.775, 49.145(2)(i), Memo 26-12, SSI-E Handbook and CTS Handbook text;
  • the required outputs;
  • your companion cases mapped to the PE cases.

The source conflicts are in a separate comment, and the axiom line now points to it:

  • which income the care deduction reduces (Suggestion 3);
  • the pregnancy step in the gross limit: the 5.2.2 cells sit $131–132 above 5.2.1, but the note adds $71 for each further pregnant woman, and the model follows the note;
  • step-parents: Handbook 3.1.1 leaves them out of the unit, while Wis. Stat. 49.19(4)(et), which 49.775(2)(c) adopts, deems a co-resident stepparent's income.

Should 2 (descriptions): all 21 now follow the template and end "under the Caretaker Supplement program". Ages, the one-third share, the hour limit and the county list are described as such, and the bracket labels say Area I and Area II.

Should 3 (W-2 disclosure): the body has a W-2 bullet. changelog.d/wi-ssp-2026.fixed.md says the W-2 unit is ineligible when every custodial parent receives SSI, under Wis. Stat. 49.145(2)(i), and that a custodial parent not on SSI can still qualify.

Should 4 (untested branches): all three added.

  • wi_works_eligible.yaml Cases 12 and 13 cover the fallback without parent IDs: false with SSI, true without.
  • wi_cts.yaml Case 47: an incarcerated child gets 0.
  • Case 48 is your one-third case: (628.33 − 90 − 30) × 2/3 = 338.89, so 440.

Suggestion 1 (history): history stays out of scope, so the $250 / $150 before July 2023 isn't added.

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

Suggestion 3 (care deduction): fixed.

  • The group's care deduction is now capped at its earned income left after the $90, $30 and one-third disregards. This follows 45 CFR 233.20(a)(11)(i)(D) (1997 edition) and the Family Support Act's "applied last" rule.
  • Case 49 pins your no-earnings case at 0 (440 without the cap).
  • New Case 53 pins a positive remainder. A teen working 5 hours a week has $67.08 left after the $90, which caps $200 of care, so the payment is 0 (440 uncapped).
  • AFDC took the disregard from each earner's own earnings. The model pools the group's earnings because it doesn't know who pays for care, and the comment and documentation say so.
  • Earned income after disregards is now its own variable, wi_cts_countable_earned_income. Both the net income and the cap read it.

Suggestion 4 (microsimulation approximations):

  • The programs.yaml note now says that without parent IDs the Caretaker Supplement pays one SSI parent per family, and that groups over 12 need a supplied net income limit.
  • The body's coverage section lists both, plus the dependence on own_children_in_household.

Suggestion 5 (polish):

  • I kept the blank lines before metadata:; they come from our formatting pass and are harmless.
  • The body's case count is updated.
  • wi_ssp_countable_for_snap has defined_for = StateCode.WI.
  • wi_ssp_regular now uses arrangement.possible_values, as wi_ssi_e does.
  • The "continuing April 2026 award" sentence is replaced. It now says grandfathered state-only recipients (49.77(2)(a)3) aren't modeled, so neither is their 10% May 2026 increase.

Other fixes I found:

  • Input-reset trap. Eight Caretaker Supplement formula variables told users to override them, and the tests set wi_ssp_regular as an input. Setting a formula variable as an input for one person resets everyone else to its default. With two unrelated households in one simulation:
    • setting wi_cts_area_i for one Portage caretaker moved a Milwaukee family out of Area I (275 → 0);
    • setting wi_cts_countable_resources for one child zeroed another family's $1,500 bank balance (0 → 275, an overpayment);
    • setting wi_ssp_regular for one parent zeroed every other recipient's supplement.
  • The three overrides that cover real gaps now read new plain inputs:
    • wi_cts_tribal_area_i (Household), for Oneida Tribe households outside the listed counties;
    • wi_cts_other_qualifying_immigration_status, for lawful temporary residents and verified PRUCOL that the enum can't represent;
    • wi_cts_other_countable_resources, for Handbook 3.2.2 assets that SSI resources omit.
  • The other five now state their limits instead. Buening needs parent IDs, and parent IDs can't tell a step-parent from a parent. Income outside the SSI cash sources, Huber Law releases and incapacitated-adult care aren't modeled.
  • The wi_ssp_regular inputs are gone from the tests, so those cases use the computed value. No expected value changed.
  • Cases 50–52 pin two households with an input on one only.

On the merged head, these pass locally: all 461 Wisconsin cases, and the aggregate list integrity and program registry tests (677 passed, 10 skipped).

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

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants