Implement Iowa State Supplementary Payment (SSP)#8017
Implement Iowa State Supplementary Payment (SSP)#8017hua7450 wants to merge 27 commits intoPolicyEngine:mainfrom
Conversation
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 Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #8017 +/- ##
===========================================
+ Coverage 71.72% 98.16% +26.44%
===========================================
Files 4658 16 -4642
Lines 67710 327 -67383
Branches 341 2 -339
===========================================
- Hits 48563 321 -48242
+ Misses 19140 6 -19134
+ Partials 7 0 -7
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:
|
- 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>
…into ia-ssp # Conflicts: # policyengine_us/parameters/gov/household/household_state_benefits.yaml # policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py
- Add IAC 441—51.7(6) 120% FPL income floor for SMME eligibility - Restructure smme.yaml to smme/ folder (amount.yaml + minimum_income_fpl_multiplier.yaml) - Remove documentation= field from 3 variables (not PolicyEngine convention) - Fix days_multiplier.yaml description wording - Update programs.yaml: Iowa SSA status in_progress -> complete, add variable=ia_ssa - Rewrite tests with realistic income inputs (age, social_security_retirement) instead of bypass inputs (is_ssi_eligible, meets_ssi_resource_test, is_ssi_aged_blind_disabled); verify full federal-state chain - Add boundary and negative cases (SMME 120% FPL boundary, IHHRC countable income cap, FLH phase-down) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
IHHRC (IAC 441—177.10(3) and 441—177.4(1)(f)): - Maximum benefit payable is $480.55 per person, always — not $961.10 per person when both need care. The $961.10 is the combined couple INCOME cap in 441—177.4(1)(f), not a payment cap. - Income eligibility now compares combined marital-unit countable income against $961.10 when both spouses need care, and individual countable income against $480.55 otherwise. - Updated parameter descriptions and tests; dropped the now-irrelevant 441—52.1(5) reference on max_cost_couple (that subsection defers to Chapter 177, which sets the per-person payment cap at $480.55). Blind (IAC 441—52.1(4)): - Applied federally-administered SSP V-shape formula (like DP/FLH): max(0, FBR + state_standard - max(countable, FBR)). A blind recipient with countable income above $989 now correctly phases to $0 instead of receiving a flat $22 regardless of income. Medicare Part B (IAC 441—51.7(4)): - Documented that PolicyEngine's medicare_enrolled does not distinguish Part A from Part B. SMME statutorily requires Part B; using medicare_enrolled as the closest proxy, acknowledging Part A-only enrollees are not filtered out. RCF eligibility PNA check reviewed and confirmed correct per statute: 441—51.4(3) compares "income according to 441—paragraph 52.1(3)(a)" which already incorporates the PNA as disregard (2) before the 31 × max_per_diem threshold test. No change needed. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Blind (IAC 441—52.1(4)):
- Added income gate to BLIND category assignment that matches the
federally-administered V-shape ceiling (FBR + state standard = $989).
A blind person whose countable income exceeds $989 now falls through
to the next applicable category (e.g., SMME if income is also above
120% FPL) rather than being labeled BLIND with a $0 supplement.
Medicare Part B (IAC 441—51.7(4)):
- Converted ia_ssa_has_medicare_part_b to a pure input variable with
default False. Previously the formula defaulted to medicare_enrolled
(Part A and/or B), which pulled Part A-only enrollees into SMME.
SMME is a $1/month program for a narrow dual-eligible population; a
False default with explicit opt-in matches both the statutory
requirement ("currently eligible for Medicare Part B") and the real
caseload better than an overbroad proxy.
RCF eligibility PNA check re-verified: IAC 441—51.4(3) references "the
income according to 441—paragraph 52.1(3)(a)," and 52.1(3)(a) defines
"Income applied to meet the cost of care" as (countable + SSI benefit)
minus five disregards including the PNA (disregard 2). The current
code applies the PNA as the statute directs. No change.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
IAC 441—51.4(3) compares "the income according to 441—paragraph 52.1(3)(a)" against 31 × max_per_diem. Section 52.1(3)(a) describes two concepts: the gross income input (SSI countable + SSI benefit) and the post-disregard "Income applied to meet the cost of care" (client participation). The statute is textually ambiguous as to which "the income" refers to, but: - 31 × max_per_diem is approximately the monthly cost of RCF care at the maximum per-diem rate. Comparing gross monthly income against that cost is the meaningful substantive test — it excludes people who could afford care on their own income. - Standard benefit-program convention uses gross income for eligibility tests, with disregards (including personal needs allowances) applied in the benefit amount calculation. - Under the post-disregard reading, the test barely screens anyone out: income must exceed ~$1,292 (threshold + PNA + other disregards) to be ineligible at the 2025 per-diem rate, so the eligibility gate had almost no substantive effect. Switched ia_ssa_category.py to compare total_rcf_income (pre-PNA) against 31 × max_per_diem. The PNA remains in ia_ssa_rcf_supplement where it belongs: reducing client participation in the payment calculation. Cross-verified against SSA POMS SI 01415.050.F: RCF is state- administered by Iowa HHS, so this is a state policy interpretation, not a federal SSP formula question. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The prior "2017-07-01" effective date was incorrect — those values were copied from Iowa HHS's current web page (which shows 2025 values) and backdated to 2017 without historical verification. Replaced with properly sourced historical tiers: - **2011-01-01**: SSA State Assistance Programs for SSI Recipients — Iowa (January 2011), Table 1. Provides frozen values ($22 blind, $142 FLH aged max supplement, $480.55 / $961.10 IHHRC) and 2011 baselines for COLA-adjusted parameters. - **2017-01-01**: Iowa Administrative Code 01-04-2017 supplement. Provides 441—52.1 dollar amounts (FLH $897, DP $1,114/$1,482/$1,136/ $1,504/$1,526, RCF per diem $30.11, PNA $100) and 441—51.4(1) dependent-relative income limit $379. - **2018-01-01**: Iowa Administrative Code 03-28-2018 rule update for 441—52.1. Provides 2018 COLA values (FLH $912, DP $1,137/$1,512/ $1,159/$1,534/$1,556, RCF per diem $30.60, PNA $99). - **2025-01-01**: Iowa HHS General Letter 6-B-46 (effective January 1, 2025). Corresponds to the values previously misdated 2017-07-01. Preserves test expectations at 2025-01 period. - **2026-01-01**: Iowa HHS current State Supplementary Assistance Standards web page (unchanged). SMME parameters (amount $1, 120% FPL multiplier) start at 2017-01-01 — the program existed since October 1, 2003 but the SSA 2011 report does not publish the $1 amount directly, so we cite only what we can verify. DP dependent_income_limit and max_per_person_cap start at 2017-01-01 because the SSA 2011 report does not publish these specific Iowa-only concepts; the 2017 IAC supplement is the earliest direct source. All 73 Iowa SSA tests continue to pass at 2025-01 and 2026-01 periods. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- RCF income gate now compares post-PNA client participation against 31 x max_per_diem per IAC 441-51.3(3) cross-ref to 52.1(3)"a" - IHHRC income gate applies the SSI FBR disregard and checks combined marital-unit countable against the applicable cap symmetrically - IHHRC payment subtracts client participation per IAC 441-177.10(2)(a), split evenly across marital-unit members - DP dependent-income-eligible check moved into ia_ssa_category so a person with a disqualifying dependent falls through to BLIND / SMME instead of receiving a zero DP supplement - Resource test sums marital-unit resources for joint SSI claims - ia_ssa_has_full_medicaid converted to an explicit input with default_value=False, matching ia_ssa_has_medicare_part_b, so Medicaid pathways outside "full Medicaid" (spenddown, MEPD premium) do not trigger SMME - Fix citation typos: SMME minimum_income_fpl_multiplier cites 441-51.6(6); RCF days_multiplier cites 441-51.3(3) with unit /1 and period eternity - Strengthen 2026 DP BLIND_WITH_AGED_OR_DISABLED_SPOUSE_AND_DEPENDENT comment documenting the +53.5% jump vs 2.85% COLA anomaly - Add 2017 DP and 2018 RCF historical test cases; add DP fallthrough category test; update IHHRC and resources tests for new rules; remove obsolete sources/working_references.md Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…into ia-ssp # Conflicts: # policyengine_us/parameters/gov/household/household_state_benefits.yaml
Replace the six supplement variables (ia_ssa_blind_supplement, ia_ssa_dp_supplement, ia_ssa_flh_supplement, ia_ssa_ihhrc_supplement, ia_ssa_rcf_supplement, ia_ssa_smme_supplement) with a single payment formula in ia_ssa that selects over ia_ssa_living_arrangement. Rename ia_ssa_category -> ia_ssa_living_arrangement (enum and variable) to match the reality of what the enum represents. Helper variables that represent genuine inputs (residency flags, cost-of-care, DP configuration, Medicaid/Part B flags, SMME eligibility, both-need-care) remain unchanged. Tests reorganized: - ia_ssa_living_arrangement.yaml holds routing/priority tests - ia_ssa.yaml consolidates the six per-category payment tests with outputs renamed to ia_ssa; one BLIND-in-RCF case updated to assert the routed RCF payment rather than the zero blind value. All 77 Iowa SSA YAML tests pass; microsim unaffected. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Parameter normalization: - Rename dp/assistance_standard.yaml -> dp/state_supplement.yaml - Rename flh/assistance_standard.yaml -> flh/state_supplement.yaml - Values are now the state portion above FBR (consistent with blind.yaml), so all three federally-administered arrangements use one formula shape: max(0, (FBR + state_supplement) - max(countable, FBR)). P2 #1 — FLH Department top-up for SSI-only recipients: The Iowa FLH state supplement ($162 from 2017 onward) exceeds the federally-administered max_supplement cap ($142) by exactly $20, the SSI general-income disregard. Per IAC 441-52.1(1), when the recipient has no other income (so SSA's $20 disregard is unused), Iowa HHS issues an additional Department payment equal to (state_supplement - max_supplement) to close the gap and bring total income to the full standard. In 2011 the state supplement equals the cap so no top-up is owed; from 2017 onward the top-up is $20. P2 #2 — IHHRC client participation charged to sole recipient: When only one spouse needs IHHRC, charge the entire combined client participation to that spouse instead of splitting it evenly across the marital unit. The split remains correct for both-need-care couples where both members compute the supplement independently. Tests: - FLH Cases 1 and 4 (zero-income) now expect $162 (was $142) - New IHHRC Case 12 exercises the sole-recipient participation rule: couple with $800/mo SS each, one needs care -> supplement $270 instead of $335 under the old 50/50 split. 77 + 1 = 78 Iowa SSA tests pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Address three P2 review items: 1. 2026 DP BLIND_WITH_AGED_OR_DISABLED_SPOUSE_AND_DEPENDENT: Iowa HHS's published $3,031 breaks the "-$22 when only one spouse is blind" footnote rule that's held for 2011/2017/2018/2025 and inflates the phase-down ceiling so high-income 2026 cases still receive DP when they should phase to zero. Encoded as the COLA-consistent total $2,031 (state portion $1,037). YAML comment documents the suspected Iowa HHS publication error and the basis for the override. 2. DP max_per_person_cap and dependent_income_limit now carry 2018-01-01: $387, matching the base state_supplement 2018 tier. Prior gap left 2018-2024 DP payments and eligibility understated against the 2017 $379 values. 3. FLH blind recipients receive the $22 blind increment on top of the federally-administered $142 cap (POMS OS code I: state portion $164 for blind FLH residents). The blind increment replaces — not adds to — the SSI-only Department top-up; $22 > $20 always. New FLH test case 7 locks in the $164 figure for a blind FLH resident. 79 Iowa SSA tests pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PavelMakarchuk
left a comment
There was a problem hiding this comment.
Iowa State Supplementary Payment (SSP) — PR #8017 Review
Source Documents
- PDFs reviewed:
- IAC 441 Chapter 52 (Payment Standards) — https://www.legis.iowa.gov/docs/iac/chapter/01-07-2026.441.52.pdf
- IAC 441 Chapter 51 (Eligibility) — https://www.legis.iowa.gov/docs/iac/chapter/01-07-2026.441.51.pdf
- IAC 441 Chapter 177 (IHHRC) — https://www.legis.iowa.gov/docs/iac/chapter/01-07-2026.441.177.pdf
- SSA "State Assistance Programs for SSI Recipients" — Iowa, January 2011 — https://www.ssa.gov/policy/docs/progdesc/ssi_st_asst/2011/ia.pdf (via Wayback Machine)
- Iowa HHS General Letter 6-B-46 (effective 2025-01-01) — https://hhs.iowa.gov/media/15607/download
- Iowa HHS State Supplementary Assistance current rates page (HTML) — https://hhs.iowa.gov/assistance-programs/state-supplementary-assistance
- Year coverage: 2011, 2017, 2018, 2025, 2026
- Scope: Full PR diff (38 files; new state program implementation — 17 variables, 13 parameters, 5 test YAMLs, plus SPM-unit roll-up registration and program registry)
Critical (Must Fix)
-
DP supplement formula uses individual FBR for couple configurations and applies an unjustified per-person cap
- Location:
policyengine_us/variables/gov/states/ia/hhs/ssa/ia_ssa.py:39-43;parameters/.../dp/state_supplement.yaml;parameters/.../dp/max_per_person_cap.yaml. - The formula is
dp_raw = max_(0, (individual_fbr + dp_state_supplement) - countable_or_fbr); dp_amt = min_(dp_raw, p.dp.max_per_person_cap).countable_or_fbris clamped toindividual_fbr($967) even when the configuration represents an eligible couple — federal SSI for an eligible couple fills to the couple FBR ($1,450), not the individual FBR. Thestate_supplementYAML is back-calculated againstindividual_fbrfor every configuration, producing wildly inflated raw values that the author then bounds withmax_per_person_cap = $503. - The $503 cap has no regulatory basis as a payment ceiling — it is the dependent relative's income eligibility limit (per IAC 441-51.5(1) / GL 6-B-46 cover page), repurposed here.
max_per_person_cap.yamlanddependent_income_limit.yamlare byte-identical across all four years (379, 387, 503, 518), confirming the conflation. - Code-path verifier confirmed: for
BLIND_WITH_BLIND_SPOUSE_AND_DEPENDENT2025 with zero countable income, code returns $503; regulation requires $547 (= $1,997 standard − $1,450 couple FBR). $44/month error, locked in by testia_ssa.yamlCase 3. - Other affected 2025 configurations:
BLIND_WITH_DEPENDENT(true $525, code $503);BLIND_WITH_AGED_OR_DISABLED_SPOUSE_AND_DEPENDENT(true $525, code $503). - PDF citation: Iowa HHS GL 6-B-46 ("Making the Dependent Person Payment", manual lines 1714–1720): "Only the income of the eligible person or eligible couple is subtracted from the applicable assistance standard." 2025 standards listed at GL pp. 22 (image p. 28).
- Fix: Parameterize the assistance standard directly per configuration and select individual vs. couple FBR based on whether the configuration includes an eligible spouse, then
supplement = max(0, standard − max(countable, applicable_fbr)). Removemax_per_person_cap.
- Location:
-
$20 SSI general disregard incorrectly included in RCF/FLH/IHHRC client participation
- Location:
ia_ssa.py:22-26, 56-70, 71-80, 90-100;ia_ssa_living_arrangement.py:28-33, 39-66. - All three programs derive
countable_monthly = ssi_countable_income / 12, butssi_countable_incomealready applies the federal $20 general income exclusion (gov.ssa.ssi.income.exclusions.general) inside_apply_ssi_exclusions.py. The Iowa rules enumerate disregards exhaustively and omit the $20 exclusion:- RCF — IAC 441-52.1(3)(a) / GL 6-B-46 p. 58: "NOTE: Do not allow the SSI $20 income disregard."
- FLH — GL 6-B-46 p. 30: "EXCEPTION: Do not allow the $20 income disregard."
- IHHRC — IAC 441-177.4(1)(f) / GL 6-B-46 p. 36: "EXCEPTION: Do not allow the $20 disregard."
- Code-path verifier confirmed: test
ia_ssa.yamlRCF Case 6 (SS $1,000/mo) expects $311.60; correct value is $291.60. $20/month understatement of client participation = $20/month overstatement of supplement for any recipient with non-SSI unearned income ≥ $20/mo. The same error contaminates the income-eligibility gates (rcf_income_eligible,ihhrc_income_eligible,blind_income_eligible) within $20 of the cap. - Fix: Introduce an Iowa-specific
ia_ssa_countable_income_no_disregardhelper that adds backmin(unearned_monthly, $20), and use it in RCF/FLH/IHHRC payment formulas and in the corresponding routing-layer gates.
- Location:
-
Iowa SSA resource-limit dispatcher under-includes ineligible dependent spouses
- Location:
policyengine_us/variables/gov/states/ia/hhs/ssa/ia_ssa_resources_eligible.py:12-24. - Code uses
joint = ssi_claim_is_jointto flip both the resource pool (individual vs. marital sum) and the cap ($2,000 vs. $3,000).ssi_claim_is_jointreturns True only when both spouses are SSI-categorically-eligible heads/spouses. IAC 441-51.5(2) extends the $3,000 cap whenever the recipient has "a dependent spouse," and 51.5(4) defines that to include an "ineligible spouse … who is financially dependent upon the recipient." Also affects the third sentence of 51.5(2): "recipient, spouse, and dependent child or parent: $3,000." - Concrete failure: aged SSI recipient married to a 50-year-old non-disabled spouse with no income →
ssi_claim_is_joint = False→ tested individually against $2,000 instead of marital-unit against $3,000. - Fix: Replace the dispatcher with an Iowa-specific
ia_ssa_has_dependent_spouse(or extend ania_ssa_dp_*variable that already enumerates dependents) and sum resources across all 51.5-covered dependent relatives.
- Location:
-
Wrong IAC subsection citations (5 locations) — all 4 verifier claims confirmed
# File Wrong Correct 1 parameters/.../ssa/smme/minimum_income_fpl_multiplier.yaml(both refs)441—51.6(6) 441—51.7(6) 2 parameters/.../ssa/dp/dependent_income_limit.yaml441—51.4(1) 441—51.5(1) 3 parameters/.../ssa/dp/max_per_person_cap.yaml441—51.4(1) 441—51.5(1) 4 parameters/.../ssa/rcf/days_multiplier.yaml(both refs)441—51.3(3) 441—51.4(3) 5 variables/.../ssa/ia_ssa_living_arrangement.pyline 39 commentIAC 441—51.3(3) IAC 441—51.4(3) - 441-51.3 ("Supplementation") and 441-51.6 ("Residence") have no numbered subsections, so the cited references literally do not exist. The correct subsections (51.7(6) for the 120% FPL rule, 51.5(1) for dependent-relative income, 51.4(3) for RCF income eligibility) all match the parameter content verbatim.
-
RCF and IHHRC client-participation formulas omit required regulatory deductions
- Location:
ia_ssa.py:71-100. - RCF (IAC 441-52.1(3)(a) / GL 6-B-46 p. 57): Required deduction order is (1) impairment-related work expenses, (2) $65 + ½ remaining earned income, (3) $126 PNA, (4) diversion to spouse at home, (5) diversion to dependent child, (6) unmet medical needs of resident, (7) unmet medical needs of spouse/dependent, (8) first-month previous-living expenses. Code applies only #3.
- IHHRC (IAC 441-177.4(1)(f) / GL 6-B-46 p. 38): Required deductions are basic SSI standard, $65+½ earned income, dependent SSI standard plus unmet medical needs, ineligible-spouse medical needs, applicant medical needs. Code applies only the basic SSI standard. Entire 177.4(1)(g) child-deeming branch (parental income deemed to a child needing IHHRC, with 1/3 child-support disregard etc.) is unmodeled.
- PR description acknowledges the "5-step disregard cascade not modeled," but at minimum the $65+½ earned income disregard (a federal SSI primitive already in PE) and the $483-per-dependent diversions are computable and materially affect working/dependent households.
- Minimum recommended fix: Apply $65+½ earned-income disregard and the dependent diversions for RCF and IHHRC; document the omitted deductions explicitly in variable docstrings.
- Location:
Should Address
-
FLH
state_supplementhistorical (pre-2025) values disagree with SSA published baselines —flh/state_supplement.yamlencodes $142 (2011), $162 (2017), $162 (2018), but the SSA 2011 Iowa baseline (PDF 4 lines 99–115) shows the Iowa FLH state supplement was $344 (aged/disabled individual) / $366 (blind individual) in January 2011. The encoded $142 appears to be the SSA-administered cap, not the historical state supplement. (Regulatory S1.) -
SMME income test uses SPM-unit FPG instead of individual/couple FPG —
smme/ia_ssa_smme_eligible.py:27-29:fpg_monthly = person.spm_unit("spm_unit_fpg", period.this_year) / MONTHS_IN_YEAR. IAC 441-51.7(6) tests the recipient's income against 120% FPL for one (or two if joint claim). A single SSI-eligible aged person living with two adult children (SPM unit of 3) faces a 120% threshold of ~$2,665/mo instead of the correct ~$1,565/mo and would fail the test even though they should pass. Usepersonal_fpgfor individual claims and 2-person FPG for joint claims. (Regulatory S2.) -
DP
max_per_person_capparameter is duplicative and undocumented — Identical values todependent_income_limitacross all years. Conflates two regulatory concepts. Remove and replace with per-configuration state supplement encoding (related to Critical #1). (Regulatory S3.) -
DP/Blind/FLH input variables lack formula derivations and microsim defaults —
ia_ssa_dp_has_eligible_dependent,ia_ssa_dp_dependent_countable_income,ia_ssa_dp_configuration,ia_ssa_resides_in_family_life_home,ia_ssa_resides_in_residential_care_facility,ia_ssa_needs_in_home_health_related_care,ia_ssa_ihhrc_cost_of_care,ia_ssa_rcf_cost_per_diemare pure user-input variables. In a microsim run on enhanced CPS none will be populated, so DP/FLH/RCF/IHHRC will never fire. Acceptable as a manual-input pathway, but add at least minimal default formulas (e.g., defaultia_ssa_has_medicare_part_btois_medicare_eligible) where a federal PE variable already encodes the concept. (Regulatory S5/S6, Suggestion G1.) -
5 input variables omit
default_value—ia_ssa_dp_dependent_countable_income,ia_ssa_dp_has_eligible_dependent,ia_ssa_resides_in_family_life_home,ia_ssa_ihhrc_cost_of_care,ia_ssa_needs_in_home_health_related_care,ia_ssa_rcf_cost_per_diem,ia_ssa_resides_in_residential_care_facility. The PR setsdefault_value = Falseonia_ssa_has_full_medicaidandia_ssa_has_medicare_part_bbut is inconsistent for the rest. (Code S2.) -
FBR acronym in parameter descriptions —
dp/state_supplement.yamlandflh/state_supplement.yamluse "(FBR)" in the description field, violating the parameter-patterns "no acronyms" rule. (Code S4.) -
Period-bridging convention undocumented —
ia_ssa.py:29,ia_ssa_living_arrangement.py:37,ia_ssa_smme_eligible.py:16access YEAR-period inputs (ssi_claim_is_joint,is_ssi_aged_blind_disabled) withperiod.this_yearfrom MONTH formulas. Technically correct but consider a single explanatory comment near the top ofia_ssa.py. (Code S1.) -
#page=anchor mismatch in IHHRCmax_cost_single.yaml— Reference for441-177.10(3)uses#page=4but the rule is on file page 5. (Reference S1.) -
Iowa Code 249.9A reference missing
#page=anchor —rcf/personal_needs_allowance.yaml. (Reference S2.) -
Iowa HHS GL 6-B-46 download URL has no page anchor — Multiple files cite
hhs.iowa.gov/media/15607/downloadbare. Add#page=1for explicitness or cite the manual chapter URL. (Reference S3.) -
Bare HHS landing page reference for 2026 values is insufficient —
hhs.iowa.gov/assistance-programs/state-supplementary-assistanceis dynamic. Add a Wayback snapshot URL or a(retrieved YYYY-MM-DD)note. (Reference S4.) -
Income-eligibility gates inherit the $20-disregard error —
ia_ssa_living_arrangement.py:39-66: RCF income gate (< $1,165.60), IHHRC gates (<= $480.55/<= $961.10), and Blind income gate (< $989) all use the contaminatedcountable_monthly, so cases at or within $20 of the boundary may be mis-classified. (Regulatory S7 — addressed by Critical #2 fix.) -
No 2011 historical-tier test anywhere — Parameters define 2011-01-01 values (blind, RCF PNA $93, max_per_diem $28.14, dp.state_supplement, flh.max_supplement, etc.) but no test uses
period: 2011-01. The 2011→2017 transitions are unverified. (Test C1.) -
Missing payment test for
BLIND_WITH_AGED_OR_DISABLED_SPOUSE_AND_DEPENDENT— Only 4 of 5 non-NONE DP configurations are exercised; this config is the one with the disputed 2026 value, so a payment test pinning 2025 and 2026 is essential. (Test C2.) -
V-shape boundary at
countable == FBRnot directly tested — None of the BLIND/DP/FLH cases use asocial_security_retirementvalue engineered to putssi_countable_incomeexactly atindividual_fbr. (Test C3.) -
RCF post-PNA client-participation boundary not tested — Existing cases sit far above or far below the $1,165.60 threshold; no case engineered to land just below, exactly at, or one cent above. (Test C4.)
-
IHHRC combined countable equal to caps not tested —
ihhrc_countable_after_disregard <= ihhrc_capuses<=. No case sits exactly at $480.55 single or $961.10 couple. (Test C5.) -
Missing pair-wise priority routing tests — RCF > IHHRC, RCF > FLH, RCF > DP, RCF > SMME, FLH > DP, FLH > SMME are not directly tested. Cheap to add and protect against
select(...)reordering bugs. (Test S9.) -
SMME 120% FPL boundary partially covered, full-Medicaid vs. medically-needy distinction not covered, FLH blind add-on at 2026 not tested, FLH Department top-up
countable_monthly == 0boundary not tested, ineligible-person variants missing, DPhas_eligible_dependent: falsewith non-NONE configuration not tested. (Test S6, S8, S10, S11, S12, S13.)
Suggestions
-
2026
BLIND_WITH_AGED_OR_DISABLED_SPOUSE_AND_DEPENDENT$1,037 is an editorial guess — Iowa HHS publishes $3,031 for 2026; PR encodes $1,037 (state portion) on the theory that $3,031 is a typo. Already disclosed in YAML comment and PR description as intentional. Either confirm with Iowa HHS in writing and add response as comment, or fall back to the published $3,031 with a TODO. Documented as intentional — not blocking. (Regulatory S4 / Code G3 / PDF audit b.1.) -
Default
ia_ssa_has_medicare_part_btois_medicare_eligible— Would let SMME fire automatically in microsim. (Code G1.) -
Extract DRY intermediate variables —
countable_monthly,ssi_monthly,basic_ssi_disregard,combined_countableare re-derived in bothia_ssa.pyandia_ssa_living_arrangement.py. Consider sharedia_ssa_countable_income_monthlyetc. per the variable-patterns "intermediate variables for code reuse" rule. (Code G1.) -
Add YAML comments in
dependent_income_limit.yamlandmax_per_person_cap.yamlclarifying they are intentionally not breakdowns — Prevents a future contributor from "fixing" them. (Code S3.) -
RCF
cost_per_diemdefault top.rcf.max_per_diemwhen resident is flagged as in RCF — Behavioral improvement so the default supplement is non-zero. (Code G2.) -
ia_ssa_resources_eligibledescription should note monthly recomputation of an annual SSI resource test. (Code G4.) -
Consolidate 2017/2018 IAC supplement citations with effective-date parentheticals. (Reference G1.)
-
Tighten SSA 2011 footnote-a documentation in
dp/state_supplement.yaml. (Reference G2.) -
Add YAML comment in
rcf/days_multiplier.yamlexplaining the "31 = largest possible days-in-a-month" derivation. (Reference G3.) -
HHS rates page lists "Flat per Diem Rate $17.86" — likely informational only post-2017 transition to cost-related per diem. Confirm with author whether to encode. (PDF payment-standards audit c.1.)
-
Standardize
absolute_error_margin: 0.01across YAML test cases. (Test S19.) -
Test variants: negative income, explicit
ssi_claim_is_jointtoggling on couples, RCF per-diem exactly at cap, days-multiplier sensitivity, entity-scaffolding cleanup foria_ssa_dp_configuration.yaml. (Test S14, S15, S16, S17, S20.)
Investigated and Cleared (False Positives)
- SMME categorical contradiction (PDF eligibility audit Mismatch #1) — Rejected. Federal
is_ssi_eligiblechecks ABD + resources + immigration only; it does NOT encode an income test. The SMME-target population (income > 120% FPL with full Medicaid + Part B + ABD + SSI resource/immigration eligibility) passesis_ssi_eligibleand the SMME branch fires correctly. Verified end-to-end with a worked example (aged 70, $1,600/mo income, $1,500 resources → SMME = $1). - IHHRC $961.10 income cap "missing" (PDF IHHRC audit framing concern) — Rejected. The cap IS enforced — at
ia_ssa_living_arrangement.py:64(routing layer), where eligibility cutoffs belong in this codebase's pattern. The reviewer searched onlyia_ssa.py(payment layer) and stopped one file short. Same routing/payment split is used for RCF and Blind in the same file.
PDF Audit Summary
| Category | Count |
|---|---|
| Confirmed correct (parameters reconciled to PDFs) | 27 (8 Ch.52 payment standards, 5 IHHRC 2025 + 2011 baseline values, 7 eligibility/routing rules per Ch.51, 5 DP 2025 standards from GL 6-B-46, 2 SMME) |
| Mismatches confirmed (deliberate) | 1 (2026 DP BLIND_WITH_AGED_OR_DISABLED_SPOUSE_AND_DEPENDENT: repo $1,037 vs HHS $3,031, documented as intentional editorial override) |
| Mismatches rejected | 2 (SMME categorical gate, IHHRC $961.10 income cap routing) |
| Unmodeled items acknowledged in PR | 5+ (5-step IHHRC disregard cascade; RCF disregards #1/2/4-8; child IHHRC deeming branch 177.4(1)(g); first-month proration 177.10(2)(b); 15-day temporary absence rules) |
| New unmodeled items flagged | 8 (FIP application requirement 51.2; supplementation income reduction 51.3; physician-cert / facility-licensing inputs 51.4(1)/(2); RCF couple-room initial-month special rule 51.4(3); dependent earnings $65 work expense 51.5(1); full-month absence rule 51.5(3); SMME living-arrangement enumeration 51.7(5); SSN furnishing 51.9; income from room-and-board 51.8) |
Validation Summary
| Check | Result |
|---|---|
| Regulatory Accuracy | 3 critical (DP couple FBR, $20 disregard, RCF/IHHRC missing deductions), 7 should |
| Reference Quality | 4 critical citation errors (3 YAML + 1 covered under critical #4 group), 4 should |
| Code Patterns | 0 critical, 5 should, 4 suggestions |
| Test Coverage | 5 critical gaps, 8 should |
| PDF Value Audit | 0 unintentional mismatches; 1 deliberate (2026 DP override, documented) |
| CI Status | All 24 checks passing |
Review Severity: REQUEST_CHANGES
Justification: four confirmed code/regulatory bugs materially affect output dollars in real cases — (1) DP couple-FBR formula bug is a $44/month error encoded into a passing test; (2) $20 SSI disregard misapplication understates RCF/FLH/IHHRC client participation by $20/month for any recipient with non-trivial unearned income; (3) resource-limit dispatcher under-includes ineligible dependent spouses, denying eligibility to households entitled to the $3,000 cap; (4) five regulatory citations point to non-existent or unrelated subsections, undermining auditability. The deliberate 2026 DP override is acceptable as documented, but the structural bugs warrant fixes before merge.
Top Priorities for Author
- Fix DP couple-FBR / per-person-cap issue — Parameterize assistance standard per configuration; pick individual vs couple FBR based on whether configuration has an eligible spouse; remove
max_per_person_cap. - Strip $20 disregard for RCF/FLH/IHHRC — Add an
ia_ssa_countable_income_no_disregardhelper that adds backmin(unearned_monthly, $20); use in RCF/FLH/IHHRC payment formulas and routing-layer income gates. - Fix resource-limit dispatcher — Replace
ssi_claim_is_jointwith an Iowa-specificia_ssa_has_dependent_spousethat covers ineligible-but-financially-dependent spouses per IAC 441-51.5(4). - Correct IAC subsection citations (5 locations) —
smme/minimum_income_fpl_multiplier.yaml(51.6(6)→51.7(6));dp/dependent_income_limit.yamlanddp/max_per_person_cap.yaml(51.4(1)→51.5(1));rcf/days_multiplier.yaml(51.3(3)→51.4(3));ia_ssa_living_arrangement.py:39comment (51.3(3)→51.4(3)). - Add minimum-recommended deductions — $65+½ earned-income disregard and dependent diversions for RCF and IHHRC.
…mit, IAC citations, SMME FPG - DP: replace state_supplement (back-calculated against individual FBR) with per-config assistance_standard from GL 6-B-46 p. 22; pick couple FBR for spouse-inclusive configs. Removes the unjustified $503 max_per_person_cap that was conflated with the dependent_income_limit. Fixes 2025 BLIND configs that were understated by $22-$44/mo. - RCF/IHHRC: add ia_ssa_countable_income_no_disregard helper to reverse the SSI \$20 general exclusion (GL 6-B-46 pp. 36, 54-58 omit it). Accounts for SSI couple computation by sharing the add-back across the marital unit. FLH/DP/Blind keep ssi_countable_income — they are SSA-administered and the \$20 disregard is real money the recipient receives. - Resource limit: dispatch on marital_unit.nb_persons() > 1 instead of ssi_claim_is_joint, so an aged recipient with an ineligible-but-co-resident spouse correctly gets the IAC 441-51.5(2) couple \$3,000 limit. - IAC citations: 51.6(6) -> 51.7(6) for SMME 2026 ref, 51.4(1) -> 51.5(1) for DP dependent income limit, 51.3(3) -> 51.4(3) for RCF days_multiplier and the matching comment. - SMME income test: size FPG by 1-person (or 2-person on joint claim) per IAC 441-51.7(6) "income of a recipient", not by full SPM unit. - Tests: refresh DP/RCF/IHHRC expected values for the new formulas; add a resources test for ineligible-co-resident-spouse; restructure DP cases 3, 4, 8 with realistic 3-person setups instead of single person tagged with couple-inclusive configurations. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…dd-back - Add 2011 historical values to dp/dependent_income_limit ($344, verified from SSA 2011 Iowa Table 1 Code C state portion = $1,018 - $674 FBR), smme/amount ($1 token, SMME enacted by 2004 Iowa Acts ch. 1085), and smme/minimum_income_fpl_multiplier (1.2, 120% FPL test in Iowa Code 249.3(4)(g) since 2004). Eliminates ParameterNotFoundError on pre-2017 RCF/Blind/etc. simulations where these values are read unconditionally. - Restore the earned-income portion of the SSI $20 general disregard add-back per 20 CFR § 416.1112: when unearned < $20, the leftover applies inside the earned flat ($65 + leftover) and is then reduced by the 50% earned-share rule. The helper now adds back applied_to_unearned + applied_to_earned * (1 - earned_share) instead of only min(unearned, $20). Verified against GL 6-B-46 p. 55 example ($500/mo earned -> RCF countable $977 = SSI standard + $10). - Tests: add 2011 RCF historical regression and a $500/mo earned-only RCF case that matches the manual's $977 countable income walkthrough. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The helper reconstructs where the SSI $20 general exclusion landed, so its inputs must mirror _apply_ssi_exclusions exactly: marital unearned + parent deemed + ISM on the unearned side, and marital earned − blind/disabled working-student exclusion on the earned side. The previous version saw only ssi_unearned_income / ssi_earned_income, so it under-detected when the $20 landed on ISM or parental-deemed unearned income (e.g., $100/mo ISM with $500/mo earnings under-counted client participation by $10/mo). Also drops redundant period.this_year / MONTHS_IN_YEAR conversions on flow variables — period auto-converts annual flows to monthly inside a MONTH formula. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Remove ungrounded $22 blind add-on from FLH supplement (IAC 441-52.1(4) excludes the $22 standard for recipients of any other SSP); replace fragile float-equality with tolerance-based gap branch. - Fix three PDF page anchors: ihhrc/max_cost_single 4→5, rcf/days_multiplier 2→1, and rcf/ia_ssa_resides_in_residential_care_facility.py 2→1. - Fix dp/dependent_income_limit.yaml 2017 supplement section title from 441-51.5(1) to 441-51.4(1). - Refactor: replace 3 input booleans with one ia_ssa_living_arrangement_input enum, matching the MA/MI/AK/CT/IN state SSP pattern. Net -2 files. - Update Case 7 expected value $164 → $162 to reflect the FLH blind add-on removal. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Formula bugs uncovered while expanding test coverage: * IHHRC supplement was always zero in production. ia_ssa_ihhrc_cost_of_care had no formula, so cost defaulted to zero and ihhrc_amt collapsed to max(0, 0 - participation) = 0. Add a formula that imputes max_cost_single when ia_ssa_living_arrangement is IHHRC; users can still override with actual care-cost data. * DP supplement double-attributed to spouses. When both spouses encoded the same couple-FBR DP configuration, both computed the full per-couple supplement and the SPM-unit total doubled. Add a per-marital-unit divisor guard that splits the supplement across claimants. * DP and SMME compared per-spouse income to couple-level thresholds. For joint SSI claims, ssi_countable_income returns combined / 2 per spouse, but the DP couple-FBR comparison and the SMME 2-person FPL gate were written against per-spouse values. Aggregate countable across the marital unit before the comparison when the threshold is couple-level. Reference and registry fixes: * dp/dependent_income_limit.yaml: cite operative IAC 441-51.5(1) and the HHS Manual; remove the misleading 2018 Ch.52 reference. * flh/max_supplement.yaml: cite HHS Manual GL 6-B-46 page 31 for the $142 SSA-administered cap. * programs.yaml: add parameter_prefix to the IA SSA entry. Code cleanup: drop the redundant period.this_year / MONTHS_IN_YEAR pattern in favor of period directly. PolicyEngine auto-divides FLOW-type YEAR variables when accessed at a MONTH period. New tests (Cases 9-14 in ia_ssa.yaml): * Case 9 / 14: BLIND_WITH_DEPENDENT 2025 and 2011 (state portion matches SSA 2011 Iowa Table 1, Code C blind: $366). * Case 10: BLIND_WITH_BLIND_SPOUSE_AND_DEPENDENT 2025. * Case 11: regression test for the marital-unit divisor when both spouses set the same couple-FBR DP config. * Case 12: regression test for joint-claim DP phaseout when combined income exceeds couple FBR. * Case 13: AGED_OR_DISABLED_WITH_DEPENDENT 2011 (state portion matches SSA 2011 Iowa Table 1, Code C aged: $344). All 88 IA SSA YAML tests pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
BLIND: For joint SSI claims with both spouses blind, ssi_countable_income returns combined / 2 per spouse — so the previous per-spouse comparison against (individual_fbr + $22) admitted couples whose combined income exceeded the couple-level ceiling. Aggregate marital countable, compare against (couple_fbr + 2 × $22), then split equally to avoid SPM-unit double-counting (mirrors the DP couple-FBR fix). FLH: Replace the all-or-nothing $20 top-up (triggered whenever ssi_countable_income == 0) with a gap-based formula. Department fills the gap from total income to the FLH standard, so a recipient with $10/mo of other unearned income needs only a $10 top-up (was $20). Defensive cap at (state_supplement − max_supplement) so artificially low ssi_monthly cannot explode the supplement. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…rce limit BLIND one-blind joint: previous gate `joint_claim & sum(is_blind) == 2` only applied couple-FBR basis when both spouses were blind. For joint SSI claims with one blind spouse, ssi_countable_income still returns combined / 2 per spouse and the federal piece is paid against couple FBR, so the per-spouse comparison against individual FBR overpaid. Generalize: any joint claim uses (couple_fbr + N × $22) where N is the number of blind people in the marital unit; split only when both blind. Mirror the same logic in the living-arrangement gate. ia_ssa_eligible: replace federal `is_ssi_eligible` (which applies the $2,000 individual resource test for non-joint married claimants) with ABD + immigration + Iowa's own resource test. Iowa's $3,000 marital limit (IAC 441—51.5(2)) was unreachable for cases like a claimant with $2,500 marital resources and a non-ABD spouse. IAC 441—51.1 lets Iowa pay recipients who would qualify for SSI except for excess income, so the federal resource test should not gate Iowa eligibility. Adds Cases 15-16 as regression tests for both fixes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- ia_ssa_living_arrangement: gate FLH and DP at the living-arrangement level by recipient/marital countable income vs the FLH standard (FBR + state_supplement) and the selected DP assistance standard, so high-income households fall through to SMME instead of being classified into a clamped-to-zero category. Use marital countable income for couple DP configurations to match the marital-unit-level standard. - ia_ssa_living_arrangement and ia_ssa: IHHRC home-maintenance disregard selects the couple SSI standard whenever a spouse lives in the home (per IAC 441-177.4(1)(f)(1) "as applicable" and Iowa HHS GL 6-B-46), not only when both spouses are SSI-categorically eligible. Renamed to ihhrc_basic_ssi_disregard to scope it to IHHRC; BLIND keeps joint_claim per IAC 441-52.1(4). - ia_ssa_resources_eligible: replace the IAC 441-51.5(2)-only citation with the broader umbrella authority (IAC 441-50.2) plus the federal SSI resource rules that govern non-DP arrangements (SSA POMS SI 01110.003, SI 01110.530, 20 CFR 416.1202(a)). Substantive policy unchanged: the $2k/$3k schedule applies whether the spouse is SSI-eligible or not, per federal SSI itself.
DP and SMME income ranges are now disjoint by construction (DP requires countable < the configuration's assistance standard; SMME requires income > 120% FPL), so the original priority-test scenario can't exist. Reframe Case 10 to assert the new fall-through behavior: a DP-configured person whose income exceeds the DP standard falls through to SMME.
Summary
Implements Iowa's State Supplementary Assistance (SSA) — a state SSI supplement program administered jointly by the Social Security Administration (federally-administered arrangements) and Iowa Department of Health and Human Services (state-administered arrangements). SSA provides six modeled supplement arrangements for low-income aged, blind, and disabled Iowans who receive or would receive federal SSI.
The design uses a single
ia_ssa_living_arrangementenum to route each person to one arrangement, and a singleia_ssapayment formula that selects over that enum. There are no per-arrangement supplement variables — one routing variable, one payment variable.Closes #7733
Regulatory Authority
Program Overview
Six Modeled Living Arrangements
Priority (highest to lowest, enforced in
ia_ssa_living_arrangement): RCF → IHHRC → FLH → DP → Blind → SMME → NONE. Iowa is a "concurrent category State" per POMS — recipients receive the highest-priority supplement they qualify for.Eligibility
is_ssi_aged_blind_disabled(ABD categorical component of SSI)is_ssi_qualified_noncitizen | immigration_status == CITIZENia_ssa_resources_eligiblesums marital-unit resources whenever the claimant lives with a spouse — applied independently of federal SSI's resource test so Iowa's $3,000 marital limit is reachable when the spouse is non-ABD (federal SSI applies $2,000 individual in that case, but Iowa pays based on its own $3,000 limit)defined_for = StateCode.IAia_ssa_living_arrangementgates on post-PNA client participationmax(0, state_standard − max(countable, FBR)), plus FBR for Blindia_ssa_smme_eligibleia_ssa_has_full_medicaid— explicit input,default_value = FalseBenefit Amount Formulas
All arrangements are computed inside
ia_ssa, selected byia_ssa_living_arrangement.Federally-administered (Blind, DP, FLH) use the standard SSP V-shape:
Blind's state portion ($22) is added on top of FBR per POMS guidance for the standalone Blind arrangement; DP/FLH standards are the total payment standards. Per IAC 441—52.1(4), the $22 blind allowance is mutually exclusive with other SSP arrangements — a blind FLH resident receives FLH only, not FLH + $22 stacked.
RCF uses cost-based reimbursement:
Income eligibility uses the same post-PNA client participation: eligibility holds when
client_participation < 31 × max_per_diem.IHHRC uses cost-based reimbursement minus client participation, per person, per IAC 441—177.10(2)(a):
The per-person cap is always $480.55 per IAC 441—177.10(3); the $961.10 in 441—177.4(1)(f) is the combined-couple income cap, not a payment cap.
SMME is a flat $1/month for people with full Medicaid + Medicare Part B + income above 120% FPL.
Joint-Claim & Couple-Unit Handling
ssi_countable_incomereturns combined / 2 per spouse for joint SSI claims, while several Iowa thresholds are couple-FBR-level. The implementation handles this explicitly:AGED_OR_DISABLED_WITH_SPOUSE_AND_DEPENDENT,BLIND_WITH_AGED_OR_DISABLED_SPOUSE_AND_DEPENDENT,BLIND_WITH_BLIND_SPOUSE_AND_DEPENDENT), the formula compares aggregated marital countable against couple FBR, then splits the resulting supplement equally across spouses in the marital unit so SPM-unit aggregation doesn't double-count when both spouses select the same couple configuration.couple_fbr + N × $22, where N is the number of blind people in the marital unit. The /2 split applies only when both spouses are blind (both route to BLIND); when only one spouse is blind, that spouse keeps the full $22 since the non-blind spouse routes to a different arrangement.state_supplement − max_supplement = $20with a graduated formula. Department fills the gap from total income to the FLH standard, capped at the published gap. SSI-only recipients get the full top-up; recipients with $10/mo of other unearned income (which absorbs $10 of SSA's $20 GIE) need only a $10 top-up. The defensive cap prevents artificially lowssi_monthly(non-takeup, mid-month transitions) from exploding the supplement.Historical Coverage
Parameters have multi-tier effective dates with authoritative sources for each:
Values frozen in the IAC rule text ($22 blind, $142 FLH aged max supplement, $480.55/$961.10 IHHRC caps) are dated
2011-01-01with SSA 2011 as corroborating source. 2012–2016 and 2019–2024 intermediate values are not encoded; PolicyEngine carries the most recent preceding entry forward.2026 DP Value Anomaly
The 2026 DP configuration "Blind Client + Aged/Disabled Spouse + Dependent Relative" shows $3,031 on the Iowa HHS SSA rates page — a +53.5% jump over 2025 ($1,975) against a ~2.85% COLA on every other configuration. The COLA-consistent value would be ~$2,031 ($1,975 × 1.0285), and the long-standing "−$22 when only one spouse is blind" footnote ($2,053 − $22 = $2,031) holds for 2011/2017/2018/2025 and breaks if 2026 = $3,031. The most likely explanation is a transposed-digit publication error on the Iowa HHS page.
This implementation deliberately encodes $2,031 instead of the published $3,031, with a YAML comment documenting the rationale. Will revisit and switch to the published value if Iowa HHS issues a correction confirming $3,031 is intentional.
Not Modeled (by design)
ssi_countable_incomemedicare_enrolleddoes not distinguish Part A vs B;ia_ssa_has_medicare_part_bis an explicit input (default_value = False)ia_ssa_has_full_medicaidis an explicit input so only full-Medicaid recipients trigger SMMEcountable_no_disregard(post-earned-exclusion) as a proxy for gross other income; pre-exclusion gross would be more accurate when recipients have earned income (the $65 + 50% earned exclusions hide gross from the proxy). Flagged for follow-up.Files
Test plan
make formatclean🤖 Generated with Claude Code