Skip to content

Conversation

@hua7450
Copy link
Collaborator

@hua7450 hua7450 commented Dec 4, 2025

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

  • 921 KAR 2:016 (Standards of need and amount for KTAP)

1. INCOME ELIGIBILITY TEST

Gross Income Test

  • Limit: 185% of the Standard of Need
  • Definition: Total gross earned + unearned income of all benefit group members

Source: 921 KAR 2:016 Section 1(11)


2. INCOME DEDUCTIONS & DISREGARDS

A. Work Expense Standard Deduction

  • Amount: $175 per month
  • Application: Deducted from gross earned income

Source: 921 KAR 2:016 Section 5(3)(a)

B. Earned Income Disregard

  • Amount: 50% of remaining earned income (after work expense)
  • Note: Available for first 6 months of employment

Source: 921 KAR 2:016 Section 5(3)(e)

C. Dependent Care Disregard

Dependent Age Maximum Disregard
Under age 2 $200/month
Age 2-12 $175/month
Age 13+ $0

Source: 921 KAR 2:016 Section 5(3)(b)

D. Child Support Disregard

  • Amount: First $50 of child support payments excluded

Source: 921 KAR 2:016 Section 5(2)(v)


3. INCOME STANDARDS BY FAMILY SIZE

Family Size Standard of Need Max Gross Income (185%) Payment Maximum
1 $481 $890 $372
2 $552 $1,021 $450
3 $631 $1,167 $524
4 $710 $1,314 $656
5 $790 $1,462 $766
6 $869 $1,608 $864
7+ $948 $1,754 $964

Source: 921 KAR 2:016 Section 9(2)(a)


4. RESOURCE LIMIT

  • Limit: $10,000 in liquid assets

Source: 921 KAR 2:016 Section 3(2)


5. BENEFIT CALCULATION

Formula:

Benefit = min(55% × (Standard of Need − Countable Income), Payment Maximum)

Where Countable Income =

Countable Earned Income + Countable Unearned Income

And Countable Earned Income =

(Gross Earned Income − $175 Work Expense − Dependent Care) × 50%

And Countable Unearned Income =

Gross Unearned Income − min(Child Support, $50)

Calculation Steps:

  1. Subtract $175 work expense from gross earned income
  2. Subtract dependent care disregard (up to $200 per child under 2, $175 per child age 2-12)
  3. Apply 50% earned income disregard to remainder
  4. Subtract up to $50 child support from unearned income
  5. Sum countable earned + unearned = Countable Income
  6. Calculate deficit: Standard of Need − Countable Income
  7. Apply 55% ratable reduction to deficit
  8. Benefit = lesser of (55% × deficit) or Payment Maximum

Special Rule: Zero Income

  • Families with no countable income receive the Payment Maximum

Source: 921 KAR 2:016 Section 9(4)(a)


Example (Family of 3, $600/month earned income)

Step Calculation Result
Gross income $600 $600
Gross limit (185% × $631) $1,167 → PASS
Work expense $600 − $175 $425
50% disregard $425 × 50% $212.50
Countable income $212.50 + $0 unearned $212.50
Standard of need $631
Deficit $631 − $212.50 $418.50
55% of deficit $418.50 × 55% $230.18
Payment maximum $524
Benefit min($230.18, $524) $230/month

Implementation Notes

  • Dependent care: Full-time/part-time distinction ($175/$150) simplified to $175
  • 50% disregard: Applied to all cases; 6-month limitation not tracked
  • Zero-income exception: Uses where() to give payment_maximum when countable_income == 0

🤖 Generated with Claude Code

hua7450 and others added 5 commits December 4, 2025 13:59
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
Copy link

codecov bot commented Dec 4, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (0270c25) to head (a079376).
⚠️ Report is 351 commits behind head on main.

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     
Flag Coverage Δ
unittests 100.00% <100.00%> (ø)

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 4, 2025 15:08
- 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>
@hua7450 hua7450 marked this pull request as ready for review December 8, 2025 20:28
Copy link
Collaborator

@PavelMakarchuk PavelMakarchuk left a 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

  1. 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
  2. Strong Parameter Structure:

    • All parameters use proper reference format with title and href
    • 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
  3. 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)
  4. 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) ✓
  5. 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)
  6. Proper Entity and Period Handling:

    • All variables correctly use SPMUnit entity
    • Consistent definition_period = MONTH
    • Correct use of period.this_year for age in dependent care calculation

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

@PavelMakarchuk PavelMakarchuk merged commit 93b819c into PolicyEngine:main Dec 28, 2025
10 checks passed
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 Kentucky TANF (K-TAP) Program

2 participants