Skip to content

Add Tennessee Child Care Payment Assistance (CCAP / Smart Steps)#9040

Open
hua7450 wants to merge 9 commits into
PolicyEngine:mainfrom
hua7450:tn-ccap
Open

Add Tennessee Child Care Payment Assistance (CCAP / Smart Steps)#9040
hua7450 wants to merge 9 commits into
PolicyEngine:mainfrom
hua7450:tn-ccap

Conversation

@hua7450

@hua7450 hua7450 commented Jul 15, 2026

Copy link
Copy Markdown
Collaborator

Summary

Implements Tennessee's Child Care Certificate Program (Child Care Payment Assistance, branded Smart Steps) in PolicyEngine. The program is Tennessee's CCDF-funded child care subsidy, administered by the Tennessee Department of Human Services (TDHS). This PR adds the full eligibility, income-limit, copay, and provider-reimbursement pipeline, wired into the federal child_care_subsidies aggregator via a new tn_child_care_subsidies program.

Closes #9039

Review fixes

This branch also addresses the Tennessee CCAP review findings:

  • Adds a case-by-case protective-services waiver for the income and activity tests.
  • Limits countable income to gross wages or salary, matching State Plan §2.2.4(c).
  • Requires evidence of employment so the 40-hour default cannot qualify an unemployed parent.
  • Applies the two-parent disabled-parent exception using the general is_disabled input. The narrower “unable to meet the child's care needs” condition is not separately modeled.
  • Prevents Tennessee benefits before reimbursement rates took effect on October 1, 2024.
  • Uses chart-compatible whole-dollar QRIS rates for licensed providers and does not apply QRIS bonuses to authorized providers.
  • Defers the court-supervision age extension until a general is_under_court_supervision input is available; tracked in Add a general court-supervision input variable #9055.

Regulatory Authority

Eligibility

Test Rule Source How modeled
Categorical / income pathway Smart Steps working or full-time post-secondary; income ≤ 85% SMI (initial). Enrolled families qualify to 100% SMI from 10/1/2025 (Smart Steps Plus); 85% before that. State Plan §2.3.1e (p.36); copay charts tn_ccap_income_eligible with initial/enrolled SMI-rate params; tn_ccap_enrolled bare input distinguishes applicants from redetermination
Families First (TANF) categorical Guaranteed subsidy while receiving Families First State Plan §2.3.1e (p.36) is_tanf_enrolled bypass in tn_ccap_eligible (breaks the CCAP↔TANF cycle)
Child age Under 13 (through age 12); disabled children to under 19. The court-supervision extension is deferred pending a general input. State Plan §2.2.1 (p.23) child_age_limit (13) and special_needs_age_limit (19) params in tn_ccap_eligible_child; court supervision tracked in #9055
Activity Employed avg ≥ 30 hrs/week OR full-time post-secondary; in a two-parent household with one disabled parent, the other parent must work ≥ 30 hrs/week State Plan §2.2.2 (p.26) tn_ccap_activity_eligible requires positive employment evidence plus hours, accepts full-time study, and uses is_disabled for the two-parent exception
At least one eligible child SPM unit must contain ≥ 1 eligible child in care general tn_ccap_eligible gates on add(..., ["tn_ccap_eligible_child"]) > 0
Immigration Child must be a citizen or qualified noncitizen federal CCDF reuses is_ccdf_immigration_eligible_child
Assets Family assets ≤ $1,000,000 State Plan §2.2.6 (p.32) reuses is_ccdf_asset_eligible

Income Limits (SMI-based)

The published dollar bands are not hardcoded. We verified that every band in both copay charts equals the federal smi() value × rate ÷ 12 exactly, so income limits are computed from PolicyEngine's existing gov.hhs.smi infrastructure with FFY Oct-1 pinning (the NJ CCAP pattern: month ≥ 10 → {year}-10-01, else {year-1}-10-01).

  • June 2024 chart (FFY2024 SMI, TN amount = 90,197): HH4 100% SMI monthly = 90,197 / 12 = $7,516.42; × 0.85 = $6,388.95 (chart 85% HH4); × 0.60 = $4,509.85 (chart 60% HH4). Exact match.
  • Oct 2025 chart (FFY2026 SMI, TN amount = 102,735): HH4 100% SMI monthly = 102,735 / 12 = $8,561.25 (chart 100% band top); × 0.85 = $7,277.63; × 0.60 = $5,136.75. Exact match.

