Add Kansas State Supplemental Payment Program (SSPP)#7731
Add Kansas State Supplemental Payment Program (SSPP)#7731hua7450 merged 8 commits intoPolicyEngine:mainfrom
Conversation
Implements KS SSPP per K.S.A. 39-972: flat $20/month payment to SSI recipients age 18+ residing in Medicaid-approved institutions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #7731 +/- ##
==========================================
- Coverage 94.17% 85.36% -8.81%
==========================================
Files 7 3 -4
Lines 103 41 -62
Branches 2 2
==========================================
- Hits 97 35 -62
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:
|
…mount - Derive institutional status from ssi_federal_living_arrangement (FLA='D') instead of bare ks_sspp_in_medicaid_institution input - Change definition_period to MONTH (benefit is monthly) - Use adds=[] pattern instead of formula for flat payment - Add ks_sspp to spm_unit_benefits.py - Parameterize age threshold (no hardcoded 18) - Fix parameter formatting (description template, values before metadata) - Add PDF page numbers to all references - Add 2009-07-01 rate update ($20 -> $32) from SSA report - Rewrite tests with real SSI chain and proper naming - Add integration tests including couple/mixed scenarios Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Tests used period 2025-01 but expected $20 — parameter returns $32 since 2009-07-01. Also use scalar output for single-person tests. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Policy memo Section III(3) requires "Receiving Kansas Medicaid (full Medicaid benefits only)." Add medicaid_enrolled to eligibility formula and add test case for non-Medicaid person. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Closing — conflicts for 2+ weeks. Reopen after rebasing from upstream/main. |
PavelMakarchuk
left a comment
There was a problem hiding this comment.
Full Program Review: PR #7731 -- Kansas State Supplemental Payment Program (SSPP)
Source Documents
| Source | URL | Accessible | Notes |
|---|---|---|---|
| K.S.A. 39-972 | https://ksrevisor.gov/statutes/chapters/ch39/039_009_0072.html | Yes | Authorizing statute; specifies personal needs fund and supplemental income minimums |
| KHPA Policy No. 2007-05-01 | https://khap.kdhe.ks.gov/kfmam/policydocs/state%20supplemental%20payment%20program%20policy%20memo.pdf | Yes (PDF) | Detailed implementation memo with eligibility criteria and payment amounts |
| WorkWORLD Kansas SSP | https://help.workworldapp.com/wwwebhelp/ssi_state_supplement_kansas.htm | Yes | Confirms $32/month individual payment as of 2010 |
| SSA POMS SI 01415.001 | https://secure.ssa.gov/poms.nsf/lnx/0501415001 | Yes | Kansas is NOT in the SSA-administered list for FLA code D (state-administered program) |
Regulatory Summary
Per KHPA Policy Memo 2007-05-01, Section III, Kansas SSPP eligibility requires:
- Residing in a Kansas institution
- Receiving a reduced SSI benefit based on residence in a Medicaid facility (FLA code D)
- Receiving Kansas Medicaid (full Medicaid benefits only)
- Age 18 or over as of the month of payment
Per Section IV, each eligible individual receives a flat monthly cash benefit ($20 originally; $32 as of at least 2010). The benefit is NOT modified based on other income or resources.
Critical (Must Fix)
C1. Payment amount parameter: missing intermediate value between 2007 and 2009
The parameter amount.yaml jumps from $20 (2006-07-01) directly to $32 (2009-07-01). The policy memo (Section XI) explicitly states that benefit levels were to change in July 2007 when the protected income level went from $50 to $60. The statute (K.S.A. 39-972) also allows annual COLA adjustments starting July 1, 2007. This means the SSPP amount almost certainly changed at 2007-07-01 (likely to $30) before reaching $32. The parameter file should include the intermediate value(s).
Files: /policyengine_us/parameters/gov/states/ks/kdhe/sspp/payment/amount.yaml
C2. programs.yaml not updated
The existing entry at line 649-652 of programs.yaml has status: in_progress and is missing the variable field. Since this PR implements the program, the entry should be updated to status: complete (or partial) with variable: ks_sspp and a parameter_prefix.
File: /policyengine_us/programs.yaml
Should Address
S1. Eligibility: SSI receipt check may have edge-case issues
The eligibility formula uses person("ssi", period) > 0 to confirm SSI receipt. The ssi variable has definition_period = MONTH, which is correct for the SSPP's monthly definition period. However, ssi is the final SSI amount after all caps and adjustments. A person could have ssi == 0 due to rounding or capping even if they are technically an SSI recipient in current pay status with FLA code D. Per the policy memo Section V, eligibility is determined by SSA payment status code C01 and FLA D, not by the computed SSI amount. Other state SSP implementations (e.g., Alabama) use person("uncapped_ssi", period) > 0 to avoid this edge case. Consider whether uncapped_ssi would be more robust.
File: /policyengine_us/variables/gov/states/ks/kdhe/sspp/ks_sspp_eligible.py
S2. household_state_benefits.yaml only has 2023 and 2024 blocks
The PR adds ks_sspp to both existing year blocks in household_state_benefits.yaml, which is correct given the file structure. However, when new year blocks are added in future PRs, someone will need to remember to include ks_sspp. This is a general maintenance concern, not specific to this PR.
S3. Administering agency: KDHE vs. KHPA
The directory structure uses kdhe (Kansas Department of Health and Environment). However, the original policy memo is from KHPA (Kansas Health Policy Authority), which was later absorbed into KDHE/KDADS. This is not wrong for the current state of affairs but should be documented. The reference URL domain khap.kdhe.ks.gov shows the KDHE hosting. This is acceptable.
S4. Age parameter reference text
The reference title says "Section III(4)" but the actual memo labels it as item "4." under Section III. The parenthetical notation is a minor formatting difference, not an error.
Suggestions
G1. Add test for exact age boundary (age == 18)
The unit tests include age: 17 (ineligible) and age: 70 (eligible) but no test for the exact boundary at age: 18. Adding a test case with age: 18 would strengthen boundary coverage.
G2. Add test for the 2006-07-01 payment period
All tests use period: 2025-01. A test with period: 2007-01 and expected ks_sspp: 20 would validate that the original payment amount works correctly.
G3. Consider adding documentation field
Other state SSP variables include documentation strings explaining the program. A brief description of the SSPP would improve discoverability:
documentation = "Kansas provides a flat monthly supplement to SSI recipients in Medicaid-approved institutions."G4. Consider whether SSI disability/blindness criteria should be explicitly checked
The SSPP relies on SSI receipt, which implicitly requires aged/blind/disabled status. The policy memo Section II notes "SSI is a means-tested program for persons age 65 and over or who meet Social Security's disability criteria." Since SSI receipt is already checked, this is handled indirectly. No action needed unless the intent is to be more explicit.
G5. Integration test Case 6 does not verify SSI for person2
In Case 6, person2 (community spouse, age 68) is not in a medical facility. The test checks ks_sspp_eligible: [true, false] and ks_sspp: [32, 0], but does not verify person2's SSI amount. Adding ssi: [30, ...] for person2 would clarify the expected SSI behavior for the community spouse.
Validation Summary
| Check | Result | Notes |
|---|---|---|
| Eligibility: Kansas resident | PASS | defined_for = StateCode.KS on eligible variable |
| Eligibility: SSI receipt | PASS | person("ssi", period) > 0 (see S1 for edge case) |
| Eligibility: Medical facility | PASS | Checks ssi_federal_living_arrangement == MEDICAL_TREATMENT_FACILITY |
| Eligibility: Medicaid enrolled | PASS | Checks person("medicaid_enrolled", period.this_year) |
| Eligibility: Age >= 18 | PASS | age >= p.age_threshold where threshold = 18 |
| Payment: Flat benefit | PASS | Uses adds pattern with parameter, not income-tested |
| Payment: $20 initial (2006) | PASS | Parameter value matches policy memo Section IV |
| Payment: $32 (2009+) | PARTIAL | Confirmed for 2010 via WorkWORLD; missing intermediate values (see C1) |
| Entity level: Person | PASS | Consistent with other state SSPs (al_ssp, de_ssp, hi_oss, etc.) |
| Period: MONTH | PASS | Matches monthly payment cadence in policy memo |
spm_unit_benefits integration |
PASS | Added to benefits list; add() handles Person-to-SPMUnit aggregation |
household_state_benefits |
PASS | Added to both 2023 and 2024 blocks |
| Changelog fragment | PASS | changelog.d/add-ks-sspp.added.md present with appropriate type |
| Variable naming | PASS | ks_sspp / ks_sspp_eligible follow state prefix convention |
| Parameter path | PASS | gov.states.ks.kdhe.sspp.* follows established pattern |
| Test coverage: basic eligible | PASS | Multiple positive cases with income variations |
| Test coverage: ineligible cases | PASS | Under-age, non-KS, not in facility, no Medicaid, income too high |
| Test coverage: couples | PASS | Both in facility + mixed arrangement tested |
| Test coverage: boundary | PARTIAL | Missing age=18 boundary test (see G1) |
| Existing variable reuse | PASS | Reuses ssi, ssi_federal_living_arrangement, medicaid_enrolled, age |
| Reference URLs | PASS | Both statute and policy memo URLs resolve |
programs.yaml update |
FAIL | Entry exists but not updated with variable/status (see C2) |
| Hardcoded values | PASS | No hardcoded logic; all values from parameters |
| Import pattern | PASS | Enum import from ssi_federal_living_arrangement follows ga_ssp_eligible_person pattern |
Review Severity
COMMENT -- Two issues that should be addressed (C1: missing intermediate parameter value, C2: programs.yaml not updated) but neither blocks functionality for the 2025 test period. The core implementation is correct and well-tested. The payment amount is confirmed correct for 2010+ by WorkWORLD data, and the eligibility logic faithfully implements the four criteria from the KHPA policy memo.
Generated with Claude Code
- Simplify amount.yaml to 2009-01-01: $32 (aligns with KEESM Rev 38 PIL increase to $62 on 2009-01-01; drops pre-2009 values per scope). - Update programs.yaml KS entry: status=complete, variable=ks_sspp. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
Implements Kansas's State Supplemental Payment Program (SSPP) — a flat monthly cash payment to SSI recipients in Medicaid-approved institutions (federal Code D living arrangement).
Regulatory Authority
Program Overview
Eligibility (Policy Memo Section III)
ssi_federal_living_arrangement == MEDICAL_TREATMENT_FACILITYssi > 0medicaid_enrolledage >= p.age_threshold(parameterized)defined_for = StateCode.KSBenefit Amounts
Not Modeled (by design)
Files
parameters/gov/states/ks/kdhe/sspp/payment/amount.yamlparameters/gov/states/ks/kdhe/sspp/eligibility/age_threshold.yamlvariables/gov/states/ks/kdhe/sspp/ks_sspp.pyvariables/gov/states/ks/kdhe/sspp/ks_sspp_eligible.pyvariables/household/income/spm_unit/spm_unit_benefits.pytests/policy/baseline/gov/states/ks/kdhe/sspp/ks_sspp.yamltests/policy/baseline/gov/states/ks/kdhe/sspp/integration.yamlTest plan
🤖 Generated with Claude Code