Skip to content

Cap Colorado's child care payment at the county reimbursement rate - #10723

Draft
MaxGhenis wants to merge 6 commits into
mainfrom
co-ccap-county-rates
Draft

MaxGhenis wants to merge 6 commits into
mainfrom
co-ccap-county-rates

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

This branch carries #10699's commit as bcd8c283c1, so #10699 merges first. We'll then rebase onto main, leaving this PR's own commits.

Under the Colorado Child Care Assistance Program (CCCAP), a county pays a provider the lesser of the provider's private pay rate and the county reimbursement rate (8 CCR 1403-1 3.125(FFF)). Colorado's Department of Early Childhood (CDEC) sets the rates for licensed centers and family child care homes by county, age band and quality level, and each county sets its own rates for qualified exempt providers (3.130). A provider may not charge a CCCAP family more than that rate (3.128(T)). The model had Colorado pay each eligible child's charges in full, less the parent fee. We add the rate tables and cap each eligible child's charges at the county rate for that child's care. The family still pays the parent fee, up to the sum of the capped charges (3.124(L)), and the provider absorbs the charges above the rate.

Rates

  • rates/licensed_center.yaml and rates/licensed_home.yaml hold CDEC's state-established full-time daily rates (Regular rate type) for Colorado's 64 counties, by age band and quality tier. They come from CDEC's tables effective October 1, 2024 and October 1, 2025, and all 2,688 cells match those tables.
  • rates/qualified_exempt.yaml holds each county's Regular rates for qualified exempt providers, by age band, from the county rate plans. Its values match all 150 plans that took effect from October 1, 2024 to November 1, 2026.
  • rates/care_unit.yaml holds each care unit's share of the full-time rate. A county pays 55% of the full-time rate for up to 5 hours of care a day, the full rate for up to 12 hours, 155% for up to 17 hours and twice the rate for up to 24 hours. CDEC sets the hours and the 55% in 3.130(C), and the county rate plans print the 155% and 200% units.
  • rates/age_band/ holds the age, in months, at which each band starts.

Variables

  • co_ccap_provider_type, co_ccap_quality_tier, co_ccap_center_age_band, co_ccap_home_age_band and co_ccap_qualified_exempt_age_band turn childcare_provider_type_group, co_quality_rating_of_child_care_facility and monthly_age into the tables' keys.
  • co_ccap_full_time_daily_rate reads the child's cell. co_ccap_care_unit reads the child's hours of care a day from co_ccap_care_hours_per_day, and co_ccap_daily_rate applies that unit's share and rounds half up to the cent, as the counties do in their rate plans. co_ccap_maximum_monthly_payment multiplies the daily rate by co_ccap_care_days_per_month.
  • co_ccap_child_charges adds a child's pre_subsidy_childcare_expenses and after_school_expenses. co_ccap_reimbursement sums each eligible child's charges up to that child's county rate, and co_ccap_charges_above_rate sums the rest. co_ccap_capped_parent_fee holds the parent fee to the reimbursement, and co_ccap_subsidy pays the reimbursement less the capped fee.
  • child_care_charges_providers_absorb adds up the charges that a subsidy program bars providers from collecting, so far Colorado's co_ccap_charges_above_rate. childcare_expenses subtracts them along with child_care_subsidies.
  • co_ccap_after_school_care_only marks a child in first grade or above whose only reported care comes after school, with no hours or days of care.
  • The parent fee reads the same care unit and days. co_ccap_full_time_equivalent_units multiplies co_ccap_care_unit by co_ccap_care_days_per_month, and for a child in first grade or above, co_ccap_child_in_part_time_care tests whether the care unit falls below 1. Both used to read parent_fee/part_time/full_time_equivalent_units.yaml, which held the same four units as rates/care_unit.yaml. We remove it, so the fee and the cap read one table. co_ccap_child_in_part_time_care also rounds the units to four decimals before comparing them with 13, because single-precision storage can put 13 units a hair below 13.

