PolicyEngine / PolicyEngine/policyengine-us

Childcare subsidy programs should use *_before_lsr income variables to avoid LSR circular dependency

Closed
#7,024 1 comment 0 reactions 1 assignee Claimed by @hua7450 View on GitHub
Dominant language
Python
Stars
162
Forks
212
Avg merge
3d 3h
Merged PRs (30d)
96

Description

## Summary

Childcare subsidy programs flow into `household_net_income` via `household_state_benefits`. When Labor Supply Response (LSR) is enabled in microsimulation, programs that use LSR-affected income variables (like `employment_income`) can create circular dependencies or incorrect results.

This blocks SNAP from using `childcare_expenses` (the policy-correct net amount after subsidies) instead of `pre_subsidy_childcare_expenses`.

## The Cycle

```
employment_income (includes LSR behavioral response)


Childcare subsidy eligibility/calculation


Subsidy amount → household_state_benefits → household_net_income


relative_income_change (compares baseline vs reform)


income_elasticity_lsr → employment_income_behavioral_response


employment_income ← CYCLE
```

## Current State Audit

| Program | Income Variable Used | Status |
|---------|---------------------|--------|
| MA CCFA | `employment_income_before_lsr`, `self_employment_income_before_lsr` | ✅ Correct |
| CA CalWORKs Child Care | `earned_income` | ❌ Needs fix |
| CO CCAP | `snap_earned_income` (uses `employment_income`) | ❌ Needs fix |
| NE Child Care Subsidy | `spm_unit_net_income` | ❌ Needs fix |
| NC SCCA | `employment_income`, `self_employment_income` | ❌ Needs fix |
| DC CCSP | `employment_income`, `self_employment_income` | ❌ Needs fix |
| IL CCAP | `employment_income`, `self_employment_income` | ❌ Needs fix |
| TX CCS | `employment_income`, `self_employment_income` | ❌ Needs fix |

## Proposed Fix

### 1. Update parameter files to use `*_before_lsr` versions

For NC, DC, IL, TX - update their income source parameter files:
```yaml
# Change FROM:
- employment_income
- self_employment_income

# Change TO:
- employment_income_before_lsr
- self_employment_income_before_lsr
```

### 2. Create `earned_income_before_lsr` variable

For CA CalWORKs which uses `earned_income`:
```python
class earned_income_before_lsr(Variable):
value_type = float
entity = Person
label = "Earned income (before labor supply response)"
unit = USD
definition_period = YEAR
adds = ["employment_income_before_lsr", "self_employment_income_before_lsr"]
```

### 3. Fix CO CCAP

Either create `snap_earned_income_before_lsr` or change the parameter to use base income sources.

### 4. Fix NE Child Care Subsidy

Replace `spm_unit_net_income` with appropriate income components that don't include benefits.

### 5. Add NC to `childcare_expenses.py`

NC SCCA is in `household_state_benefits` but missing from the childcare subsidy list:
```python
STATES_WITH_CHILD_CARE_SUBSIDIES = ["CA", "CO", "NE", "MA"] # Add "NC"
```

### 6. Update SNAP to use `childcare_expenses`

Once childcare subsidies are fixed, SNAP can use the policy-correct net childcare expenses.

## Broader Context

This same pattern applies to **all benefit programs** in `household_net_income`. Any benefit that:
1. Is included in `household_benefits` or `household_state_benefits`
2. Uses LSR-affected income variables (`employment_income`, `self_employment_income`, `earned_income`, `spm_unit_net_income`)

...should be updated to use `*_before_lsr` versions to ensure correct microsimulation results when LSR is enabled.

## Files Affected

- `policyengine_us/parameters/gov/states/nc/ncdhhs/scca/income/sources.yaml`
- `policyengine_us/parameters/gov/states/dc/dhs/ccsp/income/countable_income/sources.yaml`
- `policyengine_us/parameters/gov/states/il/dhs/ccap/income/countable_income/sources.yaml`
- `policyengine_us/parameters/gov/states/tx/twc/ccs/income/sources.yaml`
- `policyengine_us/variables/gov/states/ca/cdss/tanf/child_care/eligibility/ca_calworks_child_care_meets_work_requirement.py`
- `policyengine_us/variables/gov/states/co/ccap/co_ccap_countable_income.py`
- `policyengine_us/variables/gov/states/ne/dhhs/child_care_subsidy/ne_child_care_subsidy.py`
- `policyengine_us/variables/household/expense/childcare/childcare_expenses.py`
- `policyengine_us/variables/gov/usda/snap/income/deductions/snap_dependent_care_deduction.py`

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.