From 53d25eaba76bbbc0feac8fe5f9ffc7cf8a0e82a2 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Fri, 9 Jan 2026 09:09:57 -0500 Subject: [PATCH 1/8] Add CDCTC single parent work requirement reform analysis Analyzes a reform that makes families eligible for CDCTC if at least one parent works (vs both parents under current law). Key findings (2026): - Additional cost: ~$0.74B (+12.7%) - New claimants: ~0.92M families - Average benefit for new claimants: ~$658 Co-Authored-By: Claude Opus 4.5 --- us/cdctc_single_parent_work_requirement.ipynb | 206 ++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 us/cdctc_single_parent_work_requirement.ipynb diff --git a/us/cdctc_single_parent_work_requirement.ipynb b/us/cdctc_single_parent_work_requirement.ipynb new file mode 100644 index 0000000..3027bd4 --- /dev/null +++ b/us/cdctc_single_parent_work_requirement.ipynb @@ -0,0 +1,206 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# CDCTC Single Parent Work Requirement Reform Analysis\n", + "\n", + "This notebook analyzes a reform to the Child and Dependent Care Tax Credit (CDCTC) that would make families eligible if **at least one parent works**, instead of the current law requiring **both parents to work**.\n", + "\n", + "## Background\n", + "\n", + "Under current law, the CDCTC caps eligible childcare expenses at the **minimum** of both spouses' earnings for married couples. This means if one spouse earns $50,000 and the other earns $0, the cap is $0 and the family receives no credit.\n", + "\n", + "The reform changes this to use the **maximum** of both spouses' earnings, allowing families to qualify if at least one parent works." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from policyengine_us import Microsimulation\n", + "from policyengine_us.reforms.cdcc.cdcc_single_parent_work_requirement import (\n", + " cdcc_single_parent_work_requirement\n", + ")\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Microsimulation Analysis (2026)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "YEAR = 2026\n", + "\n", + "# Baseline simulation\n", + "print(\"Running baseline simulation...\")\n", + "baseline = Microsimulation()\n", + "baseline_cdcc = baseline.calculate('cdcc', YEAR)\n", + "\n", + "# Reform simulation\n", + "print(\"Running reform simulation...\")\n", + "reform = Microsimulation(reform=cdcc_single_parent_work_requirement)\n", + "\n", + "# Clear cached downstream variables to ensure recalculation\n", + "for var_name in ['cdcc_relevant_expenses', 'cdcc_potential', 'cdcc', 'capped_cdcc']:\n", + " holder = reform.get_holder(var_name)\n", + " if holder:\n", + " holder.delete_arrays()\n", + "\n", + "reform_cdcc = reform.calculate('cdcc', YEAR)\n", + "print(\"Done.\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Calculate metrics\n", + "baseline_total = baseline_cdcc.sum()\n", + "reform_total = reform_cdcc.sum()\n", + "cost = reform_total - baseline_total\n", + "\n", + "baseline_claimants = (baseline_cdcc > 0).sum()\n", + "reform_claimants = (reform_cdcc > 0).sum()\n", + "new_claimants = reform_claimants - baseline_claimants\n", + "\n", + "baseline_avg = baseline_cdcc[baseline_cdcc > 0].mean()\n", + "reform_avg = reform_cdcc[reform_cdcc > 0].mean()\n", + "\n", + "# New claimants average\n", + "new_claimant_mask = (baseline_cdcc.values == 0) & (reform_cdcc.values > 0)\n", + "new_claimants_avg = reform_cdcc[new_claimant_mask].mean() if new_claimant_mask.any() else 0" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create results table\n", + "results = pd.DataFrame({\n", + " 'Metric': ['Total Cost', 'Claimants', 'Average Credit', 'New Claimants Avg'],\n", + " 'Baseline': [\n", + " f'${baseline_total/1e9:.2f}B',\n", + " f'{baseline_claimants/1e6:.2f}M',\n", + " f'${baseline_avg:.0f}',\n", + " '—'\n", + " ],\n", + " 'Reform': [\n", + " f'${reform_total/1e9:.2f}B',\n", + " f'{reform_claimants/1e6:.2f}M',\n", + " f'${reform_avg:.0f}',\n", + " f'${new_claimants_avg:.0f}'\n", + " ],\n", + " 'Change': [\n", + " f'+${cost/1e9:.2f}B ({cost/baseline_total*100:.1f}%)',\n", + " f'+{new_claimants/1e6:.2f}M',\n", + " f'${reform_avg - baseline_avg:+.0f}',\n", + " '—'\n", + " ]\n", + "})\n", + "\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "The CDCTC single parent work requirement reform would:\n", + "\n", + "- **Increase total CDCTC cost** by approximately $0.7-1.4 billion annually\n", + "- **Benefit approximately 1-2 million additional families** who currently don't qualify because only one spouse works\n", + "- **Provide an average credit of ~$650-700** to newly eligible families\n", + "\n", + "The reform primarily benefits one-earner married couples with childcare expenses who are currently excluded from the credit." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Single Household Example" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from policyengine_us import Simulation\n", + "\n", + "# Example: Married couple where only one spouse works\n", + "situation = {\n", + " 'people': {\n", + " 'adult1': {'age': {YEAR: 35}, 'employment_income': {YEAR: 50_000}},\n", + " 'adult2': {'age': {YEAR: 35}, 'employment_income': {YEAR: 0}},\n", + " 'child': {'age': {YEAR: 5}},\n", + " },\n", + " 'tax_units': {\n", + " 'tax_unit': {\n", + " 'members': ['adult1', 'adult2', 'child'],\n", + " 'tax_unit_childcare_expenses': {YEAR: 5_000},\n", + " }\n", + " },\n", + " 'families': {'family': {'members': ['adult1', 'adult2', 'child']}},\n", + " 'households': {\n", + " 'household': {\n", + " 'members': ['adult1', 'adult2', 'child'],\n", + " 'state_code': {YEAR: 'CA'},\n", + " }\n", + " },\n", + " 'marital_units': {\n", + " 'marital_unit': {'members': ['adult1', 'adult2']},\n", + " },\n", + " 'spm_units': {\n", + " 'spm_unit': {'members': ['adult1', 'adult2', 'child']},\n", + " },\n", + "}\n", + "\n", + "# Baseline\n", + "baseline_sim = Simulation(situation=situation)\n", + "baseline_credit = baseline_sim.calculate('cdcc', YEAR)[0]\n", + "\n", + "# Reform\n", + "reform_sim = Simulation(situation=situation, reform=cdcc_single_parent_work_requirement)\n", + "reform_credit = reform_sim.calculate('cdcc', YEAR)[0]\n", + "\n", + "print(f\"Example: Married couple, one earner ($50k), one child, $5k childcare expenses\")\n", + "print(f\" Baseline CDCC: ${baseline_credit:.0f}\")\n", + "print(f\" Reform CDCC: ${reform_credit:.0f}\")\n", + "print(f\" Benefit: ${reform_credit - baseline_credit:.0f}\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.11.0" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From 9c0b636041d527cd475f141e196dfbdc6193ae78 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Fri, 9 Jan 2026 09:59:02 -0500 Subject: [PATCH 2/8] Update CDCTC notebook with accurate estimates and implementation note - Updated cost estimate to $0.74B (was $0.7-1.4B) - Updated claimant count to 920,000 (was 1-2M) - Added note about average credit reduction - Added implementation note explaining cdcc_relevant_expenses override Co-Authored-By: Claude Opus 4.5 --- us/cdctc_single_parent_work_requirement.ipynb | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/us/cdctc_single_parent_work_requirement.ipynb b/us/cdctc_single_parent_work_requirement.ipynb index 3027bd4..f81eea1 100644 --- a/us/cdctc_single_parent_work_requirement.ipynb +++ b/us/cdctc_single_parent_work_requirement.ipynb @@ -53,6 +53,7 @@ "reform = Microsimulation(reform=cdcc_single_parent_work_requirement)\n", "\n", "# Clear cached downstream variables to ensure recalculation\n", + "# Note: This reform overrides cdcc_relevant_expenses directly \n", "for var_name in ['cdcc_relevant_expenses', 'cdcc_potential', 'cdcc', 'capped_cdcc']:\n", " holder = reform.get_holder(var_name)\n", " if holder:\n", @@ -125,11 +126,13 @@ "\n", "The CDCTC single parent work requirement reform would:\n", "\n", - "- **Increase total CDCTC cost** by approximately $0.7-1.4 billion annually\n", - "- **Benefit approximately 1-2 million additional families** who currently don't qualify because only one spouse works\n", - "- **Provide an average credit of ~$650-700** to newly eligible families\n", + "- **Increase total CDCTC cost** by approximately $0.74 billion annually (+12.7%)\n", + "- **Benefit approximately 920,000 additional families** who currently don't qualify because only one spouse works\n", + "- **Reduce the average credit slightly** (from $1,036 to $1,004) as newly eligible families tend to receive smaller credits\n", "\n", - "The reform primarily benefits one-earner married couples with childcare expenses who are currently excluded from the credit." + "The reform primarily benefits one-earner married couples with childcare expenses who are currently excluded from the credit.\n", + "\n", + "**Implementation note:** This reform overrides `cdcc_relevant_expenses` directly rather than `min_head_spouse_earned` to avoid affecting state-level child care credits that also use the minimum earnings calculation." ] }, { From 90ab60465d50c1a532a46b95f9c1ab1f61203074 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Fri, 9 Jan 2026 10:28:27 -0500 Subject: [PATCH 3/8] Add state CDCC impacts to analysis notebook States with federal CDCC matches are also affected: - South Carolina: +$28.6M (+59.9%) - Rhode Island: +$0.6M (+9.8%) - Total state impact: ~$29M Co-Authored-By: Claude Opus 4.5 --- us/cdctc_single_parent_work_requirement.ipynb | 35 +++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/us/cdctc_single_parent_work_requirement.ipynb b/us/cdctc_single_parent_work_requirement.ipynb index f81eea1..b74fd6c 100644 --- a/us/cdctc_single_parent_work_requirement.ipynb +++ b/us/cdctc_single_parent_work_requirement.ipynb @@ -121,19 +121,26 @@ { "cell_type": "markdown", "metadata": {}, - "source": [ - "## Summary\n", - "\n", - "The CDCTC single parent work requirement reform would:\n", - "\n", - "- **Increase total CDCTC cost** by approximately $0.74 billion annually (+12.7%)\n", - "- **Benefit approximately 920,000 additional families** who currently don't qualify because only one spouse works\n", - "- **Reduce the average credit slightly** (from $1,036 to $1,004) as newly eligible families tend to receive smaller credits\n", - "\n", - "The reform primarily benefits one-earner married couples with childcare expenses who are currently excluded from the credit.\n", - "\n", - "**Implementation note:** This reform overrides `cdcc_relevant_expenses` directly rather than `min_head_spouse_earned` to avoid affecting state-level child care credits that also use the minimum earnings calculation." - ] + "source": "## Summary\n\nThe CDCTC single parent work requirement reform would:\n\n- **Increase federal CDCTC cost** by approximately $0.74 billion annually (+12.7%)\n- **Increase state CDCC costs** by approximately $29 million (primarily South Carolina and Rhode Island)\n- **Benefit approximately 920,000 additional families** who currently don't qualify because only one spouse works\n- **Reduce the average credit slightly** (from $1,036 to $1,004) as newly eligible families tend to receive smaller credits\n\nThe reform primarily benefits one-earner married couples with childcare expenses who are currently excluded from the credit.\n\n**Implementation note:** This reform overrides `cdcc_relevant_expenses` directly rather than `min_head_spouse_earned` to avoid affecting other programs that use the minimum earnings calculation for non-CDCC purposes." + }, + { + "cell_type": "markdown", + "source": "## State CDCC Impacts\n\nSome states offer child care credits that directly match or piggyback on the federal CDCC. These state credits will also increase under the reform since they reference the federal credit amount.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "# State CDCC variables that match/reference federal CDCC\nstate_cdcc_vars = [\n ('sc_cdcc', 'South Carolina'),\n ('ri_cdcc', 'Rhode Island'),\n ('ny_cdcc', 'New York'),\n ('mn_cdcc', 'Minnesota'),\n ('me_child_care_credit', 'Maine'),\n ('ma_dependent_care_credit', 'Massachusetts'),\n ('hi_cdcc', 'Hawaii'),\n ('co_cdcc', 'Colorado'),\n ('vt_cdcc', 'Vermont'),\n]\n\nstate_results = []\nfor var_name, state_name in state_cdcc_vars:\n try:\n baseline_val = baseline.calculate(var_name, YEAR)\n reform_val = reform.calculate(var_name, YEAR)\n \n baseline_total = float(baseline_val.sum())\n reform_total = float(reform_val.sum())\n change = reform_total - baseline_total\n \n if baseline_total > 0 or change != 0:\n state_results.append({\n 'State': state_name,\n 'Baseline ($M)': round(baseline_total/1e6, 2),\n 'Reform ($M)': round(reform_total/1e6, 2),\n 'Change ($M)': round(change/1e6, 2),\n 'Change (%)': round((change / baseline_total * 100), 1) if baseline_total > 0 else 0\n })\n except:\n pass\n\nstate_df = pd.DataFrame(state_results)\nstate_df = state_df[state_df['Change ($M)'] != 0].sort_values('Change ($M)', ascending=False)\nstate_df", + "metadata": {}, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": "total_state_impact = state_df['Change ($M)'].sum()\nprint(f\"Total State CDCC Impact: ${total_state_impact:.2f}M\")\nprint(f\"Combined Federal + State Impact: ${cost/1e6 + total_state_impact:.0f}M\")", + "metadata": {}, + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", @@ -206,4 +213,4 @@ }, "nbformat": 4, "nbformat_minor": 4 -} +} \ No newline at end of file From fa690051ba121ae06f28a976a8d75d19154e260d Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Fri, 9 Jan 2026 10:35:03 -0500 Subject: [PATCH 4/8] Expand state CDCC analysis to all 30 states with credits Key findings: - 12 states affected by the reform - California: +$142M (largest impact) - South Carolina: +$29M - Maryland: +$20M (combined) - Total state impact: ~$204M - Combined federal + state: ~$944M Sources: NCSL, First Five Years Fund Co-Authored-By: Claude Opus 4.5 --- us/cdctc_single_parent_work_requirement.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/us/cdctc_single_parent_work_requirement.ipynb b/us/cdctc_single_parent_work_requirement.ipynb index b74fd6c..3b87e91 100644 --- a/us/cdctc_single_parent_work_requirement.ipynb +++ b/us/cdctc_single_parent_work_requirement.ipynb @@ -121,7 +121,7 @@ { "cell_type": "markdown", "metadata": {}, - "source": "## Summary\n\nThe CDCTC single parent work requirement reform would:\n\n- **Increase federal CDCTC cost** by approximately $0.74 billion annually (+12.7%)\n- **Increase state CDCC costs** by approximately $29 million (primarily South Carolina and Rhode Island)\n- **Benefit approximately 920,000 additional families** who currently don't qualify because only one spouse works\n- **Reduce the average credit slightly** (from $1,036 to $1,004) as newly eligible families tend to receive smaller credits\n\nThe reform primarily benefits one-earner married couples with childcare expenses who are currently excluded from the credit.\n\n**Implementation note:** This reform overrides `cdcc_relevant_expenses` directly rather than `min_head_spouse_earned` to avoid affecting other programs that use the minimum earnings calculation for non-CDCC purposes." + "source": "## Summary\n\nThe CDCTC single parent work requirement reform would:\n\n- **Increase federal CDCTC cost** by approximately $0.74 billion annually (+12.7%)\n- **Increase state CDCC costs** by approximately $204 million across 12 states\n- **Total combined impact**: ~$944 million\n- **Benefit approximately 920,000 additional families** who currently don't qualify because only one spouse works\n\nThe reform primarily benefits one-earner married couples with childcare expenses who are currently excluded from the credit.\n\n**Implementation note:** This reform overrides `cdcc_relevant_expenses` directly rather than `min_head_spouse_earned` to avoid affecting other programs that use the minimum earnings calculation for non-CDCC purposes." }, { "cell_type": "markdown", @@ -130,7 +130,7 @@ }, { "cell_type": "code", - "source": "# State CDCC variables that match/reference federal CDCC\nstate_cdcc_vars = [\n ('sc_cdcc', 'South Carolina'),\n ('ri_cdcc', 'Rhode Island'),\n ('ny_cdcc', 'New York'),\n ('mn_cdcc', 'Minnesota'),\n ('me_child_care_credit', 'Maine'),\n ('ma_dependent_care_credit', 'Massachusetts'),\n ('hi_cdcc', 'Hawaii'),\n ('co_cdcc', 'Colorado'),\n ('vt_cdcc', 'Vermont'),\n]\n\nstate_results = []\nfor var_name, state_name in state_cdcc_vars:\n try:\n baseline_val = baseline.calculate(var_name, YEAR)\n reform_val = reform.calculate(var_name, YEAR)\n \n baseline_total = float(baseline_val.sum())\n reform_total = float(reform_val.sum())\n change = reform_total - baseline_total\n \n if baseline_total > 0 or change != 0:\n state_results.append({\n 'State': state_name,\n 'Baseline ($M)': round(baseline_total/1e6, 2),\n 'Reform ($M)': round(reform_total/1e6, 2),\n 'Change ($M)': round(change/1e6, 2),\n 'Change (%)': round((change / baseline_total * 100), 1) if baseline_total > 0 else 0\n })\n except:\n pass\n\nstate_df = pd.DataFrame(state_results)\nstate_df = state_df[state_df['Change ($M)'] != 0].sort_values('Change ($M)', ascending=False)\nstate_df", + "source": "# Comprehensive list of state CDCC variables\nstate_cdcc_vars = [\n ('ar_cdcc', 'Arkansas (20%)'),\n ('ca_cdcc', 'California (34-50%)'),\n ('co_cdcc', 'Colorado (50%)'),\n ('dc_cdcc', 'DC (32%)'),\n ('de_cdcc', 'Delaware (50%)'),\n ('ga_cdcc', 'Georgia (30%)'),\n ('hi_cdcc', 'Hawaii (15-25%)'),\n ('ia_cdcc', 'Iowa (30-75%)'),\n ('ks_cdcc', 'Kansas (50%)'),\n ('ky_cdcc', 'Kentucky (20%)'),\n ('la_refundable_cdcc', 'Louisiana (ref)'),\n ('la_non_refundable_cdcc', 'Louisiana (non-ref)'),\n ('ma_dependent_care_credit', 'Massachusetts'),\n ('md_cdcc', 'Maryland (32%)'),\n ('md_refundable_cdcc', 'Maryland (ref)'),\n ('me_child_care_credit', 'Maine (25-50%)'),\n ('mn_cdcc', 'Minnesota (100%)'),\n ('ms_cdcc', 'Mississippi'),\n ('ne_cdcc_refundable', 'Nebraska (ref)'),\n ('ne_cdcc_nonrefundable', 'Nebraska (non-ref)'),\n ('nj_cdcc', 'New Jersey (10-50%)'),\n ('nm_cdcc', 'New Mexico'),\n ('ny_cdcc', 'New York (110-300%)'),\n ('oh_cdcc', 'Ohio (25-100%)'),\n ('ok_child_care_child_tax_credit', 'Oklahoma (20%)'),\n ('pa_cdcc', 'Pennsylvania (100%)'),\n ('ri_cdcc', 'Rhode Island (25%)'),\n ('sc_cdcc', 'South Carolina (7%)'),\n ('vt_cdcc', 'Vermont (72%)'),\n ('wv_cdcc', 'West Virginia (50%)'),\n]\n\nstate_results = []\nfor var_name, display_name in state_cdcc_vars:\n try:\n baseline_val = baseline.calculate(var_name, YEAR)\n reform_val = reform.calculate(var_name, YEAR)\n \n baseline_total = float(baseline_val.sum())\n reform_total = float(reform_val.sum())\n change = reform_total - baseline_total\n \n if baseline_total > 0 or change != 0:\n state_results.append({\n 'State': display_name,\n 'Baseline ($M)': round(baseline_total/1e6, 2),\n 'Reform ($M)': round(reform_total/1e6, 2),\n 'Change ($M)': round(change/1e6, 2),\n 'Change (%)': round((change / baseline_total * 100), 1) if baseline_total > 0 else 0\n })\n except:\n pass\n\nstate_df = pd.DataFrame(state_results)\nstate_df = state_df[state_df['Change ($M)'] != 0].sort_values('Change ($M)', ascending=False)\nstate_df", "metadata": {}, "execution_count": null, "outputs": [] From e506a9dbf91e85329d25504420d5a71b8d217245 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Fri, 9 Jan 2026 10:52:04 -0500 Subject: [PATCH 5/8] Add South Carolina household example showing state CDCC impact Demonstrates how a one-earner family in SC benefits from both: - Federal CDCC under the reform - SC state CDCC (7% of federal) Co-Authored-By: Claude Opus 4.5 --- us/cdctc_single_parent_work_requirement.ipynb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/us/cdctc_single_parent_work_requirement.ipynb b/us/cdctc_single_parent_work_requirement.ipynb index 3b87e91..0cc9556 100644 --- a/us/cdctc_single_parent_work_requirement.ipynb +++ b/us/cdctc_single_parent_work_requirement.ipynb @@ -198,6 +198,18 @@ "print(f\" Reform CDCC: ${reform_credit:.0f}\")\n", "print(f\" Benefit: ${reform_credit - baseline_credit:.0f}\")" ] + }, + { + "cell_type": "markdown", + "source": "## State Household Example: South Carolina\n\nSouth Carolina offers a state CDCC equal to 7% of the federal credit. Here's how the reform affects a family in South Carolina.", + "metadata": {} + }, + { + "cell_type": "code", + "source": "# South Carolina example: Same family structure\nsc_situation = {\n 'people': {\n 'adult1': {'age': {YEAR: 35}, 'employment_income': {YEAR: 50_000}},\n 'adult2': {'age': {YEAR: 35}, 'employment_income': {YEAR: 0}},\n 'child': {'age': {YEAR: 5}},\n },\n 'tax_units': {\n 'tax_unit': {\n 'members': ['adult1', 'adult2', 'child'],\n 'tax_unit_childcare_expenses': {YEAR: 5_000},\n }\n },\n 'families': {'family': {'members': ['adult1', 'adult2', 'child']}},\n 'households': {\n 'household': {\n 'members': ['adult1', 'adult2', 'child'],\n 'state_code': {YEAR: 'SC'},\n }\n },\n 'marital_units': {\n 'marital_unit': {'members': ['adult1', 'adult2']},\n },\n 'spm_units': {\n 'spm_unit': {'members': ['adult1', 'adult2', 'child']},\n },\n}\n\n# Baseline\nsc_baseline = Simulation(situation=sc_situation)\nsc_baseline_federal = sc_baseline.calculate('cdcc', YEAR)[0]\nsc_baseline_state = sc_baseline.calculate('sc_cdcc', YEAR)[0]\n\n# Reform\nsc_reform = Simulation(situation=sc_situation, reform=cdcc_single_parent_work_requirement)\nsc_reform_federal = sc_reform.calculate('cdcc', YEAR)[0]\nsc_reform_state = sc_reform.calculate('sc_cdcc', YEAR)[0]\n\nprint(f\"South Carolina Example: Married couple, one earner ($50k), one child, $5k childcare\")\nprint(f\"\\nFederal CDCC:\")\nprint(f\" Baseline: ${sc_baseline_federal:.0f}\")\nprint(f\" Reform: ${sc_reform_federal:.0f}\")\nprint(f\" Benefit: ${sc_reform_federal - sc_baseline_federal:.0f}\")\nprint(f\"\\nSouth Carolina CDCC (7% of federal):\")\nprint(f\" Baseline: ${sc_baseline_state:.0f}\")\nprint(f\" Reform: ${sc_reform_state:.0f}\")\nprint(f\" Benefit: ${sc_reform_state - sc_baseline_state:.0f}\")\nprint(f\"\\nTotal Combined Benefit: ${(sc_reform_federal - sc_baseline_federal) + (sc_reform_state - sc_baseline_state):.0f}\")", + "metadata": {}, + "execution_count": null, + "outputs": [] } ], "metadata": { From bc74ea6a8eba4ddc40fc75694129b298ba25ca28 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Fri, 9 Jan 2026 10:57:48 -0500 Subject: [PATCH 6/8] Fix SC CDCC description - 7% of expenses not federal credit Co-Authored-By: Claude Opus 4.5 --- us/cdctc_single_parent_work_requirement.ipynb | 157 ++++++++++++++++-- 1 file changed, 143 insertions(+), 14 deletions(-) diff --git a/us/cdctc_single_parent_work_requirement.ipynb b/us/cdctc_single_parent_work_requirement.ipynb index 0cc9556..fc8e5de 100644 --- a/us/cdctc_single_parent_work_requirement.ipynb +++ b/us/cdctc_single_parent_work_requirement.ipynb @@ -121,26 +121,106 @@ { "cell_type": "markdown", "metadata": {}, - "source": "## Summary\n\nThe CDCTC single parent work requirement reform would:\n\n- **Increase federal CDCTC cost** by approximately $0.74 billion annually (+12.7%)\n- **Increase state CDCC costs** by approximately $204 million across 12 states\n- **Total combined impact**: ~$944 million\n- **Benefit approximately 920,000 additional families** who currently don't qualify because only one spouse works\n\nThe reform primarily benefits one-earner married couples with childcare expenses who are currently excluded from the credit.\n\n**Implementation note:** This reform overrides `cdcc_relevant_expenses` directly rather than `min_head_spouse_earned` to avoid affecting other programs that use the minimum earnings calculation for non-CDCC purposes." + "source": [ + "## Summary\n", + "\n", + "The CDCTC single parent work requirement reform would:\n", + "\n", + "- **Increase federal CDCTC cost** by approximately $0.74 billion annually (+12.7%)\n", + "- **Increase state CDCC costs** by approximately $204 million across 12 states\n", + "- **Total combined impact**: ~$944 million\n", + "- **Benefit approximately 920,000 additional families** who currently don't qualify because only one spouse works\n", + "\n", + "The reform primarily benefits one-earner married couples with childcare expenses who are currently excluded from the credit.\n", + "\n", + "**Implementation note:** This reform overrides `cdcc_relevant_expenses` directly rather than `min_head_spouse_earned` to avoid affecting other programs that use the minimum earnings calculation for non-CDCC purposes." + ] }, { "cell_type": "markdown", - "source": "## State CDCC Impacts\n\nSome states offer child care credits that directly match or piggyback on the federal CDCC. These state credits will also increase under the reform since they reference the federal credit amount.", - "metadata": {} + "metadata": {}, + "source": [ + "## State CDCC Impacts\n", + "\n", + "Some states offer child care credits that directly match or piggyback on the federal CDCC. These state credits will also increase under the reform since they reference the federal credit amount." + ] }, { "cell_type": "code", - "source": "# Comprehensive list of state CDCC variables\nstate_cdcc_vars = [\n ('ar_cdcc', 'Arkansas (20%)'),\n ('ca_cdcc', 'California (34-50%)'),\n ('co_cdcc', 'Colorado (50%)'),\n ('dc_cdcc', 'DC (32%)'),\n ('de_cdcc', 'Delaware (50%)'),\n ('ga_cdcc', 'Georgia (30%)'),\n ('hi_cdcc', 'Hawaii (15-25%)'),\n ('ia_cdcc', 'Iowa (30-75%)'),\n ('ks_cdcc', 'Kansas (50%)'),\n ('ky_cdcc', 'Kentucky (20%)'),\n ('la_refundable_cdcc', 'Louisiana (ref)'),\n ('la_non_refundable_cdcc', 'Louisiana (non-ref)'),\n ('ma_dependent_care_credit', 'Massachusetts'),\n ('md_cdcc', 'Maryland (32%)'),\n ('md_refundable_cdcc', 'Maryland (ref)'),\n ('me_child_care_credit', 'Maine (25-50%)'),\n ('mn_cdcc', 'Minnesota (100%)'),\n ('ms_cdcc', 'Mississippi'),\n ('ne_cdcc_refundable', 'Nebraska (ref)'),\n ('ne_cdcc_nonrefundable', 'Nebraska (non-ref)'),\n ('nj_cdcc', 'New Jersey (10-50%)'),\n ('nm_cdcc', 'New Mexico'),\n ('ny_cdcc', 'New York (110-300%)'),\n ('oh_cdcc', 'Ohio (25-100%)'),\n ('ok_child_care_child_tax_credit', 'Oklahoma (20%)'),\n ('pa_cdcc', 'Pennsylvania (100%)'),\n ('ri_cdcc', 'Rhode Island (25%)'),\n ('sc_cdcc', 'South Carolina (7%)'),\n ('vt_cdcc', 'Vermont (72%)'),\n ('wv_cdcc', 'West Virginia (50%)'),\n]\n\nstate_results = []\nfor var_name, display_name in state_cdcc_vars:\n try:\n baseline_val = baseline.calculate(var_name, YEAR)\n reform_val = reform.calculate(var_name, YEAR)\n \n baseline_total = float(baseline_val.sum())\n reform_total = float(reform_val.sum())\n change = reform_total - baseline_total\n \n if baseline_total > 0 or change != 0:\n state_results.append({\n 'State': display_name,\n 'Baseline ($M)': round(baseline_total/1e6, 2),\n 'Reform ($M)': round(reform_total/1e6, 2),\n 'Change ($M)': round(change/1e6, 2),\n 'Change (%)': round((change / baseline_total * 100), 1) if baseline_total > 0 else 0\n })\n except:\n pass\n\nstate_df = pd.DataFrame(state_results)\nstate_df = state_df[state_df['Change ($M)'] != 0].sort_values('Change ($M)', ascending=False)\nstate_df", - "metadata": {}, "execution_count": null, - "outputs": [] + "metadata": {}, + "outputs": [], + "source": [ + "# Comprehensive list of state CDCC variables\n", + "state_cdcc_vars = [\n", + " ('ar_cdcc', 'Arkansas (20%)'),\n", + " ('ca_cdcc', 'California (34-50%)'),\n", + " ('co_cdcc', 'Colorado (50%)'),\n", + " ('dc_cdcc', 'DC (32%)'),\n", + " ('de_cdcc', 'Delaware (50%)'),\n", + " ('ga_cdcc', 'Georgia (30%)'),\n", + " ('hi_cdcc', 'Hawaii (15-25%)'),\n", + " ('ia_cdcc', 'Iowa (30-75%)'),\n", + " ('ks_cdcc', 'Kansas (50%)'),\n", + " ('ky_cdcc', 'Kentucky (20%)'),\n", + " ('la_refundable_cdcc', 'Louisiana (ref)'),\n", + " ('la_non_refundable_cdcc', 'Louisiana (non-ref)'),\n", + " ('ma_dependent_care_credit', 'Massachusetts'),\n", + " ('md_cdcc', 'Maryland (32%)'),\n", + " ('md_refundable_cdcc', 'Maryland (ref)'),\n", + " ('me_child_care_credit', 'Maine (25-50%)'),\n", + " ('mn_cdcc', 'Minnesota (100%)'),\n", + " ('ms_cdcc', 'Mississippi'),\n", + " ('ne_cdcc_refundable', 'Nebraska (ref)'),\n", + " ('ne_cdcc_nonrefundable', 'Nebraska (non-ref)'),\n", + " ('nj_cdcc', 'New Jersey (10-50%)'),\n", + " ('nm_cdcc', 'New Mexico'),\n", + " ('ny_cdcc', 'New York (110-300%)'),\n", + " ('oh_cdcc', 'Ohio (25-100%)'),\n", + " ('ok_child_care_child_tax_credit', 'Oklahoma (20%)'),\n", + " ('pa_cdcc', 'Pennsylvania (100%)'),\n", + " ('ri_cdcc', 'Rhode Island (25%)'),\n", + " ('sc_cdcc', 'South Carolina (7%)'),\n", + " ('vt_cdcc', 'Vermont (72%)'),\n", + " ('wv_cdcc', 'West Virginia (50%)'),\n", + "]\n", + "\n", + "state_results = []\n", + "for var_name, display_name in state_cdcc_vars:\n", + " try:\n", + " baseline_val = baseline.calculate(var_name, YEAR)\n", + " reform_val = reform.calculate(var_name, YEAR)\n", + " \n", + " baseline_total = float(baseline_val.sum())\n", + " reform_total = float(reform_val.sum())\n", + " change = reform_total - baseline_total\n", + " \n", + " if baseline_total > 0 or change != 0:\n", + " state_results.append({\n", + " 'State': display_name,\n", + " 'Baseline ($M)': round(baseline_total/1e6, 2),\n", + " 'Reform ($M)': round(reform_total/1e6, 2),\n", + " 'Change ($M)': round(change/1e6, 2),\n", + " 'Change (%)': round((change / baseline_total * 100), 1) if baseline_total > 0 else 0\n", + " })\n", + " except:\n", + " pass\n", + "\n", + "state_df = pd.DataFrame(state_results)\n", + "state_df = state_df[state_df['Change ($M)'] != 0].sort_values('Change ($M)', ascending=False)\n", + "state_df" + ] }, { "cell_type": "code", - "source": "total_state_impact = state_df['Change ($M)'].sum()\nprint(f\"Total State CDCC Impact: ${total_state_impact:.2f}M\")\nprint(f\"Combined Federal + State Impact: ${cost/1e6 + total_state_impact:.0f}M\")", - "metadata": {}, "execution_count": null, - "outputs": [] + "metadata": {}, + "outputs": [], + "source": [ + "total_state_impact = state_df['Change ($M)'].sum()\n", + "print(f\"Total State CDCC Impact: ${total_state_impact:.2f}M\")\n", + "print(f\"Combined Federal + State Impact: ${cost/1e6 + total_state_impact:.0f}M\")" + ] }, { "cell_type": "markdown", @@ -201,15 +281,64 @@ }, { "cell_type": "markdown", - "source": "## State Household Example: South Carolina\n\nSouth Carolina offers a state CDCC equal to 7% of the federal credit. Here's how the reform affects a family in South Carolina.", - "metadata": {} + "metadata": {}, + "source": "## State Household Example: South Carolina\n\nSouth Carolina offers a state CDCC equal to 7% of qualified childcare expenses (using the same expense calculation as the federal credit). Here's how the reform affects a family in South Carolina." }, { "cell_type": "code", - "source": "# South Carolina example: Same family structure\nsc_situation = {\n 'people': {\n 'adult1': {'age': {YEAR: 35}, 'employment_income': {YEAR: 50_000}},\n 'adult2': {'age': {YEAR: 35}, 'employment_income': {YEAR: 0}},\n 'child': {'age': {YEAR: 5}},\n },\n 'tax_units': {\n 'tax_unit': {\n 'members': ['adult1', 'adult2', 'child'],\n 'tax_unit_childcare_expenses': {YEAR: 5_000},\n }\n },\n 'families': {'family': {'members': ['adult1', 'adult2', 'child']}},\n 'households': {\n 'household': {\n 'members': ['adult1', 'adult2', 'child'],\n 'state_code': {YEAR: 'SC'},\n }\n },\n 'marital_units': {\n 'marital_unit': {'members': ['adult1', 'adult2']},\n },\n 'spm_units': {\n 'spm_unit': {'members': ['adult1', 'adult2', 'child']},\n },\n}\n\n# Baseline\nsc_baseline = Simulation(situation=sc_situation)\nsc_baseline_federal = sc_baseline.calculate('cdcc', YEAR)[0]\nsc_baseline_state = sc_baseline.calculate('sc_cdcc', YEAR)[0]\n\n# Reform\nsc_reform = Simulation(situation=sc_situation, reform=cdcc_single_parent_work_requirement)\nsc_reform_federal = sc_reform.calculate('cdcc', YEAR)[0]\nsc_reform_state = sc_reform.calculate('sc_cdcc', YEAR)[0]\n\nprint(f\"South Carolina Example: Married couple, one earner ($50k), one child, $5k childcare\")\nprint(f\"\\nFederal CDCC:\")\nprint(f\" Baseline: ${sc_baseline_federal:.0f}\")\nprint(f\" Reform: ${sc_reform_federal:.0f}\")\nprint(f\" Benefit: ${sc_reform_federal - sc_baseline_federal:.0f}\")\nprint(f\"\\nSouth Carolina CDCC (7% of federal):\")\nprint(f\" Baseline: ${sc_baseline_state:.0f}\")\nprint(f\" Reform: ${sc_reform_state:.0f}\")\nprint(f\" Benefit: ${sc_reform_state - sc_baseline_state:.0f}\")\nprint(f\"\\nTotal Combined Benefit: ${(sc_reform_federal - sc_baseline_federal) + (sc_reform_state - sc_baseline_state):.0f}\")", - "metadata": {}, "execution_count": null, - "outputs": [] + "metadata": {}, + "outputs": [], + "source": [ + "# South Carolina example: Same family structure\n", + "sc_situation = {\n", + " 'people': {\n", + " 'adult1': {'age': {YEAR: 35}, 'employment_income': {YEAR: 50_000}},\n", + " 'adult2': {'age': {YEAR: 35}, 'employment_income': {YEAR: 0}},\n", + " 'child': {'age': {YEAR: 5}},\n", + " },\n", + " 'tax_units': {\n", + " 'tax_unit': {\n", + " 'members': ['adult1', 'adult2', 'child'],\n", + " 'tax_unit_childcare_expenses': {YEAR: 5_000},\n", + " }\n", + " },\n", + " 'families': {'family': {'members': ['adult1', 'adult2', 'child']}},\n", + " 'households': {\n", + " 'household': {\n", + " 'members': ['adult1', 'adult2', 'child'],\n", + " 'state_code': {YEAR: 'SC'},\n", + " }\n", + " },\n", + " 'marital_units': {\n", + " 'marital_unit': {'members': ['adult1', 'adult2']},\n", + " },\n", + " 'spm_units': {\n", + " 'spm_unit': {'members': ['adult1', 'adult2', 'child']},\n", + " },\n", + "}\n", + "\n", + "# Baseline\n", + "sc_baseline = Simulation(situation=sc_situation)\n", + "sc_baseline_federal = sc_baseline.calculate('cdcc', YEAR)[0]\n", + "sc_baseline_state = sc_baseline.calculate('sc_cdcc', YEAR)[0]\n", + "\n", + "# Reform\n", + "sc_reform = Simulation(situation=sc_situation, reform=cdcc_single_parent_work_requirement)\n", + "sc_reform_federal = sc_reform.calculate('cdcc', YEAR)[0]\n", + "sc_reform_state = sc_reform.calculate('sc_cdcc', YEAR)[0]\n", + "\n", + "print(f\"South Carolina Example: Married couple, one earner ($50k), one child, $5k childcare\")\n", + "print(f\"\\nFederal CDCC:\")\n", + "print(f\" Baseline: ${sc_baseline_federal:.0f}\")\n", + "print(f\" Reform: ${sc_reform_federal:.0f}\")\n", + "print(f\" Benefit: ${sc_reform_federal - sc_baseline_federal:.0f}\")\n", + "print(f\"\\nSouth Carolina CDCC (7% of federal):\")\n", + "print(f\" Baseline: ${sc_baseline_state:.0f}\")\n", + "print(f\" Reform: ${sc_reform_state:.0f}\")\n", + "print(f\" Benefit: ${sc_reform_state - sc_baseline_state:.0f}\")\n", + "print(f\"\\nTotal Combined Benefit: ${(sc_reform_federal - sc_baseline_federal) + (sc_reform_state - sc_baseline_state):.0f}\")" + ] } ], "metadata": { From 429259d3df1e30a320e528f30061ba716f419973 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Mon, 12 Jan 2026 10:44:47 -0500 Subject: [PATCH 7/8] Update notebook to use income_tax for federal impact and state_cdcc for states - Use income_tax change for federal budgetary impact (-$437M) - Use state_cdcc aggregated variable for total state impact ($198M) - Simplified state-by-state breakdown using direct variable calculations - Updated summary with accurate metrics Co-Authored-By: Claude Opus 4.5 --- us/cdctc_single_parent_work_requirement.ipynb | 150 +----------------- 1 file changed, 6 insertions(+), 144 deletions(-) diff --git a/us/cdctc_single_parent_work_requirement.ipynb b/us/cdctc_single_parent_work_requirement.ipynb index fc8e5de..2b902f5 100644 --- a/us/cdctc_single_parent_work_requirement.ipynb +++ b/us/cdctc_single_parent_work_requirement.ipynb @@ -40,101 +40,26 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "YEAR = 2026\n", - "\n", - "# Baseline simulation\n", - "print(\"Running baseline simulation...\")\n", - "baseline = Microsimulation()\n", - "baseline_cdcc = baseline.calculate('cdcc', YEAR)\n", - "\n", - "# Reform simulation\n", - "print(\"Running reform simulation...\")\n", - "reform = Microsimulation(reform=cdcc_single_parent_work_requirement)\n", - "\n", - "# Clear cached downstream variables to ensure recalculation\n", - "# Note: This reform overrides cdcc_relevant_expenses directly \n", - "for var_name in ['cdcc_relevant_expenses', 'cdcc_potential', 'cdcc', 'capped_cdcc']:\n", - " holder = reform.get_holder(var_name)\n", - " if holder:\n", - " holder.delete_arrays()\n", - "\n", - "reform_cdcc = reform.calculate('cdcc', YEAR)\n", - "print(\"Done.\")" - ] + "source": "YEAR = 2026\n\n# Baseline simulation\nprint(\"Running baseline simulation...\")\nbaseline = Microsimulation()\n\n# Reform simulation\nprint(\"Running reform simulation...\")\nreform = Microsimulation(reform=cdcc_single_parent_work_requirement)\n\n# Clear cached downstream variables to ensure recalculation\n# Note: This reform overrides cdcc_relevant_expenses directly \nfor var_name in ['cdcc_relevant_expenses', 'cdcc_potential', 'cdcc', 'capped_cdcc', 'income_tax']:\n holder = reform.get_holder(var_name)\n if holder:\n holder.delete_arrays()\n\n# Calculate federal impacts using income_tax (isolates federal budgetary impact)\nbaseline_income_tax = baseline.calculate('income_tax', YEAR)\nreform_income_tax = reform.calculate('income_tax', YEAR)\nfederal_revenue_change = reform_income_tax.sum() - baseline_income_tax.sum()\n\n# Also get CDCC-specific metrics\nbaseline_cdcc = baseline.calculate('cdcc', YEAR)\nreform_cdcc = reform.calculate('cdcc', YEAR)\n\nprint(\"Done.\")" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "# Calculate metrics\n", - "baseline_total = baseline_cdcc.sum()\n", - "reform_total = reform_cdcc.sum()\n", - "cost = reform_total - baseline_total\n", - "\n", - "baseline_claimants = (baseline_cdcc > 0).sum()\n", - "reform_claimants = (reform_cdcc > 0).sum()\n", - "new_claimants = reform_claimants - baseline_claimants\n", - "\n", - "baseline_avg = baseline_cdcc[baseline_cdcc > 0].mean()\n", - "reform_avg = reform_cdcc[reform_cdcc > 0].mean()\n", - "\n", - "# New claimants average\n", - "new_claimant_mask = (baseline_cdcc.values == 0) & (reform_cdcc.values > 0)\n", - "new_claimants_avg = reform_cdcc[new_claimant_mask].mean() if new_claimant_mask.any() else 0" - ] + "source": "# Calculate metrics\ncdcc_cost = reform_cdcc.sum() - baseline_cdcc.sum()\n\nbaseline_claimants = (baseline_cdcc > 0).sum()\nreform_claimants = (reform_cdcc > 0).sum()\nnew_claimants = reform_claimants - baseline_claimants\n\nbaseline_avg = baseline_cdcc[baseline_cdcc > 0].mean()\nreform_avg = reform_cdcc[reform_cdcc > 0].mean()\n\n# New claimants average\nnew_claimant_mask = (baseline_cdcc.values == 0) & (reform_cdcc.values > 0)\nnew_claimants_avg = reform_cdcc[new_claimant_mask].mean() if new_claimant_mask.any() else 0\n\nprint(f\"Federal Budgetary Impact (income_tax change): ${federal_revenue_change/1e9:.2f}B\")\nprint(f\"CDCC Credit Change: ${cdcc_cost/1e9:.2f}B\")" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "# Create results table\n", - "results = pd.DataFrame({\n", - " 'Metric': ['Total Cost', 'Claimants', 'Average Credit', 'New Claimants Avg'],\n", - " 'Baseline': [\n", - " f'${baseline_total/1e9:.2f}B',\n", - " f'{baseline_claimants/1e6:.2f}M',\n", - " f'${baseline_avg:.0f}',\n", - " '—'\n", - " ],\n", - " 'Reform': [\n", - " f'${reform_total/1e9:.2f}B',\n", - " f'{reform_claimants/1e6:.2f}M',\n", - " f'${reform_avg:.0f}',\n", - " f'${new_claimants_avg:.0f}'\n", - " ],\n", - " 'Change': [\n", - " f'+${cost/1e9:.2f}B ({cost/baseline_total*100:.1f}%)',\n", - " f'+{new_claimants/1e6:.2f}M',\n", - " f'${reform_avg - baseline_avg:+.0f}',\n", - " '—'\n", - " ]\n", - "})\n", - "\n", - "results" - ] + "source": "# Create results table\nresults = pd.DataFrame({\n 'Metric': ['Federal Budgetary Impact', 'CDCC Credit Cost', 'Claimants', 'Average Credit'],\n 'Baseline': [\n f'${baseline_income_tax.sum()/1e9:.2f}B',\n f'${baseline_cdcc.sum()/1e9:.2f}B',\n f'{baseline_claimants/1e6:.2f}M',\n f'${baseline_avg:.0f}',\n ],\n 'Reform': [\n f'${reform_income_tax.sum()/1e9:.2f}B',\n f'${reform_cdcc.sum()/1e9:.2f}B',\n f'{reform_claimants/1e6:.2f}M',\n f'${reform_avg:.0f}',\n ],\n 'Change': [\n f'${federal_revenue_change/1e9:.2f}B',\n f'+${cdcc_cost/1e9:.2f}B',\n f'+{new_claimants/1e6:.2f}M',\n f'${reform_avg - baseline_avg:+.0f}',\n ]\n})\n\nresults" }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "## Summary\n", - "\n", - "The CDCTC single parent work requirement reform would:\n", - "\n", - "- **Increase federal CDCTC cost** by approximately $0.74 billion annually (+12.7%)\n", - "- **Increase state CDCC costs** by approximately $204 million across 12 states\n", - "- **Total combined impact**: ~$944 million\n", - "- **Benefit approximately 920,000 additional families** who currently don't qualify because only one spouse works\n", - "\n", - "The reform primarily benefits one-earner married couples with childcare expenses who are currently excluded from the credit.\n", - "\n", - "**Implementation note:** This reform overrides `cdcc_relevant_expenses` directly rather than `min_head_spouse_earned` to avoid affecting other programs that use the minimum earnings calculation for non-CDCC purposes." - ] + "source": "## Summary\n\nThe CDCTC single parent work requirement reform would:\n\n- **Federal budgetary impact**: ~$-437M (reduced income tax revenue)\n- **State CDCC impact**: ~$198M additional state credits\n- **CDCC credit increase**: ~$740M\n- **New claimants**: ~920,000 additional families\n\nThe reform primarily benefits one-earner married couples with childcare expenses who are currently excluded from the credit.\n\n**Implementation note:** This reform overrides `cdcc_relevant_expenses` directly rather than `min_head_spouse_earned` to avoid affecting other programs that use the minimum earnings calculation for non-CDCC purposes." }, { "cell_type": "markdown", @@ -150,77 +75,14 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "# Comprehensive list of state CDCC variables\n", - "state_cdcc_vars = [\n", - " ('ar_cdcc', 'Arkansas (20%)'),\n", - " ('ca_cdcc', 'California (34-50%)'),\n", - " ('co_cdcc', 'Colorado (50%)'),\n", - " ('dc_cdcc', 'DC (32%)'),\n", - " ('de_cdcc', 'Delaware (50%)'),\n", - " ('ga_cdcc', 'Georgia (30%)'),\n", - " ('hi_cdcc', 'Hawaii (15-25%)'),\n", - " ('ia_cdcc', 'Iowa (30-75%)'),\n", - " ('ks_cdcc', 'Kansas (50%)'),\n", - " ('ky_cdcc', 'Kentucky (20%)'),\n", - " ('la_refundable_cdcc', 'Louisiana (ref)'),\n", - " ('la_non_refundable_cdcc', 'Louisiana (non-ref)'),\n", - " ('ma_dependent_care_credit', 'Massachusetts'),\n", - " ('md_cdcc', 'Maryland (32%)'),\n", - " ('md_refundable_cdcc', 'Maryland (ref)'),\n", - " ('me_child_care_credit', 'Maine (25-50%)'),\n", - " ('mn_cdcc', 'Minnesota (100%)'),\n", - " ('ms_cdcc', 'Mississippi'),\n", - " ('ne_cdcc_refundable', 'Nebraska (ref)'),\n", - " ('ne_cdcc_nonrefundable', 'Nebraska (non-ref)'),\n", - " ('nj_cdcc', 'New Jersey (10-50%)'),\n", - " ('nm_cdcc', 'New Mexico'),\n", - " ('ny_cdcc', 'New York (110-300%)'),\n", - " ('oh_cdcc', 'Ohio (25-100%)'),\n", - " ('ok_child_care_child_tax_credit', 'Oklahoma (20%)'),\n", - " ('pa_cdcc', 'Pennsylvania (100%)'),\n", - " ('ri_cdcc', 'Rhode Island (25%)'),\n", - " ('sc_cdcc', 'South Carolina (7%)'),\n", - " ('vt_cdcc', 'Vermont (72%)'),\n", - " ('wv_cdcc', 'West Virginia (50%)'),\n", - "]\n", - "\n", - "state_results = []\n", - "for var_name, display_name in state_cdcc_vars:\n", - " try:\n", - " baseline_val = baseline.calculate(var_name, YEAR)\n", - " reform_val = reform.calculate(var_name, YEAR)\n", - " \n", - " baseline_total = float(baseline_val.sum())\n", - " reform_total = float(reform_val.sum())\n", - " change = reform_total - baseline_total\n", - " \n", - " if baseline_total > 0 or change != 0:\n", - " state_results.append({\n", - " 'State': display_name,\n", - " 'Baseline ($M)': round(baseline_total/1e6, 2),\n", - " 'Reform ($M)': round(reform_total/1e6, 2),\n", - " 'Change ($M)': round(change/1e6, 2),\n", - " 'Change (%)': round((change / baseline_total * 100), 1) if baseline_total > 0 else 0\n", - " })\n", - " except:\n", - " pass\n", - "\n", - "state_df = pd.DataFrame(state_results)\n", - "state_df = state_df[state_df['Change ($M)'] != 0].sort_values('Change ($M)', ascending=False)\n", - "state_df" - ] + "source": "# Use aggregated state_cdcc for total state impact\nbaseline_state_cdcc = baseline.calculate('state_cdcc', YEAR)\nreform_state_cdcc = reform.calculate('state_cdcc', YEAR)\ntotal_state_change = reform_state_cdcc.sum() - baseline_state_cdcc.sum()\n\n# For state-by-state breakdown, calculate key state CDCCs directly\n# (Entity mapping between tax_unit and household makes aggregation complex)\nstate_vars = [\n ('California', 'ca_cdcc'),\n ('South Carolina', 'sc_cdcc'),\n ('Pennsylvania', 'pa_cdcc'),\n ('Maryland', 'md_cdcc'),\n ('DC', 'dc_cdcc'),\n ('Rhode Island', 'ri_cdcc'),\n ('Kansas', 'ks_cdcc'),\n ('Arkansas', 'ar_cdcc'),\n ('Delaware', 'de_cdcc'),\n ('West Virginia', 'wv_cdcc'),\n ('Nebraska', 'ne_cdcc_nonrefundable'),\n]\n\nstate_results = []\nfor state_name, var_name in state_vars:\n try:\n b = baseline.calculate(var_name, YEAR).sum()\n r = reform.calculate(var_name, YEAR).sum()\n change = r - b\n if abs(change) > 1000: # Only show meaningful changes\n state_results.append({\n 'State': state_name,\n 'Baseline ($M)': round(b/1e6, 2),\n 'Reform ($M)': round(r/1e6, 2),\n 'Change ($M)': round(change/1e6, 2),\n })\n except:\n pass\n\nstate_df = pd.DataFrame(state_results).sort_values('Change ($M)', ascending=False)\nstate_df" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "total_state_impact = state_df['Change ($M)'].sum()\n", - "print(f\"Total State CDCC Impact: ${total_state_impact:.2f}M\")\n", - "print(f\"Combined Federal + State Impact: ${cost/1e6 + total_state_impact:.0f}M\")" - ] + "source": "print(f\"=== Summary ===\")\nprint(f\"Federal Budgetary Impact (income_tax): ${federal_revenue_change/1e6:.0f}M\")\nprint(f\"Total State CDCC Impact (state_cdcc): ${total_state_change/1e6:.0f}M\")\nprint(f\"Combined Impact: ${(federal_revenue_change + total_state_change)/1e6:.0f}M\")" }, { "cell_type": "markdown", From 5861cb8bce2702316d77287913efe47425627079 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Mon, 12 Jan 2026 10:46:47 -0500 Subject: [PATCH 8/8] Show both CDCC cost ($740M) and income_tax change ($437M) CDCC cost is the gross credit increase, income_tax change is lower because CDCC is non-refundable (can only reduce liability to $0) Co-Authored-By: Claude Opus 4.5 --- us/cdctc_single_parent_work_requirement.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/us/cdctc_single_parent_work_requirement.ipynb b/us/cdctc_single_parent_work_requirement.ipynb index 2b902f5..0d770f3 100644 --- a/us/cdctc_single_parent_work_requirement.ipynb +++ b/us/cdctc_single_parent_work_requirement.ipynb @@ -54,12 +54,12 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": "# Create results table\nresults = pd.DataFrame({\n 'Metric': ['Federal Budgetary Impact', 'CDCC Credit Cost', 'Claimants', 'Average Credit'],\n 'Baseline': [\n f'${baseline_income_tax.sum()/1e9:.2f}B',\n f'${baseline_cdcc.sum()/1e9:.2f}B',\n f'{baseline_claimants/1e6:.2f}M',\n f'${baseline_avg:.0f}',\n ],\n 'Reform': [\n f'${reform_income_tax.sum()/1e9:.2f}B',\n f'${reform_cdcc.sum()/1e9:.2f}B',\n f'{reform_claimants/1e6:.2f}M',\n f'${reform_avg:.0f}',\n ],\n 'Change': [\n f'${federal_revenue_change/1e9:.2f}B',\n f'+${cdcc_cost/1e9:.2f}B',\n f'+{new_claimants/1e6:.2f}M',\n f'${reform_avg - baseline_avg:+.0f}',\n ]\n})\n\nresults" + "source": "# Create results table\nresults = pd.DataFrame({\n 'Metric': ['CDCC Cost', 'Income Tax Revenue', 'Claimants', 'Average Credit'],\n 'Baseline': [\n f'${baseline_cdcc.sum()/1e9:.2f}B',\n f'${baseline_income_tax.sum()/1e9:.2f}B',\n f'{baseline_claimants/1e6:.2f}M',\n f'${baseline_avg:.0f}',\n ],\n 'Reform': [\n f'${reform_cdcc.sum()/1e9:.2f}B',\n f'${reform_income_tax.sum()/1e9:.2f}B',\n f'{reform_claimants/1e6:.2f}M',\n f'${reform_avg:.0f}',\n ],\n 'Change': [\n f'+${cdcc_cost/1e9:.2f}B',\n f'${federal_revenue_change/1e9:.2f}B',\n f'+{new_claimants/1e6:.2f}M',\n f'${reform_avg - baseline_avg:+.0f}',\n ]\n})\n\nresults" }, { "cell_type": "markdown", "metadata": {}, - "source": "## Summary\n\nThe CDCTC single parent work requirement reform would:\n\n- **Federal budgetary impact**: ~$-437M (reduced income tax revenue)\n- **State CDCC impact**: ~$198M additional state credits\n- **CDCC credit increase**: ~$740M\n- **New claimants**: ~920,000 additional families\n\nThe reform primarily benefits one-earner married couples with childcare expenses who are currently excluded from the credit.\n\n**Implementation note:** This reform overrides `cdcc_relevant_expenses` directly rather than `min_head_spouse_earned` to avoid affecting other programs that use the minimum earnings calculation for non-CDCC purposes." + "source": "## Summary\n\nThe CDCTC single parent work requirement reform would:\n\n- **Federal CDCC cost increase**: ~$740M annually\n- **Federal income tax revenue change**: ~-$437M (less than CDCC increase because CDCC is non-refundable)\n- **State CDCC impact**: ~$198M additional state credits\n- **New claimants**: ~920,000 additional families\n\nThe reform primarily benefits one-earner married couples with childcare expenses who are currently excluded from the credit.\n\n**Implementation note:** This reform overrides `cdcc_relevant_expenses` directly rather than `min_head_spouse_earned` to avoid affecting other programs that use the minimum earnings calculation for non-CDCC purposes." }, { "cell_type": "markdown",