Skip to content

Implement Washington State Child Care Assistance Program#8208

Open
hua7450 wants to merge 7 commits intoPolicyEngine:mainfrom
hua7450:wa-ccap
Open

Implement Washington State Child Care Assistance Program#8208
hua7450 wants to merge 7 commits intoPolicyEngine:mainfrom
hua7450:wa-ccap

Conversation

@hua7450
Copy link
Copy Markdown
Collaborator

@hua7450 hua7450 commented Apr 30, 2026

Summary

Implements Washington State Working Connections Child Care (WCCC) — the state's CCDF/CCDBG-funded child care subsidy program administered by DCYF (intake by DSHS Child Care Subsidy Contact Center).

Closes #8207

Recent Updates (Review Fixes)

Addresses feedback from /review-program:

Critical

  • Gate SNAP categorical income eligibility on a date-bounded parameter (RCW 43.216.802(5) effective 2024-11-01). Replaced is_snap_eligible with snap_reported > 0 to break a circular dependency through SNAP's dependent-care deduction.
  • Wire wa_child_care_subsidies aggregator into spm_unit_benefits and household_state_benefits (matches VA/SC/CA/CO/NE/DE precedent), and register it in the federal child_care_subsidy_programs aggregator.
  • Document medical incapacity activity waiver per WAC 110-15-0020(2)(b) in wa_wccc_activity_eligible.

Should

  • Add DCYF Licensed Family Home base rate update effective 2025-07-01 (105 cells across 7 regions × 5 age groups × 3 day types).
  • Add EPS_0004 Regional Map reference to all 7 region county-list files.
  • Add DCYF Copay Calculation Table reference to copay/amount.yaml.
  • Tighten wa_wccc_provider_type defined_for to wa_wccc_eligible_child.
  • Make applicant branch explicit in wa_wccc_smi_rate select (no default= for a known category).
  • Citation precision: teen_parent.yaml → RCW 43.216.814(3)(a)(ii); family_home_full_days.yaml → WAC 110-15-0190(4)(a); in_home_relative_full_hours.yaml → WAC 110-15-0190(8)(a).

Tests

  • Added 7 cases to wa_wccc_max_monthly_reimbursement covering HALF_DAY override (center + family home), additional regions (REGION_4 King, REGION_6, SPOKANE), additional age groups (TODDLER, ENHANCED_TODDLER, SCHOOL_AGE, PRESCHOOL), and the 2025-07-01 family-home rate layer.

Regulatory Authority

Program Overview

  • Administration: DCYF Early Learning Division (rules + payments); DSHS Child Care Subsidy Contact Center (intake)
  • Funding: Federal CCDF/CCDBG + state match
  • Authorization period: 12 months (WAC 110-15-0082)

Eligibility

Requirement Source How Modeled
Income at or below 60% SMI (applicants) / 65% SMI (recipients) WAC 110-15-0005(1)(f)(i) wa_wccc_smi_rate selects via is_wccc_enrolled
85% SMI for HGP (homeless) WAC 110-15-0023(2)(b) is_homeless triggers higher SMI rate
85% SMI for parents in HS (no age cap) RCW 43.216.814(1); WAC 110-15-0005(2) head/spouse is_in_k12_school
SNAP recipients auto-income-eligible (eff. 2024-11-01) RCW 43.216.802(5); WAC 110-15-0075(3) wa_wccc_income_eligible checks snap_reported > 0 gated by date-bounded snap_categorical/in_effect parameter
Asset limit $1,000,000 WAC 110-15-0005(1)(d); CCDBG Act of 2014 Federal is_ccdf_asset_eligible (replaces state-specific check)
Child under 13 WAC 110-15-0005(3)(b)(i) wa_wccc_eligible_child (age < 13)
Child under 19 with verified special need WAC 110-15-0005(3)(b)(ii); WAC 110-15-0220(1)(b) wa_wccc_eligible_child extends to age 19 when is_disabled
Child must be a dependent of parent in unit WAC 110-15-0005(1)(a) is_tax_unit_dependent
WA residency WAC 110-15-0005(3)(a) defined_for = StateCode.WA
Approved-activity test (work, school, K-12, disability waiver) WAC 110-15-0005(1)(f), 0020(2)(b), 0040, 0045 wa_wccc_activity_eligible (per-person OR; disability is a waiver per WAC 110-15-0020(2)(b))
Both parents must individually pass activity test WAC 110-15-0020 Sum of head/spouse not individually-eligible == 0
Neither parent nor child citizenship considered RCW 43.216.802(7) No immigration check in formula

