Implement Kentucky State Supplementary Payment#8019
Merged
hua7450 merged 13 commits intoPolicyEngine:mainfrom Apr 30, 2026
Merged
Implement Kentucky State Supplementary Payment#8019hua7450 merged 13 commits intoPolicyEngine:mainfrom
hua7450 merged 13 commits intoPolicyEngine:mainfrom
Conversation
Closes PolicyEngine#8018 Adds Kentucky's state-administered SSP under KRS 205.245 / 921 KAR 2:015: - Four benefit categories: Personal Care Home (PCH $1,610), Community Integration Supplementation (CIS $1,514), Family Care Home (FCH $1,166), and Caretaker Services (individual $1,056, couple-one-care $1,552, couple-both-care $1,606) - Formula: max(0, standard - income_excess) where income_excess derives from uncapped_ssi, matching Alaska SSP pattern - 2026 rates only; historical backdating deferred to follow-up PR - Reuses federal meets_ssi_resource_test ($2K/$3K limits match KY exactly) - Personal Needs Allowance ($60 PCH / $40 FCH) stored as informational parameter; not deducted from gross SSP - 58 YAML tests covering all categories, claim types, care_receivers, and edge cases (income boundaries, non-KY residents, asymmetric couples) Registered in spm_unit_benefits and household_state_benefits.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #8019 +/- ##
==========================================
+ Coverage 86.04% 96.00% +9.95%
==========================================
Files 3 9 +6
Lines 43 150 +107
Branches 2 2
==========================================
+ Hits 37 144 +107
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:
|
- Income formula now subtracts total countable income per 921 KAR 2:015 §8(2), not just income above the federal SSI FBR. - Add age ≥ 18 requirement per §4(1)(c) to ky_ssp_eligible. - Replace income-gate via uncapped_ssi>0 with §4(1)(b) check against the KY standard of need (federal FBR is below KY standards so the old gate wrongly excluded recipients with income between FBR and SOH). - Fix KRS 205.245 URL (id=46358 returned KRS 18A.420; correct is id=7671). - Fix 921 KAR section cites: "Section 7" → "Section 9", "9(3)", "9(4)". - Fix CHFS Vol V page anchors: MS 1800 page 24→23, MS 2400 page 43→41. - Add 2000-01-01: 0 sentinels to payment_standard and PNA parameters so microsimulation evaluates cleanly pre-2026 (fixes the "no field of name ONE" error in the full test suite). - Update YAML tests: ky_ssp.yaml rewritten around ssi_countable_income; ky_ssp_eligible.yaml Cases 4, 8, 10 updated for new age and income semantics; integration.yaml Case 2 benefit corrected to $12,408. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ssi_claim_is_joint is true whenever both spouses are aged/blind/disabled even if one fails the SSI resource or immigration test, so the previous implementation: - classified one-eligible/one-ABD-but-resource-ineligible couples as COUPLE_BOTH_ELIGIBLE, driving ky_ssp_payment_standard to the lower joint rate; and - applied the §9(2)(b) "half the deficit to each" split, underpaying the eligible spouse and paying a positive benefit to the ineligible spouse. 921 KAR 2:015 §9(1)(c) reserves the couple rates for an "eligible couple, both aged, blind, or having a disability" — i.e. both actually SSI-eligible. §9(2)(a) likewise conditions the combined-income treatment on "if both are eligible". Gate both the claim-type and the couple-split on marital_unit.sum(is_ssi_eligible) == 2 so couples collapse to the individual path unless both spouses are actually SSI-eligible. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…into ky-ssp # Conflicts: # policyengine_us/parameters/gov/household/household_state_benefits.yaml # policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py
…pathway Entity level fixes (checklist item 2): - Changed ky_ssp_category and ky_ssp_care_receivers from Household to Person entity. Updated all readers (payment_standard, personal_needs_ allowance, eligible) to use person(...) instead of person.household(...). Migrated all test inputs from households: to people:. Payment standard / couple rate bug fix: - CARETAKER couple totals ($1,552 one-care, $1,606 both-care per §9(1)(c)) are now stored per-person ($776, $803) in payment_standard.yaml so every category follows one uniform formula. - Removed the divide-by-2 in ky_ssp_payment_standard.py that was halving PCH/FCH/CIS couple benefits (those categories have no reduced couple rate per §9(1)(a),(b),(d)). - Removed the marital_unit.sum / 2 branching in ky_ssp.py; under SSI's joint couple equal-split (ssi_marital_earned_income / ssi_marital_unearned_income), per-person supplements naturally reproduce the §9(2)(b) "one-half of the deficit to each" outcome. Documentation improvements: - Added docstring to ky_ssp clarifying covered vs excluded living arrangements (Title XIX nursing homes excluded per §4(1)(c)) and the Group 2 pathway (§4(1)(b) allows income-eligible non-SSI recipients). - Documented the per-person approximation for the Caretaker "Eligible Couple, One Receives Care" case (household total matches OMVOLV example #6; per-spouse distribution is equal rather than all-to-one). - Added comment in ky_ssp_eligible explaining why no ssi > 0 check is needed (§4(1)(b) — Group 2 pathway). Parameter descriptions: - PCH/FCH personal needs allowance descriptions now follow the standard "Kentucky provides this amount..." template; removed redundant "monthly" (already in period: month metadata). Integration tests rewritten with real income sources: - Replaced direct is_ssi_eligible / ssi_countable_income injection with real inputs (social_security, employment_income). - New cases verify the full federal SSI -> state SSP chain end-to-end: SSI recipient with SS income, Group 2 non-SSI recipient, earnings with $65 + 50% exclusion, asymmetric couple, Caretaker couple both care, Caretaker couple one care, minor ineligibility, non-KY resident, NONE category. programs.yaml: - Added Kentucky SSP stub under ssi_state_supplement state_implementations. All values verified against CHFS MS 1200 (R. 3/9/26, OMTL-690) page 1 and 921 KAR 2:015 §4, §8, §9. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ky_ssp_claim_type: §9(1)(c) couple rates apply to an "eligible couple" — both spouses must qualify for SSP itself (SSI + age ≥ 18 + qualifying living arrangement), not merely for SSI. Previously, a CARETAKER spouse with an SSI-eligible NONE-category spouse was treated as a COUPLE_BOTH_ ELIGIBLE caretaker couple and received the reduced per-person rate. ky_ssp_personal_needs_allowance: §9(3)/(4) define the PNA as an amount retained out of the SSP payment to the facility. If no SSP is paid (e.g., ineligible minor PCH resident), there is nothing to retain — zero out the PNA when ky_ssp_eligible is false. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
All seven KY SSP variables (ky_ssp, ky_ssp_eligible, ky_ssp_payment_standard,
ky_ssp_personal_needs_allowance, ky_ssp_claim_type, ky_ssp_category,
ky_ssp_care_receivers) move from YEAR to MONTH period, aligning with the
convention used in AL, CT, DC OSSP, DE, GA, HI, ID AABD, IL AABD, and IN SSP.
This matches the regulation's natural units (monthly payment standards, monthly
SSI income) and removes the need for `* MONTHS_IN_YEAR` multiplication when
reading federal SSI MONTH variables.
Also replaces `person("age", period) >= 18` with the existing `is_adult`
variable in ky_ssp_claim_type and ky_ssp_eligible.
Tests updated to `period: 2026-01` with monthly expected values. YEAR-period
input variables (ssi_countable_income) stay as annual inputs; MONTH-period
inputs (ky_ssp_payment_standard, ky_ssp_eligible) use monthly values.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PavelMakarchuk
requested changes
Apr 29, 2026
Collaborator
PavelMakarchuk
left a comment
There was a problem hiding this comment.
Program Review — PR #8019: Kentucky State Supplementary Payment
Source Documents
- CHFS OMVOLV (MS 1200): Kentucky Cabinet for Health and Family Services, Office of Medicaid and Volume Operations Manual — payment standards table effective 1/1/2026 (file page 5; 55 pp total). Revision tag OMTL-690, R. 3/9/26.
- 921 KAR 2:015: Kentucky Administrative Regulations Title 921, Chapter 2, Section 015 — eligibility regulations (HTML only; no PDF available).
- KRS 205.245: Kentucky Revised Statutes — enabling statute for the State Supplementary Payment program (1 page).
- CI: All checks passing on PR #8019.
Critical (Must Fix)
- §8(8) $20 general exclusion overstatement — REAL BUG, +$20/mo per eligible person
- Files:
ky_ssp.py,ky_ssp_eligible.py; tests atintegration.yamlCases 1, 3, 5. - 921 KAR 2:015 §8(8): "The SSI twenty (20) dollar general exclusion shall not be an allowable deduction from income."
- The PR's countable-income computation flows through
ssi_countable_income, which already deducts the $20 federal general exclusion before passing to the SSP deficit formula. KY regulation specifically bars this deduction for SSP. Result: every eligible person with at least $20/mo of unearned income receives a benefit $20/mo too high. - Fix: add the $20 back inside the KY-specific countable-income path, or build a
ky_ssp_countable_incomevariable that mirrorsssi_countable_incomeminus the §8(8) addback. - Test fix:
integration.yamlCases 1, 3, 5 lock in the wrong expected values and must be updated. Case 6 has zero income and is unaffected.
- Files:
ky_ssp_category.pyOMVOLV reference points to wrong page (#page=23)#page=23lands inside MS 1800 (case-status overview), not the category enumeration.- Should anchor to
#page=5(MS 1200, where SSP categories and Caretaker examples appear) and add a citation to 921 KAR 2:015 §4(1)(c).
Should Address
ky_ssp_claim_type.pyOMVOLV#page=41reference is wrong — lands in MS 2400 (income calc), not the claim-type enumeration. Should be#page=5or#page=6(MS 1200, Caretaker examples).- §4(1)(c) Medicaid nursing-home exclusion is implicit-only — model relies on
ky_ssp_category = NONEfor nursing-home residents. Add an explicit nursing-home check to harden behavior in household-app contexts where category may be user-set. - §3(3) AABD mandatory pathway not modeled — functionally extinct cohort (December 1973 recipients), but should be documented as out of scope rather than silently omitted.
periodvsperiod.this_yearinconsistency —is_ssi_eligibleandis_adultare YEAR-defined booleans accessed withperiodfrom MONTH formulas inky_ssp_eligible.pyandky_ssp_claim_type.py. Functionally correct (policyengine-core auto-resolves YEAR variables) but inconsistent with DE / AL / IA / CT / DC / HI SSP siblings, which useperiod.this_yearexplicitly. Cosmetic, not a bug.- No pre-2026 zero-value test — every YAML test uses
period: 2026-01. Add a 2025 test to verify the parameter zero-defaults flow correctly end-to-end. - Boundary trio (=, ±$1) missing on
ky_ssp_eligible— boundaries exist for the benefit amount inky_ssp.yamlbut not for the eligibility flag itself. - §9(2)(b) half-deficit math never exercised with nonzero income for caretaker couples — all caretaker-couple tests use
ssi_countable_income: 0. Add a nonzero-income caretaker-couple case. - Group 2 pathway (SSP without SSI receipt) is integration-only — needs a focused unit test asserting
ky_ssp_eligible = truewhilessi = 0. - Age 18 inclusive boundary not tested — only
<18cases exist; addage = 18boundary. - Parameter redundancy in
payment_standard.yaml— PCH / CIS / FCH branches duplicate the same value across 6 enum slots; only CARETAKER differentiates by claim_type / care_receivers. Refactor to flatten, or add a structural-redundancy comment. - Per-person $776 / $803 storage convention is fragile — encodes §9(2)(b) half-deficit implicitly via SSI's couple equal-split rather than explicitly. Consider AK SSP's explicit
marital_unit.sum / 2pattern, or add a strong inline comment near the formula. ky_ssp_personal_needs_allowanceis orphaned — declared but does not feed any downstream calculation. Either consume it (deduct from countable income, surface in household-level info) or document why it is stored.2000-01-01: 0placeholder dates — describe these as "backdate-zero" in the parameter description, or backfill with COLA-escalated §9(1) base values.- PNA
2026-01-01effective date is too late — §9(3) / (4) flat PNA amounts are not subject to §9(1) COLA. Add an earlier effective date or document the backdate-zero choice. - Reference subsection citations missing —
payment_standard.yamllacks §9(1)(a), (b), (c)1–3, (d) sub-citations;ky_ssp_eligible.pylacks §3, §4(1)(a) / (b) / (c) sub-citations;ky_ssp.pylacks §8(2);ky_ssp_care_receivers.pylacks §9(1)(c)2–3. - §9(1)(d) SMI separate from CIS — regulation has a Specialized Medical Institution standard ($1,313 base) distinct from CIS. PR notes KY uses CIS as the administrative umbrella name; confirm this is intentional or consider separating SMI.
Suggestions
- Title polish — "Kentucky State Supplementary Payment" (full official name) in description fields.
household_state_benefits.yamladdsky_sspto 2023 / 2024 sections (no 2026 key exists yet); a 2026 key would be cleaner.- KRS 205.245 reference: use full statutory title in citations.
- Add
OMTL-690, R. 3/9/26revision tag to OMVOLV titles in PNA YAMLs and variable.pyfiles. - §6(1) CIS clinical sub-tests (DSM diagnosis, dementia exclusion, functional impairment) not modeled — likely out of scope, but worth noting.
- §5(4)(b) caretaker disqualifying relationships (spouse / parent / adult-child caregivers) not modeled — likely out of scope.
- §10 temporary medical-facility 3-month continuation not modeled — likely out of scope.
- CIS variable
.pyfiles use bare URLs in thereferencetuple — consider adding titles for reviewer scanning.
PDF Audit Summary
| Category | Count |
|---|---|
| Confirmed correct values | 10 |
| Mismatches (numeric) | 0 |
| Page-anchor errors | 2 (ky_ssp_category.py#page=23, ky_ssp_claim_type.py#page=41) |
| Unmodeled regulatory features | 5 (§3(3), §4(1)(c) explicit nursing exclusion, §6(1) CIS clinical, §5(4)(b) caretaker DQ, §10 medical-facility) |
| Methodological deviation | 1 (§8(8) $20 exclusion — wrong output) |
Validation Summary
| Check | Result |
|---|---|
| Numeric values match PDF | Yes |
| Page anchors correct | 2 wrong (C2, S1) |
| Hard-coded values in formulas | None |
| Reused existing variables | Yes |
| Vectorization | Clean |
| Period handling | Cosmetic inconsistency (S4) |
| Pre-2026 defaults | Set but not tested (S5) |
| Boundary tests | Partial (S6) |
| Mandatory §3(3) pathway | Not modeled (S3) |
| §8(8) $20 exclusion (KY-specific) | NOT applied — REAL BUG (C1) |
| CI status | All passing |
Review Severity: REQUEST_CHANGES
C1 produces a $20/mo overstatement per eligible person and is locked in by integration tests at Cases 1, 3, 5. The bug must be fixed and the affected expected values updated. C2 is a real reference error that misleads reviewers reading the manual anchor.
Next Steps
To auto-fix issues: /fix-pr 8019
921 KAR 2:015 §8(8) explicitly bars the federal $20 SSI general exclusion from KY State Supplementation income calculations. The formula previously read ssi_countable_income, which already deducts the $20, inflating every eligible recipient's payment by $20/mo. Add ky_ssp_countable_income that mirrors federal SSI countable income without the $20 general exclusion (other SSI exclusions still apply). Wire it into ky_ssp.py (§8(2) deficit) and ky_ssp_eligible.py (§4(1)(b) income test). Add five OMVOLV MS 1200 worked examples to integration.yaml — Bob PCH ($710), Sue CIS ($514), Dan Caretaker w/ineligible spouse ($201), Mark+Amy Caretaker couple one-care ($176 each, $352 total), and Charlie+Becky Caretaker couple both-care ($165 each) — all matching the regulator's published values exactly. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements Kentucky's State Supplementary Payment (SSP) — a state-administered, state-funded optional supplement to federal SSI covering Personal Care Home (PCH), Community Integration Supplementation (CIS), Family Care Home (FCH), and Caretaker Services categories.
Closes #8018
Regulatory Authority
Program Overview
Eligibility
is_ssi_eligibleky_ssp_countable_income < ky_ssp_payment_standardky_ssp_category != NONEage >= 18defined_for = StateCode.KYSSI receipt NOT required — §4(1)(b) accepts applicants whose SSI categorical criteria are met but whose income is above the federal FBR yet below the state standard (Group 2 pathway).
KY-specific countable income (§8(8)): KY income is not the federal
ssi_countable_income. 921 KAR 2:015 §8(8) explicitly bars the SSI $20 general exclusion: "The SSI twenty (20) dollar general exclusion shall not be an allowable deduction from income." The model implements this viaky_ssp_countable_income, which mirrors federal SSI countable income but skips the $20 general exclusion. The $65 earned exclusion and 50% earned share still apply.Benefit Amounts (MS 1200 page 1, effective 1/1/2026)
Personal Needs Allowance (§9(3)–(4); informational, not deducted from benefit):
Couple treatment:
COLA: Standards updated by CHFS MS 1200 annually.
Not Modeled (by design)
Files
Verification TODO
openfisca-data#7Review-feedback fixes (latest push)
ssi_countable_income(which deducts the $20), inflating every eligible recipient's payment by $20/mo. Addedky_ssp_countable_incomemirroring the federal logic but skipping the $20 general exclusion ($65 earned + 50% earned share still apply). Wired into bothky_ssp.py(§8(2) deficit) andky_ssp_eligible.py(§4(1)(b) income test).ky_ssp_categoryandky_ssp_care_receiversfromentity = Householdtoentity = Person(a person lives in a facility, not a household)./ 2that was halving couple benefits for categories with no reduced couple rate.marital_unit.sum / 2branching inky_ssp.py.Test plan