Implement Connecticut State Supplementary Payment (SSP)#7881
Implement Connecticut State Supplementary Payment (SSP)#7881hua7450 merged 14 commits intoPolicyEngine:mainfrom
Conversation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implements Connecticut's State Supplement to the Aged, Blind or Disabled (AABD) program per CGS 17b-600, administered by CT DSS. Budget-based formula: Benefit = max(0, Total Need - Countable Income) - 4 living arrangements (community alone/shared, boarding home, SNF) - Income disregards vary by living arrangement and disability category - CT-specific asset limits ($1,600/$2,400, lower than federal SSI) - Historical parameter coverage from 2005-2026 Closes PolicyEngine#7880 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #7881 +/- ##
==========================================
+ Coverage 91.75% 98.83% +7.07%
==========================================
Files 42 19 -23
Lines 837 257 -580
Branches 22 2 -20
==========================================
- Hits 768 254 -514
+ Misses 67 1 -66
Partials 2 2
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:
|
…ve #page=1 from single-page PDFs Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Consolidate 17 parameter files → 11 using enum breakdowns by living arrangement - Replace boolean breakdowns (caused warnings) with separate files + where() in variables - Fix invalid portal.ct.gov/dss/common-elements URL in 4 variable files Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Follow-up fixes pushed on this branch:\n\n- swapped the Connecticut community individual vs. married personal-needs allowance values to match the DSS standards chart\n- updated CT SSP gross/countable income and asset handling so deemed income/resources from an ineligible spouse flow into the mixed-status married-case tests\n- extended the CT earned-income disregard to treat deemed spouse earnings consistently\n- wired into the shared household/SPM benefit aggregates and refreshed the affected CT SSP regression baselines\n\nLocal verification: , , , , , and targeted All checks passed! all passed. |
|
Follow-up fixes pushed on this branch:
Local verification: policyengine_us/tests/policy/baseline/gov/states/ct/dss/ssp/payment/ct_ssp_personal_needs_allowance.yaml, policyengine_us/tests/policy/baseline/gov/states/ct/dss/ssp/payment/ct_ssp_need_standard.yaml, policyengine_us/tests/policy/baseline/gov/states/ct/dss/ssp/income/ct_ssp_countable_income.yaml, policyengine_us/tests/policy/baseline/gov/states/ct/dss/ssp/eligibility/ct_ssp_resource_eligible.yaml, policyengine_us/tests/policy/baseline/gov/states/ct/dss/ssp/integration.yaml, and targeted ruff check all passed. |
- Rename SNF enum to MEDICAID_FACILITY (matches SSA 2011 "federal Code D") - Convert ct_ssp_living_arrangement from bare input to formula deriving MEDICAID_FACILITY from ssi_federal_living_arrangement, with state booleans ct_ssp_resides_in_boarding_home and ct_ssp_lives_with_others - Add SSA 2011 footnote comment to eligibility (no uncapped_ssi check) - Backdate PNA to 2011: community $164, Medicaid facility $39 - Fix pre-existing test bugs using married PNA for single-person cases - Update all tests to use upstream federal/state inputs Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…izons - Boarding home shelter uses committee-set per diem rate (varies by facility), not the $0 in the parameter table — needs facility-rate input to model correctly - New Horizons Village is a specific CT facility with its own PNA ($156.82) and DSS-set rate, not modeled due to small population Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove hardcoded ssi input from 9 of 13 cases, let federal SSI system compute the amount from person's actual income/arrangement - Cases 2, 3, 9: SSI now correctly reduced by earnings, changing eligibility outcomes to match real-life federal-state interaction - Add ssi and ssi_federal_living_arrangement as output checks - Add Case 14: verify CT SSP flows through to spm_unit_benefits - Keep ssi as input only for edge cases (7: negative income, 8: intentional $0, 10: boundary test) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
PavelMakarchuk
left a comment
There was a problem hiding this comment.
Program Review: PR #7881 — Implement Connecticut State Supplementary Payment (SSP)
Source Documents
- Statute: CGS 17b-600
- DSS: Program Standards Charts (2022, 2025, 2026)
- UPM: Sections 3030, 4005, 4520, 5030, P-5045
- SSA: State Assistance Programs 2005, 2011
- CI: All passing
Critical (Must Fix)
None. All formulas are regulatorily correct. Five integration scenarios were manually recalculated and verified. The PNA individual/married values ($197.35/$198.55) were flagged by the reference validator as potentially reversed relative to the task brief, but the regulatory reviewer confirmed the code values are correct (individual = $197.35, married = $198.55).
Should Address
-
Trailing zeros in parameter values.
disregard/unearned.yamlcontains values like250.90,345.90,469.70,629.90andspecial_needs/therapeutic_diet.yamlcontains36.20. Per formatting conventions, these should be250.9,345.9,469.7,629.9, and36.2respectively.- Files:
parameters/gov/states/ct/dss/ssp/disregard/unearned.yaml,parameters/gov/states/ct/dss/ssp/special_needs/therapeutic_diet.yaml
- Files:
-
PDF references missing
#page=XXanchors. Seven DSS Program Standards Chart PDF references across six parameter files lack page anchors. Reviewers clicking these links land on page 1 and must search manually.- Files:
disregard/earned/rate.yaml,disregard/unearned.yaml,personal_needs_allowance.yaml,personal_needs_allowance_married.yaml,shelter_allowance.yaml,special_needs/therapeutic_diet.yaml
- Files:
-
UPM links do not navigate to cited sections. The
ctdssmap.com/CTPortal/Information/Get/UPM#XXXX.XXhash fragments are non-functional -- the portal loads its homepage, not the specific policy section. Eight parameter files are affected. -
SSA source pages return HTTP 403. Both
ssa.gov/policy/docs/progdesc/ssi_st_asst/2011/ct.htmland the 2005 equivalent return 403 Forbidden. All 10 parameter files cite SSA 2011; 5 also cite SSA 2005. These may work in a regular browser but fail for automated verification. Consider adding web.archive.org fallback links. -
Missing dedicated test for
ct_ssp_living_arrangementpriority ordering. The variable usesselect()with priority: medical facility > boarding home > shared > alone. No test verifies what happens when multiple flags are true (e.g., bothct_ssp_resides_in_boarding_homeandct_ssp_lives_with_othersare true). -
Missing integration test for mixed-eligibility couple. No integration test shows a couple where one spouse is eligible (receives SSP) and the other is ineligible (receives $0). Resource test Case 10 covers the resource piece, but no end-to-end test demonstrates the full flow.
Suggestions
-
Description verb "disregards" not in standard verb list. Four earned disregard parameter files use "disregards" in their description. Consider changing to "excludes" for consistency with the standard verb list. Files:
disregard/earned/aged_disabled_initial.yaml,blind_initial.yaml,rate.yaml,disregard/unearned.yaml. -
Single-use intermediate variable. In
ct_ssp_earned_income_disregard.py,rate = p.rateis used only once on the next line. Could be inlined toremainder * p.rate. -
Comment errors in income eligibility tests.
ct_ssp_income_eligible.yamlCases 1 and 6 say "Need = $400 + $198.55 = $598.55" but the person is unmarried, so PNA should be $197.35 and Need = $597.35. Does not affect test correctness (outputs are booleans). -
Missing
#page=XXin January 2026 DSS Chart reference for PNA.personal_needs_allowance.yamldoes not reference the January 2026 DSS chart, unlike other parameters. Either the PNA did not change (add the reference anyway for consistency) or it did (update the parameter). -
Archive.org Excel reference. The July 2022 DSS Standards Chart reference links to an
.xlsxfile via archive.org. Consider noting the file format in the reference title. -
Therapeutic diet and shelter unchanged since 2005. The therapeutic diet ($36.20) and shelter allowance ($400/$200) have not changed in 21 years. While plausible (states sometimes freeze these), verify against current DSS Standards Chart.
-
Consider adding dedicated test files for
ct_ssp_categorically_eligible(child exclusion at age 17/18 boundary) andct_ssp_gross_income(multiple income sources summing to boundary). Both are currently only tested indirectly. -
income_cap_rate.yamldescription uses "this multiple" instead of the standard "this share" or "this amount." Minor wording alignment.
Validation Summary
| Check | Result |
|---|---|
| Formulas match regulation (CGS 17b-600, UPM, DSS Charts) | PASS -- all 15 formulas verified |
| Manual recalculation of integration scenarios | PASS -- 5 of 14 cases hand-verified |
| Parameter values cross-checked against sources | PASS -- all 17 parameters correct (values verified where accessible, internally consistent elsewhere) |
| No hardcoded values in formulas | PASS |
| Period handling (MONTH vs YEAR) | PASS |
| Vectorization (where/select/max_/min_) | PASS |
| Entity levels (Person vs SPMUnit vs MaritalUnit) | PASS |
| Aggregation patterns (adds/add) | PASS |
Variable naming (ct_ssp_ prefix) |
PASS |
| Changelog fragment present | PASS (ct-ssp.added.md) |
| Benefits rollup wiring | PASS (spm_unit_benefits.py, household_state_benefits.yaml) |
| Federal/state separation (reuses SSI variables, no duplication) | PASS |
| Test coverage (94 cases, 12 files) | PASS -- excellent boundary testing, all 4 living arrangements covered |
| Unearned disregard internal consistency (constant differentials across time) | PASS -- $67.90 shared-alone, $92.30 alone-boarding, all periods |
| Blind child eligible / disabled child excluded | PASS -- tested in Cases 2, 3, 8 of eligible_person |
| Reference completeness (all parameters have 2+ references) | PASS |
| Reference accessibility | PARTIAL -- SSA 403s, UPM non-functional, PDFs missing page anchors |
| Trailing zero formatting | FAIL -- 11 values need trailing zeros removed |
Review Severity: COMMENT
All issues are reference quality, formatting, or test coverage enhancements. No logic errors, no incorrect parameter values, no blocking defects. The implementation is regulatorily correct and well-structured with 94 test cases providing excellent coverage.
Generated with Claude Code
|
Closing — conflicts for 2+ weeks. Reopen after rebasing from upstream/main. |
Summary
Implements Connecticut's State Supplementary Payment (SSP) -- budget-based supplement for aged, blind, and disabled SSI recipients per CGS 17b-600.
Closes #7880
Regulatory Authority
Program Overview
Eligibility
is_ssi_eligibleviact_ssp_categorically_eligiblect_ssp_categorically_eligiblect_ssp_resource_eligiblewith CT-specific parameters (lower than federal SSI $2,000/$3,000)ct_ssp_income_eligiblemultipliesincome_cap_rate(3.0) by SSI FBRdefined_for = StateCode.CTBenefit Amounts (DSS Standards Chart 3/1/2026)
Personal Needs Allowance (PNA)
Shelter Allowance
Unearned Income Disregards (adjust annually with SSA COLA)
Earned Income Disregards
Special Needs
Couple treatment: Per-person PNA ($197.35 married vs $198.55 individual); uses
ssi_claim_is_jointto determine.COLA: PNA amounts frozen per state legislation; unearned disregards adjust annually with SSA COLA.
Benefit Calculation
Budget formula: Benefit = max(0, Total Need - Countable Income)
For Community Living (alone or shared):
For Boarding Home:
For SNF:
Key rule: SSI payments count as unearned income subject to the disregard. This is the core mechanism that creates the state supplement on top of SSI.
Living Arrangements
4 categories modeled via
CtSspLivingArrangementenum:COMMUNITY_ALONE-- own home/apartment, full housing costCOMMUNITY_SHARED-- living with others, not in facilityBOARDING_HOME-- licensed boarding home / residential care homeSNF-- skilled nursing facility / Medicaid facilityNot Modeled (by design)
Files
Verification TODO
Test plan
Known Issues / Follow-up Work
Generated with Claude Code