Implement Minnesota Child Care Assistance Program (CCAP)#8637
Open
hua7450 wants to merge 10 commits into
Open
Conversation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #8637 +/- ##
==========================================
Coverage 100.00% 100.00%
==========================================
Files 1 19 +18
Lines 23 308 +285
==========================================
+ Hits 23 308 +285
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:
|
- Model MN CCAP activity-hours requirement (>=20 hr/wk, >=10 FT students) per Minn. Stat. 142E.12 subd.1(b) - Fix citations: 142E.06->142E.10 subd.1 (income), 142E.01 subd.7->subd.4 (child age), family_months->9502.0315, rate_unit->142E.17 subd.1 - Replace hard-coded 26 with WEEKS_IN_YEAR/2; strip page suffix from reference titles - Add MN CCAP to programs.yaml; add copay size 7/10 + LNL/exempt/full-day integration tests Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- exit_during_period.yaml: cite DHS-6413N + 45 CFR 98.21(a)(1) for 85% SMI (142E.10 lacks it) - Document 142E.12 subd.3 education/training pathway as not modeled; pin 142E.12 subd.1(b) ref - center_months.yaml: align title with 9503.0005 href - Add inclusive 20-hr activity edge test; fix stale subd.7 comment Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Exclude children's earned income from countable income (manual 6.6.1) - Activity eligibility: MFIP/DWP categorical, full-time-student education pathway, and broaden the "unable to provide care" exemption (manual 4.6.1, 4.6.3); full-time students no longer need a work-hours floor - Apply statutory per-day and per-week payment caps and legal non-licensed 10-hour/day and 50-hour/week caps to provider rates (Minn. Stat. 142E.17 subd. 1(f), 2(b)) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Exempt families experiencing homelessness from the authorized-activity requirement (CCAP Policy Manual 4.6.9), mirroring MA/SC/AL/KY CCAP via is_homeless. - Floor net self-employment at zero per person so a business loss cannot reduce wages or unearned income (Minn. Rules 3400.0170 subp. 4; manual 6.15.6); split self-employment into its own countable-income source list. - Cite CCAP Policy Manual 9.9 as the source of the rate-unit hour thresholds. - Add tests: homelessness exemption, self-employment loss floor (wage, unearned, cross-member, and allowed cross-business offset), and the activity term in the overall eligibility gate. Co-Authored-By: Claude Opus 4.8 (1M context) <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 Minnesota's Child Care Assistance Program (CCAP) in PolicyEngine — a provider-rate reimbursement subsidy computed per child as the lesser of the provider's charge or the state maximum rate, minus the biweekly parent fee. Administered by the Minnesota Department of Children, Youth, and Families (DCYF), which took CCAP over from the Department of Human Services (DHS) in 2024.
Closes #8636
Regulatory Authority
Program Overview
hhs_smivariable × {47% / 67% / 85%} (verified to the dollar against DHS-6413N: 2-person 47% = $46,022; 3-person 67% = $81,042; 4-person 85% = $122,398), so the implementation reuseshhs_smirather than introducing a separate Minnesota SMI variable.Eligibility
mn_ccap_eligibleaggregatesmn_ccap_eligible_childover the SPM unitage_threshold/child.yaml(13) +disabled_child.yaml(15) inmn_ccap_eligible_childis_tax_unit_dependentinmn_ccap_eligible_childis_ccdf_immigration_eligible_childmn_ccap_activity_eligible(see below)is_ccdf_asset_eligiblemn_ccap_income_eligible(SMI test reusinghhs_smi)Authorized activity (
mn_ccap_activity_eligible; manual §4.6.1, §4.6.3; Minn. Stat. 142E.12 subd. 1(b)): at least one caretaker must be in an authorized activity — employed an average of ≥ 20 hrs/week, or enrolled as a full-time student (education is itself an authorized activity under §4.6.6.9, with no work-hours floor). In a two-caretaker family the other caretaker must also be active or "unable to provide care" — modeled viais_disabled,is_incapable_of_self_care,is_incarcerated(house arrest), and out-of-home/residential care-facility status. MFIP/DWP families meet the requirement categorically through their Employment Plan (is_tanf_enrolled), and families experiencing homelessness are exempt from the activity requirement (§4.6.9), modeled viais_homeless— we don't track the manual's ~3-month exemption window, so the exemption applies for the full period. Themeets_ccdf_activity_testinput covers approved activities we don't derive directly (job search, education/training programs, temporary leave) and the applicable-minimum-wage component.Income
Income base = annual gross income after allowable deductions, used for both the eligibility test and the copay band lookup (manual §6.3, §6.6; Minn. Rules 3400.0170 subp. 4; Minn. Stat. 256P.06).
income/countable_income/earned.yaml.income/countable_income/self_employment_sources.yaml): a net business loss may offset other self-employment income but cannot reduce wages or unearned income (Minn. Rules 3400.0170 subp. 4; manual §6.15.6), somn_ccap_gross_earned_incomeappliesmax_(self_employment, 0)per person before adding it to wages.mn_ccap_gross_earned_incomesubtracts the earnings of household members under 18 (is_child). This is a simplification — the manual additionally counts a non-student minor's earnings and a dependent post-secondary student's earnings, which we don't separately track.income/countable_income/unearned.yaml. Income types without a PolicyEngine variable are listed as inline comments.income/deductions/sources.yaml; applied asmn_ccap_countable_income = max_(gross − deductions, 0).Benefit Calculation
Per eligible child:
summed across eligible children. Actual expenses come from the federal
spm_unit_pre_subsidy_childcare_expenses(RI/MA/CO precedent). The parent pays any provider charge above the maximum, plus the copay (manual §9.9; Minn. Stat. 142E.17 subd. 1(e),(i)).rates/{weekly,full_day,hourly,lnl_hourly}.yaml.mn_ccap_rate_unit; parameters:rate_unit/{weekly,daily}_hours_threshold.yaml.rates/lnl_max_daily_hours.yaml(10),rates/lnl_max_weekly_hours.yaml(50).quality_differential.yaml.copay/biweekly/size_2.yaml…size_13.yaml; variable:mn_ccap_copay.Source Verification
Every published dollar value was verified against the official PDFs:
hhs_smi× {47% / 67% / 85%}.Not Modeled
Verification TODO
Files
Test plan
policyengine-core test)