diff --git a/changelog_entry.yaml b/changelog_entry.yaml index f8f61c000cc..70fc0cac8a8 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -1,4 +1,4 @@ - bump: minor changes: added: - - Add Florida Temporary Cash Assistance (TCA) program. + - Implement Virginia TANF program. diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/child_support.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/child_support.yaml new file mode 100644 index 00000000000..52b98085894 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/child_support.yaml @@ -0,0 +1,15 @@ +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 + 2016-07-01: 100 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF child support exclusion + reference: + - 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/deductions/dependent_care/full_time.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/dependent_care/full_time.yaml new file mode 100644 index 00000000000..a517a27a6da --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/dependent_care/full_time.yaml @@ -0,0 +1,25 @@ +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 + 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 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. +# $200 per month, for care of each child under 2. + +brackets: + - amount: + 2016-01-01: 200 + threshold: + 2016-01-01: 0 + - amount: + 2016-01-01: 175 + threshold: + 2016-01-01: 2 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/earned/flat.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/earned/flat.yaml new file mode 100644 index 00000000000..87112b53056 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/earned/flat.yaml @@ -0,0 +1,30 @@ +description: Virginia excludes this amount of earnings from countable income under the Temporary Assistance for Needy Families program. + +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 Manual Section 302 - Earned Income Deductions + href: https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=29 + +brackets: + - amount: + 2016-01-01: 167 + threshold: + 2016-01-01: 1 + - amount: + 2016-01-01: 178 + threshold: + 2016-01-01: 4 + - amount: + 2016-01-01: 209 + threshold: + 2016-01-01: 5 + - amount: + 2016-01-01: 240 + threshold: + 2016-01-01: 6 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/earned/percentage.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/earned/percentage.yaml new file mode 100644 index 00000000000..3e7e2410c45 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/income/deductions/earned/percentage.yaml @@ -0,0 +1,13 @@ +description: Virginia excludes this share of earnings from countable income under the Temporary Assistance for Needy Families program, after a flat deduction. + +values: + 2016-01-01: 0.2 + +metadata: + unit: /1 + period: month + label: Virginia TANF earnings exclusion percent + reference: + - 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/localities/group3.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml new file mode 100644 index 00000000000..f8465f28031 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/localities/group3.yaml @@ -0,0 +1,38 @@ +description: Virginia lists these localities as group III under the Temporary Assistance for Needy Families program. +values: + 2016-01-01: + # Counties + - 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 + # 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 localities + reference: + - 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 new file mode 100644 index 00000000000..652f6e06289 --- /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 grant and need standards under the Temporary Assistance for Needy Families program. + +values: + 2016-01-01: 10 + +metadata: + unit: person + period: year + label: Virginia TANF maximum unit size for standards lookup + reference: + - 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 new file mode 100644 index 00000000000..7765fa614d7 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/addition.yaml @@ -0,0 +1,12 @@ +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 + +metadata: + unit: currency-USD + period: month + 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 new file mode 100644 index 00000000000..b85f239470f --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group2/main.yaml @@ -0,0 +1,32 @@ +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 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 + +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 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..7e907f4f286 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/addition.yaml @@ -0,0 +1,12 @@ +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 + +metadata: + unit: currency-USD + period: month + 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 new file mode 100644 index 00000000000..49ee639870e --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/need_standard/group3/main.yaml @@ -0,0 +1,32 @@ +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 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 + +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 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group2/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group2/addition.yaml new file mode 100644 index 00000000000..02b6653eb6d --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/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 under the Temporary Assistance for Needy Families program. + +values: + 2020-07-01: 81 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF extra assistance for group II localities + reference: + - 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/payment/grant_standard/group2/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group2/main.yaml new file mode 100644 index 00000000000..c4168ba8322 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/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 Temporary Assistance for Needy Families program. + +metadata: + unit: currency-USD + period: month + breakdown: + - range(1, 11) + label: Virginia TANF assistance for group II localities + reference: + - 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: + 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/payment/grant_standard/group2/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group2/max.yaml new file mode 100644 index 00000000000..97d3dbdf1fc --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group2/max.yaml @@ -0,0 +1,12 @@ +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 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF maximum assistance for group II localities + reference: + - 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/payment/grant_standard/group3/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group3/addition.yaml new file mode 100644 index 00000000000..111b5645c76 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/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 under the Temporary Assistance for Needy Families program. + +values: + 2020-07-01: 81 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF extra assistance for group III localities + reference: + - 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/payment/grant_standard/group3/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group3/main.yaml new file mode 100644 index 00000000000..9d064d9b263 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group3/main.yaml @@ -0,0 +1,32 @@ +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 + period: month + breakdown: + - range(1, 11) + label: Virginia TANF assistance for group III localities + reference: + - 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: + 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 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group3/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group3/max.yaml new file mode 100644 index 00000000000..a041749e105 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/grant_standard/group3/max.yaml @@ -0,0 +1,12 @@ +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 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF maximum assistance for group III localities + reference: + - 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/payment/up_grant_standard/group2/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group2/addition.yaml new file mode 100644 index 00000000000..75a23693108 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/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 under the Temporary Assistance for Needy Families Unemployed Parent program. + +values: + 2020-07-01: 71 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF-UP group II localities additional assistance + reference: + - 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/payment/up_grant_standard/group2/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group2/main.yaml new file mode 100644 index 00000000000..83492bf1967 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/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 Temporary Assistance for Needy Families Unemployed Parent program. + +metadata: + unit: currency-USD + period: month + breakdown: + - range(1, 11) + label: Virginia TANF-UP group II localities assistance + reference: + - 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: + 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 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group2/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group2/max.yaml new file mode 100644 index 00000000000..757a9bf0180 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group2/max.yaml @@ -0,0 +1,12 @@ +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 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF-UP group II localities maximum assistance + reference: + - 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/payment/up_grant_standard/group3/addition.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group3/addition.yaml new file mode 100644 index 00000000000..4d6814e7167 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/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 Temporary Assistance for Needy Families Unemployed Parent program. + +values: + 2020-07-01: 71 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF-UP group III localities additional assistance + reference: + - 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/payment/up_grant_standard/group3/main.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group3/main.yaml new file mode 100644 index 00000000000..ad922b9b654 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group3/main.yaml @@ -0,0 +1,32 @@ +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 + period: month + breakdown: + - range(1, 11) + label: Virginia TANF-UP assistance for group III localities + reference: + - 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: + 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 diff --git a/policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group3/max.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group3/max.yaml new file mode 100644 index 00000000000..5b7c3fa3e34 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/payment/up_grant_standard/group3/max.yaml @@ -0,0 +1,12 @@ +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 + +metadata: + unit: currency-USD + period: month + label: Virginia TANF-UP maximum assistance for group III localities + reference: + - 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/standard_multiplier.yaml b/policyengine_us/parameters/gov/states/va/dss/tanf/standard_multiplier.yaml new file mode 100644 index 00000000000..d3c0cb7a957 --- /dev/null +++ b/policyengine_us/parameters/gov/states/va/dss/tanf/standard_multiplier.yaml @@ -0,0 +1,28 @@ +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/RD81/PDF#page=4 + - 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/ + +# 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 + 2016-01-01: 0.7883 + 2016-07-01: 0.808 + 2017-07-01: 0.8282 + 2019-07-01: 0.8696 + 2020-07-01: 1.0 + 2021-07-01: 1.1 + 2022-07-01: 1.155 + 2023-07-01: 1.2705 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..23e6d6219fc --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.yaml @@ -0,0 +1,66 @@ +- 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 + +- 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 new file mode 100644 index 00000000000..3700a47ad72 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.yaml @@ -0,0 +1,173 @@ +# VA TANF Income Eligibility Tests +# Two-step test: +# 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 + 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 <= 12,000? YES + # Step 2: 0 <= 6,000? YES + va_tanf_income_eligibility: true + +- name: Case 2, gross income at need standard is eligible. + period: 2023 + input: + state_code: VA + 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: 12,000 <= 12,000? YES + # Step 2: 5,000 <= 6,000? YES + va_tanf_income_eligibility: true + +- name: Case 3, gross income exceeds need standard - not eligible. + period: 2023 + input: + state_code: VA + 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: 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_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: 10,000 <= 12,000? YES + # Step 2: 7,000 <= 6,000? NO (fails step 2) + va_tanf_income_eligibility: false + +- name: Case 5, UP eligible uses 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: 4_500 + 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): 4,500 <= 5,000? YES + va_tanf_income_eligibility: true + +- name: Case 6, UP eligible but countable exceeds UP grant - not eligible. + period: 2023 + input: + state_code: VA + 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: 8,000 <= 12,000? YES + # Step 2 (UP): 5,500 <= 5,000? NO (fails step 2) + va_tanf_income_eligibility: false + +- name: Case 7, only calculate for VA. + period: 2023 + input: + state_code: MD + 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: + 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 new file mode 100644 index 00000000000..c7f49727775 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.yaml @@ -0,0 +1,260 @@ +# 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: + age: 30 + is_disabled: false + person2: + age: 5 + spm_units: + spm_unit: + members: [person1, person2] + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: VA + output: + va_up_tanf_eligibility: false + +- name: Case 2, two able-bodied adults - eligible. + period: 2023-01 + input: + people: + person1: + age: 35 + is_disabled: false + person2: + age: 32 + is_disabled: false + 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: + 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] + state_code: VA + output: + va_up_tanf_eligibility: false + +- name: Case 4, head disabled, spouse able-bodied - not eligible. + period: 2023-01 + input: + people: + person1: + age: 35 + is_disabled: true + person2: + age: 32 + is_disabled: false + 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: + 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] + state_code: VA + output: + va_up_tanf_eligibility: false + +- name: Case 6, not VA state - not eligible. + period: 2023-01 + input: + people: + person1: + age: 35 + is_disabled: false + person2: + age: 32 + is_disabled: false + 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: 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 + +# 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 + 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 new file mode 100644 index 00000000000..0102cc67fe3 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.yaml @@ -0,0 +1,186 @@ +- name: Family with mother and a 1-year-old child, expenses exceed max + period: 2023 + input: + people: + person1: + is_tax_unit_dependent: false + age: 25 + person2: + is_tax_unit_dependent: true + age: 1 + spm_units: + spm_unit: + members: [person1, person2] + 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: Family with mother, disabled father, two children, expenses below max + period: 2023 + input: + people: + person1: + 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_tax_unit_dependent: true + age: 1 + person4: + is_tax_unit_dependent: true + age: 2 + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + childcare_expenses: 4_800 + households: + household: + members: [person1, person2, person3, person4] + state_code: VA + output: + # 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 + +- 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 new file mode 100644 index 00000000000..aa1c5e604ea --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.yaml @@ -0,0 +1,207 @@ +# 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: + 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 1 = $167 * 12 = $2,004/year + # Income $1,500 < $2,004, so max_($1,500 - $2,004, 0) = 0 + period: 2023 + input: + 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 $5,004, size 3, $2,400 after deduction. + # Flat exclusion for size 3 = $167 * 12 = $2,004/year + # ($5,004 - $2,004) * 0.8 = $3,000 * 0.8 = $2,400 + period: 2023 + input: + 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 $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: + 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 + +- 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 new file mode 100644 index 00000000000..341571b4053 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.yaml @@ -0,0 +1,189 @@ +# VA TANF Countable Unearned Income Tests +# 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, +# gi_cash_assistance, social_security (NOT ssi) + +- name: Case 1, no unearned income returns zero. + 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: + # SSI is NOT counted in tanf_gross_unearned_income + va_tanf_countable_unearned_income: 0 + +- name: Case 2, mixed unearned income with child support below disregard cap. + 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: + # 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: Case 3, child support above disregard cap, not UP-TANF. + 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: + # 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: Case 4, UP-TANF eligible, same calculation as regular TANF. + period: 2023 + input: + state_code: VA + 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: + # 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: 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 new file mode 100644 index 00000000000..a3db372be6b --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/integration.yaml @@ -0,0 +1,721 @@ +# 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: 2021-01 + input: + people: + person1: + is_mother: true + age: 30 + employment_income_before_lsr: 12_000 + person2: + is_child: true + age: 5 + person3: + is_child: true + age: 3 + spm_units: + spm_unit: + members: [person1, person2, person3] + childcare_expenses: 6_000 + 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 + va_tanf_need_standard: 1_017 + # + # Grant standard: $508/month + va_tanf_grant_standard: 508 + # + # 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: min($500, $175 * 2) = $350/month + # After childcare: max($666.40 - $350, 0) = $316.40 + va_tanf_countable_earned_income: 316.4 + # + # Childcare deduction: min($500, $350) = $350/month + va_tanf_childcare_deduction: 350 + # + # Countable income: $316.40 + $0 = $316.40 + va_tanf_countable_income: 316.4 + # + # Income eligibility: $316.40 <= $1,017? YES (and gross $1,000 <= $1,017) + va_tanf_income_eligibility: true + # + # Benefit: $508 - $316.40 = $191.60 + va_tanf: 191.6 + +- name: Group II locality - Single parent family + period: 2021-01 + input: + people: + person1: + is_mother: true + age: 28 + employment_income_before_lsr: 6_000 + person2: + is_child: true + age: 4 + spm_units: + spm_unit: + members: [person1, person2] + childcare_expenses: 3_600 + households: + household: + members: [person1, person2] + state_code: VA + county_str: PITTSYLVANIA_COUNTY_VA + output: + # Family size: 2 + # Group II locality (Pittsylvania County) + # + # Need standard: $663/month + va_tanf_need_standard: 663 + # + # Grant standard: $332/month + va_tanf_grant_standard: 332 + # + # 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: min($300, $175) = $175/month + # After childcare: max($266.40 - $175, 0) = $91.40 + va_tanf_countable_earned_income: 91.4 + # + # Childcare deduction: min($300, $175) = $175/month + va_tanf_childcare_deduction: 175 + # + # Countable income: $91.40 + $0 = $91.40 + va_tanf_countable_income: 91.4 + # + # Income eligibility: $91.40 <= $663? YES + va_tanf_income_eligibility: true + # + # 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 + input: + people: + person1: + age: 35 + employment_income_before_lsr: 0 + is_disabled: false + person2: + age: 32 + employment_income_before_lsr: 0 + is_disabled: false + person3: + age: 8 + person4: + age: 6 + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + childcare_expenses: 6_000 + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + households: + household: + members: [person1, person2, person3, person4] + state_code: VA + county_str: ARLINGTON_COUNTY_VA + output: + # Family size: 4 + # Group III locality (Arlington County) + # TANF-UP eligible: both parents are able-bodied (not disabled) + va_up_tanf_eligibility: true + # + # Need standard (Group III, size 4): $1,178/month + va_tanf_need_standard: 1_178 + # + # UP Grant standard (Group III, size 4): $513/month + va_tanf_up_grant_standard: 513 + # + # No earned income + va_tanf_countable_earned_income: 0 + # + # Childcare: min($500, $175 * 2) = $350/month + va_tanf_childcare_deduction: 350 + # + # Countable income: $0 + $0 = $0 + va_tanf_countable_income: 0 + # + # Income eligibility: $0 <= $1,178? YES + va_tanf_income_eligibility: true + # + # 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: 2021-01 + input: + people: + person1: + is_mother: true + age: 35 + employment_income_before_lsr: 30_000 + person2: + is_child: true + age: 10 + spm_units: + spm_unit: + members: [person1, person2] + childcare_expenses: 3_600 + 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: $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: 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: min($300, $175) = $175/month + va_tanf_childcare_deduction: 175 + # + # Countable income: $1,691.40 + $0 = $1,691.40 + va_tanf_countable_income: 1_691.4 + # + # 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) + absolute_error_margin: 0.01 + period: 2021-01 + input: + people: + person1: + is_mother: true + age: 25 + employment_income_before_lsr: 7_000 + person2: + is_child: true + age: 1 + spm_units: + spm_unit: + members: [person1, person2] + childcare_expenses: 3_600 + households: + household: + members: [person1, person2] + state_code: VA + county_str: PITTSYLVANIA_COUNTY_VA + output: + # Family size: 2 + # Group II locality (Pittsylvania County) + # + # Need standard: $663/month + va_tanf_need_standard: 663 + # + # Grant standard: $332/month + va_tanf_grant_standard: 332 + # + # 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: 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: min($300, $200) = $200/month + va_tanf_childcare_deduction: 200 + # + # Countable income: $133.07 + $0 = $133.07 + va_tanf_countable_income: 133.07 + # + # Income eligibility: + # Step 1: gross $583.33 <= need $663? YES + # Step 2: countable $133.07 <= grant $332? YES + va_tanf_income_eligibility: true + # + # Benefit: $332 - $133.07 = $198.93 + va_tanf: 198.93 + +- name: Family with earned and unearned income (child support) + period: 2021-01 + input: + people: + person1: + is_mother: true + age: 32 + employment_income_before_lsr: 6_000 + 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] + childcare_expenses: 6_000 + 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 + va_tanf_need_standard: 1_017 + # + # Grant standard: $508/month + va_tanf_grant_standard: 508 + # + # 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: 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 + # Child support disregard: $100/month + # Countable child support: $200 - $100 = $100/month + va_tanf_countable_unearned_income: 100 + # + # Childcare deduction: min($500, $350) = $350/month + va_tanf_childcare_deduction: 350 + # + # Countable income: $0 + $100 = $100 + va_tanf_countable_income: 100 + # + # Income eligibility: Step 1: gross earned $500 + gross unearned $200 = $700 <= $1,017? YES + va_tanf_income_eligibility: true + # + # Benefit: $508 - $100 = $408 + va_tanf: 408 + +- name: Large family (size 8) in Group III locality + period: 2021-01 + input: + people: + person1: + is_mother: true + age: 38 + employment_income_before_lsr: 10_000 + person2: + is_father: true + age: 40 + employment_income_before_lsr: 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] + childcare_expenses: 18_000 + 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 + va_tanf_need_standard: 1_868 + # + # Grant standard (size 8): $933/month + va_tanf_grant_standard: 933 + # + # 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: min($1,500, $1,225) = $1,225/month + # - 1 disabled adult: $175/month + # - 6 children age 2+: $175 * 6 = $1,050/month + # After childcare: max($474.67 - $1,225, 0) = $0 + va_tanf_countable_earned_income: 0 + # + # Childcare deduction: min($1,500, $1,225) = $1,225/month + va_tanf_childcare_deduction: 1_225 + # + # Countable income: $0 + $0 = $0 + va_tanf_countable_income: 0 + # + # Income eligibility: $0 <= $1,868? YES + va_tanf_income_eligibility: true + # + # 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: 2021-01 + input: + people: + person1: + is_mother: true + age: 45 + employment_income_before_lsr: 9_000 + person2: + is_father: true + age: 50 + employment_income_before_lsr: 0 + is_disabled: true + person3: + is_child: true + age: 12 + spm_units: + spm_unit: + members: [person1, person2, person3] + childcare_expenses: 6_000 + 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 + va_tanf_need_standard: 836 + # + # Grant standard: $417/month + va_tanf_grant_standard: 417 + # + # 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: min($500, $350) = $350/month + # - 1 disabled adult age 50 (2+): $175/month + # - 1 child age 12 (2+): $175/month + # After childcare: max($466.40 - $350, 0) = $116.40 + va_tanf_countable_earned_income: 116.4 + # + # Childcare deduction: min($500, $350) = $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: $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 + +- 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/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..18cfd74e947 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf.yaml @@ -0,0 +1,164 @@ +- 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, small payment is still paid. + 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: + # Grant standard $2,100 - countable income $2,000 = $100 payment + va_tanf: 100 + +- name: If up tanf eligible, small payment is still paid. + 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: + # 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 + 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 + +# Boundary tests for small payments +- name: Small payment of $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 + va_tanf: 120 + +- name: Small payment of $119/year is paid. + 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 + 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 new file mode 100644 index 00000000000..6886f7d2748 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_grant_standard.yaml @@ -0,0 +1,107 @@ +# 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 + +- 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 + +- 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: 2021-01 + input: + state_code: VA + spm_unit_size: 11 + county_str: ARLINGTON_COUNTY_VA + output: + va_tanf_grant_standard: 1_166 + +- 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 + +- 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 + +- 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 + +- 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: 2021-01 + input: + state_code: VA + spm_unit_size: 11 + county_str: BEDFORD_COUNTY_VA + output: + va_tanf_grant_standard: 1_056 + +- 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 + +- name: Only calculate for VA. + 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 + +# 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 new file mode 100644 index 00000000000..10a74a082d3 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_need_standard.yaml @@ -0,0 +1,87 @@ +# 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 + +- 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 + +- 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 + +- 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 + +- 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 + +- 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 + +- name: Only calculate for VA. + 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 + +# 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 new file mode 100644 index 00000000000..e390ea0f53a --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/va/dss/tanf/va_tanf_up_grant_standard.yaml @@ -0,0 +1,87 @@ +# 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 + +- 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 + +- 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 + +- 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 + +- 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 + +- 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 + +- name: Only calculate for VA. + 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 + +# 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/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..fdb9659a69b --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_eligibility.py @@ -0,0 +1,20 @@ +from policyengine_us.model_api import * + + +class va_tanf_eligibility(Variable): + value_type = bool + entity = SPMUnit + label = "VA TANF eligibility" + definition_period = MONTH + defined_for = StateCode.VA + 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 + has_eligible_member = ( + add(spm_unit, period, ["is_citizen_or_legal_immigrant"]) > 0 + ) + # 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_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..42c5649aa63 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_tanf_income_eligibility.py @@ -0,0 +1,30 @@ +from policyengine_us.model_api import * + + +class va_tanf_income_eligibility(Variable): + value_type = bool + entity = SPMUnit + label = "VA TANF income eligibility" + 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): + # Two-step income test per Virginia TANF Manual Section 305.1 + # 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 + + # 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 new file mode 100644 index 00000000000..c0557742ab1 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/eligibility/va_up_tanf_eligibility.py @@ -0,0 +1,17 @@ +from policyengine_us.model_api import * + + +class va_up_tanf_eligibility(Variable): + value_type = bool + entity = SPMUnit + label = "VA TANF-UP eligibility" + definition_period = MONTH + defined_for = StateCode.VA + reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/700_07-20.pdf#page=2" + + 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.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 new file mode 100644 index 00000000000..ae53f5145bf --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_childcare_deduction.py @@ -0,0 +1,26 @@ +from policyengine_us.model_api import * + + +class va_tanf_childcare_deduction(Variable): + value_type = float + entity = SPMUnit + label = "VA TANF childcare deduction" + 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=56" + + def formula(spm_unit, period, parameters): + p = parameters( + period + ).gov.states.va.dss.tanf.income.deductions.dependent_care + person = spm_unit.members + age = person("age", period.this_year) + dependent = person("is_tax_unit_dependent", period) + disabled_adult = person("is_adult", period) & person( + "is_disabled", period.this_year + ) + 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 new file mode 100644 index 00000000000..f987520723b --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_earned_income.py @@ -0,0 +1,24 @@ +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 = 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 = 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 + 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 new file mode 100644 index 00000000000..3239267ed89 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_income.py @@ -0,0 +1,16 @@ +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 = MONTH + defined_for = StateCode.VA + reference = "https://www.dss.virginia.gov/files/division/bp/tanf/manual/300_11-20.pdf#page=50" + + 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 new file mode 100644 index 00000000000..035c23f7dce --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/income/va_tanf_countable_unearned_income.py @@ -0,0 +1,19 @@ +from policyengine_us.model_api import * + + +class va_tanf_countable_unearned_income(Variable): + value_type = float + entity = SPMUnit + label = "VA TANF countable unearned 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=58" + + def formula(spm_unit, period, parameters): + 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.child_support) + return max_(gross_unearned - child_support_disregard, 0) 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/va_tanf.py b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py new file mode 100644 index 00000000000..faa0de3c994 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf.py @@ -0,0 +1,44 @@ +from policyengine_us.model_api import * + + +class va_tanf(Variable): + value_type = float + entity = SPMUnit + label = "VA TANF" + unit = USD + 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" + + 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 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) + 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, + 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 new file mode 100644 index 00000000000..efcc800623a --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_grant_standard.py @@ -0,0 +1,41 @@ +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 = 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.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" + ) + ) + ceiling = min_(unit_size, p.max_unit_size) + additional = unit_size - ceiling + + county = spm_unit.household("county_str", period) + if_group3 = np.isin(county, p.localities.group3) + main = where( + if_group3, + p_grant_standard.group3.main[ceiling], + p_grant_standard.group2.main[ceiling], + ) + addition = where( + if_group3, + p_grant_standard.group3.addition, + p_grant_standard.group2.addition, + ) + + base_amount = main + additional * addition + # Apply standard multiplier for increases since July 2020 base + + 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 new file mode 100644 index 00000000000..557c9ed181a --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_need_standard.py @@ -0,0 +1,39 @@ +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 = 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.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" + ) + ceiling = min_(unit_size, p.max_unit_size) + additional = unit_size - ceiling + + county = spm_unit.household("county_str", period) + if_group3 = np.isin(county, p.localities.group3) + main = where( + if_group3, + 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, + ) + + base_amount = main + additional * addition + # Apply standard multiplier for increases since July 2020 base + + 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 new file mode 100644 index 00000000000..ecaed44efc4 --- /dev/null +++ b/policyengine_us/variables/gov/states/va/dss/tanf/va_tanf_up_grant_standard.py @@ -0,0 +1,41 @@ +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 = 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.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" + ) + ) + ceiling = min_(unit_size, p.max_unit_size) + additional = unit_size - ceiling + + county = spm_unit.household("county_str", period) + 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], + ) + addition = where( + if_group3, + p_up_grant_standard.group3.addition, + p_up_grant_standard.group2.addition, + ) + + base_amount = main + additional * addition + # Apply standard multiplier for increases since July 2020 base + + return base_amount * p.standard_multiplier