Skip to content

Implement Iowa State Supplementary Payment (SSP)#8017

Draft
hua7450 wants to merge 6 commits intoPolicyEngine:mainfrom
hua7450:ia-ssp
Draft

Implement Iowa State Supplementary Payment (SSP)#8017
hua7450 wants to merge 6 commits intoPolicyEngine:mainfrom
hua7450:ia-ssp

Conversation

@hua7450
Copy link
Copy Markdown
Collaborator

@hua7450 hua7450 commented Apr 16, 2026

Summary

Implements Iowa's State Supplementary Assistance (SSA) — a state SSI supplement program administered by Iowa Department of Health and Human Services (HHS) under Iowa Code Chapter 249. SSA provides six modeled supplement categories (Blind, Dependent Person, Family-Life Home, In-Home Health-Related Care, Residential Care Facility, and Supplement for Medicare and Medicaid Eligibles) for low-income aged, blind, and disabled Iowans who receive or would receive federal SSI.

Closes #7733

Regulatory Authority

Program Overview

  • Administration: Dual — federal SSA administers Mandatory, Blind, DP, and FLH categories; Iowa HHS administers RCF, IHHRC, and SMME.
  • Funding: State funds (supplement paid on top of federal SSI).
  • Agency: Iowa Department of Health and Human Services (HHS, formerly DHS; reorganized 2023).
  • Statutory name in code: ia_ssa (SSA = State Supplementary Assistance per Iowa Code Ch 249 title; "SSP" is colloquial only).
  • Current caseload: 5,281 recipients in 2011 per SSA State Assistance Programs report (last year SSA published state-level counts).

Six Modeled Supplement Categories

Category Type Amount Source
Blind Flat $22/month IAC 441—52.1(4)
Dependent Person (DP) Income-difference, 5 configs $1,470–$3,031/month standard (2025–2026) IAC 441—52.1(2)
Family-Life Home (FLH) Income-difference Standard $1,129 (2025) / $1,156 (2026); max supplement $142 IAC 441—52.1(1)
In-Home HRC (IHHRC) Cost-based (capped) $480.55 single / $961.10 couple per month IAC 441—177.4(1)(f)
Residential Care (RCF) Cost-based per-diem $37.60/day (2025) / $38.47/day (2026) × 31 IAC 441—52.1(3)
SMME Flat $1/month IAC 441—52.1(7)

Category priority (highest to lowest, enforced in ia_ssa_category): RCF → IHHRC → FLH → DP → Blind → SMME → NONE.

Eligibility

Requirement Source How Modeled
Must be SSI-eligible (aged/blind/disabled, resources, immigration) Iowa Code §249.3; IAC 441—51.1 is_ssi_eligible
Must receive SSI or be income-eligible but-for excess income Iowa Code §249.3(2), §249.3(3) income-difference formulas using uncapped_ssi
Must reside in Iowa IAC 441—51.6 defined_for = StateCode.IA
Resources ≤ $2,000 individual / $3,000 couple 6-B manual p.2 federal SSI resources/limit (identical limits)
Category-specific living arrangement / demographic per category rule input booleans (resides in FLH/RCF, needs IHHRC, has dependent, has full Medicaid + Part B)

Benefit Amounts (Iowa HHS SSA page + 6-B manual)

Blind — IAC 441—52.1(4)

Period Amount
2017-07-01+ $22/month (frozen in IAC rule text)

Dependent Person — IAC 441—52.1(2), 6-B manual p.16–26, Iowa HHS 2026 page

Configuration 2025 Standard 2026 Standard
Aged/disabled client + dependent $1,470 $1,512
Aged/disabled client + A/D spouse + dependent $1,953 $2,009
Blind client + dependent $1,492 $1,534
Blind client + A/D spouse + dependent $1,975 $3,031 (verified against Iowa HHS SSA page)
Blind client + blind spouse + dependent $1,997 $2,053
Max per-person payment cap $503 $518
Dependent's countable income limit $503 $518

Family-Life Home — IAC 441—52.1(1), 6-B manual p.26

Component 2025 2026
Assistance standard (total) $1,129 $1,156
Personal needs allowance $126 $130
Max supplement (caps at $142, not $162, to offset SSI $20 disregard) $142 $142

In-Home Health-Related Care — IAC 441—177.4(1)(f) (frozen)

Component Amount
Max cost-of-care single $480.55/month
Max cost-of-care couple (both need care) $961.10/month

