Implement New Mexico Child Care Assistance Program (CCAP)#8707
Draft
hua7450 wants to merge 3 commits into
Draft
Conversation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…Engine#8706) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #8707 +/- ##
===========================================
- Coverage 100.00% 99.15% -0.85%
===========================================
Files 3 16 +13
Lines 47 238 +191
Branches 0 3 +3
===========================================
+ Hits 47 236 +189
- Misses 0 1 +1
- Partials 0 1 +1
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:
|
…rence cleanups - Immigration test (is_ccdf_immigration_eligible_child) now gated on a new immigration_test_in_effect toggle (true through 2025-10-31, false from 2025-11-01): under Universal Child Care, a child without federally-eligible status is served with state funds, so the child-level citizenship bar (8.15.2.11.E NMAC) no longer gates. - Removed 'p.N' page numbers from 7 rate-flyer reference titles (page stays in #page=). - Fixed age_group/months citation to 8.15.2.7(I)(2)(a)-(d) NMAC. 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 New Mexico's Child Care Assistance Program (CCAP), administered by the Early Childhood Education and Care Department (ECECD), under 8.15.2 NMAC. The subsidy reimburses providers per child based on a four-dimensional rate table (provider type × FOCUS star level × age group × service unit), with copays waived since 2022-05-01 and a no-income-limit Universal Child Care era beginning 2025-11-01.
Closes #8706
Regulatory Authority
#page=anchor). Subsections used:Eligibility
nm_ccap_eligible_child—age < 13(eligibility/child_age_limit.yaml= 13). 6-week lower bound NOT modeled (see Not Modeled)nm_ccap_eligible_child—has_developmental_delay & age < 18(eligibility/special_needs_child_age_limit.yaml= 18). Court-supervision route not modeled (no PE input)defined_for = StateCode.NMon all NM CCAP variablesimmigration_test_in_effect. Reuses federalis_ccdf_immigration_eligible_childnm_ccap_asset_eligible—spm_unit_assets <= 1_000_000(eligibility/asset_limit.yaml); state-specific, not the federal CCDF limit. Retained for all years (incl. post-UCC); rarely binds (modeling simplification)nm_ccap_activity_eligible— each head/spouse caretakerweekly_hours_worked > 0ORis_full_time_studentnm_ccap_income_eligiblereadsnm_ccap_enrolledto pickfpl_limit/initial.yaml(2.0) vscontinuation.yaml(2.5) againstspm_unit_fpgis_tanf_enrolledcategorical bypass innm_ccap_income_eligible(also breaks the CCAP↔TANF circular dependency)eligibility/income_limit_in_effect.yamltogglestrue → falseon 2025-11-01; income test short-circuits to eligiblenm_ccap_countable_incomesums a positive list of 11 PE income variables (income/countable_income/sources.yaml); exempt categories excluded by omissionNote: the parent's immigration status is never an eligibility factor (45 CFR 98.20(c)); only the child's citizenship/qualified-immigrant status was ever modeled, and that child-level test toggles off under UCC (the child is then served with state funds — immigration status sets only the funding source, not eligibility).
Benefit Calculation
For each eligible child, the per-child subsidy is the lesser of the provider reimbursement rate and the actual pre-subsidy childcare charge, minus the copay, floored at zero:
The SPMUnit
nm_ccapbenefit sums this across eligible children. The copay (nm_ccap_copay) is $0 for all modeled periods becausecopay/waived.yamlistruefrom 2022-05-01.The provider rate (
nm_ccap_monthly_rate) is a four-dimensional lookup:nm_ccap_provider_typeenum) × FOCUS star level (nm_ccap_focus_levelenum) × age group (nm_ccap_age_group, derived from age-in-months brackets) — yields the full-time base rate.nm_ccap_service_unit) scales the base rate byservice_unit_fraction.yaml: Full time = 100%, Part time 1 = 75%, Part time 2 = 50%, Part time 3 = 25%.nm_ccap_non_traditional_hours) adds +5% / +10% / +15% of the applicable rate for after-hours care (7pm–7am weekdays and weekends).Registered Home / In-Home providers use a single rate per age group (no star levels).
Provider Reimbursement Rates
Rates come from the ECECD Child Care Assistance Rates flyer (Effective August 2023). Full-time base monthly rates are stored per provider type:
rates/center.yamlandrates/group_home.yamlandrates/family_home.yaml—breakdown: [focus_level, age_group], five FOCUS levels (2-Star, 2+Star, 3-Star, 4-Star, 5-Star) × four age groups (Infant, Toddler, Preschool, School Age).rates/registered_home.yaml—breakdown: [age_group], single rate, no star levels.rates/service_unit_fraction.yaml— FT/PT1/PT2/PT3 fractions (1.0 / 0.75 / 0.50 / 0.25) applied once, so part-time columns are not transcribed per provider.All rate cells were verified against the rate-flyer PDF (pp. 2–5) at 200 DPI. Age-group boundaries (0–23 / 24–35 / 36–71 / 72+ months) follow the 8.15.2.7 definitions, which are more precise than the flyer's age labels.
Requirements Coverage
eligibility/child_age_limit.yamlnm_ccap_eligible_childnm_ccap_eligible_child.yamleligibility/special_needs_child_age_limit.yamlnm_ccap_eligible_childnm_ccap_eligible_child.yaml(cases 4,5,7,8)defined_for=StateCode.NM)integration.yaml(case 7)eligibility/immigration_test_in_effect.yamlnm_ccap_eligible_childnm_ccap_eligible_child.yaml(case 6)eligibility/asset_limit.yamlnm_ccap_asset_eligiblenm_ccap_asset_eligible.yaml(4 cases incl. boundary)nm_ccap_activity_eligiblenm_ccap_activity_eligible.yaml(6 cases)fpl_limit/initial.yaml,fpl_limit/continuation.yamlnm_ccap_income_eligible,nm_ccap_enrollednm_ccap_income_eligible.yamlnm_ccap_income_eligible(is_tanf_enrolled)nm_ccap_income_eligible.yaml,integration.yaml(case 4)eligibility/income_limit_in_effect.yamlnm_ccap_income_eligiblenm_ccap_income_eligible.yaml(2026-01),integration.yaml(case 6)income/countable_income/sources.yamlnm_ccap_countable_incomenm_ccap_countable_income.yamlnm_ccap_countable_incomenm_ccap_countable_income.yaml(case 2)nm_ccapintegration.yaml(13 cases)rates/{center,group_home,family_home,registered_home}.yamlnm_ccap_provider_typenm_ccap_monthly_rate.yaml(cases 1–13)nm_ccap_focus_levelnm_ccap_monthly_rate.yaml(cases 1–5)rates/age_group/months.yamlnm_ccap_age_groupnm_ccap_age_group.yamlrates/service_unit_fraction.yaml,rates/service_unit/hours.yamlnm_ccap_service_unitnm_ccap_service_unit.yaml,nm_ccap_monthly_rate.yaml(cases 14–16)supplements/non_traditional_hours.yamlnm_ccap_non_traditional_hoursnm_ccap_monthly_rate.yaml(cases 17–22),integration.yaml(case 5)copay/waived.yamlnm_ccap_copaynm_ccap_copay.yamlgov/hhs/ccdf/child_care_subsidy_programs.yamlnm_child_care_subsidiesprograms.yamlnm_ccapNot Modeled
agehas no sub-year granularity (all infants <1 yr readage == 0), so a 6-week floor would wrongly exclude every infant. Upper bound (<13) and special-needs (<18) are modeled.is_essential_workerPE input; moot under UCC (no income limit from 2025-11-01).addslist cannot filter countable income by earner relationship/age.Files Added
Registry edits:
policyengine_us/parameters/gov/hhs/ccdf/child_care_subsidy_programs.yaml— addednm_child_care_subsidiesto the CCDFaddslist so the benefit flows into the federalchild_care_subsidies.policyengine_us/programs.yaml— added the New Mexico CCAPstate_implementationsentry under federal CCDF (variable: nm_ccap,status: complete).Verification TODO
Test plan
policyengine-core test policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap -c policyengine_us -v)