Skip to content

Implement New Mexico Child Care Assistance Program (CCAP)#8707

Draft
hua7450 wants to merge 3 commits into
PolicyEngine:mainfrom
hua7450:nm-ccap
Draft

Implement New Mexico Child Care Assistance Program (CCAP)#8707
hua7450 wants to merge 3 commits into
PolicyEngine:mainfrom
hua7450:nm-ccap

Conversation

@hua7450

@hua7450 hua7450 commented Jun 22, 2026

Copy link
Copy Markdown
Collaborator

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

Eligibility

Requirement Source How Modeled
Eligible-child age 8.15.2.11.F nm_ccap_eligible_childage < 13 (eligibility/child_age_limit.yaml = 13). 6-week lower bound NOT modeled (see Not Modeled)
Special-needs age extension 8.15.2.11.G nm_ccap_eligible_childhas_developmental_delay & age < 18 (eligibility/special_needs_child_age_limit.yaml = 18). Court-supervision route not modeled (no PE input)
NM residence 8.15.2.11.D defined_for = StateCode.NM on all NM CCAP variables
Citizenship / qualified immigrant 8.15.2.11.E Citizen/qualified-immigrant CHILD required pre-UCC (8.15.2.11.E NMAC); toggled off from 2025-11-01 under UCC (child served with state funds — funding-source only) via immigration_test_in_effect. Reuses federal is_ccdf_immigration_eligible_child
Asset limit ($1,000,000) 8.15.2.11.C(4) nm_ccap_asset_eligiblespm_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)
Work / school / training activity 8.15.2.11.I, 8.15.2.7 nm_ccap_activity_eligible — each head/spouse caretaker weekly_hours_worked > 0 OR is_full_time_student
Income — intake 200% FPL / recert 250% FPL 8.15.2.9, 8.15.2.12 nm_ccap_income_eligible reads nm_ccap_enrolled to pick fpl_limit/initial.yaml (2.0) vs continuation.yaml (2.5) against spm_unit_fpg
TANF-transition bypass (Priority 2) 8.15.2.9 is_tanf_enrolled categorical bypass in nm_ccap_income_eligible (also breaks the CCAP↔TANF circular dependency)
Universal Child Care — no income limit ECECD Universal page eligibility/income_limit_in_effect.yaml toggles true → false on 2025-11-01; income test short-circuits to eligible
Countable income 8.15.2.11.C(3),(5),(6) nm_ccap_countable_income sums a positive list of 11 PE income variables (income/countable_income/sources.yaml); exempt categories excluded by omission

Note: 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:

subsidy_per_child = max(0, min(provider_rate, pre_subsidy_childcare_charge) − copay)

The SPMUnit nm_ccap benefit sums this across eligible children. The copay (nm_ccap_copay) is $0 for all modeled periods because copay/waived.yaml is true from 2022-05-01.

