Implement Indiana State Supplementary Payment (SSP)#7887
Implement Indiana State Supplementary Payment (SSP)#7887PavelMakarchuk merged 11 commits intoPolicyEngine:mainfrom
Conversation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds SAPN (Medicaid facility supplement, $22/mo) and RCAP (residential care assistance, per diem rates) for Indiana SSI recipients. Refs PolicyEngine#7886 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #7887 +/- ##
==========================================
+ Coverage 94.54% 96.12% +1.58%
==========================================
Files 7 10 +3
Lines 110 155 +45
Branches 2 2
==========================================
+ Hits 104 149 +45
Misses 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:
|
- Change RCAP per diem effective date from 2003-01-01 to 2004-01-01 per POMS - Fix daily-to-monthly conversion: 365/12 instead of 52*7/12 (364/12) - Update all RCAP test expected values accordingly Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…rmula - SAPN eligibility: add uncapped_ssi > 0 check per IC 12-15-32-6.5 (must be SSI recipient, not just categorically eligible) - RCAP per diem: add July 2008 rates ($49.35 licensed, $37 unlicensed) confirmed by Gargano v. Lee Alan Bryant (2012) and FSSA Provider Guide - RCAP formula: remove PNA from state standard — per diem × 365/12 IS the full standard; PNA is carved out, not added on top - Remove non-code research artifacts (lessons/, sources/) - Update all test values to match corrected formula Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Follow-up fixes pushed on this branch:\n\n- wired into the shared household/SPM benefit aggregates so Indiana SSP affects downstream outputs\n- corrected the Medicaid-facility SSI path to use the federal payment limit in Indiana SAPN cases\n- updated SAPN to phase down against the personal-needs allowance instead of paying a flat amount, and corrected RCAP to deduct both SSI and countable income\n- added targeted regression coverage for reduced-SSI SAPN cases and RCAP cases with additional countable income\n\nLocal verification: and targeted All checks passed! both passed. |
|
Follow-up fixes pushed on this branch:
Local verification: policyengine_us/tests/policy/baseline/gov/states/in/fssa/ssp/integration.yaml and targeted ruff check both passed. |
SAPN eligible: - Remove redundant is_ssi_eligible (ssi > 0 implies it) - Use medicaid_enrolled instead of is_medicaid_eligible - Use ssi_federal_living_arrangement == MEDICAL_TREATMENT_FACILITY instead of state enum, linking to federal SSI $30 reduction SAPN benefit: - Use actual ssi instead of ssi_amount_if_eligible (FBR) - Keep ssi_countable_income as post-eligibility income proxy RCAP eligible: - Require (ssi > 0) | medicaid_enrolled per SSA 2011: "adult Medicaid or SSI recipients" RCAP benefit: - Clean up period access (use auto-conversion) Tests: - Add federal facility inputs to all SAPN cases - Fix stale expectations for new eligibility rules Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Convert in_ssp_living_arrangement from Household bare input to Person formula variable, deriving from ssi_federal_living_arrangement (MEDICAID_FACILITY) and two new state-specific boolean inputs (in_resides_in_licensed/unlicensed_residential_facility) - Add is_ssi_aged_blind_disabled to RCAP eligibility per SSA 2011: "because of age, blindness, or disability" - Remove MEDICAID_FACILITY from state enum then re-add as derived from federal living arrangement (follows AK pattern) - Update all tests to use person-level boolean inputs Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
PavelMakarchuk
left a comment
There was a problem hiding this comment.
Program Review: PR #7887 -- Implement Indiana State Supplementary Payment (SSP)
Source Documents
- POMS: SI CHI01401.001 (effective 10/05/2022)
- FSSA: Medicaid Policy Manual Chapter 5000
- IAC: 455 IAC 1-3-3 (filed June 5, 2003)
- Statutes: IC 12-15-32-6.5, IC 12-10-6-2.1
- Legislative: HEA 1001-2007, Section 233 ($10/day per diem increase)
- CI: All 9 checks passing (lint, baseline, states, structural, reform, coverage)
Critical (Must Fix)
None.
The reference validator flagged 4 items as "critical," but after cross-referencing with the regulatory reviewer's analysis, none represent actual value errors:
-
Per diem rates ($49.35/$37): The VALUES are correct. The regulatory reviewer confirmed these are the original 455 IAC 1-3-3 rates ($39.35/$27) plus the $10/day increase from HEA 1001-2007, Section 233 (effective July 1, 2008). The parameter files correctly include both the original and updated values with proper effective dates. The issue is that the CITED regulation (455 IAC 1-3-3) only shows the old rates -- this is a reference quality issue, not a value error. Reclassified to Should Address #1.
-
SAPN couple $44: The VALUE is correct. The regulatory reviewer confirmed $44 from POMS ($22 individual x 2). The reference validator could not find an explicit $44 figure in accessible sources because POMS states "$22.00 supplemental payment" for individuals and the couple amount is derived. Reclassified to Should Address #2.
-
SSA 2011 page 403 / Justia 403: These are broken links, not wrong values. All underlying values are independently corroborated by POMS and/or Medicaid PM 5000. Reclassified to Should Address #3.
Should Address
-
Cite the correct source for updated per diem rates. The parameter files cite 455 IAC 1-3-3 for the $49.35 (licensed) and $37 (unlicensed) rates, but that regulation only contains the original $39.35/$27 rates. Add a reference to HEA 1001-2007, Section 233 (or the corresponding session law) as the authority for the $10/day increase effective July 2008. The Findlaw case citation (Gargano v. Lee Alan Bryant) returns 403 Forbidden and cannot serve as a verifiable reference.
- Files:
rcap/per_diem/licensed.yaml,rcap/per_diem/unlicensed.yaml
- Files:
-
Add explicit source for SAPN couple amount ($44). POMS SI CHI01401.001 states the individual amount ($22) but does not explicitly mention a couple amount. Either (a) find and cite the specific POMS section or state regulation that states $44, or (b) add a note in the parameter description that the couple amount is 2x the individual amount per standard SSP couple treatment.
- File:
sapn/amount/couple.yaml
- File:
-
Replace broken reference URLs. Two widely-cited URLs return HTTP 403:
https://www.ssa.gov/policy/docs/progdesc/ssi_st_asst/2011/in.html-- affects 5 parameters and 6 variables. Replace with a working URL (Wayback Machine archive or updated SSA location) or the primary Indiana legal authority.https://law.justia.com/codes/indiana/title-12/article-10/chapter-6/section-12-10-6-2-1/-- affectsage_threshold.yaml,personal_needs_allowance.yaml,in_ssp_rcap_eligible.py. Replace with the official Indiana General Assembly URL (https://iga.in.gov/laws/2024/ic/titles/12#12-10-6-2.1).
-
Add SAPN partial benefit test. No test covers the scenario where
pna - ssi_monthly - countable_incomefalls between $0 and $22 (i.e., a partial SAPN benefit below the $22 cap). For example: SSI monthly = $35, countable income monthly = $10, giving $52 - $35 - $10 = $7. This verifies themin_cap is not always the binding constraint. -
Add Medicaid-only RCAP integration test. All existing RCAP integration tests use
is_ssi_eligible: true. Add a test for the Medicaid-only eligibility path: person isis_ssi_aged_blind_disabled: true,is_medicaid_eligible: true, NOT SSI-eligible, in a licensed residential facility. Expected RCAP = full state standard ($1,501.06) since SSI monthly = 0.
Suggestions
-
Remove "daily per diem" redundancy in descriptions. "Per diem" already means "per day." Change "daily per diem rate" to "per diem rate" in
rcap/per_diem/licensed.yamlandrcap/per_diem/unlicensed.yaml. -
Add PDF page anchors. Three PDF references lack
#page=anchors:Medicaid_PM_5000.pdfinsapn/amount/individual.yaml-- add#page=2(Section 5005.05.00)RCAP-Provider-Guide.pdfinrcap/per_diem/licensed.yamlandunlicensed.yaml-- add appropriate#page=XX
-
Prefer official
.govsources over third-party legal databases. Several references uselaw.justia.com(third-party) instead ofiga.in.gov(official Indiana), andlaw.cornell.eduinstead ofwww.in.gov/legislative/iac/. -
Add more specific section identifiers to reference titles. For example, SAPN individual reference title could be "SI CHI01401.001 Section B.2.b -- $22.00 supplemental payment" rather than the generic program title.
-
Add dedicated test file for
in_ssp_living_arrangement. This variable has a formula withselect()logic but no dedicated test file. It is exercised indirectly through integration and eligibility tests, which is acceptable, but a dedicated test would verify each arrangement type explicitly. -
Add SAPN couple partial amount test. Test where combined budgeted income produces a couple amount between $0 and $44 (e.g., both spouses with SSI = $30/month and countable income = $5/month each, giving couple_amount = $34, per-person = $17).
-
Add test for both residential facility flags set simultaneously. Tests
select()priority when bothin_resides_in_licensed_residential_facilityandin_resides_in_unlicensed_residential_facilityare true (licensed should win). -
Consider verifying the 1976-07-01 effective date for age_threshold. This is an unusually old effective date. If this comes from IC 12-10-6-2.1, the statute may have been enacted or amended at a different date.
Validation Summary
| Check | Result |
|---|---|
| SAPN individual amount ($22) | PASS -- confirmed by POMS and Medicaid PM 5000 |
| SAPN couple amount ($44) | PASS (value) -- $22 x 2, confirmed by regulatory reviewer via POMS; explicit citation should be added |
| Personal needs allowance ($52) | PASS -- confirmed by POMS and Medicaid PM 5000 |
| RCAP licensed per diem ($49.35) | PASS (value) -- $39.35 + $10 increase (HEA 1001-2007); cite correct source |
| RCAP unlicensed per diem ($37) | PASS (value) -- $27 + $10 increase (HEA 1001-2007); cite correct source |
| Age threshold (18) | PASS (value) -- plausible, consistent with regulatory language; cited sources return 403 |
| SAPN formula logic | PASS -- correctly implements min(PNA - SSI - income, max) with floor at 0 |
| SAPN couple logic | PASS -- correct income pooling and per-person split |
| RCAP formula logic | PASS -- correctly implements max(state_standard - SSI - income, 0) |
| SAPN eligibility criteria | PASS -- SSI recipient + Medicaid + medical facility + age 18+ + IN resident |
| RCAP eligibility criteria | PASS -- ABD + (SSI or Medicaid) + residential facility + age 18+ + IN resident |
| Mutual exclusivity (SAPN/RCAP) | PASS -- enforced by living arrangement enum |
| Period handling | PASS -- correct use of period.this_year for stock/boolean, period for flow variables |
| Code patterns (adds, where, select, max_, min_) | PASS -- all PolicyEngine patterns used correctly |
| Variable naming (in_ssp_ prefix) | PASS -- consistent throughout |
| No hardcoded policy values | PASS -- all values from parameters |
| Federal/state separation | PASS -- reuses existing SSI/Medicaid variables, only creates state-specific logic |
| Parameter-variable cross-reference | PASS -- no orphaned parameters |
| Wiring (household_state_benefits, spm_unit_benefits) | PASS -- correctly added |
| Changelog fragment | PASS -- changelog.d/in-ssp.added.md with type added |
| Test coverage (67 cases) | PASS -- comprehensive with minor gaps noted above |
| CI | PASS -- all 9 checks green |
| Reference format (tuples, no documentation field) | PASS |
| Accessible references | PARTIAL -- 2 URLs return 403 Forbidden |
File Inventory
Parameters (6 files):
policyengine_us/parameters/gov/states/in/fssa/ssp/age_threshold.yamlpolicyengine_us/parameters/gov/states/in/fssa/ssp/personal_needs_allowance.yamlpolicyengine_us/parameters/gov/states/in/fssa/ssp/rcap/per_diem/licensed.yamlpolicyengine_us/parameters/gov/states/in/fssa/ssp/rcap/per_diem/unlicensed.yamlpolicyengine_us/parameters/gov/states/in/fssa/ssp/sapn/amount/couple.yamlpolicyengine_us/parameters/gov/states/in/fssa/ssp/sapn/amount/individual.yaml
Variables (9 files):
policyengine_us/variables/gov/states/in/fssa/ssp/in_resides_in_licensed_residential_facility.pypolicyengine_us/variables/gov/states/in/fssa/ssp/in_resides_in_unlicensed_residential_facility.pypolicyengine_us/variables/gov/states/in/fssa/ssp/in_ssp.pypolicyengine_us/variables/gov/states/in/fssa/ssp/in_ssp_eligible.pypolicyengine_us/variables/gov/states/in/fssa/ssp/in_ssp_living_arrangement.pypolicyengine_us/variables/gov/states/in/fssa/ssp/in_ssp_rcap.pypolicyengine_us/variables/gov/states/in/fssa/ssp/in_ssp_rcap_eligible.pypolicyengine_us/variables/gov/states/in/fssa/ssp/in_ssp_sapn.pypolicyengine_us/variables/gov/states/in/fssa/ssp/in_ssp_sapn_eligible.py
Tests (8 files, 67 test cases):
policyengine_us/tests/policy/baseline/gov/states/in/fssa/ssp/edge_cases.yaml(25 cases)policyengine_us/tests/policy/baseline/gov/states/in/fssa/ssp/in_ssp.yaml(3 cases)policyengine_us/tests/policy/baseline/gov/states/in/fssa/ssp/in_ssp_eligible.yaml(3 cases)policyengine_us/tests/policy/baseline/gov/states/in/fssa/ssp/in_ssp_rcap.yaml(7 cases)policyengine_us/tests/policy/baseline/gov/states/in/fssa/ssp/in_ssp_rcap_eligible.yaml(8 cases)policyengine_us/tests/policy/baseline/gov/states/in/fssa/ssp/in_ssp_sapn.yaml(4 cases)policyengine_us/tests/policy/baseline/gov/states/in/fssa/ssp/in_ssp_sapn_eligible.yaml(8 cases)policyengine_us/tests/policy/baseline/gov/states/in/fssa/ssp/integration.yaml(9 cases)
Other modified files:
changelog.d/in-ssp.added.mdpolicyengine_us/parameters/gov/household/household_state_benefits.yamlpolicyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py
Review Severity: COMMENT
All parameter values are correct per regulatory analysis. No code logic errors found. The issues are reference quality (broken URLs, citing old regulation text for updated rates) and minor test coverage gaps. None are blocking.
Generated with Claude Code
Summary
Implements Indiana's State Supplementary Payment (SSP) -- two sub-programs: SAPN (Supplemental Assistance for Personal Needs) for Medicaid facility residents, and RCAP (Residential Care Assistance Program) for licensed residential care facility residents.
Closes #7886
Regulatory Authority
Program Overview
Eligibility
ssi > 0medicaid_enrolledssi_federal_living_arrangement == MEDICAL_TREATMENT_FACILITYage >= age_thresholdparameter (18)(ssi > 0) | medicaid_enrolledin_ssp_living_arrangement == LICENSED_RESIDENTIAL | UNLICENSED_RESIDENTIALage >= age_thresholdparameter (18)defined_for = StateCode.INBenefit Amounts
SAPN -- Supplemental Assistance for Personal Needs (SSA POMS SI CHI01401.001; FSSA Chapter 5000)
SAPN formula:
min(PNA - actual_SSI - ssi_countable_income, $22), floored at $0. Usesssi_countable_incomeas proxy for Medicaid post-eligibility countable income (405 IAC 7-1-1).Couple treatment: $22 per eligible person ($44 couple = $22 x 2); uses
ssi_claim_is_jointfor couple detectionCOLA: Frozen since July 2002
RCAP -- Residential Care Assistance Program (455 IAC 1-3-3)
RCAP formula:
max(0, per_diem * 365/12 - actual_SSI - ssi_countable_income)Not Modeled (by design)
ssi_countable_incomeused as proxy; differs when SSI exclusions applyFiles
Test plan
🤖 Generated with Claude Code