diff --git a/changelog.d/general-assistance-income-sources.fixed.md b/changelog.d/general-assistance-income-sources.fixed.md new file mode 100644 index 00000000000..47e1e9a8b99 --- /dev/null +++ b/changelog.d/general-assistance-income-sources.fixed.md @@ -0,0 +1 @@ +Count general assistance as unearned income in WIC, school meals, and the DC, Illinois, and Montana TANF income lists, and give Maine TANF its own unearned income list that excludes general assistance. diff --git a/policyengine_us/parameters/gov/states/co/cdhs/tanf/income/unearned.yaml b/policyengine_us/parameters/gov/states/co/cdhs/tanf/income/unearned.yaml index 807f6a385ee..eb09d81b0c0 100644 --- a/policyengine_us/parameters/gov/states/co/cdhs/tanf/income/unearned.yaml +++ b/policyengine_us/parameters/gov/states/co/cdhs/tanf/income/unearned.yaml @@ -13,6 +13,7 @@ values: - social_security - workers_compensation - disability_benefits + # general_assistance is exempt under 9 CCR 2503-6, Section 3.605.4(A)(7) metadata: unit: list period: month @@ -20,3 +21,5 @@ metadata: reference: - title: 9 CCR 2503-6, Section 3.605.3 — Countable Unearned Income Definition href: https://www.sos.state.co.us/CCR/GenerateRulePdf.do?ruleVersionId=10321#page=45 + - title: 9 CCR 2503-6, Section 3.605.4 (A)(7) — Exempt Unearned Income (General Assistance) + href: https://www.law.cornell.edu/regulations/colorado/9-CCR-2503-6-3.605 diff --git a/policyengine_us/parameters/gov/states/dc/dhs/tanf/income/sources/unearned.yaml b/policyengine_us/parameters/gov/states/dc/dhs/tanf/income/sources/unearned.yaml index b8d3fb595cd..967168a5a6a 100644 --- a/policyengine_us/parameters/gov/states/dc/dhs/tanf/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/states/dc/dhs/tanf/income/sources/unearned.yaml @@ -11,6 +11,8 @@ values: - pension_income - unemployment_compensation - gi_cash_assistance + # D.C. Code 4-205.05(4) counts District and federal public assistance payments + - general_assistance - social_security metadata: diff --git a/policyengine_us/parameters/gov/states/il/dhs/tanf/income/sources/unearned.yaml b/policyengine_us/parameters/gov/states/il/dhs/tanf/income/sources/unearned.yaml index 11b03c57438..9592926035c 100644 --- a/policyengine_us/parameters/gov/states/il/dhs/tanf/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/states/il/dhs/tanf/income/sources/unearned.yaml @@ -15,6 +15,8 @@ values: - debt_relief - illicit_income - miscellaneous_income + # 89 Ill. Adm. Code 112.100(c) counts need based payments and cash assistance + - general_assistance #- pension_income # exempt #- veterans_benefits # exempt #- gi_cash_assistance # exempt diff --git a/policyengine_us/parameters/gov/states/me/dhhs/tanf/income/sources/unearned.yaml b/policyengine_us/parameters/gov/states/me/dhhs/tanf/income/sources/unearned.yaml new file mode 100644 index 00000000000..77ce6beea62 --- /dev/null +++ b/policyengine_us/parameters/gov/states/me/dhhs/tanf/income/sources/unearned.yaml @@ -0,0 +1,30 @@ +description: Maine counts these income sources as unearned income under the Temporary Assistance for Needy Families program. +values: + 2013-11-01: + - veterans_benefits + - survivor_benefits + - rental_income + # Chapter III, Section B(2)(a) excludes the first $50 of child support + # per month; the exclusion is applied downstream + - child_support_received + - alimony_income + # Chapter III, Section B(2)(k) excludes gifts of money up to $150 per + # household in three months; the exclusion is not modeled + - financial_assistance + - dividend_income + - interest_income + - miscellaneous_income + - pension_income + - unemployment_compensation + - gi_cash_assistance + - social_security + # Chapter III, Section B(2)(d) excludes General Assistance, so + # general_assistance is not counted + +metadata: + unit: list + period: year + label: Maine TANF unearned income sources + reference: + - title: 10-144 C.M.R. Chapter 331, Chapter III - Eligibility Requirements (Financial), Section B + href: https://www.law.cornell.edu/regulations/maine/C-M-R-10-144-ch-331-III diff --git a/policyengine_us/parameters/gov/states/mt/dhs/tanf/income/sources/unearned.yaml b/policyengine_us/parameters/gov/states/mt/dhs/tanf/income/sources/unearned.yaml index e9794d92d9d..1fa50c3f231 100644 --- a/policyengine_us/parameters/gov/states/mt/dhs/tanf/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/states/mt/dhs/tanf/income/sources/unearned.yaml @@ -12,6 +12,11 @@ values: - social_security - veterans_benefits - workers_compensation + # TANF 501-1 (Assistance Programs) and Mont. Admin. r. 37.78.402 count + # Bureau of Indian Affairs General Assistance; general_assistance is a + # proxy for BIA General Assistance since Montana has no broad state + # general assistance program + - general_assistance # Adoption Subsidies # TANF from other states # Capital Gains diff --git a/policyengine_us/parameters/gov/states/nc/ncdhhs/tanf/income/unearned.yaml b/policyengine_us/parameters/gov/states/nc/ncdhhs/tanf/income/unearned.yaml index 1f221d5e636..80e169c2dcb 100644 --- a/policyengine_us/parameters/gov/states/nc/ncdhhs/tanf/income/unearned.yaml +++ b/policyengine_us/parameters/gov/states/nc/ncdhhs/tanf/income/unearned.yaml @@ -12,6 +12,8 @@ values: - unemployment_compensation - gi_cash_assistance - social_security + # general_assistance is not counted per the WF-114 income chart, which + # starts on the referenced page 6; the General Assistance row is on page 11 metadata: unit: list period: year diff --git a/policyengine_us/parameters/gov/usda/school_meals/income/sources.yaml b/policyengine_us/parameters/gov/usda/school_meals/income/sources.yaml index 946c2342885..a8fa7b0aeef 100644 --- a/policyengine_us/parameters/gov/usda/school_meals/income/sources.yaml +++ b/policyengine_us/parameters/gov/usda/school_meals/income/sources.yaml @@ -12,6 +12,8 @@ values: - social_security - ssi - tanf + # 7 CFR 245.6(a)(5)(ii) lists welfare among the sources of cash income. + - general_assistance - pension_income - survivor_benefits - financial_assistance @@ -25,6 +27,8 @@ values: metadata: reference: + - title: Code of Federal Regulations, 7 CFR 245.6(a)(5)(ii) + href: https://www.law.cornell.edu/cfr/text/7/245.6#a_5_ii - title: Code of Federal Regulations, 7 CFR 273.9(b) href: https://www.law.cornell.edu/cfr/text/7/273.9#b - title: Code of Federal Regulations, 7 CFR 247.9(d)(1) diff --git a/policyengine_us/parameters/gov/usda/wic/income/sources.yaml b/policyengine_us/parameters/gov/usda/wic/income/sources.yaml index bb9455c81b3..436a7223dd2 100644 --- a/policyengine_us/parameters/gov/usda/wic/income/sources.yaml +++ b/policyengine_us/parameters/gov/usda/wic/income/sources.yaml @@ -11,6 +11,8 @@ values: - social_security - ssi - tanf + # 7 CFR 246.7(d)(2)(ii)(E) counts public assistance or welfare payments. + - general_assistance - pension_income - survivor_benefits - financial_assistance @@ -29,5 +31,5 @@ values: metadata: reference: - - title: 7 CFR 246.7(d)(2)(ii)(A) - href: https://www.law.cornell.edu/cfr/text/7/246.7#d_2_ii_A + - title: 7 CFR 246.7(d)(2)(ii) - Definition of income + href: https://www.law.cornell.edu/cfr/text/7/246.7#d_2_ii diff --git a/policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/income/dc_tanf_countable_unearned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/income/dc_tanf_countable_unearned_income.yaml index 20de536c44a..5d81d088389 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/income/dc_tanf_countable_unearned_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/income/dc_tanf_countable_unearned_income.yaml @@ -47,3 +47,22 @@ child_support_received: 2_000 # disregard $150 per month * 12 output: dc_tanf_countable_unearned_income: 200 + + +- name: General assistance counts as unearned income, $1,200 per year + period: 2023 + input: + state_code: DC + general_assistance: 1_200 + output: + dc_tanf_countable_unearned_income: 1_200 + + +- name: No general assistance, $1,200 of pension income only, $1,200 per year + period: 2023 + input: + state_code: DC + pension_income: 1_200 + general_assistance: 0 + output: + dc_tanf_countable_unearned_income: 1_200 diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/dhs/tanf/income/unearned/il_tanf_gross_unearned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/dhs/tanf/income/unearned/il_tanf_gross_unearned_income.yaml new file mode 100644 index 00000000000..6afccde2681 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/il/dhs/tanf/income/unearned/il_tanf_gross_unearned_income.yaml @@ -0,0 +1,31 @@ +- name: Case 1, general assistance counts as unearned income. + period: 2025-01 + absolute_error_margin: 0.1 + input: + people: + person1: + age: 30 + general_assistance: 2_400 + households: + household: + members: [person1] + state_code: IL + output: + # 2,400 / 12 = 200 + il_tanf_gross_unearned_income: 200 + +- name: Case 2, exempt veterans benefits and pensions do not count. + period: 2025-01 + absolute_error_margin: 0.1 + input: + people: + person1: + age: 30 + veterans_benefits: 2_400 + pension_income: 1_200 + households: + household: + members: [person1] + state_code: IL + output: + il_tanf_gross_unearned_income: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/me/dhhs/tanf/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/me/dhhs/tanf/integration.yaml index 430efdd489e..b5cc46aeea9 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/me/dhhs/tanf/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/me/dhhs/tanf/integration.yaml @@ -1032,3 +1032,40 @@ me_tanf_eligible: true # Benefit = min($669, $769 - $0) = $669 me_tanf: 669 + +- name: Case 1 regression, general assistance does not reduce the benefit. + period: 2025-01 + absolute_error_margin: 1 + input: + people: + person1: + age: 30 + employment_income_before_lsr: 12_000 # $1,000/month gross earned income + general_assistance: 2_400 # $200/month, excluded under Chapter III, Section B(2)(d) + is_tax_unit_head_or_spouse: true + immigration_status: CITIZEN + person2: + age: 8 + is_tax_unit_dependent: true + immigration_status: CITIZEN + person3: + age: 5 + is_tax_unit_dependent: true + immigration_status: CITIZEN + spm_units: + spm_unit: + members: [person1, person2, person3] + childcare_expenses: 4_200 # $350/month child care + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: ME + output: + # Same as Case 1: $96 countable earned income, $0 countable unearned income + me_tanf_countable_unearned_income: 0 + me_tanf_countable_income: 96 + # Benefit = min($895, $1,030 - $96) = $895, unchanged by general assistance + me_tanf: 895 diff --git a/policyengine_us/tests/policy/baseline/gov/states/me/dhhs/tanf/me_tanf_countable_unearned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/me/dhhs/tanf/me_tanf_countable_unearned_income.yaml index 213660052cb..a63b95e015d 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/me/dhhs/tanf/me_tanf_countable_unearned_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/me/dhhs/tanf/me_tanf_countable_unearned_income.yaml @@ -2,7 +2,7 @@ # Tests gross unearned income minus child support deduction # Source: 22 M.R.S. Section 3762(3)(B)(7-D) # -# Note: tanf_gross_unearned_income is a MONTH variable +# Note: me_tanf_gross_unearned_income is a MONTH variable - name: Case 1, zero unearned income. period: 2025-01 diff --git a/policyengine_us/tests/policy/baseline/gov/states/me/dhhs/tanf/me_tanf_gross_unearned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/me/dhhs/tanf/me_tanf_gross_unearned_income.yaml new file mode 100644 index 00000000000..e705f81131a --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/me/dhhs/tanf/me_tanf_gross_unearned_income.yaml @@ -0,0 +1,66 @@ +# Maine TANF Gross Unearned Income Tests +# Source: 10-144 C.M.R. Chapter 331, Chapter III, Section B + +- name: Case 1, social security counts as unearned income. + period: 2025-01 + absolute_error_margin: 0.1 + input: + people: + person1: + age: 30 + social_security: 3_000 + households: + household: + members: [person1] + state_code: ME + output: + # 3,000 / 12 = 250 + me_tanf_gross_unearned_income: 250 + +- name: Case 2, general assistance is excluded under Chapter III, Section B(2)(d). + period: 2025-01 + absolute_error_margin: 0.1 + input: + people: + person1: + age: 30 + general_assistance: 2_400 + gi_cash_assistance: 1_200 + households: + household: + members: [person1] + state_code: ME + output: + # general_assistance excluded; gi_cash_assistance 1,200 / 12 = 100 + me_tanf_gross_unearned_income: 100 + +- name: Case 3, earned income does not count as unearned income. + period: 2025-01 + absolute_error_margin: 0.1 + input: + people: + person1: + age: 30 + employment_income: 24_000 + households: + household: + members: [person1] + state_code: ME + output: + me_tanf_gross_unearned_income: 0 + +- name: Case 4, cash from friends or relatives counts as unearned income. + period: 2025-01 + absolute_error_margin: 0.1 + input: + people: + person1: + age: 30 + financial_assistance: 2_400 + households: + household: + members: [person1] + state_code: ME + output: + # 2,400 / 12 = 200 + me_tanf_gross_unearned_income: 200 diff --git a/policyengine_us/tests/policy/baseline/gov/states/mt/dhs/tanf/income/mt_tanf_gross_unearned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/mt/dhs/tanf/income/mt_tanf_gross_unearned_income.yaml index 4315ea704ee..744e7b690d6 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/mt/dhs/tanf/income/mt_tanf_gross_unearned_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/mt/dhs/tanf/income/mt_tanf_gross_unearned_income.yaml @@ -86,3 +86,36 @@ # child_support_expense: 3,600/year = 300/month # max(300 - 300, 0) = 0 mt_tanf_gross_unearned_income: 0 + +- name: Case 6, general assistance counts as unearned income. + period: 2025-01 + absolute_error_margin: 0.1 + input: + people: + person1: + age: 30 + general_assistance: 2_400 + households: + household: + members: [person1] + state_code: MT + output: + # general_assistance: 2,400/year = 200/month + mt_tanf_gross_unearned_income: 200 + +- name: Case 7, no general assistance leaves other unearned income unchanged. + period: 2025-01 + absolute_error_margin: 0.1 + input: + people: + person1: + age: 30 + social_security: 2_400 + general_assistance: 0 + households: + household: + members: [person1] + state_code: MT + output: + # social_security: 2,400/year = 200/month; general_assistance: 0 + mt_tanf_gross_unearned_income: 200 diff --git a/policyengine_us/tests/policy/baseline/gov/usda/school_meals/school_meal_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/usda/school_meals/school_meal_countable_income.yaml index fad268213f1..2aa2a9ce3db 100644 --- a/policyengine_us/tests/policy/baseline/gov/usda/school_meals/school_meal_countable_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/usda/school_meals/school_meal_countable_income.yaml @@ -39,3 +39,19 @@ child_support_received: 3_000 output: school_meal_countable_income: 13_000 + +- name: Includes general assistance. + period: 2026 + input: + employment_income: 10_000 + general_assistance: 3_000 + output: + school_meal_countable_income: 13_000 + +- name: Without general assistance, income is the other income only. + period: 2026 + input: + employment_income: 10_000 + general_assistance: 0 + output: + school_meal_countable_income: 10_000 diff --git a/policyengine_us/tests/policy/baseline/gov/usda/wic/wic_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/usda/wic/wic_countable_income.yaml index 6d29311b9b2..eee1ccc214f 100644 --- a/policyengine_us/tests/policy/baseline/gov/usda/wic/wic_countable_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/usda/wic/wic_countable_income.yaml @@ -34,3 +34,29 @@ members: [p1] output: wic_countable_income: 10_000 + +- name: WIC countable income includes general assistance. + period: 2026 + input: + people: + p1: + employment_income: 10_000 + general_assistance: 3_000 + spm_units: + spm_unit: + members: [p1] + output: + wic_countable_income: 13_000 + +- name: WIC countable income without general assistance is the other income only. + period: 2026 + input: + people: + p1: + employment_income: 10_000 + general_assistance: 0 + spm_units: + spm_unit: + members: [p1] + output: + wic_countable_income: 10_000 diff --git a/policyengine_us/variables/gov/states/me/dhhs/tanf/income/unearned/me_tanf_countable_unearned_income.py b/policyengine_us/variables/gov/states/me/dhhs/tanf/income/unearned/me_tanf_countable_unearned_income.py index 5ec8ad9d13a..696299b492a 100644 --- a/policyengine_us/variables/gov/states/me/dhhs/tanf/income/unearned/me_tanf_countable_unearned_income.py +++ b/policyengine_us/variables/gov/states/me/dhhs/tanf/income/unearned/me_tanf_countable_unearned_income.py @@ -18,7 +18,7 @@ def formula(spm_unit, period, parameters): # is excluded from income calculations p = parameters(period).gov.states.me.dhhs.tanf - gross_unearned = add(spm_unit, period, ["tanf_gross_unearned_income"]) + gross_unearned = add(spm_unit, period, ["me_tanf_gross_unearned_income"]) child_support = add(spm_unit, period, ["child_support_received"]) child_support_deduction = min_(child_support, p.child_support_deduction) diff --git a/policyengine_us/variables/gov/states/me/dhhs/tanf/income/unearned/me_tanf_gross_unearned_income.py b/policyengine_us/variables/gov/states/me/dhhs/tanf/income/unearned/me_tanf_gross_unearned_income.py new file mode 100644 index 00000000000..193ac7069e6 --- /dev/null +++ b/policyengine_us/variables/gov/states/me/dhhs/tanf/income/unearned/me_tanf_gross_unearned_income.py @@ -0,0 +1,16 @@ +from policyengine_us.model_api import * + + +class me_tanf_gross_unearned_income(Variable): + value_type = float + entity = Person + label = "Maine Temporary Assistance for Needy Families (TANF) gross unearned income" + unit = USD + definition_period = MONTH + reference = ( + "https://www.mainelegislature.org/legis/statutes/22/title22sec3762.html", + "https://www.law.cornell.edu/regulations/maine/C-M-R-10-144-ch-331-III", + ) + defined_for = StateCode.ME + + adds = "gov.states.me.dhhs.tanf.income.sources.unearned" diff --git a/policyengine_us/variables/household/income/person/misc/financial_assistance.py b/policyengine_us/variables/household/income/person/misc/financial_assistance.py index 55e5d37fdb2..d69444b7764 100644 --- a/policyengine_us/variables/household/income/person/misc/financial_assistance.py +++ b/policyengine_us/variables/household/income/person/misc/financial_assistance.py @@ -5,6 +5,8 @@ class financial_assistance(Variable): value_type = float entity = Person label = "financial assistance" - documentation = "Cash financial assistance from outside the household." + documentation = ( + "Cash financial assistance from friends or relatives outside the household." + ) unit = USD definition_period = YEAR