Family Share / Copay

Income Tier (% SMI) Monthly Copay
At or below 20% $0 (waived)
Above 20%, at or below 36% $65
Above 36%, at or below 50% $90
Above 50%, at or below 60% $165
Above 60%, at or below 65% (recipients only) $215

Sources: WAC 110-15-0075(2); DCYF Copay Calculation Table. Copay is not prorated for partial-month use (WAC 110-15-0075(4)).

Copay waived for:

  • HGP recipients (homeless) — WAC 110-15-0075(5)(c)(i)
  • Parents in HS — WAC 110-15-0075(5)(a)

Benefit Calculation

benefit = min(
    max(actual_childcare_expenses - copay, 0),
    sum_per_child(max_monthly_reimbursement)
)

Provider rates:

  • Center: 7-region × 4-age × FULL_DAY/HALF_DAY matrix per WAC 110-15-0200 (eff. 7/1/2023). Region overrides for centers only: Clark→R3; Benton/Walla Walla/Whitman→R6.
  • Family home: 7-region × 5-age (incl. ENHANCED_TODDLER 12–17 mo) × FULL_DAY/HALF_DAY/PARTIAL_DAY matrix. Two rate layers:
  • In-home/relative: $4.00/hr/child (was $3.85/hr before 7/1/2024).
  • Day type per WAC 110-15-0190(7): FULL_DAY = ≥5 hr/day, HALF_DAY = <5 hr/day, PARTIAL_DAY = <5 hr/day with before-and-after-school care.
  • Monthly billing units: 23 days (center), 22 days (family home), 230 hours (in-home).

Architecture

  • Federal CCDF reuse: asset eligibility uses the federal is_ccdf_asset_eligible variable (matching the $1M CCDBG ceiling), not a state-specific check.
  • Aggregator pattern: wa_child_care_subsidies aggregates wa_wccc (matches VA/SC/CA/CO/NE/DE precedent) and is registered in both the state benefit list and the federal child_care_subsidy_programs aggregator.
  • Compact payment/ folder: 7 variables total, with single-use rate lookups inlined into wa_wccc_max_monthly_reimbursement. Day-type indirection (FULL_TIME/PART_TIME → FULL_DAY/HALF_DAY) was removed in favor of a single wa_wccc_day_type input that directly encodes WAC 110-15-0190(7)'s per-day care-hour distinction.

Requirements Coverage

35 in-scope requirements implemented (REQ-001/002/005/006/007/008/009/010/011/012/014/017/018/019/020/021/022/024/027/028/029/030/031/032/033/038/040/041/042/043/044/045/046). One in-scope item (REQ-034 16-hr/day cap) is non-binding under simplified billing standards (16 × 30 = 480 > 230 monthly hour cap) and is documented in the Not Modeled section.

Not Modeled

What Source Reason
Apprenticeship 75% SMI (12 mo) WAC 110-15-0005(1)(f)(ii); RCW 43.216.802(3) No PolicyEngine apprenticeship input
ECE workforce 85% SMI WAC 110-15-0005(1)(f)(iii) No PolicyEngine ECE-workforce input
HSE-certificate path (age 21 cap) RCW 43.216.814(2) Only HS path is modeled — no PolicyEngine HSE input
Court-supervision child eligibility (under 19) RCW 43.216.802(2)(a)(ii) No PolicyEngine court-supervision input
Activity hours (110 hr/mo full-time threshold) WAC 110-15-0190(1) We don't track approved-activity hours at the moment
CPS/CWS/family-assessment categorical WAC 110-15-0024(1)(a) No PolicyEngine CPS/CWS-involvement input
Specialty/therapeutic court categorical WAC 110-15-0024(1)(b) No PolicyEngine input
Copay waiver for ECE workforce WAC 110-15-0075(5)(b) Parent eligibility excluded above
Copay waiver for non-HGP categorical (CPS/CWS) WAC 110-15-0075(5)(c)(ii) CPS/CWS excluded above
Mid-period copay no-increase rule WAC 110-15-0085(4) Temporal eligibility-period logic not modeled
Tiered reimbursement bonuses (Early Achievers) WAC 110-15-0210 Defer to v2 (requires quality-rating input)
Infant enhanced rate $300/mo WAC 110-15-0215 Defer to v2
Special needs / registration / field-trip / nonstandard-hours fees WAC 110-15-0215+ Defer to v2
16-hr/day cap (per child per day) WAC 110-15-0190(9) Non-binding given simplified 230-hour/month billing standard (16 × 30 = 480 > 230)
"Unmarried parents with no mutual children = separate households" rule WAC 110-15-0015 SPMUnit aggregation may put them together
Per-day care-hours / before-and-after-school flag for day-type derivation WAC 110-15-0190(7) wa_wccc_day_type defaults to FULL_DAY; user override accepted
SNAP-categorical "eligible for" branch (vs "receiving") RCW 43.216.802(5) Use snap_reported > 0 only — including is_snap_eligible would create a circular dependency through SNAP's dependent-care deduction

