Skip to content

Conversation

@hua7450
Copy link
Collaborator

@hua7450 hua7450 commented Dec 18, 2025

Summary

Implements Kansas Temporary Assistance for Needy Families (TANF) program.

Closes #6935

Regulatory Authority

Income Eligibility Tests

Test Threshold Source
Gross Income < 30% FPL K.S.A. 39-709
Countable Income < Payment Standard KEESM 7110
Resource Limit ≤ $3,000 KEESM 5000

Income Deductions & Exemptions

Per KEESM 7200, deductions are applied in order:

Order Deduction Amount Source
1 Work Expense $90/employed person KEESM 7200
2 Earned Income Disregard 60% of remainder K.A.R. 30-4-111, KEESM Memo 2008-0326
3 Dependent Care Actual, unreimbursed (NO CAP) KEESM 7224

Note on 60% Disregard: Per K.A.R. 30-4-111(b)(2), this disregard does NOT apply when initially establishing TANF eligibility unless the person received TANF in one of the four preceding months. PolicyEngine applies this disregard to all applicants since benefit history cannot be tracked.

Income Standards (Payment Standard - High Population Counties, Group III)

Family Size Payment Standard
1 $241
2 $326
3 $403
4 $471
5+ $471 + $61/person

Source: K.A.R. 30-4-101, Kansas TANF State Plan p.29

County Groups: Payment standard = Basic allowance + Shelter allowance by county group:

  • Group I (Rural): $92 shelter
  • Group II: $97 shelter
  • Group III (High Population): $109 shelter - Used in this implementation
  • Group IV (Urban): $135 shelter

High Population Counties (Group III): Butler, Jefferson, Leavenworth, McPherson, Miami, Osage, Reno, Rice, Riley, Sedgwick, Shawnee, Wyandotte

Benefit Calculation

Countable Earned = max(Gross Earned - $90 - 60% of remainder, 0) - Dependent Care
Countable Income = Countable Earned + Unearned Income
Benefit = max(Payment Standard - Countable Income, 0)

Source: KEESM 7110, KEESM 7200

Files

Variables (9 files)

tanf/
├── eligibility/
│   ├── ks_tanf_eligible.py
│   ├── ks_tanf_gross_income_eligible.py
│   ├── ks_tanf_income_eligible.py
│   └── ks_tanf_resources_eligible.py
├── income/
│   ├── ks_tanf_countable_earned_income.py
│   ├── ks_tanf_countable_income.py
│   └── ks_tanf_earned_income_after_deductions.py
├── ks_tanf.py
└── ks_tanf_maximum_benefit.py

Parameters (6 files)

  • resource_limit/amount.yaml - $3,000 limit
  • income/gross_income_limit.yaml - 30% FPL
  • income/earned_income_disregard/flat.yaml - $90
  • income/earned_income_disregard/rate.yaml - 60%
  • payment_standard/amount.yaml - By family size
  • payment_standard/additional_person_amount.yaml - $61

Tests (9 files, 58 test cases)

  • Unit tests for each variable with formula
  • Integration tests with 9 end-to-end scenarios

Known Limitations

  • Uses High Population Counties (Group III) payment standards as default
  • County-specific payment plans not yet implemented as variable
  • Time limits (24/48-month) cannot be enforced (requires benefit history tracking)
  • Shared living arrangements not implemented

@codecov
Copy link

codecov bot commented Dec 18, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (9739e2f) to head (2dbd41a).
⚠️ Report is 17 commits behind head on main.

Additional details and impacted files
@@             Coverage Diff              @@
##             main     #7006       +/-   ##
============================================
+ Coverage   76.92%   100.00%   +23.07%     
============================================
  Files           1         9        +8     
  Lines          39       121       +82     
  Branches        4         0        -4     
============================================
+ Hits           30       121       +91     
+ Misses          8         0        -8     
+ Partials        1         0        -1     
Flag Coverage Δ
unittests 100.00% <100.00%> (+23.07%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

hua7450 and others added 5 commits December 18, 2025 20:00
Starting implementation of Kansas Temporary Assistance for Families (TANF) program.
Documentation and parallel development will follow.
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix income eligibility test Case 3: income equals payment standard should be false (386 < 386 = false per KEESM 7110)
- Fix ks_tanf_eligible.yaml: restructure tests with person-level entity and correct variable name (is_person_demographic_tanf_eligible)
- Fix parameter descriptions: change "Temporary Assistance for Families" to "Temporary Assistance for Needy Families" in all 6 files
- Add PDF page anchors (#page=1) to KEESM Appendix F-4 references
- Use add() > 0 pattern in ks_tanf_eligible.py for demographic check
- Fix ks_tanf_resources_eligible.py to use spm_unit_cash_assets instead of spm_unit_assets
- Fix integration.yaml to use employment_income_before_lsr (what tanf_gross_earned_income uses)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix broken KEESM reference URLs (case sensitivity: EES/KEESM/Current)
- Optimize code pattern: combine add() calls in ks_tanf_gross_income_eligible.py
- Add integration tests: multiple earners (Case 7), large family of 5 (Case 8)
- Add boundary tests: work expense at $89 and $91 thresholds
- Apply black formatting

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@hua7450 hua7450 marked this pull request as ready for review December 23, 2025 19:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Implement Kansas TANF

1 participant