Skip to content

Implement Michigan State Supplementary Payment (SSP)#8176

Open
hua7450 wants to merge 6 commits intoPolicyEngine:mainfrom
hua7450:mi-ssp
Open

Implement Michigan State Supplementary Payment (SSP)#8176
hua7450 wants to merge 6 commits intoPolicyEngine:mainfrom
hua7450:mi-ssp

Conversation

@hua7450
Copy link
Copy Markdown
Collaborator

@hua7450 hua7450 commented Apr 28, 2026

Summary

Implements Michigan's State Supplementary Payment (SSP) — a state-funded supplement to federal SSI covering all six living-arrangement categories (Independent Living, Household of Another, Domiciliary Care, Personal Care, Home for the Aged, and Institution).

Closes #8175

Regulatory Authority

  • BEM 660 (primary state regulation governing State SSI Payments)
  • RFT 248 — SSI Payment Levels (rate schedule, current + historical Wayback snapshots)
  • MCL 400.10 (Social Welfare Act 1939 PA 280, statutory basis)
  • POMS SI CHI01415.001 (split federal/state administration)
  • BEM 220 (Michigan residence requirements)
  • SSA 2011 State Assistance Programs — Michigan baseline (frozen-rate confirmation, payment calculation method)

Program Overview

  • Administration: SPLIT per BEM 660 p.1
    • MDHHS issues SSPs for Independent Living and Household of Another (paid quarterly in March, June, September, December per RFS 106). BEM 660 requires "regular first-of-month federal SSI benefit" for these.
    • SSA issues the state-funded benefit for Adult Foster Care (Domiciliary, Personal), Home for the Aged, and Institution categories — rolled into the monthly federal SSI check.
  • Funding: State funds (both administration and assistance) per SSA 2011 Michigan baseline
  • Current caseload: 248,803 SSI recipients in Michigan (Dec 2024, SSA SSI Recipients by State and County 2024); $185.1M in payments for December 2024

Eligibility (Two-Track Gate)

Michigan's split administration drives a two-track eligibility gate, grounded in BEM 660 + the SSA 2011 baseline:

Category Administering agency Eligibility gate Source
Independent Living MDHHS ssi > 0 (regular federal SSI receipt) BEM 660 p.1
Household of Another MDHHS ssi > 0 (regular federal SSI receipt) BEM 660 p.1
Domiciliary Care SSA is_ssi_eligible + spillover SSA 2011 baseline
Personal Care SSA is_ssi_eligible + spillover SSA 2011 baseline
Home for the Aged SSA is_ssi_eligible + spillover SSA 2011 baseline
Institution SSA is_ssi_eligible + spillover SSA 2011 baseline

Why the split: BEM 660 p.1 says MDHHS-issued SSPs are paid "only for those months the recipient received a regular first-of-month federal benefit." That requirement applies to IL + HoA (the MDHHS-administered categories). For SSA-administered facility categories, the SSA 2011 baseline payment calculation method governs: "Countable income is deducted first from the federal payment. Any income that remains to be counted after the federal payment has been reduced to zero is then deducted from the state supplementary payment." The spillover formula max_(0, base - max_(0, -uncapped_ssi)) in mi_ssp_person.py implements this.

Other requirements Source How Modeled
Must reside in Michigan BEM 220 defined_for = StateCode.MI
Aged 65+, Blind, or Disabled BEM 660 covered by SSI eligibility (categorical or actual receipt depending on branch)
§1619(a)/(b) recipients excluded BEM 660 p.2 Not modeled — we don't track §1619 status at the moment
Eligible Child same as IL individual RFT 248 p.2 Default living_arrangement = INDEPENDENT_LIVING covers this implicitly

Living Arrangement Bridging

The implementation uses two enum variables (Maine SSP pattern):

  • mi_ssp_living_arrangement — user-provided input enum
  • mi_ssp_payment_category — derived enum that overrides the input with ssi_federal_living_arrangement for shared categories:
    • MEDICAL_TREATMENT_FACILITYINSTITUTION
    • ANOTHER_PERSONS_HOUSEHOLDHOUSEHOLD_OF_ANOTHER
    • All other federal values → fall back to user input

This auto-routes federal living-arrangement classifications without forcing users to set the MI-specific enum, while preserving the MI-only Adult Foster Care / Home for the Aged categories that the federal enum doesn't represent.

Parameter lookups and downstream variables key on mi_ssp_payment_category.

Benefit Amounts (RFT 248 p.2)

Living arrangement Individual Couple (2026)
Independent Living $14.00 $21.00
Household of Another $9.33 $13.96
Domiciliary Care $87.00 $671.00
Personal Care $157.50 $812.00
Home for the Aged $179.30 $855.60
Institution $7.00 $14.00

Couple treatment: Separate couple rate (NOT 2× individual). Couple rate paid only when joint SSI claim AND both spouses eligible AND same living arrangement.

COLA: Individual amounts FROZEN at the same nominal values 2016-2026 (corroborated against SSA 2011 baseline Table 1 for IL, Personal Care, Home for the Aged, and Institution — same values 15+ years). Couple supplements for Domiciliary Care, Personal Care, and Home for the Aged adjust upward each year (verified historical schedule 2016 / 2020 / 2022 / 2024 / 2026) because they are computed against a moving target including the federal couple FBR. Independent Living, Household of Another, and Institution couple rates are also frozen.

Not Modeled (by design)

What Source Why Excluded
§1619(a)/(b) exclusion BEM 660 p.2 We don't track §1619 SSI extension status at the moment
Mandatory 1973-grandfathered supplements BEM 660 p.3, SSA 2011 baseline Population is 0 per SSA Table 2
Code G/H essential person categories SSA 2011 baseline Population is 0 per SSA Table 2
Special needs (personal care, emergency relief, state DA) SSA 2011 baseline Separate programs
Quarterly disbursement timing (MDHHS pays Mar/Jun/Sep/Dec) BEM 660 p.1, RFS 106 Modeled as monthly equivalent

