Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions changelog_entry.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
- bump: patch
changes:
fixed:
- Updated CA CalWORKs, CO CCAP, NE Child Care, and NC SCCA to use *_before_lsr income variables to avoid circular dependency issues in microsimulation.
- SNAP dependent care deduction now uses childcare_expenses (net of subsidies) instead of pre_subsidy_childcare_expenses.
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
description: States with modeled child care subsidy programs that reduce out-of-pocket childcare expenses.
values:
2020-01-01:
# With this list parameter, we don't need the wrapper variables anymore. Keep existing ones for API partner
- ca_child_care_subsidies
- co_child_care_subsidies
- ma_child_care_subsidies
- nc_scca
- ne_child_care_subsidies

metadata:
unit: list
period: year
label: Child care subsidy programs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
description: Colorado includes these income sources as countable income under the Child Care Assistance Program.
values:
2020-01-01:
# Earned income (before LSR to avoid circular dependency)
- employment_income_before_lsr
- self_employment_income_before_lsr
# Unearned income
- social_security
- pension_income
- veterans_benefits
- dividend_income
- interest_income
- rental_income
- alimony_income
- child_support_received
# Excluded per 3.111(J): SSI, children's earnings

metadata:
unit: list
period: year
label: Colorado CCAP countable income sources
reference:
- title: 8 CCR 1403-1-3.111(I) - Income Inclusions
href: https://www.sos.state.co.us/CCR/GenerateRulePdf.do?ruleVersionId=11042&fileName=8%20CCR%201403-1#page=23
- title: 1400 CO Code Regs 8 CCR 1403-1-3.111
href: https://regulations.justia.com/states/colorado/1400/1403/rule-8-ccr-1403-1/applicant-rights/section-8-ccr-1403-1-3-111/
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,23 @@ description: North Carolina counts these sources as gross income for its Subsidi

values:
2024-08-01:
- employment_income
- self_employment_income
- pension_income
- veterans_benefits
- unemployment_compensation
- disability_benefits
- workers_compensation
- social_security
- retirement_distributions
- rental_income
- child_support_received
- alimony_income
- dividend_income
- interest_income
- miscellaneous_income
# Earned income (before LSR to avoid circular dependency)
- employment_income_before_lsr
- self_employment_income_before_lsr
# Unearned income
- pension_income
- veterans_benefits
- unemployment_compensation
- disability_benefits
- workers_compensation
- social_security
- retirement_distributions
- rental_income
- child_support_received
- alimony_income
- dividend_income
- interest_income
- miscellaneous_income

metadata:
unit: list
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
description: Nebraska includes these income sources as countable income under the Child Care Subsidy Program.
values:
2021-01-01:
# Earned income (before LSR to avoid circular dependency)
- employment_income_before_lsr
- self_employment_income_before_lsr
# Unearned income per NAC 392-2-010
- social_security
- child_support_received
- unemployment_compensation
- pension_income
- alimony_income
# Excluded per NAC 392-2-010: children's earnings (age 18 or younger in school),
# Title I WIOA program income