Historical Notes

  • 2021 Fair Start for Kids Act (ESHB 1213): planned expansion of income limits from 60% SMI → 75% SMI (2025) → 85% SMI (2027).
  • 2025 c 412 (ESSB 5752) delayed the 75% SMI expansion to 7/1/2029 and the 85% SMI expansion to 7/1/2031. WAC 110-15-0005 still reflects the 60%/65% SMI rule.
  • Copay table (WAC 110-15-0075) updates annually each Oct 1. Current dollar amounts effective 10/1/2025.
  • SNAP automatic income eligibility (RCW 43.216.802(5)) effective 11/1/2024.
  • DCYF Licensed Family Home Base Rate sheet effective 7/1/2025 supersedes the WAC 110-15-0205 (7/1/2023) family-home rate table; both layers are encoded.

Key Implementation Notes

  • Reference implementation: Maine CCAP (policyengine_us/{variables,parameters}/gov/states/me/dhhs/ccap/).
  • Income source list at parameters/.../wccc/sources.yaml; wa_wccc_countable_income.py uses adds = "..." (not inline). TANF excluded from sources to prevent a benefit cycle.
  • Registered in programs.yaml, spm_unit_benefits.py, and household_state_benefits.yaml (via the wa_child_care_subsidies aggregator) per cross-state precedent.

Files

parameters/gov/states/wa/dcyf/wccc/    (~31 parameters)
variables/gov/states/wa/dcyf/wccc/     (~25 variables across copay/, eligibility/, income/, payment/)
tests/policy/baseline/gov/states/wa/dcyf/wccc/  (18 test files, 128 cases)

Verification TODO

  • CI passes
  • Copay amounts in parameters/.../wccc/copay/amount.yaml verified against WAC 110-15-0075(2) and DCYF Copay Calculation Table
  • Provider rate cells in rates/center.yaml (56 cells) and rates/family_home.yaml (105 cells × 2 layers) verified against WAC 110-15-0200(1), 110-15-0205(2), and the DCYF 7/1/2025 LFH rate sheet
  • Region county lists verified against DCYF EPS_0004 regional map (all 39 WA counties mapped exactly once)
  • SNAP categorical-eligibility effective date (11/1/2024) gated via snap_categorical/in_effect.yaml per RCW 43.216.802(5)

Test plan

  • 128 tests pass locally (policyengine-core test policyengine_us/tests/policy/baseline/gov/states/wa/dcyf/wccc/ -c policyengine_us)
  • CI passes

@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 30, 2026

Codecov Report

❌ Patch coverage is 98.82353% with 4 lines in your changes missing coverage. Please review.
✅ Project coverage is 97.17%. Comparing base (d55cd4f) to head (8dec3b0).
⚠️ Report is 56 commits behind head on main.

Files with missing lines Patch % Lines
.../states/wa/dcyf/wccc/copay/wa_wccc_smi_fraction.py 90.00% 1 Missing and 1 partial ⚠️
...ates/wa/dcyf/wccc/eligibility/wa_wccc_smi_limit.py 90.47% 1 Missing and 1 partial ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##              main    #8208      +/-   ##
===========================================
- Coverage   100.00%   97.17%   -2.83%     
===========================================
  Files            2       22      +20     
  Lines           35      354     +319     
  Branches         0        4       +4     
===========================================
+ Hits            35      344     +309     
- Misses           0        8       +8     
- Partials         0        2       +2     
Flag Coverage Δ
unittests 97.17% <98.82%> (-2.83%) ⬇️

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

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

