Implement Missouri State Supplementary Payment (SSP)#8231
Draft
hua7450 wants to merge 5 commits intoPolicyEngine:mainfrom
Draft
Implement Missouri State Supplementary Payment (SSP)#8231hua7450 wants to merge 5 commits intoPolicyEngine:mainfrom
hua7450 wants to merge 5 commits intoPolicyEngine:mainfrom
Conversation
Implements Missouri's Optional State Supplementation under DSS Family Support Division (closes PolicyEngine#8230): - Supplemental Aid to the Blind (SAB) — RSMo § 209.040, with grant formula: min(max(0, BP_rate - federal_SSI), max_grant_cap) - Supplemental Nursing Care (SNC) — RSMo § 208.030, four facility tiers (RCF I, RCF II/ALF, SNF non-Medicaid) - $50 SNF Personal Needs Allowance (effective 2015-01-01) - Three-FY parameter coverage (FY2024/FY2025/FY2026) sourced from MO DSS MHABD Appendix J + appropriations - Registered in spm_unit_benefits, household_state_benefits, programs.yaml 55 YAML tests (4 files): unit tests + 8-scenario integration suite. Closed-cohort logic (1973 hold-harmless, EIL-based "most beneficial of two methods") is intentionally not modeled. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #8231 +/- ##
===========================================
- Coverage 100.00% 94.78% -5.22%
===========================================
Files 12 7 -5
Lines 173 115 -58
Branches 4 2 -2
===========================================
- Hits 173 109 -64
- 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 PDF page anchor for SAB params (#page=4 → #page=2) - Fix wrong RSMo citation (209.040 is Blind Pension, not SAB; use 208.030(4)) - Add missing SNC tier INTERMEDIATE_OR_SKILLED_NO_LOC ($292, same as RCF II/ALF) - Replace manually computed non_ssi_income with existing ssi_countable_income - Fix invalid 0000-01-01 dates in age_threshold params (use 1900-01-01) - Replace period: eternity with period: year per user preference - Add test Case 22 for new SNC enum tier Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Fix PNA scope bug: $50 now applies to ALL SNC participants (not SNF only) per Appendix J page 4 "paid to all SNC participants" - Fix consolidated_standard / max_grant_cap citation mismatch (values are not in Appendix J — cite RSMo 209.040, DSS Manual 0715.010.10, and FY appropriations bills instead) - Fix age_threshold/sab.yaml RSMo cite (208.010 → 209.030 for "Every adult blind person, eighteen years of age or over...") - Add subsection precision to all SNC param refs (208.030 → 208.030(5)) - Single-sentence PNA description per parameter-patterns skill - Rename non_ssi_income to countable_income (now uses ssi_countable_income) - Update affected tests for PNA scope expansion (RCF I/II/ALF/INT_NO_LOC all now include $50 PNA) - Add 2 new PNA test cases for RCF II/ALF and INTERMEDIATE_OR_SKILLED_NO_LOC Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace inline TODO comment + dead URL with general HB 11 appropriations list URL. The PR description tracks the per-FY appropriations citations TODO for follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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 Missouri's State Supplementary Payment (SSP) — Supplemental Aid to the Blind (SAB) and Supplemental Nursing Care (SNC) cash supplements paid by DSS Family Support Division to SSI recipients in Missouri.
Closes #8230
Regulatory Authority
Program Overview
Eligibility
ssi > 0(per CLAUDE.md rule #2 — already implies categorical/resource/income/takeup)defined_for = StateCode.MOmo_ssp_age_eligiblechecks living arrangement and applies appropriate thresholdmo_ssp_living_arrangementenum input +mo_ssp_category_eligiblemo_ssp_eligiblereadssab.income_limit, applies only when SAB pathwayBenefit Amounts (MO DSS MHABD Appendix J 04/2026)
SAB (Supplemental Aid to the Blind)
SAB grant formula =
min( max(0, BP_rate − federal_SSI), max_grant_cap )SNC (Supplemental Nursing Care) — frozen since 2000-07-01
Personal Needs Allowance (effective 2015-01-01)
Couple treatment: Each spouse's SAB/SNC is computed independently based on their own SSI and living arrangement (per-person calculation). A couple where both spouses are eligible for the same SNC facility tier receives 2× the individual rate at the SPMUnit level.
COLA: SAB adjusts annually via state appropriations. SNC frozen since 2000-07-01. PNA frozen since 2015-01-01.
Not Modeled (by design)
ssi > 0already enforces stricter federal SSI resource limitsFiles
Plus registry updates in:
policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.pypolicyengine_us/parameters/gov/household/household_state_benefits.yamlpolicyengine_us/programs.yamlVerification TODO
Test plan
is_ssi_eligible & ssi > 0redundancy (usesssi > 0only per CLAUDE.md rule Run black formatting on docs #2)