metadata:
unit: list
period: year
label: Nebraska Child Care Subsidy countable income sources
reference:
- title: NAC 392-2-010 - Income
href: https://dhhs.ne.gov/Guidance%20Docs/Title%20392%20-%20Child%20Care%20Subsidy.pdf#page=3
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
parent:
is_child: false
ca_calworks_child_care_welfare_to_work: 0
earned_income: 0
earned_income_before_lsr: 0
child:
is_child: true
age: 12
Expand All @@ -28,7 +28,7 @@
parent:
is_child: false
ca_calworks_child_care_welfare_to_work: 0
earned_income: 1
earned_income_before_lsr: 1
child1:
is_child: true
age: 3
Expand All @@ -55,7 +55,7 @@
parent:
is_child: false
ca_calworks_child_care_welfare_to_work: 1
earned_income: 0
earned_income_before_lsr: 0
child:
is_child: true
age: 12
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,10 @@
- name: Integration test - every person has to be eligible based on immigration status
period: 2023
input:
people:
people:
person1:
immigration_status: CITIZEN
earned_income: 1_000
earned_income_before_lsr: 1_000
person2:
immigration_status: ASYLEE
age: 2
Expand All @@ -72,7 +72,7 @@
people:
person1:
immigration_status: UNDOCUMENTED
earned_income: 1_000
earned_income_before_lsr: 1_000
person2:
immigration_status: ASYLEE
age: 2
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
people:
person:
ca_calworks_child_care_welfare_to_work: 0
earned_income: 1_000
earned_income_before_lsr: 1_000
households:
household:
members: [person]
Expand All @@ -18,7 +18,7 @@
people:
person:
ca_calworks_child_care_welfare_to_work: 20
earned_income: 0
earned_income_before_lsr: 0
households:
household:
members: [person]
Expand All @@ -32,7 +32,7 @@
people:
person:
ca_calworks_child_care_welfare_to_work: 0
earned_income: 0
earned_income_before_lsr: 0
households:
household:
members: [person]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
people:
parent:
age: 30
employment_income: 9_600
employment_income_before_lsr: 9_600
child1:
age: 4
spm_units:
Expand Down Expand Up @@ -36,7 +36,7 @@
people:
parent:
age: 30
employment_income: 12_000
employment_income_before_lsr: 12_000
child1:
age: 2
child2:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
period: 2024
input:
state_code: NC
employment_income: 0
self_employment_income: 0
employment_income_before_lsr: 0
self_employment_income_before_lsr: 0
pension_income: 0
veterans_benefits: 0
unemployment_compensation: 0
Expand All @@ -24,8 +24,8 @@
period: 2024
input:
state_code: NC
employment_income: 1_000
self_employment_income: 1_000
employment_income_before_lsr: 1_000
self_employment_income_before_lsr: 1_000
pension_income: 1_000
veterans_benefits: 1_000
unemployment_compensation: 1_000
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
ne_child_care_subsidy_eligible: true
spm_unit_pre_subsidy_childcare_expenses: 50
spm_unit_fpg: 100
spm_unit_net_income: 100
ne_child_care_subsidy_countable_income: 100
state_code: NE
output:
ne_child_care_subsidy: 50
Expand All @@ -15,7 +15,7 @@
ne_child_care_subsidy_eligible: true
spm_unit_pre_subsidy_childcare_expenses: 50
spm_unit_fpg: 100
spm_unit_net_income: 200
ne_child_care_subsidy_countable_income: 200
state_code: NE
output:
ne_child_care_subsidy: 36 # 50 - 0.07 * 200
Expand All @@ -26,7 +26,7 @@
ne_child_care_subsidy_eligible: true
spm_unit_pre_subsidy_childcare_expenses: 50
spm_unit_fpg: 100
spm_unit_net_income: 2_000
ne_child_care_subsidy_countable_income: 2_000
state_code: NE
output:
ne_child_care_subsidy: 0 # 50 - 0.07 * 2000 < 0
Expand All @@ -37,7 +37,7 @@
ne_child_care_subsidy_eligible: false
spm_unit_pre_subsidy_childcare_expenses: 50
spm_unit_fpg: 100
spm_unit_net_income: 100
ne_child_care_subsidy_countable_income: 100
state_code: NE
output:
ne_child_care_subsidy: 0
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
period: 2024
input:
spm_unit_fpg: 100
adjusted_gross_income: 185
ne_child_care_subsidy_countable_income: 185
state_code: NE
output:
ne_child_care_subsidy_income_eligible: true
Expand All @@ -11,7 +11,7 @@
period: 2024
input:
spm_unit_fpg: 100
adjusted_gross_income: 183
ne_child_care_subsidy_countable_income: 183
state_code: NE
output:
ne_child_care_subsidy_income_eligible: true
Expand All @@ -20,7 +20,7 @@
period: 2024
input:
spm_unit_fpg: 100
adjusted_gross_income: 186
ne_child_care_subsidy_countable_income: 186
state_code: NE
output:
ne_child_care_subsidy_income_eligible: false
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,19 @@
co_child_care_subsidies: 25
output:
childcare_expenses: 0