Readings

  • The model reads each child's hours of care a day from co_ccap_care_hours_per_day, as the parent fee does. It takes the daily hours when the household reports them. Otherwise it spreads the weekly hours over the larger of days a week and attending days a month × 12 / 52, or over five weekdays when the household reports no days.
  • Without any hours, the model reads the full-time unit, except for a child in first grade or above whose only reported care comes after school. That child reads the part-time unit, as the parent fee does, since counties charge school children in part-time care during the school year a part-time fee (3.124(W)). Without days a week or attending days a month, the model reads a five-day week (21.67 days a month).
  • The default dataset, Populace US 2024, records none of these, nor after-school charges, the provider type or the quality rating. So every eligible Colorado child on it gets the full-time rate of a Tier 1 and 2 licensed center, five days a week. A part-time default would cut the rate to 55% for children whose hours nobody recorded.
  • The model counts days of care as the larger of days a week × 52 / 12 and attending days a month, up to the days in the month. Counties pay licensed providers for at least three or four absences a month and, with CDEC's approval of a county rate plan, may pay for more absences and for holidays (3.130(E)). The model carries no county's absence policy, so it prices every scheduled day, attended or not. It reads attending days above the schedule as drop-in days, which a county may pay for with CDEC's approval (3.130(F)).
  • The model prices only the Regular rate type. With CDEC's approval, a county may set rates in its rate plan for alternative care, such as care before or after school, overnight, on weekends or out of county (3.130(C)(5)). For that care, the county may pay more or less than the Regular rate the model applies.
  • The model caps a child's after-school charges together with the child's other charges, under one county rate.
  • Counties authorize payment only for care from licensed or qualified exempt providers (3.103(N)). In their rate plans, counties set rates for qualified exempt providers, the unlicensed family and relative caregivers of 3.103(MMMM), and none for qualified exempt facilities (3.103(LLLL)). The model gives every license-exempt provider group, legally exempt group programs among them, the qualified exempt providers' rates. It gives an unrated provider the Tier 1 and 2 rates, and from 72 months it applies a center's or home's school-age rate.
  • When a household's county reads UNKNOWN or lies outside Colorado, the model reads Denver's rates, as co_ccap_fpg_eligible does for its income limits. A Colorado household that reports neither a county nor a county FIPS code reads Adams County's rates, because county assigns it Colorado's first county. In a simulation where other households report a county, that household gets UNKNOWN instead, and so Denver's rates.
  • The model reads each rate as of the first day of the month it prices, because counties change their plans on dates of their own. For example, Weld County cut its qualified exempt rate for children under 5 from $42.15 to $28.10 a day on February 1, 2025. The model reads CCCAP's income limits as of the previous October 1 instead (co_ccap_parameter_instant).
  • For months before October 2024, the model reads the October 2024 rates. CDEC's earlier state-established rates differ. For example, Larimer County's April 2024 plan pays a center $65.56 a day for full-time Tier 1 care of an infant under 6 months, and the October 2024 table pays $70.17 for Tier 1 and 2 care under 18 months. Conejos, Crowley, Kiowa and Larimer counties also set other qualified exempt rates in their earlier plans.

What families pay

Under 3.128(T), a provider may not charge a CCCAP family more than the daily reimbursement rate in its fiscal agreement, though CDEC lets a provider charge for care the county hasn't authorized (provider handbook). The model has no input that separates authorized care from other care, so it reads every reported charge as authorized care. The provider then absorbs each eligible child's charges above the county rate, and childcare_expenses subtracts them along with the subsidy. For an eligible child, the family's cost comes to the capped parent fee, as it did before this change, when the model paid the full charge less the fee. An ineligible child's charges stay with the family. The variables that read childcare_expenses see that cost, among them the federal child and dependent care credit, Colorado's low-income child care expenses credit and SNAP's dependent care deduction.

Invariants

The property tests check these for every input their strategies draw:

  1. The full-time rate the model reads equals the parameter files' cell for the child's county, provider type, age band and tier on each date a rate changes, and Denver's for an unknown county.
  2. Each care unit's daily rate equals its share of the full-time rate (55%, 100%, 155% or 200%), rounded half up to the cent.
  3. The reimbursement equals the sum of the eligible children's charges, each capped at the child's county rate, and the charges above the rate make up the rest of those charges. The payment equals the reimbursement less the fee, floored at zero, and exceeds neither the sum of the county rates nor the charges less the fee, floored at zero. The capped fee equals the lesser of the fee and the reimbursement, and the payment plus the capped fee equals the reimbursement.
  4. More charges never lower the payment, and a higher fee never raises it.
  5. When every child in a unit qualifies as an eligible child, the providers absorb the year's charges above the county rates, and childcare_expenses comes to the year's capped fees less the after-school charges, floored at zero. childcare_expenses starts from pre_subsidy_childcare_expenses, which leaves out the after-school charges that CCCAP pays.

