Implement Kansas Child Care Assistance Program (CCAP)#8622
Open
hua7450 wants to merge 8 commits into
Open
Conversation
Add changelog fragment for the Kansas Child Care Assistance Program (CCAP) implementation. Tracks PolicyEngine#8621. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ne#8621) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #8622 +/- ##
============================================
+ Coverage 77.77% 100.00% +22.22%
============================================
Files 1 15 +14
Lines 9 280 +271
============================================
+ Hits 7 280 +273
+ Misses 2 0 -2
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replace the 20 transcribed F-1 dollar tables (income limits and family share deductions by family size) with rate parameters derived from existing federal sources: FPL tier-floor and 0%/3%/5% deduction-rate brackets keyed by income-to-FPG ratio, and an 85% SMI income ceiling computed from gov.hhs.smi at the federal fiscal year vintage. Verified to reproduce every published F-1 value (except DCF's own size-11 180% FPL quirk, documented in code). Adds boundary and tier coverage tests (111 cases passing). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…larifications - tier_floor/rate first thresholds -> -.inf (explicit negative-income clamp) - Note keesm2810/keesm7540 page spans in titles citing sections 2820/7541 - Reword the ks_ccap expense cap comment (guards inconsistent direct inputs) - Document the SMI vintage vs May F-1 refresh lag as a forward-modeling choice Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The post-secondary need reason is "Child Care for Employed Persons Also Attending Approved Education/Training" - education does not independently satisfy the activity requirement, so a non-working full-time student household no longer qualifies. Employed students qualify through the 20-hour employment test; the teen-parent high school/GED pathway remains unmodeled (documented). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements the Kansas Child Care Assistance Program (CCAP) in PolicyEngine. CCAP is the state's child care subsidy, administered by the Kansas Department for Children and Families (DCF), Economic and Employment Services (EES). It reimburses providers for the cost of care for children in low-income working families, up to a maximum hourly provider rate and an authorized number of monthly hours, net of a family share deduction owed by the family.
Closes #8621
Regulatory Authority
All sources are from the Kansas Economic and Employment Services Manual (KEESM) and its appendices, published at
content.dcf.ks.gov.Program Overview
Eligibility
age < child_age_limit(13) inks_ccap_eligible_childis_disabledorhas_developmental_delayusespecial_needs_child_age_limit(age < 19). Court-supervision branch not modeled (no input).defined_for = StateCode.KSchained through eligibility variables;ks_ccap_rate_groupadditionally masks onstate_code_str == "KS"before county lookupis_ccdf_immigration_eligible_childis_ccdf_asset_eligibleweekly_hours_worked_before_lsr >= activity_hours(20). Federal minimum-wage earnings floor not modeled.is_tanf_enrolledgrants activity eligibility with no minimum-hours testThe activity test uses
weekly_hours_worked_before_lsr(not the post-labor-supply-response hours) to avoid a circular dependency in reform/microsimulation runs. A non-TANF unit is activity-eligible only if it has a head/spouse caretaker and no head/spouse caretaker fails the individual activity test.Income Eligibility
KEESM 7540 delegates the income ceiling entirely to the Appendix F-1 schedule: a family is income eligible when nonexempt gross income is "within the income limits established annually by the agency... See Appendix Item F-1." The F-1 "Income Limit" is 85% of State Median Income (SMI) for every family size — the F-1 header states families above 85% SMI are not eligible. The 250% FPL figure from the 2021 DCF memo is the policy basis used to set the schedule, not a separate operational comparison, so the 85% SMI ceiling is the sole binding test.
ks_ccap_income_eligiblecomputes the ceiling from existing federal parameters rather than transcribing the F-1 dollars:round(smi_income_limit_rate (0.85) × gov.hhs.smi[KS] with the HHS household-size adjustment ÷ 12), reading SMI at the federal fiscal-year vintage (October 1) that DCF uses to build each F-1 edition — thegov.hhs.smiparameter is otherwise uprated mid-fiscal-year, which would overstate the published ceiling. Family size is capped at 11 (the largest F-1 column; CCAP requires a child so the schedule starts at size 2). This reproduces every published F-1 income limit exactly:TANF bypass: KEESM 7540 exempts households with a TANF recipient from the financial-need test, so
is_tanf_enrolledfamilies are income eligible regardless of the F-1 ceiling.Countable income (KS-specific, KEESM 6200/6300/6410): earned income (employment, self-employment, farm) is counted for members aged 18+ and for any minor who is a parent (legally responsible for another nuclear-family member per KEESM 6410), so a teen parent's own wages stay countable while other children's earnings are exempt. Unearned income (Social Security, unemployment, workers' compensation, pension, military retirement, alimony, rental, veterans' benefits, dividends, interest) is counted for all members. SSI and assigned child support are excluded per the KEESM 6410 exemptions. TANF is excluded from the countable-income list to break the CCAP↔TANF circular dependency — the
is_tanf_enrolledbypass already makes TANF families categorically income eligible.Family Share Deduction
ks_ccap_family_sharederives the deduction from the F-1 schedule's underlying rates instead of transcribing its dollar table. Twosingle_amountbrackets keyed by the family's income-to-FPG ratio drive the calculation:tier_floormaps the ratio to the income tier's lower FPL multiple (0, 1.0, 1.1 … 1.85 — mirroring the F-1 "Income Limit" column), andratemaps it to the deduction percentage (0% at or below 100% FPL, 3% above 100% through 185%, 5% above 185% — per the May 2026 memo, unchanged since July 2021). The deduction isround(rate × round(tier_floor × monthly FPG)), rounding half-up to whole dollars at each step exactly as DCF builds the published table. Families below 100% FPL owe $0. Per KEESM 7541 the deduction is assessed only for "Income Eligible (Non-TANF) clients," so TANF recipients owe no family share (formula returns 0 whenis_tanf_enrolled).This derivation reproduces every published F-1 dollar amount (verified value-by-value), with one knowing exception: the published size-11 180% FPL bound shows $10,917 where the rule derives $10,914 — DCF's own schedule deviates from its formula there, and the implementation uses the derived value (noted in code comments). Published deduction values by family size and FPL tier (the May 1, 2026 F-1 schedule):
Because the schedule is computed from FPG, SMI, and the tier/rate brackets, the implementation tracks future annual F-1 refreshes automatically as the federal
gov.hhs.fpgandgov.hhs.smiparameters are updated — no per-size dollar re-transcription required.Benefit Calculation
ks_ccap(SPMUnit, MONTH) computes, per eligible child:summed across eligible children, then
max(total − ks_ccap_family_share, 0), capped at the SPM unit's actual monthly child care expenses. Because the benefit is built up from actual expenses and capped rates (no "base minus countable income" fill-the-gap path), negative self-employment income cannot inflate the subsidy.ks_ccap_monthly_hours):childcare_hours_per_week × WEEKS_IN_YEAR / MONTHS_IN_YEAR, capped at 240 hours/month, or 215 hours/month for relative providers (in-home and out-of-home).ks_ccap_hourly_rate): selected by provider type from the Appendix C-18 schedule.The C-18 rate schedule (eff. Oct 1, 2024) varies by county rate group, provider type, and age group. County groups: Group 1 = Johnson County only; Group 2 = 17 named counties (Butler, Douglas, Ellis, Geary, Greeley, Harvey, Jefferson, Leavenworth, Miami, Pottawatomie, Riley, Rush, Scott, Sedgwick, Seward, Shawnee, Wyandotte); Group 3 = all other Kansas counties (statewide base). Child care center maximum hourly rates illustrate the structure:
Licensed homes and out-of-home relative care have their own group × age-group rate tables; in-home relative care is a statewide flat $2.42/hour (eff. Nov 1, 2018) and the enhanced rate for special care is a statewide flat $7.34/hour (eff. Oct 1, 2024).
Requirements Coverage
All 27 in-scope requirements are covered (REQ-001..REQ-027). Items marked "(NM)" model the substantive rule but leave a narrow nuance unmodeled, documented in code comments.
eligibility/child_age_limitks_ccap_eligible_childks_ccap_eligible_childeligibility/special_needs_child_age_limitks_ccap_eligible_childks_ccap_eligible_child+ integrationks_ccap_eligible_childks_ccap_eligible_childks_ccap_eligibleks_ccap_eligibleeligibility/activity_hoursks_ccap_activity_eligibleks_ccap_activity_eligibleks_ccap_activity_eligibleks_ccap_activity_eligibleks_ccap_activity_eligiblefamily_share/income_limit/size_2..11ks_ccap_income_eligibleks_ccap_income_eligible+ integrationincome/countable_income/{earned,unearned}ks_ccap_countable_incomeks_ccap_countable_incomefamily_share/deduction/size_2..11ks_ccap_family_shareks_ccap_family_share+ integrationrate_group/{group_1,group_2}ks_ccap_rate_groupks_ccap_rate_grouprates/{center,licensed_home,out_of_home_relative}ks_ccap_hourly_rateks_ccap_hourly_raterates/in_home_relativeks_ccap_hourly_rateks_ccap_hourly_rate+ integrationrates/enhanced_special_careks_ccap_hourly_rateks_ccap_hourly_rate+ integrationage_group/{center,home,relative}_monthsks_ccap_{center,home,relative}_age_groupks_ccap_*_age_grouphours/{standard,relative}_max_monthlyks_ccap_monthly_hoursks_ccap_monthly_hoursks_ccapks_ccap+ integrationks_child_care_subsidiesks_child_care_subsidiesgov/hhs/ccdf/child_care_subsidy_programsNot Modeled
age < 13.Historical Notes
The income test has always been delegated to Appendix F-1 by KEESM 7540, but the schedule's policy basis evolved. The July 1, 2021 implementation memo expanded eligibility to 250% FPL, federally capped at 85% SMI — at that time the SMI cap bound only for the largest family sizes (sizes 7+, asterisked in that era's F-1). The current F-1 (eff. May 1, 2026) lists "Up to 85% SMI" as the top eligibility band for every family size 2–11: the 85% SMI dollar values now fall below 250% × FPG for all sizes, so the effective ceiling is 85% SMI across the board. The 2026 memo is the annual FPG/SMI table refresh; the family share deduction structure (0% / 3% / 5% by FPL tier) has been unchanged since July 2021.
An
income/fpl_limit.yamlparameter (2.5, eff. 2021-07-01) was initially created from the 2021 memo, then deleted as an orphan once KEESM 7540's delegation to F-1 was verified — the F-1 schedule is the sole operative income test, so a separate 250% FPL comparison would have been redundant. The implementation initially transcribed the F-1 dollar tables (20 per-size parameter files); after verifying that every published value derives exactly from FPL multiples, the 3%/5% rates, and 85% of the HHS SMI series, those tables were replaced with the rate-based bracket parameters described above.Verification TODO for reviewers: the exact date Kansas moved from
min(250% FPL, 85% SMI)to a pure 85% SMI ceiling for the smaller family sizes (2–6) was not pinned down (intermediate F-1 editions and memos were not collected). This does not affect modeled periods, because all parameters start at their documented effective dates (F-1 income/FSD tables 2026-05-01; C-18 rates 2024-10-01; in-home relative rate 2018-11-01).Files Added
Test plan
policyengine-core test policyengine_us/tests/policy/baseline/gov/states/ks/dcf/ccap -c policyengine_us)ParameterNotFoundError, no CCAP↔TANF cycle errors, no KS-originated warnings