- name: NC SCCA subsidy (annual)
period: 2024
input:
pre_subsidy_childcare_expenses: 1_200
nc_scca: 600 # Annual subsidy amount
output:
childcare_expenses: 600 # 1_200 - 600 = 600

- name: NC SCCA subsidy (monthly)
period: 2024-01
input:
pre_subsidy_childcare_expenses: 1_200 # Annual input
nc_scca: 600 # Annual input
output:
childcare_expenses: 50 # Monthly: (1_200 - 600) / 12 = 50
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from policyengine_us.model_api import *


class earned_income_before_lsr(Variable):
value_type = float
entity = Person
label = "Earned income (before labor supply response)"
unit = USD
documentation = (
"Income from wages or self-employment, before behavioral responses"
)
definition_period = YEAR

adds = [
"employment_income_before_lsr",
"self_employment_income_before_lsr",
]
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ def formula(spm_unit, period, parameters):
welfare_to_work = person(
"ca_calworks_child_care_welfare_to_work", period
)
earned = person("earned_income", period)
earned = person("earned_income_before_lsr", period)
eligible_person = (welfare_to_work + earned) > 0
return spm_unit.any(eligible_person)
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ class co_ccap_countable_income(Variable):
value_type = float
entity = SPMUnit
definition_period = MONTH
label = "Colorado Child Care Assitance Program Countable Income"
reference = "https://www.sos.state.co.us/CCR/GenerateRulePdf.do?ruleVersionId=11042&fileName=8%20CCR%201403-1#page=22"
label = "Colorado Child Care Assistance Program Countable Income"
reference = "https://regulations.justia.com/states/colorado/1400/1403/rule-8-ccr-1403-1/applicant-rights/section-8-ccr-1403-1-3-111/"
unit = USD
# TODO: Use income components from the manual.
adds = ["snap_earned_income", "snap_unearned_income"]

adds = "gov.states.co.ccap.income.countable_sources"
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def formula(spm_unit, period, parameters):
childcare_expenses = spm_unit(
"spm_unit_pre_subsidy_childcare_expenses", period
)
income = spm_unit("spm_unit_net_income", period)
income = spm_unit("ne_child_care_subsidy_countable_income", period)
fpg = spm_unit("spm_unit_fpg", period)
fpg_fraction = fpg * p.fpg_fraction.fee_free_limit
income_above_fpg_fraction = income > fpg_fraction
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from policyengine_us.model_api import *


class ne_child_care_subsidy_countable_income(Variable):
value_type = float
entity = SPMUnit
label = "Nebraska Child Care Subsidy countable income"
unit = USD
definition_period = YEAR
reference = "https://dhhs.ne.gov/Guidance%20Docs/Title%20392%20-%20Child%20Care%20Subsidy.pdf"
defined_for = StateCode.NE

adds = "gov.states.ne.dhhs.child_care_subsidy.income.countable_sources"
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def formula(spm_unit, period, parameters):
p = parameters(
period
).gov.states.ne.dhhs.child_care_subsidy.fpg_fraction
income = add(spm_unit, period, ["adjusted_gross_income"])
income = spm_unit("ne_child_care_subsidy_countable_income", period)
fpg = spm_unit("spm_unit_fpg", period)
income_limit = fpg * p.initial_eligibility
return income <= income_limit
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ class snap_dependent_care_deduction(Variable):
definition_period = MONTH
reference = "https://www.law.cornell.edu/uscode/text/7/2014#e_3"

# Use pre-subsidy expenses to avoid circular dependency
# (childcare subsidies depend on income, which would create a
# circular dependency if SNAP deductions depended on subsidized
# childcare expenses).
adds = ["pre_subsidy_childcare_expenses"]
# Use childcare_expenses (net of subsidies) - this is policy-correct
# as families should only deduct expenses they actually pay.
# Childcare subsidies use *_before_lsr income to avoid LSR cycle.
adds = ["childcare_expenses"]
Loading