Residential Care Facility — IAC 441—52.1(3), IL 2024-12-30

Component 2025 2026
Max cost-related per diem $37.60/day $38.47/day
Personal needs allowance $126 $130
Days multiplier 31 31

SMME — IAC 441—52.1(7) (frozen)

Component Amount
Supplement $1/month (paid quarterly, modeled as $1/month)

Couple treatment: DP and FLH use per-couple configurations with both spouses eligible; RCF/IHHRC use per-person cost caps; Blind/SMME use individual flat amounts.

COLA: Annual, effective January 1, per IAC 441—52.1 introductory text and Iowa Code §249.9A (for RCF PNA, new in 2024). Blind ($22), IHHRC caps ($480.55/$961.10), and SMME ($1) are frozen in IAC rule text (no COLA).

Not Modeled (by design)

What Source Why Excluded
Mandatory State Supplement (MSS) Iowa Code §249.3(1); IAC 441—52.1(6) Closed December 1973 grandfather cohort; no input data in PolicyEngine
SMME SGA test IAC 441—51.7 SGA not modeled in PolicyEngine
Physician certification for IHHRC (Form 470-0673) IAC 441—177.6 Administrative verification
IHHRC 5-step disregard cascade (unmet medical needs) IAC 441—177.4(1)(f) uncapped_ssi > 0 proxy covers federal SSI disregards; state-specific unmet-medical disregards require inputs not in PolicyEngine
RCF pre-2017-07-01 flat $17.86/day branch IAC 441—52.1(3) Outside historical scope; program coverage starts 2017-07-01
Apply-for-other-benefits rule IAC 441—51.2 Administrative
SSN requirement IAC 441—51.9 Administrative
SMME income band (120% FPL to Medicaid limit) Iowa Code §249.3(4); IAC 441—51.7 Iowa Medicaid income-limit variable not available
IHHRC home maintenance allowances ($967/$1,450/$483) 6-B manual p.32 Equal federal SSI FBR — already handled by federal SSI calc
2012-2023 historical rate separate entries N/A Not separately verifiable — Wayback snapshots of Iowa HHS rates page return 404 for those years; values carry from 2017-07-01 entry via PolicyEngine date-carry

Files

policyengine_us/parameters/gov/states/ia/hhs/ssa/
  blind.yaml
  smme.yaml
  dp/
    assistance_standard.yaml       # breakdown by ia_ssa_dp_configuration enum
    dependent_income_limit.yaml
    max_per_person_cap.yaml
  flh/
    assistance_standard.yaml
    max_supplement.yaml
    personal_needs_allowance.yaml
  ihhrc/
    max_cost_single.yaml
    max_cost_couple.yaml
  rcf/
    days_multiplier.yaml
    max_per_diem.yaml
    personal_needs_allowance.yaml

policyengine_us/variables/gov/states/ia/hhs/ssa/
  ia_ssa.py
  ia_ssa_eligible.py
  ia_ssa_category.py
  ia_ssa_resources_eligible.py
  ia_ssa_blind_supplement.py
  dp/
    ia_ssa_dp_configuration.py
    ia_ssa_dp_supplement.py
    ia_ssa_dp_has_eligible_dependent.py
    ia_ssa_dp_dependent_countable_income.py
  flh/
    ia_ssa_flh_supplement.py
    ia_ssa_resides_in_family_life_home.py
  ihhrc/
    ia_ssa_ihhrc_supplement.py
    ia_ssa_ihhrc_cost_of_care.py
    ia_ssa_needs_in_home_health_related_care.py
  rcf/
    ia_ssa_rcf_supplement.py
    ia_ssa_rcf_cost_per_diem.py
    ia_ssa_resides_in_residential_care_facility.py
  ihhrc/
    ia_ssa_ihhrc_both_need_care.py     # extracted from duplicated sum==2 logic
  smme/
    ia_ssa_smme_supplement.py
    ia_ssa_smme_eligible.py
    ia_ssa_has_full_medicaid.py        # delegates to federal medicaid_enrolled
    ia_ssa_has_medicare_part_b.py      # delegates to federal medicare_enrolled

policyengine_us/tests/policy/baseline/gov/states/ia/hhs/ssa/
  (10 YAML test files, one per variable, covering 64 test cases — unit per category, integration scenarios (asserting ssi + ia_ssa side-by-side), resource-eligibility boundaries, category priority pairings, transition boundaries, historical effective date)

