Skip to content

Implement Indiana State Supplementary Payment (SSP)#7887

Merged
PavelMakarchuk merged 11 commits intoPolicyEngine:mainfrom
hua7450:in-ssp
Apr 17, 2026
Merged

Implement Indiana State Supplementary Payment (SSP)#7887
PavelMakarchuk merged 11 commits intoPolicyEngine:mainfrom
hua7450:in-ssp

Conversation

@hua7450
Copy link
Copy Markdown
Collaborator

@hua7450 hua7450 commented Mar 26, 2026

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

  • Administration: State-administered by FSSA (Family and Social Services Administration), Division of Aging
  • Funding: 100% state funds
  • Statutory basis: Indiana Public Law 46, Acts of 1976 (effective July 1, 1976)
  • Current caseload: 3,442 recipients (1,517 licensed residential; 1,925 Medicaid facility) as of January 2011 (SSA 2011 report -- last published edition)
  • Total expenditures: $8,453,205.54 (CY 2010)

Eligibility

Requirement Source How Modeled
SAPN: Must actually receive SSI IC 12-15-32-6.5; FSSA PM 5000 § 5005.00.00 ssi > 0
SAPN: Must be Medicaid enrolled FSSA PM 5000 § 5005.00.00: "receiving Medicaid" medicaid_enrolled
SAPN: Must reside in federal Medicaid facility FSSA PM 5000; 20 CFR § 416.414 ssi_federal_living_arrangement == MEDICAL_TREATMENT_FACILITY
SAPN: Must be age 18+ SSA 2011 Report age >= age_threshold parameter (18)
RCAP: Must be Medicaid recipient or SSI recipient SSA 2011: "adult Medicaid or SSI recipients"; Indiana RCAP page (ssi > 0) | medicaid_enrolled
RCAP: Must reside in licensed/unlicensed residential care facility SSA 2011 Report; 455 IAC 1-3-3 in_ssp_living_arrangement == LICENSED_RESIDENTIAL | UNLICENSED_RESIDENTIAL
RCAP: Must be age 18+ SSA 2011 Report age >= age_threshold parameter (18)
Must reside in Indiana State program defined_for = StateCode.IN

Benefit Amounts

SAPN -- Supplemental Assistance for Personal Needs (SSA POMS SI CHI01401.001; FSSA Chapter 5000)

Category Monthly Amount Source
Individual supplement $22 SSA POMS; SSA 2011 Report
Couple supplement $44 ($22/person) SSA 2011 Report
Combined (fed SSI + state): individual $52 ($30 SSI + $22 SAPN) SSA 2011 Report Table 1
Combined (fed SSI + state): couple $104 ($60 SSI + $44 SAPN) SSA 2011 Report Table 1

SAPN formula: min(PNA - actual_SSI - ssi_countable_income, $22), floored at $0. Uses ssi_countable_income as 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_joint for couple detection
COLA: Frozen since July 2002

RCAP -- Residential Care Assistance Program (455 IAC 1-3-3)

Category Per Diem Rate Effective Source
Licensed facility (under IC 16-28) $39.35/day Jan 2004 455 IAC 1-3-3
Licensed facility (under IC 16-28) $49.35/day Jul 2008 Gargano v. Lee Alan Bryant (2012); FSSA Provider Guide
Unlicensed facility $27.00/day Jan 2004 455 IAC 1-3-3
Unlicensed facility $37.00/day Jul 2008 FSSA Provider Guide
Personal needs allowance $52/month Jul 2002 IC 12-10-6-2.1(d)

RCAP formula: max(0, per_diem * 365/12 - actual_SSI - ssi_countable_income)

Not Modeled (by design)

What Source Why Excluded
Indiana resource limits ($1,500/$2,250) SSA 2011 Report Simplified via SSI eligibility check
Medicaid post-eligibility income (vs SSI countable) 405 IAC 7-1-1 ssi_countable_income used as proxy; differs when SSI exclusions apply
Couples treated as individuals after 1 month in facility SSA 2011 Report note b Time-dependent transition rule
$16 sheltered workshop incentive exclusion SSA 2011 Report Rare scenario
Tax liability retention allowance IC 12-10-6-2.1(e) Complex tax calculation

Files

parameters/gov/states/in/fssa/ssp/
variables/gov/states/in/fssa/ssp/
tests/policy/baseline/gov/states/in/fssa/ssp/

Test plan

  • 67 tests pass
  • CI passes

