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/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/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..feb67a7e7e5 --- /dev/null +++ b/policyengine_us/variables/gov/hhs/ccdf/child_care_subsidies.py @@ -0,0 +1,11 @@ +from policyengine_us.model_api import * + + +class child_care_subsidies(Variable): + value_type = float + entity = SPMUnit + definition_period = YEAR + label = "Child care subsidies" + unit = USD + + adds = "gov.hhs.ccdf.child_care_subsidy_programs" 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..5392878d714 --- /dev/null +++ b/policyengine_us/variables/gov/hhs/ccdf/is_ccdf_immigration_eligible_child.py @@ -0,0 +1,23 @@ +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/98.20", + ) + + def formula(person, period, parameters): + p = parameters(period).gov.dhs.immigration + immigration_status = person("immigration_status", period) + immigration_status_str = immigration_status.decode_to_str() + is_qualified_noncitizen = np.isin( + immigration_status_str, + p.qualified_noncitizen_status, + ) + is_citizen = immigration_status == immigration_status.possible_values.CITIZEN + return is_citizen | is_qualified_noncitizen 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)