From a89521a1f774519418552c58d60ec079f89926d9 Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 7 Jan 2026 18:01:53 -0500 Subject: [PATCH 01/11] cherry pick --- changelog_entry.yaml | 4 + .../tanf/grant_standard/group2/addition.yaml | 12 ++ .../dss/tanf/grant_standard/group2/main.yaml | 32 +++++ .../dss/tanf/grant_standard/group2/max.yaml | 12 ++ .../tanf/grant_standard/group3/addition.yaml | 12 ++ .../dss/tanf/grant_standard/group3/main.yaml | 32 +++++ .../dss/tanf/grant_standard/group3/max.yaml | 12 ++ .../deduction/care_expenses_full_time.yaml | 25 ++++ .../deduction/care_expenses_part_time.yaml | 12 ++ .../tanf/income/deduction/earned/flat.yaml | 30 +++++ .../income/deduction/earned/percentage.yaml | 13 ++ .../deduction/full_time_work_hours.yaml | 12 ++ .../unearned/monthly_child_support.yaml | 12 ++ .../unearned/montly_interest_income.yaml | 12 ++ .../states/va/dss/tanf/income/unearned.yaml | 20 +++ .../states/va/dss/tanf/localities/group3.yaml | 22 +++ .../tanf/need_standard/group2/addition.yaml | 12 ++ .../dss/tanf/need_standard/group2/main.yaml | 32 +++++ .../tanf/need_standard/group3/addition.yaml | 12 ++ .../dss/tanf/need_standard/group3/main.yaml | 32 +++++ .../up_grant_standard/group2/addition.yaml | 12 ++ .../tanf/up_grant_standard/group2/main.yaml | 32 +++++ .../tanf/up_grant_standard/group2/max.yaml | 12 ++ .../up_grant_standard/group3/addition.yaml | 12 ++ .../tanf/up_grant_standard/group3/main.yaml | 32 +++++ .../tanf/up_grant_standard/group3/max.yaml | 12 ++ .../va/dss/tanf/va_tanf_minimum_payment.yaml | 12 ++ .../tanf/eligibility/va_tanf_eligibility.yaml | 26 ++++ .../va_tanf_income_eligibility.yaml | 39 ++++++ .../eligibility/va_tanf_is_full_time.yaml | 59 +++++++++ .../eligibility/va_up_tanf_eligibility.yaml | 125 ++++++++++++++++++ .../tanf/income/va_tanf_care_expenses.yaml | 79 +++++++++++ .../va_tanf_countable_earned_income.yaml | 36 +++++ .../tanf/income/va_tanf_countable_income.yaml | 29 ++++ .../va_tanf_countable_unearned_income.yaml | 77 +++++++++++ .../income/va_tanf_gross_earned_income.yaml | 64 +++++++++ .../gov/states/va/dss/tanf/va_tanf.yaml | 95 +++++++++++++ .../va/dss/tanf/va_tanf_grant_standard.yaml | 62 +++++++++ .../va/dss/tanf/va_tanf_need_standard.yaml | 62 +++++++++ .../dss/tanf/va_tanf_up_grant_standard.yaml | 62 +++++++++ .../tanf/eligibility/va_tanf_eligibility.py | 14 ++ .../eligibility/va_tanf_income_eligibility.py | 21 +++ .../tanf/eligibility/va_tanf_is_full_time.py | 18 +++ .../eligibility/va_up_tanf_eligibility.py | 20 +++ .../dss/tanf/income/va_tanf_care_expenses.py | 33 +++++ .../income/va_tanf_countable_earned_income.py | 20 +++ .../tanf/income/va_tanf_countable_income.py | 25 ++++ .../va_tanf_countable_unearned_income.py | 34 +++++ .../income/va_tanf_gross_earned_income.py | 21 +++ .../gov/states/va/dss/tanf/va_tanf.py | 43 ++++++ .../va/dss/tanf/va_tanf_grant_standard.py | 31 +++++ .../va/dss/tanf/va_tanf_need_standard.py | 31 +++++ .../va/dss/tanf/va_tanf_up_grant_standard.py | 31 +++++ .../demographic/person/work_hours_per_week.py | 9 ++ 54 files changed, 1652 insertions(+) create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/addition.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/main.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/max.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/addition.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/main.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/max.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_full_time.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/flat.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/percentage.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_child_support.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/montly_interest_income.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/income/unearned.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/addition.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/addition.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/addition.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/main.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/max.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/addition.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/main.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/max.yaml create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/va_tanf_minimum_payment.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_care_expenses.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_income.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_grant_standard.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_need_standard.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_up_grant_standard.yaml create mode 100644 policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.py create mode 100644 policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py create mode 100644 policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.py create mode 100644 policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py create mode 100644 policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_care_expenses.py create mode 100644 policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py create mode 100644 policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_income.py create mode 100644 policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py create mode 100644 policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.py create mode 100644 policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py create mode 100644 policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py create mode 100644 policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py create mode 100644 policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py create mode 100644 policyengine_us/variables/household/demographic/person/work_hours_per_week.py diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb2d..0f43791976f 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,4 @@ +- bump: minor + changes: + added: + - Implement Virginia TANF programs. diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/addition.yaml new file mode 100644 index 00000000000..5211bf58b55 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/addition.yaml @@ -0,0 +1,12 @@ +description: Virginia provides extra assistance for each person above 10 in a family living in group II localities of this amount. + +values: + 2020-07-01: 81 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF extra assistance for group II localities + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/main.yaml new file mode 100644 index 00000000000..b1bb3769f50 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/main.yaml @@ -0,0 +1,32 @@ +description: Virginia provides up to this amount to families living in group II localities in TANF, by household size. + +metadata: + unit: currency-USD + period: month + breakdown: + - range(1, 11) + label: Virginia TANF assistance for group II localities + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 + +1: + 2020-07-01: 226 +2: + 2020-07-01: 332 +3: + 2020-07-01: 417 +4: + 2020-07-01: 499 +5: + 2020-07-01: 589 +6: + 2020-07-01: 658 +7: + 2020-07-01: 736 +8: + 2020-07-01: 822 +9: + 2020-07-01: 895 +10: + 2020-07-01: 975 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/max.yaml new file mode 100644 index 00000000000..c8598fb1fce --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/max.yaml @@ -0,0 +1,12 @@ +description: Virginia provides up to maximum TANF assistance for families living in group II localities. + +values: + 2020-07-01: 625 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF maximum assistance for group II localities + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 \ No newline at end of file diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/addition.yaml new file mode 100644 index 00000000000..6ef9f7b106d --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/addition.yaml @@ -0,0 +1,12 @@ +description: Virginia provides extra assistance for each person above 10 in a family living in group III localities. + +values: + 2020-07-01: 81 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF extra assistance for group III localities. + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/main.yaml new file mode 100644 index 00000000000..f9940406c30 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/main.yaml @@ -0,0 +1,32 @@ +description: Virginia provides up to this amount to families living in group III localities in TANF, depending on household size. + +metadata: + unit: currency-USD + period: month + breakdown: + - range(1, 11) + label: Virginia TANF assistance for group III localities + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=26 + +1: + 2020-07-01: 316 +2: + 2020-07-01: 422 +3: + 2020-07-01: 508 +4: + 2020-07-01: 589 +5: + 2020-07-01: 701 +6: + 2020-07-01: 767 +7: + 2020-07-01: 847 +8: + 2020-07-01: 933 +9: + 2020-07-01: 1_007 +10: + 2020-07-01: 1_085 \ No newline at end of file diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/max.yaml new file mode 100644 index 00000000000..c5611d14554 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/max.yaml @@ -0,0 +1,12 @@ +description: Virginia provides up to maximum TANF assistance for families living in group III localities. + +values: + 2020-07-01: 745 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF maximum assistance for group III localities + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=26 \ No newline at end of file diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_full_time.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_full_time.yaml new file mode 100644 index 00000000000..1cbfd2fb9c4 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_full_time.yaml @@ -0,0 +1,25 @@ +description: Virginia deducts anticipated expenses for care of each dependent child or each incapacitated adult for full-time employed applicant of this amount, based on age. + +metadata: + unit: currency-USD + period: month + label: Virginia TANF monthly care expenses per child/disabled adult for full-time employment + type: single_amount + threshold_unit: year + amount_unit: currency-USD + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=51 + +# $175 per month, for care of each child, age 2 and older/incapacitated adult. +# $200 per month, for care of each child under 2. + +brackets: + - amount: + 2020-07-01: 200 + threshold: + 2020-07-01: 0 + - amount: + 2020-07-01: 175 + threshold: + 2020-07-01: 2 \ No newline at end of file diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml new file mode 100644 index 00000000000..ce458946767 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml @@ -0,0 +1,12 @@ +description: Virginia deducts anticipated expenses for care of each dependent child or each incapacitated adult for part-time employed applicant of this amount, based on age. + +metadata: + unit: currency-USD + period: month + label: Virginia TANF monthly care expenses per child/disabled adult for part-time employment + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=51 + +values: + 2020-07-01: 120 \ No newline at end of file diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/flat.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/flat.yaml new file mode 100644 index 00000000000..b824f6dd994 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/flat.yaml @@ -0,0 +1,30 @@ +description: Virginia excludes this amount of earnings from TANF countable income, based on household size. + +metadata: + unit: currency-USD + period: month + label: Virginia TANF monthly flat earnings exclusion + type: single_amount + threshold_unit: person + amount_unit: currency-USD + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=29 + +brackets: + - amount: + 2020-07-01: 167 + threshold: + 2020-07-01: 1 + - amount: + 2020-07-01: 178 + threshold: + 2020-07-01: 4 + - amount: + 2020-07-01: 209 + threshold: + 2020-07-01: 5 + - amount: + 2020-07-01: 240 + threshold: + 2020-07-01: 6 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/percentage.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/percentage.yaml new file mode 100644 index 00000000000..cdaf0b3e2a6 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/percentage.yaml @@ -0,0 +1,13 @@ +description: Virginia excludes this share of earnings from TANF countable income after a flat deduction. + +values: + 2020-07-01: 0.2 + +metadata: + unit: /1 + period: month + label: Virginia TANF earnings exclusion percent + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=29 + diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml new file mode 100644 index 00000000000..5880f821a2d --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml @@ -0,0 +1,12 @@ +description: Virginia classifies a worker as full-time based on these minimum hourly requirements. + +metadata: + unit: hour + period: week + label: Virginia TANF full-time weekly work hours + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=49 + +values: + 2020-07-01: 30 \ No newline at end of file diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_child_support.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_child_support.yaml new file mode 100644 index 00000000000..9cab82d276c --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_child_support.yaml @@ -0,0 +1,12 @@ +description: Virginia excludes this amount of monthly child support when computing unearned income. + +values: + 2020-07-01: 100 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF child support exclusion + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=57 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/montly_interest_income.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/montly_interest_income.yaml new file mode 100644 index 00000000000..1fde94f0be9 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/montly_interest_income.yaml @@ -0,0 +1,12 @@ +description: Virginia excludes this amount of interest income when computing unearned income. + +values: + 2020-07-01: 10 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF interest income exclusion + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=58 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/unearned.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/unearned.yaml new file mode 100644 index 00000000000..a2babf3b8a5 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/unearned.yaml @@ -0,0 +1,20 @@ +description: Virginia TANF counts these income sources as unearned income. +values: + 2020-07-01: + - veterans_benefits + - rental_income + - alimony_income + - dividend_income + - interest_income + - miscellaneous_income + - pension_income + - unemployment_compensation + - gi_cash_assistance + - social_security + - child_support_received +metadata: + unit: list + label: Virginia TANF unearned income + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=46 \ No newline at end of file diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml new file mode 100644 index 00000000000..bdc4a6f28c5 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml @@ -0,0 +1,22 @@ +description: Virginia lists these counties in the State as group III under the TANF program. +values: + 2020-07-01: + - ALBEMARLE_COUNTY_VA + - ARLINGTON_COUNTY_VA + - AUGUSTA_COUNTY_VA + - CAROLINE_COUNTY_VA + - FAIRFAX_COUNTY_VA + - FAUQUIER_COUNTY_VA + - JAMES_CITY_COUNTY_VA + - KING_GEORGE_COUNTY_VA + - MONTGOMERY_COUNTY_VA + - PRINCE_WILLIAM_COUNTY_VA + - SPOTSYLVANIA_COUNTY_VA + - STAFFORD_COUNTY_VA + - YORK_COUNTY_VA +metadata: + unit: list + label: Virginia TANF group III states + reference: + title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=24 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/addition.yaml new file mode 100644 index 00000000000..b4c0a9c932d --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/addition.yaml @@ -0,0 +1,12 @@ +description: Virginia provides an additional income limit for each person above 10 in a family living in group II localities of this amount. + +values: + 2020-07-01: 162 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF additional income limit for group II localities + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=83 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml new file mode 100644 index 00000000000..3fe69959265 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml @@ -0,0 +1,32 @@ +description: Virginia limits its TANF program to households living in group II localities with up to this income level, based on household size. + +metadata: + unit: currency-USD + period: month + breakdown: + - range(1, 11) + label: Virginia TANF income limit for group II localities + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=83 + +1: + 2020-07-01: 453 +2: + 2020-07-01: 663 +3: + 2020-07-01: 836 +4: + 2020-07-01: 997 +5: + 2020-07-01: 1_178 +6: + 2020-07-01: 1_317 +7: + 2020-07-01: 1_473 +8: + 2020-07-01: 1_645 +9: + 2020-07-01: 1_790 +10: + 2020-07-01: 1_950 \ No newline at end of file diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/addition.yaml new file mode 100644 index 00000000000..b870410b423 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/addition.yaml @@ -0,0 +1,12 @@ +description: Virginia provides an additional income limit for each person above 10 in a family living in group III localities. + +values: + 2020-07-01: 162 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF extra income limit for group III localities + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=83 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml new file mode 100644 index 00000000000..9532a1fe10f --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml @@ -0,0 +1,32 @@ +description: Virginia limits its TANF program to households living in group III localities with up to this income level, based on household size. + +metadata: + unit: currency-USD + period: month + breakdown: + - range(1, 11) + label: Virginia TANF income limit for group III localities + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=83 + +1: + 2020-07-01: 631 +2: + 2020-07-01: 842 +3: + 2020-07-01: 1_017 +4: + 2020-07-01: 1_178 +5: + 2020-07-01: 1_403 +6: + 2020-07-01: 1_534 +7: + 2020-07-01: 1_696 +8: + 2020-07-01: 1_868 +9: + 2020-07-01: 2_013 +10: + 2020-07-01: 2_171 \ No newline at end of file diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/addition.yaml new file mode 100644 index 00000000000..09e9f871fdf --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/addition.yaml @@ -0,0 +1,12 @@ +description: Virginia provides additional assistance for each person above 10 in a family living in group II localities. + +values: + 2020-07-01: 71 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF group II localities additional assistance + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/main.yaml new file mode 100644 index 00000000000..245693d4b5e --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/main.yaml @@ -0,0 +1,32 @@ +description: Virginia provides up to this amount to families living in group II localities under the TANF program, depending on household size. + +metadata: + unit: currency-USD + period: month + breakdown: + - range(1, 11) + label: Virginia TANF group II localities assistance + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 + +1: + 2020-07-01: 197 +2: + 2020-07-01: 289 +3: + 2020-07-01: 363 +4: + 2020-07-01: 434 +5: + 2020-07-01: 513 +6: + 2020-07-01: 573 +7: + 2020-07-01: 640 +8: + 2020-07-01: 715 +9: + 2020-07-01: 779 +10: + 2020-07-01: 848 \ No newline at end of file diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/max.yaml new file mode 100644 index 00000000000..84d5aefba25 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/max.yaml @@ -0,0 +1,12 @@ +description: Virginia provides up to this maximum TANF assistance for families living in group II localities. + +values: + 2020-07-01: 544 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF group II localities maximum assistance + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 \ No newline at end of file diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/addition.yaml new file mode 100644 index 00000000000..7853ff3140e --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/addition.yaml @@ -0,0 +1,12 @@ +description: Virginia provides additional assistance for each person above 10 in a family living in group III localities under the TANF program. + +values: + 2020-07-01: 71 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF group III localities additional assistance + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/main.yaml new file mode 100644 index 00000000000..b55d2158d57 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/main.yaml @@ -0,0 +1,32 @@ +description: Virginia provides up to this amount to families living in group III localities in TANF, based on household size. + +metadata: + unit: currency-USD + period: month + breakdown: + - range(1, 11) + label: Virginia TANF assistance for group III localities + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=26 + +1: + 2020-07-01: 275 +2: + 2020-07-01: 367 +3: + 2020-07-01: 442 +4: + 2020-07-01: 513 +5: + 2020-07-01: 610 +6: + 2020-07-01: 667 +7: + 2020-07-01: 737 +8: + 2020-07-01: 812 +9: + 2020-07-01: 876 +10: + 2020-07-01: 944 \ No newline at end of file diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/max.yaml new file mode 100644 index 00000000000..38694022e59 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/max.yaml @@ -0,0 +1,12 @@ +description: Virginia provides up to this maximum TANF assistance for families living in group III localities. + +values: + 2020-07-01: 648 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF maximum assistance for group III localities + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=26 \ No newline at end of file diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/va_tanf_minimum_payment.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/va_tanf_minimum_payment.yaml new file mode 100644 index 00000000000..0aa9b224e28 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/va_tanf_minimum_payment.yaml @@ -0,0 +1,12 @@ +description: Virginia excludes payments below this amount under the TANF program. + +values: + 2020-07-01: 10 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF minimum payment + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=85 \ No newline at end of file diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.yaml new file mode 100644 index 00000000000..c79cdcd85e6 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.yaml @@ -0,0 +1,26 @@ +- name: Is demographic eligible and income eligible. + period: 2023 + input: + state_code: VA + is_demographic_tanf_eligible: true + va_tanf_income_eligibility: true + output: + va_tanf_eligibility: true + +- name: Is demographic eligible but not income eligible. + period: 2023 + input: + state_code: VA + is_demographic_tanf_eligible: true + va_tanf_income_eligibility: false + output: + va_tanf_eligibility: false + +- name: Is income eligible but not demographic eligible. + period: 2023 + input: + state_code: VA + is_demographic_tanf_eligible: false + va_tanf_income_eligibility: true + output: + va_tanf_eligibility: false \ No newline at end of file diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml new file mode 100644 index 00000000000..cad4663272b --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml @@ -0,0 +1,39 @@ +- name: Household with no income is eligible. + period: 2023 + input: + state_code: VA + va_tanf_need_standard: 1 + va_tanf_countable_earned_income: 0 + va_tanf_countable_unearned_income: 0 + output: + va_tanf_income_eligibility: true + +- name: Household with income equaling need standard is eligible. + period: 2023 + input: + state_code: VA + va_tanf_need_standard: 1_000 + va_tanf_countable_earned_income: 500 + va_tanf_countable_unearned_income: 500 + output: + va_tanf_income_eligibility: true + +- name: Household with income exceeding need standard is not eligible. + period: 2023 + input: + state_code: VA + va_tanf_need_standard: 1_000 + va_tanf_countable_earned_income: 1_000 + va_tanf_countable_unearned_income: 1_000 + output: + va_tanf_income_eligibility: false + +- name: Only calculate for VA. + period: 2023 + input: + state_code: MD + va_tanf_need_standard: 1_000 + va_tanf_countable_earned_income: 0 + va_tanf_countable_unearned_income: 0 + output: + va_tanf_income_eligibility: false \ No newline at end of file diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.yaml new file mode 100644 index 00000000000..321fab2e06e --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.yaml @@ -0,0 +1,59 @@ +- name: Zero work hour refers to part-time employment status. + period: 2023 + input: + people: + parent1: + work_hours_per_week: 0 + is_mother: true + parent2: + work_hours_per_week: 0 + is_father: true + child: + work_hours_per_week: 0 + is_child: true + households: + household: + members: [parent1, parent2, child] + state_code: VA + output: + va_tanf_is_full_time: false + +- name: One parent with 40 work hours refer to full-time employment status. + period: 2023 + input: + people: + parent1: + work_hours_per_week: 40 + is_mother: true + parent2: + work_hours_per_week: 0 + is_father: true + child: + work_hours_per_week: 0 + is_child: true + households: + household: + members: [parent1, parent2, child] + state_code: VA + output: + va_tanf_is_full_time: true + +- name: Only child with 30 work hours refer to part-time employment status. + period: 2023 + input: + people: + parent1: + work_hours_per_week: 29 + is_mother: true + parent2: + work_hours_per_week: 0 + is_father: true + child: + work_hours_per_week: 30 + is_child: true + households: + household: + members: [parent1, parent2, child] + state_code: VA + output: + va_tanf_is_full_time: false \ No newline at end of file diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml new file mode 100644 index 00000000000..8bf3f404dbe --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml @@ -0,0 +1,125 @@ +- name: Single abled mother household with 0 earned income does not qualify for UP-TANF program. + period: 2023 + input: + people: + parent: + earned_income: 0 + is_mother: true + is_disabled: false + child: + earned_income: 0 + is_child: true + is_disabled: false + spm_units: + spm_unit: + members: [parent, child] + households: + household: + members: [parent, child] + state_code: VA + output: + va_up_tanf_eligibility: false + +- name: Abled mother and disabled father household with 0 earned income does not qualify for UP-TANF program. + period: 2023 + input: + people: + parent1: + earned_income: 0 + is_mother: true + is_disabled: false + parent2: + earned_income: 0 + is_father: true + is_disabled: true + child: + earned_income: 0 + is_child: true + is_disabled: false + spm_units: + spm_unit: + members: [parent1, parent2, child] + households: + household: + members: [parent1, parent2, child] + state_code: VA + output: + va_up_tanf_eligibility: false + +- name: Two Abled parents household with 100 earned income does not qualify for UP-TANF program. + period: 2023 + input: + people: + parent1: + earned_income: 100 + is_mother: true + is_disabled: false + parent2: + earned_income: 0 + is_father: true + is_disabled: false + child: + earned_income: 0 + is_child: true + is_disabled: false + spm_units: + spm_unit: + members: [parent1, parent2, child] + households: + household: + members: [parent1, parent2, child] + state_code: VA + output: + va_up_tanf_eligibility: false + +- name: Two Abled parents household with 0 earned income qualifies for UP-TANF program. + period: 2023 + input: + people: + parent1: + earned_income: 0 + is_mother: true + is_disabled: false + parent2: + earned_income: 0 + is_father: true + is_disabled: false + child: + earned_income: 0 + is_child: true + is_disabled: false + spm_units: + spm_unit: + members: [parent1, parent2, child] + households: + household: + members: [parent1, parent2, child] + state_code: VA + output: + va_up_tanf_eligibility: true + +- name: Only consider household in VA. + period: 2023 + input: + people: + parent1: + earned_income: 0 + is_mother: true + is_disabled: false + parent2: + earned_income: 0 + is_father: true + is_disabled: false + child: + earned_income: 0 + is_child: true + is_disabled: false + spm_units: + spm_unit: + members: [parent1, parent2, child] + households: + household: + members: [parent1, parent2, child] + state_code: AZ + output: + va_up_tanf_eligibility: false \ No newline at end of file diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_care_expenses.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_care_expenses.yaml new file mode 100644 index 00000000000..94cedff7ac1 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_care_expenses.yaml @@ -0,0 +1,79 @@ +- name: Full-time employment family, mother and a 1-year-old child, $200 per month + period: 2023 + input: + people: + parent: + is_adult: true + is_disabled: false + age: 25 + child: + is_child: true + age: 1 + spm_units: + spm_unit: + members: [parent, child] + va_tanf_is_full_time: true + households: + household: + members: [parent, child] + state_code: VA + output: + va_tanf_care_expenses: 2_400 + +- name: Full-time employment family, mother, disabled father, a 1-year-old child and a 2-year-old child, $550 per month + period: 2023 + input: + people: + parent1: + is_adult: true + is_disabled: false + age: 25 + parent2: + is_adult: true + is_disabled: true + age: 25 + child1: + is_child: true + age: 1 + child2: + is_child: true + age: 2 + spm_units: + spm_unit: + members: [parent1, parent2, child1, child2] + va_tanf_is_full_time: true + households: + household: + members: [parent1, parent2, child1, child2] + state_code: VA + output: + va_tanf_care_expenses: 6_600 + +- name: Part-time employment family, mother, disabled father, a 1-year-old child and a 3-year-old child, $360 per month + period: 2023 + input: + people: + parent1: + is_adult: true + is_disabled: false + age: 25 + parent2: + is_adult: true + is_disabled: true + age: 25 + child1: + is_child: true + age: 1 + child2: + is_child: true + age: 3 + spm_units: + spm_unit: + members: [parent1, parent2, child1, child2] + va_tanf_is_full_time: false + households: + household: + members: [parent1, parent2, child1, child2] + state_code: VA + output: + va_tanf_care_expenses: 4_320 \ No newline at end of file diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml new file mode 100644 index 00000000000..101ae92a329 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml @@ -0,0 +1,36 @@ +- name: Earned income $5,004, 3 household members, $2,400 per year after deduction. + period: 2023 + input: + state_code: VA + va_tanf_gross_earned_income: 5_004 + spm_unit_size: 3 + output: + va_tanf_countable_earned_income: 2_400 + + +- name: Earned income $6_136, 4 household members, $3,200 per year after deduction. + period: 2023 + input: + state_code: VA + va_tanf_gross_earned_income: 6_136 + spm_unit_size: 4 + output: + va_tanf_countable_earned_income: 3_200 + +- name: Earned income $7,508, 5 household members, $4,000 per year after deduction. + period: 2023 + input: + state_code: VA + va_tanf_gross_earned_income: 7_508 + spm_unit_size: 5 + output: + va_tanf_countable_earned_income: 4_000 + +- name: Earned income $8,880, 6 household members, $4,800 per year after deduction. + period: 2023 + input: + state_code: VA + va_tanf_gross_earned_income: 8_880 + spm_unit_size: 6 + output: + va_tanf_countable_earned_income: 4_800 \ No newline at end of file diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_income.yaml new file mode 100644 index 00000000000..c57371697fd --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_income.yaml @@ -0,0 +1,29 @@ +- name: $2,000 earned income, $400 care expenses, and $1,000 unearned income, $2,600 total countable income. + period: 2023 + input: + state_code: VA + va_tanf_countable_earned_income: 2_000 + va_tanf_care_expenses: 400 + va_tanf_countable_unearned_income: 1_000 + output: + va_tanf_countable_income: 2_600 + +- name: $100 earned income, $400 care expenses, and $0 unearned income, $2,600 total countable income. + period: 2023 + input: + state_code: VA + va_tanf_countable_earned_income: 100 + va_tanf_care_expenses: 400 + va_tanf_countable_unearned_income: 0 + output: + dc_tanf_countable_income: 0 + +- name: Only calculated for VA. + period: 2023 + input: + state_code: DC + va_tanf_countable_earned_income: 1_000 + va_tanf_care_expenses: 400 + va_tanf_countable_unearned_income: 1_000 + output: + dc_tanf_countable_income: 0 \ No newline at end of file diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml new file mode 100644 index 00000000000..9106218bcab --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml @@ -0,0 +1,77 @@ +- name: No unearned income (only $1,000 ssi), child support, or interest income, $0 per year + period: 2023 + input: + state_code: VA + va_up_tanf_eligibility: false + veterans_benefits: 0 + rental_income: 0 + alimony_income: 0 + dividend_income: 0 + interest_income: 0 + pension_income: 0 + unemployment_compensation: 0 + gi_cash_assistance: 0 + social_security: 0 + ssi: 1_000 + child_support_received: 0 + output: + va_tanf_countable_unearned_income: 0 + +- name: 1,600 unearned income, 1,000 child support, 100 interest income, and not UP-TANF family, $1,600 per year + period: 2023 + input: + state_code: VA + va_up_tanf_eligibility: false + veterans_benefits: 200 + rental_income: 200 + alimony_income: 200 + dividend_income: 200 + interest_income: 100 + pension_income: 200 + unemployment_compensation: 200 + gi_cash_assistance: 200 + social_security: 200 + ssi: 0 + child_support_received: 1_000 + output: + va_tanf_countable_unearned_income: 1_600 + + +- name: 1,600 unearned income, 1,500 child support, and 150 interest income, and not UP-TANF family, $1,930 per year + period: 2023 + input: + state_code: VA + va_up_tanf_eligibility: false + veterans_benefits: 200 + rental_income: 200 + alimony_income: 200 + dividend_income: 200 + interest_income: 150 + pension_income: 200 + unemployment_compensation: 200 + gi_cash_assistance: 200 + social_security: 200 + ssi: 0 + child_support_received: 1_500 + output: + va_tanf_countable_unearned_income: 1_930 + + +- name: 1,600 unearned income, 1,500 child support, and 150 interest income, and UP-TANF family, $1,730 per year + period: 2023 + input: + state_code: VA + va_up_tanf_eligibility: true + veterans_benefits: 200 + rental_income: 200 + alimony_income: 200 + dividend_income: 200 + interest_income: 150 + pension_income: 200 + unemployment_compensation: 200 + gi_cash_assistance: 200 + social_security: 200 + ssi: 0 + child_support_received: 1_500 + output: + va_tanf_countable_unearned_income: 1_730 \ No newline at end of file diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.yaml new file mode 100644 index 00000000000..e6e02dbc1d9 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.yaml @@ -0,0 +1,64 @@ +- name: VA requires earned income from full time children to be disregarded from computing household earnings. + period: 2023 + input: + people: + parent1: + earned_income: 1_000 + parent2: + earned_income: 2_000 + child: + earned_income: 300 + is_child : true + is_full_time_student: true + spm_units: + spm_unit: + members: [parent1, parent2, child] + households: + household: + members: [parent1, parent2, child] + state_code: VA + output: + va_tanf_gross_earned_income: 3_000 + +- name: VA only requires earned income from full time children to be disregarded from computing household earnings. + period: 2023 + input: + people: + parent1: + earned_income: 1_000 + parent2: + earned_income: 2_000 + child: + earned_income: 300 + is_child : true + is_full_time_student: false + spm_units: + spm_unit: + members: [parent1, parent2, child] + households: + household: + members: [parent1, parent2, child] + state_code: VA + output: + va_tanf_gross_earned_income: 3_300 + + +- name: Earned income from adults should be summed up. + period: 2023 + input: + people: + parent1: + earned_income: 1_000 + parent2: + earned_income: 2_000 + parent3: + earned_income: 1_000 + spm_units: + spm_unit: + members: [parent1, parent2, parent3] + households: + household: + members: [parent1, parent2, parent3] + state_code: VA + output: + va_tanf_gross_earned_income: 4_000 \ No newline at end of file diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf.yaml new file mode 100644 index 00000000000..1ef78723a43 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf.yaml @@ -0,0 +1,95 @@ +- name: If ineligible, they get zero. + period: 2023 + input: + va_tanf_eligibility: false + va_up_tanf_eligibility: false + va_tanf_grant_standard: 1_000 + va_tanf_up_grant_standard: 0 + va_tanf_countable_income: 3_000 + county_str: ARLINGTON_COUNTY_VA + output: + va_tanf: 0 + +- name: If tanf eligible, payment less than $10 * 12, then they get zero. + period: 2023 + input: + va_tanf_eligibility: true + va_up_tanf_eligibility: false + va_tanf_grant_standard: 2_100 + va_tanf_up_grant_standard: 0 + va_tanf_countable_income: 2_000 + county_str: ARLINGTON_COUNTY_VA + output: + va_tanf: 0 + +- name: If up tanf eligible, payment less than $10 * 12, then they get zero. + period: 2023 + input: + va_tanf_eligibility: true + va_up_tanf_eligibility: true + va_tanf_grant_standard: 0 + va_tanf_up_grant_standard: 2_100 + va_tanf_countable_income: 2_000 + county_str: ARLINGTON_COUNTY_VA + output: + va_tanf: 0 + +- name: If tanf eligible, living in group3, payment less than maximum payment, then they get the difference. + period: 2023 + input: + va_tanf_eligibility: true + va_up_tanf_eligibility: false + va_tanf_grant_standard: 10_000 + va_tanf_up_grant_standard: 0 + va_tanf_countable_income: 4_000 + county_str: ARLINGTON_COUNTY_VA + output: + va_tanf: 6_000 + +- name: If tanf eligible, living in group III, payment more than maximum payment, then they get the maximum payment. + period: 2023 + input: + va_tanf_eligibility: true + va_up_tanf_eligibility: false + va_tanf_grant_standard: 13_000 + va_tanf_up_grant_standard: 0 + va_tanf_countable_income: 4_000 + county_str: ARLINGTON_COUNTY_VA + output: + va_tanf: 8_940 + +- name: If tanf eligible, living in group III, payment more than maximum payment, then they get the maximum payment. + period: 2023 + input: + va_tanf_eligibility: true + va_up_tanf_eligibility: false + va_tanf_grant_standard: 12_000 + va_tanf_up_grant_standard: 0 + va_tanf_countable_income: 4_000 + county_str: PITTSYLVANIA_COUNTY_VA + output: + va_tanf: 7_500 + +- name: If up tanf eligible, living in group III, payment more than maximum payment, then they get the maximum payment. + period: 2023 + input: + va_tanf_eligibility: true + va_up_tanf_eligibility: true + va_tanf_grant_standard: 0 + va_tanf_up_grant_standard: 12_000 + va_tanf_countable_income: 4_000 + county_str: ARLINGTON_COUNTY_VA + output: + va_tanf: 7_776 + +- name: If up tanf eligible, living in group II, payment more maximum payment, then they get the difference. + period: 2023 + input: + va_tanf_eligibility: true + va_up_tanf_eligibility: true + va_tanf_grant_standard: 0 + va_tanf_up_grant_standard: 11_000 + va_tanf_countable_income: 4_000 + county_str: PITTSYLVANIA_COUNTY_VA + output: + va_tanf: 6_528 \ No newline at end of file diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_grant_standard.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_grant_standard.yaml new file mode 100644 index 00000000000..ab6d56003fa --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_grant_standard.yaml @@ -0,0 +1,62 @@ +- name: If one person and lives in Arlington, grand standard is $316 * 12/yr. + period: 2023 + input: + state_code: VA + spm_unit_size: 1 + county_str: ARLINGTON_COUNTY_VA + output: + va_tanf_grant_standard: 316 * 12 + +- name: If ten person and lives in Fairfax, grand standard is $1,085 * 12/yr. + period: 2023 + input: + state_code: VA + spm_unit_size: 10 + county_str: FAIRFAX_COUNTY_VA + output: + va_tanf_grant_standard: 1_085 * 12 + +- name: If twelve person and lives in Montgomery, grand standard is $1,247 * 12/yr. + period: 2023 + input: + state_code: VA + spm_unit_size: 12 + county_str: MONTGOMERY_COUNTY_VA + output: + va_tanf_grant_standard: 1_247 * 12 + +- name: If one person and lives in Bedford, grand standard is $226 * 12/yr. + period: 2023 + input: + state_code: VA + spm_unit_size: 1 + county_str: BEDFORD_COUNTY_VA + output: + va_tanf_grant_standard: 226 * 12 + +- name: If ten person and lives in Frederick, grand standard is $975 * 12/yr. + period: 2023 + input: + state_code: VA + spm_unit_size: 10 + county_str: FREDERICK_COUNTY_VA + output: + va_tanf_grant_standard: 975 * 12 + +- name: If twelve person and lives in Pittsylvania, grand standard is $1,137 * 12/yr. + period: 2023 + input: + state_code: VA + spm_unit_size: 12 + county_str: PITTSYLVANIA_COUNTY_VA + output: + va_tanf_grant_standard: 1_137 * 12 + +- name: Only calculate for VA. + period: 2023 + input: + state_code: FL + spm_unit_size: 10 + county_str: COLLIER_COUNTY_FL + output: + va_tanf_grant_standard: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_need_standard.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_need_standard.yaml new file mode 100644 index 00000000000..48523dd69be --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_need_standard.yaml @@ -0,0 +1,62 @@ +- name: If one person and lives in Arlington, need standard is $631 * 12/yr. + period: 2023 + input: + state_code: VA + spm_unit_size: 1 + county_str: ARLINGTON_COUNTY_VA + output: + va_tanf_need_standard: 631 * 12 + +- name: If ten person and lives in Fairfax, need standard is $2,171 * 12/yr. + period: 2023 + input: + state_code: VA + spm_unit_size: 10 + county_str: FAIRFAX_COUNTY_VA + output: + va_tanf_need_standard: 2_171 * 12 + +- name: If twelve person and lives in Montgomery, need standard is $2,495 * 12/yr. + period: 2023 + input: + state_code: VA + spm_unit_size: 12 + county_str: MONTGOMERY_COUNTY_VA + output: + va_tanf_need_standard: 2_495 * 12 + +- name: If one person and lives in Bedford, need standard is $453 * 12/yr. + period: 2023 + input: + state_code: VA + spm_unit_size: 1 + county_str: BEDFORD_COUNTY_VA + output: + va_tanf_need_standard: 453 * 12 + +- name: If ten person and lives in Frederick, need standard is $1,950 * 12/yr. + period: 2023 + input: + state_code: VA + spm_unit_size: 10 + county_str: FREDERICK_COUNTY_VA + output: + va_tanf_need_standard: 1_950 * 12 + +- name: If twelve person and lives in Pittsylvania, need standard is $2,274 * 12/yr. + period: 2023 + input: + state_code: VA + spm_unit_size: 12 + county_str: PITTSYLVANIA_COUNTY_VA + output: + va_tanf_need_standard: 2_274 * 12 + +- name: Only calculate for VA. + period: 2023 + input: + state_code: FL + spm_unit_size: 10 + county_str: COLLIER_COUNTY_FL + output: + va_tanf_need_standard: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_up_grant_standard.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_up_grant_standard.yaml new file mode 100644 index 00000000000..d8306994d86 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_up_grant_standard.yaml @@ -0,0 +1,62 @@ +- name: If one person and lives in Arlington, up grand standard is $275 * 12/yr. + period: 2023 + input: + state_code: VA + spm_unit_size: 1 + county_str: ARLINGTON_COUNTY_VA + output: + va_tanf_up_grant_standard: 275 * 12 + +- name: If ten person and lives in Fairfax, up grand standard is $944 * 12/yr. + period: 2023 + input: + state_code: VA + spm_unit_size: 10 + county_str: FAIRFAX_COUNTY_VA + output: + va_tanf_up_grant_standard: 944 * 12 + +- name: If twelve person and lives in Montgomery, up grand standard is $1,086 * 12/yr. + period: 2023 + input: + state_code: VA + spm_unit_size: 12 + county_str: MONTGOMERY_COUNTY_VA + output: + va_tanf_up_grant_standard: 1_086 * 12 + +- name: If one person and lives in Bedford, up grand standard is $197 * 12/yr. + period: 2023 + input: + state_code: VA + spm_unit_size: 1 + county_str: BEDFORD_COUNTY_VA + output: + va_tanf_up_grant_standard: 197 * 12 + +- name: If ten person and lives in Frederick, up grand standard is $848 * 12/yr. + period: 2023 + input: + state_code: VA + spm_unit_size: 10 + county_str: FREDERICK_COUNTY_VA + output: + va_tanf_up_grant_standard: 848 * 12 + +- name: If twelve person and lives in Pittsylvania, up grand standard is $990 * 12/yr. + period: 2023 + input: + state_code: VA + spm_unit_size: 12 + county_str: PITTSYLVANIA_COUNTY_VA + output: + va_tanf_up_grant_standard: 990 * 12 + +- name: Only calculate for VA. + period: 2023 + input: + state_code: FL + spm_unit_size: 10 + county_str: COLLIER_COUNTY_FL + output: + va_tanf_up_grant_standard: 0 diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.py b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.py new file mode 100644 index 00000000000..fb530bdb528 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.py @@ -0,0 +1,14 @@ +from policyengine_us.model_api import * + + +class va_tanf_eligibility(Variable): + value_type = bool + entity = SPMUnit + label = "VA TANF eligibility" + definition_period = YEAR + defined_for = StateCode.VA + + def formula(spm_unit, period, parameters): + demographic_eligible = spm_unit("is_demographic_tanf_eligible", period) + income_eligible = spm_unit("va_tanf_income_eligibility", period) + return demographic_eligible & income_eligible diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py new file mode 100644 index 00000000000..86fe7956e8c --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py @@ -0,0 +1,21 @@ +from policyengine_us.model_api import * + + +class va_tanf_income_eligibility(Variable): + value_type = bool + entity = SPMUnit + label = "VA TANF income eligibility" + definition_period = YEAR + defined_for = StateCode.VA + + def formula(spm_unit, period, parameters): + income = add( + spm_unit, + period, + [ + "va_tanf_countable_earned_income", + "va_tanf_countable_unearned_income", + ], + ) + need_standard = spm_unit("va_tanf_need_standard", period) + return income <= need_standard diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.py b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.py new file mode 100644 index 00000000000..16fcd494fbf --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.py @@ -0,0 +1,18 @@ +from policyengine_us.model_api import * + + +class va_tanf_is_full_time(Variable): + value_type = bool + entity = SPMUnit + label = "VA TANF full-time employee" + definition_period = YEAR + defined_for = StateCode.VA + + def formula(spm_unit, period, parameters): + p = parameters( + period + ).gov.states.va.dss.tanf.income.deduction.full_time_work_hours + person = spm_unit.members + person_work_hour = person("work_hours_per_week", period) + child = person("is_child", period) + return spm_unit.any((person_work_hour >= p) & (~child)) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py new file mode 100644 index 00000000000..9647bfeae38 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py @@ -0,0 +1,20 @@ +from policyengine_us.model_api import * + + +class va_up_tanf_eligibility(Variable): + value_type = bool + entity = SPMUnit + label = "VA UP-TANF eligibility" + unit = USD + definition_period = YEAR + defined_for = StateCode.VA + + def formula(spm_unit, period, parameters): + person = spm_unit.members + earned_income = person("earned_income", period) + father = person("is_father", period) + mother = person("is_mother", period) + disabled = person("is_disabled", period) + eligible_father = (father) & (~disabled) & (earned_income == 0) + eligible_mother = (mother) & (~disabled) & (earned_income == 0) + return spm_unit.any(eligible_father) & spm_unit.any(eligible_mother) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_care_expenses.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_care_expenses.py new file mode 100644 index 00000000000..8ffa2129772 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_care_expenses.py @@ -0,0 +1,33 @@ +from policyengine_us.model_api import * + + +class va_tanf_care_expenses(Variable): + value_type = float + entity = SPMUnit + label = "VA TANF care expenses" + unit = USD + definition_period = YEAR + defined_for = StateCode.VA + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.va.dss.tanf.income.deduction + is_full_time = spm_unit("va_tanf_is_full_time", period) + person = spm_unit.members + child = person("is_child", period) + age = person("age", period) + adult = person("is_adult", period) + disabled = person("is_disabled", period) + disabled_adult = (adult) & (disabled) + care_recipient = (child) | (disabled_adult) + + full_time_care_expenses = spm_unit.sum( + p.care_expenses_full_time.calc(age) * care_recipient + ) + part_time_care_expenses = spm_unit.sum( + p.care_expenses_part_time * care_recipient + ) + monthly_care_expenses = where( + is_full_time, full_time_care_expenses, part_time_care_expenses + ) + + return monthly_care_expenses * MONTHS_IN_YEAR diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py new file mode 100644 index 00000000000..c063ddbb5c8 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py @@ -0,0 +1,20 @@ +from policyengine_us.model_api import * + + +class va_tanf_countable_earned_income(Variable): + value_type = float + entity = SPMUnit + label = "VA TANF countable earned income" + unit = USD + definition_period = YEAR + defined_for = StateCode.VA + + def formula(spm_unit, period, parameters): + gross_earnings = spm_unit("va_tanf_gross_earned_income", period) + unit_size = spm_unit("spm_unit_size", period) + p = parameters(period).gov.states.va.dss.tanf.income.deduction.earned + annual_flat_exclusion = p.flat.calc(unit_size) * MONTHS_IN_YEAR + earnings_after_flat_exclusion = max_( + gross_earnings - annual_flat_exclusion, 0 + ) + return earnings_after_flat_exclusion * (1 - p.percentage) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_income.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_income.py new file mode 100644 index 00000000000..0dffc0956ac --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_income.py @@ -0,0 +1,25 @@ +from policyengine_us.model_api import * + + +class va_tanf_countable_income(Variable): + value_type = float + entity = SPMUnit + label = "VA TANF countable income" + unit = USD + definition_period = YEAR + defined_for = StateCode.VA + + def formula(spm_unit, period, parameters): + countable_earned_income = spm_unit( + "va_tanf_countable_earned_income", period + ) + care_expenses = spm_unit("va_tanf_care_expenses", period) + countable_unearned_income = spm_unit( + "va_tanf_countable_unearned_income", period + ) + return max_( + countable_earned_income + - care_expenses + + countable_unearned_income, + 0, + ) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py new file mode 100644 index 00000000000..4b1d64cd853 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py @@ -0,0 +1,34 @@ +from policyengine_us.model_api import * + + +class va_tanf_countable_unearned_income(Variable): + value_type = float + entity = SPMUnit + label = "VA TANF gross unearned income" + unit = USD + definition_period = YEAR + defined_for = StateCode.VA + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.va.dss.tanf.income + up_tanf_eligibility = spm_unit("va_up_tanf_eligibility", period) + gross_unearned = add(spm_unit, period, p.unearned) + child_support = add(spm_unit, period, ["child_support_received"]) + interest_income = add(spm_unit, period, ["interest_income"]) + unemployment_compensation = add( + spm_unit, period, ["unemployment_compensation"] + ) + p = p.deduction.unearned + child_support_disregard = p.monthly_child_support * MONTHS_IN_YEAR + interest_income_disregard = p.montly_interest_income * MONTHS_IN_YEAR + # gross unearned minus child support & interest income + gross_unearned_after_disregard = ( + gross_unearned + - min_(child_support, child_support_disregard) + - min_(interest_income, interest_income_disregard) + ) + return where( + up_tanf_eligibility, + gross_unearned_after_disregard - unemployment_compensation, + gross_unearned_after_disregard, + ) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.py new file mode 100644 index 00000000000..6d358978489 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.py @@ -0,0 +1,21 @@ +from policyengine_us.model_api import * + + +class va_tanf_gross_earned_income(Variable): + value_type = float + entity = SPMUnit + label = "VA TANF gross earned income" + unit = USD + definition_period = YEAR + defined_for = StateCode.VA + + def formula(spm_unit, period, parameters): + person = spm_unit.members + person_earned_income = person("earned_income", period) + child_0_17 = person("is_child", period) + full_time_student = person("is_full_time_student", period) + nonchild_earned_income = where( + child_0_17 & full_time_student, 0, person_earned_income + ) + + return spm_unit.sum(nonchild_earned_income) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py new file mode 100644 index 00000000000..ff7982ea80c --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py @@ -0,0 +1,43 @@ +from policyengine_us.model_api import * + + +class va_tanf(Variable): + value_type = float + entity = SPMUnit + label = "VA TANF" + unit = USD + definition_period = YEAR + defined_for = "va_tanf_eligibility" + + def formula(spm_unit, period, parameters): + # the calculated payment + up_tanf_eligibility = spm_unit("va_up_tanf_eligibility", period) + grant_standard = spm_unit("va_tanf_grant_standard", period) + up_grant_standard = spm_unit("va_tanf_up_grant_standard", period) + grant = where(up_tanf_eligibility, up_grant_standard, grant_standard) + countable_income = spm_unit("va_tanf_countable_income", period) + payment = max_(grant - countable_income, 0) + + # compute the minimum and maximum payment + p = parameters(period).gov.states.va.dss.tanf + minimum = p.va_tanf_minimum_payment * MONTHS_IN_YEAR + county = spm_unit.household("county_str", period) + if_group3 = county in p.localities.group3 + maximum = ( + where( + up_tanf_eligibility, + where( + if_group3, + p.up_grant_standard.group3.max, + p.up_grant_standard.group2.max, + ), + where( + if_group3, + p.grant_standard.group3.max, + p.grant_standard.group2.max, + ), + ) + * MONTHS_IN_YEAR + ) + + return min_(where(payment >= minimum, payment, 0), maximum) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py new file mode 100644 index 00000000000..718b331aaff --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py @@ -0,0 +1,31 @@ +from policyengine_us.model_api import * + + +class va_tanf_grant_standard(Variable): + value_type = float + entity = SPMUnit + label = "VA TANF grant standard" + unit = USD + definition_period = YEAR + defined_for = StateCode.VA + + def formula(spm_unit, period, parameters): + unit_size = spm_unit("spm_unit_size", period) + ceiling = min_(unit_size, 10) + additional = unit_size - ceiling + + county = spm_unit.household("county_str", period) + p = parameters(period).gov.states.va.dss.tanf + main = where( + county in p.localities.group3, + p.grant_standard.group3.main[ceiling], + p.grant_standard.group2.main[ceiling], + ) + addition = where( + county in p.localities.group3, + p.grant_standard.group3.addition, + p.grant_standard.group2.addition, + ) + + monthly = main + additional * addition + return monthly * MONTHS_IN_YEAR diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py new file mode 100644 index 00000000000..60da2d0b6ee --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py @@ -0,0 +1,31 @@ +from policyengine_us.model_api import * + + +class va_tanf_need_standard(Variable): + value_type = float + entity = SPMUnit + label = "VA TANF need standard" + unit = USD + definition_period = YEAR + defined_for = StateCode.VA + + def formula(spm_unit, period, parameters): + unit_size = spm_unit("spm_unit_size", period) + ceiling = min_(unit_size, 10) + additional = unit_size - ceiling + + county = spm_unit.household("county_str", period) + p = parameters(period).gov.states.va.dss.tanf + main = where( + county in p.localities.group3, + p.need_standard.group3.main[ceiling], + p.need_standard.group2.main[ceiling], + ) + addition = where( + county in p.localities.group3, + p.need_standard.group3.addition, + p.need_standard.group2.addition, + ) + + monthly = main + additional * addition + return monthly * MONTHS_IN_YEAR diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py new file mode 100644 index 00000000000..cf6c831023c --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py @@ -0,0 +1,31 @@ +from policyengine_us.model_api import * + + +class va_tanf_up_grant_standard(Variable): + value_type = float + entity = SPMUnit + label = "VA TANF UP grant standard" + unit = USD + definition_period = YEAR + defined_for = StateCode.VA + + def formula(spm_unit, period, parameters): + unit_size = spm_unit("spm_unit_size", period) + ceiling = min_(unit_size, 10) + additional = unit_size - ceiling + + county = spm_unit.household("county_str", period) + p = parameters(period).gov.states.va.dss.tanf + main = where( + county in p.localities.group3, + p.up_grant_standard.group3.main[ceiling], + p.up_grant_standard.group2.main[ceiling], + ) + addition = where( + county in p.localities.group3, + p.up_grant_standard.group3.addition, + p.up_grant_standard.group2.addition, + ) + + monthly = main + additional * addition + return monthly * MONTHS_IN_YEAR diff --git a/policyengine_us/variables/household/demographic/person/work_hours_per_week.py b/policyengine_us/variables/household/demographic/person/work_hours_per_week.py new file mode 100644 index 00000000000..53dcc9f96f7 --- /dev/null +++ b/policyengine_us/variables/household/demographic/person/work_hours_per_week.py @@ -0,0 +1,9 @@ +from policyengine_us.model_api import * + + +class work_hours_per_week(Variable): + value_type = float + entity = Person + label = "Work hours per week" + definition_period = YEAR + unit = "hour" From ee14586d835db12459c5f55d05e4061e1c8b5183 Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 7 Jan 2026 18:38:02 -0500 Subject: [PATCH 02/11] pr fix --- .../dss/tanf/grant_standard/group2/max.yaml | 2 +- .../dss/tanf/grant_standard/group3/main.yaml | 2 +- .../dss/tanf/grant_standard/group3/max.yaml | 2 +- .../deduction/care_expenses_full_time.yaml | 2 +- .../deduction/care_expenses_part_time.yaml | 2 +- .../deduction/full_time_work_hours.yaml | 2 +- ...come.yaml => monthly_interest_income.yaml} | 2 +- .../states/va/dss/tanf/income/unearned.yaml | 3 +- .../states/va/dss/tanf/localities/group3.yaml | 5 +- .../gov/states/va/dss/tanf/max_unit_size.yaml | 12 + .../dss/tanf/need_standard/group2/main.yaml | 2 +- .../dss/tanf/need_standard/group3/main.yaml | 2 +- .../tanf/up_grant_standard/group2/main.yaml | 2 +- .../tanf/up_grant_standard/group2/max.yaml | 2 +- .../tanf/up_grant_standard/group3/main.yaml | 2 +- .../tanf/up_grant_standard/group3/max.yaml | 2 +- .../va/dss/tanf/va_tanf_minimum_payment.yaml | 2 +- .../tanf/eligibility/va_tanf_eligibility.yaml | 2 +- .../va_tanf_income_eligibility.yaml | 22 +- .../eligibility/va_tanf_is_full_time.yaml | 23 +- .../eligibility/va_up_tanf_eligibility.yaml | 2 +- .../tanf/income/va_tanf_care_expenses.yaml | 2 +- .../va_tanf_countable_earned_income.yaml | 2 +- .../tanf/income/va_tanf_countable_income.yaml | 6 +- .../va_tanf_countable_unearned_income.yaml | 2 +- .../income/va_tanf_gross_earned_income.yaml | 2 +- .../gov/states/va/dss/tanf/integration.yaml | 277 ++++++++++++++++++ .../gov/states/va/dss/tanf/va_tanf.yaml | 31 +- .../tanf/eligibility/va_tanf_eligibility.py | 1 + .../eligibility/va_tanf_income_eligibility.py | 1 + .../tanf/eligibility/va_tanf_is_full_time.py | 1 + .../eligibility/va_up_tanf_eligibility.py | 2 +- .../dss/tanf/income/va_tanf_care_expenses.py | 1 + .../income/va_tanf_countable_earned_income.py | 1 + .../tanf/income/va_tanf_countable_income.py | 1 + .../va_tanf_countable_unearned_income.py | 3 +- .../income/va_tanf_gross_earned_income.py | 1 + .../gov/states/va/dss/tanf/va_tanf.py | 3 +- .../va/dss/tanf/va_tanf_grant_standard.py | 10 +- .../va/dss/tanf/va_tanf_need_standard.py | 10 +- .../va/dss/tanf/va_tanf_up_grant_standard.py | 10 +- 41 files changed, 420 insertions(+), 44 deletions(-) rename policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/{montly_interest_income.yaml => monthly_interest_income.yaml} (96%) create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/max_unit_size.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/max.yaml index c8598fb1fce..2dfc9527211 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/max.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/max.yaml @@ -9,4 +9,4 @@ metadata: label: Virginia TANF maximum assistance for group II localities reference: - title: Virginia TANF Guidance Manual - Need and Amount of Assistance - href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 \ No newline at end of file + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/main.yaml index f9940406c30..3a23d30fa75 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/main.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/main.yaml @@ -29,4 +29,4 @@ metadata: 9: 2020-07-01: 1_007 10: - 2020-07-01: 1_085 \ No newline at end of file + 2020-07-01: 1_085 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/max.yaml index c5611d14554..c0ab0fdb811 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/max.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/max.yaml @@ -9,4 +9,4 @@ metadata: label: Virginia TANF maximum assistance for group III localities reference: - title: Virginia TANF Guidance Manual - Need and Amount of Assistance - href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=26 \ No newline at end of file + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=26 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_full_time.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_full_time.yaml index 1cbfd2fb9c4..d517cfe50af 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_full_time.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_full_time.yaml @@ -22,4 +22,4 @@ brackets: - amount: 2020-07-01: 175 threshold: - 2020-07-01: 2 \ No newline at end of file + 2020-07-01: 2 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml index ce458946767..a2cbc1dc966 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml @@ -9,4 +9,4 @@ metadata: href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=51 values: - 2020-07-01: 120 \ No newline at end of file + 2020-07-01: 120 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml index 5880f821a2d..04dd892bfd3 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml @@ -9,4 +9,4 @@ metadata: href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=49 values: - 2020-07-01: 30 \ No newline at end of file + 2020-07-01: 30 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/montly_interest_income.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_interest_income.yaml similarity index 96% rename from policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/montly_interest_income.yaml rename to policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_interest_income.yaml index 1fde94f0be9..6376a3c43b6 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/montly_interest_income.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_interest_income.yaml @@ -8,5 +8,5 @@ metadata: period: month label: Virginia TANF interest income exclusion reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=58 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/unearned.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/unearned.yaml index a2babf3b8a5..3517d804485 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/unearned.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/unearned.yaml @@ -14,7 +14,8 @@ values: - child_support_received metadata: unit: list + period: year label: Virginia TANF unearned income reference: - title: Virginia TANF Guidance Manual - Need and Amount of Assistance - href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=46 \ No newline at end of file + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=46 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml index bdc4a6f28c5..ab08cdc8253 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml @@ -16,7 +16,8 @@ values: - YORK_COUNTY_VA metadata: unit: list + period: year label: Virginia TANF group III states reference: - title: Virginia TANF Guidance Manual - Need and Amount of Assistance - href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=24 + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=24 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/max_unit_size.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/max_unit_size.yaml new file mode 100644 index 00000000000..19bda201dbc --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/max_unit_size.yaml @@ -0,0 +1,12 @@ +description: Virginia sets this maximum unit size for determining TANF grant and need standards. + +values: + 2020-07-01: 10 + +metadata: + unit: person + period: year + label: Virginia TANF maximum unit size for standards lookup + reference: + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=47 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml index 3fe69959265..a9d9f2f3c20 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml @@ -29,4 +29,4 @@ metadata: 9: 2020-07-01: 1_790 10: - 2020-07-01: 1_950 \ No newline at end of file + 2020-07-01: 1_950 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml index 9532a1fe10f..9d208a9edcb 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml @@ -29,4 +29,4 @@ metadata: 9: 2020-07-01: 2_013 10: - 2020-07-01: 2_171 \ No newline at end of file + 2020-07-01: 2_171 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/main.yaml index 245693d4b5e..55c13af1bcd 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/main.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/main.yaml @@ -29,4 +29,4 @@ metadata: 9: 2020-07-01: 779 10: - 2020-07-01: 848 \ No newline at end of file + 2020-07-01: 848 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/max.yaml index 84d5aefba25..ddace8d5b28 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/max.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/max.yaml @@ -9,4 +9,4 @@ metadata: label: Virginia TANF group II localities maximum assistance reference: - title: Virginia TANF Guidance Manual - Need and Amount of Assistance - href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 \ No newline at end of file + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/main.yaml index b55d2158d57..57a11c77533 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/main.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/main.yaml @@ -29,4 +29,4 @@ metadata: 9: 2020-07-01: 876 10: - 2020-07-01: 944 \ No newline at end of file + 2020-07-01: 944 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/max.yaml index 38694022e59..719c28f3cd8 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/max.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/max.yaml @@ -9,4 +9,4 @@ metadata: label: Virginia TANF maximum assistance for group III localities reference: - title: Virginia TANF Guidance Manual - Need and Amount of Assistance - href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=26 \ No newline at end of file + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=26 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/va_tanf_minimum_payment.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/va_tanf_minimum_payment.yaml index 0aa9b224e28..2f6d8d99ded 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/va_tanf_minimum_payment.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/va_tanf_minimum_payment.yaml @@ -9,4 +9,4 @@ metadata: label: Virginia TANF minimum payment reference: - title: Virginia TANF Guidance Manual - Need and Amount of Assistance - href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=85 \ No newline at end of file + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=85 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.yaml index c79cdcd85e6..ce02de6a50a 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.yaml @@ -23,4 +23,4 @@ is_demographic_tanf_eligible: false va_tanf_income_eligibility: true output: - va_tanf_eligibility: false \ No newline at end of file + va_tanf_eligibility: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml index cad4663272b..c754c9e2f92 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml @@ -28,6 +28,26 @@ output: va_tanf_income_eligibility: false +- name: Income exactly $1 below need standard is eligible. + period: 2023 + input: + state_code: VA + va_tanf_need_standard: 1_000 + va_tanf_countable_earned_income: 499 + va_tanf_countable_unearned_income: 500 + output: + va_tanf_income_eligibility: true + +- name: Income exactly $1 above need standard is not eligible. + period: 2023 + input: + state_code: VA + va_tanf_need_standard: 1_000 + va_tanf_countable_earned_income: 500 + va_tanf_countable_unearned_income: 501 + output: + va_tanf_income_eligibility: false + - name: Only calculate for VA. period: 2023 input: @@ -36,4 +56,4 @@ va_tanf_countable_earned_income: 0 va_tanf_countable_unearned_income: 0 output: - va_tanf_income_eligibility: false \ No newline at end of file + va_tanf_income_eligibility: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.yaml index 321fab2e06e..5ecfc91a095 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.yaml @@ -56,4 +56,25 @@ members: [parent1, parent2, child] state_code: VA output: - va_tanf_is_full_time: false \ No newline at end of file + va_tanf_is_full_time: false + +- name: Adult working exactly 30 hours is full-time (boundary test). + period: 2023 + input: + people: + parent1: + work_hours_per_week: 30 + is_mother: true + parent2: + work_hours_per_week: 0 + is_father: true + child: + work_hours_per_week: 0 + is_child: true + households: + household: + members: [parent1, parent2, child] + state_code: VA + output: + # 30 hours >= 30 threshold, so classified as full-time + va_tanf_is_full_time: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml index 8bf3f404dbe..7eb0ce5a0b8 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml @@ -122,4 +122,4 @@ members: [parent1, parent2, child] state_code: AZ output: - va_up_tanf_eligibility: false \ No newline at end of file + va_up_tanf_eligibility: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_care_expenses.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_care_expenses.yaml index 94cedff7ac1..a128d44c141 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_care_expenses.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_care_expenses.yaml @@ -76,4 +76,4 @@ members: [parent1, parent2, child1, child2] state_code: VA output: - va_tanf_care_expenses: 4_320 \ No newline at end of file + va_tanf_care_expenses: 4_320 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml index 101ae92a329..c1835bb6900 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml @@ -33,4 +33,4 @@ va_tanf_gross_earned_income: 8_880 spm_unit_size: 6 output: - va_tanf_countable_earned_income: 4_800 \ No newline at end of file + va_tanf_countable_earned_income: 4_800 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_income.yaml index c57371697fd..292577accac 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_income.yaml @@ -8,7 +8,7 @@ output: va_tanf_countable_income: 2_600 -- name: $100 earned income, $400 care expenses, and $0 unearned income, $2,600 total countable income. +- name: $100 earned income, $400 care expenses, and $0 unearned income, $0 total countable income. period: 2023 input: state_code: VA @@ -16,7 +16,7 @@ va_tanf_care_expenses: 400 va_tanf_countable_unearned_income: 0 output: - dc_tanf_countable_income: 0 + va_tanf_countable_income: 0 - name: Only calculated for VA. period: 2023 @@ -26,4 +26,4 @@ va_tanf_care_expenses: 400 va_tanf_countable_unearned_income: 1_000 output: - dc_tanf_countable_income: 0 \ No newline at end of file + va_tanf_countable_income: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml index 9106218bcab..9daadbba2fc 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml @@ -74,4 +74,4 @@ ssi: 0 child_support_received: 1_500 output: - va_tanf_countable_unearned_income: 1_730 \ No newline at end of file + va_tanf_countable_unearned_income: 1_730 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.yaml index e6e02dbc1d9..d19e286d70d 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.yaml @@ -61,4 +61,4 @@ members: [parent1, parent2, parent3] state_code: VA output: - va_tanf_gross_earned_income: 4_000 \ No newline at end of file + va_tanf_gross_earned_income: 4_000 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml new file mode 100644 index 00000000000..86593b9f54a --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml @@ -0,0 +1,277 @@ +# Virginia TANF Integration Tests +# Tests the full TANF calculation pipeline end-to-end + +- name: Group III locality - Single parent family with moderate earned income + period: 2023 + input: + people: + mother: + is_mother: true + age: 30 + earned_income: 12_000 + work_hours_per_week: 40 + child1: + is_child: true + age: 5 + child2: + is_child: true + age: 3 + spm_units: + spm_unit: + members: [mother, child1, child2] + households: + household: + members: [mother, child1, child2] + state_code: VA + county_str: ARLINGTON_COUNTY_VA + output: + # Family size: 3 + # Group III locality (Arlington County) + # + # Need standard: $1,017/month * 12 = $12,204/year + va_tanf_need_standard: 12_204 + # + # Grant standard: $508/month * 12 = $6,096/year + va_tanf_grant_standard: 6_096 + # + # Full-time (40 hours >= 30 hours threshold) + va_tanf_is_full_time: true + # + # Earned income deduction: + # Flat exclusion (size 3): $167/month * 12 = $2,004/year + # After flat: max($12,000 - $2,004, 0) = $9,996 + # After 20%: $9,996 * (1 - 0.2) = $7,996.80 + va_tanf_countable_earned_income: 7_996.8 + # + # Care expenses (full-time, 2 children age 2+): $175 * 2 * 12 = $4,200/year + va_tanf_care_expenses: 4_200 + # + # Countable income: max($7,996.80 - $4,200 + $0, 0) = $3,796.80 + va_tanf_countable_income: 3_796.8 + # + # Income eligibility: $3,796.80 <= $12,204? YES + va_tanf_income_eligibility: true + # + # Benefit: $6,096 - $3,796.80 = $2,299.20 + # Minimum: $120, Maximum: $8,940 + # $2,299.20 >= $120 and <= $8,940, so benefit = $2,299.20 + va_tanf: 2_299.2 + +- name: Group II locality - Single parent family with part-time work + period: 2023 + input: + people: + mother: + is_mother: true + age: 28 + earned_income: 6_000 + work_hours_per_week: 20 + child1: + is_child: true + age: 4 + spm_units: + spm_unit: + members: [mother, child1] + households: + household: + members: [mother, child1] + state_code: VA + county_str: PITTSYLVANIA_COUNTY_VA + output: + # Family size: 2 + # Group II locality (Pittsylvania County) + # + # Need standard: $663/month * 12 = $7,956/year + va_tanf_need_standard: 7_956 + # + # Grant standard: $332/month * 12 = $3,984/year + va_tanf_grant_standard: 3_984 + # + # Part-time (20 hours < 30 hours threshold) + va_tanf_is_full_time: false + # + # Earned income deduction: + # Flat exclusion (size 2): $167/month * 12 = $2,004/year + # After flat: max($6,000 - $2,004, 0) = $3,996 + # After 20%: $3,996 * 0.8 = $3,196.80 + va_tanf_countable_earned_income: 3_196.8 + # + # Care expenses (part-time, 1 child): $120 * 1 * 12 = $1,440/year + va_tanf_care_expenses: 1_440 + # + # Countable income: max($3,196.80 - $1,440 + $0, 0) = $1,756.80 + va_tanf_countable_income: 1_756.8 + # + # Income eligibility: $1,756.80 <= $7,956? YES + va_tanf_income_eligibility: true + # + # Benefit: $3,984 - $1,756.80 = $2,227.20 + # Minimum: $120, Maximum (Group II): $7,500 + # $2,227.20 >= $120 and <= $7,500, so benefit = $2,227.20 + va_tanf: 2_227.2 + +- name: TANF-UP scenario - Two unemployed parents in Group III locality + period: 2023 + input: + people: + father: + is_father: true + age: 35 + earned_income: 0 + work_hours_per_week: 0 + is_disabled: false + mother: + is_mother: true + age: 32 + earned_income: 0 + work_hours_per_week: 0 + is_disabled: false + child1: + is_child: true + age: 8 + child2: + is_child: true + age: 6 + spm_units: + spm_unit: + members: [father, mother, child1, child2] + households: + household: + members: [father, mother, child1, child2] + state_code: VA + county_str: ARLINGTON_COUNTY_VA + output: + # Family size: 4 + # Group III locality (Arlington County) + # TANF-UP eligible: both parents have no earnings and are not disabled + va_up_tanf_eligibility: true + # + # Need standard (Group III, size 4): $1,178/month * 12 = $14,136/year + va_tanf_need_standard: 14_136 + # + # UP Grant standard (Group III, size 4): $513/month * 12 = $6,156/year + va_tanf_up_grant_standard: 6_156 + # + # Part-time (0 hours < 30 hours) + va_tanf_is_full_time: false + # + # No earned income, so countable earned = 0 + va_tanf_countable_earned_income: 0 + # + # Care expenses (part-time, 2 children age 2+): $120 * 2 * 12 = $2,880/year + va_tanf_care_expenses: 2_880 + # + # Countable income: max(0 - $2,880 + 0, 0) = $0 + va_tanf_countable_income: 0 + # + # Income eligibility: $0 <= $14,136? YES + va_tanf_income_eligibility: true + # + # Benefit (TANF-UP): $6,156 - $0 = $6,156 + # Maximum UP (Group III): $648 * 12 = $7,776 + # $6,156 >= $120 and <= $7,776, so benefit = $6,156 + va_tanf: 6_156 + +- name: Income exceeds need standard - Not eligible + period: 2023 + input: + people: + mother: + is_mother: true + age: 35 + earned_income: 30_000 + work_hours_per_week: 40 + child1: + is_child: true + age: 10 + spm_units: + spm_unit: + members: [mother, child1] + households: + household: + members: [mother, child1] + state_code: VA + county_str: ARLINGTON_COUNTY_VA + output: + # Family size: 2 + # Group III locality (Arlington County) + # + # Need standard: $842/month * 12 = $10,104/year + va_tanf_need_standard: 10_104 + # + # Grant standard: $422/month * 12 = $5,064/year + va_tanf_grant_standard: 5_064 + # + # Full-time (40 hours >= 30 hours) + va_tanf_is_full_time: true + # + # Earned income deduction: + # Flat exclusion (size 2): $167/month * 12 = $2,004/year + # After flat: $30,000 - $2,004 = $27,996 + # After 20%: $27,996 * 0.8 = $22,396.80 + va_tanf_countable_earned_income: 22_396.8 + # + # Care expenses (full-time, 1 child age 10): $175 * 12 = $2,100/year + va_tanf_care_expenses: 2_100 + # + # Countable income: max($22,396.80 - $2,100 + $0, 0) = $20,296.80 + va_tanf_countable_income: 20_296.8 + # + # Income eligibility: $20,296.80 <= $10,104? NO + va_tanf_income_eligibility: false + # + # Not eligible, so benefit = $0 + va_tanf: 0 + +- name: Group II locality - Family with infant (higher care deduction) + period: 2023 + input: + people: + mother: + is_mother: true + age: 25 + earned_income: 8_000 + work_hours_per_week: 35 + infant: + is_child: true + age: 1 + spm_units: + spm_unit: + members: [mother, infant] + households: + household: + members: [mother, infant] + state_code: VA + county_str: PITTSYLVANIA_COUNTY_VA + output: + # Family size: 2 + # Group II locality (Pittsylvania County) + # + # Need standard: $663/month * 12 = $7,956/year + va_tanf_need_standard: 7_956 + # + # Grant standard: $332/month * 12 = $3,984/year + va_tanf_grant_standard: 3_984 + # + # Full-time (35 hours >= 30 hours) + va_tanf_is_full_time: true + # + # Earned income deduction: + # Flat exclusion (size 2): $167/month * 12 = $2,004/year + # After flat: $8,000 - $2,004 = $5,996 + # After 20%: $5,996 * 0.8 = $4,796.80 + va_tanf_countable_earned_income: 4_796.8 + # + # Care expenses (full-time, infant under 2): $200 * 12 = $2,400/year + va_tanf_care_expenses: 2_400 + # + # Countable income: max($4,796.80 - $2,400 + $0, 0) = $2,396.80 + va_tanf_countable_income: 2_396.8 + # + # Income eligibility: $2,396.80 <= $7,956? YES + va_tanf_income_eligibility: true + # + # Benefit: $3,984 - $2,396.80 = $1,587.20 + # Minimum: $120, Maximum (Group II): $7,500 + # $1,587.20 >= $120 and <= $7,500, so benefit = $1,587.20 + va_tanf: 1_587.2 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf.yaml index 1ef78723a43..2bff1cda4cb 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf.yaml @@ -92,4 +92,33 @@ va_tanf_countable_income: 4_000 county_str: PITTSYLVANIA_COUNTY_VA output: - va_tanf: 6_528 \ No newline at end of file + va_tanf: 6_528 + +# Boundary tests for minimum payment threshold ($10/month = $120/year) +- name: Payment exactly at minimum threshold ($120/year) is paid. + period: 2023 + input: + va_tanf_eligibility: true + va_up_tanf_eligibility: false + va_tanf_grant_standard: 2_120 + va_tanf_up_grant_standard: 0 + va_tanf_countable_income: 2_000 + county_str: ARLINGTON_COUNTY_VA + output: + # Grant standard $2,120 - countable income $2,000 = $120 payment + # $120 >= $120 minimum, so payment is made + va_tanf: 120 + +- name: Payment $1 below minimum threshold ($119/year) results in zero. + period: 2023 + input: + va_tanf_eligibility: true + va_up_tanf_eligibility: false + va_tanf_grant_standard: 2_119 + va_tanf_up_grant_standard: 0 + va_tanf_countable_income: 2_000 + county_str: ARLINGTON_COUNTY_VA + output: + # Grant standard $2,119 - countable income $2,000 = $119 payment + # $119 < $120 minimum, so no payment + va_tanf: 0 diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.py b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.py index fb530bdb528..6f998bba6b4 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.py @@ -7,6 +7,7 @@ class va_tanf_eligibility(Variable): label = "VA TANF eligibility" definition_period = YEAR defined_for = StateCode.VA + reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=1" def formula(spm_unit, period, parameters): demographic_eligible = spm_unit("is_demographic_tanf_eligible", period) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py index 86fe7956e8c..5e81269c853 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py @@ -7,6 +7,7 @@ class va_tanf_income_eligibility(Variable): label = "VA TANF income eligibility" definition_period = YEAR defined_for = StateCode.VA + reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=47" def formula(spm_unit, period, parameters): income = add( diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.py b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.py index 16fcd494fbf..7be1cdc42dd 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.py @@ -7,6 +7,7 @@ class va_tanf_is_full_time(Variable): label = "VA TANF full-time employee" definition_period = YEAR defined_for = StateCode.VA + reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=55" def formula(spm_unit, period, parameters): p = parameters( diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py index 9647bfeae38..37eaf406de7 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py @@ -5,9 +5,9 @@ class va_up_tanf_eligibility(Variable): value_type = bool entity = SPMUnit label = "VA UP-TANF eligibility" - unit = USD definition_period = YEAR defined_for = StateCode.VA + reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=3" def formula(spm_unit, period, parameters): person = spm_unit.members diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_care_expenses.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_care_expenses.py index 8ffa2129772..39835cc871f 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_care_expenses.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_care_expenses.py @@ -8,6 +8,7 @@ class va_tanf_care_expenses(Variable): unit = USD definition_period = YEAR defined_for = StateCode.VA + reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=56" def formula(spm_unit, period, parameters): p = parameters(period).gov.states.va.dss.tanf.income.deduction diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py index c063ddbb5c8..953f7ea8675 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py @@ -8,6 +8,7 @@ class va_tanf_countable_earned_income(Variable): unit = USD definition_period = YEAR defined_for = StateCode.VA + reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=55" def formula(spm_unit, period, parameters): gross_earnings = spm_unit("va_tanf_gross_earned_income", period) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_income.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_income.py index 0dffc0956ac..d1aaa6a7fbc 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_income.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_income.py @@ -8,6 +8,7 @@ class va_tanf_countable_income(Variable): unit = USD definition_period = YEAR defined_for = StateCode.VA + reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=50" def formula(spm_unit, period, parameters): countable_earned_income = spm_unit( diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py index 4b1d64cd853..2fb0d373f5b 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py @@ -8,6 +8,7 @@ class va_tanf_countable_unearned_income(Variable): unit = USD definition_period = YEAR defined_for = StateCode.VA + reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=58" def formula(spm_unit, period, parameters): p = parameters(period).gov.states.va.dss.tanf.income @@ -20,7 +21,7 @@ def formula(spm_unit, period, parameters): ) p = p.deduction.unearned child_support_disregard = p.monthly_child_support * MONTHS_IN_YEAR - interest_income_disregard = p.montly_interest_income * MONTHS_IN_YEAR + interest_income_disregard = p.monthly_interest_income * MONTHS_IN_YEAR # gross unearned minus child support & interest income gross_unearned_after_disregard = ( gross_unearned diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.py index 6d358978489..bf676dad03d 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.py @@ -8,6 +8,7 @@ class va_tanf_gross_earned_income(Variable): unit = USD definition_period = YEAR defined_for = StateCode.VA + reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=51" def formula(spm_unit, period, parameters): person = spm_unit.members diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py index ff7982ea80c..b942c2b269d 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py @@ -8,6 +8,7 @@ class va_tanf(Variable): unit = USD definition_period = YEAR defined_for = "va_tanf_eligibility" + reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=47" def formula(spm_unit, period, parameters): # the calculated payment @@ -22,7 +23,7 @@ def formula(spm_unit, period, parameters): p = parameters(period).gov.states.va.dss.tanf minimum = p.va_tanf_minimum_payment * MONTHS_IN_YEAR county = spm_unit.household("county_str", period) - if_group3 = county in p.localities.group3 + if_group3 = np.isin(county, p.localities.group3) maximum = ( where( up_tanf_eligibility, diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py index 718b331aaff..2d0efe2a8a8 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py @@ -8,21 +8,23 @@ class va_tanf_grant_standard(Variable): unit = USD definition_period = YEAR defined_for = StateCode.VA + reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=47" def formula(spm_unit, period, parameters): unit_size = spm_unit("spm_unit_size", period) - ceiling = min_(unit_size, 10) + p = parameters(period).gov.states.va.dss.tanf + ceiling = min_(unit_size, p.max_unit_size) additional = unit_size - ceiling county = spm_unit.household("county_str", period) - p = parameters(period).gov.states.va.dss.tanf + if_group3 = np.isin(county, p.localities.group3) main = where( - county in p.localities.group3, + if_group3, p.grant_standard.group3.main[ceiling], p.grant_standard.group2.main[ceiling], ) addition = where( - county in p.localities.group3, + if_group3, p.grant_standard.group3.addition, p.grant_standard.group2.addition, ) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py index 60da2d0b6ee..d106d6acff3 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py @@ -8,21 +8,23 @@ class va_tanf_need_standard(Variable): unit = USD definition_period = YEAR defined_for = StateCode.VA + reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=47" def formula(spm_unit, period, parameters): unit_size = spm_unit("spm_unit_size", period) - ceiling = min_(unit_size, 10) + p = parameters(period).gov.states.va.dss.tanf + ceiling = min_(unit_size, p.max_unit_size) additional = unit_size - ceiling county = spm_unit.household("county_str", period) - p = parameters(period).gov.states.va.dss.tanf + if_group3 = np.isin(county, p.localities.group3) main = where( - county in p.localities.group3, + if_group3, p.need_standard.group3.main[ceiling], p.need_standard.group2.main[ceiling], ) addition = where( - county in p.localities.group3, + if_group3, p.need_standard.group3.addition, p.need_standard.group2.addition, ) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py index cf6c831023c..43147056032 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py @@ -8,21 +8,23 @@ class va_tanf_up_grant_standard(Variable): unit = USD definition_period = YEAR defined_for = StateCode.VA + reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=47" def formula(spm_unit, period, parameters): unit_size = spm_unit("spm_unit_size", period) - ceiling = min_(unit_size, 10) + p = parameters(period).gov.states.va.dss.tanf + ceiling = min_(unit_size, p.max_unit_size) additional = unit_size - ceiling county = spm_unit.household("county_str", period) - p = parameters(period).gov.states.va.dss.tanf + if_group3 = np.isin(county, p.localities.group3) main = where( - county in p.localities.group3, + if_group3, p.up_grant_standard.group3.main[ceiling], p.up_grant_standard.group2.main[ceiling], ) addition = where( - county in p.localities.group3, + if_group3, p.up_grant_standard.group3.addition, p.up_grant_standard.group2.addition, ) From f3325ea8cb935d116e407f5bf1593b0ebb1a3c5f Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 7 Jan 2026 19:27:38 -0500 Subject: [PATCH 03/11] pr fix --- .../unearned/monthly_child_support.yaml | 5 ++- .../states/va/dss/tanf/localities/group3.yaml | 19 +++++++++-- .../va_tanf_income_eligibility.yaml | 18 ++++------- .../va_tanf_countable_earned_income.yaml | 32 +++++++++++++++++++ .../va/dss/tanf/va_tanf_grant_standard.yaml | 32 +++++++++++++++---- .../eligibility/va_tanf_income_eligibility.py | 11 ++----- .../va_tanf_countable_unearned_income.py | 2 +- 7 files changed, 89 insertions(+), 30 deletions(-) diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_child_support.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_child_support.yaml index 9cab82d276c..b70cee43562 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_child_support.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_child_support.yaml @@ -1,6 +1,7 @@ description: Virginia excludes this amount of monthly child support when computing unearned income. values: + 2008-10-01: 50 2020-07-01: 100 metadata: @@ -8,5 +9,7 @@ metadata: period: month label: Virginia TANF child support exclusion reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Guidance Manual - Need and Amount of Assistance href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=57 + - title: 22 VAC 40-295-50 - Income eligibility (historical $50 value) + href: https://law.lis.virginia.gov/admincode/title22/agency40/chapter295/section50/ diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml index ab08cdc8253..80de32d108d 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml @@ -1,6 +1,7 @@ -description: Virginia lists these counties in the State as group III under the TANF program. +description: Virginia lists these localities as group III under the Temporary Assistance for Needy Families program. values: 2020-07-01: + # Counties - ALBEMARLE_COUNTY_VA - ARLINGTON_COUNTY_VA - AUGUSTA_COUNTY_VA @@ -14,10 +15,24 @@ values: - SPOTSYLVANIA_COUNTY_VA - STAFFORD_COUNTY_VA - YORK_COUNTY_VA + # Cities + - ALEXANDRIA_CITY_VA + - CHARLOTTESVILLE_CITY_VA + - COLONIAL_HEIGHTS_CITY_VA + - FAIRFAX_CITY_VA + - FALLS_CHURCH_CITY_VA + - FREDERICKSBURG_CITY_VA + - HAMPTON_CITY_VA + - MANASSAS_CITY_VA + - MANASSAS_PARK_CITY_VA + - NEWPORT_NEWS_CITY_VA + - POQUOSON_CITY_VA + - STAUNTON_CITY_VA + - WAYNESBORO_CITY_VA metadata: unit: list period: year - label: Virginia TANF group III states + label: Virginia TANF group III localities reference: - title: Virginia TANF Guidance Manual - Need and Amount of Assistance href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=24 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml index c754c9e2f92..6eb1284e364 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml @@ -3,8 +3,7 @@ input: state_code: VA va_tanf_need_standard: 1 - va_tanf_countable_earned_income: 0 - va_tanf_countable_unearned_income: 0 + va_tanf_countable_income: 0 output: va_tanf_income_eligibility: true @@ -13,8 +12,7 @@ input: state_code: VA va_tanf_need_standard: 1_000 - va_tanf_countable_earned_income: 500 - va_tanf_countable_unearned_income: 500 + va_tanf_countable_income: 1_000 output: va_tanf_income_eligibility: true @@ -23,8 +21,7 @@ input: state_code: VA va_tanf_need_standard: 1_000 - va_tanf_countable_earned_income: 1_000 - va_tanf_countable_unearned_income: 1_000 + va_tanf_countable_income: 2_000 output: va_tanf_income_eligibility: false @@ -33,8 +30,7 @@ input: state_code: VA va_tanf_need_standard: 1_000 - va_tanf_countable_earned_income: 499 - va_tanf_countable_unearned_income: 500 + va_tanf_countable_income: 999 output: va_tanf_income_eligibility: true @@ -43,8 +39,7 @@ input: state_code: VA va_tanf_need_standard: 1_000 - va_tanf_countable_earned_income: 500 - va_tanf_countable_unearned_income: 501 + va_tanf_countable_income: 1_001 output: va_tanf_income_eligibility: false @@ -53,7 +48,6 @@ input: state_code: MD va_tanf_need_standard: 1_000 - va_tanf_countable_earned_income: 0 - va_tanf_countable_unearned_income: 0 + va_tanf_countable_income: 0 output: va_tanf_income_eligibility: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml index c1835bb6900..4949bc01fc7 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml @@ -1,4 +1,36 @@ +- name: Zero earned income returns zero. + period: 2023 + input: + state_code: VA + va_tanf_gross_earned_income: 0 + spm_unit_size: 3 + output: + va_tanf_countable_earned_income: 0 + +- name: Earned income below flat exclusion returns zero. + # Flat exclusion for size 3 = $167 * 12 = $2,004/year + # Income $1,500 < $2,004, so max_($1,500 - $2,004, 0) = 0 + period: 2023 + input: + state_code: VA + va_tanf_gross_earned_income: 1_500 + spm_unit_size: 3 + output: + va_tanf_countable_earned_income: 0 + +- name: Earned income exactly at flat exclusion returns zero. + # Flat exclusion for size 3 = $167 * 12 = $2,004/year + # max_($2,004 - $2,004, 0) * 0.8 = 0 + period: 2023 + input: + state_code: VA + va_tanf_gross_earned_income: 2_004 + spm_unit_size: 3 + output: + va_tanf_countable_earned_income: 0 + - name: Earned income $5,004, 3 household members, $2,400 per year after deduction. + # ($5,004 - $2,004) * 0.8 = $3,000 * 0.8 = $2,400 period: 2023 input: state_code: VA diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_grant_standard.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_grant_standard.yaml index ab6d56003fa..4ce2d44de39 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_grant_standard.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_grant_standard.yaml @@ -1,4 +1,4 @@ -- name: If one person and lives in Arlington, grand standard is $316 * 12/yr. +- name: If one person and lives in Arlington, grant standard is $316 * 12/yr. period: 2023 input: state_code: VA @@ -7,7 +7,7 @@ output: va_tanf_grant_standard: 316 * 12 -- name: If ten person and lives in Fairfax, grand standard is $1,085 * 12/yr. +- name: If ten person and lives in Fairfax, grant standard is $1,085 * 12/yr. period: 2023 input: state_code: VA @@ -16,7 +16,17 @@ output: va_tanf_grant_standard: 1_085 * 12 -- name: If twelve person and lives in Montgomery, grand standard is $1,247 * 12/yr. +- name: If eleven person and lives in Arlington, grant standard is ($1,085 + $81) * 12/yr. + # Family size 11 = main[10] + 1 * addition = $1,085 + $81 = $1,166/month + period: 2023 + input: + state_code: VA + spm_unit_size: 11 + county_str: ARLINGTON_COUNTY_VA + output: + va_tanf_grant_standard: 1_166 * 12 + +- name: If twelve person and lives in Montgomery, grant standard is $1,247 * 12/yr. period: 2023 input: state_code: VA @@ -25,7 +35,7 @@ output: va_tanf_grant_standard: 1_247 * 12 -- name: If one person and lives in Bedford, grand standard is $226 * 12/yr. +- name: If one person and lives in Bedford, grant standard is $226 * 12/yr. period: 2023 input: state_code: VA @@ -34,7 +44,7 @@ output: va_tanf_grant_standard: 226 * 12 -- name: If ten person and lives in Frederick, grand standard is $975 * 12/yr. +- name: If ten person and lives in Frederick, grant standard is $975 * 12/yr. period: 2023 input: state_code: VA @@ -43,7 +53,17 @@ output: va_tanf_grant_standard: 975 * 12 -- name: If twelve person and lives in Pittsylvania, grand standard is $1,137 * 12/yr. +- name: If eleven person and lives in Bedford, grant standard is ($975 + $81) * 12/yr. + # Family size 11 = main[10] + 1 * addition = $975 + $81 = $1,056/month + period: 2023 + input: + state_code: VA + spm_unit_size: 11 + county_str: BEDFORD_COUNTY_VA + output: + va_tanf_grant_standard: 1_056 * 12 + +- name: If twelve person and lives in Pittsylvania, grant standard is $1,137 * 12/yr. period: 2023 input: state_code: VA diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py index 5e81269c853..e800583947d 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py @@ -10,13 +10,8 @@ class va_tanf_income_eligibility(Variable): reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=47" def formula(spm_unit, period, parameters): - income = add( - spm_unit, - period, - [ - "va_tanf_countable_earned_income", - "va_tanf_countable_unearned_income", - ], - ) + # Care expenses must be disregarded in both initial eligibility + # and payment calculation per manual page 50 section 5. + income = spm_unit("va_tanf_countable_income", period) need_standard = spm_unit("va_tanf_need_standard", period) return income <= need_standard diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py index 2fb0d373f5b..a4da452ad0a 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py @@ -4,7 +4,7 @@ class va_tanf_countable_unearned_income(Variable): value_type = float entity = SPMUnit - label = "VA TANF gross unearned income" + label = "VA TANF countable unearned income" unit = USD definition_period = YEAR defined_for = StateCode.VA From ae14fec4515f20e2955655f3c2cb2671da2c5eae Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 7 Jan 2026 19:51:17 -0500 Subject: [PATCH 04/11] pr ifx --- .../tanf/grant_standard/group2/addition.yaml | 4 +- .../dss/tanf/grant_standard/group2/main.yaml | 4 +- .../dss/tanf/grant_standard/group2/max.yaml | 4 +- .../tanf/grant_standard/group3/addition.yaml | 6 +- .../dss/tanf/grant_standard/group3/main.yaml | 4 +- .../dss/tanf/grant_standard/group3/max.yaml | 4 +- .../deduction/care_expenses_full_time.yaml | 4 +- .../deduction/care_expenses_part_time.yaml | 4 +- .../tanf/income/deduction/earned/flat.yaml | 4 +- .../income/deduction/earned/percentage.yaml | 4 +- .../deduction/full_time_work_hours.yaml | 4 +- .../unearned/monthly_child_support.yaml | 6 +- .../unearned/monthly_interest_income.yaml | 4 +- .../states/va/dss/tanf/income/unearned.yaml | 4 +- .../states/va/dss/tanf/localities/group3.yaml | 2 +- .../gov/states/va/dss/tanf/max_unit_size.yaml | 4 +- .../tanf/need_standard/group2/addition.yaml | 6 +- .../dss/tanf/need_standard/group2/main.yaml | 4 +- .../tanf/need_standard/group3/addition.yaml | 4 +- .../dss/tanf/need_standard/group3/main.yaml | 4 +- .../up_grant_standard/group2/addition.yaml | 6 +- .../tanf/up_grant_standard/group2/main.yaml | 6 +- .../tanf/up_grant_standard/group2/max.yaml | 6 +- .../up_grant_standard/group3/addition.yaml | 6 +- .../tanf/up_grant_standard/group3/main.yaml | 6 +- .../tanf/up_grant_standard/group3/max.yaml | 6 +- .../va/dss/tanf/va_tanf_minimum_payment.yaml | 4 +- .../eligibility/va_tanf_is_full_time.yaml | 32 +-- .../eligibility/va_up_tanf_eligibility.yaml | 48 ++-- .../tanf/income/va_tanf_care_expenses.yaml | 32 +-- .../income/va_tanf_gross_earned_income.yaml | 34 +-- .../gov/states/va/dss/tanf/integration.yaml | 248 ++++++++++++++++-- 32 files changed, 360 insertions(+), 158 deletions(-) diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/addition.yaml index 5211bf58b55..dfe4797b943 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/addition.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/addition.yaml @@ -1,4 +1,4 @@ -description: Virginia provides extra assistance for each person above 10 in a family living in group II localities of this amount. +description: Virginia provides extra assistance for each person above 10 in a family living in group II localities under the Temporary Assistance for Needy Families program. values: 2020-07-01: 81 @@ -8,5 +8,5 @@ metadata: period: month label: Virginia TANF extra assistance for group II localities reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 25 - Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/main.yaml index b1bb3769f50..a9358d01ae6 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/main.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/main.yaml @@ -1,4 +1,4 @@ -description: Virginia provides up to this amount to families living in group II localities in TANF, by household size. +description: Virginia provides up to this amount to families living in group II localities under the Temporary Assistance for Needy Families program, by household size. metadata: unit: currency-USD @@ -7,7 +7,7 @@ metadata: - range(1, 11) label: Virginia TANF assistance for group II localities reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 25 - Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 1: diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/max.yaml index 2dfc9527211..88722f96732 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/max.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/max.yaml @@ -1,4 +1,4 @@ -description: Virginia provides up to maximum TANF assistance for families living in group II localities. +description: Virginia provides up to this maximum assistance for families living in group II localities under the Temporary Assistance for Needy Families program. values: 2020-07-01: 625 @@ -8,5 +8,5 @@ metadata: period: month label: Virginia TANF maximum assistance for group II localities reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 25 - Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/addition.yaml index 6ef9f7b106d..c069d9dc8ee 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/addition.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/addition.yaml @@ -1,4 +1,4 @@ -description: Virginia provides extra assistance for each person above 10 in a family living in group III localities. +description: Virginia provides extra assistance for each person above 10 in a family living in group III localities under the Temporary Assistance for Needy Families program. values: 2020-07-01: 81 @@ -6,7 +6,7 @@ values: metadata: unit: currency-USD period: month - label: Virginia TANF extra assistance for group III localities. + label: Virginia TANF extra assistance for group III localities reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 25 - Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/main.yaml index 3a23d30fa75..001b8917787 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/main.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/main.yaml @@ -1,4 +1,4 @@ -description: Virginia provides up to this amount to families living in group III localities in TANF, depending on household size. +description: Virginia provides up to this amount to families living in group III localities under the Temporary Assistance for Needy Families program, by household size. metadata: unit: currency-USD @@ -7,7 +7,7 @@ metadata: - range(1, 11) label: Virginia TANF assistance for group III localities reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 26 - Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=26 1: diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/max.yaml index c0ab0fdb811..7816df7e1b0 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/max.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/max.yaml @@ -1,4 +1,4 @@ -description: Virginia provides up to maximum TANF assistance for families living in group III localities. +description: Virginia provides up to this maximum assistance for families living in group III localities under the Temporary Assistance for Needy Families program. values: 2020-07-01: 745 @@ -8,5 +8,5 @@ metadata: period: month label: Virginia TANF maximum assistance for group III localities reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 26 - Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=26 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_full_time.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_full_time.yaml index d517cfe50af..58c139bcd95 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_full_time.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_full_time.yaml @@ -1,4 +1,4 @@ -description: Virginia deducts anticipated expenses for care of each dependent child or each incapacitated adult for full-time employed applicant of this amount, based on age. +description: Virginia deducts anticipated expenses for care of each dependent child or incapacitated adult for full-time employed applicants under the Temporary Assistance for Needy Families program, by age. metadata: unit: currency-USD @@ -8,7 +8,7 @@ metadata: threshold_unit: year amount_unit: currency-USD reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 51 - Care Expenses href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=51 # $175 per month, for care of each child, age 2 and older/incapacitated adult. diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml index a2cbc1dc966..97d4b631885 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml @@ -1,11 +1,11 @@ -description: Virginia deducts anticipated expenses for care of each dependent child or each incapacitated adult for part-time employed applicant of this amount, based on age. +description: Virginia deducts anticipated expenses for care of each dependent child or incapacitated adult for part-time employed applicants under the Temporary Assistance for Needy Families program. metadata: unit: currency-USD period: month label: Virginia TANF monthly care expenses per child/disabled adult for part-time employment reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 51 - Care Expenses href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=51 values: diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/flat.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/flat.yaml index b824f6dd994..1ef1e4bd52e 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/flat.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/flat.yaml @@ -1,4 +1,4 @@ -description: Virginia excludes this amount of earnings from TANF countable income, based on household size. +description: Virginia excludes this amount of earnings from countable income under the Temporary Assistance for Needy Families program, by household size. metadata: unit: currency-USD @@ -8,7 +8,7 @@ metadata: threshold_unit: person amount_unit: currency-USD reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 29 - Earned Income Deductions href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=29 brackets: diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/percentage.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/percentage.yaml index cdaf0b3e2a6..bbbde8d5c19 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/percentage.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/percentage.yaml @@ -1,4 +1,4 @@ -description: Virginia excludes this share of earnings from TANF countable income after a flat deduction. +description: Virginia excludes this share of earnings from countable income under the Temporary Assistance for Needy Families program, after a flat deduction. values: 2020-07-01: 0.2 @@ -8,6 +8,6 @@ metadata: period: month label: Virginia TANF earnings exclusion percent reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 29 - Earned Income Deductions href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=29 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml index 04dd892bfd3..73cb4631790 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml @@ -1,11 +1,11 @@ -description: Virginia classifies a worker as full-time based on these minimum hourly requirements. +description: Virginia classifies a worker as full-time based on this minimum weekly work hours threshold under the Temporary Assistance for Needy Families program. metadata: unit: hour period: week label: Virginia TANF full-time weekly work hours reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 49 - Work Requirements href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=49 values: diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_child_support.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_child_support.yaml index b70cee43562..5b50621a171 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_child_support.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_child_support.yaml @@ -1,4 +1,4 @@ -description: Virginia excludes this amount of monthly child support when computing unearned income. +description: Virginia excludes this amount of monthly child support when computing unearned income under the Temporary Assistance for Needy Families program. values: 2008-10-01: 50 @@ -9,7 +9,7 @@ metadata: period: month label: Virginia TANF child support exclusion reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 57 - Child Support Disregard href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=57 - - title: 22 VAC 40-295-50 - Income eligibility (historical $50 value) + - title: 22 VAC 40-295-50 - Income Eligibility (historical $50 value) href: https://law.lis.virginia.gov/admincode/title22/agency40/chapter295/section50/ diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_interest_income.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_interest_income.yaml index 6376a3c43b6..e9c756193db 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_interest_income.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_interest_income.yaml @@ -1,4 +1,4 @@ -description: Virginia excludes this amount of interest income when computing unearned income. +description: Virginia excludes this amount of interest income when computing unearned income under the Temporary Assistance for Needy Families program. values: 2020-07-01: 10 @@ -8,5 +8,5 @@ metadata: period: month label: Virginia TANF interest income exclusion reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 58 - Interest Income Disregard href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=58 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/unearned.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/unearned.yaml index 3517d804485..8cf227453a8 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/unearned.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/unearned.yaml @@ -1,4 +1,4 @@ -description: Virginia TANF counts these income sources as unearned income. +description: Virginia counts these income sources as unearned income under the Temporary Assistance for Needy Families program. values: 2020-07-01: - veterans_benefits @@ -17,5 +17,5 @@ metadata: period: year label: Virginia TANF unearned income reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 46 - Unearned Income href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=46 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml index 80de32d108d..4c6b19f3b07 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml @@ -34,5 +34,5 @@ metadata: period: year label: Virginia TANF group III localities reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 24 - Locality Groups href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=24 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/max_unit_size.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/max_unit_size.yaml index 19bda201dbc..15dcaa2f16f 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/max_unit_size.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/max_unit_size.yaml @@ -1,4 +1,4 @@ -description: Virginia sets this maximum unit size for determining TANF grant and need standards. +description: Virginia sets this maximum unit size for determining grant and need standards under the Temporary Assistance for Needy Families program. values: 2020-07-01: 10 @@ -8,5 +8,5 @@ metadata: period: year label: Virginia TANF maximum unit size for standards lookup reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 47 - Unit Size href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=47 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/addition.yaml index b4c0a9c932d..e096d84c462 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/addition.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/addition.yaml @@ -1,4 +1,4 @@ -description: Virginia provides an additional income limit for each person above 10 in a family living in group II localities of this amount. +description: Virginia provides an additional income limit for each person above 10 in a family living in group II localities under the Temporary Assistance for Needy Families program. values: 2020-07-01: 162 @@ -6,7 +6,7 @@ values: metadata: unit: currency-USD period: month - label: Virginia TANF additional income limit for group II localities + label: Virginia TANF additional income limit for group II localities reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 83 - Need Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=83 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml index a9d9f2f3c20..85bba3c2a36 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml @@ -1,4 +1,4 @@ -description: Virginia limits its TANF program to households living in group II localities with up to this income level, based on household size. +description: Virginia limits its Temporary Assistance for Needy Families program to households living in group II localities with up to this income level, by household size. metadata: unit: currency-USD @@ -7,7 +7,7 @@ metadata: - range(1, 11) label: Virginia TANF income limit for group II localities reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 83 - Need Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=83 1: diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/addition.yaml index b870410b423..8a6ce5c24e0 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/addition.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/addition.yaml @@ -1,4 +1,4 @@ -description: Virginia provides an additional income limit for each person above 10 in a family living in group III localities. +description: Virginia provides an additional income limit for each person above 10 in a family living in group III localities under the Temporary Assistance for Needy Families program. values: 2020-07-01: 162 @@ -8,5 +8,5 @@ metadata: period: month label: Virginia TANF extra income limit for group III localities reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 83 - Need Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=83 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml index 9d208a9edcb..0041b98fa4c 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml @@ -1,4 +1,4 @@ -description: Virginia limits its TANF program to households living in group III localities with up to this income level, based on household size. +description: Virginia limits its Temporary Assistance for Needy Families program to households living in group III localities with up to this income level, by household size. metadata: unit: currency-USD @@ -7,7 +7,7 @@ metadata: - range(1, 11) label: Virginia TANF income limit for group III localities reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 83 - Need Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=83 1: diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/addition.yaml index 09e9f871fdf..acba4126fd4 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/addition.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/addition.yaml @@ -1,4 +1,4 @@ -description: Virginia provides additional assistance for each person above 10 in a family living in group II localities. +description: Virginia provides additional assistance for each person above 10 in a family living in group II localities under the Temporary Assistance for Needy Families Unemployed Parent program. values: 2020-07-01: 71 @@ -6,7 +6,7 @@ values: metadata: unit: currency-USD period: month - label: Virginia TANF group II localities additional assistance + label: Virginia TANF-UP group II localities additional assistance reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 25 - UP Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/main.yaml index 55c13af1bcd..0c979ad6c11 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/main.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/main.yaml @@ -1,13 +1,13 @@ -description: Virginia provides up to this amount to families living in group II localities under the TANF program, depending on household size. +description: Virginia provides up to this amount to families living in group II localities under the Temporary Assistance for Needy Families Unemployed Parent program, by household size. metadata: unit: currency-USD period: month breakdown: - range(1, 11) - label: Virginia TANF group II localities assistance + label: Virginia TANF-UP group II localities assistance reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 25 - UP Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 1: diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/max.yaml index ddace8d5b28..b118611a864 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/max.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/max.yaml @@ -1,4 +1,4 @@ -description: Virginia provides up to this maximum TANF assistance for families living in group II localities. +description: Virginia provides up to this maximum assistance for families living in group II localities under the Temporary Assistance for Needy Families Unemployed Parent program. values: 2020-07-01: 544 @@ -6,7 +6,7 @@ values: metadata: unit: currency-USD period: month - label: Virginia TANF group II localities maximum assistance + label: Virginia TANF-UP group II localities maximum assistance reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 25 - UP Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/addition.yaml index 7853ff3140e..e7480a8932c 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/addition.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/addition.yaml @@ -1,4 +1,4 @@ -description: Virginia provides additional assistance for each person above 10 in a family living in group III localities under the TANF program. +description: Virginia provides additional assistance for each person above 10 in a family living in group III localities under the Temporary Assistance for Needy Families Unemployed Parent program. values: 2020-07-01: 71 @@ -6,7 +6,7 @@ values: metadata: unit: currency-USD period: month - label: Virginia TANF group III localities additional assistance + label: Virginia TANF-UP group III localities additional assistance reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 25 - UP Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/main.yaml index 57a11c77533..331ca7b03c7 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/main.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/main.yaml @@ -1,13 +1,13 @@ -description: Virginia provides up to this amount to families living in group III localities in TANF, based on household size. +description: Virginia provides up to this amount to families living in group III localities under the Temporary Assistance for Needy Families Unemployed Parent program, by household size. metadata: unit: currency-USD period: month breakdown: - range(1, 11) - label: Virginia TANF assistance for group III localities + label: Virginia TANF-UP assistance for group III localities reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 26 - UP Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=26 1: diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/max.yaml index 719c28f3cd8..53b9baaab91 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/max.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/max.yaml @@ -1,4 +1,4 @@ -description: Virginia provides up to this maximum TANF assistance for families living in group III localities. +description: Virginia provides up to this maximum assistance for families living in group III localities under the Temporary Assistance for Needy Families Unemployed Parent program. values: 2020-07-01: 648 @@ -6,7 +6,7 @@ values: metadata: unit: currency-USD period: month - label: Virginia TANF maximum assistance for group III localities + label: Virginia TANF-UP maximum assistance for group III localities reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 26 - UP Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=26 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/va_tanf_minimum_payment.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/va_tanf_minimum_payment.yaml index 2f6d8d99ded..ac393154d7d 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/va_tanf_minimum_payment.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/va_tanf_minimum_payment.yaml @@ -1,4 +1,4 @@ -description: Virginia excludes payments below this amount under the TANF program. +description: Virginia excludes payments below this amount under the Temporary Assistance for Needy Families program. values: 2020-07-01: 10 @@ -8,5 +8,5 @@ metadata: period: month label: Virginia TANF minimum payment reference: - - title: Virginia TANF Guidance Manual - Need and Amount of Assistance + - title: Virginia TANF Manual, p. 85 - Minimum Payment href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=85 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.yaml index 5ecfc91a095..841b60b5ebd 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.yaml @@ -2,18 +2,18 @@ period: 2023 input: people: - parent1: + person1: work_hours_per_week: 0 is_mother: true - parent2: + person2: work_hours_per_week: 0 is_father: true - child: + person3: work_hours_per_week: 0 is_child: true households: household: - members: [parent1, parent2, child] + members: [person1, person2, person3] state_code: VA output: va_tanf_is_full_time: false @@ -22,18 +22,18 @@ period: 2023 input: people: - parent1: + person1: work_hours_per_week: 40 is_mother: true - parent2: + person2: work_hours_per_week: 0 is_father: true - child: + person3: work_hours_per_week: 0 is_child: true households: household: - members: [parent1, parent2, child] + members: [person1, person2, person3] state_code: VA output: va_tanf_is_full_time: true @@ -42,18 +42,18 @@ period: 2023 input: people: - parent1: + person1: work_hours_per_week: 29 is_mother: true - parent2: + person2: work_hours_per_week: 0 is_father: true - child: + person3: work_hours_per_week: 30 is_child: true households: household: - members: [parent1, parent2, child] + members: [person1, person2, person3] state_code: VA output: va_tanf_is_full_time: false @@ -62,18 +62,18 @@ period: 2023 input: people: - parent1: + person1: work_hours_per_week: 30 is_mother: true - parent2: + person2: work_hours_per_week: 0 is_father: true - child: + person3: work_hours_per_week: 0 is_child: true households: household: - members: [parent1, parent2, child] + members: [person1, person2, person3] state_code: VA output: # 30 hours >= 30 threshold, so classified as full-time diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml index 7eb0ce5a0b8..172c7b196f3 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml @@ -2,20 +2,20 @@ period: 2023 input: people: - parent: + person1: earned_income: 0 is_mother: true is_disabled: false - child: + person2: earned_income: 0 is_child: true is_disabled: false spm_units: spm_unit: - members: [parent, child] + members: [person1, person2] households: household: - members: [parent, child] + members: [person1, person2] state_code: VA output: va_up_tanf_eligibility: false @@ -24,24 +24,24 @@ period: 2023 input: people: - parent1: + person1: earned_income: 0 is_mother: true is_disabled: false - parent2: + person2: earned_income: 0 is_father: true is_disabled: true - child: + person3: earned_income: 0 is_child: true is_disabled: false spm_units: spm_unit: - members: [parent1, parent2, child] + members: [person1, person2, person3] households: household: - members: [parent1, parent2, child] + members: [person1, person2, person3] state_code: VA output: va_up_tanf_eligibility: false @@ -50,24 +50,24 @@ period: 2023 input: people: - parent1: + person1: earned_income: 100 is_mother: true is_disabled: false - parent2: + person2: earned_income: 0 is_father: true is_disabled: false - child: + person3: earned_income: 0 is_child: true is_disabled: false spm_units: spm_unit: - members: [parent1, parent2, child] + members: [person1, person2, person3] households: household: - members: [parent1, parent2, child] + members: [person1, person2, person3] state_code: VA output: va_up_tanf_eligibility: false @@ -76,24 +76,24 @@ period: 2023 input: people: - parent1: + person1: earned_income: 0 is_mother: true is_disabled: false - parent2: + person2: earned_income: 0 is_father: true is_disabled: false - child: + person3: earned_income: 0 is_child: true is_disabled: false spm_units: spm_unit: - members: [parent1, parent2, child] + members: [person1, person2, person3] households: household: - members: [parent1, parent2, child] + members: [person1, person2, person3] state_code: VA output: va_up_tanf_eligibility: true @@ -102,24 +102,24 @@ period: 2023 input: people: - parent1: + person1: earned_income: 0 is_mother: true is_disabled: false - parent2: + person2: earned_income: 0 is_father: true is_disabled: false - child: + person3: earned_income: 0 is_child: true is_disabled: false spm_units: spm_unit: - members: [parent1, parent2, child] + members: [person1, person2, person3] households: household: - members: [parent1, parent2, child] + members: [person1, person2, person3] state_code: AZ output: va_up_tanf_eligibility: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_care_expenses.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_care_expenses.yaml index a128d44c141..86bcf872712 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_care_expenses.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_care_expenses.yaml @@ -2,20 +2,20 @@ period: 2023 input: people: - parent: + person1: is_adult: true is_disabled: false age: 25 - child: + person2: is_child: true age: 1 spm_units: spm_unit: - members: [parent, child] + members: [person1, person2] va_tanf_is_full_time: true households: household: - members: [parent, child] + members: [person1, person2] state_code: VA output: va_tanf_care_expenses: 2_400 @@ -24,27 +24,27 @@ period: 2023 input: people: - parent1: + person1: is_adult: true is_disabled: false age: 25 - parent2: + person2: is_adult: true is_disabled: true age: 25 - child1: + person3: is_child: true age: 1 - child2: + person4: is_child: true age: 2 spm_units: spm_unit: - members: [parent1, parent2, child1, child2] + members: [person1, person2, person3, person4] va_tanf_is_full_time: true households: household: - members: [parent1, parent2, child1, child2] + members: [person1, person2, person3, person4] state_code: VA output: va_tanf_care_expenses: 6_600 @@ -53,27 +53,27 @@ period: 2023 input: people: - parent1: + person1: is_adult: true is_disabled: false age: 25 - parent2: + person2: is_adult: true is_disabled: true age: 25 - child1: + person3: is_child: true age: 1 - child2: + person4: is_child: true age: 3 spm_units: spm_unit: - members: [parent1, parent2, child1, child2] + members: [person1, person2, person3, person4] va_tanf_is_full_time: false households: household: - members: [parent1, parent2, child1, child2] + members: [person1, person2, person3, person4] state_code: VA output: va_tanf_care_expenses: 4_320 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.yaml index d19e286d70d..c99a4f3ecd6 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.yaml @@ -2,20 +2,20 @@ period: 2023 input: people: - parent1: + person1: earned_income: 1_000 - parent2: + person2: earned_income: 2_000 - child: + person3: earned_income: 300 - is_child : true + is_child: true is_full_time_student: true spm_units: spm_unit: - members: [parent1, parent2, child] + members: [person1, person2, person3] households: household: - members: [parent1, parent2, child] + members: [person1, person2, person3] state_code: VA output: va_tanf_gross_earned_income: 3_000 @@ -24,20 +24,20 @@ period: 2023 input: people: - parent1: + person1: earned_income: 1_000 - parent2: + person2: earned_income: 2_000 - child: + person3: earned_income: 300 - is_child : true + is_child: true is_full_time_student: false spm_units: spm_unit: - members: [parent1, parent2, child] + members: [person1, person2, person3] households: household: - members: [parent1, parent2, child] + members: [person1, person2, person3] state_code: VA output: va_tanf_gross_earned_income: 3_300 @@ -47,18 +47,18 @@ period: 2023 input: people: - parent1: + person1: earned_income: 1_000 - parent2: + person2: earned_income: 2_000 - parent3: + person3: earned_income: 1_000 spm_units: spm_unit: - members: [parent1, parent2, parent3] + members: [person1, person2, person3] households: household: - members: [parent1, parent2, parent3] + members: [person1, person2, person3] state_code: VA output: va_tanf_gross_earned_income: 4_000 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml index 86593b9f54a..300acad6203 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml @@ -5,23 +5,23 @@ period: 2023 input: people: - mother: + person1: is_mother: true age: 30 earned_income: 12_000 work_hours_per_week: 40 - child1: + person2: is_child: true age: 5 - child2: + person3: is_child: true age: 3 spm_units: spm_unit: - members: [mother, child1, child2] + members: [person1, person2, person3] households: household: - members: [mother, child1, child2] + members: [person1, person2, person3] state_code: VA county_str: ARLINGTON_COUNTY_VA output: @@ -61,20 +61,20 @@ period: 2023 input: people: - mother: + person1: is_mother: true age: 28 earned_income: 6_000 work_hours_per_week: 20 - child1: + person2: is_child: true age: 4 spm_units: spm_unit: - members: [mother, child1] + members: [person1, person2] households: household: - members: [mother, child1] + members: [person1, person2] state_code: VA county_str: PITTSYLVANIA_COUNTY_VA output: @@ -114,30 +114,30 @@ period: 2023 input: people: - father: + person1: is_father: true age: 35 earned_income: 0 work_hours_per_week: 0 is_disabled: false - mother: + person2: is_mother: true age: 32 earned_income: 0 work_hours_per_week: 0 is_disabled: false - child1: + person3: is_child: true age: 8 - child2: + person4: is_child: true age: 6 spm_units: spm_unit: - members: [father, mother, child1, child2] + members: [person1, person2, person3, person4] households: household: - members: [father, mother, child1, child2] + members: [person1, person2, person3, person4] state_code: VA county_str: ARLINGTON_COUNTY_VA output: @@ -176,20 +176,20 @@ period: 2023 input: people: - mother: + person1: is_mother: true age: 35 earned_income: 30_000 work_hours_per_week: 40 - child1: + person2: is_child: true age: 10 spm_units: spm_unit: - members: [mother, child1] + members: [person1, person2] households: household: - members: [mother, child1] + members: [person1, person2] state_code: VA county_str: ARLINGTON_COUNTY_VA output: @@ -227,20 +227,20 @@ period: 2023 input: people: - mother: + person1: is_mother: true age: 25 earned_income: 8_000 work_hours_per_week: 35 - infant: + person2: is_child: true age: 1 spm_units: spm_unit: - members: [mother, infant] + members: [person1, person2] households: household: - members: [mother, infant] + members: [person1, person2] state_code: VA county_str: PITTSYLVANIA_COUNTY_VA output: @@ -275,3 +275,205 @@ # Minimum: $120, Maximum (Group II): $7,500 # $1,587.20 >= $120 and <= $7,500, so benefit = $1,587.20 va_tanf: 1_587.2 + +- name: Family with earned and unearned income (child support) + period: 2023 + input: + people: + person1: + is_mother: true + age: 32 + earned_income: 6_000 + work_hours_per_week: 25 + child_support_received: 2_400 + person2: + is_child: true + age: 7 + person3: + is_child: true + age: 4 + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: VA + county_str: ARLINGTON_COUNTY_VA + output: + # Family size: 3 + # Group III locality (Arlington County) + # + # Need standard: $1,017/month * 12 = $12,204/year + va_tanf_need_standard: 12_204 + # + # Grant standard: $508/month * 12 = $6,096/year + va_tanf_grant_standard: 6_096 + # + # Part-time (25 hours < 30 hours threshold) + va_tanf_is_full_time: false + # + # Earned income deduction: + # Flat exclusion (size 3): $167/month * 12 = $2,004/year + # After flat: max($6,000 - $2,004, 0) = $3,996 + # After 20%: $3,996 * 0.8 = $3,196.80 + va_tanf_countable_earned_income: 3_196.8 + # + # Unearned income: + # Child support received: $2,400/year = $200/month + # Child support disregard: $100/month * 12 = $1,200/year + # Countable child support: $2,400 - $1,200 = $1,200/year + va_tanf_countable_unearned_income: 1_200 + # + # Care expenses (part-time, 2 children age 2+): $120 * 2 * 12 = $2,880/year + va_tanf_care_expenses: 2_880 + # + # Countable income: max($3,196.80 - $2,880 + $1,200, 0) = $1,516.80 + va_tanf_countable_income: 1_516.8 + # + # Income eligibility: $1,516.80 <= $12,204? YES + va_tanf_income_eligibility: true + # + # Benefit: $6,096 - $1,516.80 = $4,579.20 + # Minimum: $120, Maximum: $8,940 + # $4,579.20 >= $120 and <= $8,940, so benefit = $4,579.20 + va_tanf: 4_579.2 + +- name: Large family (size 8) in Group III locality + period: 2023 + input: + people: + person1: + is_mother: true + age: 38 + earned_income: 10_000 + work_hours_per_week: 30 + person2: + is_father: true + age: 40 + earned_income: 0 + work_hours_per_week: 0 + is_disabled: true + person3: + is_child: true + age: 16 + person4: + is_child: true + age: 14 + person5: + is_child: true + age: 11 + person6: + is_child: true + age: 8 + person7: + is_child: true + age: 5 + person8: + is_child: true + age: 2 + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5, person6, person7, person8] + households: + household: + members: [person1, person2, person3, person4, person5, person6, person7, person8] + state_code: VA + county_str: FAIRFAX_COUNTY_VA + output: + # Family size: 8 + # Group III locality (Fairfax County) + # + # Need standard (size 8): $1,868/month * 12 = $22,416/year + va_tanf_need_standard: 22_416 + # + # Grant standard (size 8): $933/month * 12 = $11,196/year + va_tanf_grant_standard: 11_196 + # + # Full-time (30 hours >= 30 hours threshold) + va_tanf_is_full_time: true + # + # Earned income deduction: + # Flat exclusion (size 8, uses size 6+ rate): $240/month * 12 = $2,880/year + # After flat: max($10,000 - $2,880, 0) = $7,120 + # After 20%: $7,120 * 0.8 = $5,696 + va_tanf_countable_earned_income: 5_696 + # + # Care expenses (full-time): + # - 1 disabled adult: $175/month + # - 6 children age 2+: $175 * 6 = $1,050/month + # Total: ($175 + $1,050) * 12 = $14,700/year + va_tanf_care_expenses: 14_700 + # + # Countable income: max($5,696 - $14,700 + $0, 0) = $0 + va_tanf_countable_income: 0 + # + # Income eligibility: $0 <= $22,416? YES + va_tanf_income_eligibility: true + # + # Benefit: $11,196 - $0 = $11,196 + # Maximum (Group III): $745 * 12 = $8,940 + # $11,196 > $8,940, so capped at $8,940 + va_tanf: 8_940 + +- name: Family with disabled adult as care recipient + period: 2023 + input: + people: + person1: + is_mother: true + age: 45 + earned_income: 9_000 + work_hours_per_week: 35 + person2: + is_father: true + age: 50 + earned_income: 0 + work_hours_per_week: 0 + is_disabled: true + person3: + is_child: true + age: 12 + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: VA + county_str: PITTSYLVANIA_COUNTY_VA + output: + # Family size: 3 + # Group II locality (Pittsylvania County) + # + # Need standard: $836/month * 12 = $10,032/year + va_tanf_need_standard: 10_032 + # + # Grant standard: $417/month * 12 = $5,004/year + va_tanf_grant_standard: 5_004 + # + # Full-time (35 hours >= 30 hours threshold) + va_tanf_is_full_time: true + # + # Earned income deduction: + # Flat exclusion (size 3): $167/month * 12 = $2,004/year + # After flat: max($9,000 - $2,004, 0) = $6,996 + # After 20%: $6,996 * 0.8 = $5,596.80 + va_tanf_countable_earned_income: 5_596.8 + # + # Care expenses (full-time): + # - 1 disabled adult age 50 (2+): $175/month + # - 1 child age 12 (2+): $175/month + # Total: ($175 + $175) * 12 = $4,200/year + va_tanf_care_expenses: 4_200 + # + # Countable income: max($5,596.80 - $4,200 + $0, 0) = $1,396.80 + va_tanf_countable_income: 1_396.8 + # + # Income eligibility: $1,396.80 <= $10,032? YES + va_tanf_income_eligibility: true + # + # Benefit: $5,004 - $1,396.80 = $3,607.20 + # Minimum: $120, Maximum (Group II): $7,500 + # $3,607.20 >= $120 and <= $7,500, so benefit = $3,607.20 + va_tanf: 3_607.2 From c828e948f43360dc55a9669cd937ac6f55bba61e Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 8 Jan 2026 16:29:35 -0500 Subject: [PATCH 05/11] year to month and fix --- .../tanf/grant_standard/group2/addition.yaml | 2 +- .../dss/tanf/grant_standard/group2/main.yaml | 4 +- .../dss/tanf/grant_standard/group2/max.yaml | 2 +- .../tanf/grant_standard/group3/addition.yaml | 2 +- .../dss/tanf/grant_standard/group3/main.yaml | 4 +- .../dss/tanf/grant_standard/group3/max.yaml | 2 +- .../deduction/care_expenses_full_time.yaml | 4 +- .../deduction/care_expenses_part_time.yaml | 2 +- .../tanf/income/deduction/earned/flat.yaml | 4 +- .../income/deduction/earned/percentage.yaml | 2 +- .../deduction/full_time_work_hours.yaml | 2 +- .../unearned/monthly_child_support.yaml | 4 +- .../unearned/monthly_interest_income.yaml | 12 - .../states/va/dss/tanf/income/unearned.yaml | 21 -- .../states/va/dss/tanf/localities/group3.yaml | 2 +- .../gov/states/va/dss/tanf/max_unit_size.yaml | 2 +- .../tanf/need_standard/group2/addition.yaml | 2 +- .../dss/tanf/need_standard/group2/main.yaml | 4 +- .../tanf/need_standard/group3/addition.yaml | 2 +- .../dss/tanf/need_standard/group3/main.yaml | 4 +- .../up_grant_standard/group2/addition.yaml | 2 +- .../tanf/up_grant_standard/group2/main.yaml | 4 +- .../tanf/up_grant_standard/group2/max.yaml | 2 +- .../up_grant_standard/group3/addition.yaml | 2 +- .../tanf/up_grant_standard/group3/main.yaml | 4 +- .../tanf/up_grant_standard/group3/max.yaml | 2 +- .../va/dss/tanf/va_tanf_minimum_payment.yaml | 12 - .../eligibility/va_up_tanf_eligibility.yaml | 344 +++++++++++++++--- ....yaml => va_tanf_childcare_deduction.yaml} | 6 +- .../va_tanf_countable_earned_income.yaml | 106 +++--- .../tanf/income/va_tanf_countable_income.yaml | 29 -- .../income/va_tanf_gross_earned_income.yaml | 64 ---- .../va_tanf_is_full_time.yaml | 0 .../gov/states/va/dss/tanf/integration.yaml | 83 +++-- .../gov/states/va/dss/tanf/va_tanf.yaml | 20 +- .../tanf/eligibility/va_tanf_eligibility.py | 10 +- .../eligibility/va_tanf_income_eligibility.py | 30 +- .../eligibility/va_up_tanf_eligibility.py | 27 +- ...nses.py => va_tanf_childcare_deduction.py} | 13 +- .../income/va_tanf_countable_earned_income.py | 22 +- .../tanf/income/va_tanf_countable_income.py | 20 +- .../va_tanf_countable_unearned_income.py | 29 +- .../income/va_tanf_gross_earned_income.py | 22 -- .../dss/tanf/income/va_tanf_gross_income.py | 13 + .../va_tanf_is_full_time.py | 4 +- .../gov/states/va/dss/tanf/va_tanf.py | 32 +- .../va/dss/tanf/va_tanf_grant_standard.py | 7 +- .../va/dss/tanf/va_tanf_need_standard.py | 7 +- .../va/dss/tanf/va_tanf_up_grant_standard.py | 7 +- 49 files changed, 578 insertions(+), 428 deletions(-) delete mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_interest_income.yaml delete mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/income/unearned.yaml delete mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/va_tanf_minimum_payment.yaml rename policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/{va_tanf_care_expenses.yaml => va_tanf_childcare_deduction.yaml} (93%) delete mode 100644 policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_income.yaml delete mode 100644 policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.yaml rename policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/{eligibility => income}/va_tanf_is_full_time.yaml (100%) rename policyengine_us/variables/gov/states/va/dss/tanf/income/{va_tanf_care_expenses.py => va_tanf_childcare_deduction.py} (81%) delete mode 100644 policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.py create mode 100644 policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_gross_income.py rename policyengine_us/variables/gov/states/va/dss/tanf/{eligibility => income}/va_tanf_is_full_time.py (85%) diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/addition.yaml index dfe4797b943..02b6653eb6d 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/addition.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/addition.yaml @@ -8,5 +8,5 @@ metadata: period: month label: Virginia TANF extra assistance for group II localities reference: - - title: Virginia TANF Manual, p. 25 - Grant Standards + - title: Virginia TANF Manual Section 302 - Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/main.yaml index a9358d01ae6..c4168ba8322 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/main.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/main.yaml @@ -1,4 +1,4 @@ -description: Virginia provides up to this amount to families living in group II localities under the Temporary Assistance for Needy Families program, by household size. +description: Virginia provides up to this amount to families living in group II localities under the Temporary Assistance for Needy Families program. metadata: unit: currency-USD @@ -7,7 +7,7 @@ metadata: - range(1, 11) label: Virginia TANF assistance for group II localities reference: - - title: Virginia TANF Manual, p. 25 - Grant Standards + - title: Virginia TANF Manual Section 302 - Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 1: diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/max.yaml index 88722f96732..97d3dbdf1fc 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/max.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/max.yaml @@ -8,5 +8,5 @@ metadata: period: month label: Virginia TANF maximum assistance for group II localities reference: - - title: Virginia TANF Manual, p. 25 - Grant Standards + - title: Virginia TANF Manual Section 302 - Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/addition.yaml index c069d9dc8ee..111b5645c76 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/addition.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/addition.yaml @@ -8,5 +8,5 @@ metadata: period: month label: Virginia TANF extra assistance for group III localities reference: - - title: Virginia TANF Manual, p. 25 - Grant Standards + - title: Virginia TANF Manual Section 302 - Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/main.yaml index 001b8917787..9d064d9b263 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/main.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/main.yaml @@ -1,4 +1,4 @@ -description: Virginia provides up to this amount to families living in group III localities under the Temporary Assistance for Needy Families program, by household size. +description: Virginia provides up to this amount to families living in group III localities under the Temporary Assistance for Needy Families program. metadata: unit: currency-USD @@ -7,7 +7,7 @@ metadata: - range(1, 11) label: Virginia TANF assistance for group III localities reference: - - title: Virginia TANF Manual, p. 26 - Grant Standards + - title: Virginia TANF Manual Section 302 - Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=26 1: diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/max.yaml index 7816df7e1b0..a041749e105 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/max.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/max.yaml @@ -8,5 +8,5 @@ metadata: period: month label: Virginia TANF maximum assistance for group III localities reference: - - title: Virginia TANF Manual, p. 26 - Grant Standards + - title: Virginia TANF Manual Section 302 - Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=26 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_full_time.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_full_time.yaml index 58c139bcd95..614de537ff0 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_full_time.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_full_time.yaml @@ -1,4 +1,4 @@ -description: Virginia deducts anticipated expenses for care of each dependent child or incapacitated adult for full-time employed applicants under the Temporary Assistance for Needy Families program, by age. +description: Virginia deducts anticipated expenses for care of each dependent child or incapacitated adult for full-time employed applicants under the Temporary Assistance for Needy Families program. metadata: unit: currency-USD @@ -8,7 +8,7 @@ metadata: threshold_unit: year amount_unit: currency-USD reference: - - title: Virginia TANF Manual, p. 51 - Care Expenses + - title: Virginia TANF Manual Section 302 - Care Expenses href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=51 # $175 per month, for care of each child, age 2 and older/incapacitated adult. diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml index 97d4b631885..a6f91d7231e 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml @@ -5,7 +5,7 @@ metadata: period: month label: Virginia TANF monthly care expenses per child/disabled adult for part-time employment reference: - - title: Virginia TANF Manual, p. 51 - Care Expenses + - title: Virginia TANF Manual Section 302 - Care Expenses href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=51 values: diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/flat.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/flat.yaml index 1ef1e4bd52e..61b6b3a8756 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/flat.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/flat.yaml @@ -1,4 +1,4 @@ -description: Virginia excludes this amount of earnings from countable income under the Temporary Assistance for Needy Families program, by household size. +description: Virginia excludes this amount of earnings from countable income under the Temporary Assistance for Needy Families program. metadata: unit: currency-USD @@ -8,7 +8,7 @@ metadata: threshold_unit: person amount_unit: currency-USD reference: - - title: Virginia TANF Manual, p. 29 - Earned Income Deductions + - title: Virginia TANF Manual Section 302 - Earned Income Deductions href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=29 brackets: diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/percentage.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/percentage.yaml index bbbde8d5c19..e862628af6c 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/percentage.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/percentage.yaml @@ -8,6 +8,6 @@ metadata: period: month label: Virginia TANF earnings exclusion percent reference: - - title: Virginia TANF Manual, p. 29 - Earned Income Deductions + - title: Virginia TANF Manual Section 302 - Earned Income Deductions href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=29 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml index 73cb4631790..88b528bb501 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml @@ -5,7 +5,7 @@ metadata: period: week label: Virginia TANF full-time weekly work hours reference: - - title: Virginia TANF Manual, p. 49 - Work Requirements + - title: Virginia TANF Manual Section 302 - Work Requirements href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=49 values: diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_child_support.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_child_support.yaml index 5b50621a171..52b98085894 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_child_support.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_child_support.yaml @@ -2,14 +2,14 @@ description: Virginia excludes this amount of monthly child support when computi values: 2008-10-01: 50 - 2020-07-01: 100 + 2016-07-01: 100 metadata: unit: currency-USD period: month label: Virginia TANF child support exclusion reference: - - title: Virginia TANF Manual, p. 57 - Child Support Disregard + - title: Virginia TANF Manual Section 302 - Child Support Disregard href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=57 - title: 22 VAC 40-295-50 - Income Eligibility (historical $50 value) href: https://law.lis.virginia.gov/admincode/title22/agency40/chapter295/section50/ diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_interest_income.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_interest_income.yaml deleted file mode 100644 index e9c756193db..00000000000 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_interest_income.yaml +++ /dev/null @@ -1,12 +0,0 @@ -description: Virginia excludes this amount of interest income when computing unearned income under the Temporary Assistance for Needy Families program. - -values: - 2020-07-01: 10 - -metadata: - unit: currency-USD - period: month - label: Virginia TANF interest income exclusion - reference: - - title: Virginia TANF Manual, p. 58 - Interest Income Disregard - href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=58 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/unearned.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/unearned.yaml deleted file mode 100644 index 8cf227453a8..00000000000 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/unearned.yaml +++ /dev/null @@ -1,21 +0,0 @@ -description: Virginia counts these income sources as unearned income under the Temporary Assistance for Needy Families program. -values: - 2020-07-01: - - veterans_benefits - - rental_income - - alimony_income - - dividend_income - - interest_income - - miscellaneous_income - - pension_income - - unemployment_compensation - - gi_cash_assistance - - social_security - - child_support_received -metadata: - unit: list - period: year - label: Virginia TANF unearned income - reference: - - title: Virginia TANF Manual, p. 46 - Unearned Income - href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=46 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml index 4c6b19f3b07..f039609e1e4 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml @@ -34,5 +34,5 @@ metadata: period: year label: Virginia TANF group III localities reference: - - title: Virginia TANF Manual, p. 24 - Locality Groups + - title: Virginia TANF Manual Section 302 - Locality Groups href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=24 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/max_unit_size.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/max_unit_size.yaml index 15dcaa2f16f..348c4a2a018 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/max_unit_size.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/max_unit_size.yaml @@ -8,5 +8,5 @@ metadata: period: year label: Virginia TANF maximum unit size for standards lookup reference: - - title: Virginia TANF Manual, p. 47 - Unit Size + - title: Virginia TANF Manual Section 302 - Unit Size href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=47 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/addition.yaml index e096d84c462..6fcad1b873f 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/addition.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/addition.yaml @@ -8,5 +8,5 @@ metadata: period: month label: Virginia TANF additional income limit for group II localities reference: - - title: Virginia TANF Manual, p. 83 - Need Standards + - title: Virginia TANF Manual Section 302 - Need Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=83 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml index 85bba3c2a36..3ceeed83d92 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml @@ -1,4 +1,4 @@ -description: Virginia limits its Temporary Assistance for Needy Families program to households living in group II localities with up to this income level, by household size. +description: Virginia limits its Temporary Assistance for Needy Families program to households living in group II localities with up to this income level. metadata: unit: currency-USD @@ -7,7 +7,7 @@ metadata: - range(1, 11) label: Virginia TANF income limit for group II localities reference: - - title: Virginia TANF Manual, p. 83 - Need Standards + - title: Virginia TANF Manual Section 302 - Need Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=83 1: diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/addition.yaml index 8a6ce5c24e0..ef3a1f0cf3f 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/addition.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/addition.yaml @@ -8,5 +8,5 @@ metadata: period: month label: Virginia TANF extra income limit for group III localities reference: - - title: Virginia TANF Manual, p. 83 - Need Standards + - title: Virginia TANF Manual Section 302 - Need Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=83 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml index 0041b98fa4c..81b26cf5684 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml @@ -1,4 +1,4 @@ -description: Virginia limits its Temporary Assistance for Needy Families program to households living in group III localities with up to this income level, by household size. +description: Virginia limits its Temporary Assistance for Needy Families program to households living in group III localities with up to this income level. metadata: unit: currency-USD @@ -7,7 +7,7 @@ metadata: - range(1, 11) label: Virginia TANF income limit for group III localities reference: - - title: Virginia TANF Manual, p. 83 - Need Standards + - title: Virginia TANF Manual Section 302 - Need Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=83 1: diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/addition.yaml index acba4126fd4..75a23693108 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/addition.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/addition.yaml @@ -8,5 +8,5 @@ metadata: period: month label: Virginia TANF-UP group II localities additional assistance reference: - - title: Virginia TANF Manual, p. 25 - UP Grant Standards + - title: Virginia TANF Manual Section 302 - UP Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/main.yaml index 0c979ad6c11..83492bf1967 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/main.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/main.yaml @@ -1,4 +1,4 @@ -description: Virginia provides up to this amount to families living in group II localities under the Temporary Assistance for Needy Families Unemployed Parent program, by household size. +description: Virginia provides up to this amount to families living in group II localities under the Temporary Assistance for Needy Families Unemployed Parent program. metadata: unit: currency-USD @@ -7,7 +7,7 @@ metadata: - range(1, 11) label: Virginia TANF-UP group II localities assistance reference: - - title: Virginia TANF Manual, p. 25 - UP Grant Standards + - title: Virginia TANF Manual Section 302 - UP Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 1: diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/max.yaml index b118611a864..757a9bf0180 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/max.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/max.yaml @@ -8,5 +8,5 @@ metadata: period: month label: Virginia TANF-UP group II localities maximum assistance reference: - - title: Virginia TANF Manual, p. 25 - UP Grant Standards + - title: Virginia TANF Manual Section 302 - UP Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/addition.yaml index e7480a8932c..4d6814e7167 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/addition.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/addition.yaml @@ -8,5 +8,5 @@ metadata: period: month label: Virginia TANF-UP group III localities additional assistance reference: - - title: Virginia TANF Manual, p. 25 - UP Grant Standards + - title: Virginia TANF Manual Section 302 - UP Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=25 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/main.yaml index 331ca7b03c7..ad922b9b654 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/main.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/main.yaml @@ -1,4 +1,4 @@ -description: Virginia provides up to this amount to families living in group III localities under the Temporary Assistance for Needy Families Unemployed Parent program, by household size. +description: Virginia provides up to this amount to families living in group III localities under the Temporary Assistance for Needy Families Unemployed Parent program. metadata: unit: currency-USD @@ -7,7 +7,7 @@ metadata: - range(1, 11) label: Virginia TANF-UP assistance for group III localities reference: - - title: Virginia TANF Manual, p. 26 - UP Grant Standards + - title: Virginia TANF Manual Section 302 - UP Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=26 1: diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/max.yaml index 53b9baaab91..5b7c3fa3e34 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/max.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/max.yaml @@ -8,5 +8,5 @@ metadata: period: month label: Virginia TANF-UP maximum assistance for group III localities reference: - - title: Virginia TANF Manual, p. 26 - UP Grant Standards + - title: Virginia TANF Manual Section 302 - UP Grant Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=26 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/va_tanf_minimum_payment.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/va_tanf_minimum_payment.yaml deleted file mode 100644 index ac393154d7d..00000000000 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/va_tanf_minimum_payment.yaml +++ /dev/null @@ -1,12 +0,0 @@ -description: Virginia excludes payments below this amount under the Temporary Assistance for Needy Families program. - -values: - 2020-07-01: 10 - -metadata: - unit: currency-USD - period: month - label: Virginia TANF minimum payment - reference: - - title: Virginia TANF Manual, p. 85 - Minimum Payment - href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=85 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml index 172c7b196f3..d1a7b95b1d7 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml @@ -1,18 +1,22 @@ -- name: Single abled mother household with 0 earned income does not qualify for UP-TANF program. - period: 2023 +# Virginia TANF-UP eligibility requires two able-bodied adults (head + spouse) +# Reference: VA TANF Manual 701.1, 701.3 +# https://www.dss.virginia.gov/files/division/bp/tanf/manual/700_07-20.pdf#page=2 + +- name: Case 1, single adult - not eligible (no spouse). + period: 2023-01 input: people: person1: - earned_income: 0 - is_mother: true + age: 30 is_disabled: false person2: - earned_income: 0 - is_child: true - is_disabled: false + age: 5 spm_units: spm_unit: members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] households: household: members: [person1, person2] @@ -20,25 +24,49 @@ output: va_up_tanf_eligibility: false -- name: Abled mother and disabled father household with 0 earned income does not qualify for UP-TANF program. - period: 2023 +- name: Case 2, two able-bodied adults - eligible. + period: 2023-01 input: people: person1: - earned_income: 0 - is_mother: true + age: 35 is_disabled: false person2: - earned_income: 0 - is_father: true - is_disabled: true + age: 32 + is_disabled: false person3: - earned_income: 0 - is_child: true + age: 5 + spm_units: + spm_unit: + members: [person1, person2, person3] + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + va_up_tanf_eligibility: true + +- name: Case 3, head able-bodied, spouse disabled - not eligible. + period: 2023-01 + input: + people: + person1: + age: 35 is_disabled: false + person2: + age: 32 + is_disabled: true + person3: + age: 5 spm_units: spm_unit: members: [person1, person2, person3] + tax_units: + tax_unit: + members: [person1, person2, person3] households: household: members: [person1, person2, person3] @@ -46,25 +74,49 @@ output: va_up_tanf_eligibility: false -- name: Two Abled parents household with 100 earned income does not qualify for UP-TANF program. - period: 2023 +- name: Case 4, head disabled, spouse able-bodied - not eligible. + period: 2023-01 input: people: person1: - earned_income: 100 - is_mother: true - is_disabled: false + age: 35 + is_disabled: true person2: - earned_income: 0 - is_father: true + age: 32 is_disabled: false person3: - earned_income: 0 - is_child: true - is_disabled: false + age: 5 + spm_units: + spm_unit: + members: [person1, person2, person3] + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + va_up_tanf_eligibility: false + +- name: Case 5, both adults disabled - not eligible. + period: 2023-01 + input: + people: + person1: + age: 35 + is_disabled: true + person2: + age: 32 + is_disabled: true + person3: + age: 5 spm_units: spm_unit: members: [person1, person2, person3] + tax_units: + tax_unit: + members: [person1, person2, person3] households: household: members: [person1, person2, person3] @@ -72,54 +124,254 @@ output: va_up_tanf_eligibility: false -- name: Two Abled parents household with 0 earned income qualifies for UP-TANF program. - period: 2023 +- name: Case 6, not VA state - not eligible. + period: 2023-01 input: people: person1: - earned_income: 0 - is_mother: true + age: 35 is_disabled: false person2: - earned_income: 0 - is_father: true + age: 32 is_disabled: false person3: - earned_income: 0 - is_child: true + age: 5 + spm_units: + spm_unit: + members: [person1, person2, person3] + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: AZ + output: + va_up_tanf_eligibility: false + +- name: Case 7, two able-bodied adults with multiple children - eligible. + period: 2023-01 + input: + people: + person1: + age: 40 + is_disabled: false + person2: + age: 38 is_disabled: false + person3: + age: 10 + person4: + age: 8 + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + households: + household: + members: [person1, person2, person3, person4] + state_code: VA + output: + va_up_tanf_eligibility: true + +############################################# +# EXPERIMENTS: How is_tax_unit_head_or_spouse is determined +############################################# + +# Experiment 1: Verify head/spouse determined by age (older = head) +- name: Experiment 1, age determines head vs spouse. + period: 2023-01 + input: + people: + person1: + age: 35 + person2: + age: 32 + person3: + age: 5 spm_units: spm_unit: members: [person1, person2, person3] + tax_units: + tax_unit: + members: [person1, person2, person3] households: household: members: [person1, person2, person3] state_code: VA output: + # person1 (35) = head, person2 (32) = spouse, person3 (5) = neither + is_tax_unit_head: [true, false, false] + is_tax_unit_spouse: [false, true, false] + is_tax_unit_head_or_spouse: [true, true, false] va_up_tanf_eligibility: true -- name: Only consider household in VA. - period: 2023 +# Experiment 2: What if younger person listed first? +- name: Experiment 2, younger person listed first still works. + period: 2023-01 input: people: person1: - earned_income: 0 - is_mother: true - is_disabled: false + age: 28 person2: - earned_income: 0 - is_father: true - is_disabled: false + age: 45 person3: - earned_income: 0 - is_child: true - is_disabled: false + age: 10 spm_units: spm_unit: members: [person1, person2, person3] + tax_units: + tax_unit: + members: [person1, person2, person3] households: household: members: [person1, person2, person3] - state_code: AZ + state_code: VA + output: + # person2 (45) = head, person1 (28) = spouse (by age, not order) + is_tax_unit_head: [false, true, false] + is_tax_unit_spouse: [true, false, false] + is_tax_unit_head_or_spouse: [true, true, false] + va_up_tanf_eligibility: true + +# Experiment 3: What if both adults same age? +- name: Experiment 3, same age adults. + period: 2023-01 + input: + people: + person1: + age: 30 + person2: + age: 30 + person3: + age: 5 + spm_units: + spm_unit: + members: [person1, person2, person3] + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + # Both age 30, first listed becomes head + is_tax_unit_head: [true, false, false] + is_tax_unit_spouse: [false, true, false] + is_tax_unit_head_or_spouse: [true, true, false] + va_up_tanf_eligibility: true + +# Experiment 4: Only children in household (edge case) +- name: Experiment 4, only children - no head or spouse. + period: 2023-01 + input: + people: + person1: + age: 15 + person2: + age: 10 + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA output: + # Both are children, no head or spouse + is_tax_unit_head: [false, false] + is_tax_unit_spouse: [false, false] + is_tax_unit_head_or_spouse: [false, false] va_up_tanf_eligibility: false + +# Experiment 5: One adult, one teenager (17) +- name: Experiment 5, adult with teenager. + period: 2023-01 + input: + people: + person1: + age: 35 + person2: + age: 17 + person3: + age: 5 + spm_units: + spm_unit: + members: [person1, person2, person3] + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + # person1 = head, person2 (17) = child, no spouse + is_tax_unit_head: [true, false, false] + is_tax_unit_spouse: [false, false, false] + is_tax_unit_head_or_spouse: [true, false, false] + va_up_tanf_eligibility: false + +# Experiment 6: Two adults age 18 (just became adults) +- name: Experiment 6, two young adults age 18. + period: 2023-01 + input: + people: + person1: + age: 18 + person2: + age: 18 + person3: + age: 1 + spm_units: + spm_unit: + members: [person1, person2, person3] + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + # Both 18 = adults, one head, one spouse + is_tax_unit_head: [true, false, false] + is_tax_unit_spouse: [false, true, false] + is_tax_unit_head_or_spouse: [true, true, false] + va_up_tanf_eligibility: true + +# Experiment 7: Three adults in household +- name: Experiment 7, three adults - only head and spouse count. + period: 2023-01 + input: + people: + person1: + age: 50 + person2: + age: 48 + person3: + age: 25 + person4: + age: 5 + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + households: + household: + members: [person1, person2, person3, person4] + state_code: VA + output: + # person1 (50) = head, person2 (48) = spouse, person3 (25) = dependent + is_tax_unit_head: [true, false, false, false] + is_tax_unit_spouse: [false, true, false, false] + is_tax_unit_head_or_spouse: [true, true, false, false] + va_up_tanf_eligibility: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_care_expenses.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.yaml similarity index 93% rename from policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_care_expenses.yaml rename to policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.yaml index 86bcf872712..705ae304219 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_care_expenses.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.yaml @@ -18,7 +18,7 @@ members: [person1, person2] state_code: VA output: - va_tanf_care_expenses: 2_400 + va_tanf_childcare_deduction: 2_400 - name: Full-time employment family, mother, disabled father, a 1-year-old child and a 2-year-old child, $550 per month period: 2023 @@ -47,7 +47,7 @@ members: [person1, person2, person3, person4] state_code: VA output: - va_tanf_care_expenses: 6_600 + va_tanf_childcare_deduction: 6_600 - name: Part-time employment family, mother, disabled father, a 1-year-old child and a 3-year-old child, $360 per month period: 2023 @@ -76,4 +76,4 @@ members: [person1, person2, person3, person4] state_code: VA output: - va_tanf_care_expenses: 4_320 + va_tanf_childcare_deduction: 4_320 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml index 4949bc01fc7..81e9019464a 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml @@ -1,68 +1,86 @@ +# VA TANF Countable Earned Income tests +# Formula: max_(max_(gross - flat_deduction, 0) * 0.8 - childcare, 0) + - name: Zero earned income returns zero. period: 2023 input: - state_code: VA - va_tanf_gross_earned_income: 0 - spm_unit_size: 3 + people: + person1: + tanf_gross_earned_income: 0 + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: VA output: va_tanf_countable_earned_income: 0 - name: Earned income below flat exclusion returns zero. - # Flat exclusion for size 3 = $167 * 12 = $2,004/year + # Flat exclusion for size 1 = $167 * 12 = $2,004/year # Income $1,500 < $2,004, so max_($1,500 - $2,004, 0) = 0 period: 2023 input: - state_code: VA - va_tanf_gross_earned_income: 1_500 - spm_unit_size: 3 + people: + person1: + tanf_gross_earned_income: 1_500 + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: VA output: va_tanf_countable_earned_income: 0 -- name: Earned income exactly at flat exclusion returns zero. +- name: Earned income $5,004, size 3, $2,400 after deduction. # Flat exclusion for size 3 = $167 * 12 = $2,004/year - # max_($2,004 - $2,004, 0) * 0.8 = 0 - period: 2023 - input: - state_code: VA - va_tanf_gross_earned_income: 2_004 - spm_unit_size: 3 - output: - va_tanf_countable_earned_income: 0 - -- name: Earned income $5,004, 3 household members, $2,400 per year after deduction. # ($5,004 - $2,004) * 0.8 = $3,000 * 0.8 = $2,400 period: 2023 input: - state_code: VA - va_tanf_gross_earned_income: 5_004 - spm_unit_size: 3 + people: + person1: + tanf_gross_earned_income: 5_004 + person2: + tanf_gross_earned_income: 0 + person3: + tanf_gross_earned_income: 0 + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: VA output: va_tanf_countable_earned_income: 2_400 - -- name: Earned income $6_136, 4 household members, $3,200 per year after deduction. - period: 2023 - input: - state_code: VA - va_tanf_gross_earned_income: 6_136 - spm_unit_size: 4 - output: - va_tanf_countable_earned_income: 3_200 - -- name: Earned income $7,508, 5 household members, $4,000 per year after deduction. - period: 2023 - input: - state_code: VA - va_tanf_gross_earned_income: 7_508 - spm_unit_size: 5 - output: - va_tanf_countable_earned_income: 4_000 - -- name: Earned income $8,880, 6 household members, $4,800 per year after deduction. +- name: Earned income $8,880, size 6, $4,800 after deduction. + # Flat exclusion for size 6+ = $240 * 12 = $2,880/year + # ($8,880 - $2,880) * 0.8 = $6,000 * 0.8 = $4,800 period: 2023 input: - state_code: VA - va_tanf_gross_earned_income: 8_880 - spm_unit_size: 6 + people: + person1: + tanf_gross_earned_income: 8_880 + person2: + tanf_gross_earned_income: 0 + person3: + tanf_gross_earned_income: 0 + person4: + tanf_gross_earned_income: 0 + person5: + tanf_gross_earned_income: 0 + person6: + tanf_gross_earned_income: 0 + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5, person6] + households: + household: + members: [person1, person2, person3, person4, person5, person6] + state_code: VA output: va_tanf_countable_earned_income: 4_800 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_income.yaml deleted file mode 100644 index 292577accac..00000000000 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_income.yaml +++ /dev/null @@ -1,29 +0,0 @@ -- name: $2,000 earned income, $400 care expenses, and $1,000 unearned income, $2,600 total countable income. - period: 2023 - input: - state_code: VA - va_tanf_countable_earned_income: 2_000 - va_tanf_care_expenses: 400 - va_tanf_countable_unearned_income: 1_000 - output: - va_tanf_countable_income: 2_600 - -- name: $100 earned income, $400 care expenses, and $0 unearned income, $0 total countable income. - period: 2023 - input: - state_code: VA - va_tanf_countable_earned_income: 100 - va_tanf_care_expenses: 400 - va_tanf_countable_unearned_income: 0 - output: - va_tanf_countable_income: 0 - -- name: Only calculated for VA. - period: 2023 - input: - state_code: DC - va_tanf_countable_earned_income: 1_000 - va_tanf_care_expenses: 400 - va_tanf_countable_unearned_income: 1_000 - output: - va_tanf_countable_income: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.yaml deleted file mode 100644 index c99a4f3ecd6..00000000000 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.yaml +++ /dev/null @@ -1,64 +0,0 @@ -- name: VA requires earned income from full time children to be disregarded from computing household earnings. - period: 2023 - input: - people: - person1: - earned_income: 1_000 - person2: - earned_income: 2_000 - person3: - earned_income: 300 - is_child: true - is_full_time_student: true - spm_units: - spm_unit: - members: [person1, person2, person3] - households: - household: - members: [person1, person2, person3] - state_code: VA - output: - va_tanf_gross_earned_income: 3_000 - -- name: VA only requires earned income from full time children to be disregarded from computing household earnings. - period: 2023 - input: - people: - person1: - earned_income: 1_000 - person2: - earned_income: 2_000 - person3: - earned_income: 300 - is_child: true - is_full_time_student: false - spm_units: - spm_unit: - members: [person1, person2, person3] - households: - household: - members: [person1, person2, person3] - state_code: VA - output: - va_tanf_gross_earned_income: 3_300 - - -- name: Earned income from adults should be summed up. - period: 2023 - input: - people: - person1: - earned_income: 1_000 - person2: - earned_income: 2_000 - person3: - earned_income: 1_000 - spm_units: - spm_unit: - members: [person1, person2, person3] - households: - household: - members: [person1, person2, person3] - state_code: VA - output: - va_tanf_gross_earned_income: 4_000 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_is_full_time.yaml similarity index 100% rename from policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.yaml rename to policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_is_full_time.yaml diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml index 300acad6203..ae62c4faf7c 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml @@ -41,12 +41,13 @@ # Flat exclusion (size 3): $167/month * 12 = $2,004/year # After flat: max($12,000 - $2,004, 0) = $9,996 # After 20%: $9,996 * (1 - 0.2) = $7,996.80 - va_tanf_countable_earned_income: 7_996.8 + # After childcare ($4,200): max($7,996.80 - $4,200, 0) = $3,796.80 + va_tanf_countable_earned_income: 3_796.8 # - # Care expenses (full-time, 2 children age 2+): $175 * 2 * 12 = $4,200/year - va_tanf_care_expenses: 4_200 + # Childcare deduction (full-time, 2 children age 2+): $175 * 2 * 12 = $4,200/year + va_tanf_childcare_deduction: 4_200 # - # Countable income: max($7,996.80 - $4,200 + $0, 0) = $3,796.80 + # Countable income: $3,796.80 + $0 = $3,796.80 va_tanf_countable_income: 3_796.8 # # Income eligibility: $3,796.80 <= $12,204? YES @@ -94,12 +95,13 @@ # Flat exclusion (size 2): $167/month * 12 = $2,004/year # After flat: max($6,000 - $2,004, 0) = $3,996 # After 20%: $3,996 * 0.8 = $3,196.80 - va_tanf_countable_earned_income: 3_196.8 + # After childcare ($1,440): max($3,196.80 - $1,440, 0) = $1,756.80 + va_tanf_countable_earned_income: 1_756.8 # - # Care expenses (part-time, 1 child): $120 * 1 * 12 = $1,440/year - va_tanf_care_expenses: 1_440 + # Childcare deduction (part-time, 1 child): $120 * 1 * 12 = $1,440/year + va_tanf_childcare_deduction: 1_440 # - # Countable income: max($3,196.80 - $1,440 + $0, 0) = $1,756.80 + # Countable income: $1,756.80 + $0 = $1,756.80 va_tanf_countable_income: 1_756.8 # # Income eligibility: $1,756.80 <= $7,956? YES @@ -110,31 +112,30 @@ # $2,227.20 >= $120 and <= $7,500, so benefit = $2,227.20 va_tanf: 2_227.2 -- name: TANF-UP scenario - Two unemployed parents in Group III locality +- name: TANF-UP scenario - Two able-bodied adults in Group III locality period: 2023 input: people: person1: - is_father: true age: 35 earned_income: 0 work_hours_per_week: 0 is_disabled: false person2: - is_mother: true age: 32 earned_income: 0 work_hours_per_week: 0 is_disabled: false person3: - is_child: true age: 8 person4: - is_child: true age: 6 spm_units: spm_unit: members: [person1, person2, person3, person4] + tax_units: + tax_unit: + members: [person1, person2, person3, person4] households: household: members: [person1, person2, person3, person4] @@ -143,7 +144,7 @@ output: # Family size: 4 # Group III locality (Arlington County) - # TANF-UP eligible: both parents have no earnings and are not disabled + # TANF-UP eligible: both parents are able-bodied (not disabled) va_up_tanf_eligibility: true # # Need standard (Group III, size 4): $1,178/month * 12 = $14,136/year @@ -155,13 +156,13 @@ # Part-time (0 hours < 30 hours) va_tanf_is_full_time: false # - # No earned income, so countable earned = 0 + # No earned income, after childcare deduction still $0 va_tanf_countable_earned_income: 0 # - # Care expenses (part-time, 2 children age 2+): $120 * 2 * 12 = $2,880/year - va_tanf_care_expenses: 2_880 + # Childcare deduction (part-time, 2 children age 2+): $120 * 2 * 12 = $2,880/year + va_tanf_childcare_deduction: 2_880 # - # Countable income: max(0 - $2,880 + 0, 0) = $0 + # Countable income: $0 + $0 = $0 va_tanf_countable_income: 0 # # Income eligibility: $0 <= $14,136? YES @@ -173,6 +174,7 @@ va_tanf: 6_156 - name: Income exceeds need standard - Not eligible + absolute_error_margin: 0.01 period: 2023 input: people: @@ -209,12 +211,13 @@ # Flat exclusion (size 2): $167/month * 12 = $2,004/year # After flat: $30,000 - $2,004 = $27,996 # After 20%: $27,996 * 0.8 = $22,396.80 - va_tanf_countable_earned_income: 22_396.8 + # After childcare ($2,100): max($22,396.80 - $2,100, 0) = $20,296.80 + va_tanf_countable_earned_income: 20_296.8 # - # Care expenses (full-time, 1 child age 10): $175 * 12 = $2,100/year - va_tanf_care_expenses: 2_100 + # Childcare deduction (full-time, 1 child age 10): $175 * 12 = $2,100/year + va_tanf_childcare_deduction: 2_100 # - # Countable income: max($22,396.80 - $2,100 + $0, 0) = $20,296.80 + # Countable income: $20,296.80 + $0 = $20,296.80 va_tanf_countable_income: 20_296.8 # # Income eligibility: $20,296.80 <= $10,104? NO @@ -260,12 +263,13 @@ # Flat exclusion (size 2): $167/month * 12 = $2,004/year # After flat: $8,000 - $2,004 = $5,996 # After 20%: $5,996 * 0.8 = $4,796.80 - va_tanf_countable_earned_income: 4_796.8 + # After childcare ($2,400): max($4,796.80 - $2,400, 0) = $2,396.80 + va_tanf_countable_earned_income: 2_396.8 # - # Care expenses (full-time, infant under 2): $200 * 12 = $2,400/year - va_tanf_care_expenses: 2_400 + # Childcare deduction (full-time, infant under 2): $200 * 12 = $2,400/year + va_tanf_childcare_deduction: 2_400 # - # Countable income: max($4,796.80 - $2,400 + $0, 0) = $2,396.80 + # Countable income: $2,396.80 + $0 = $2,396.80 va_tanf_countable_income: 2_396.8 # # Income eligibility: $2,396.80 <= $7,956? YES @@ -317,7 +321,8 @@ # Flat exclusion (size 3): $167/month * 12 = $2,004/year # After flat: max($6,000 - $2,004, 0) = $3,996 # After 20%: $3,996 * 0.8 = $3,196.80 - va_tanf_countable_earned_income: 3_196.8 + # After childcare ($2,880): max($3,196.80 - $2,880, 0) = $316.80 + va_tanf_countable_earned_income: 316.8 # # Unearned income: # Child support received: $2,400/year = $200/month @@ -325,10 +330,10 @@ # Countable child support: $2,400 - $1,200 = $1,200/year va_tanf_countable_unearned_income: 1_200 # - # Care expenses (part-time, 2 children age 2+): $120 * 2 * 12 = $2,880/year - va_tanf_care_expenses: 2_880 + # Childcare deduction (part-time, 2 children age 2+): $120 * 2 * 12 = $2,880/year + va_tanf_childcare_deduction: 2_880 # - # Countable income: max($3,196.80 - $2,880 + $1,200, 0) = $1,516.80 + # Countable income: $316.80 + $1,200 = $1,516.80 va_tanf_countable_income: 1_516.8 # # Income eligibility: $1,516.80 <= $12,204? YES @@ -397,15 +402,16 @@ # Flat exclusion (size 8, uses size 6+ rate): $240/month * 12 = $2,880/year # After flat: max($10,000 - $2,880, 0) = $7,120 # After 20%: $7,120 * 0.8 = $5,696 - va_tanf_countable_earned_income: 5_696 + # After childcare ($14,700): max($5,696 - $14,700, 0) = $0 + va_tanf_countable_earned_income: 0 # - # Care expenses (full-time): + # Childcare deduction (full-time): # - 1 disabled adult: $175/month # - 6 children age 2+: $175 * 6 = $1,050/month # Total: ($175 + $1,050) * 12 = $14,700/year - va_tanf_care_expenses: 14_700 + va_tanf_childcare_deduction: 14_700 # - # Countable income: max($5,696 - $14,700 + $0, 0) = $0 + # Countable income: $0 + $0 = $0 va_tanf_countable_income: 0 # # Income eligibility: $0 <= $22,416? YES @@ -459,15 +465,16 @@ # Flat exclusion (size 3): $167/month * 12 = $2,004/year # After flat: max($9,000 - $2,004, 0) = $6,996 # After 20%: $6,996 * 0.8 = $5,596.80 - va_tanf_countable_earned_income: 5_596.8 + # After childcare ($4,200): max($5,596.80 - $4,200, 0) = $1,396.80 + va_tanf_countable_earned_income: 1_396.8 # - # Care expenses (full-time): + # Childcare deduction (full-time): # - 1 disabled adult age 50 (2+): $175/month # - 1 child age 12 (2+): $175/month # Total: ($175 + $175) * 12 = $4,200/year - va_tanf_care_expenses: 4_200 + va_tanf_childcare_deduction: 4_200 # - # Countable income: max($5,596.80 - $4,200 + $0, 0) = $1,396.80 + # Countable income: $1,396.80 + $0 = $1,396.80 va_tanf_countable_income: 1_396.8 # # Income eligibility: $1,396.80 <= $10,032? YES diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf.yaml index 2bff1cda4cb..cb8c3c766c3 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf.yaml @@ -10,7 +10,7 @@ output: va_tanf: 0 -- name: If tanf eligible, payment less than $10 * 12, then they get zero. +- name: If tanf eligible, small payment is still paid. period: 2023 input: va_tanf_eligibility: true @@ -20,9 +20,10 @@ va_tanf_countable_income: 2_000 county_str: ARLINGTON_COUNTY_VA output: - va_tanf: 0 + # Grant standard $2,100 - countable income $2,000 = $100 payment + va_tanf: 100 -- name: If up tanf eligible, payment less than $10 * 12, then they get zero. +- name: If up tanf eligible, small payment is still paid. period: 2023 input: va_tanf_eligibility: true @@ -32,7 +33,8 @@ va_tanf_countable_income: 2_000 county_str: ARLINGTON_COUNTY_VA output: - va_tanf: 0 + # UP grant standard $2,100 - countable income $2,000 = $100 payment + va_tanf: 100 - name: If tanf eligible, living in group3, payment less than maximum payment, then they get the difference. period: 2023 @@ -94,8 +96,8 @@ output: va_tanf: 6_528 -# Boundary tests for minimum payment threshold ($10/month = $120/year) -- name: Payment exactly at minimum threshold ($120/year) is paid. +# Boundary tests for small payments +- name: Small payment of $120/year is paid. period: 2023 input: va_tanf_eligibility: true @@ -106,10 +108,9 @@ county_str: ARLINGTON_COUNTY_VA output: # Grant standard $2,120 - countable income $2,000 = $120 payment - # $120 >= $120 minimum, so payment is made va_tanf: 120 -- name: Payment $1 below minimum threshold ($119/year) results in zero. +- name: Small payment of $119/year is paid. period: 2023 input: va_tanf_eligibility: true @@ -120,5 +121,4 @@ county_str: ARLINGTON_COUNTY_VA output: # Grant standard $2,119 - countable income $2,000 = $119 payment - # $119 < $120 minimum, so no payment - va_tanf: 0 + va_tanf: 119 diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.py b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.py index 6f998bba6b4..186af1ca2bc 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.py @@ -5,11 +5,17 @@ class va_tanf_eligibility(Variable): value_type = bool entity = SPMUnit label = "VA TANF eligibility" - definition_period = YEAR + definition_period = MONTH defined_for = StateCode.VA reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=1" def formula(spm_unit, period, parameters): demographic_eligible = spm_unit("is_demographic_tanf_eligible", period) income_eligible = spm_unit("va_tanf_income_eligibility", period) - return demographic_eligible & income_eligible + # At least one person must be a citizen or qualified noncitizen + person = spm_unit.members + citizenship_check = person( + "is_citizen_or_legal_immigrant", period.this_year + ) + has_eligible_member = spm_unit.any(citizenship_check) + return demographic_eligible & income_eligible & has_eligible_member diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py index e800583947d..d21c2be7b20 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py @@ -5,13 +5,33 @@ class va_tanf_income_eligibility(Variable): value_type = bool entity = SPMUnit label = "VA TANF income eligibility" - definition_period = YEAR + definition_period = MONTH defined_for = StateCode.VA reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=47" def formula(spm_unit, period, parameters): - # Care expenses must be disregarded in both initial eligibility - # and payment calculation per manual page 50 section 5. - income = spm_unit("va_tanf_countable_income", period) + # Two-step income test per Virginia TANF Manual Section 305.1 + # Step 1: Gross income (with disregards only) <= Need Standard + person = spm_unit.members + gross_earned = spm_unit.sum( + person("tanf_gross_earned_income", period) + ) + # Countable unearned already has disregards applied + # (child support, unemployment for TANF-UP) + countable_unearned = spm_unit( + "va_tanf_countable_unearned_income", period + ) + gross_income = gross_earned + countable_unearned need_standard = spm_unit("va_tanf_need_standard", period) - return income <= need_standard + step1_pass = gross_income <= need_standard + + # Step 2: Countable income (after all deductions) <= Grant Standard + countable_income = spm_unit("va_tanf_countable_income", period) + # Use appropriate grant standard based on UP eligibility + up_eligible = spm_unit("va_up_tanf_eligibility", period) + grant_standard = spm_unit("va_tanf_grant_standard", period) + up_grant_standard = spm_unit("va_tanf_up_grant_standard", period) + applicable_grant = where(up_eligible, up_grant_standard, grant_standard) + step2_pass = countable_income <= applicable_grant + + return step1_pass & step2_pass diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py index 37eaf406de7..646adcdc5d4 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py @@ -4,17 +4,26 @@ class va_up_tanf_eligibility(Variable): value_type = bool entity = SPMUnit - label = "VA UP-TANF eligibility" - definition_period = YEAR + label = "VA TANF-UP eligibility" + definition_period = MONTH defined_for = StateCode.VA - reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=3" + reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/700_07-20.pdf#page=2" + documentation = """ + Virginia TANF-UP (Unemployed Parent) Program eligibility requires: + - Two able-bodied natural or adoptive parents in the home + - At least one child in common + - Neither parent meets disability exemption criteria (Section 901.2 C. or D.) + + Per VA TANF Manual 701.1: "The TANF-UP Program is intended to provide + assistance to families with two able-bodied parents." + + Per VA TANF Manual 701.3: "The standard filing unit is required to include + two able-bodied natural or adoptive parents." + """ def formula(spm_unit, period, parameters): person = spm_unit.members - earned_income = person("earned_income", period) - father = person("is_father", period) - mother = person("is_mother", period) + head_or_spouse = person("is_tax_unit_head_or_spouse", period.this_year) disabled = person("is_disabled", period) - eligible_father = (father) & (~disabled) & (earned_income == 0) - eligible_mother = (mother) & (~disabled) & (earned_income == 0) - return spm_unit.any(eligible_father) & spm_unit.any(eligible_mother) + able_bodied_adult = head_or_spouse & ~disabled + return spm_unit.sum(able_bodied_adult) >= 2 diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_care_expenses.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.py similarity index 81% rename from policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_care_expenses.py rename to policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.py index 39835cc871f..33dfe295689 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_care_expenses.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.py @@ -1,12 +1,12 @@ from policyengine_us.model_api import * -class va_tanf_care_expenses(Variable): +class va_tanf_childcare_deduction(Variable): value_type = float entity = SPMUnit - label = "VA TANF care expenses" + label = "VA TANF childcare deduction" unit = USD - definition_period = YEAR + definition_period = MONTH defined_for = StateCode.VA reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=56" @@ -15,7 +15,7 @@ def formula(spm_unit, period, parameters): is_full_time = spm_unit("va_tanf_is_full_time", period) person = spm_unit.members child = person("is_child", period) - age = person("age", period) + age = person("age", period.this_year) adult = person("is_adult", period) disabled = person("is_disabled", period) disabled_adult = (adult) & (disabled) @@ -27,8 +27,7 @@ def formula(spm_unit, period, parameters): part_time_care_expenses = spm_unit.sum( p.care_expenses_part_time * care_recipient ) - monthly_care_expenses = where( + + return where( is_full_time, full_time_care_expenses, part_time_care_expenses ) - - return monthly_care_expenses * MONTHS_IN_YEAR diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py index 953f7ea8675..47093866c26 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py @@ -6,16 +6,22 @@ class va_tanf_countable_earned_income(Variable): entity = SPMUnit label = "VA TANF countable earned income" unit = USD - definition_period = YEAR + definition_period = MONTH defined_for = StateCode.VA reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=55" def formula(spm_unit, period, parameters): - gross_earnings = spm_unit("va_tanf_gross_earned_income", period) - unit_size = spm_unit("spm_unit_size", period) - p = parameters(period).gov.states.va.dss.tanf.income.deduction.earned - annual_flat_exclusion = p.flat.calc(unit_size) * MONTHS_IN_YEAR - earnings_after_flat_exclusion = max_( - gross_earnings - annual_flat_exclusion, 0 + person = spm_unit.members + gross_earnings = spm_unit.sum( + person("tanf_gross_earned_income", period) ) - return earnings_after_flat_exclusion * (1 - p.percentage) + unit_size = spm_unit("spm_unit_size", period.this_year) + p = parameters(period).gov.states.va.dss.tanf.income.deduction.earned + # Step 1: Apply flat deduction by unit size + flat_exclusion = p.flat.calc(unit_size) + earnings_after_flat = max_(gross_earnings - flat_exclusion, 0) + # Step 2: Apply 20% earned income disregard + earned_after_20pct = earnings_after_flat * (1 - p.percentage) + # Step 3: Apply childcare deduction + childcare_deduction = spm_unit("va_tanf_childcare_deduction", period) + return max_(earned_after_20pct - childcare_deduction, 0) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_income.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_income.py index d1aaa6a7fbc..3239267ed89 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_income.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_income.py @@ -6,21 +6,11 @@ class va_tanf_countable_income(Variable): entity = SPMUnit label = "VA TANF countable income" unit = USD - definition_period = YEAR + definition_period = MONTH defined_for = StateCode.VA reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=50" - def formula(spm_unit, period, parameters): - countable_earned_income = spm_unit( - "va_tanf_countable_earned_income", period - ) - care_expenses = spm_unit("va_tanf_care_expenses", period) - countable_unearned_income = spm_unit( - "va_tanf_countable_unearned_income", period - ) - return max_( - countable_earned_income - - care_expenses - + countable_unearned_income, - 0, - ) + adds = [ + "va_tanf_countable_earned_income", + "va_tanf_countable_unearned_income", + ] diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py index a4da452ad0a..4418394ff89 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py @@ -6,30 +6,27 @@ class va_tanf_countable_unearned_income(Variable): entity = SPMUnit label = "VA TANF countable unearned income" unit = USD - definition_period = YEAR + definition_period = MONTH defined_for = StateCode.VA reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=58" def formula(spm_unit, period, parameters): - p = parameters(period).gov.states.va.dss.tanf.income - up_tanf_eligibility = spm_unit("va_up_tanf_eligibility", period) - gross_unearned = add(spm_unit, period, p.unearned) + p = parameters(period).gov.states.va.dss.tanf.income.deduction.unearned + person = spm_unit.members + gross_unearned = spm_unit.sum( + person("tanf_gross_unearned_income", period) + ) + # Apply child support disregard child_support = add(spm_unit, period, ["child_support_received"]) - interest_income = add(spm_unit, period, ["interest_income"]) + child_support_disregard = min_(child_support, p.monthly_child_support) + countable_unearned = gross_unearned - child_support_disregard + # For TANF-UP, also disregard unemployment compensation + up_tanf_eligibility = spm_unit("va_up_tanf_eligibility", period) unemployment_compensation = add( spm_unit, period, ["unemployment_compensation"] ) - p = p.deduction.unearned - child_support_disregard = p.monthly_child_support * MONTHS_IN_YEAR - interest_income_disregard = p.monthly_interest_income * MONTHS_IN_YEAR - # gross unearned minus child support & interest income - gross_unearned_after_disregard = ( - gross_unearned - - min_(child_support, child_support_disregard) - - min_(interest_income, interest_income_disregard) - ) return where( up_tanf_eligibility, - gross_unearned_after_disregard - unemployment_compensation, - gross_unearned_after_disregard, + countable_unearned - unemployment_compensation, + countable_unearned, ) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.py deleted file mode 100644 index bf676dad03d..00000000000 --- a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_gross_earned_income.py +++ /dev/null @@ -1,22 +0,0 @@ -from policyengine_us.model_api import * - - -class va_tanf_gross_earned_income(Variable): - value_type = float - entity = SPMUnit - label = "VA TANF gross earned income" - unit = USD - definition_period = YEAR - defined_for = StateCode.VA - reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=51" - - def formula(spm_unit, period, parameters): - person = spm_unit.members - person_earned_income = person("earned_income", period) - child_0_17 = person("is_child", period) - full_time_student = person("is_full_time_student", period) - nonchild_earned_income = where( - child_0_17 & full_time_student, 0, person_earned_income - ) - - return spm_unit.sum(nonchild_earned_income) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_gross_income.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_gross_income.py new file mode 100644 index 00000000000..3700c26de22 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_gross_income.py @@ -0,0 +1,13 @@ +from policyengine_us.model_api import * + + +class va_tanf_gross_income(Variable): + value_type = float + entity = SPMUnit + label = "VA TANF gross income" + unit = USD + definition_period = MONTH + defined_for = StateCode.VA + reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=50" + + adds = ["tanf_gross_earned_income", "tanf_gross_unearned_income"] diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_is_full_time.py similarity index 85% rename from policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.py rename to policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_is_full_time.py index 7be1cdc42dd..f433dac33e2 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_is_full_time.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_is_full_time.py @@ -5,7 +5,7 @@ class va_tanf_is_full_time(Variable): value_type = bool entity = SPMUnit label = "VA TANF full-time employee" - definition_period = YEAR + definition_period = MONTH defined_for = StateCode.VA reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=55" @@ -14,6 +14,6 @@ def formula(spm_unit, period, parameters): period ).gov.states.va.dss.tanf.income.deduction.full_time_work_hours person = spm_unit.members - person_work_hour = person("work_hours_per_week", period) + person_work_hour = person("work_hours_per_week", period.this_year) child = person("is_child", period) return spm_unit.any((person_work_hour >= p) & (~child)) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py index b942c2b269d..d8aefd8654e 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py @@ -6,7 +6,7 @@ class va_tanf(Variable): entity = SPMUnit label = "VA TANF" unit = USD - definition_period = YEAR + definition_period = MONTH defined_for = "va_tanf_eligibility" reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=47" @@ -19,26 +19,22 @@ def formula(spm_unit, period, parameters): countable_income = spm_unit("va_tanf_countable_income", period) payment = max_(grant - countable_income, 0) - # compute the minimum and maximum payment + # compute the maximum payment p = parameters(period).gov.states.va.dss.tanf - minimum = p.va_tanf_minimum_payment * MONTHS_IN_YEAR county = spm_unit.household("county_str", period) if_group3 = np.isin(county, p.localities.group3) - maximum = ( + maximum = where( + up_tanf_eligibility, where( - up_tanf_eligibility, - where( - if_group3, - p.up_grant_standard.group3.max, - p.up_grant_standard.group2.max, - ), - where( - if_group3, - p.grant_standard.group3.max, - p.grant_standard.group2.max, - ), - ) - * MONTHS_IN_YEAR + if_group3, + p.up_grant_standard.group3.max, + p.up_grant_standard.group2.max, + ), + where( + if_group3, + p.grant_standard.group3.max, + p.grant_standard.group2.max, + ), ) - return min_(where(payment >= minimum, payment, 0), maximum) + return min_(payment, maximum) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py index 2d0efe2a8a8..9654ce35b33 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py @@ -6,12 +6,12 @@ class va_tanf_grant_standard(Variable): entity = SPMUnit label = "VA TANF grant standard" unit = USD - definition_period = YEAR + definition_period = MONTH defined_for = StateCode.VA reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=47" def formula(spm_unit, period, parameters): - unit_size = spm_unit("spm_unit_size", period) + unit_size = spm_unit("spm_unit_size", period.this_year) p = parameters(period).gov.states.va.dss.tanf ceiling = min_(unit_size, p.max_unit_size) additional = unit_size - ceiling @@ -29,5 +29,4 @@ def formula(spm_unit, period, parameters): p.grant_standard.group2.addition, ) - monthly = main + additional * addition - return monthly * MONTHS_IN_YEAR + return main + additional * addition diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py index d106d6acff3..e9b36d356fd 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py @@ -6,12 +6,12 @@ class va_tanf_need_standard(Variable): entity = SPMUnit label = "VA TANF need standard" unit = USD - definition_period = YEAR + definition_period = MONTH defined_for = StateCode.VA reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=47" def formula(spm_unit, period, parameters): - unit_size = spm_unit("spm_unit_size", period) + unit_size = spm_unit("spm_unit_size", period.this_year) p = parameters(period).gov.states.va.dss.tanf ceiling = min_(unit_size, p.max_unit_size) additional = unit_size - ceiling @@ -29,5 +29,4 @@ def formula(spm_unit, period, parameters): p.need_standard.group2.addition, ) - monthly = main + additional * addition - return monthly * MONTHS_IN_YEAR + return main + additional * addition diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py index 43147056032..8782118faa7 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py @@ -6,12 +6,12 @@ class va_tanf_up_grant_standard(Variable): entity = SPMUnit label = "VA TANF UP grant standard" unit = USD - definition_period = YEAR + definition_period = MONTH defined_for = StateCode.VA reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=47" def formula(spm_unit, period, parameters): - unit_size = spm_unit("spm_unit_size", period) + unit_size = spm_unit("spm_unit_size", period.this_year) p = parameters(period).gov.states.va.dss.tanf ceiling = min_(unit_size, p.max_unit_size) additional = unit_size - ceiling @@ -29,5 +29,4 @@ def formula(spm_unit, period, parameters): p.up_grant_standard.group2.addition, ) - monthly = main + additional * addition - return monthly * MONTHS_IN_YEAR + return main + additional * addition From 05c857e58f573e3a7f21de33991d8a735c5e4703 Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 8 Jan 2026 16:39:11 -0500 Subject: [PATCH 06/11] fix tests --- .../va_tanf_income_eligibility.yaml | 87 +++++++++++++++---- .../va_tanf_countable_unearned_income.yaml | 42 +++++++-- .../gov/states/va/dss/tanf/integration.yaml | 44 +++++----- 3 files changed, 127 insertions(+), 46 deletions(-) diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml index 6eb1284e364..36add278d35 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml @@ -1,53 +1,108 @@ -- name: Household with no income is eligible. +# VA TANF Income Eligibility Tests +# Two-step test: +# Step 1: gross_income (gross_earned + countable_unearned) <= need_standard +# Step 2: countable_income <= grant_standard (or up_grant_standard if UP eligible) + +- name: Case 1, no income is eligible. period: 2023 input: state_code: VA - va_tanf_need_standard: 1 + tanf_gross_earned_income: 0 + va_tanf_countable_unearned_income: 0 + va_tanf_need_standard: 12_000 va_tanf_countable_income: 0 + va_up_tanf_eligibility: false + va_tanf_grant_standard: 6_000 output: + # Step 1: 0 + 0 = 0 <= 12,000? YES + # Step 2: 0 <= 6,000? YES va_tanf_income_eligibility: true -- name: Household with income equaling need standard is eligible. +- name: Case 2, gross income at need standard is eligible. period: 2023 input: state_code: VA - va_tanf_need_standard: 1_000 - va_tanf_countable_income: 1_000 + tanf_gross_earned_income: 10_000 + va_tanf_countable_unearned_income: 2_000 + va_tanf_need_standard: 12_000 + va_tanf_countable_income: 5_000 + va_up_tanf_eligibility: false + va_tanf_grant_standard: 6_000 output: + # Step 1: 10,000 + 2,000 = 12,000 <= 12,000? YES + # Step 2: 5,000 <= 6,000? YES va_tanf_income_eligibility: true -- name: Household with income exceeding need standard is not eligible. +- name: Case 3, gross income exceeds need standard - not eligible. + period: 2023 + input: + state_code: VA + tanf_gross_earned_income: 11_000 + va_tanf_countable_unearned_income: 2_000 + va_tanf_need_standard: 12_000 + va_tanf_countable_income: 5_000 + va_up_tanf_eligibility: false + va_tanf_grant_standard: 6_000 + output: + # Step 1: 11,000 + 2,000 = 13,000 <= 12,000? NO (fails step 1) + va_tanf_income_eligibility: false + +- name: Case 4, countable income exceeds grant standard - not eligible. period: 2023 input: state_code: VA - va_tanf_need_standard: 1_000 - va_tanf_countable_income: 2_000 + tanf_gross_earned_income: 8_000 + va_tanf_countable_unearned_income: 2_000 + va_tanf_need_standard: 12_000 + va_tanf_countable_income: 7_000 + va_up_tanf_eligibility: false + va_tanf_grant_standard: 6_000 output: + # Step 1: 8,000 + 2,000 = 10,000 <= 12,000? YES + # Step 2: 7,000 <= 6,000? NO (fails step 2) va_tanf_income_eligibility: false -- name: Income exactly $1 below need standard is eligible. +- name: Case 5, UP eligible uses UP grant standard. period: 2023 input: state_code: VA - va_tanf_need_standard: 1_000 - va_tanf_countable_income: 999 + tanf_gross_earned_income: 6_000 + va_tanf_countable_unearned_income: 2_000 + va_tanf_need_standard: 12_000 + va_tanf_countable_income: 4_500 + va_up_tanf_eligibility: true + va_tanf_grant_standard: 6_000 + va_tanf_up_grant_standard: 5_000 output: + # Step 1: 6,000 + 2,000 = 8,000 <= 12,000? YES + # Step 2 (UP): 4,500 <= 5,000? YES va_tanf_income_eligibility: true -- name: Income exactly $1 above need standard is not eligible. +- name: Case 6, UP eligible but countable exceeds UP grant - not eligible. period: 2023 input: state_code: VA - va_tanf_need_standard: 1_000 - va_tanf_countable_income: 1_001 + tanf_gross_earned_income: 6_000 + va_tanf_countable_unearned_income: 2_000 + va_tanf_need_standard: 12_000 + va_tanf_countable_income: 5_500 + va_up_tanf_eligibility: true + va_tanf_grant_standard: 6_000 + va_tanf_up_grant_standard: 5_000 output: + # Step 1: 6,000 + 2,000 = 8,000 <= 12,000? YES + # Step 2 (UP): 5,500 <= 5,000? NO (fails step 2) va_tanf_income_eligibility: false -- name: Only calculate for VA. +- name: Case 7, only calculate for VA. period: 2023 input: state_code: MD - va_tanf_need_standard: 1_000 + tanf_gross_earned_income: 0 + va_tanf_countable_unearned_income: 0 + va_tanf_need_standard: 12_000 va_tanf_countable_income: 0 + va_up_tanf_eligibility: false + va_tanf_grant_standard: 6_000 output: va_tanf_income_eligibility: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml index 9daadbba2fc..d63b2c63953 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml @@ -1,4 +1,11 @@ -- name: No unearned income (only $1,000 ssi), child support, or interest income, $0 per year +# VA TANF Countable Unearned Income Tests +# Formula: gross_unearned - child_support_disregard - (unemployment if UP-TANF) +# Child support disregard: min(child_support, $100/month) +# tanf_gross_unearned_income includes: veterans_benefits, rental_income, child_support_received, +# alimony_income, dividend_income, interest_income, pension_income, unemployment_compensation, +# gi_cash_assistance, social_security (NOT ssi) + +- name: Case 1, no unearned income returns zero. period: 2023 input: state_code: VA @@ -15,9 +22,10 @@ ssi: 1_000 child_support_received: 0 output: + # SSI is NOT counted in tanf_gross_unearned_income va_tanf_countable_unearned_income: 0 -- name: 1,600 unearned income, 1,000 child support, 100 interest income, and not UP-TANF family, $1,600 per year +- name: Case 2, mixed unearned income with child support below disregard cap. period: 2023 input: state_code: VA @@ -34,10 +42,15 @@ ssi: 0 child_support_received: 1_000 output: - va_tanf_countable_unearned_income: 1_600 - + # Gross unearned = 200*8 + 100 + 1,000 = 2,700 annual + # Monthly: 2,700/12 = 225 + # Child support: 1,000/12 = 83.33/month + # Disregard: min(83.33, 100) = 83.33 + # Countable monthly: 225 - 83.33 = 141.67 + # Annual: 141.67 * 12 = 1,700 + va_tanf_countable_unearned_income: 1_700 -- name: 1,600 unearned income, 1,500 child support, and 150 interest income, and not UP-TANF family, $1,930 per year +- name: Case 3, child support above disregard cap, not UP-TANF. period: 2023 input: state_code: VA @@ -54,10 +67,15 @@ ssi: 0 child_support_received: 1_500 output: - va_tanf_countable_unearned_income: 1_930 - + # Gross unearned = 200*8 + 150 + 1,500 = 3,250 annual + # Monthly: 3,250/12 = 270.83 + # Child support: 1,500/12 = 125/month + # Disregard: min(125, 100) = 100 (capped) + # Countable monthly: 270.83 - 100 = 170.83 + # Annual: 170.83 * 12 = 2,050 + va_tanf_countable_unearned_income: 2_050 -- name: 1,600 unearned income, 1,500 child support, and 150 interest income, and UP-TANF family, $1,730 per year +- name: Case 4, UP-TANF eligible, unemployment also disregarded. period: 2023 input: state_code: VA @@ -74,4 +92,10 @@ ssi: 0 child_support_received: 1_500 output: - va_tanf_countable_unearned_income: 1_730 + # Gross unearned = 3,250 annual + # Monthly: 270.83 + # Child support disregard: 100/month (capped) + # Unemployment: 200/12 = 16.67/month (fully disregarded for UP-TANF) + # Countable monthly: 270.83 - 100 - 16.67 = 154.16 + # Annual: 154.16 * 12 = 1,850 + va_tanf_countable_unearned_income: 1_850 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml index ae62c4faf7c..469b27e0b17 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml @@ -8,7 +8,7 @@ person1: is_mother: true age: 30 - earned_income: 12_000 + employment_income_before_lsr: 12_000 work_hours_per_week: 40 person2: is_child: true @@ -65,7 +65,7 @@ person1: is_mother: true age: 28 - earned_income: 6_000 + employment_income_before_lsr: 6_000 work_hours_per_week: 20 person2: is_child: true @@ -118,12 +118,12 @@ people: person1: age: 35 - earned_income: 0 + employment_income_before_lsr: 0 work_hours_per_week: 0 is_disabled: false person2: age: 32 - earned_income: 0 + employment_income_before_lsr: 0 work_hours_per_week: 0 is_disabled: false person3: @@ -181,7 +181,7 @@ person1: is_mother: true age: 35 - earned_income: 30_000 + employment_income_before_lsr: 30_000 work_hours_per_week: 40 person2: is_child: true @@ -233,7 +233,7 @@ person1: is_mother: true age: 25 - earned_income: 8_000 + employment_income_before_lsr: 7_000 work_hours_per_week: 35 person2: is_child: true @@ -261,24 +261,26 @@ # # Earned income deduction: # Flat exclusion (size 2): $167/month * 12 = $2,004/year - # After flat: $8,000 - $2,004 = $5,996 - # After 20%: $5,996 * 0.8 = $4,796.80 - # After childcare ($2,400): max($4,796.80 - $2,400, 0) = $2,396.80 - va_tanf_countable_earned_income: 2_396.8 + # After flat: $7,000 - $2,004 = $4,996 + # After 20%: $4,996 * 0.8 = $3,996.80 + # After childcare ($2,400): max($3,996.80 - $2,400, 0) = $1,596.80 + va_tanf_countable_earned_income: 1_596.8 # # Childcare deduction (full-time, infant under 2): $200 * 12 = $2,400/year va_tanf_childcare_deduction: 2_400 # - # Countable income: $2,396.80 + $0 = $2,396.80 - va_tanf_countable_income: 2_396.8 + # Countable income: $1,596.80 + $0 = $1,596.80 + va_tanf_countable_income: 1_596.8 # - # Income eligibility: $2,396.80 <= $7,956? YES + # Income eligibility: + # Step 1: gross_income ($7,000) <= need_standard ($7,956)? YES + # Step 2: countable_income ($1,596.80) <= grant_standard ($3,984)? YES va_tanf_income_eligibility: true # - # Benefit: $3,984 - $2,396.80 = $1,587.20 + # Benefit: $3,984 - $1,596.80 = $2,387.20 # Minimum: $120, Maximum (Group II): $7,500 - # $1,587.20 >= $120 and <= $7,500, so benefit = $1,587.20 - va_tanf: 1_587.2 + # $2,387.20 >= $120 and <= $7,500, so benefit = $2,387.20 + va_tanf: 2_387.2 - name: Family with earned and unearned income (child support) period: 2023 @@ -287,7 +289,7 @@ person1: is_mother: true age: 32 - earned_income: 6_000 + employment_income_before_lsr: 6_000 work_hours_per_week: 25 child_support_received: 2_400 person2: @@ -351,12 +353,12 @@ person1: is_mother: true age: 38 - earned_income: 10_000 + employment_income_before_lsr: 10_000 work_hours_per_week: 30 person2: is_father: true age: 40 - earned_income: 0 + employment_income_before_lsr: 0 work_hours_per_week: 0 is_disabled: true person3: @@ -429,12 +431,12 @@ person1: is_mother: true age: 45 - earned_income: 9_000 + employment_income_before_lsr: 9_000 work_hours_per_week: 35 person2: is_father: true age: 50 - earned_income: 0 + employment_income_before_lsr: 0 work_hours_per_week: 0 is_disabled: true person3: From cc32d2a361a64eab522e1043ec72b0068e19943a Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 8 Jan 2026 17:46:00 -0500 Subject: [PATCH 07/11] backdating --- .../va/dss/tanf/standard_multiplier.yaml | 36 ++ .../va_tanf_income_eligibility.yaml | 35 +- .../va_tanf_countable_unearned_income.yaml | 19 +- .../gov/states/va/dss/tanf/integration.yaml | 329 +++++++++--------- .../va/dss/tanf/va_tanf_grant_standard.yaml | 64 ++-- .../va/dss/tanf/va_tanf_need_standard.yaml | 52 ++- .../dss/tanf/va_tanf_up_grant_standard.yaml | 52 ++- .../eligibility/va_tanf_income_eligibility.py | 17 +- .../va_tanf_countable_unearned_income.py | 17 +- .../va/dss/tanf/va_tanf_grant_standard.py | 5 +- .../va/dss/tanf/va_tanf_need_standard.py | 5 +- .../va/dss/tanf/va_tanf_up_grant_standard.py | 5 +- 12 files changed, 351 insertions(+), 285 deletions(-) create mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/standard_multiplier.yaml diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/standard_multiplier.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/standard_multiplier.yaml new file mode 100644 index 00000000000..89f8fd7e492 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/standard_multiplier.yaml @@ -0,0 +1,36 @@ +description: Virginia applies this multiplier to base Temporary Assistance for Needy Families standards of assistance. + +metadata: + unit: /1 + period: year + label: Virginia TANF standard of assistance multiplier + reference: + - title: Virginia TANF Interim Working Group Report - January 2023 + href: https://rga.lis.virginia.gov/Published/2023/RD197/PDF + - title: SB30 Budget Amendment 340#1s - 2022 TANF Standards Increase + href: https://budget.lis.virginia.gov/amendment/2022/1/SB30/Introduced/CA/340/1s/ + - title: SB800 Budget Amendment 341#1s - 2023 TANF Standards Increase + href: https://budget.lis.virginia.gov/amendment/2023/1/SB800/Introduced/FA/341/1s/ + +# Multipliers calculated relative to 2020-07-01 base values in parameter tables +# Historical increases: Jan 2016 (+2.5%), Jul 2016 (+2.5%), Jul 2017 (+2.5%), +# Jul 2019 (+5%), Jul 2020 (+15%), Jul 2021 (+10%), Jul 2022 (+5%), Jul 2023 (+10%) +values: + # Pre-2016 base (before any increases since 2016) + 1996-01-01: 0.7691 + # January 2016: +2.5% + 2016-01-01: 0.7883 + # July 2016: +2.5% + 2016-07-01: 0.808 + # July 2017: +2.5% + 2017-07-01: 0.8282 + # July 2019: +5% + 2019-07-01: 0.8696 + # July 2020: +15% (base year for parameter tables) + 2020-07-01: 1.0 + # July 2021: +10% + 2021-07-01: 1.1 + # July 2022: +5% + 2022-07-01: 1.155 + # July 2023: +10% + 2023-07-01: 1.2705 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml index 36add278d35..37ebd75eb8d 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml @@ -1,20 +1,19 @@ # VA TANF Income Eligibility Tests # Two-step test: -# Step 1: gross_income (gross_earned + countable_unearned) <= need_standard +# Step 1: va_tanf_gross_income <= need_standard # Step 2: countable_income <= grant_standard (or up_grant_standard if UP eligible) - name: Case 1, no income is eligible. period: 2023 input: state_code: VA - tanf_gross_earned_income: 0 - va_tanf_countable_unearned_income: 0 + va_tanf_gross_income: 0 va_tanf_need_standard: 12_000 va_tanf_countable_income: 0 va_up_tanf_eligibility: false va_tanf_grant_standard: 6_000 output: - # Step 1: 0 + 0 = 0 <= 12,000? YES + # Step 1: 0 <= 12,000? YES # Step 2: 0 <= 6,000? YES va_tanf_income_eligibility: true @@ -22,14 +21,13 @@ period: 2023 input: state_code: VA - tanf_gross_earned_income: 10_000 - va_tanf_countable_unearned_income: 2_000 + va_tanf_gross_income: 12_000 va_tanf_need_standard: 12_000 va_tanf_countable_income: 5_000 va_up_tanf_eligibility: false va_tanf_grant_standard: 6_000 output: - # Step 1: 10,000 + 2,000 = 12,000 <= 12,000? YES + # Step 1: 12,000 <= 12,000? YES # Step 2: 5,000 <= 6,000? YES va_tanf_income_eligibility: true @@ -37,28 +35,26 @@ period: 2023 input: state_code: VA - tanf_gross_earned_income: 11_000 - va_tanf_countable_unearned_income: 2_000 + va_tanf_gross_income: 13_000 va_tanf_need_standard: 12_000 va_tanf_countable_income: 5_000 va_up_tanf_eligibility: false va_tanf_grant_standard: 6_000 output: - # Step 1: 11,000 + 2,000 = 13,000 <= 12,000? NO (fails step 1) + # Step 1: 13,000 <= 12,000? NO (fails step 1) va_tanf_income_eligibility: false - name: Case 4, countable income exceeds grant standard - not eligible. period: 2023 input: state_code: VA - tanf_gross_earned_income: 8_000 - va_tanf_countable_unearned_income: 2_000 + va_tanf_gross_income: 10_000 va_tanf_need_standard: 12_000 va_tanf_countable_income: 7_000 va_up_tanf_eligibility: false va_tanf_grant_standard: 6_000 output: - # Step 1: 8,000 + 2,000 = 10,000 <= 12,000? YES + # Step 1: 10,000 <= 12,000? YES # Step 2: 7,000 <= 6,000? NO (fails step 2) va_tanf_income_eligibility: false @@ -66,15 +62,14 @@ period: 2023 input: state_code: VA - tanf_gross_earned_income: 6_000 - va_tanf_countable_unearned_income: 2_000 + va_tanf_gross_income: 8_000 va_tanf_need_standard: 12_000 va_tanf_countable_income: 4_500 va_up_tanf_eligibility: true va_tanf_grant_standard: 6_000 va_tanf_up_grant_standard: 5_000 output: - # Step 1: 6,000 + 2,000 = 8,000 <= 12,000? YES + # Step 1: 8,000 <= 12,000? YES # Step 2 (UP): 4,500 <= 5,000? YES va_tanf_income_eligibility: true @@ -82,15 +77,14 @@ period: 2023 input: state_code: VA - tanf_gross_earned_income: 6_000 - va_tanf_countable_unearned_income: 2_000 + va_tanf_gross_income: 8_000 va_tanf_need_standard: 12_000 va_tanf_countable_income: 5_500 va_up_tanf_eligibility: true va_tanf_grant_standard: 6_000 va_tanf_up_grant_standard: 5_000 output: - # Step 1: 6,000 + 2,000 = 8,000 <= 12,000? YES + # Step 1: 8,000 <= 12,000? YES # Step 2 (UP): 5,500 <= 5,000? NO (fails step 2) va_tanf_income_eligibility: false @@ -98,8 +92,7 @@ period: 2023 input: state_code: MD - tanf_gross_earned_income: 0 - va_tanf_countable_unearned_income: 0 + va_tanf_gross_income: 0 va_tanf_need_standard: 12_000 va_tanf_countable_income: 0 va_up_tanf_eligibility: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml index d63b2c63953..ff3ba171858 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml @@ -1,5 +1,5 @@ # VA TANF Countable Unearned Income Tests -# Formula: gross_unearned - child_support_disregard - (unemployment if UP-TANF) +# Formula: gross_unearned - child_support_disregard # Child support disregard: min(child_support, $100/month) # tanf_gross_unearned_income includes: veterans_benefits, rental_income, child_support_received, # alimony_income, dividend_income, interest_income, pension_income, unemployment_compensation, @@ -75,11 +75,10 @@ # Annual: 170.83 * 12 = 2,050 va_tanf_countable_unearned_income: 2_050 -- name: Case 4, UP-TANF eligible, unemployment also disregarded. +- name: Case 4, UP-TANF eligible, same calculation as regular TANF. period: 2023 input: state_code: VA - va_up_tanf_eligibility: true veterans_benefits: 200 rental_income: 200 alimony_income: 200 @@ -92,10 +91,10 @@ ssi: 0 child_support_received: 1_500 output: - # Gross unearned = 3,250 annual - # Monthly: 270.83 - # Child support disregard: 100/month (capped) - # Unemployment: 200/12 = 16.67/month (fully disregarded for UP-TANF) - # Countable monthly: 270.83 - 100 - 16.67 = 154.16 - # Annual: 154.16 * 12 = 1,850 - va_tanf_countable_unearned_income: 1_850 + # Gross unearned = 200*8 + 150 + 1,500 = 3,250 annual + # Monthly: 3,250/12 = 270.83 + # Child support: 1,500/12 = 125/month + # Disregard: min(125, 100) = 100 (capped) + # Countable monthly: 270.83 - 100 = 170.83 + # Annual: 170.83 * 12 = 2,050 + va_tanf_countable_unearned_income: 2_050 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml index 469b27e0b17..38c736de887 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml @@ -1,8 +1,9 @@ # Virginia TANF Integration Tests # Tests the full TANF calculation pipeline end-to-end +# Uses 2021-01 period to validate base values (multiplier = 1.0) - name: Group III locality - Single parent family with moderate earned income - period: 2023 + period: 2021-01 input: people: person1: @@ -28,38 +29,38 @@ # Family size: 3 # Group III locality (Arlington County) # - # Need standard: $1,017/month * 12 = $12,204/year - va_tanf_need_standard: 12_204 + # Need standard: $1,017/month + va_tanf_need_standard: 1_017 # - # Grant standard: $508/month * 12 = $6,096/year - va_tanf_grant_standard: 6_096 + # Grant standard: $508/month + va_tanf_grant_standard: 508 # # Full-time (40 hours >= 30 hours threshold) va_tanf_is_full_time: true # - # Earned income deduction: - # Flat exclusion (size 3): $167/month * 12 = $2,004/year - # After flat: max($12,000 - $2,004, 0) = $9,996 - # After 20%: $9,996 * (1 - 0.2) = $7,996.80 - # After childcare ($4,200): max($7,996.80 - $4,200, 0) = $3,796.80 - va_tanf_countable_earned_income: 3_796.8 + # Earned income deduction (monthly): + # Gross earned: $12,000/12 = $1,000/month + # Flat exclusion (size 3): $167/month + # After flat: max($1,000 - $167, 0) = $833 + # After 20%: $833 * 0.8 = $666.40 + # Childcare (full-time, 2 children age 2+): $175 * 2 = $350/month + # After childcare: max($666.40 - $350, 0) = $316.40 + va_tanf_countable_earned_income: 316.4 # - # Childcare deduction (full-time, 2 children age 2+): $175 * 2 * 12 = $4,200/year - va_tanf_childcare_deduction: 4_200 + # Childcare deduction: $350/month + va_tanf_childcare_deduction: 350 # - # Countable income: $3,796.80 + $0 = $3,796.80 - va_tanf_countable_income: 3_796.8 + # Countable income: $316.40 + $0 = $316.40 + va_tanf_countable_income: 316.4 # - # Income eligibility: $3,796.80 <= $12,204? YES + # Income eligibility: $316.40 <= $1,017? YES (and gross $1,000 <= $1,017) va_tanf_income_eligibility: true # - # Benefit: $6,096 - $3,796.80 = $2,299.20 - # Minimum: $120, Maximum: $8,940 - # $2,299.20 >= $120 and <= $8,940, so benefit = $2,299.20 - va_tanf: 2_299.2 + # Benefit: $508 - $316.40 = $191.60 + va_tanf: 191.6 - name: Group II locality - Single parent family with part-time work - period: 2023 + period: 2021-01 input: people: person1: @@ -82,38 +83,38 @@ # Family size: 2 # Group II locality (Pittsylvania County) # - # Need standard: $663/month * 12 = $7,956/year - va_tanf_need_standard: 7_956 + # Need standard: $663/month + va_tanf_need_standard: 663 # - # Grant standard: $332/month * 12 = $3,984/year - va_tanf_grant_standard: 3_984 + # Grant standard: $332/month + va_tanf_grant_standard: 332 # # Part-time (20 hours < 30 hours threshold) va_tanf_is_full_time: false # - # Earned income deduction: - # Flat exclusion (size 2): $167/month * 12 = $2,004/year - # After flat: max($6,000 - $2,004, 0) = $3,996 - # After 20%: $3,996 * 0.8 = $3,196.80 - # After childcare ($1,440): max($3,196.80 - $1,440, 0) = $1,756.80 - va_tanf_countable_earned_income: 1_756.8 + # Earned income deduction (monthly): + # Gross earned: $6,000/12 = $500/month + # Flat exclusion (size 2): $167/month + # After flat: max($500 - $167, 0) = $333 + # After 20%: $333 * 0.8 = $266.40 + # Childcare (part-time, 1 child): $120/month + # After childcare: max($266.40 - $120, 0) = $146.40 + va_tanf_countable_earned_income: 146.4 # - # Childcare deduction (part-time, 1 child): $120 * 1 * 12 = $1,440/year - va_tanf_childcare_deduction: 1_440 + # Childcare deduction: $120/month + va_tanf_childcare_deduction: 120 # - # Countable income: $1,756.80 + $0 = $1,756.80 - va_tanf_countable_income: 1_756.8 + # Countable income: $146.40 + $0 = $146.40 + va_tanf_countable_income: 146.4 # - # Income eligibility: $1,756.80 <= $7,956? YES + # Income eligibility: $146.40 <= $663? YES va_tanf_income_eligibility: true # - # Benefit: $3,984 - $1,756.80 = $2,227.20 - # Minimum: $120, Maximum (Group II): $7,500 - # $2,227.20 >= $120 and <= $7,500, so benefit = $2,227.20 - va_tanf: 2_227.2 + # Benefit: $332 - $146.40 = $185.60 + va_tanf: 185.6 - name: TANF-UP scenario - Two able-bodied adults in Group III locality - period: 2023 + period: 2021-01 input: people: person1: @@ -147,35 +148,35 @@ # TANF-UP eligible: both parents are able-bodied (not disabled) va_up_tanf_eligibility: true # - # Need standard (Group III, size 4): $1,178/month * 12 = $14,136/year - va_tanf_need_standard: 14_136 + # Need standard (Group III, size 4): $1,178/month + va_tanf_need_standard: 1_178 # - # UP Grant standard (Group III, size 4): $513/month * 12 = $6,156/year - va_tanf_up_grant_standard: 6_156 + # UP Grant standard (Group III, size 4): $513/month + va_tanf_up_grant_standard: 513 # # Part-time (0 hours < 30 hours) va_tanf_is_full_time: false # - # No earned income, after childcare deduction still $0 + # No earned income va_tanf_countable_earned_income: 0 # - # Childcare deduction (part-time, 2 children age 2+): $120 * 2 * 12 = $2,880/year - va_tanf_childcare_deduction: 2_880 + # Childcare deduction (part-time, 2 children age 2+): $120 * 2 = $240/month + va_tanf_childcare_deduction: 240 # # Countable income: $0 + $0 = $0 va_tanf_countable_income: 0 # - # Income eligibility: $0 <= $14,136? YES + # Income eligibility: $0 <= $1,178? YES va_tanf_income_eligibility: true # - # Benefit (TANF-UP): $6,156 - $0 = $6,156 - # Maximum UP (Group III): $648 * 12 = $7,776 - # $6,156 >= $120 and <= $7,776, so benefit = $6,156 - va_tanf: 6_156 + # Benefit (TANF-UP): $513 - $0 = $513 + # Maximum UP (Group III): $648/month + # $513 >= $10 and <= $648, so benefit = $513 + va_tanf: 513 - name: Income exceeds need standard - Not eligible absolute_error_margin: 0.01 - period: 2023 + period: 2021-01 input: people: person1: @@ -198,36 +199,40 @@ # Family size: 2 # Group III locality (Arlington County) # - # Need standard: $842/month * 12 = $10,104/year - va_tanf_need_standard: 10_104 + # Need standard: $842/month + va_tanf_need_standard: 842 # - # Grant standard: $422/month * 12 = $5,064/year - va_tanf_grant_standard: 5_064 + # Grant standard: $422/month + va_tanf_grant_standard: 422 # # Full-time (40 hours >= 30 hours) va_tanf_is_full_time: true # - # Earned income deduction: - # Flat exclusion (size 2): $167/month * 12 = $2,004/year - # After flat: $30,000 - $2,004 = $27,996 - # After 20%: $27,996 * 0.8 = $22,396.80 - # After childcare ($2,100): max($22,396.80 - $2,100, 0) = $20,296.80 - va_tanf_countable_earned_income: 20_296.8 + # Earned income deduction (monthly): + # Gross earned: $30,000/12 = $2,500/month + # Flat exclusion (size 2): $167/month + # After flat: $2,500 - $167 = $2,333 + # After 20%: $2,333 * 0.8 = $1,866.40 + # Childcare (full-time, 1 child): $175/month + # After childcare: max($1,866.40 - $175, 0) = $1,691.40 + va_tanf_countable_earned_income: 1_691.4 # - # Childcare deduction (full-time, 1 child age 10): $175 * 12 = $2,100/year - va_tanf_childcare_deduction: 2_100 + # Childcare deduction: $175/month + va_tanf_childcare_deduction: 175 # - # Countable income: $20,296.80 + $0 = $20,296.80 - va_tanf_countable_income: 20_296.8 + # Countable income: $1,691.40 + $0 = $1,691.40 + va_tanf_countable_income: 1_691.4 # - # Income eligibility: $20,296.80 <= $10,104? NO + # Income eligibility: + # Step 1: gross $2,500 <= need $842? NO (fails) va_tanf_income_eligibility: false # # Not eligible, so benefit = $0 va_tanf: 0 - name: Group II locality - Family with infant (higher care deduction) - period: 2023 + absolute_error_margin: 0.01 + period: 2021-01 input: people: person1: @@ -250,40 +255,40 @@ # Family size: 2 # Group II locality (Pittsylvania County) # - # Need standard: $663/month * 12 = $7,956/year - va_tanf_need_standard: 7_956 + # Need standard: $663/month + va_tanf_need_standard: 663 # - # Grant standard: $332/month * 12 = $3,984/year - va_tanf_grant_standard: 3_984 + # Grant standard: $332/month + va_tanf_grant_standard: 332 # # Full-time (35 hours >= 30 hours) va_tanf_is_full_time: true # - # Earned income deduction: - # Flat exclusion (size 2): $167/month * 12 = $2,004/year - # After flat: $7,000 - $2,004 = $4,996 - # After 20%: $4,996 * 0.8 = $3,996.80 - # After childcare ($2,400): max($3,996.80 - $2,400, 0) = $1,596.80 - va_tanf_countable_earned_income: 1_596.8 + # Earned income deduction (monthly): + # Gross earned: $7,000/12 = $583.33/month + # Flat exclusion (size 2): $167/month + # After flat: $583.33 - $167 = $416.33 + # After 20%: $416.33 * 0.8 = $333.07 + # Childcare (full-time, infant under 2): $200/month + # After childcare: max($333.07 - $200, 0) = $133.07 + va_tanf_countable_earned_income: 133.07 # - # Childcare deduction (full-time, infant under 2): $200 * 12 = $2,400/year - va_tanf_childcare_deduction: 2_400 + # Childcare deduction: $200/month + va_tanf_childcare_deduction: 200 # - # Countable income: $1,596.80 + $0 = $1,596.80 - va_tanf_countable_income: 1_596.8 + # Countable income: $133.07 + $0 = $133.07 + va_tanf_countable_income: 133.07 # # Income eligibility: - # Step 1: gross_income ($7,000) <= need_standard ($7,956)? YES - # Step 2: countable_income ($1,596.80) <= grant_standard ($3,984)? YES + # Step 1: gross $583.33 <= need $663? YES + # Step 2: countable $133.07 <= grant $332? YES va_tanf_income_eligibility: true # - # Benefit: $3,984 - $1,596.80 = $2,387.20 - # Minimum: $120, Maximum (Group II): $7,500 - # $2,387.20 >= $120 and <= $7,500, so benefit = $2,387.20 - va_tanf: 2_387.2 + # Benefit: $332 - $133.07 = $198.93 + va_tanf: 198.93 - name: Family with earned and unearned income (child support) - period: 2023 + period: 2021-01 input: people: person1: @@ -310,44 +315,44 @@ # Family size: 3 # Group III locality (Arlington County) # - # Need standard: $1,017/month * 12 = $12,204/year - va_tanf_need_standard: 12_204 + # Need standard: $1,017/month + va_tanf_need_standard: 1_017 # - # Grant standard: $508/month * 12 = $6,096/year - va_tanf_grant_standard: 6_096 + # Grant standard: $508/month + va_tanf_grant_standard: 508 # # Part-time (25 hours < 30 hours threshold) va_tanf_is_full_time: false # - # Earned income deduction: - # Flat exclusion (size 3): $167/month * 12 = $2,004/year - # After flat: max($6,000 - $2,004, 0) = $3,996 - # After 20%: $3,996 * 0.8 = $3,196.80 - # After childcare ($2,880): max($3,196.80 - $2,880, 0) = $316.80 - va_tanf_countable_earned_income: 316.8 + # Earned income deduction (monthly): + # Gross earned: $6,000/12 = $500/month + # Flat exclusion (size 3): $167/month + # After flat: max($500 - $167, 0) = $333 + # After 20%: $333 * 0.8 = $266.40 + # Childcare (part-time, 2 children age 2+): $120 * 2 = $240/month + # After childcare: max($266.40 - $240, 0) = $26.40 + va_tanf_countable_earned_income: 26.4 # - # Unearned income: - # Child support received: $2,400/year = $200/month - # Child support disregard: $100/month * 12 = $1,200/year - # Countable child support: $2,400 - $1,200 = $1,200/year - va_tanf_countable_unearned_income: 1_200 + # Unearned income (monthly): + # Child support received: $2,400/12 = $200/month + # Child support disregard: $100/month + # Countable child support: $200 - $100 = $100/month + va_tanf_countable_unearned_income: 100 # - # Childcare deduction (part-time, 2 children age 2+): $120 * 2 * 12 = $2,880/year - va_tanf_childcare_deduction: 2_880 + # Childcare deduction: $240/month + va_tanf_childcare_deduction: 240 # - # Countable income: $316.80 + $1,200 = $1,516.80 - va_tanf_countable_income: 1_516.8 + # Countable income: $26.40 + $100 = $126.40 + va_tanf_countable_income: 126.4 # - # Income eligibility: $1,516.80 <= $12,204? YES + # Income eligibility: Step 1: gross earned $500 + countable unearned $100 = $600 <= $1,017? YES va_tanf_income_eligibility: true # - # Benefit: $6,096 - $1,516.80 = $4,579.20 - # Minimum: $120, Maximum: $8,940 - # $4,579.20 >= $120 and <= $8,940, so benefit = $4,579.20 - va_tanf: 4_579.2 + # Benefit: $508 - $126.40 = $381.60 + va_tanf: 381.6 - name: Large family (size 8) in Group III locality - period: 2023 + period: 2021-01 input: people: person1: @@ -391,41 +396,43 @@ # Family size: 8 # Group III locality (Fairfax County) # - # Need standard (size 8): $1,868/month * 12 = $22,416/year - va_tanf_need_standard: 22_416 + # Need standard (size 8): $1,868/month + va_tanf_need_standard: 1_868 # - # Grant standard (size 8): $933/month * 12 = $11,196/year - va_tanf_grant_standard: 11_196 + # Grant standard (size 8): $933/month + va_tanf_grant_standard: 933 # # Full-time (30 hours >= 30 hours threshold) va_tanf_is_full_time: true # - # Earned income deduction: - # Flat exclusion (size 8, uses size 6+ rate): $240/month * 12 = $2,880/year - # After flat: max($10,000 - $2,880, 0) = $7,120 - # After 20%: $7,120 * 0.8 = $5,696 - # After childcare ($14,700): max($5,696 - $14,700, 0) = $0 + # Earned income deduction (monthly): + # Gross earned: $10,000/12 = $833.33/month + # Flat exclusion (size 8, uses size 6+ rate): $240/month + # After flat: max($833.33 - $240, 0) = $593.33 + # After 20%: $593.33 * 0.8 = $474.67 + # Childcare (full-time): + # - 1 disabled adult: $175/month + # - 6 children age 2+: $175 * 6 = $1,050/month + # Total: $1,225/month + # After childcare: max($474.67 - $1,225, 0) = $0 va_tanf_countable_earned_income: 0 # - # Childcare deduction (full-time): - # - 1 disabled adult: $175/month - # - 6 children age 2+: $175 * 6 = $1,050/month - # Total: ($175 + $1,050) * 12 = $14,700/year - va_tanf_childcare_deduction: 14_700 + # Childcare deduction: $1,225/month + va_tanf_childcare_deduction: 1_225 # # Countable income: $0 + $0 = $0 va_tanf_countable_income: 0 # - # Income eligibility: $0 <= $22,416? YES + # Income eligibility: $0 <= $1,868? YES va_tanf_income_eligibility: true # - # Benefit: $11,196 - $0 = $11,196 - # Maximum (Group III): $745 * 12 = $8,940 - # $11,196 > $8,940, so capped at $8,940 - va_tanf: 8_940 + # Benefit: $933 - $0 = $933 + # Maximum (Group III): $745/month + # $933 > $745, so capped at $745 + va_tanf: 745 - name: Family with disabled adult as care recipient - period: 2023 + period: 2021-01 input: people: person1: @@ -454,35 +461,35 @@ # Family size: 3 # Group II locality (Pittsylvania County) # - # Need standard: $836/month * 12 = $10,032/year - va_tanf_need_standard: 10_032 + # Need standard: $836/month + va_tanf_need_standard: 836 # - # Grant standard: $417/month * 12 = $5,004/year - va_tanf_grant_standard: 5_004 + # Grant standard: $417/month + va_tanf_grant_standard: 417 # # Full-time (35 hours >= 30 hours threshold) va_tanf_is_full_time: true # - # Earned income deduction: - # Flat exclusion (size 3): $167/month * 12 = $2,004/year - # After flat: max($9,000 - $2,004, 0) = $6,996 - # After 20%: $6,996 * 0.8 = $5,596.80 - # After childcare ($4,200): max($5,596.80 - $4,200, 0) = $1,396.80 - va_tanf_countable_earned_income: 1_396.8 - # - # Childcare deduction (full-time): - # - 1 disabled adult age 50 (2+): $175/month - # - 1 child age 12 (2+): $175/month - # Total: ($175 + $175) * 12 = $4,200/year - va_tanf_childcare_deduction: 4_200 - # - # Countable income: $1,396.80 + $0 = $1,396.80 - va_tanf_countable_income: 1_396.8 - # - # Income eligibility: $1,396.80 <= $10,032? YES + # Earned income deduction (monthly): + # Gross earned: $9,000/12 = $750/month + # Flat exclusion (size 3): $167/month + # After flat: max($750 - $167, 0) = $583 + # After 20%: $583 * 0.8 = $466.40 + # Childcare (full-time): + # - 1 disabled adult age 50 (2+): $175/month + # - 1 child age 12 (2+): $175/month + # Total: $350/month + # After childcare: max($466.40 - $350, 0) = $116.40 + va_tanf_countable_earned_income: 116.4 + # + # Childcare deduction: $350/month + va_tanf_childcare_deduction: 350 + # + # Countable income: $116.40 + $0 = $116.40 + va_tanf_countable_income: 116.4 + # + # Income eligibility: $116.40 <= $836? YES va_tanf_income_eligibility: true # - # Benefit: $5,004 - $1,396.80 = $3,607.20 - # Minimum: $120, Maximum (Group II): $7,500 - # $3,607.20 >= $120 and <= $7,500, so benefit = $3,607.20 - va_tanf: 3_607.2 + # Benefit: $417 - $116.40 = $300.60 + va_tanf: 300.6 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_grant_standard.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_grant_standard.yaml index 4ce2d44de39..ffeb1fb3139 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_grant_standard.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_grant_standard.yaml @@ -1,82 +1,96 @@ -- name: If one person and lives in Arlington, grant standard is $316 * 12/yr. - period: 2023 +# Tests use 2021-01 period to validate base values (multiplier = 1.0) +# Parameter tables contain July 2020 values; multiplier adjusts for later periods + +- name: If one person and lives in Arlington, grant standard is $316/month. + period: 2021-01 input: state_code: VA spm_unit_size: 1 county_str: ARLINGTON_COUNTY_VA output: - va_tanf_grant_standard: 316 * 12 + va_tanf_grant_standard: 316 -- name: If ten person and lives in Fairfax, grant standard is $1,085 * 12/yr. - period: 2023 +- name: If ten person and lives in Fairfax, grant standard is $1,085/month. + period: 2021-01 input: state_code: VA spm_unit_size: 10 county_str: FAIRFAX_COUNTY_VA output: - va_tanf_grant_standard: 1_085 * 12 + va_tanf_grant_standard: 1_085 -- name: If eleven person and lives in Arlington, grant standard is ($1,085 + $81) * 12/yr. +- name: If eleven person and lives in Arlington, grant standard is $1,166/month. # Family size 11 = main[10] + 1 * addition = $1,085 + $81 = $1,166/month - period: 2023 + period: 2021-01 input: state_code: VA spm_unit_size: 11 county_str: ARLINGTON_COUNTY_VA output: - va_tanf_grant_standard: 1_166 * 12 + va_tanf_grant_standard: 1_166 -- name: If twelve person and lives in Montgomery, grant standard is $1,247 * 12/yr. - period: 2023 +- name: If twelve person and lives in Montgomery, grant standard is $1,247/month. + period: 2021-01 input: state_code: VA spm_unit_size: 12 county_str: MONTGOMERY_COUNTY_VA output: - va_tanf_grant_standard: 1_247 * 12 + va_tanf_grant_standard: 1_247 -- name: If one person and lives in Bedford, grant standard is $226 * 12/yr. - period: 2023 +- name: If one person and lives in Bedford, grant standard is $226/month. + period: 2021-01 input: state_code: VA spm_unit_size: 1 county_str: BEDFORD_COUNTY_VA output: - va_tanf_grant_standard: 226 * 12 + va_tanf_grant_standard: 226 -- name: If ten person and lives in Frederick, grant standard is $975 * 12/yr. - period: 2023 +- name: If ten person and lives in Frederick, grant standard is $975/month. + period: 2021-01 input: state_code: VA spm_unit_size: 10 county_str: FREDERICK_COUNTY_VA output: - va_tanf_grant_standard: 975 * 12 + va_tanf_grant_standard: 975 -- name: If eleven person and lives in Bedford, grant standard is ($975 + $81) * 12/yr. +- name: If eleven person and lives in Bedford, grant standard is $1,056/month. # Family size 11 = main[10] + 1 * addition = $975 + $81 = $1,056/month - period: 2023 + period: 2021-01 input: state_code: VA spm_unit_size: 11 county_str: BEDFORD_COUNTY_VA output: - va_tanf_grant_standard: 1_056 * 12 + va_tanf_grant_standard: 1_056 -- name: If twelve person and lives in Pittsylvania, grant standard is $1,137 * 12/yr. - period: 2023 +- name: If twelve person and lives in Pittsylvania, grant standard is $1,137/month. + period: 2021-01 input: state_code: VA spm_unit_size: 12 county_str: PITTSYLVANIA_COUNTY_VA output: - va_tanf_grant_standard: 1_137 * 12 + va_tanf_grant_standard: 1_137 - name: Only calculate for VA. - period: 2023 + period: 2021-01 input: state_code: FL spm_unit_size: 10 county_str: COLLIER_COUNTY_FL output: va_tanf_grant_standard: 0 + +# Test multiplier effect for 2023 period (multiplier = 1.155) +- name: Grant standard in 2023 reflects 15.5% increase from base. + # Base $316 * 1.155 = $364.98/month + period: 2023-01 + input: + state_code: VA + spm_unit_size: 1 + county_str: ARLINGTON_COUNTY_VA + output: + va_tanf_grant_standard: 364.98 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_need_standard.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_need_standard.yaml index 48523dd69be..ea49992689a 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_need_standard.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_need_standard.yaml @@ -1,62 +1,76 @@ -- name: If one person and lives in Arlington, need standard is $631 * 12/yr. - period: 2023 +# Tests use 2021-01 period to validate base values (multiplier = 1.0) +# Parameter tables contain July 2020 values; multiplier adjusts for later periods + +- name: If one person and lives in Arlington, need standard is $631/month. + period: 2021-01 input: state_code: VA spm_unit_size: 1 county_str: ARLINGTON_COUNTY_VA output: - va_tanf_need_standard: 631 * 12 + va_tanf_need_standard: 631 -- name: If ten person and lives in Fairfax, need standard is $2,171 * 12/yr. - period: 2023 +- name: If ten person and lives in Fairfax, need standard is $2,171/month. + period: 2021-01 input: state_code: VA spm_unit_size: 10 county_str: FAIRFAX_COUNTY_VA output: - va_tanf_need_standard: 2_171 * 12 + va_tanf_need_standard: 2_171 -- name: If twelve person and lives in Montgomery, need standard is $2,495 * 12/yr. - period: 2023 +- name: If twelve person and lives in Montgomery, need standard is $2,495/month. + period: 2021-01 input: state_code: VA spm_unit_size: 12 county_str: MONTGOMERY_COUNTY_VA output: - va_tanf_need_standard: 2_495 * 12 + va_tanf_need_standard: 2_495 -- name: If one person and lives in Bedford, need standard is $453 * 12/yr. - period: 2023 +- name: If one person and lives in Bedford, need standard is $453/month. + period: 2021-01 input: state_code: VA spm_unit_size: 1 county_str: BEDFORD_COUNTY_VA output: - va_tanf_need_standard: 453 * 12 + va_tanf_need_standard: 453 -- name: If ten person and lives in Frederick, need standard is $1,950 * 12/yr. - period: 2023 +- name: If ten person and lives in Frederick, need standard is $1,950/month. + period: 2021-01 input: state_code: VA spm_unit_size: 10 county_str: FREDERICK_COUNTY_VA output: - va_tanf_need_standard: 1_950 * 12 + va_tanf_need_standard: 1_950 -- name: If twelve person and lives in Pittsylvania, need standard is $2,274 * 12/yr. - period: 2023 +- name: If twelve person and lives in Pittsylvania, need standard is $2,274/month. + period: 2021-01 input: state_code: VA spm_unit_size: 12 county_str: PITTSYLVANIA_COUNTY_VA output: - va_tanf_need_standard: 2_274 * 12 + va_tanf_need_standard: 2_274 - name: Only calculate for VA. - period: 2023 + period: 2021-01 input: state_code: FL spm_unit_size: 10 county_str: COLLIER_COUNTY_FL output: va_tanf_need_standard: 0 + +# Test multiplier effect for 2023 period (multiplier = 1.155) +- name: Need standard in 2023 reflects 15.5% increase from base. + # Base $631 * 1.155 = $728.805/month + period: 2023-01 + input: + state_code: VA + spm_unit_size: 1 + county_str: ARLINGTON_COUNTY_VA + output: + va_tanf_need_standard: 728.805 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_up_grant_standard.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_up_grant_standard.yaml index d8306994d86..f14a9cb6535 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_up_grant_standard.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_up_grant_standard.yaml @@ -1,62 +1,76 @@ -- name: If one person and lives in Arlington, up grand standard is $275 * 12/yr. - period: 2023 +# Tests use 2021-01 period to validate base values (multiplier = 1.0) +# Parameter tables contain July 2020 values; multiplier adjusts for later periods + +- name: If one person and lives in Arlington, UP grant standard is $275/month. + period: 2021-01 input: state_code: VA spm_unit_size: 1 county_str: ARLINGTON_COUNTY_VA output: - va_tanf_up_grant_standard: 275 * 12 + va_tanf_up_grant_standard: 275 -- name: If ten person and lives in Fairfax, up grand standard is $944 * 12/yr. - period: 2023 +- name: If ten person and lives in Fairfax, UP grant standard is $944/month. + period: 2021-01 input: state_code: VA spm_unit_size: 10 county_str: FAIRFAX_COUNTY_VA output: - va_tanf_up_grant_standard: 944 * 12 + va_tanf_up_grant_standard: 944 -- name: If twelve person and lives in Montgomery, up grand standard is $1,086 * 12/yr. - period: 2023 +- name: If twelve person and lives in Montgomery, UP grant standard is $1,086/month. + period: 2021-01 input: state_code: VA spm_unit_size: 12 county_str: MONTGOMERY_COUNTY_VA output: - va_tanf_up_grant_standard: 1_086 * 12 + va_tanf_up_grant_standard: 1_086 -- name: If one person and lives in Bedford, up grand standard is $197 * 12/yr. - period: 2023 +- name: If one person and lives in Bedford, UP grant standard is $197/month. + period: 2021-01 input: state_code: VA spm_unit_size: 1 county_str: BEDFORD_COUNTY_VA output: - va_tanf_up_grant_standard: 197 * 12 + va_tanf_up_grant_standard: 197 -- name: If ten person and lives in Frederick, up grand standard is $848 * 12/yr. - period: 2023 +- name: If ten person and lives in Frederick, UP grant standard is $848/month. + period: 2021-01 input: state_code: VA spm_unit_size: 10 county_str: FREDERICK_COUNTY_VA output: - va_tanf_up_grant_standard: 848 * 12 + va_tanf_up_grant_standard: 848 -- name: If twelve person and lives in Pittsylvania, up grand standard is $990 * 12/yr. - period: 2023 +- name: If twelve person and lives in Pittsylvania, UP grant standard is $990/month. + period: 2021-01 input: state_code: VA spm_unit_size: 12 county_str: PITTSYLVANIA_COUNTY_VA output: - va_tanf_up_grant_standard: 990 * 12 + va_tanf_up_grant_standard: 990 - name: Only calculate for VA. - period: 2023 + period: 2021-01 input: state_code: FL spm_unit_size: 10 county_str: COLLIER_COUNTY_FL output: va_tanf_up_grant_standard: 0 + +# Test multiplier effect for 2023 period (multiplier = 1.155) +- name: UP grant standard in 2023 reflects 15.5% increase from base. + # Base $275 * 1.155 = $317.625/month + period: 2023-01 + input: + state_code: VA + spm_unit_size: 1 + county_str: ARLINGTON_COUNTY_VA + output: + va_tanf_up_grant_standard: 317.625 diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py index d21c2be7b20..42c5649aa63 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py @@ -11,17 +11,8 @@ class va_tanf_income_eligibility(Variable): def formula(spm_unit, period, parameters): # Two-step income test per Virginia TANF Manual Section 305.1 - # Step 1: Gross income (with disregards only) <= Need Standard - person = spm_unit.members - gross_earned = spm_unit.sum( - person("tanf_gross_earned_income", period) - ) - # Countable unearned already has disregards applied - # (child support, unemployment for TANF-UP) - countable_unearned = spm_unit( - "va_tanf_countable_unearned_income", period - ) - gross_income = gross_earned + countable_unearned + # Step 1: Gross income <= Need Standard + gross_income = spm_unit("va_tanf_gross_income", period) need_standard = spm_unit("va_tanf_need_standard", period) step1_pass = gross_income <= need_standard @@ -31,7 +22,9 @@ def formula(spm_unit, period, parameters): up_eligible = spm_unit("va_up_tanf_eligibility", period) grant_standard = spm_unit("va_tanf_grant_standard", period) up_grant_standard = spm_unit("va_tanf_up_grant_standard", period) - applicable_grant = where(up_eligible, up_grant_standard, grant_standard) + applicable_grant = where( + up_eligible, up_grant_standard, grant_standard + ) step2_pass = countable_income <= applicable_grant return step1_pass & step2_pass diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py index 4418394ff89..7243e52f30d 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py @@ -12,21 +12,8 @@ class va_tanf_countable_unearned_income(Variable): def formula(spm_unit, period, parameters): p = parameters(period).gov.states.va.dss.tanf.income.deduction.unearned - person = spm_unit.members - gross_unearned = spm_unit.sum( - person("tanf_gross_unearned_income", period) - ) + gross_unearned = add(spm_unit, period, ["tanf_gross_unearned_income"]) # Apply child support disregard child_support = add(spm_unit, period, ["child_support_received"]) child_support_disregard = min_(child_support, p.monthly_child_support) - countable_unearned = gross_unearned - child_support_disregard - # For TANF-UP, also disregard unemployment compensation - up_tanf_eligibility = spm_unit("va_up_tanf_eligibility", period) - unemployment_compensation = add( - spm_unit, period, ["unemployment_compensation"] - ) - return where( - up_tanf_eligibility, - countable_unearned - unemployment_compensation, - countable_unearned, - ) + return max_(gross_unearned - child_support_disregard, 0) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py index 9654ce35b33..3e370541d99 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py @@ -29,4 +29,7 @@ def formula(spm_unit, period, parameters): p.grant_standard.group2.addition, ) - return main + additional * addition + base_amount = main + additional * addition + # Apply standard multiplier for increases since July 2020 base + multiplier = p.standard_multiplier + return base_amount * multiplier diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py index e9b36d356fd..b991b993e6e 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py @@ -29,4 +29,7 @@ def formula(spm_unit, period, parameters): p.need_standard.group2.addition, ) - return main + additional * addition + base_amount = main + additional * addition + # Apply standard multiplier for increases since July 2020 base + multiplier = p.standard_multiplier + return base_amount * multiplier diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py index 8782118faa7..ad61ad78755 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py @@ -29,4 +29,7 @@ def formula(spm_unit, period, parameters): p.up_grant_standard.group2.addition, ) - return main + additional * addition + base_amount = main + additional * addition + # Apply standard multiplier for increases since July 2020 base + multiplier = p.standard_multiplier + return base_amount * multiplier From 3ccc26f6f195751bd2c55fe17ef6cadc9a33e1cb Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 8 Jan 2026 18:22:36 -0500 Subject: [PATCH 08/11] adjustments --- .../deduction/care_expenses_part_time.yaml | 12 --- .../deduction/full_time_work_hours.yaml | 12 --- .../child_support.yaml} | 0 .../dependent_care/full_time.yaml} | 8 +- .../earned/flat.yaml | 16 +-- .../earned/percentage.yaml | 2 +- .../states/va/dss/tanf/localities/group3.yaml | 2 +- .../gov/states/va/dss/tanf/max_unit_size.yaml | 2 +- .../grant_standard/group2/addition.yaml | 0 .../grant_standard/group2/main.yaml | 0 .../grant_standard/group2/max.yaml | 0 .../grant_standard/group3/addition.yaml | 0 .../grant_standard/group3/main.yaml | 0 .../grant_standard/group3/max.yaml | 0 .../up_grant_standard/group2/addition.yaml | 0 .../up_grant_standard/group2/main.yaml | 0 .../up_grant_standard/group2/max.yaml | 0 .../up_grant_standard/group3/addition.yaml | 0 .../up_grant_standard/group3/main.yaml | 0 .../up_grant_standard/group3/max.yaml | 0 .../va/dss/tanf/standard_multiplier.yaml | 16 +-- .../income/va_tanf_childcare_deduction.yaml | 57 ++++------- .../dss/tanf/income/va_tanf_is_full_time.yaml | 80 --------------- .../gov/states/va/dss/tanf/integration.yaml | 99 ++++++++----------- .../tanf/eligibility/va_tanf_eligibility.py | 9 +- .../eligibility/va_up_tanf_eligibility.py | 14 +-- .../income/va_tanf_childcare_deduction.py | 27 ++--- .../income/va_tanf_countable_earned_income.py | 2 +- .../va_tanf_countable_unearned_income.py | 4 +- .../dss/tanf/income/va_tanf_is_full_time.py | 19 ---- .../gov/states/va/dss/tanf/va_tanf.py | 8 +- .../va/dss/tanf/va_tanf_grant_standard.py | 12 +-- .../va/dss/tanf/va_tanf_need_standard.py | 4 +- .../va/dss/tanf/va_tanf_up_grant_standard.py | 12 +-- 34 files changed, 112 insertions(+), 305 deletions(-) delete mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml delete mode 100644 policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml rename policyengine_us/parameters/gov/states/va/dss/tanf/income/{deduction/unearned/monthly_child_support.yaml => deductions/child_support.yaml} (100%) rename policyengine_us/parameters/gov/states/va/dss/tanf/income/{deduction/care_expenses_full_time.yaml => deductions/dependent_care/full_time.yaml} (90%) rename policyengine_us/parameters/gov/states/va/dss/tanf/income/{deduction => deductions}/earned/flat.yaml (78%) rename policyengine_us/parameters/gov/states/va/dss/tanf/income/{deduction => deductions}/earned/percentage.yaml (96%) rename policyengine_us/parameters/gov/states/va/dss/tanf/{ => payment}/grant_standard/group2/addition.yaml (100%) rename policyengine_us/parameters/gov/states/va/dss/tanf/{ => payment}/grant_standard/group2/main.yaml (100%) rename policyengine_us/parameters/gov/states/va/dss/tanf/{ => payment}/grant_standard/group2/max.yaml (100%) rename policyengine_us/parameters/gov/states/va/dss/tanf/{ => payment}/grant_standard/group3/addition.yaml (100%) rename policyengine_us/parameters/gov/states/va/dss/tanf/{ => payment}/grant_standard/group3/main.yaml (100%) rename policyengine_us/parameters/gov/states/va/dss/tanf/{ => payment}/grant_standard/group3/max.yaml (100%) rename policyengine_us/parameters/gov/states/va/dss/tanf/{ => payment}/up_grant_standard/group2/addition.yaml (100%) rename policyengine_us/parameters/gov/states/va/dss/tanf/{ => payment}/up_grant_standard/group2/main.yaml (100%) rename policyengine_us/parameters/gov/states/va/dss/tanf/{ => payment}/up_grant_standard/group2/max.yaml (100%) rename policyengine_us/parameters/gov/states/va/dss/tanf/{ => payment}/up_grant_standard/group3/addition.yaml (100%) rename policyengine_us/parameters/gov/states/va/dss/tanf/{ => payment}/up_grant_standard/group3/main.yaml (100%) rename policyengine_us/parameters/gov/states/va/dss/tanf/{ => payment}/up_grant_standard/group3/max.yaml (100%) delete mode 100644 policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_is_full_time.yaml delete mode 100644 policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_is_full_time.py diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml deleted file mode 100644 index a6f91d7231e..00000000000 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_part_time.yaml +++ /dev/null @@ -1,12 +0,0 @@ -description: Virginia deducts anticipated expenses for care of each dependent child or incapacitated adult for part-time employed applicants under the Temporary Assistance for Needy Families program. - -metadata: - unit: currency-USD - period: month - label: Virginia TANF monthly care expenses per child/disabled adult for part-time employment - reference: - - title: Virginia TANF Manual Section 302 - Care Expenses - href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=51 - -values: - 2020-07-01: 120 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml deleted file mode 100644 index 88b528bb501..00000000000 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/full_time_work_hours.yaml +++ /dev/null @@ -1,12 +0,0 @@ -description: Virginia classifies a worker as full-time based on this minimum weekly work hours threshold under the Temporary Assistance for Needy Families program. - -metadata: - unit: hour - period: week - label: Virginia TANF full-time weekly work hours - reference: - - title: Virginia TANF Manual Section 302 - Work Requirements - href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=49 - -values: - 2020-07-01: 30 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_child_support.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/child_support.yaml similarity index 100% rename from policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/unearned/monthly_child_support.yaml rename to policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/child_support.yaml diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_full_time.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/dependent_care/full_time.yaml similarity index 90% rename from policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_full_time.yaml rename to policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/dependent_care/full_time.yaml index 614de537ff0..a517a27a6da 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/care_expenses_full_time.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/dependent_care/full_time.yaml @@ -16,10 +16,10 @@ metadata: brackets: - amount: - 2020-07-01: 200 + 2016-01-01: 200 threshold: - 2020-07-01: 0 + 2016-01-01: 0 - amount: - 2020-07-01: 175 + 2016-01-01: 175 threshold: - 2020-07-01: 2 + 2016-01-01: 2 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/flat.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/earned/flat.yaml similarity index 78% rename from policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/flat.yaml rename to policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/earned/flat.yaml index 61b6b3a8756..87112b53056 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/flat.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/earned/flat.yaml @@ -13,18 +13,18 @@ metadata: brackets: - amount: - 2020-07-01: 167 + 2016-01-01: 167 threshold: - 2020-07-01: 1 + 2016-01-01: 1 - amount: - 2020-07-01: 178 + 2016-01-01: 178 threshold: - 2020-07-01: 4 + 2016-01-01: 4 - amount: - 2020-07-01: 209 + 2016-01-01: 209 threshold: - 2020-07-01: 5 + 2016-01-01: 5 - amount: - 2020-07-01: 240 + 2016-01-01: 240 threshold: - 2020-07-01: 6 + 2016-01-01: 6 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/percentage.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/earned/percentage.yaml similarity index 96% rename from policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/percentage.yaml rename to policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/earned/percentage.yaml index e862628af6c..3e7e2410c45 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deduction/earned/percentage.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/earned/percentage.yaml @@ -1,7 +1,7 @@ description: Virginia excludes this share of earnings from countable income under the Temporary Assistance for Needy Families program, after a flat deduction. values: - 2020-07-01: 0.2 + 2016-01-01: 0.2 metadata: unit: /1 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml index f039609e1e4..f8465f28031 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml @@ -1,6 +1,6 @@ description: Virginia lists these localities as group III under the Temporary Assistance for Needy Families program. values: - 2020-07-01: + 2016-01-01: # Counties - ALBEMARLE_COUNTY_VA - ARLINGTON_COUNTY_VA diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/max_unit_size.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/max_unit_size.yaml index 348c4a2a018..652f6e06289 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/max_unit_size.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/max_unit_size.yaml @@ -1,7 +1,7 @@ description: Virginia sets this maximum unit size for determining grant and need standards under the Temporary Assistance for Needy Families program. values: - 2020-07-01: 10 + 2016-01-01: 10 metadata: unit: person diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group2/addition.yaml similarity index 100% rename from policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/addition.yaml rename to policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group2/addition.yaml diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group2/main.yaml similarity index 100% rename from policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/main.yaml rename to policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group2/main.yaml diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group2/max.yaml similarity index 100% rename from policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group2/max.yaml rename to policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group2/max.yaml diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group3/addition.yaml similarity index 100% rename from policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/addition.yaml rename to policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group3/addition.yaml diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group3/main.yaml similarity index 100% rename from policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/main.yaml rename to policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group3/main.yaml diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group3/max.yaml similarity index 100% rename from policyengine_us/parameters/gov/states/va/dss/tanf/grant_standard/group3/max.yaml rename to policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group3/max.yaml diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group2/addition.yaml similarity index 100% rename from policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/addition.yaml rename to policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group2/addition.yaml diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group2/main.yaml similarity index 100% rename from policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/main.yaml rename to policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group2/main.yaml diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group2/max.yaml similarity index 100% rename from policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group2/max.yaml rename to policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group2/max.yaml diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group3/addition.yaml similarity index 100% rename from policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/addition.yaml rename to policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group3/addition.yaml diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group3/main.yaml similarity index 100% rename from policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/main.yaml rename to policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group3/main.yaml diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group3/max.yaml similarity index 100% rename from policyengine_us/parameters/gov/states/va/dss/tanf/up_grant_standard/group3/max.yaml rename to policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group3/max.yaml diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/standard_multiplier.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/standard_multiplier.yaml index 89f8fd7e492..f16821589fa 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/standard_multiplier.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/standard_multiplier.yaml @@ -6,31 +6,23 @@ metadata: label: Virginia TANF standard of assistance multiplier reference: - title: Virginia TANF Interim Working Group Report - January 2023 - href: https://rga.lis.virginia.gov/Published/2023/RD197/PDF + href: https://rga.lis.virginia.gov/Published/2023/RD81/PDF#page=4 - title: SB30 Budget Amendment 340#1s - 2022 TANF Standards Increase href: https://budget.lis.virginia.gov/amendment/2022/1/SB30/Introduced/CA/340/1s/ - title: SB800 Budget Amendment 341#1s - 2023 TANF Standards Increase href: https://budget.lis.virginia.gov/amendment/2023/1/SB800/Introduced/FA/341/1s/ -# Multipliers calculated relative to 2020-07-01 base values in parameter tables -# Historical increases: Jan 2016 (+2.5%), Jul 2016 (+2.5%), Jul 2017 (+2.5%), +# Multipliers calculated relative to 2020-07-01 base values in parameter tables +# Historical increases: Jan 2016 (+2.5%), Jul 2016 (+2.5%), Jul 2017 (+2.5%), # Jul 2019 (+5%), Jul 2020 (+15%), Jul 2021 (+10%), Jul 2022 (+5%), Jul 2023 (+10%) values: - # Pre-2016 base (before any increases since 2016) + # Pre-2016 base (before any increases since 2016) 1996-01-01: 0.7691 - # January 2016: +2.5% 2016-01-01: 0.7883 - # July 2016: +2.5% 2016-07-01: 0.808 - # July 2017: +2.5% 2017-07-01: 0.8282 - # July 2019: +5% 2019-07-01: 0.8696 - # July 2020: +15% (base year for parameter tables) 2020-07-01: 1.0 - # July 2021: +10% 2021-07-01: 1.1 - # July 2022: +5% 2022-07-01: 1.155 - # July 2023: +10% 2023-07-01: 1.2705 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.yaml index 705ae304219..1e4119a5afa 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.yaml @@ -1,79 +1,56 @@ -- name: Full-time employment family, mother and a 1-year-old child, $200 per month +- name: Family with mother and a 1-year-old child, expenses exceed max period: 2023 input: people: person1: - is_adult: true - is_disabled: false + is_tax_unit_dependent: false age: 25 person2: - is_child: true + is_tax_unit_dependent: true age: 1 spm_units: spm_unit: members: [person1, person2] - va_tanf_is_full_time: true + childcare_expenses: 3_000 households: household: members: [person1, person2] state_code: VA output: + # Max deduction: $200/month (child under 2) = $2,400/year + # Actual expenses: $3,000/year + # Deduction: min($3,000, $2,400) = $2,400 va_tanf_childcare_deduction: 2_400 -- name: Full-time employment family, mother, disabled father, a 1-year-old child and a 2-year-old child, $550 per month +- name: Family with mother, disabled father, two children, expenses below max period: 2023 input: people: person1: - is_adult: true + is_tax_unit_dependent: false is_disabled: false age: 25 person2: + is_tax_unit_dependent: false is_adult: true is_disabled: true age: 25 person3: - is_child: true + is_tax_unit_dependent: true age: 1 person4: - is_child: true + is_tax_unit_dependent: true age: 2 spm_units: spm_unit: members: [person1, person2, person3, person4] - va_tanf_is_full_time: true - households: - household: - members: [person1, person2, person3, person4] - state_code: VA - output: - va_tanf_childcare_deduction: 6_600 - -- name: Part-time employment family, mother, disabled father, a 1-year-old child and a 3-year-old child, $360 per month - period: 2023 - input: - people: - person1: - is_adult: true - is_disabled: false - age: 25 - person2: - is_adult: true - is_disabled: true - age: 25 - person3: - is_child: true - age: 1 - person4: - is_child: true - age: 3 - spm_units: - spm_unit: - members: [person1, person2, person3, person4] - va_tanf_is_full_time: false + childcare_expenses: 4_800 households: household: members: [person1, person2, person3, person4] state_code: VA output: - va_tanf_childcare_deduction: 4_320 + # Max deduction: $200 (child under 2) + $175 (child 2+) + $175 (disabled adult) = $550/month = $6,600/year + # Actual expenses: $4,800/year + # Deduction: min($4,800, $6,600) = $4,800 + va_tanf_childcare_deduction: 4_800 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_is_full_time.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_is_full_time.yaml deleted file mode 100644 index 841b60b5ebd..00000000000 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_is_full_time.yaml +++ /dev/null @@ -1,80 +0,0 @@ -- name: Zero work hour refers to part-time employment status. - period: 2023 - input: - people: - person1: - work_hours_per_week: 0 - is_mother: true - person2: - work_hours_per_week: 0 - is_father: true - person3: - work_hours_per_week: 0 - is_child: true - households: - household: - members: [person1, person2, person3] - state_code: VA - output: - va_tanf_is_full_time: false - -- name: One parent with 40 work hours refer to full-time employment status. - period: 2023 - input: - people: - person1: - work_hours_per_week: 40 - is_mother: true - person2: - work_hours_per_week: 0 - is_father: true - person3: - work_hours_per_week: 0 - is_child: true - households: - household: - members: [person1, person2, person3] - state_code: VA - output: - va_tanf_is_full_time: true - -- name: Only child with 30 work hours refer to part-time employment status. - period: 2023 - input: - people: - person1: - work_hours_per_week: 29 - is_mother: true - person2: - work_hours_per_week: 0 - is_father: true - person3: - work_hours_per_week: 30 - is_child: true - households: - household: - members: [person1, person2, person3] - state_code: VA - output: - va_tanf_is_full_time: false - -- name: Adult working exactly 30 hours is full-time (boundary test). - period: 2023 - input: - people: - person1: - work_hours_per_week: 30 - is_mother: true - person2: - work_hours_per_week: 0 - is_father: true - person3: - work_hours_per_week: 0 - is_child: true - households: - household: - members: [person1, person2, person3] - state_code: VA - output: - # 30 hours >= 30 threshold, so classified as full-time - va_tanf_is_full_time: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml index 38c736de887..d7d29da22dc 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml @@ -20,6 +20,7 @@ spm_units: spm_unit: members: [person1, person2, person3] + childcare_expenses: 6_000 households: household: members: [person1, person2, person3] @@ -35,19 +36,16 @@ # Grant standard: $508/month va_tanf_grant_standard: 508 # - # Full-time (40 hours >= 30 hours threshold) - va_tanf_is_full_time: true - # # Earned income deduction (monthly): # Gross earned: $12,000/12 = $1,000/month # Flat exclusion (size 3): $167/month # After flat: max($1,000 - $167, 0) = $833 # After 20%: $833 * 0.8 = $666.40 - # Childcare (full-time, 2 children age 2+): $175 * 2 = $350/month + # Childcare: min($500, $175 * 2) = $350/month # After childcare: max($666.40 - $350, 0) = $316.40 va_tanf_countable_earned_income: 316.4 # - # Childcare deduction: $350/month + # Childcare deduction: min($500, $350) = $350/month va_tanf_childcare_deduction: 350 # # Countable income: $316.40 + $0 = $316.40 @@ -59,7 +57,7 @@ # Benefit: $508 - $316.40 = $191.60 va_tanf: 191.6 -- name: Group II locality - Single parent family with part-time work +- name: Group II locality - Single parent family period: 2021-01 input: people: @@ -67,13 +65,13 @@ is_mother: true age: 28 employment_income_before_lsr: 6_000 - work_hours_per_week: 20 person2: is_child: true age: 4 spm_units: spm_unit: members: [person1, person2] + childcare_expenses: 3_600 households: household: members: [person1, person2] @@ -89,29 +87,26 @@ # Grant standard: $332/month va_tanf_grant_standard: 332 # - # Part-time (20 hours < 30 hours threshold) - va_tanf_is_full_time: false - # # Earned income deduction (monthly): # Gross earned: $6,000/12 = $500/month # Flat exclusion (size 2): $167/month # After flat: max($500 - $167, 0) = $333 # After 20%: $333 * 0.8 = $266.40 - # Childcare (part-time, 1 child): $120/month - # After childcare: max($266.40 - $120, 0) = $146.40 - va_tanf_countable_earned_income: 146.4 + # Childcare: min($300, $175) = $175/month + # After childcare: max($266.40 - $175, 0) = $91.40 + va_tanf_countable_earned_income: 91.4 # - # Childcare deduction: $120/month - va_tanf_childcare_deduction: 120 + # Childcare deduction: min($300, $175) = $175/month + va_tanf_childcare_deduction: 175 # - # Countable income: $146.40 + $0 = $146.40 - va_tanf_countable_income: 146.4 + # Countable income: $91.40 + $0 = $91.40 + va_tanf_countable_income: 91.4 # - # Income eligibility: $146.40 <= $663? YES + # Income eligibility: $91.40 <= $663? YES va_tanf_income_eligibility: true # - # Benefit: $332 - $146.40 = $185.60 - va_tanf: 185.6 + # Benefit: $332 - $91.40 = $240.60 + va_tanf: 240.6 - name: TANF-UP scenario - Two able-bodied adults in Group III locality period: 2021-01 @@ -134,6 +129,7 @@ spm_units: spm_unit: members: [person1, person2, person3, person4] + childcare_expenses: 6_000 tax_units: tax_unit: members: [person1, person2, person3, person4] @@ -154,14 +150,11 @@ # UP Grant standard (Group III, size 4): $513/month va_tanf_up_grant_standard: 513 # - # Part-time (0 hours < 30 hours) - va_tanf_is_full_time: false - # # No earned income va_tanf_countable_earned_income: 0 # - # Childcare deduction (part-time, 2 children age 2+): $120 * 2 = $240/month - va_tanf_childcare_deduction: 240 + # Childcare: min($500, $175 * 2) = $350/month + va_tanf_childcare_deduction: 350 # # Countable income: $0 + $0 = $0 va_tanf_countable_income: 0 @@ -190,6 +183,7 @@ spm_units: spm_unit: members: [person1, person2] + childcare_expenses: 3_600 households: household: members: [person1, person2] @@ -205,19 +199,16 @@ # Grant standard: $422/month va_tanf_grant_standard: 422 # - # Full-time (40 hours >= 30 hours) - va_tanf_is_full_time: true - # # Earned income deduction (monthly): # Gross earned: $30,000/12 = $2,500/month # Flat exclusion (size 2): $167/month # After flat: $2,500 - $167 = $2,333 # After 20%: $2,333 * 0.8 = $1,866.40 - # Childcare (full-time, 1 child): $175/month + # Childcare: min($300, $175) = $175/month # After childcare: max($1,866.40 - $175, 0) = $1,691.40 va_tanf_countable_earned_income: 1_691.4 # - # Childcare deduction: $175/month + # Childcare deduction: min($300, $175) = $175/month va_tanf_childcare_deduction: 175 # # Countable income: $1,691.40 + $0 = $1,691.40 @@ -246,6 +237,7 @@ spm_units: spm_unit: members: [person1, person2] + childcare_expenses: 3_600 households: household: members: [person1, person2] @@ -261,19 +253,16 @@ # Grant standard: $332/month va_tanf_grant_standard: 332 # - # Full-time (35 hours >= 30 hours) - va_tanf_is_full_time: true - # # Earned income deduction (monthly): # Gross earned: $7,000/12 = $583.33/month # Flat exclusion (size 2): $167/month # After flat: $583.33 - $167 = $416.33 # After 20%: $416.33 * 0.8 = $333.07 - # Childcare (full-time, infant under 2): $200/month + # Childcare: min($300, $200) = $200/month (infant under 2) # After childcare: max($333.07 - $200, 0) = $133.07 va_tanf_countable_earned_income: 133.07 # - # Childcare deduction: $200/month + # Childcare deduction: min($300, $200) = $200/month va_tanf_childcare_deduction: 200 # # Countable income: $133.07 + $0 = $133.07 @@ -306,6 +295,7 @@ spm_units: spm_unit: members: [person1, person2, person3] + childcare_expenses: 6_000 households: household: members: [person1, person2, person3] @@ -321,17 +311,14 @@ # Grant standard: $508/month va_tanf_grant_standard: 508 # - # Part-time (25 hours < 30 hours threshold) - va_tanf_is_full_time: false - # # Earned income deduction (monthly): # Gross earned: $6,000/12 = $500/month # Flat exclusion (size 3): $167/month # After flat: max($500 - $167, 0) = $333 # After 20%: $333 * 0.8 = $266.40 - # Childcare (part-time, 2 children age 2+): $120 * 2 = $240/month - # After childcare: max($266.40 - $240, 0) = $26.40 - va_tanf_countable_earned_income: 26.4 + # Childcare: min($500, $175 * 2) = $350/month + # After childcare: max($266.40 - $350, 0) = $0 + va_tanf_countable_earned_income: 0 # # Unearned income (monthly): # Child support received: $2,400/12 = $200/month @@ -339,17 +326,17 @@ # Countable child support: $200 - $100 = $100/month va_tanf_countable_unearned_income: 100 # - # Childcare deduction: $240/month - va_tanf_childcare_deduction: 240 + # Childcare deduction: min($500, $350) = $350/month + va_tanf_childcare_deduction: 350 # - # Countable income: $26.40 + $100 = $126.40 - va_tanf_countable_income: 126.4 + # Countable income: $0 + $100 = $100 + va_tanf_countable_income: 100 # # Income eligibility: Step 1: gross earned $500 + countable unearned $100 = $600 <= $1,017? YES va_tanf_income_eligibility: true # - # Benefit: $508 - $126.40 = $381.60 - va_tanf: 381.6 + # Benefit: $508 - $100 = $408 + va_tanf: 408 - name: Large family (size 8) in Group III locality period: 2021-01 @@ -387,6 +374,7 @@ spm_units: spm_unit: members: [person1, person2, person3, person4, person5, person6, person7, person8] + childcare_expenses: 18_000 households: household: members: [person1, person2, person3, person4, person5, person6, person7, person8] @@ -402,22 +390,18 @@ # Grant standard (size 8): $933/month va_tanf_grant_standard: 933 # - # Full-time (30 hours >= 30 hours threshold) - va_tanf_is_full_time: true - # # Earned income deduction (monthly): # Gross earned: $10,000/12 = $833.33/month # Flat exclusion (size 8, uses size 6+ rate): $240/month # After flat: max($833.33 - $240, 0) = $593.33 # After 20%: $593.33 * 0.8 = $474.67 - # Childcare (full-time): + # Childcare: min($1,500, $1,225) = $1,225/month # - 1 disabled adult: $175/month # - 6 children age 2+: $175 * 6 = $1,050/month - # Total: $1,225/month # After childcare: max($474.67 - $1,225, 0) = $0 va_tanf_countable_earned_income: 0 # - # Childcare deduction: $1,225/month + # Childcare deduction: min($1,500, $1,225) = $1,225/month va_tanf_childcare_deduction: 1_225 # # Countable income: $0 + $0 = $0 @@ -452,6 +436,7 @@ spm_units: spm_unit: members: [person1, person2, person3] + childcare_expenses: 6_000 households: household: members: [person1, person2, person3] @@ -467,22 +452,18 @@ # Grant standard: $417/month va_tanf_grant_standard: 417 # - # Full-time (35 hours >= 30 hours threshold) - va_tanf_is_full_time: true - # # Earned income deduction (monthly): # Gross earned: $9,000/12 = $750/month # Flat exclusion (size 3): $167/month # After flat: max($750 - $167, 0) = $583 # After 20%: $583 * 0.8 = $466.40 - # Childcare (full-time): + # Childcare: min($500, $350) = $350/month # - 1 disabled adult age 50 (2+): $175/month # - 1 child age 12 (2+): $175/month - # Total: $350/month # After childcare: max($466.40 - $350, 0) = $116.40 va_tanf_countable_earned_income: 116.4 # - # Childcare deduction: $350/month + # Childcare deduction: min($500, $350) = $350/month va_tanf_childcare_deduction: 350 # # Countable income: $116.40 + $0 = $116.40 diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.py b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.py index 186af1ca2bc..fdb9659a69b 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.py @@ -7,15 +7,14 @@ class va_tanf_eligibility(Variable): label = "VA TANF eligibility" definition_period = MONTH defined_for = StateCode.VA - reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=1" + reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/200_7-20.pdf#page=3" def formula(spm_unit, period, parameters): demographic_eligible = spm_unit("is_demographic_tanf_eligible", period) income_eligible = spm_unit("va_tanf_income_eligibility", period) # At least one person must be a citizen or qualified noncitizen - person = spm_unit.members - citizenship_check = person( - "is_citizen_or_legal_immigrant", period.this_year + has_eligible_member = ( + add(spm_unit, period, ["is_citizen_or_legal_immigrant"]) > 0 ) - has_eligible_member = spm_unit.any(citizenship_check) + # no resource test for VA TANF return demographic_eligible & income_eligible & has_eligible_member diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py index 646adcdc5d4..622e5722f98 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py @@ -8,22 +8,10 @@ class va_up_tanf_eligibility(Variable): definition_period = MONTH defined_for = StateCode.VA reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/700_07-20.pdf#page=2" - documentation = """ - Virginia TANF-UP (Unemployed Parent) Program eligibility requires: - - Two able-bodied natural or adoptive parents in the home - - At least one child in common - - Neither parent meets disability exemption criteria (Section 901.2 C. or D.) - - Per VA TANF Manual 701.1: "The TANF-UP Program is intended to provide - assistance to families with two able-bodied parents." - - Per VA TANF Manual 701.3: "The standard filing unit is required to include - two able-bodied natural or adoptive parents." - """ def formula(spm_unit, period, parameters): person = spm_unit.members head_or_spouse = person("is_tax_unit_head_or_spouse", period.this_year) disabled = person("is_disabled", period) able_bodied_adult = head_or_spouse & ~disabled - return spm_unit.sum(able_bodied_adult) >= 2 + return spm_unit.sum(able_bodied_adult) > 1 diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.py index 33dfe295689..0e78557a27e 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.py @@ -11,23 +11,16 @@ class va_tanf_childcare_deduction(Variable): reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=56" def formula(spm_unit, period, parameters): - p = parameters(period).gov.states.va.dss.tanf.income.deduction - is_full_time = spm_unit("va_tanf_is_full_time", period) + p = parameters( + period + ).gov.states.va.dss.tanf.income.deductions.dependent_care person = spm_unit.members - child = person("is_child", period) age = person("age", period.this_year) - adult = person("is_adult", period) - disabled = person("is_disabled", period) - disabled_adult = (adult) & (disabled) - care_recipient = (child) | (disabled_adult) - - full_time_care_expenses = spm_unit.sum( - p.care_expenses_full_time.calc(age) * care_recipient - ) - part_time_care_expenses = spm_unit.sum( - p.care_expenses_part_time * care_recipient - ) - - return where( - is_full_time, full_time_care_expenses, part_time_care_expenses + dependent = person("is_tax_unit_dependent", period) + disabled_adult = person("is_adult", period) & person( + "is_disabled", period ) + care_recipient = dependent | disabled_adult + childcare_expenses = spm_unit("childcare_expenses", period) + max_deduction = spm_unit.sum(p.full_time.calc(age) * care_recipient) + return min_(childcare_expenses, max_deduction) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py index 47093866c26..26fc2ff9acf 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py @@ -16,7 +16,7 @@ def formula(spm_unit, period, parameters): person("tanf_gross_earned_income", period) ) unit_size = spm_unit("spm_unit_size", period.this_year) - p = parameters(period).gov.states.va.dss.tanf.income.deduction.earned + p = parameters(period).gov.states.va.dss.tanf.income.deductions.earned # Step 1: Apply flat deduction by unit size flat_exclusion = p.flat.calc(unit_size) earnings_after_flat = max_(gross_earnings - flat_exclusion, 0) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py index 7243e52f30d..035c23f7dce 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py @@ -11,9 +11,9 @@ class va_tanf_countable_unearned_income(Variable): reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=58" def formula(spm_unit, period, parameters): - p = parameters(period).gov.states.va.dss.tanf.income.deduction.unearned + p = parameters(period).gov.states.va.dss.tanf.income.deductions gross_unearned = add(spm_unit, period, ["tanf_gross_unearned_income"]) # Apply child support disregard child_support = add(spm_unit, period, ["child_support_received"]) - child_support_disregard = min_(child_support, p.monthly_child_support) + child_support_disregard = min_(child_support, p.child_support) return max_(gross_unearned - child_support_disregard, 0) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_is_full_time.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_is_full_time.py deleted file mode 100644 index f433dac33e2..00000000000 --- a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_is_full_time.py +++ /dev/null @@ -1,19 +0,0 @@ -from policyengine_us.model_api import * - - -class va_tanf_is_full_time(Variable): - value_type = bool - entity = SPMUnit - label = "VA TANF full-time employee" - definition_period = MONTH - defined_for = StateCode.VA - reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=55" - - def formula(spm_unit, period, parameters): - p = parameters( - period - ).gov.states.va.dss.tanf.income.deduction.full_time_work_hours - person = spm_unit.members - person_work_hour = person("work_hours_per_week", period.this_year) - child = person("is_child", period) - return spm_unit.any((person_work_hour >= p) & (~child)) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py index d8aefd8654e..814322f3a54 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py @@ -27,13 +27,13 @@ def formula(spm_unit, period, parameters): up_tanf_eligibility, where( if_group3, - p.up_grant_standard.group3.max, - p.up_grant_standard.group2.max, + p.payment.up_grant_standard.group3.max, + p.payment.up_grant_standard.group2.max, ), where( if_group3, - p.grant_standard.group3.max, - p.grant_standard.group2.max, + p.payment.grant_standard.group3.max, + p.payment.grant_standard.group2.max, ), ) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py index 3e370541d99..727fcb3dce2 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py @@ -20,16 +20,16 @@ def formula(spm_unit, period, parameters): if_group3 = np.isin(county, p.localities.group3) main = where( if_group3, - p.grant_standard.group3.main[ceiling], - p.grant_standard.group2.main[ceiling], + p.payment.grant_standard.group3.main[ceiling], + p.payment.grant_standard.group2.main[ceiling], ) addition = where( if_group3, - p.grant_standard.group3.addition, - p.grant_standard.group2.addition, + p.payment.grant_standard.group3.addition, + p.payment.grant_standard.group2.addition, ) base_amount = main + additional * addition # Apply standard multiplier for increases since July 2020 base - multiplier = p.standard_multiplier - return base_amount * multiplier + + return base_amount * p.standard_multiplier diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py index b991b993e6e..9f8e8926a4e 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py @@ -31,5 +31,5 @@ def formula(spm_unit, period, parameters): base_amount = main + additional * addition # Apply standard multiplier for increases since July 2020 base - multiplier = p.standard_multiplier - return base_amount * multiplier + + return base_amount * p.standard_multiplier diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py index ad61ad78755..b3c5fbeea95 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py @@ -20,16 +20,16 @@ def formula(spm_unit, period, parameters): if_group3 = np.isin(county, p.localities.group3) main = where( if_group3, - p.up_grant_standard.group3.main[ceiling], - p.up_grant_standard.group2.main[ceiling], + p.payment.up_grant_standard.group3.main[ceiling], + p.payment.up_grant_standard.group2.main[ceiling], ) addition = where( if_group3, - p.up_grant_standard.group3.addition, - p.up_grant_standard.group2.addition, + p.payment.up_grant_standard.group3.addition, + p.payment.up_grant_standard.group2.addition, ) base_amount = main + additional * addition # Apply standard multiplier for increases since July 2020 base - multiplier = p.standard_multiplier - return base_amount * multiplier + + return base_amount * p.standard_multiplier From 47336d2d918bc69532afc565a133e78fea089115 Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 8 Jan 2026 18:24:08 -0500 Subject: [PATCH 09/11] minor --- .../gov/states/va/dss/tanf/need_standard/group2/addition.yaml | 4 ++-- .../gov/states/va/dss/tanf/need_standard/group2/main.yaml | 4 ++-- .../gov/states/va/dss/tanf/need_standard/group3/addition.yaml | 4 ++-- .../gov/states/va/dss/tanf/need_standard/group3/main.yaml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/addition.yaml index 6fcad1b873f..7765fa614d7 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/addition.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/addition.yaml @@ -1,4 +1,4 @@ -description: Virginia provides an additional income limit for each person above 10 in a family living in group II localities under the Temporary Assistance for Needy Families program. +description: Virginia provides this additional need standard amount for each person above 10 in a household living in group II localities under the Temporary Assistance for Needy Families program. values: 2020-07-01: 162 @@ -6,7 +6,7 @@ values: metadata: unit: currency-USD period: month - label: Virginia TANF additional income limit for group II localities + label: Virginia TANF additional need standard for group II localities reference: - title: Virginia TANF Manual Section 302 - Need Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=83 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml index 3ceeed83d92..b85f239470f 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml @@ -1,11 +1,11 @@ -description: Virginia limits its Temporary Assistance for Needy Families program to households living in group II localities with up to this income level. +description: Virginia provides this need standard amount for households living in group II localities under the Temporary Assistance for Needy Families program. metadata: unit: currency-USD period: month breakdown: - range(1, 11) - label: Virginia TANF income limit for group II localities + label: Virginia TANF need standard for group II localities reference: - title: Virginia TANF Manual Section 302 - Need Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=83 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/addition.yaml index ef3a1f0cf3f..7e907f4f286 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/addition.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/addition.yaml @@ -1,4 +1,4 @@ -description: Virginia provides an additional income limit for each person above 10 in a family living in group III localities under the Temporary Assistance for Needy Families program. +description: Virginia provides this additional need standard amount for each person above 10 in a household living in group III localities under the Temporary Assistance for Needy Families program. values: 2020-07-01: 162 @@ -6,7 +6,7 @@ values: metadata: unit: currency-USD period: month - label: Virginia TANF extra income limit for group III localities + label: Virginia TANF additional need standard for group III localities reference: - title: Virginia TANF Manual Section 302 - Need Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=83 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml index 81b26cf5684..49ee639870e 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml @@ -1,11 +1,11 @@ -description: Virginia limits its Temporary Assistance for Needy Families program to households living in group III localities with up to this income level. +description: Virginia provides this need standard amount for households living in group III localities under the Temporary Assistance for Needy Families program. metadata: unit: currency-USD period: month breakdown: - range(1, 11) - label: Virginia TANF income limit for group III localities + label: Virginia TANF need standard for group III localities reference: - title: Virginia TANF Manual Section 302 - Need Standards href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=83 From 01dd22d321acabebae611d7e22bdf2181ad54133 Mon Sep 17 00:00:00 2001 From: Ziming Date: Sat, 10 Jan 2026 18:16:29 -0500 Subject: [PATCH 10/11] adjustments --- changelog_entry.yaml | 2 +- .../tanf/eligibility/va_tanf_eligibility.yaml | 40 ++++++ .../va_tanf_income_eligibility.yaml | 72 ++++++++++ .../eligibility/va_up_tanf_eligibility.yaml | 117 ---------------- .../income/va_tanf_childcare_deduction.yaml | 130 ++++++++++++++++++ .../va_tanf_countable_earned_income.yaml | 121 ++++++++++++++++ .../va_tanf_countable_unearned_income.yaml | 89 ++++++++++++ .../gov/states/va/dss/tanf/integration.yaml | 118 ++++++++++++++-- .../gov/states/va/dss/tanf/va_tanf.yaml | 40 ++++++ .../va/dss/tanf/va_tanf_grant_standard.yaml | 11 ++ .../va/dss/tanf/va_tanf_need_standard.yaml | 11 ++ .../dss/tanf/va_tanf_up_grant_standard.yaml | 11 ++ .../gov/states/va/dss/tanf/va_tanf.py | 23 ++-- .../va/dss/tanf/va_tanf_grant_standard.py | 13 +- .../va/dss/tanf/va_tanf_need_standard.py | 11 +- .../va/dss/tanf/va_tanf_up_grant_standard.py | 13 +- .../demographic/person/work_hours_per_week.py | 9 -- 17 files changed, 672 insertions(+), 159 deletions(-) delete mode 100644 policyengine_us/variables/household/demographic/person/work_hours_per_week.py diff --git a/changelog_entry.yaml b/changelog_entry.yaml index 0f43791976f..70fc0cac8a8 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -1,4 +1,4 @@ - bump: minor changes: added: - - Implement Virginia TANF programs. + - Implement Virginia TANF program. diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.yaml index ce02de6a50a..23e6d6219fc 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.yaml @@ -24,3 +24,43 @@ va_tanf_income_eligibility: true output: va_tanf_eligibility: false + +- name: Case 4, no citizen or qualified noncitizen in household. + period: 2023-01 + input: + people: + person1: + is_citizen_or_legal_immigrant: false + person2: + is_citizen_or_legal_immigrant: false + spm_units: + spm_unit: + members: [person1, person2] + is_demographic_tanf_eligible: true + va_tanf_income_eligibility: true + households: + household: + members: [person1, person2] + state_code: VA + output: + va_tanf_eligibility: false + +- name: Case 5, one citizen and one non-citizen. + period: 2023-01 + input: + people: + person1: + is_citizen_or_legal_immigrant: true + person2: + is_citizen_or_legal_immigrant: false + spm_units: + spm_unit: + members: [person1, person2] + is_demographic_tanf_eligible: true + va_tanf_income_eligibility: true + households: + household: + members: [person1, person2] + state_code: VA + output: + va_tanf_eligibility: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml index 37ebd75eb8d..3700a47ad72 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml @@ -99,3 +99,75 @@ va_tanf_grant_standard: 6_000 output: va_tanf_income_eligibility: false + +- name: Case 8, gross income $1 below need standard is eligible. + period: 2023 + input: + state_code: VA + va_tanf_gross_income: 11_999 + va_tanf_need_standard: 12_000 + va_tanf_countable_income: 5_000 + va_up_tanf_eligibility: false + va_tanf_grant_standard: 6_000 + output: + # Step 1: 11,999 <= 12,000? YES + # Step 2: 5,000 <= 6,000? YES + va_tanf_income_eligibility: true + +- name: Case 9, countable income exactly at grant standard is eligible. + period: 2023 + input: + state_code: VA + va_tanf_gross_income: 10_000 + va_tanf_need_standard: 12_000 + va_tanf_countable_income: 6_000 + va_up_tanf_eligibility: false + va_tanf_grant_standard: 6_000 + output: + # Step 1: 10,000 <= 12,000? YES + # Step 2: 6,000 <= 6,000? YES (at boundary) + va_tanf_income_eligibility: true + +- name: Case 10, countable income $1 above grant standard is not eligible. + period: 2023 + input: + state_code: VA + va_tanf_gross_income: 10_000 + va_tanf_need_standard: 12_000 + va_tanf_countable_income: 6_001 + va_up_tanf_eligibility: false + va_tanf_grant_standard: 6_000 + output: + # Step 1: 10,000 <= 12,000? YES + # Step 2: 6,001 <= 6,000? NO (just above boundary) + va_tanf_income_eligibility: false + +- name: Case 11, UP eligible with countable exactly at UP grant standard. + period: 2023 + input: + state_code: VA + va_tanf_gross_income: 8_000 + va_tanf_need_standard: 12_000 + va_tanf_countable_income: 5_000 + va_up_tanf_eligibility: true + va_tanf_grant_standard: 6_000 + va_tanf_up_grant_standard: 5_000 + output: + # Step 1: 8,000 <= 12,000? YES + # Step 2 (UP): 5,000 <= 5,000? YES (at boundary) + va_tanf_income_eligibility: true + +- name: Case 12, UP eligible with countable $1 above UP grant standard. + period: 2023 + input: + state_code: VA + va_tanf_gross_income: 8_000 + va_tanf_need_standard: 12_000 + va_tanf_countable_income: 5_001 + va_up_tanf_eligibility: true + va_tanf_grant_standard: 6_000 + va_tanf_up_grant_standard: 5_000 + output: + # Step 1: 8,000 <= 12,000? YES + # Step 2 (UP): 5,001 <= 5,000? NO (just above boundary) + va_tanf_income_eligibility: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml index d1a7b95b1d7..c7f49727775 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml @@ -176,94 +176,6 @@ output: va_up_tanf_eligibility: true -############################################# -# EXPERIMENTS: How is_tax_unit_head_or_spouse is determined -############################################# - -# Experiment 1: Verify head/spouse determined by age (older = head) -- name: Experiment 1, age determines head vs spouse. - period: 2023-01 - input: - people: - person1: - age: 35 - person2: - age: 32 - person3: - age: 5 - spm_units: - spm_unit: - members: [person1, person2, person3] - tax_units: - tax_unit: - members: [person1, person2, person3] - households: - household: - members: [person1, person2, person3] - state_code: VA - output: - # person1 (35) = head, person2 (32) = spouse, person3 (5) = neither - is_tax_unit_head: [true, false, false] - is_tax_unit_spouse: [false, true, false] - is_tax_unit_head_or_spouse: [true, true, false] - va_up_tanf_eligibility: true - -# Experiment 2: What if younger person listed first? -- name: Experiment 2, younger person listed first still works. - period: 2023-01 - input: - people: - person1: - age: 28 - person2: - age: 45 - person3: - age: 10 - spm_units: - spm_unit: - members: [person1, person2, person3] - tax_units: - tax_unit: - members: [person1, person2, person3] - households: - household: - members: [person1, person2, person3] - state_code: VA - output: - # person2 (45) = head, person1 (28) = spouse (by age, not order) - is_tax_unit_head: [false, true, false] - is_tax_unit_spouse: [true, false, false] - is_tax_unit_head_or_spouse: [true, true, false] - va_up_tanf_eligibility: true - -# Experiment 3: What if both adults same age? -- name: Experiment 3, same age adults. - period: 2023-01 - input: - people: - person1: - age: 30 - person2: - age: 30 - person3: - age: 5 - spm_units: - spm_unit: - members: [person1, person2, person3] - tax_units: - tax_unit: - members: [person1, person2, person3] - households: - household: - members: [person1, person2, person3] - state_code: VA - output: - # Both age 30, first listed becomes head - is_tax_unit_head: [true, false, false] - is_tax_unit_spouse: [false, true, false] - is_tax_unit_head_or_spouse: [true, true, false] - va_up_tanf_eligibility: true - # Experiment 4: Only children in household (edge case) - name: Experiment 4, only children - no head or spouse. period: 2023-01 @@ -346,32 +258,3 @@ is_tax_unit_head_or_spouse: [true, true, false] va_up_tanf_eligibility: true -# Experiment 7: Three adults in household -- name: Experiment 7, three adults - only head and spouse count. - period: 2023-01 - input: - people: - person1: - age: 50 - person2: - age: 48 - person3: - age: 25 - person4: - age: 5 - spm_units: - spm_unit: - members: [person1, person2, person3, person4] - tax_units: - tax_unit: - members: [person1, person2, person3, person4] - households: - household: - members: [person1, person2, person3, person4] - state_code: VA - output: - # person1 (50) = head, person2 (48) = spouse, person3 (25) = dependent - is_tax_unit_head: [true, false, false, false] - is_tax_unit_spouse: [false, true, false, false] - is_tax_unit_head_or_spouse: [true, true, false, false] - va_up_tanf_eligibility: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.yaml index 1e4119a5afa..0102cc67fe3 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.yaml @@ -54,3 +54,133 @@ # Actual expenses: $4,800/year # Deduction: min($4,800, $6,600) = $4,800 va_tanf_childcare_deduction: 4_800 + +- name: Case 3, zero childcare expenses returns zero. + period: 2023 + input: + people: + person1: + is_tax_unit_dependent: false + age: 30 + person2: + is_tax_unit_dependent: true + age: 5 + spm_units: + spm_unit: + members: [person1, person2] + childcare_expenses: 0 + households: + household: + members: [person1, person2] + state_code: VA + output: + # Max deduction: $175/month = $2,100/year + # Actual expenses: $0 + # Deduction: min($0, $2,100) = $0 + va_tanf_childcare_deduction: 0 + +- name: Case 4, child exactly age 2 gets $175 rate. + period: 2023 + input: + people: + person1: + is_tax_unit_dependent: false + age: 28 + person2: + is_tax_unit_dependent: true + age: 2 + spm_units: + spm_unit: + members: [person1, person2] + childcare_expenses: 3_000 + households: + household: + members: [person1, person2] + state_code: VA + output: + # Max deduction: $175/month (child age 2) = $2,100/year + # Actual expenses: $3,000/year + # Deduction: min($3,000, $2,100) = $2,100 + va_tanf_childcare_deduction: 2_100 + +- name: Case 5, no care recipients returns zero. + period: 2023 + input: + people: + person1: + is_tax_unit_dependent: false + is_adult: true + is_disabled: false + age: 30 + person2: + is_tax_unit_dependent: false + is_adult: true + is_disabled: false + age: 28 + spm_units: + spm_unit: + members: [person1, person2] + childcare_expenses: 3_000 + households: + household: + members: [person1, person2] + state_code: VA + output: + # No dependents, no disabled adults + # Max deduction = $0/year + # Deduction: min($3,000, $0) = $0 + va_tanf_childcare_deduction: 0 + +- name: Case 6, multiple infants under age 2. + period: 2023 + input: + people: + person1: + is_tax_unit_dependent: false + age: 30 + person2: + is_tax_unit_dependent: true + age: 0 + person3: + is_tax_unit_dependent: true + age: 1 + spm_units: + spm_unit: + members: [person1, person2, person3] + childcare_expenses: 6_000 + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + # Max deduction: 2 infants * $200/month = $400/month = $4,800/year + # Actual expenses: $6,000/year + # Deduction: min($6,000, $4,800) = $4,800 + va_tanf_childcare_deduction: 4_800 + +- name: Case 7, mixed ages one infant and one toddler. + period: 2023 + input: + people: + person1: + is_tax_unit_dependent: false + age: 28 + person2: + is_tax_unit_dependent: true + age: 1 + person3: + is_tax_unit_dependent: true + age: 3 + spm_units: + spm_unit: + members: [person1, person2, person3] + childcare_expenses: 5_000 + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + # Max deduction: $200 (infant under 2) + $175 (child 3+) = $375/month = $4,500/year + # Actual expenses: $5,000/year + # Deduction: min($5,000, $4,500) = $4,500 + va_tanf_childcare_deduction: 4_500 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml index 81e9019464a..aa1c5e604ea 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml @@ -84,3 +84,124 @@ state_code: VA output: va_tanf_countable_earned_income: 4_800 + +- name: Case 5, size 4 uses $178 flat exclusion. + # Flat exclusion for size 4 = $178 * 12 = $2,136/year + # ($5,136 - $2,136) * 0.8 = $3,000 * 0.8 = $2,400 + period: 2023 + input: + people: + person1: + tanf_gross_earned_income: 5_136 + person2: + tanf_gross_earned_income: 0 + person3: + tanf_gross_earned_income: 0 + person4: + tanf_gross_earned_income: 0 + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + households: + household: + members: [person1, person2, person3, person4] + state_code: VA + output: + va_tanf_countable_earned_income: 2_400 + +- name: Case 6, size 5 uses $209 flat exclusion. + # Flat exclusion for size 5 = $209 * 12 = $2,508/year + # ($5,508 - $2,508) * 0.8 = $3,000 * 0.8 = $2,400 + period: 2023 + input: + people: + person1: + tanf_gross_earned_income: 5_508 + person2: + tanf_gross_earned_income: 0 + person3: + tanf_gross_earned_income: 0 + person4: + tanf_gross_earned_income: 0 + person5: + tanf_gross_earned_income: 0 + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5] + households: + household: + members: [person1, person2, person3, person4, person5] + state_code: VA + output: + va_tanf_countable_earned_income: 2_400 + +- name: Case 7, earned income exactly at flat exclusion returns zero. + # Flat exclusion for size 1 = $167 * 12 = $2,004/year + # ($2,004 - $2,004) * 0.8 = 0 + period: 2023 + input: + people: + person1: + tanf_gross_earned_income: 2_004 + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: VA + output: + va_tanf_countable_earned_income: 0 + +- name: Case 8, childcare exceeds earnings after 20% disregard. + # Flat exclusion for size 2 = $167 * 12 = $2,004/year + # Gross: $3,004 + # After flat: $3,004 - $2,004 = $1,000 + # After 20%: $1,000 * 0.8 = $800/year + # Childcare: $200/month (infant) = $2,400/year + # max_($800 - $2,400, 0) = $0 + period: 2023 + input: + people: + person1: + tanf_gross_earned_income: 3_004 + is_tax_unit_dependent: false + age: 30 + person2: + tanf_gross_earned_income: 0 + is_tax_unit_dependent: true + age: 1 + spm_units: + spm_unit: + members: [person1, person2] + childcare_expenses: 2_400 + households: + household: + members: [person1, person2] + state_code: VA + output: + va_tanf_countable_earned_income: 0 + +- name: Case 9, multiple earners in unit. + # Flat exclusion for size 3 = $167 * 12 = $2,004/year + # Total gross: $6,000 + $4,000 = $10,000 + # After flat: $10,000 - $2,004 = $7,996 + # After 20%: $7,996 * 0.8 = $6,396.80 + period: 2023 + input: + people: + person1: + tanf_gross_earned_income: 6_000 + person2: + tanf_gross_earned_income: 4_000 + person3: + tanf_gross_earned_income: 0 + spm_units: + spm_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: VA + output: + va_tanf_countable_earned_income: 6_396.8 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml index ff3ba171858..341571b4053 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml @@ -98,3 +98,92 @@ # Countable monthly: 270.83 - 100 = 170.83 # Annual: 170.83 * 12 = 2,050 va_tanf_countable_unearned_income: 2_050 + +- name: Case 5, child support exactly at $100/month threshold. + period: 2023 + input: + state_code: VA + veterans_benefits: 0 + rental_income: 0 + alimony_income: 0 + dividend_income: 0 + interest_income: 0 + pension_income: 0 + unemployment_compensation: 0 + gi_cash_assistance: 0 + social_security: 0 + ssi: 0 + child_support_received: 1_200 + output: + # Gross unearned = $1,200/year = $100/month + # Child support: $100/month + # Disregard: min($100, $100) = $100 (full disregard) + # Countable: $100 - $100 = $0 + va_tanf_countable_unearned_income: 0 + +- name: Case 6, child support $1 below $100/month. + period: 2023 + input: + state_code: VA + veterans_benefits: 0 + rental_income: 0 + alimony_income: 0 + dividend_income: 0 + interest_income: 0 + pension_income: 0 + unemployment_compensation: 0 + gi_cash_assistance: 0 + social_security: 0 + ssi: 0 + child_support_received: 1_188 + output: + # Gross unearned = $1,188/year = $99/month + # Child support: $99/month + # Disregard: min($99, $100) = $99 (below cap, full amount) + # Countable: $99 - $99 = $0 + va_tanf_countable_unearned_income: 0 + +- name: Case 7, child support $1 above $100/month. + period: 2023 + input: + state_code: VA + veterans_benefits: 0 + rental_income: 0 + alimony_income: 0 + dividend_income: 0 + interest_income: 0 + pension_income: 0 + unemployment_compensation: 0 + gi_cash_assistance: 0 + social_security: 0 + ssi: 0 + child_support_received: 1_212 + output: + # Gross unearned = $1,212/year = $101/month + # Child support: $101/month + # Disregard: min($101, $100) = $100 (capped) + # Countable: $101 - $100 = $1/month = $12/year + va_tanf_countable_unearned_income: 12 + +- name: Case 8, child support with other unearned income. + period: 2023 + input: + state_code: VA + veterans_benefits: 0 + rental_income: 0 + alimony_income: 0 + dividend_income: 0 + interest_income: 0 + pension_income: 0 + unemployment_compensation: 0 + gi_cash_assistance: 0 + social_security: 3_600 + ssi: 0 + child_support_received: 2_400 + output: + # Gross unearned = $3,600 + $2,400 = $6,000/year = $500/month + # Child support: $2,400/12 = $200/month + # Disregard: min($200, $100) = $100 (capped) + # Countable monthly: $500 - $100 = $400 + # Annual: $400 * 12 = $4,800 + va_tanf_countable_unearned_income: 4_800 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml index d7d29da22dc..99dc1f05524 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml @@ -10,7 +10,6 @@ is_mother: true age: 30 employment_income_before_lsr: 12_000 - work_hours_per_week: 40 person2: is_child: true age: 5 @@ -115,12 +114,10 @@ person1: age: 35 employment_income_before_lsr: 0 - work_hours_per_week: 0 is_disabled: false person2: age: 32 employment_income_before_lsr: 0 - work_hours_per_week: 0 is_disabled: false person3: age: 8 @@ -176,7 +173,6 @@ is_mother: true age: 35 employment_income_before_lsr: 30_000 - work_hours_per_week: 40 person2: is_child: true age: 10 @@ -230,7 +226,6 @@ is_mother: true age: 25 employment_income_before_lsr: 7_000 - work_hours_per_week: 35 person2: is_child: true age: 1 @@ -284,7 +279,6 @@ is_mother: true age: 32 employment_income_before_lsr: 6_000 - work_hours_per_week: 25 child_support_received: 2_400 person2: is_child: true @@ -346,12 +340,10 @@ is_mother: true age: 38 employment_income_before_lsr: 10_000 - work_hours_per_week: 30 person2: is_father: true age: 40 employment_income_before_lsr: 0 - work_hours_per_week: 0 is_disabled: true person3: is_child: true @@ -423,12 +415,10 @@ is_mother: true age: 45 employment_income_before_lsr: 9_000 - work_hours_per_week: 35 person2: is_father: true age: 50 employment_income_before_lsr: 0 - work_hours_per_week: 0 is_disabled: true person3: is_child: true @@ -474,3 +464,111 @@ # # Benefit: $417 - $116.40 = $300.60 va_tanf: 300.6 + +- name: Family with only unearned income (child support) + period: 2021-01 + input: + people: + person1: + is_mother: true + age: 35 + employment_income_before_lsr: 0 + child_support_received: 1_800 + person2: + is_child: true + age: 8 + spm_units: + spm_unit: + members: [person1, person2] + childcare_expenses: 0 + households: + household: + members: [person1, person2] + state_code: VA + county_str: ARLINGTON_COUNTY_VA + output: + # Family size: 2 + # Group III locality (Arlington County) + # + # Need standard: $842/month + va_tanf_need_standard: 842 + # + # Grant standard: $422/month + va_tanf_grant_standard: 422 + # + # No earned income + va_tanf_countable_earned_income: 0 + # + # Unearned income (monthly): + # Child support: $1,800/12 = $150/month + # Disregard: min($150, $100) = $100 + # Countable: $150 - $100 = $50/month + va_tanf_countable_unearned_income: 50 + # + # Childcare deduction: $0 (no expenses) + va_tanf_childcare_deduction: 0 + # + # Countable income: $0 + $50 = $50 + va_tanf_countable_income: 50 + # + # Income eligibility: + # Step 1: gross $150 <= need $842? YES + # Step 2: countable $50 <= grant $422? YES + va_tanf_income_eligibility: true + # + # Benefit: $422 - $50 = $372 + va_tanf: 372 + +- name: Gross income exactly at need standard boundary + absolute_error_margin: 0.01 + period: 2021-01 + input: + people: + person1: + is_mother: true + age: 30 + employment_income_before_lsr: 10_104 + person2: + is_child: true + age: 5 + spm_units: + spm_unit: + members: [person1, person2] + childcare_expenses: 2_100 + households: + household: + members: [person1, person2] + state_code: VA + county_str: ARLINGTON_COUNTY_VA + output: + # Family size: 2 + # Group III locality (Arlington County) + # + # Need standard: $842/month + va_tanf_need_standard: 842 + # + # Grant standard: $422/month + va_tanf_grant_standard: 422 + # + # Earned income deduction (monthly): + # Gross earned: $10,104/12 = $842/month (exactly at need standard) + # Flat exclusion (size 2): $167/month + # After flat: $842 - $167 = $675 + # After 20%: $675 * 0.8 = $540 + # Childcare: min($175, $175) = $175/month + # After childcare: max($540 - $175, 0) = $365 + va_tanf_countable_earned_income: 365 + # + # Childcare deduction: $175/month + va_tanf_childcare_deduction: 175 + # + # Countable income: $365 + $0 = $365 + va_tanf_countable_income: 365 + # + # Income eligibility: + # Step 1: gross $842 <= need $842? YES (at boundary) + # Step 2: countable $365 <= grant $422? YES + va_tanf_income_eligibility: true + # + # Benefit: $422 - $365 = $57 + va_tanf: 57 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf.yaml index cb8c3c766c3..18cfd74e947 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf.yaml @@ -122,3 +122,43 @@ output: # Grant standard $2,119 - countable income $2,000 = $119 payment va_tanf: 119 + +- name: Case 11, payment exactly at Group III maximum. + period: 2023 + input: + va_tanf_eligibility: true + va_up_tanf_eligibility: false + va_tanf_grant_standard: 9_940 + va_tanf_up_grant_standard: 0 + va_tanf_countable_income: 1_000 + county_str: ARLINGTON_COUNTY_VA + output: + # Grant standard $9,940 - countable income $1,000 = $8,940 (exactly at max) + # Max Group III: $745/month = $8,940/year + va_tanf: 8_940 + +- name: Case 12, zero countable income gets full grant below max. + period: 2023 + input: + va_tanf_eligibility: true + va_up_tanf_eligibility: false + va_tanf_grant_standard: 6_000 + va_tanf_up_grant_standard: 0 + va_tanf_countable_income: 0 + county_str: ARLINGTON_COUNTY_VA + output: + # Grant standard $6,000 - countable income $0 = $6,000 payment + va_tanf: 6_000 + +- name: Case 13, grant equals countable income. + period: 2023 + input: + va_tanf_eligibility: true + va_up_tanf_eligibility: false + va_tanf_grant_standard: 4_000 + va_tanf_up_grant_standard: 0 + va_tanf_countable_income: 4_000 + county_str: ARLINGTON_COUNTY_VA + output: + # Grant standard $4,000 - countable income $4,000 = $0 payment + va_tanf: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_grant_standard.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_grant_standard.yaml index ffeb1fb3139..6886f7d2748 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_grant_standard.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_grant_standard.yaml @@ -94,3 +94,14 @@ county_str: ARLINGTON_COUNTY_VA output: va_tanf_grant_standard: 364.98 + +# Test multiplier effect for 2018 period (multiplier = 0.8282) +- name: Grant standard in 2018-01 for size 3 in Group III locality. + # Base $508 * 0.8282 = $420.726/month + period: 2018-01 + input: + state_code: VA + spm_unit_size: 3 + county_str: ARLINGTON_COUNTY_VA + output: + va_tanf_grant_standard: 420.726 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_need_standard.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_need_standard.yaml index ea49992689a..10a74a082d3 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_need_standard.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_need_standard.yaml @@ -74,3 +74,14 @@ county_str: ARLINGTON_COUNTY_VA output: va_tanf_need_standard: 728.805 + +# Test multiplier effect for 2018 period (multiplier = 0.8282) +- name: Need standard in 2018-01 for size 3 in Group III locality. + # Base $1,017 * 0.8282 = $842.2794/month + period: 2018-01 + input: + state_code: VA + spm_unit_size: 3 + county_str: ARLINGTON_COUNTY_VA + output: + va_tanf_need_standard: 842.2794 diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_up_grant_standard.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_up_grant_standard.yaml index f14a9cb6535..e390ea0f53a 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_up_grant_standard.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_up_grant_standard.yaml @@ -74,3 +74,14 @@ county_str: ARLINGTON_COUNTY_VA output: va_tanf_up_grant_standard: 317.625 + +# Test multiplier effect for 2018 period (multiplier = 0.8282) +- name: UP grant standard in 2018-01 for size 3 in Group III locality. + # Base $442 * 0.8282 = $366.0644/month + period: 2018-01 + input: + state_code: VA + spm_unit_size: 3 + county_str: ARLINGTON_COUNTY_VA + output: + va_tanf_up_grant_standard: 366.0644 diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py index 814322f3a54..57de604f939 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py @@ -21,20 +21,23 @@ def formula(spm_unit, period, parameters): # compute the maximum payment p = parameters(period).gov.states.va.dss.tanf + p_payment = parameters.gov.states.va.dss.tanf.payment(f"2020-10-01") county = spm_unit.household("county_str", period) if_group3 = np.isin(county, p.localities.group3) + up_tanf_maximum_payment = where( + if_group3, + p_payment.up_grant_standard.group3.max, + p_payment.up_grant_standard.group2.max, + ) + tanf_maximum_payment = where( + if_group3, + p_payment.grant_standard.group3.max, + p_payment.grant_standard.group2.max, + ) maximum = where( up_tanf_eligibility, - where( - if_group3, - p.payment.up_grant_standard.group3.max, - p.payment.up_grant_standard.group2.max, - ), - where( - if_group3, - p.payment.grant_standard.group3.max, - p.payment.grant_standard.group2.max, - ), + up_tanf_maximum_payment, + tanf_maximum_payment, ) return min_(payment, maximum) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py index 727fcb3dce2..7660d33ffba 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py @@ -13,6 +13,11 @@ class va_tanf_grant_standard(Variable): def formula(spm_unit, period, parameters): unit_size = spm_unit("spm_unit_size", period.this_year) p = parameters(period).gov.states.va.dss.tanf + p_grant_standard = ( + parameters.gov.states.va.dss.tanf.payment.grant_standard( + f"2020-10-01" + ) + ) ceiling = min_(unit_size, p.max_unit_size) additional = unit_size - ceiling @@ -20,13 +25,13 @@ def formula(spm_unit, period, parameters): if_group3 = np.isin(county, p.localities.group3) main = where( if_group3, - p.payment.grant_standard.group3.main[ceiling], - p.payment.grant_standard.group2.main[ceiling], + p_grant_standard.group3.main[ceiling], + p_grant_standard.group2.main[ceiling], ) addition = where( if_group3, - p.payment.grant_standard.group3.addition, - p.payment.grant_standard.group2.addition, + p_grant_standard.group3.addition, + p_grant_standard.group2.addition, ) base_amount = main + additional * addition diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py index 9f8e8926a4e..90632062f98 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py @@ -13,6 +13,9 @@ class va_tanf_need_standard(Variable): def formula(spm_unit, period, parameters): unit_size = spm_unit("spm_unit_size", period.this_year) p = parameters(period).gov.states.va.dss.tanf + p_need_standard = parameters.gov.states.va.dss.tanf.need_standard( + f"2020-10-01" + ) ceiling = min_(unit_size, p.max_unit_size) additional = unit_size - ceiling @@ -20,13 +23,13 @@ def formula(spm_unit, period, parameters): if_group3 = np.isin(county, p.localities.group3) main = where( if_group3, - p.need_standard.group3.main[ceiling], - p.need_standard.group2.main[ceiling], + p_need_standard.group3.main[ceiling], + p_need_standard.group2.main[ceiling], ) addition = where( if_group3, - p.need_standard.group3.addition, - p.need_standard.group2.addition, + p_need_standard.group3.addition, + p_need_standard.group2.addition, ) base_amount = main + additional * addition diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py index b3c5fbeea95..9571e6eeec6 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py @@ -13,6 +13,11 @@ class va_tanf_up_grant_standard(Variable): def formula(spm_unit, period, parameters): unit_size = spm_unit("spm_unit_size", period.this_year) p = parameters(period).gov.states.va.dss.tanf + p_up_grant_standard = ( + parameters.gov.states.va.dss.tanf.payment.up_grant_standard( + f"2020-10-01" + ) + ) ceiling = min_(unit_size, p.max_unit_size) additional = unit_size - ceiling @@ -20,13 +25,13 @@ def formula(spm_unit, period, parameters): if_group3 = np.isin(county, p.localities.group3) main = where( if_group3, - p.payment.up_grant_standard.group3.main[ceiling], - p.payment.up_grant_standard.group2.main[ceiling], + p_up_grant_standard.group3.main[ceiling], + p_up_grant_standard.group2.main[ceiling], ) addition = where( if_group3, - p.payment.up_grant_standard.group3.addition, - p.payment.up_grant_standard.group2.addition, + p_up_grant_standard.group3.addition, + p_up_grant_standard.group2.addition, ) base_amount = main + additional * addition diff --git a/policyengine_us/variables/household/demographic/person/work_hours_per_week.py b/policyengine_us/variables/household/demographic/person/work_hours_per_week.py deleted file mode 100644 index 53dcc9f96f7..00000000000 --- a/policyengine_us/variables/household/demographic/person/work_hours_per_week.py +++ /dev/null @@ -1,9 +0,0 @@ -from policyengine_us.model_api import * - - -class work_hours_per_week(Variable): - value_type = float - entity = Person - label = "Work hours per week" - definition_period = YEAR - unit = "hour" From 8a52ec883236f05d0c085c52ac92368eac6e4f5e Mon Sep 17 00:00:00 2001 From: Ziming Date: Sat, 10 Jan 2026 18:36:06 -0500 Subject: [PATCH 11/11] minor --- .../va/dss/tanf/standard_multiplier.yaml | 4 +- .../gov/states/va/dss/tanf/integration.yaml | 149 +++++++++++++++++- .../eligibility/va_up_tanf_eligibility.py | 2 +- .../income/va_tanf_childcare_deduction.py | 2 +- .../income/va_tanf_countable_earned_income.py | 5 +- .../gov/states/va/dss/tanf/va_tanf.py | 1 + .../va/dss/tanf/va_tanf_grant_standard.py | 1 + .../va/dss/tanf/va_tanf_need_standard.py | 1 + .../va/dss/tanf/va_tanf_up_grant_standard.py | 1 + 9 files changed, 157 insertions(+), 9 deletions(-) diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/standard_multiplier.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/standard_multiplier.yaml index f16821589fa..d3c0cb7a957 100644 --- a/policyengine_us/parameters/gov/states/va/dss/tanf/standard_multiplier.yaml +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/standard_multiplier.yaml @@ -7,8 +7,8 @@ metadata: reference: - title: Virginia TANF Interim Working Group Report - January 2023 href: https://rga.lis.virginia.gov/Published/2023/RD81/PDF#page=4 - - title: SB30 Budget Amendment 340#1s - 2022 TANF Standards Increase - href: https://budget.lis.virginia.gov/amendment/2022/1/SB30/Introduced/CA/340/1s/ + - title: HB30 Conference Report 341#2c - 2022 TANF Standards Increase + href: https://budget.lis.virginia.gov/amendment/2022/2/HB30/Introduced/CR/341/2c/ - title: SB800 Budget Amendment 341#1s - 2023 TANF Standards Increase href: https://budget.lis.virginia.gov/amendment/2023/1/SB800/Introduced/FA/341/1s/ diff --git a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml index 99dc1f05524..a3db372be6b 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml @@ -326,7 +326,7 @@ # Countable income: $0 + $100 = $100 va_tanf_countable_income: 100 # - # Income eligibility: Step 1: gross earned $500 + countable unearned $100 = $600 <= $1,017? YES + # Income eligibility: Step 1: gross earned $500 + gross unearned $200 = $700 <= $1,017? YES va_tanf_income_eligibility: true # # Benefit: $508 - $100 = $408 @@ -572,3 +572,150 @@ # # Benefit: $422 - $365 = $57 va_tanf: 57 + +- name: TANF-UP scenario in Group II locality + period: 2021-01 + input: + people: + person1: + age: 30 + employment_income_before_lsr: 0 + is_disabled: false + person2: + age: 28 + employment_income_before_lsr: 0 + is_disabled: false + person3: + is_child: true + age: 5 + spm_units: + spm_unit: + members: [person1, person2, person3] + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: VA + county_str: PITTSYLVANIA_COUNTY_VA + output: + # Family size: 3 + # Group II locality (Pittsylvania County) + # TANF-UP eligible: two able-bodied adults + va_up_tanf_eligibility: true + # + # Need standard (Group II, size 3): $836/month + va_tanf_need_standard: 836 + # + # UP Grant standard (Group II, size 3): $363/month + va_tanf_up_grant_standard: 363 + # + # No income + va_tanf_countable_income: 0 + # + # Income eligibility: $0 <= $836? YES + va_tanf_income_eligibility: true + # + # Benefit (TANF-UP): $363 - $0 = $363 + va_tanf: 363 + +- name: Single person household (pregnant woman) + period: 2021-01 + input: + people: + person1: + is_mother: true + age: 22 + employment_income_before_lsr: 3_600 + is_pregnant: true + spm_units: + spm_unit: + members: [person1] + households: + household: + members: [person1] + state_code: VA + county_str: ARLINGTON_COUNTY_VA + output: + # Family size: 1 + # Group III locality (Arlington County) + # + # Need standard (size 1): $631/month + va_tanf_need_standard: 631 + # + # Grant standard (size 1): $316/month + va_tanf_grant_standard: 316 + # + # Earned income deduction (monthly): + # Gross earned: $3,600/12 = $300/month + # Flat exclusion (size 1): $167/month + # After flat: max($300 - $167, 0) = $133 + # After 20%: $133 * 0.8 = $106.40 + va_tanf_countable_earned_income: 106.4 + # + # Countable income: $106.40 + va_tanf_countable_income: 106.4 + # + # Income eligibility: + # Step 1: gross $300 <= need $631? YES + # Step 2: countable $106.40 <= grant $316? YES + va_tanf_income_eligibility: true + # + # Benefit: $316 - $106.40 = $209.60 + va_tanf: 209.6 + +- name: Step 1 passes but Step 2 fails (high unearned income) + period: 2021-01 + input: + people: + person1: + is_mother: true + age: 30 + employment_income_before_lsr: 4_800 + child_support_received: 4_800 + person2: + is_child: true + age: 6 + spm_units: + spm_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + county_str: ARLINGTON_COUNTY_VA + output: + # Family size: 2 + # Group III locality (Arlington County) + # + # Need standard: $842/month + va_tanf_need_standard: 842 + # + # Grant standard: $422/month + va_tanf_grant_standard: 422 + # + # Gross income (monthly): + # Gross earned: $4,800/12 = $400/month + # Gross unearned: $4,800/12 = $400/month + # Total gross: $800/month + # + # Step 1: $800 <= $842? YES (passes) + # + # Countable earned: + # After flat ($167): max($400 - $167, 0) = $233 + # After 20%: $233 * 0.8 = $186.40 + va_tanf_countable_earned_income: 186.4 + # + # Countable unearned: + # Child support: $400 - $100 disregard = $300 + va_tanf_countable_unearned_income: 300 + # + # Total countable: $186.40 + $300 = $486.40 + va_tanf_countable_income: 486.4 + # + # Step 2: $486.40 <= $422? NO (fails) + va_tanf_income_eligibility: false + # + # Not eligible + va_tanf: 0 diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py index 622e5722f98..c0557742ab1 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py @@ -12,6 +12,6 @@ class va_up_tanf_eligibility(Variable): def formula(spm_unit, period, parameters): person = spm_unit.members head_or_spouse = person("is_tax_unit_head_or_spouse", period.this_year) - disabled = person("is_disabled", period) + disabled = person("is_disabled", period.this_year) able_bodied_adult = head_or_spouse & ~disabled return spm_unit.sum(able_bodied_adult) > 1 diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.py index 0e78557a27e..ae53f5145bf 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.py @@ -18,7 +18,7 @@ def formula(spm_unit, period, parameters): age = person("age", period.this_year) dependent = person("is_tax_unit_dependent", period) disabled_adult = person("is_adult", period) & person( - "is_disabled", period + "is_disabled", period.this_year ) care_recipient = dependent | disabled_adult childcare_expenses = spm_unit("childcare_expenses", period) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py index 26fc2ff9acf..f987520723b 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py @@ -11,10 +11,7 @@ class va_tanf_countable_earned_income(Variable): reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=55" def formula(spm_unit, period, parameters): - person = spm_unit.members - gross_earnings = spm_unit.sum( - person("tanf_gross_earned_income", period) - ) + gross_earnings = add(spm_unit, period, ["tanf_gross_earned_income"]) unit_size = spm_unit("spm_unit_size", period.this_year) p = parameters(period).gov.states.va.dss.tanf.income.deductions.earned # Step 1: Apply flat deduction by unit size diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py index 57de604f939..faa0de3c994 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py @@ -21,6 +21,7 @@ def formula(spm_unit, period, parameters): # compute the maximum payment p = parameters(period).gov.states.va.dss.tanf + # Access July 2020 base values p_payment = parameters.gov.states.va.dss.tanf.payment(f"2020-10-01") county = spm_unit.household("county_str", period) if_group3 = np.isin(county, p.localities.group3) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py index 7660d33ffba..efcc800623a 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py @@ -13,6 +13,7 @@ class va_tanf_grant_standard(Variable): def formula(spm_unit, period, parameters): unit_size = spm_unit("spm_unit_size", period.this_year) p = parameters(period).gov.states.va.dss.tanf + # Access July 2020 base values p_grant_standard = ( parameters.gov.states.va.dss.tanf.payment.grant_standard( f"2020-10-01" diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py index 90632062f98..557c9ed181a 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py @@ -13,6 +13,7 @@ class va_tanf_need_standard(Variable): def formula(spm_unit, period, parameters): unit_size = spm_unit("spm_unit_size", period.this_year) p = parameters(period).gov.states.va.dss.tanf + # Access July 2020 base values p_need_standard = parameters.gov.states.va.dss.tanf.need_standard( f"2020-10-01" ) diff --git a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py index 9571e6eeec6..ecaed44efc4 100644 --- a/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py @@ -13,6 +13,7 @@ class va_tanf_up_grant_standard(Variable): def formula(spm_unit, period, parameters): unit_size = spm_unit("spm_unit_size", period.this_year) p = parameters(period).gov.states.va.dss.tanf + # Access July 2020 base values p_up_grant_standard = ( parameters.gov.states.va.dss.tanf.payment.up_grant_standard( f"2020-10-01"