🤖 Generated with Claude Code

hua7450 and others added 2 commits March 26, 2026 00:59
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
Copy link
Copy Markdown

codecov bot commented Mar 26, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 96.12%. Comparing base (d51a2e2) to head (9051eec).
⚠️ Report is 121 commits behind head on main.

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              
Flag Coverage Δ
unittests 96.12% <100.00%> (+1.58%) ⬆️

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 and others added 3 commits March 26, 2026 03:18
- 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>
@hua7450 hua7450 marked this pull request as ready for review March 26, 2026 21:49
@MaxGhenis
Copy link
Copy Markdown
Contributor

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.

@MaxGhenis
Copy link
Copy Markdown
Contributor

Follow-up fixes pushed on this branch:

  • wired in_ssp into the shared household/SPM benefit aggregates so Indiana SSP affects downstream outputs
  • corrected the Medicaid-facility SSI path to use the federal $30 payment limit in Indiana SAPN cases
  • updated SAPN to phase down against the $52 personal-needs allowance instead of paying a flat amount, and corrected RCAP to deduct both SSI and countable income
  • added targeted regression coverage for reduced-SSI SAPN cases and RCAP cases with additional countable income

Local verification: policyengine_us/tests/policy/baseline/gov/states/in/fssa/ssp/integration.yaml and targeted ruff check both passed.

@hua7450 hua7450 marked this pull request as draft April 14, 2026 21:19
hua7450 and others added 2 commits April 14, 2026 21:19
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>
@hua7450 hua7450 marked this pull request as ready for review April 15, 2026 02:01
Copy link
Copy Markdown
Collaborator

@PavelMakarchuk PavelMakarchuk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

  1. 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
  2. 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
  3. 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/ -- affects age_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).
  4. Add SAPN partial benefit test. No test covers the scenario where pna - ssi_monthly - countable_income falls 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 the min_ cap is not always the binding constraint.

  5. 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 is is_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

  1. 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.yaml and rcap/per_diem/unlicensed.yaml.

  2. Add PDF page anchors. Three PDF references lack #page= anchors:

    • Medicaid_PM_5000.pdf in sapn/amount/individual.yaml -- add #page=2 (Section 5005.05.00)
    • RCAP-Provider-Guide.pdf in rcap/per_diem/licensed.yaml and unlicensed.yaml -- add appropriate #page=XX
  3. Prefer official .gov sources over third-party legal databases. Several references use law.justia.com (third-party) instead of iga.in.gov (official Indiana), and law.cornell.edu instead of www.in.gov/legislative/iac/.

  4. 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.

  5. Add dedicated test file for in_ssp_living_arrangement. This variable has a formula with select() 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.

  6. 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).

  7. Add test for both residential facility flags set simultaneously. Tests select() priority when both in_resides_in_licensed_residential_facility and in_resides_in_unlicensed_residential_facility are true (licensed should win).

  8. 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.yaml
  • policyengine_us/parameters/gov/states/in/fssa/ssp/personal_needs_allowance.yaml
  • policyengine_us/parameters/gov/states/in/fssa/ssp/rcap/per_diem/licensed.yaml
  • policyengine_us/parameters/gov/states/in/fssa/ssp/rcap/per_diem/unlicensed.yaml
  • policyengine_us/parameters/gov/states/in/fssa/ssp/sapn/amount/couple.yaml
  • policyengine_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.py
  • policyengine_us/variables/gov/states/in/fssa/ssp/in_resides_in_unlicensed_residential_facility.py
  • policyengine_us/variables/gov/states/in/fssa/ssp/in_ssp.py
  • policyengine_us/variables/gov/states/in/fssa/ssp/in_ssp_eligible.py
  • policyengine_us/variables/gov/states/in/fssa/ssp/in_ssp_living_arrangement.py
  • policyengine_us/variables/gov/states/in/fssa/ssp/in_ssp_rcap.py
  • policyengine_us/variables/gov/states/in/fssa/ssp/in_ssp_rcap_eligible.py
  • policyengine_us/variables/gov/states/in/fssa/ssp/in_ssp_sapn.py
  • policyengine_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.md
  • policyengine_us/parameters/gov/household/household_state_benefits.yaml
  • policyengine_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

@PavelMakarchuk PavelMakarchuk merged commit 1e3e806 into PolicyEngine:main Apr 17, 2026
9 checks passed
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 Indiana State Supplementary Payment (SSP)

3 participants