Tests

  • We add 36 YAML cases: 27 in rates/, 5 in co_ccap_reimbursement.yaml, 3 in co_ccap_charges_above_rate.yaml and 1 in co_ccap_child_in_part_time_care.yaml. We computed each expected value by hand, taking the rates from CDEC's tables and the county plans. Where the cap binds, we updated the expected values in Pay Colorado's child care assistance only for eligible children #10699's co_ccap_subsidy.yaml and in court_supervision.yaml case 5. Charge Colorado families one child care parent fee under section 3.124 #10721's co_ccap_full_time_equivalent_units.yaml cases pass unchanged.
  • test_co_ccap_county_rates_properties.py checks the five invariants against a reference that reads the parameter files and restates the rule in Decimal arithmetic. It checks every cell on each of the five dates a rate changes, in one simulation per date. It also draws mixed households, several to a simulation, across counties (an unknown one included), provider types, ages, daily and weekly hours, days, charges, after-school charges and fees.
  • The property tests read the rates from the parameter files, so two other checks tie those files to CDEC's PDFs. The YAML cases copy their rates from the PDFs by hand. The parser in PolicyEngine/child-care-subsidy-totals reads both state tables and all 158 county plans, and from its output gen_co_rate_params.py writes the three rate files byte for byte.
  • We updated Pay Colorado's child care assistance only for eligible children #10699's test_co_ccap_eligible_children_properties.py to expect the capped charges. It writes Adams County's center rates in by hand.

Impact

Pending: Populace US 2024 runs for 2026 at bcd8c283c1 and this head, and a check of each eligible child's charges against the county rate.

axiom: TheAxiomFoundation/rulespec-us#2073 queued (eligible child, payment, and the fee owed under 3.124(L)); TheAxiomFoundation/rulespec-us#2135 queued (3.130 rates and care units, and the charges providers absorb under 3.128(T))

🤖 Generated with Claude Code

MaxGhenis added a commit that referenced this pull request Nov 8, 2026
The fee's full-time equivalent units now take days of care as the larger
of days a week x 52 / 12 and attending days a month, and a five-day week
when neither is reported, as co_ccap_care_days_per_month in #10723 does.
Counties assess the fee on the authorized schedule (8 CCR 1403-1
3.124(V)), and attending days above it count drop-in days (3.130(F)).

The property test's reference implementation reads days the same way and
draws days a week as well as attending days. New cases cover a month with
drop-in days and a weekly schedule above the attending days. Fee
descriptions now say a child "receives" part-time care.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Nov 9, 2026
#10721)

* Charge Colorado families one CCCAP parent fee under 8 CCR 1403-1 3.124

Compute one household fee from gross countable income: 1% of income plus
14% above the poverty guideline that 3.111(H)(2) and (3) set each
October, $15 for each child in care after the first above it, in whole
dollars, 55% when every child in care is in part-time care, and 20% off
at a top-three provider. Drop the per-child hours multiplier, which gave
a child with no recorded hours a fee of zero.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Add hand-computed cases for Colorado's CCCAP parent fee

Cases cover the guideline Colorado sets each October, the base fee on
gross income, the $15 fee for each additional child above the
guideline, which children count as in care, full-time-equivalent
units, part-time care under sections 3.124(U) and (W), the quality
discount, and the order in which the fee drops its cents.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Test the CCCAP parent fee's invariants and keep fees within a dollar

Property tests check that the fee is never negative and in whole
dollars, that each child in care after the first adds $15 above the
guideline and nothing else, that the 55% rate applies only when every
child in care is part time, and that a provider in the top three
quality levels cuts the fee by 20%. A differential test compares the
model with an exact-decimal implementation of section 3.124 and CDEC's
parent fee tool.

The differential test found that the 0.001 whole-dollar tolerance
overcharged $1 on whole-dollar annual incomes 1,199 more than a
multiple of 1,200 below the guideline: $1,199 a year gives a base fee
of $0.99917. A tolerance of 0.0005 still covers float32 noise (at most
$0.00017 over 1,450 households) and floors those fees correctly.

The source-conflict candidates record the reading of section
3.124(P)(2): 1% of income, as the rule and CDEC's tool for households
above the guideline compute, not 1% of the guideline.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Count Colorado's days of care as the county-rate PR does

The fee's full-time equivalent units now take days of care as the larger
of days a week x 52 / 12 and attending days a month, and a five-day week
when neither is reported, as co_ccap_care_days_per_month in #10723 does.
Counties assess the fee on the authorized schedule (8 CCR 1403-1
3.124(V)), and attending days above it count drop-in days (3.130(F)).

The property test's reference implementation reads days the same way and
draws days a week as well as attending days. New cases cover a month with
drop-in days and a weekly schedule above the attending days. Fee
descriptions now say a child "receives" part-time care.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Answer the caf8fbb review of Colorado's parent fee

Read the fee parameters at the month, so 3.124(Q) starts in August 2028 as
the rule says. Spread weekly hours over the days of care when a family
reports no daily hours, and read after-school care for a child in grade 1
or above as part time. Round income and the guideline to cents and floor
in float64, so $23,999.64 a year gives $19 and an exact $18 fee stays $18.
Narrow invariants 2 and 3 to the households they hold for.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Answer the 26d55ce review of Colorado's parent fee