hua7450 and others added 5 commits April 30, 2026 15:08
- HGP "under 85% SMI" boundary: use strict less-than
- HGP path bypasses both asset cap and income tier per WAC 110-15-0023(2)(a)
- Drop teen-parent age cap on K-12 path per RCW 43.216.814
- Rename wa_wccc_categorical_eligible to wa_wccc_hgp_eligible
- SNAP categorical: include is_snap_eligible per RCW 43.216.802(5)
- Backdate eligibility/copay/sources parameters to align with rate parameters
- Fix homeless.yaml effective date to 2023-12-14 (WSR 23-23-082)
- Fix center_full_days.yaml subsection cite to WAC 110-15-0190(3)(b)
- Add wa_wccc, wa_wccc_center_time_category, wa_wccc_family_home_time_category unit tests
- Document copay waivers (5)(b) ECE-workforce and (5)(c)(ii) categorical as unmodeled
- Drop wa_wccc_time_category constant formula (now bare input with default FULL_TIME)
- Subtract child_support_expense from countable income per WAC 110-15-0065

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Reduce payment/ from 12 to 7 variables by consolidating the time category
indirection layer and inlining single-use rate lookups. The deleted
intermediate variables matched the wrapper-variable anti-pattern: each
was used in exactly one place.

Replace wa_wccc_time_category (FULL_TIME/PART_TIME parent activity proxy),
wa_wccc_center_time_category, and wa_wccc_family_home_time_category with a
single wa_wccc_day_type input enum (FULL_DAY / HALF_DAY / PARTIAL_DAY).
The new enum reflects WAC 110-15-0190(7), which defines day types by
per-day care hours — not parent activity hours, which the previous
indirection conflated. PARTIAL_DAY is now reachable for family home
providers (it was unreachable in the old code).

Inline wa_wccc_center_daily_rate, wa_wccc_family_home_daily_rate, and
wa_wccc_in_home_relative_hourly_rate into wa_wccc_max_monthly_reimbursement.
Update center.yaml and family_home.yaml rate parameter breakdowns to use
wa_wccc_day_type. Center rates have no PARTIAL_DAY tier per WAC
110-15-0200; PARTIAL_DAY entries mirror HALF_DAY for centers.

Tests: 121 pass after refactor. Six unit-test files for the deleted
wrapper variables removed alongside them. Two new cases added to
wa_wccc_max_monthly_reimbursement.yaml exercising PARTIAL_DAY for family
home and the HALF_DAY fallback for centers.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fixes from /review-program audit:

Critical:
- Gate SNAP categorical income eligibility on a date-bounded parameter
  (RCW 43.216.802(5) effective 2024-11-01). Use snap_reported instead of
  is_snap_eligible to avoid a circular dependency through SNAP's
  dependent-care deduction.
- Wire wa_child_care_subsidies aggregator into spm_unit_benefits and
  household_state_benefits (matches VA/SC/CA/CO/NE/DE precedent), and
  register it in the federal child_care_subsidy_programs aggregator.

Should:
- Add DCYF Licensed Family Home base rate update effective 2025-07-01
  (105 cells across 7 regions x 5 age groups x 3 day types).
- Add EPS_0004 Regional Map reference to all 7 region county-list files.
- Add DCYF Copay Calculation Table reference to copay/amount.yaml.
- Tighten wa_wccc_provider_type defined_for to wa_wccc_eligible_child.
- Make applicant branch explicit in wa_wccc_smi_rate select.
- Citation precision: teen_parent.yaml -> RCW 43.216.814(3)(a)(ii);
  family_home_full_days.yaml -> WAC 110-15-0190(4)(a);
  in_home_relative_full_hours.yaml -> WAC 110-15-0190(8)(a).
- Drop redundant is_in_k12_school from activity test (already covered
  by is_full_time_student).
- Document medical incapacity activity waiver per WAC 110-15-0020(2)(b)
  in wa_wccc_activity_eligible.

Tests:
- Add 7 cases to wa_wccc_max_monthly_reimbursement covering HALF_DAY
  override (center + family home), additional regions (REGION_4 King,
  REGION_6, SPOKANE), additional age groups (TODDLER, ENHANCED_TODDLER,
  SCHOOL_AGE, PRESCHOOL), and the 2025-07-01 family-home rate layer.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Three review agents flagged the missing period metadata field on the
new in_effect.yaml parameter. Adds period: month per the parameter-patterns
convention.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hua7450 hua7450 marked this pull request as ready for review May 4, 2026 20:03
@hua7450 hua7450 requested a review from PavelMakarchuk May 4, 2026 20:03
Copy link
Copy Markdown
Collaborator

