Implement Michigan State Supplementary Payment (SSP)#8176
Open
hua7450 wants to merge 6 commits intoPolicyEngine:mainfrom
Open
Implement Michigan State Supplementary Payment (SSP)#8176hua7450 wants to merge 6 commits intoPolicyEngine:mainfrom
hua7450 wants to merge 6 commits intoPolicyEngine:mainfrom
Conversation
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 Report✅ All modified and coverable lines are covered by tests. 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
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
- 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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
Program Overview
Eligibility (Two-Track Gate)
Michigan's split administration drives a two-track eligibility gate, grounded in BEM 660 + the SSA 2011 baseline:
ssi > 0(regular federal SSI receipt)ssi > 0(regular federal SSI receipt)is_ssi_eligible+ spilloveris_ssi_eligible+ spilloveris_ssi_eligible+ spilloveris_ssi_eligible+ spilloverWhy 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))inmi_ssp_person.pyimplements this.defined_for = StateCode.MIliving_arrangement = INDEPENDENT_LIVINGcovers this implicitlyLiving Arrangement Bridging
The implementation uses two enum variables (Maine SSP pattern):
mi_ssp_living_arrangement— user-provided input enummi_ssp_payment_category— derived enum that overrides the input withssi_federal_living_arrangementfor shared categories:MEDICAL_TREATMENT_FACILITY→INSTITUTIONANOTHER_PERSONS_HOUSEHOLD→HOUSEHOLD_OF_ANOTHERThis 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)
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)
Files Added
Also updated:
policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py— addedmi_ssptoBENEFITSpolicyengine_us/parameters/gov/household/household_state_benefits.yaml— addedmi_sspto 2023 and 2024 sectionspolicyengine_us/programs.yaml— updated MI SSP entry withvariable: mi_ssp,parameter_prefix: gov.states.mi.mdhhs.ssp,status: completeHistorical 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
Test plan