-
Notifications
You must be signed in to change notification settings - Fork 201
Add Kentucky TANF (K-TAP) Program #6909
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Starting implementation of Kentucky TANF (K-TAP) program. Documentation and parameter files will follow. Fixes PolicyEngine#6908 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Kentucky Administrative Regulations (921 KAR 2:006, 921 KAR 2:016) - Payment standards, need standards, and gross income limits by family size - Income deductions: work expense ($175), dependent care, earned income disregard (50%) - Resource limit: $10,000 in liquid assets - Eligibility requirements: age, deprivation, citizenship, residency - Benefit calculation formula (45% ratable reduction) - References ready for embedding in parameter/variable metadata Sources: - https://apps.legislature.ky.gov/law/kar/titles/921/002/016/ - https://apps.legislature.ky.gov/law/kar/titles/921/002/006/ - https://www.law.cornell.edu/regulations/kentucky/921-KAR-2-016 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
- Unit tests for ky_tanf_need_standard (family size 1-7) - Unit tests for ky_tanf_payment_standard (family size 1-7) - Unit tests for ky_tanf_countable_earned_income (work expense deduction) - Unit tests for ky_tanf_countable_unearned_income (child support pass-through) - Unit tests for ky_tanf_countable_income (earned + unearned) - Unit tests for ky_tanf_income_eligible (gross income limits) - Unit tests for ky_tanf_resource_eligible (asset limit) - Unit tests for ky_tanf_eligible (all eligibility requirements) - Unit tests for ky_tanf (benefit calculation) - Integration tests for complete benefit pipeline Tests based on 921 KAR 2:016 regulations. 56 of 63 tests passing. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Complete implementation of Kentucky Transitional Assistance Program with: - Payment standards and need standards by family size (921 KAR 2:016) - Gross income limits for eligibility determination - Work expense deduction ($175/month) - Child support pass-through ($50/month exclusion) - Benefit calculation using 55% rate with payment standard cap - Resource limit ($10,000 for liquid assets) Variables created: - ky_tanf_need_standard - ky_tanf_payment_standard - ky_tanf_countable_earned_income - ky_tanf_countable_unearned_income - ky_tanf_countable_income - ky_tanf_income_eligible - ky_tanf_resource_eligible - ky_tanf_eligible - ky_tanf Uses federal baseline variables (tanf_gross_earned_income, tanf_gross_unearned_income, is_demographic_tanf_eligible) per simplified implementation approach. All parameters sourced from 921 KAR 2:016 with zero hard-coded values. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #6909 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 4 10 +6
Lines 68 143 +75
=========================================
+ Hits 68 143 +75
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:
|
- Add Case 3: Single parent with child, with earned income - Tests work expense deduction ($175/month) - Tests benefit calculation with income - Add Case 4: Family with child support income - Tests child support pass-through exclusion ($50) - Tests unearned income calculation Also applies newline formatting fixes to PR territory tests. Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Implements Kentucky's Transitional Assistance Program (K-TAP) including: - Benefit calculation (55% of deficit, capped at payment standard) - Income eligibility (gross income <= 185% of standard of need) - Resource eligibility ($2,000 pre-2023, $10,000 post-2023) - Earned income deductions ($90 pre-2023, $175 post-2023) - Unearned income with child support pass-through ($50) Parameters organized into benefit/, eligibility/, income/ structure under gov/states/ky/dcbs/ktap/ following DC TANF pattern. Historical values from 1998-01-01 through 2023-03-01 doubling: - Payment standard: $186-$482 → $372-$964 by family size - Need standard: $241-$474 → $481-$948 by family size - Resource limit: $2,000 → $10,000 - Work expense deduction: $90 → $175 Reference: 921 KAR 2:016 (eff. 2023-03-01) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Updates to Kentucky K-TAP (TANF) implementation: - Add 50% earned income disregard (921 KAR 2:016 Section 5(3)(e)) - Add dependent care disregard with age-based caps (Section 5(3)(b)): - $200/month for children under 2 - $175/month for children age 2-12 - $0 for age 13+ - Rename child_support_pass_through to child_support_disregard - Rename need_standard to standard_of_need, payment_standard to payment_maximum - Add no-income exception per KRS 205.200(2) - Update regulatory references 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
PavelMakarchuk
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PolicyEngine Implementation Review - Kentucky K-TAP (TANF)
Summary
Status: ✅ READY FOR MERGE - High-quality implementation with comprehensive test coverage.
All 52 tests pass. The implementation follows PolicyEngine patterns correctly and includes excellent documentation.
✅ No Critical Issues
✅ No Should Address Issues
💡 Suggestions (Minor Improvements)
1. Variable References Could Use Structured Format
Files: All variable files in policyengine_us/variables/gov/states/ky/dcbs/ktap/
Variables use simple string references:
reference = "https://apps.legislature.ky.gov/law/kar/titles/921/002/016/"Consider using structured format to match parameters:
reference = [
{
"title": "921 KAR 2:016 Section 5(3)",
"href": "https://apps.legislature.ky.gov/law/kar/titles/921/002/016/"
}
]2. Consider Adding Specific Section Citations
The PR body includes excellent section citations (e.g., "Section 5(3)(a)" for work expense). Consider adding these specific sections to the variable docstrings or labels for traceability.
3. Consider Multi-Earner Test Case
Integration tests cover single-earner households well. Consider adding a test with two earners to verify the work expense deduction ($175) applies per household, not per earner.
✅ Positive Notes
-
Excellent Code Patterns:
- Correct use of
add()for aggregating income:add(spm_unit, period, ["tanf_gross_earned_income"]) - Proper use of
max_()to prevent negative values (lines 20, 22 in countable_earned_income.py) - Correct use of
min_()for capping disregards - Proper use of
where()for zero-income handling in main benefit calculation
- Correct use of
-
Strong Parameter Structure:
- All parameters use proper
referenceformat withtitleandhref - Good use of bracket parameters for dependent care age-based limits
- Complete coverage of all 7 family sizes for standard of need and payment maximum
- All parameters use proper
-
Comprehensive Test Coverage:
- 52 tests covering all variables
- Integration tests with detailed calculation comments
- Tests cover edge cases: zero income, child support, dependent care, over-limit assets
- Proper use of underscore separators (e.g.,
7_200,2_400)
-
Correct Implementation of Regulations:
- 185% gross income limit ✓
- $175 work expense deduction ✓
- 50% earned income disregard ✓
- Dependent care: $200 under 2, $175 ages 2-12, $0 age 13+ ✓
- $50 child support disregard ✓
- $10,000 resource limit ✓
- 55% ratable reduction rate ✓
- Zero-income families receive payment maximum per KRS 205.200(2) ✓
-
Good Documentation:
- Excellent PR description with formula breakdowns
- Clear comments in code citing specific regulation sections
- Implementation notes for simplifications (e.g., full-time/part-time care)
-
Proper Entity and Period Handling:
- All variables correctly use
SPMUnitentity - Consistent
definition_period = MONTH - Correct use of
period.this_yearfor age in dependent care calculation
- All variables correctly use
File Summary
| Category | Files | Status |
|---|---|---|
| Variables | 10 | ✅ All patterns correct |
| Parameters | 11 | ✅ All properly structured |
| Tests | 10 | ✅ 52 tests, all passing |
| Changelog | 1 | ✅ Properly formatted |
🤖 Generated with Claude Code
Summary
Implements Kentucky Transitional Assistance Program (K-TAP) - Kentucky's TANF program administered by the Department for Community Based Services (DCBS).
Closes #6908
Kentucky K-TAP Income Rules
Regulatory Authority
1. INCOME ELIGIBILITY TEST
Gross Income Test
Source: 921 KAR 2:016 Section 1(11)
2. INCOME DEDUCTIONS & DISREGARDS
A. Work Expense Standard Deduction
Source: 921 KAR 2:016 Section 5(3)(a)
B. Earned Income Disregard
Source: 921 KAR 2:016 Section 5(3)(e)
C. Dependent Care Disregard
Source: 921 KAR 2:016 Section 5(3)(b)
D. Child Support Disregard
Source: 921 KAR 2:016 Section 5(2)(v)
3. INCOME STANDARDS BY FAMILY SIZE
Source: 921 KAR 2:016 Section 9(2)(a)
4. RESOURCE LIMIT
Source: 921 KAR 2:016 Section 3(2)
5. BENEFIT CALCULATION
Formula:
Where Countable Income =
And Countable Earned Income =
And Countable Unearned Income =
Calculation Steps:
Special Rule: Zero Income
Source: 921 KAR 2:016 Section 9(4)(a)
Example (Family of 3, $600/month earned income)
Implementation Notes
where()to give payment_maximum when countable_income == 0🤖 Generated with Claude Code