@PavelMakarchuk PavelMakarchuk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Program Review — PR #8208: Washington Working Connections Child Care (WCCC)

Round 2 verification. Round-1 fixes applied per commit (described in PR body). Code is sound; documents verified against DCYF PDFs.

Source Documents

  • Chapter 110-15 WAC (91 pp PDF) — administrative rules
  • DCYF Copay Calculation Table effective 10/1/2025 (PDF, 2 pp)
  • DCYF Licensed Family Home (LFH) Base Rates effective 7/1/2025 (PDF, 1 p)
  • DCYF Regional Map EPS_0004 (PDF, 2 pp)
  • RCW 43.216.802, .808, .814, .828, .135 (statutory authority)

Critical (Must Fix)

None.

Should Address

  1. Missing 75% mid-period exit threshold. DCYF Copay Table footnote 2 indicates 75% SMI is the mid-eligibility-period case-termination threshold, distinct from the 65% reapplication ceiling already modeled. No variable currently enforces this mid-period check. Real modeling gap — recommend follow-up issue. Not a blocker for this PR.

  2. Activity test missing K-12 parent path. is_in_k12_school is used in SMI-rate logic but is absent from wa_wccc_activity_eligible.py's individually_eligible disjunction. A teen K-12 parent without earnings, full-time-student status, or disability would fail the activity test even though K-12 attendance qualifies under WAC 110-15-0040 for HS-path parents (RCW 43.216.814(1)).

  3. Activity test self-employment edge case. has_earnings = earned_income > 0 would fail a parent with negative net self-employment income. Consider (employment_income > 0) | (self_employment_income != 0) to recognize SE activity regardless of profitability.

  4. Reference anchors. DCYF multi-page PDFs (Copay Table 2 pp, EPS_0004 2 pp) lack #page=N anchors in variable references — minor reference-quality nit.

  5. Test gaps (9 minor):

    • SNAP categorical 2024-11-01 effective-date transition boundary
    • In-home rate $3.85 → $4.00 transition (only post-rate is covered)
    • wa_wccc_day_type default-branch behavior
    • wa_child_care_subsidies aggregator integration test
    • 65 / 75 / 85% SMI copay tier boundary cases
    • Center max-reimbursement matrix for REGION_2, REGION_5, REGION_7
    • Asset limit exactly at $1M boundary (only $1.5M tested)
    • Out-of-state end-to-end (defined_for = WA confirmation)
    • Fractional age boundaries 12.99 / 13.01

Suggestions

  1. Copay tier epsilon. Use of 0.2001 creates a sub-percentile gap between tiers — document the choice or switch to strict > semantics for cleaner boundaries.
  2. is_wccc_enrolled.defined_for = StateCode.WA for consistency with sibling WA-scoped variables.
  3. copay/amount.yaml description could be tightened to the standard PolicyEngine parameter description template.
  4. CI codecov soft fails are non-blocking; likely flake/threshold noise.

PDF Audit Summary

Document Match
EPS_0004 Regions 39/39 counties + 3 center overrides ✓
LFH 7/1/2025 Rates 105/105 cells (both age layers intact) ✓
DCYF Copay Table All values match; 1 false-positive flag rejected

The single copay PDF mismatch flagged by the audit agent (claimed 75% factor) was rejected via code-path verification: the agent conflated WAC subsections. The 0.65 factor in the code is correct per WAC 110-15-0005(1)(f)(i)(B); the 75% figure applies only to the apprenticeship-program subsection.

Validation Summary

Check Result
Regulatory Accuracy APPROVE (5 should-consider)
Reference Quality APPROVE (1 minor)
Code Patterns APPROVE
Test Coverage APPROVE (9 should-consider)
PDF Audit All 3 PDFs match repo
CI 2 codecov soft fails; remaining 13 Full Suite checks running

Review Severity: COMMENT (close to APPROVE)

Rationale: All correctness items verified. Round-1 fixes landed correctly. Remaining items are minor code-quality refinements (activity-test semantics) and test-coverage gaps. The largest substantive finding is the missing 75% mid-period exit threshold (separate variable needed); this is a real but non-blocking modeling gap suitable for a follow-up issue.

Next Steps

Optional follow-ups:

  • Address activity-test K-12 / SE-income concerns in a small follow-up commit.
  • Fill the 9 enumerated test gaps.
  • Open a separate issue for the 75% mid-period exit threshold variable.

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 Washington State Child Care Assistance Program (Working Connections Child Care)

2 participants