policyengine_us/parameters/gov/household/household_state_benefits.yaml   [modified: adds ia_ssa to 2023 and 2024 date entries]
policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py [modified: adds ia_ssa to BENEFITS list]
changelog.d/ia-ssp.added.md

Historical Coverage

Parameters start at 2017-07-01 — the statutory effective date when IAC 441—52.1(3) removed the RCF flat-per-diem option and moved to cost-related-only reimbursement, aligning the entire program implementation with the post-2017 regulatory regime.

The 2017-07-01 entry uses the earliest-verified Iowa HHS rates (the 2024-published values preserved in the 6-B manual and Wayback snapshots). PolicyEngine date-carry applies these values to 2017-2023 simulations. Updates are added at 2025-01-01 and 2026-01-01 where rates change. This approach follows agent-lessons guidance against encoding unverified historical values.

2012-2016 and pre-2017 rates are not encoded — Wayback snapshots of the Iowa DHS SSA page return 404 for those years, and SSA stopped publishing state-by-state SSP reports after 2011. Future PRs may backdate if Iowa HHS provides historical records.

2026 DP Value Verification

The 2026 DP configuration (d) "Blind Client + Aged/Disabled Spouse + Dependent Relative" shows $3,031 on the Iowa HHS SSA page — a 53% jump from 2025's $1,975, while all other 2026 DP values reflect a ~2.8% COLA (expected ~$2,031). Verified against Iowa HHS SSA page (https://hhs.iowa.gov/assistance-programs/state-supplementary-assistance): the anomalous value is what Iowa publishes. YAML comment documents the anomaly.

/review-program Critical Fixes Applied

A follow-up commit applied all 13 critical issues surfaced by /review-program:

Parameters & references:

  • Verified $3,031 DP value against Iowa HHS; replaced suspected-typo comment with verification note
  • Fixed 4 broken PDF page anchors (blind.yaml, SMME + DP docstrings)

Variables:

  • ia_ssa_has_full_medicaid and ia_ssa_has_medicare_part_b now delegate to federal medicaid_enrolled / medicare_enrolled — SMME is reachable in microsim (previously defaulted to False, leaving SMME unreachable). Docstrings document the full-vs-partial Medicaid and Part-A-vs-B gaps for future refinement.
  • Added IAC 441—177.4(1)(c) own-home eligibility check to IHHRC category: in_own_home = ~in_rcf & ~in_flh. IHHRC no longer claims category precedence over FLH for FLH residents.
  • New ia_ssa_ihhrc_both_need_care variable extracts marital_unit.sum(needs_ihhrc) == 2, deduplicating the hard-coded 2 from ia_ssa_category.py and ia_ssa_ihhrc_supplement.py.
  • ia_ssa_blind_supplement docstring documents IAC 441—52.1(4) mutual exclusivity: blind recipient receives $22 only if no higher-priority category applies.

Tests:

  • 5 non-functional "ineligible" tests reworked: previously forced is_ssi_eligible: false (short-circuiting the logic); now use ssi_countable_resources: 5000 to exercise ia_ssa_resources_eligibleia_ssa_eligible composition.
  • New ia_ssa_resources_eligible.yaml with 5 boundary cases (single/couple × below/at/above limit).
  • IHHRC supplement gains couple cases (both-at-cap, both-above-cap, one-spouse-only fallback) — the $961.10 couple cap and both_need_care switch are now exercised.
  • Category priority expanded 4 → 11 cases: IHHRC-over-{FLH, DP, BLIND, SMME}, DP-over-{BLIND, SMME}, BLIND-over-SMME, plus the own-home FLH>IHHRC case.
  • New blind RCF-resident case locks in: blind person in RCF → $0 blind supplement, $324.60 RCF supplement.

Test file consolidation:

  • Collapsed 17 test YAMLs → 10, one per variable. Integration cases merged into their primary-variable's test file; redundant test_2025_to_2026_transition.yaml removed (all cases duplicated supplement-file cases).
  • Integration-style cases now assert ssi: [x] and ia_ssa: [y] side-by-side so the federal-plus-state total is explicit from outputs.

Verification TODO

  • Verify 2026 DP config (d) "Blind + A/D spouse + dep" value ($3,031 verified as published on Iowa HHS SSA page)
  • Verify 6-B manual rate amounts against Iowa HHS bulletin for 2025 and 2026
  • Consider backdating parameters to 2012-2023 if Iowa HHS can provide historical rate records
  • CI passes