The smi() size adjustment for HH4 is 0.52 + 0.16 × 3 = 1.00, so 4-person SMI equals the raw TN amount. We parameterize only the rate (initial = 0.85; enrolled = 0.85 → 1.00 @ 2025-10-01), never the dollar tables.

Copay

Copay follows the chart's exact weekly double-floor formula rather than a simplified flat 5% (the user chose full fidelity, and the adjudication is that the chart's worked example — not the chart's prose "5% of income" — governs):

  1. Monthly copay = floor(monthly countable gross income × 0.05)
  2. Weekly copay = floor(monthly copay ÷ 4.3)
  3. Split equally among all children in care; part-time care (≤ 19 hrs/week) copay = half.

The chart's worked example reproduces exactly: $1,895 × 0.05 = $94.75 → floor $94 → ÷ 4.3 = $21.86 → floor $21/week → ÷ 2 children = $10.50/child. The 4.3 divisor is the exact regulatory factor stored in copay/weeks_per_month.yaml (not WEEKS_IN_YEAR / MONTHS_IN_YEAR = 4.333…).

  • Rate: 5% of monthly countable gross income (copay/rate.yaml), below the federal 7% ceiling (which never binds).
  • Pre-10/1/2025 FPL waiver: copay waived at or below 150% FPL; families with no income pay nothing. copay/fpl_waiver_threshold.yaml = 1.5 → 0 @ 2025-10-01 (waiver ended 9/30/2025; 5% now applies to all families).
  • Waived categories: Families First (is_tanf_enrolled) and protective-services / DCS-referred children (receives_or_needs_protective_services). Head Start/EHS and Mental Health & Substance Abuse referrals are not modeled (no input).

Provider Reimbursement Rates

Per-child max weekly benefit starts with the charted Base State Rate[provider type × county tier × age category]. Licensed-provider QRIS rates are reproduced as whole dollars using half-up rounding before applicable differentials; authorized providers receive no QRIS bonus. Part-time is ½ the full-time rate rounded up (np.ceil). The provider is paid the lesser of its charge and this state rate.

Additive (multiplicative-on-top) stacking — verified. The +15% differentials are applied on top of the base state-rate rows, not baked into them:

  • Footnote wording (identical on both charts): "a 15% differential above the current reimbursement rates will be provided" for infants (and separately for disability/special-needs). "Above … will be provided" = additive.
  • Decisive proof: the Center / Top-Tier / Toddler State Rate is $240 on both the 10/1/2024 chart (toddler differential active) and the 1/1/2026 chart (toddler differential eliminated 10/1/2025). Had the +15% been baked in, eliminating it would have dropped the base to ~$209 — it did not move, proving the base rows exclude the differential.
  • QRIS columns confirm the base × (1 + bonus) structure, with licensed-provider results rounded half-up to the charted whole dollars: $240 × 1.05 = $252, × 1.10 = $264 (2026 era); × 1.15 = $276, × 1.20 = $288 (2024 era).

Era-dependent multipliers:

  • QRIS bonus: +15% (80-89) / +20% (90-100) in the Oct 2024 era → +5% / +10% from 1/1/2026 (rates/qris_bonus.yaml).
  • Infant differential +15% and disability differential +15%: kept in both eras.
  • Toddler differential +15% → 0 @ 2025-10-01 (rates/toddler_differential.yaml).

County Tiers

Weekly rates are keyed by county tier (Top Tier vs Lower Tier). The rate-chart footnote lists (the operational source of truth) govern, not the Market Rate Survey (MRS) ranking:

  • Oct 1 2024 era: 27 Top Tier counties (chart footnote), including Gibson and Dyer.
  • Jan 1 2026 era: 26 Top Tier counties, including Gibson; Dyer dropped to Lower. Everything else defaults to Lower Tier.

Only Dyer moved between eras. Tiers are encoded deterministically from the TN county enum (county_tier/top_tier_counties.yaml, era-dated), defaulting unlisted counties to Lower.