The provider rate (nm_ccap_monthly_rate) is a four-dimensional lookup:

  • Provider type (nm_ccap_provider_type enum) × FOCUS star level (nm_ccap_focus_level enum) × age group (nm_ccap_age_group, derived from age-in-months brackets) — yields the full-time base rate.
  • Service unit (nm_ccap_service_unit) scales the base rate by service_unit_fraction.yaml: Full time = 100%, Part time 1 = 75%, Part time 2 = 50%, Part time 3 = 25%.
  • Non-traditional-hours differential (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.yaml and rates/group_home.yaml and rates/family_home.yamlbreakdown: [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.yamlbreakdown: [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

REQ Description Param Variable Test
REQ-001 Eligible child age <13 (upper bound) eligibility/child_age_limit.yaml nm_ccap_eligible_child nm_ccap_eligible_child.yaml
REQ-002 Special-needs age extension 13–18 eligibility/special_needs_child_age_limit.yaml nm_ccap_eligible_child nm_ccap_eligible_child.yaml (cases 4,5,7,8)
REQ-004 NM residence — (defined_for=StateCode.NM) all NM CCAP vars integration.yaml (case 7)
REQ-005 Citizenship / qualified immigrant (toggled off under UCC) eligibility/immigration_test_in_effect.yaml nm_ccap_eligible_child nm_ccap_eligible_child.yaml (case 6)
REQ-006 Asset limit $1,000,000 eligibility/asset_limit.yaml nm_ccap_asset_eligible nm_ccap_asset_eligible.yaml (4 cases incl. boundary)
REQ-007 Work / school activity nm_ccap_activity_eligible nm_ccap_activity_eligible.yaml (6 cases)
REQ-010 Income 200% intake / 250% recert FPL fpl_limit/initial.yaml, fpl_limit/continuation.yaml nm_ccap_income_eligible, nm_ccap_enrolled nm_ccap_income_eligible.yaml
REQ-012 TANF-transition bypass nm_ccap_income_eligible (is_tanf_enrolled) nm_ccap_income_eligible.yaml, integration.yaml (case 4)
REQ-015 UCC: no income limit from 2025-11-01 eligibility/income_limit_in_effect.yaml nm_ccap_income_eligible nm_ccap_income_eligible.yaml (2026-01), integration.yaml (case 6)
REQ-016 Countable income positive list income/countable_income/sources.yaml nm_ccap_countable_income nm_ccap_countable_income.yaml
REQ-018 Exempt income by omission nm_ccap_countable_income nm_ccap_countable_income.yaml (case 2)
REQ-019 Subsidy = min(rate, charge) − copay nm_ccap integration.yaml (13 cases)
REQ-020 Provider types rates/{center,group_home,family_home,registered_home}.yaml nm_ccap_provider_type nm_ccap_monthly_rate.yaml (cases 1–13)
REQ-021 FOCUS star levels rate files keyed by focus level nm_ccap_focus_level nm_ccap_monthly_rate.yaml (cases 1–5)
REQ-022 Age groups rates/age_group/months.yaml nm_ccap_age_group nm_ccap_age_group.yaml
REQ-023 Service unit FT/PT1/PT2/PT3 rates/service_unit_fraction.yaml, rates/service_unit/hours.yaml nm_ccap_service_unit nm_ccap_service_unit.yaml, nm_ccap_monthly_rate.yaml (cases 14–16)
REQ-024 Non-traditional-hours differential supplements/non_traditional_hours.yaml nm_ccap_non_traditional_hours nm_ccap_monthly_rate.yaml (cases 17–22), integration.yaml (case 5)
REQ-025 Copay waived ($0) from 2022-05-01 copay/waived.yaml nm_ccap_copay nm_ccap_copay.yaml
REQ-027 Register in CCDF program list gov/hhs/ccdf/child_care_subsidy_programs.yaml nm_child_care_subsidies
REQ-028 CCDF state implementation entry programs.yaml nm_ccap

Not Modeled

What Source Why excluded
6-week lower age bound 8.15.2.11.F PolicyEngine age has no sub-year granularity (all infants <1 yr read age == 0), so a 6-week floor would wrongly exclude every infant. Upper bound (<13) and special-needs (<18) are modeled.
Pre-2022 copay formula 8.15.2.13.B Deferred — copay is $0 today; the regulation's "× (low end of bracket)" middle term is dimensionally suspect, and the published annual copay schedule (8.15.2.24) is the operational source of truth.
Essential-worker Priority 4 Plus (400% intake / 425% recert FPL) 8.15.2.9, 8.15.2.12 Deferred — narrow population, no is_essential_worker PE input; moot under UCC (no income limit from 2025-11-01).
Income conversion factors (weekly 4.3 / biweekly 2.15 / semimonthly 2) 8.15.2.11.C(8)(b) Subsumed by the framework — PE income inputs are annual and auto-convert to monthly, so there is no raw weekly/biweekly pay input for these factors to apply to.
Priority 1 / 1B (100% FPL) and Priority 5 waitlist tiers 8.15.2.9 Affect waitlist ordering, not the binary income/benefit test. Priority 5 (income/activity/copay all waived) has no PE input for "at-risk / department-approved."
No benefit during school / Head Start / pre-k hours 8.15.2.11.H We don't track per-hour program attendance.
Temporary-change allowance (<3-month interruption) 8.15.2.7 We don't track temporary activity interruptions.
UCC work/school exemptions (grandparents raising grandchildren, substance-exposed newborns, housing instability, CYFD-involved) ECECD Universal page No PE inputs for these statuses.
Minor-earner and grandparent-non-guardian income exclusions 8.15.2.11.C(3),(6) A flat adds list cannot filter countable income by earner relationship/age.

Files Added

policyengine_us/parameters/gov/states/nm/ececd/ccap/
  copay/waived.yaml
  eligibility/asset_limit.yaml
  eligibility/child_age_limit.yaml
  eligibility/immigration_test_in_effect.yaml
  eligibility/income_limit_in_effect.yaml
  eligibility/special_needs_child_age_limit.yaml
  eligibility/fpl_limit/continuation.yaml
  eligibility/fpl_limit/initial.yaml
  income/countable_income/sources.yaml
  rates/center.yaml
  rates/group_home.yaml
  rates/family_home.yaml
  rates/registered_home.yaml
  rates/service_unit_fraction.yaml
  rates/age_group/months.yaml
  rates/service_unit/hours.yaml
  supplements/non_traditional_hours.yaml

policyengine_us/variables/gov/states/nm/ececd/ccap/
  nm_ccap.py
  nm_child_care_subsidies.py
  nm_ccap_age_group.py
  nm_ccap_copay.py
  nm_ccap_countable_income.py
  nm_ccap_enrolled.py
  nm_ccap_focus_level.py
  nm_ccap_monthly_rate.py
  nm_ccap_non_traditional_hours.py
  nm_ccap_provider_type.py
  nm_ccap_service_unit.py
  eligibility/nm_ccap_activity_eligible.py
  eligibility/nm_ccap_asset_eligible.py
  eligibility/nm_ccap_eligible.py
  eligibility/nm_ccap_eligible_child.py
  eligibility/nm_ccap_income_eligible.py

policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap/
  integration.yaml
  nm_ccap_age_group.yaml
  nm_ccap_copay.yaml
  nm_ccap_countable_income.yaml
  nm_ccap_monthly_rate.yaml
  nm_ccap_service_unit.yaml
  eligibility/nm_ccap_activity_eligible.yaml
  eligibility/nm_ccap_asset_eligible.yaml
  eligibility/nm_ccap_eligible.yaml
  eligibility/nm_ccap_eligible_child.yaml
  eligibility/nm_ccap_income_eligible.yaml

Registry edits:

  • policyengine_us/parameters/gov/hhs/ccdf/child_care_subsidy_programs.yaml — added nm_child_care_subsidies to the CCDF adds list so the benefit flows into the federal child_care_subsidies.
  • policyengine_us/programs.yaml — added the New Mexico CCAP state_implementations entry under federal CCDF (variable: nm_ccap, status: complete).

Verification TODO

  • Confirm the rate schedule is current. The ECECD rate flyer is labeled "Effective August 2023" but the file is dated May 2024; no newer schedule was found. Verify the rate amounts remain current.
  • Confirm the "2+Star == 3-Star" rate equality. The published flyer lists identical rates for 2+Star and 3-Star FOCUS across all provider tables. This was confirmed present in the source (not a transcription artifact) and is flagged here for reviewer awareness.

Test plan

  • 92 tests pass (policyengine-core test policyengine_us/tests/policy/baseline/gov/states/nm/ececd/ccap -c policyengine_us -v)
  • CI passes

hua7450 and others added 2 commits June 21, 2026 21:29
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

codecov Bot commented Jun 22, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 99.15966% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 99.15%. Comparing base (47cb26b) to head (8b4fe9f).
⚠️ Report is 13 commits behind head on main.

Files with missing lines Patch % Lines
...ariables/gov/states/nm/ececd/ccap/nm_ccap_copay.py 85.71% 1 Missing and 1 partial ⚠️
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     
Flag Coverage Δ
unittests 99.15% <99.15%> (-0.85%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 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.

…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>
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 New Mexico Child Care Assistance Program (CCAP)

1 participant