Weekly hours now spread over the same larger day count that units of
care use. YAML cases pin each side of the 12-hour and 17-hour edges and
the after-school rule's day checks. The arithmetic comment and the test
docstring state what the model and the reference do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 5 commits November 11, 2026 13:27
8 CCR 1403-1 3.132(D) and (E) pay for the care of children under 13, and of
children under 19 who can't care for themselves or who are under court
supervision. co_ccap_subsidy summed every SPM unit member's child care and
after-school charges, a teenager's among them; it now sums the charges of
members who pass co_ccap_child_eligible, as co_ccap_parent_fee already does.

Adds YAML cases at the age boundaries, two Hypothesis properties and a
towncrier fragment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
8 CCR 1403-1 3.125(FFF) has the county pay the lesser of the provider's
private pay rate and the county reimbursement rate, and 3.130 sets those
rates: CDEC's state-established daily rates for licensed centers and homes
by county, age band and quality tier, and each county's rates for qualified
exempt providers, paid by care unit (part time at 55% of full time).
co_ccap_subsidy paid the eligible children's charges in full.

Adds the rate tables effective October 1, 2024 and October 1, 2025, each
county's qualified exempt rates from its rate plans, the care units, and
co_ccap_reimbursement, which caps each eligible child's charges at the
county rate for the child's hours and days. 3.124(L) caps the parent fee
at the reimbursement (co_ccap_capped_parent_fee); the fee's own formula is
unchanged.

Without a schedule the cap reads full-time care five days a week.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add YAML cases, recomputed by hand from CDEC's rate tables and the county
rate plans, for the full-time rate, care units, days of care, age bands,
quality tiers, provider types, the monthly cap and the reimbursement.

Add Hypothesis tests for four invariants:
1. Every cell of every table, on every effective date, matches the
   full-time rate the model reads.
2. Each care unit pays its share of the full-time rate, rounded half up
   to the cent: 55% for part time, twice the rate for two full-time units.
3. The payment equals the eligible children's charges, each capped at the
   county rate, less the fee. So it never exceeds the county rates or the
   charges less the fee, and the capped fee never exceeds the
   reimbursement.
4. More charges never lower the payment, and a higher fee never raises it.

Read Denver's rates for a household with no Colorado county. The tables'
county breakdown fills them with every county in the country at zero, so
such a household read $0; co_ccap_fpg_eligible already falls back to
Denver.

Update #10699's subsidy cases and court supervision case 5 for the cap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each parameter and variable now names the rule PDF once, with every
section and page it relies on in the title or the comment above the
link, as the repo's reference rule asks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
co_ccap_care_unit now reads co_ccap_care_hours_per_day, so weekly hours
stand in for missing daily hours on the rate as they do on the fee.
co_ccap_full_time_equivalent_units multiplies the care unit by the days
of care, and co_ccap_child_in_part_time_care tests the care unit. That
leaves rates/care_unit.yaml as the one table, so the parent fee's copy
goes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
8 CCR 1403-1 3.128(T) bars a provider from charging a CCCAP family more
than the daily reimbursement rate in its fiscal agreement. The model reads
every reported charge as authorized care, so each eligible child's charges
above the county rate now fall to the provider:

- co_ccap_child_charges adds a child's pre-subsidy and after-school charges;
  co_ccap_reimbursement caps them at the county rate, and
  co_ccap_charges_above_rate sums the rest.
- child_care_charges_providers_absorb carries those charges, and
  childcare_expenses subtracts them along with child_care_subsidies, so the
  family's cost for an eligible child's care stays the capped parent fee.

The rate also follows the parent fee for a child in grade 1 or above whose
only reported care comes after school: co_ccap_after_school_care_only gives
that child the part-time unit (3.124(W)). Days of care stop at the days in
the month, full-time-equivalent units round to four decimals before the
13-unit test, and the county comment says when a household without a
county reads Adams County and when Denver.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit to PolicyEngine/child-care-subsidy-totals that referenced this pull request Nov 11, 2026
PolicyEngine/policyengine-us#10723 adds CDEC's state-established licensed
rates and each county's qualified exempt rates. These scripts download the
two state tables and 158 county rate plans that data/co_rates/sources.tsv
lists, check each against its SHA-256 hash, parse them, and compare a
policyengine-us checkout's three rate files with the parsed values.
gen_co_rate_params.py writes those files byte for byte from the parse.

co_rate_cap_check.py now also counts the charges providers absorb above
the county rate, and cc_gap.py records Colorado's low-income child care
expenses credit in its impact arrays.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis force-pushed the co-ccap-county-rates branch from 08f3551 to d7e59b9 Compare November 11, 2026 22:17
@MaxGhenis
MaxGhenis changed the base branch from co-ccap-eligible-children to main November 11, 2026 22:17

This branch has not been deployed

No deployments
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.

1 participant