Files Added

policyengine_us/
├── parameters/gov/states/mi/mdhhs/ssp/
│   └── payment/
│       ├── individual.yaml
│       └── couple.yaml
├── variables/gov/states/mi/mdhhs/ssp/
│   ├── mi_ssp.py
│   ├── mi_ssp_couple_amount.py
│   ├── mi_ssp_couple_eligible.py
│   ├── mi_ssp_eligible.py
│   ├── mi_ssp_individual_amount.py
│   ├── mi_ssp_living_arrangement.py
│   ├── mi_ssp_payment_category.py
│   └── mi_ssp_person.py
└── tests/policy/baseline/gov/states/mi/mdhhs/ssp/
    ├── integration.yaml
    ├── mi_ssp.yaml
    ├── mi_ssp_couple_amount.yaml
    ├── mi_ssp_couple_eligible.yaml
    ├── mi_ssp_eligible.yaml
    ├── mi_ssp_individual_amount.yaml
    └── mi_ssp_person.yaml

Also updated:

  • policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py — added mi_ssp to BENEFITS
  • policyengine_us/parameters/gov/household/household_state_benefits.yaml — added mi_ssp to 2023 and 2024 sections
  • policyengine_us/programs.yaml — updated MI SSP entry with variable: mi_ssp, parameter_prefix: gov.states.mi.mdhhs.ssp, status: complete

Historical Notes

Individual SSP rates have been frozen at the same nominal values since at least 2011 — the SSA 2011 baseline Table 1 values for IL individual ($14), Personal Care ($157.50), Home for the Aged ($179.30), and Institution ($7) match the current 2026 RFT 248 schedule exactly. Couple rates for Domiciliary Care, Personal Care, and Home for the Aged adjust annually because they are computed against a moving target that includes the federal couple FBR.

Verification TODO

  • Verify payment amounts against RFT 248 (current and historical Wayback snapshots)
  • Verify eligibility logic against BEM 660 p.1 (two-track gate by administering agency)
  • Verify amounts current as of 2016-2026
  • CI passes

Test plan

  • 60 tests pass (28 integration + 32 unit across 6 unit-test files)
  • CI passes

hua7450 and others added 2 commits April 28, 2026 10:41
Closes PolicyEngine#8175

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds Michigan SSP coverage for all 6 living arrangements (Independent
Living, Household of Another, Domiciliary Care, Personal Care, Home for
Aged, Institution) with separate individual and couple rates per RFT 248,
gated on federal SSI receipt per BEM 660. Refs PolicyEngine#8175.
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 28, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 95.55%. Comparing base (8675371) to head (38e2395).
⚠️ Report is 103 commits behind head on main.

Additional details and impacted files
@@             Coverage Diff             @@
##              main    #8176      +/-   ##
===========================================
- Coverage   100.00%   95.55%   -4.45%     
===========================================
  Files            3        9       +6     
  Lines           39      135      +96     
  Branches         0        2       +2     
===========================================
+ Hits            39      129      +90     
- Misses           0        6       +6     
Flag Coverage Δ
unittests 95.55% <100.00%> (-4.45%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

hua7450 added 4 commits April 28, 2026 12:27
- Fix broken BEM 660 page reference (#page=5 → #page=2)
- Adopt Delaware SSP pattern: is_ssi_eligible gate + spillover reduction
  via max_(0, -uncapped_ssi) so facility-care recipients in the income
  window FBR < income < FBR+SSP get partial SSP instead of zero
- Tighten defined_for on amount variables to mi_ssp_eligible
- Add unit test for mi_ssp_couple_eligible (4 cases)
- Add integration Case 28 covering partial SSP in spillover window
Adopts the Maine SSP pattern: keep mi_ssp_living_arrangement as the
user-provided input enum, add a derived mi_ssp_payment_category that
overrides with ssi_federal_living_arrangement for the categories MI
shares with federal SSI (MEDICAL_TREATMENT_FACILITY → INSTITUTION,
ANOTHER_PERSONS_HOUSEHOLD → HOUSEHOLD_OF_ANOTHER) and falls back to
the input for MI-specific Adult Foster Care and Home for the Aged
categories. Switches parameter breakdowns and amount lookups to the
new payment_category variable. Adds a note that individual rates have
been frozen since 2016.
BEM 660 page 1 distinguishes between MDHHS-administered categories
(Independent Living, Household of Another) and SSA-administered ones
(Adult Foster Care, Home for the Aged, Institution). MDHHS-issued
SSPs are paid only for months with a regular first-of-month federal
SSI benefit, so those branches gate on ssi > 0. SSA-administered
categories follow the SSA 2011 Michigan baseline payment-calculation
method: countable income deducts from federal SSI first, then any
remainder reduces the state supplement. Those branches keep the
is_ssi_eligible gate plus the spillover reduction in mi_ssp_person.
- Add unit test for mi_ssp_payment_category covering default
  passthrough and the two federal living-arrangement override branches
- Note marital_unit.sum vs defined_for safety condition in
  mi_ssp_couple_eligible
- Drop trailing zeros from decimal payment amounts per parameter style
- Cite RFT 248 alongside BEM 660 in mi_ssp_couple_eligible (couple
  rate conditions trace to RFT 248)
- Relabel INSTITUTION enum value to "Institution" to match BEM 660
@hua7450 hua7450 marked this pull request as ready for review April 28, 2026 22:02
@hua7450 hua7450 requested a review from PavelMakarchuk April 28, 2026 22:02
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.

Implement Michigan State Supplementary Payment (SSP)

1 participant