Backdate Kentucky K-TAP parameters#7497
Conversation
Starting implementation of backdating Kentucky K-TAP (TANF) parameters to program inception. Documentation and parallel development will follow. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add 1997-07-01 historical entries to all 10 parameter files (frozen AFDC-era values) - Add Nov 2025 payment maximum reduction (~35% cut) - Create earned_income_flat_disregard parameter for pre-2023 $30+1/3 formula - Rewrite EID formula as unified expression (no branching, both eras via parameters) - Add 92 new tests: 47 historical/boundary + 45 edge cases across all 3 eras - Add dual references (current + superseded 921 KAR 2:016) - Fix gross_income_limit_rate pre-2023 section citation (1(11) → 1(12)) - Clean up hardcoded comments in benefit and dependent care variables Ref PolicyEngine#7496 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #7497 +/- ##
==========================================
Coverage 100.00% 100.00%
==========================================
Files 11 5 -6
Lines 329 87 -242
Branches 0 1 +1
==========================================
- Hits 329 87 -242
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:
|
…urce - Fix earned_income_flat_disregard.yaml: subsection 5(3)(c)-(d) → 5(3)(e), add current ref - Fix earned_income_disregard_rate.yaml: pre-2023 subsection 5(3)(c)-(d) → 5(3)(e) - Add WKMS news source citation for Nov 2025 payment maximum values Ref PolicyEngine#7496 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4 parameters had identical values at both 1997-07-01 and 2023-03-01. Per parameter patterns skill, only keep earliest date when value is unchanged: - gross_income_limit_rate: 1.85 (single entry) - rate: 0.55 (single entry) - max_unit_size: 7 (single entry) - child_support_disregard: 50 (single entry) Ref PolicyEngine#7496 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Create earned_income_flat_disregard_in_effect.yaml (true 1997, false 2023) - Remove 2023-03-01: 0 sentinel from earned_income_flat_disregard.yaml - Use if p.in_effect: branching in formula instead of relying on flat=0 The zero-sentinel anti-pattern (value=0 meaning "not in effect") violates PolicyEngine conventions. An explicit boolean is clearer and self-documenting. Ref PolicyEngine#7496 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Convert earned income disregard rate to month-based bracket parameter (ND calendar month proxy pattern) for time-limited EID - Restructure countable earned income formula: work expense, dependent care, and EID all applied per-person then summed to unit - Allocate dependent care to primary earner per MS 2840 B.2.c - Add dependent filter to dependent care disregard - Update tests for month-varying disregard rates and per-person math Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…yment maximums Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Program Review: Kentucky K-TAP (PR #7497)Source Documents
Critical (Must Fix)
Should Address
Suggestions
PDF Audit Summary
Validation Summary
Review Severity: COMMENTRationale: Four issues are flagged as Critical, but their severity is nuanced:
No actual parameter VALUES are wrong. No formulas are incorrect. All 149 tests pass. The implementation correctly encodes all three regulatory eras with comprehensive test coverage. The regulatory review independently verified 5 test cases by manual calculation and all matched. These issues are important to address for long-term maintainability but are not blocking -- they are educational/improvement items rather than "the code produces wrong results" issues. If the Nov 2025 children-vs-persons mapping question (C3) is confirmed to be correct, all criticals reduce to documentation fixes. Next StepsTo auto-fix issues: |
…into backdate-ky-ktap
…riptions - Fix gross income limit reference: Section 1(11) → Section 1(12) - Add missing period metadata to earned_income_disregard_rate - Add comments documenting Nov 2025 source limitations (payment_maximum) - Add comment confirming standard_of_need unchanged in Nov 2025 - Update regulation effective date from 2023-03-01 to 2023-02-16 (actual eff. date) - Fix breakdown_labels inconsistency in standard_of_need - Remove redundant threshold entry in earned_income_disregard_rate - Standardize parameter description verbs and placeholders Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix gross_income_limit_rate.yaml section reference (1(12) → 1(11) for current KAR) - Fix payment_maximum.yaml FACES mapping comment to match actual data - Standardize parameter descriptions with approved verbs - Update ky_ktap_countable_income.py reference to tuple with both KAR URLs - Add 3 edge case tests: non-dependent filter, negative income floor, child support exceeds unearned Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Summary
Backdates Kentucky K-TAP (TANF) parameters to 1997 (program inception), adds a unified earned income disregard formula supporting both the pre-2023 AFDC-era "$30 + 1/3" and post-2023 "50%" disregards, adds Nov 2025 payment maximum reductions, and makes all deductions fully per-person per MS 2840.
Closes #7496
Regulatory Authority
Income Eligibility Tests
Gross income test: Gross income ≤ 185% × standard of need
Resource limit: Liquid assets ≤ $2,000 (pre-2023) / $10,000 (post-2023)
Income Deductions & Exemptions
Applied per-person per MS 2840, then summed to unit level:
Work expense standard deduction: $90/month (pre-2023) / $175/month (post-2023) per earner
Dependent care disregard: Up to $175/month per dependent (full-time cap; $150 part-time not separately modeled)
Earned income disregard (EID):
Child support disregard: First $50/month excluded from unearned income
Income Standards
Standard of Need (by number of eligible persons)
Standard of need was not changed in Nov 2025; remains at ERA 2 levels.
Payment Maximum (by number of eligible persons)
Benefit Calculation
benefit = min(rate × max(standard_of_need − countable_income, 0), payment_maximum)Open Issues
Nov 2025 payment maximums: source and mapping uncertainty
The Nov 2025 values are sourced from the KY FACES web application, which is an informational page for kinship caregivers — not a regulatory instrument. No formal KAR amendment, administrative order, or TANF State Plan amendment has been identified authorizing these reductions. A pending 1/21/2025 KAR amendment is referenced on Cornell/LII but its text is not yet published.
Additionally, the KY FACES table uses "Number of Children" while the KAR regulation uses "Number of Eligible Persons" (which includes parents). Our implementation indexes by total assistance unit size (matching the KAR framework), but the Nov 2025 values may need re-mapping once the official regulatory text is available.
Known Limitations
Test Plan
make formatclean🤖 Generated with Claude Code