Test plan

  • 64 tests pass across 10 YAML files — one per variable. Unit tests per category, integration-style cases with real social_security/employment_income inputs asserting ssi + ia_ssa side-by-side, resource-eligibility boundary tests, category priority pairings including own-home rule, 2025→2026 transition boundaries, 2017-07-01 effective-date test
  • Branch merged with upstream/main (105 commits)
  • CI passes

Key Citations

hua7450 added 2 commits April 16, 2026 12:59
Adds Iowa SSA (Iowa Code Ch 249; IAC 441 Chs 50-52, 54, 177) covering:
- Blind supplement (flat $22/month)
- Dependent Person (DP) supplement (5 household configurations)
- Family-Life Home (FLH) supplement (max $142/month)
- In-Home Health-Related Care (IHHRC) supplement (cost-based, max $480.55/$961.10)
- Residential Care Facility (RCF) supplement (cost-related per diem)
- Supplement for Medicare and Medicaid Eligibles (SMME) (flat $1/month)

Closes PolicyEngine#7733
@codecov
Copy link
Copy Markdown

codecov bot commented Apr 16, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.11%. Comparing base (61ae9f9) to head (b3896bc).
⚠️ Report is 232 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #8017      +/-   ##
==========================================
+ Coverage   91.75%   98.11%   +6.36%     
==========================================
  Files          42       23      -19     
  Lines         837      319     -518     
  Branches       22        2      -20     
==========================================
- Hits          768      313     -455     
+ Misses         67        6      -61     
+ Partials        2        0       -2     
Flag Coverage Δ
unittests 98.11% <100.00%> (+6.36%) ⬆️

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 4 commits April 17, 2026 16:32
- Verified $3,031 DP BLIND_WITH_AGED configuration against Iowa HHS; replaced typo comment with verification note
- Fixed 4 broken PDF page anchors (blind.yaml, SMME + DP docstrings)
- Added formulas to ia_ssa_has_full_medicaid / ia_ssa_has_medicare_part_b delegating to federal medicaid_enrolled / medicare_enrolled, making SMME reachable in microsim
- Added IAC 441-177.4(1)(c) own-home eligibility check to IHHRC category
- Extracted ia_ssa_ihhrc_both_need_care variable; removed hard-coded 2 duplicated in two files
- Reworked 5 non-functional ineligible tests to exercise ia_ssa_resources_eligible via ssi_countable_resources
- Added ia_ssa_resources_eligible.yaml with boundary coverage (single/couple x below/at/above)
- Added couple IHHRC test cases (at cap, above cap, one-spouse fallback)
- Expanded category priority from 4 to 11 cases (IHHRC/DP/BLIND/SMME pairings)
- Locked in blind combinability: blind RCF resident -> $0 blind supplement
- Documented IAC 441-52.1(4) mutual exclusivity in ia_ssa_blind_supplement docstring
- Consolidated test files to one-per-variable: merged integration_* and test_2025_to_2026_transition cases into variable-specific files with ssi + ia_ssa outputs side-by-side

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The prior formulas used `max(0, -uncapped_ssi) + ssi` as a proxy for total
monthly income. That expression equals `|FBR − countable_income|`, not
actual income, which caused material errors:

- RCF eligibility and client participation understated income for anyone
  with outside income below the FBR, overpaying the supplement by hundreds
  and classifying high-income residents as eligible.
- IHHRC cap (IAC 441—177.4(1)(f)) was compared against excess-over-FBR
  instead of monthly countable income, letting recipients with countable
  income far above the $480.55 cap qualify whenever they were below the FBR.
- DP and FLH phase-out (federally-administered per POMS SI 01415.050.F) did
  not use the federal SSP formula, paying the full cap in income bands where
  the supplement should phase down dollar-for-dollar.

Fixes:
- RCF and IHHRC (state-administered) use monthly SSI countable income +
  federal SSI payment as total income, matching IAC 441—52.1 rules.
- DP and FLH (federally-administered) use
  `max(0, total_standard − max(countable, FBR))`, matching POMS SSP rules.
- Delete unused flh.personal_needs_allowance parameter (dead code — FLH
  assistance standard is a lumped sum that already includes the allowance).
- Add regression tests for each bug.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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 Iowa State Supplemental Payment (SSP)

1 participant