Gibson discrepancy resolution: Gibson appears on both charts' Top Tier footnote but is absent from the MRS top-20 ranking in both FY24 and FY25 (it shows up only in the MRS county fee tables, ~49k population — far too small to make either top-20 list). Its Top Tier status therefore comes from the employer-petition mechanism (MRS footnote 3: a county gains Top Tier when an employer creates 50+ new child-care slots, majority ages 0–3). Because the operational chart footnote governs reimbursement, Gibson is modeled as Top Tier in both eras. (The FY25 MRS prose also self-contradicts — it says "26 counties" but enumerates 25; the 26th is a stale FY24 copy-paste, and the extra chart name is Gibson, not a phantom.)

Requirements Coverage

The table below maps the implemented requirements. Deferred or approximated pathways are listed under Not Modeled.

REQ Description Param Variable Test
001 Smart Steps working/post-secondary, ≤85% SMI income/smi_rate/initial tn_ccap_eligible, tn_ccap_income_eligible, tn_ccap_activity_eligible eligibility/*
002 Families First categorical tn_ccap_eligible (is_tanf_enrolled) tn_ccap_eligible, integration
006 ≥1 eligible child in care tn_ccap_eligible tn_ccap_eligible
007 Child age < 13 eligibility/child_age_limit tn_ccap_eligible_child tn_ccap_eligible_child
008 Disabled-child age < 19; court-supervision pathway deferred eligibility/special_needs_age_limit tn_ccap_eligible_child tn_ccap_eligible_child
009 Countable gross wages or salary income/countable_income/sources tn_ccap_countable_income tn_ccap_countable_income
010 Initial ceiling 85% SMI income/smi_rate/initial tn_ccap_income_eligible tn_ccap_income_eligible
011 Enrolled ceiling 100% SMI from 10/1/2025 income/smi_rate/enrolled tn_ccap_income_eligible tn_ccap_income_eligible
012 Enrolled ceiling 85% SMI before 10/1/2025 income/smi_rate/enrolled tn_ccap_income_eligible tn_ccap_income_eligible
013 SMI via federal smi() + Oct-1 pin tn_ccap_smi tn_ccap_smi
015 Asset limit $1M tn_ccap_eligible (is_ccdf_asset_eligible) tn_ccap_eligible
016 Immigration tn_ccap_eligible_child (is_ccdf_immigration_eligible_child) tn_ccap_eligible_child
017 Activity ≥ 30 hrs/wk or FT student activity/weekly_hours tn_ccap_activity_eligible tn_ccap_activity_eligible
018 Two-parent: both parents tn_ccap_activity_eligible tn_ccap_activity_eligible
021 Copay 5% of gross copay/rate tn_ccap_copay tn_ccap_copay
022 Pre-10/1/2025 waiver ≤150% FPL copay/fpl_waiver_threshold tn_ccap_copay tn_ccap_copay
023 From 10/1/2025 no FPL waiver copay/fpl_waiver_threshold tn_ccap_copay tn_ccap_copay
024 Part-time copay = half; FT ≥ 20 hrs copay/part_time_share, time/full_time_threshold tn_ccap_part_time, tn_ccap_copay tn_ccap_part_time, tn_ccap_copay
025 Weekly double-floor ÷ 4.3, per-child split copay/weeks_per_month tn_ccap_copay tn_ccap_copay
026 Federal 7% ceiling; TN uses 5% copay/rate tn_ccap_copay (implicit)
027 Waived categories tn_ccap_copay tn_ccap_copay
028 Provider type rates/{child_care_center,group_home,family_home,authorized} tn_ccap_provider_type tn_ccap_max_weekly_benefit
029 Age category (School In) age_category/{infant,toddler}_max_months tn_ccap_age_category tn_ccap_age_category
030 County tier county_tier/top_tier_counties tn_ccap_county_tier tn_ccap_county_tier
031 QRIS tier rates/qris_bonus tn_ccap_qris_tier tn_ccap_max_weekly_benefit
032 QRIS bonus +15/20% → +5/10% @1/1/2026 rates/qris_bonus tn_ccap_max_weekly_benefit tn_ccap_max_weekly_benefit
033 Part-time rate ½, rounded up rates/part_time_share tn_ccap_max_weekly_benefit tn_ccap_max_weekly_benefit
034 Infant differential +15% rates/infant_differential tn_ccap_max_weekly_benefit tn_ccap_max_weekly_benefit
035 Disability differential +15% rates/disability_differential tn_ccap_max_weekly_benefit tn_ccap_max_weekly_benefit
036 Toddler differential eliminated 10/1/2025 (partial) rates/toddler_differential tn_ccap_max_weekly_benefit tn_ccap_max_weekly_benefit
037 Pay lesser of charge and rate tn_ccap tn_ccap, integration
038 Per-child max weekly benefit (rates) tn_ccap_max_weekly_benefit tn_ccap_max_weekly_benefit
039 Benefit = min(expenses, annualized) − copay tn_ccap tn_ccap, integration
041 Register tn_child_care_subsidies child_care_subsidy_programs.yaml, programs.yaml tn_child_care_subsidies tn_child_care_subsidies

Not Modeled

What Source Why excluded
Court-supervised child age extension State Plan §2.2.1(c) Awaiting a general cross-program is_under_court_supervision input; tracked in #9055
Disabled parent's inability to meet child-care needs State Plan §2.2.2 is_disabled is used as a proxy; inability to care is not separately modeled
Transitional Child Care (18-mo post-TANF, ≤60% SMI) T.C.A. §71-3-104; State Plan §2.3.1e No post-TANF-transition input flag
Child-only guardians of a TANF relative child (≤60% SMI) 1240-01-54-.01 No guardian input flag
Teen parents in middle/high school (≤85% SMI) 1240-01-54-.01 No teen-parent-in-school input flag
Seasonal earnings-fluctuation continuity State Plan §2.2.5 Not simulatable
Graduate 6/8 study-hour rules State Plan §2.2.2 Beyond available inputs
Part-year / 10-month worker off-month eligibility State Plan §2.2.2 Not simulatable
Funding-availability waitlist (from 8/26/2025) FAQ Funding-driven, not rule-based
School Out (summer) rates for school-age children rate chart No school-calendar input; default to School In
Desert/distressed-county +15% and non-traditional-hours +15% differentials FAQ; Oct 2024 chart No distressed-county or care-schedule-hours input; both sunset 10/1/2025 (only affect the 10/2024–9/2025 window). This is the partial portion of REQ-036 — the toddler +15% elimination IS modeled.

Historical Notes

Four effective-date eras are represented and deliberately not collapsed:

  • 6/1/2024 — income-limit / copay chart era (85% SMI ceiling, 150% FPL copay waiver, 60/85 SMI copay bands). The top-level benefit remains zero until reimbursement rates begin on 10/1/2024. Source: June 2024 Income & Co-Pay Chart.
  • 10/1/2024 — base reimbursement-rate chart + FY24 county list (27 Top Tier incl. Dyer); QRIS +15%/+20%; toddler / desert-distressed / non-traditional-hours differentials all active. Source: Oct 2024 Rate Chart, FY24 MRS.
  • 10/1/2025 — copay 150% FPL waiver removed (5% for all); Smart Steps Plus adds the 100% SMI enrolled ceiling; toddler / desert-distressed / non-traditional-hours differentials eliminated. Sources: Oct 2025 Income & Co-Pay Chart, Funding FAQ.
  • 1/1/2026 — QRIS bonus reduced to +5%/+10%; FY25 county list (26 Top Tier, Dyer dropped). Sources: Jan 2026 Rate Chart, FY25 MRS.

For Reviewer Confirmation

Files Added

55 new files (24 parameters, 17 variables, 14 tests), plus 2 registry edits and a changelog fragment.

Parameters (policyengine_us/parameters/gov/states/tn/dhs/ccap/):

activity/weekly_hours.yaml
in_effect.yaml
age_category/infant_max_months.yaml
age_category/toddler_max_months.yaml
copay/fpl_waiver_threshold.yaml
copay/part_time_share.yaml
copay/rate.yaml
copay/weeks_per_month.yaml
county_tier/top_tier_counties.yaml
eligibility/child_age_limit.yaml
eligibility/special_needs_age_limit.yaml
income/countable_income/sources.yaml
income/smi_rate/enrolled.yaml
income/smi_rate/initial.yaml
rates/authorized.yaml
rates/child_care_center.yaml
rates/disability_differential.yaml
rates/family_home.yaml
rates/group_home.yaml
rates/infant_differential.yaml
rates/part_time_share.yaml
rates/qris_bonus.yaml
rates/toddler_differential.yaml
time/full_time_threshold.yaml

Variables (policyengine_us/variables/gov/states/tn/dhs/ccap/):

tn_ccap.py
tn_child_care_subsidies.py
tn_ccap_protective_services_waiver.py
tn_ccap_countable_income.py
tn_ccap_smi.py
tn_ccap_enrolled.py
tn_ccap_provider_type.py
tn_ccap_qris_tier.py
tn_ccap_county_tier.py
tn_ccap_age_category.py
tn_ccap_part_time.py
eligibility/tn_ccap_eligible.py
eligibility/tn_ccap_eligible_child.py
eligibility/tn_ccap_income_eligible.py
eligibility/tn_ccap_activity_eligible.py
copay/tn_ccap_copay.py
payment/tn_ccap_max_weekly_benefit.py

Tests (policyengine_us/tests/policy/baseline/gov/states/tn/dhs/ccap/, 130 cases):

integration.yaml                              (8)
tn_ccap.yaml                                  (8)
tn_ccap_age_category.yaml                     (11)
tn_ccap_countable_income.yaml                 (4)
tn_ccap_county_tier.yaml                      (7)
tn_ccap_part_time.yaml                        (5)
tn_ccap_smi.yaml                              (6)
tn_child_care_subsidies.yaml                  (3)
copay/tn_ccap_copay.yaml                      (16)
eligibility/tn_ccap_activity_eligible.yaml    (12)
eligibility/tn_ccap_eligible.yaml             (11)
eligibility/tn_ccap_eligible_child.yaml       (8)
eligibility/tn_ccap_income_eligible.yaml      (11)
payment/tn_ccap_max_weekly_benefit.yaml       (20)

Registry / changelog:

policyengine_us/parameters/gov/hhs/ccdf/child_care_subsidy_programs.yaml   (added tn_child_care_subsidies)
policyengine_us/programs.yaml                                              (TN CCAP entry under CCDF state_implementations)
changelog.d/tn-ccap.added.md

Test plan

  • 130 tests pass across 14 test files (policyengine_us/tests/policy/baseline/gov/states/tn/dhs/ccap)
  • Ruff format and lint pass
  • Parameter/schema checks pass (7 tests)
  • Microsimulation checks pass (6 tests)
  • Remote CI passes

hua7450 and others added 9 commits July 15, 2026 12:08
Initial scaffold for TN DHS Child Care Payment Assistance (Smart Steps /
Child Care Certificate Program). Adds changelog fragment; implementation
of parameters, variables, and tests to follow under gov/states/tn/dhs/ccap.

Closes PolicyEngine#9039

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Age-scope part-time rate halving to Infant/Toddler/Preschool per chart note
- Add Head Start/Early Head Start copay waiver (State Plan Sec. 3.3.1.v)
- Fix countable income sources citation; citation precision fixes
- Add guard and boundary test cases (121 total, all passing)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ay reference tuple

- sources.yaml: State Plan section label 2.3.1(c) -> 2.2.4(c); TAC ref -> 1240-1-50-.10 (Definition of Income) #page=9
- tn_ccap_copay.py: reference tuple now covers 5% rate (p.46), part-time share (p.48), waivers (p.49)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rates

- Delete lessons/agent-lessons.md (internal agent-workflow file, not model code)
- Note in all four rate parameter files that SCHOOL_OUT rates are transcribed
  but unreachable: no school-calendar input exists, so tn_ccap_age_category
  assigns school-age children SCHOOL_IN year-round

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
State Plan §2.2.6(b) (page 32): protective-services families are not
evaluated for income or assets. The eligibility formula previously
applied the CCDF asset limit unconditionally.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@hua7450
hua7450 marked this pull request as ready for review July 18, 2026 03:07
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 Tennessee Child Care Payment Assistance (CCAP / Smart Steps)

1 participant