From c72951a27ac8ae7b149884752e500f0657cc0b39 Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 12 Mar 2026 12:57:22 -0400 Subject: [PATCH 1/5] Add federal CCDF infrastructure for scaling child care subsidies to all states Create shared federal-level variables and parameters to avoid duplicating identical logic across state CCAP implementations. Closes #7764. Co-Authored-By: Claude Opus 4.6 --- .../federal-ccdf-infrastructure.added.md | 1 + .../ccdf/qualified_immigration_statuses.yaml | 21 +++++ .../is_ccdf_immigration_eligible_child.yaml | 76 +++++++++++++++++++ .../gov/hhs/ccdf/child_care_subsidies.py | 19 +++++ .../is_ccdf_immigration_eligible_child.py | 21 +++++ .../expense/childcare/childcare_expenses.py | 8 +- 6 files changed, 139 insertions(+), 7 deletions(-) create mode 100644 changelog.d/federal-ccdf-infrastructure.added.md create mode 100644 policyengine_us/parameters/gov/hhs/ccdf/qualified_immigration_statuses.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/hhs/ccdf/is_ccdf_immigration_eligible_child.yaml create mode 100644 policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py create mode 100644 policyengine_us/variables/gov/hhs/ccdf/is_ccdf_immigration_eligible_child.py diff --git a/changelog.d/federal-ccdf-infrastructure.added.md b/changelog.d/federal-ccdf-infrastructure.added.md new file mode 100644 index 00000000000..152abfd956c --- /dev/null +++ b/changelog.d/federal-ccdf-infrastructure.added.md @@ -0,0 +1 @@ +Add federal CCDF immigration eligibility variable and child care subsidies aggregator. diff --git a/policyengine_us/parameters/gov/hhs/ccdf/qualified_immigration_statuses.yaml b/policyengine_us/parameters/gov/hhs/ccdf/qualified_immigration_statuses.yaml new file mode 100644 index 00000000000..886a9adc270 --- /dev/null +++ b/policyengine_us/parameters/gov/hhs/ccdf/qualified_immigration_statuses.yaml @@ -0,0 +1,21 @@ +description: The United States limits the Child Care and Development Fund to children of these immigration statuses. +values: + 2014-11-19: + - CITIZEN + - LEGAL_PERMANENT_RESIDENT + - REFUGEE + - ASYLEE + - DEPORTATION_WITHHELD + - CUBAN_HAITIAN_ENTRANT + - CONDITIONAL_ENTRANT + - PAROLED_ONE_YEAR + +metadata: + unit: list + period: year + label: CCDF qualified immigration statuses + reference: + - title: 8 USC 1641 - Definitions (qualified aliens) + href: https://www.law.cornell.edu/uscode/text/8/1641 + - title: 45 CFR 98.20(c) - A Lead Agency shall not prohibit eligibility based on a child's citizenship + href: https://www.law.cornell.edu/cfr/text/45/section-98.20#c diff --git a/policyengine_us/tests/policy/baseline/gov/hhs/ccdf/is_ccdf_immigration_eligible_child.yaml b/policyengine_us/tests/policy/baseline/gov/hhs/ccdf/is_ccdf_immigration_eligible_child.yaml new file mode 100644 index 00000000000..a0010a8ec28 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/hhs/ccdf/is_ccdf_immigration_eligible_child.yaml @@ -0,0 +1,76 @@ +- name: Case 1, citizen child. + period: 2024 + input: + immigration_status: CITIZEN + output: + is_ccdf_immigration_eligible_child: true + +- name: Case 2, legal permanent resident child. + period: 2024 + input: + immigration_status: LEGAL_PERMANENT_RESIDENT + output: + is_ccdf_immigration_eligible_child: true + +- name: Case 3, refugee child. + period: 2024 + input: + immigration_status: REFUGEE + output: + is_ccdf_immigration_eligible_child: true + +- name: Case 4, asylee child. + period: 2024 + input: + immigration_status: ASYLEE + output: + is_ccdf_immigration_eligible_child: true + +- name: Case 5, deportation withheld child. + period: 2024 + input: + immigration_status: DEPORTATION_WITHHELD + output: + is_ccdf_immigration_eligible_child: true + +- name: Case 6, Cuban or Haitian entrant child. + period: 2024 + input: + immigration_status: CUBAN_HAITIAN_ENTRANT + output: + is_ccdf_immigration_eligible_child: true + +- name: Case 7, conditional entrant child. + period: 2024 + input: + immigration_status: CONDITIONAL_ENTRANT + output: + is_ccdf_immigration_eligible_child: true + +- name: Case 8, paroled for at least one year child. + period: 2024 + input: + immigration_status: PAROLED_ONE_YEAR + output: + is_ccdf_immigration_eligible_child: true + +- name: Case 9, undocumented child. + period: 2024 + input: + immigration_status: UNDOCUMENTED + output: + is_ccdf_immigration_eligible_child: false + +- name: Case 10, DACA child. + period: 2024 + input: + immigration_status: DACA + output: + is_ccdf_immigration_eligible_child: false + +- name: Case 11, TPS child. + period: 2024 + input: + immigration_status: TPS + output: + is_ccdf_immigration_eligible_child: false diff --git a/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py b/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py new file mode 100644 index 00000000000..04d58364017 --- /dev/null +++ b/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py @@ -0,0 +1,19 @@ +from policyengine_us.model_api import * + +# All implemented state child care subsidy programs. +STATE_CHILD_CARE_SUBSIDY_VARIABLES = [ + "ca_child_care_subsidies", + "co_child_care_subsidies", + "ma_child_care_subsidies", + "ne_child_care_subsidies", +] + + +class child_care_subsidies(Variable): + value_type = float + entity = SPMUnit + definition_period = YEAR + label = "Child care subsidies" + unit = USD + + adds = STATE_CHILD_CARE_SUBSIDY_VARIABLES diff --git a/policyengine_us/variables/gov/hhs/ccdf/is_ccdf_immigration_eligible_child.py b/policyengine_us/variables/gov/hhs/ccdf/is_ccdf_immigration_eligible_child.py new file mode 100644 index 00000000000..feca827a258 --- /dev/null +++ b/policyengine_us/variables/gov/hhs/ccdf/is_ccdf_immigration_eligible_child.py @@ -0,0 +1,21 @@ +from policyengine_us.model_api import * + + +class is_ccdf_immigration_eligible_child(Variable): + value_type = bool + entity = Person + definition_period = YEAR + label = "Immigration eligibility for CCDF" + reference = ( + "https://www.law.cornell.edu/uscode/text/8/1641", + "https://www.law.cornell.edu/cfr/text/45/section-98.20#c", + ) + + def formula(person, period, parameters): + p = parameters(period).gov.hhs.ccdf + immigration_status = person("immigration_status", period) + immigration_status_str = immigration_status.decode_to_str() + return np.isin( + immigration_status_str, + p.qualified_immigration_statuses, + ) diff --git a/policyengine_us/variables/household/expense/childcare/childcare_expenses.py b/policyengine_us/variables/household/expense/childcare/childcare_expenses.py index d0771598c7d..e668a95657f 100644 --- a/policyengine_us/variables/household/expense/childcare/childcare_expenses.py +++ b/policyengine_us/variables/household/expense/childcare/childcare_expenses.py @@ -12,11 +12,5 @@ def formula(spm_unit, period, parameters): pre_subsidy_childcare_expenses = add( spm_unit, period, ["pre_subsidy_childcare_expenses"] ) - # States where we model childcare subsidies. - STATES_WITH_CHILD_CARE_SUBSIDIES = ["CA", "CO", "NE", "MA"] - subsidy_variables = [ - i.lower() + "_child_care_subsidies" - for i in STATES_WITH_CHILD_CARE_SUBSIDIES - ] - subsidies = add(spm_unit, period, subsidy_variables) + subsidies = spm_unit("child_care_subsidies", period) return max_(pre_subsidy_childcare_expenses - subsidies, 0) From 9ff872109714fe7dbfcc7e5642dd8b428ff49118 Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 12 Mar 2026 13:13:40 -0400 Subject: [PATCH 2/5] Reuse existing federal immigration parameter, fix reference link, add TX CCS - Remove duplicate qualified_immigration_statuses.yaml parameter - Reference gov/dhs/immigration/qualified_noncitizen_status instead - Fix invalid Cornell LII link for 45 CFR 98.20 - Add TX CCS to child care subsidies aggregator Co-Authored-By: Claude Opus 4.6 --- .../ccdf/qualified_immigration_statuses.yaml | 21 ------------------- .../gov/hhs/ccdf/child_care_subsidies.py | 9 ++++---- .../is_ccdf_immigration_eligible_child.py | 10 +++++---- 3 files changed, 11 insertions(+), 29 deletions(-) delete mode 100644 policyengine_us/parameters/gov/hhs/ccdf/qualified_immigration_statuses.yaml diff --git a/policyengine_us/parameters/gov/hhs/ccdf/qualified_immigration_statuses.yaml b/policyengine_us/parameters/gov/hhs/ccdf/qualified_immigration_statuses.yaml deleted file mode 100644 index 886a9adc270..00000000000 --- a/policyengine_us/parameters/gov/hhs/ccdf/qualified_immigration_statuses.yaml +++ /dev/null @@ -1,21 +0,0 @@ -description: The United States limits the Child Care and Development Fund to children of these immigration statuses. -values: - 2014-11-19: - - CITIZEN - - LEGAL_PERMANENT_RESIDENT - - REFUGEE - - ASYLEE - - DEPORTATION_WITHHELD - - CUBAN_HAITIAN_ENTRANT - - CONDITIONAL_ENTRANT - - PAROLED_ONE_YEAR - -metadata: - unit: list - period: year - label: CCDF qualified immigration statuses - reference: - - title: 8 USC 1641 - Definitions (qualified aliens) - href: https://www.law.cornell.edu/uscode/text/8/1641 - - title: 45 CFR 98.20(c) - A Lead Agency shall not prohibit eligibility based on a child's citizenship - href: https://www.law.cornell.edu/cfr/text/45/section-98.20#c diff --git a/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py b/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py index 04d58364017..316ecee37d8 100644 --- a/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py +++ b/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py @@ -2,10 +2,11 @@ # All implemented state child care subsidy programs. STATE_CHILD_CARE_SUBSIDY_VARIABLES = [ - "ca_child_care_subsidies", - "co_child_care_subsidies", - "ma_child_care_subsidies", - "ne_child_care_subsidies", + "ca_child_care_subsidies", # California child care (CalWORKs Stages 2-3 + CAPP) + "co_child_care_subsidies", # Colorado Child Care Assistance Program + "ma_child_care_subsidies", # Massachusetts Child Care Financial Assistance + "ne_child_care_subsidies", # Nebraska Child Care Subsidy + "tx_ccs", # Texas Child Care Services ] diff --git a/policyengine_us/variables/gov/hhs/ccdf/is_ccdf_immigration_eligible_child.py b/policyengine_us/variables/gov/hhs/ccdf/is_ccdf_immigration_eligible_child.py index feca827a258..5392878d714 100644 --- a/policyengine_us/variables/gov/hhs/ccdf/is_ccdf_immigration_eligible_child.py +++ b/policyengine_us/variables/gov/hhs/ccdf/is_ccdf_immigration_eligible_child.py @@ -8,14 +8,16 @@ class is_ccdf_immigration_eligible_child(Variable): label = "Immigration eligibility for CCDF" reference = ( "https://www.law.cornell.edu/uscode/text/8/1641", - "https://www.law.cornell.edu/cfr/text/45/section-98.20#c", + "https://www.law.cornell.edu/cfr/text/45/98.20", ) def formula(person, period, parameters): - p = parameters(period).gov.hhs.ccdf + p = parameters(period).gov.dhs.immigration immigration_status = person("immigration_status", period) immigration_status_str = immigration_status.decode_to_str() - return np.isin( + is_qualified_noncitizen = np.isin( immigration_status_str, - p.qualified_immigration_statuses, + p.qualified_noncitizen_status, ) + is_citizen = immigration_status == immigration_status.possible_values.CITIZEN + return is_citizen | is_qualified_noncitizen From a8778c5f689fc03dd213a505a0293cfcfc611f55 Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 12 Mar 2026 13:20:37 -0400 Subject: [PATCH 3/5] Fix misleading California child care comment Co-Authored-By: Claude Opus 4.6 --- policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py b/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py index 316ecee37d8..57f10dfbf5e 100644 --- a/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py +++ b/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py @@ -2,7 +2,7 @@ # All implemented state child care subsidy programs. STATE_CHILD_CARE_SUBSIDY_VARIABLES = [ - "ca_child_care_subsidies", # California child care (CalWORKs Stages 2-3 + CAPP) + "ca_child_care_subsidies", # California Child Care "co_child_care_subsidies", # Colorado Child Care Assistance Program "ma_child_care_subsidies", # Massachusetts Child Care Financial Assistance "ne_child_care_subsidies", # Nebraska Child Care Subsidy From 1c9eca7aa5cab1921a382d02c64850b0486c5046 Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 12 Mar 2026 13:23:12 -0400 Subject: [PATCH 4/5] Remove tx_ccs from aggregator due to pre-existing entity broadcast issue TX CCS was not in the original childcare_expenses.py list. Adding it to the aggregator triggers a shape mismatch in microsim. Will wire in separately once the TX CCS entity issue is resolved. Co-Authored-By: Claude Opus 4.6 --- policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py | 1 - 1 file changed, 1 deletion(-) diff --git a/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py b/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py index 57f10dfbf5e..b71a811e103 100644 --- a/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py +++ b/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py @@ -6,7 +6,6 @@ "co_child_care_subsidies", # Colorado Child Care Assistance Program "ma_child_care_subsidies", # Massachusetts Child Care Financial Assistance "ne_child_care_subsidies", # Nebraska Child Care Subsidy - "tx_ccs", # Texas Child Care Services ] From 19ec305bec8d6e9afe4f281a552fa76cc5934ff4 Mon Sep 17 00:00:00 2001 From: Ziming Date: Fri, 13 Mar 2026 07:43:12 -0400 Subject: [PATCH 5/5] Move child care subsidy program list to YAML parameter Use unit:list parameter pattern instead of hardcoded Python list, consistent with household_benefits and 209 other aggregator variables. Co-Authored-By: Claude Opus 4.6 --- .../gov/hhs/ccdf/child_care_subsidy_programs.yaml | 12 ++++++++++++ .../variables/gov/hhs/ccdf/child_care_subsidies.py | 10 +--------- 2 files changed, 13 insertions(+), 9 deletions(-) create mode 100644 policyengine_us/parameters/gov/hhs/ccdf/child_care_subsidy_programs.yaml diff --git a/policyengine_us/parameters/gov/hhs/ccdf/child_care_subsidy_programs.yaml b/policyengine_us/parameters/gov/hhs/ccdf/child_care_subsidy_programs.yaml new file mode 100644 index 00000000000..367612a52ae --- /dev/null +++ b/policyengine_us/parameters/gov/hhs/ccdf/child_care_subsidy_programs.yaml @@ -0,0 +1,12 @@ +description: The federal government counts these state programs as child care subsidies. +values: + 2021-01-01: + - ca_child_care_subsidies # California Child Care + - co_child_care_subsidies # Colorado Child Care Assistance Program + - ma_child_care_subsidies # Massachusetts Child Care Financial Assistance + - ne_child_care_subsidies # Nebraska Child Care Subsidy + +metadata: + unit: list + period: year + label: Child care subsidy programs diff --git a/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py b/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py index b71a811e103..feb67a7e7e5 100644 --- a/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py +++ b/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py @@ -1,13 +1,5 @@ from policyengine_us.model_api import * -# All implemented state child care subsidy programs. -STATE_CHILD_CARE_SUBSIDY_VARIABLES = [ - "ca_child_care_subsidies", # California Child Care - "co_child_care_subsidies", # Colorado Child Care Assistance Program - "ma_child_care_subsidies", # Massachusetts Child Care Financial Assistance - "ne_child_care_subsidies", # Nebraska Child Care Subsidy -] - class child_care_subsidies(Variable): value_type = float @@ -16,4 +8,4 @@ class child_care_subsidies(Variable): label = "Child care subsidies" unit = USD - adds = STATE_CHILD_CARE_SUBSIDY_VARIABLES + adds = "gov.hhs.ccdf.child_care_subsidy_programs"