diff --git a/changelog.d/history-wic-income-2017.fixed.md b/changelog.d/history-wic-income-2017.fixed.md new file mode 100644 index 00000000000..2766c09058f --- /dev/null +++ b/changelog.d/history-wic-income-2017.fixed.md @@ -0,0 +1 @@ +Corrected WIC annual income limits from July 2016 through June 2017 using HHS's published household-size table. diff --git a/policyengine_us/tests/policy/baseline/gov/usda/wic/is_wic_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/usda/wic/is_wic_eligible.yaml index 51b6b9cb465..7f91be2994b 100644 --- a/policyengine_us/tests/policy/baseline/gov/usda/wic/is_wic_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/usda/wic/is_wic_eligible.yaml @@ -50,3 +50,239 @@ output: # Adult: not eligible, infant: eligible, age 6: not eligible is_wic_eligible: [false, true, false] + +# USDA 2016/2017 WIC income notice, 81 FR 14826-14829, PDF pages 1-2. +# https://www.govinfo.gov/content/pkg/FR-2016-03-18/pdf/2016-06222.pdf#page=2 +# Texas DSHS CS:12.0, effective July 1, 2016, annual size-three ceiling 37,296. +# https://med.uth.edu/wic/wp-content/uploads/sites/48/2016/10/WIC-Income-Guidelines.pdf +# Medicaid take-up is declined, so enrollment cannot grant adjunctive eligibility. +# Nutritional risk retains its existing assumed-assessment default. The older +# child and adult supply real family size but are outside WIC demographics. +- name: Texas child one dollar above the 2016 guideline annual ceiling is ineligible in January 2017. + period: 2017-01 + input: + people: + parent: + age: {2017: 35} + employment_income: {2017: 37_297} + takes_up_medicaid_if_eligible: {2017: false} + child: + age: {2017: 3} + is_tax_unit_dependent: {2017: true} + takes_up_medicaid_if_eligible: {2017: false} + older_child: + age: {2017: 8} + is_tax_unit_dependent: {2017: true} + takes_up_medicaid_if_eligible: {2017: false} + tax_units: + tax_unit: + members: [parent, child, older_child] + spm_units: + spm_unit: + members: [parent, child, older_child] + families: + family: + members: [parent, child, older_child] + marital_units: + parent: + members: [parent] + child: + members: [child] + older_child: + members: [older_child] + households: + household: + members: [parent, child, older_child] + state_code: {2017: TX} + output: + is_wic_eligible: [false, false, false] + wic: [0, 0, 0] + meets_wic_income_test: false + wic_countable_income: + 2017: 37_297 + wic_income_limit: 37_296 + wic_category: [NONE, CHILD, NONE] + meets_wic_categorical_eligibility: [false, false, false] + medicaid_enrolled: [false, false, false] + snap: 0 + tanf: 0 + receives_snap: false + receives_tanf: false + +- name: Texas child at the 2016 guideline annual ceiling meets direct income eligibility in January 2017. + period: 2017-01 + input: + people: + parent: + age: + 2017: 35 + employment_income: + 2017: 37296 + takes_up_medicaid_if_eligible: + 2017: false + child: + age: + 2017: 3 + is_tax_unit_dependent: + 2017: true + takes_up_medicaid_if_eligible: + 2017: false + older_child: + age: + 2017: 8 + is_tax_unit_dependent: + 2017: true + takes_up_medicaid_if_eligible: + 2017: false + tax_units: + tax_unit: + members: + - parent + - child + - older_child + spm_units: + spm_unit: + members: + - parent + - child + - older_child + families: + family: + members: + - parent + - child + - older_child + marital_units: + parent: + members: + - parent + child: + members: + - child + older_child: + members: + - older_child + households: + household: + members: + - parent + - child + - older_child + state_code: + 2017: TX + output: + is_wic_eligible: + - false + - true + - false + meets_wic_income_test: true + wic_countable_income: + 2017: 37296 + wic_income_limit: 37296 + wic_category: + - NONE + - CHILD + - NONE + meets_wic_categorical_eligibility: + - false + - false + - false + medicaid_enrolled: + - false + - false + - false + snap: 0 + tanf: 0 + receives_snap: false + receives_tanf: false +- name: Texas child one cent above the 2016 guideline annual ceiling is ineligible in January 2017. + period: 2017-01 + input: + people: + parent: + age: + 2017: 35 + employment_income: + 2017: 37296.01 + takes_up_medicaid_if_eligible: + 2017: false + child: + age: + 2017: 3 + is_tax_unit_dependent: + 2017: true + takes_up_medicaid_if_eligible: + 2017: false + older_child: + age: + 2017: 8 + is_tax_unit_dependent: + 2017: true + takes_up_medicaid_if_eligible: + 2017: false + tax_units: + tax_unit: + members: + - parent + - child + - older_child + spm_units: + spm_unit: + members: + - parent + - child + - older_child + families: + family: + members: + - parent + - child + - older_child + marital_units: + parent: + members: + - parent + child: + members: + - child + older_child: + members: + - older_child + households: + household: + members: + - parent + - child + - older_child + state_code: + 2017: TX + output: + is_wic_eligible: + - false + - false + - false + wic: + - 0 + - 0 + - 0 + meets_wic_income_test: false + wic_countable_income: + 2017: 37296.01 + wic_income_limit: 37296 + wic_category: + - NONE + - CHILD + - NONE + meets_wic_categorical_eligibility: + - false + - false + - false + medicaid_enrolled: + - false + - false + - false + snap: 0 + tanf: 0 + receives_snap: false + receives_tanf: false + absolute_error_margin: 0.005 diff --git a/policyengine_us/tests/policy/baseline/gov/usda/wic/wic_income_limit.yaml b/policyengine_us/tests/policy/baseline/gov/usda/wic/wic_income_limit.yaml index e48ab168085..6ab5b07dbff 100644 --- a/policyengine_us/tests/policy/baseline/gov/usda/wic/wic_income_limit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/usda/wic/wic_income_limit.yaml @@ -55,3 +55,621 @@ members: [person1] output: wic_income_limit: 49_303 + +# USDA 2016/2017 WIC notice, 81 FR 14826-14829, PDF pages 2-3. +# https://www.govinfo.gov/content/pkg/FR-2016-03-18/pdf/2016-06222.pdf#page=2 +# Component sizes are supplied to exercise the formula, not to describe real families. +- name: The 2016 guideline annual WIC ceilings match all published source rows and size-eight extensions. + period: 2017-01 + input: + age: + 2017: + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + state_code: + 2017: + - TX + - TX + - TX + - TX + - TX + - TX + - TX + - TX + - TX + - TX + - AK + - AK + - AK + - AK + - AK + - AK + - AK + - AK + - AK + - AK + - HI + - HI + - HI + - HI + - HI + - HI + - HI + - HI + - HI + - HI + spm_unit_size: + 2017: + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 + - 9 + - 11 + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 + - 9 + - 11 + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 + - 9 + - 11 + output: + wic_income_limit: + - 21978 + - 29637 + - 37296 + - 44955 + - 52614 + - 60273 + - 67951 + - 75647 + - 83343 + - 98735 + - 27454 + - 37037 + - 46620 + - 56203 + - 65786 + - 75369 + - 84952 + - 94572 + - 104192 + - 123432 + - 25290 + - 34096 + - 42902 + - 51708 + - 60514 + - 69320 + - 78126 + - 86969 + - 95812 + - 113498 +- name: Pregnancy-adjusted size three uses the exact 2016 guideline for WIC in January 2017. + period: 2017-01 + input: + people: + parent: + age: + 2017: 30 + is_pregnant: + 2017: true + child: + age: + 2017: 3 + spm_units: + spm_unit: + members: + - parent + - child + households: + household: + members: + - parent + - child + state_code: + 2017: TX + output: + wic_income_limit: 37296 +- name: Guam keeps the contiguous WIC mapping with the exact 2016 guideline. + period: 2017-01 + input: + age: + 2017: 35 + state_code: + 2017: GU + spm_unit_size: + 2017: 3 + output: + wic_income_limit: 37296 +- name: WIC retains its July guideline selector and consecutive 2017 through 2026 annual conventions. + period: 2017-01 + input: + age: + 2017: + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + 2018: + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + 2019: + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + 2020: + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + 2021: + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + 2022: + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + 2023: + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + 2024: + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + 2025: + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + 2026: + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + - 35 + state_code: + 2017: &id001 + - TX + - TX + - TX + - TX + - AK + - AK + - AK + - AK + - HI + - HI + - HI + - HI + 2018: *id001 + 2019: *id001 + 2020: *id001 + 2021: *id001 + 2022: *id001 + 2023: *id001 + 2024: *id001 + 2025: *id001 + 2026: *id001 + spm_unit_size: + 2017: + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + 2018: + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + 2019: + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + 2020: + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + 2021: + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + 2022: + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + 2023: + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + 2024: + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + 2025: + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + 2026: + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + - 2 + - 3 + - 8 + - 11 + output: + wic_income_limit: + 2017-01: + - 29637 + - 37296 + - 75647 + - 98735 + - 37037 + - 46620 + - 94572 + - 123432 + - 34096 + - 42902 + - 86969 + - 113498 + 2018-01: + - 30044 + - 37777 + - 76442 + - 99641 + - 37537 + - 47212 + - 95590 + - 124616 + - 34540 + - 43438 + - 87931 + - 114626 + 2019-01: + - 30451 + - 38443 + - 78403 + - 102379 + - 38073 + - 48063 + - 98013 + - 127983 + - 34725 + - 43623 + - 88116 + - 114811 + 2020-01: + - 31284 + - 39461 + - 80346 + - 104877 + - 39091 + - 49321 + - 100474 + - 131165 + - 36001 + - 45399 + - 92389 + - 120583 + 2021-01: + - 31894 + - 40182 + - 81622 + - 106486 + - 39868 + - 50228 + - 102028 + - 133108 + - 36686 + - 46213 + - 93851 + - 122433 + 2022-01: + - 32227 + - 40626 + - 82621 + - 107818 + - 40275 + - 50783 + - 103323 + - 134847 + - 37074 + - 46731 + - 95016 + - 123987 + 2023-01: + - 33874 + - 42606 + - 86266 + - 112462 + - 42347 + - 53262 + - 107837 + - 140582 + - 38961 + - 49007 + - 99234 + - 129371 + 2024-01: + - 36482 + - 45991 + - 93536 + - 122063 + - 45584 + - 57480 + - 116957 + - 152644 + - 41958 + - 52892 + - 107559 + - 140360 + 2025-01: + - 37814 + - 47767 + - 97532 + - 127391 + - 47249 + - 59700 + - 121952 + - 159304 + - 43475 + - 54927 + - 112184 + - 146539 + 2026-01: + - 39128 + - 49303 + - 100178 + - 130703 + - 48896 + - 61624 + - 125264 + - 163448 + - 44992 + - 56703 + - 115255 + - 150387 + 2017-07: + - 30044 + - 37777 + - 76442 + - 99641 + - 37537 + - 47212 + - 95590 + - 124616 + - 34540 + - 43438 + - 87931 + - 114626 +- name: The 2016 guideline table starts with the existing July WIC selector. + period: 2016-06 + input: + age: + 2016: 35 + state_code: + 2016: TX + spm_unit_size: + 2016: 3 + output: + wic_income_limit: + 2016-06: 37167 + 2016-07: 37296 diff --git a/policyengine_us/variables/gov/usda/wic/wic_income_limit.py b/policyengine_us/variables/gov/usda/wic/wic_income_limit.py index e708a472b76..731559eb2cb 100644 --- a/policyengine_us/variables/gov/usda/wic/wic_income_limit.py +++ b/policyengine_us/variables/gov/usda/wic/wic_income_limit.py @@ -1,4 +1,5 @@ from policyengine_us.model_api import * +from policyengine_us.variables.gov.hhs.tax_unit_fpg import fpg class wic_income_limit(Variable): @@ -8,11 +9,13 @@ class wic_income_limit(Variable): unit = USD label = "WIC income limit" documentation = "Annual income limit for WIC direct income eligibility" - reference = [ + reference = ( "https://www.law.cornell.edu/uscode/text/42/1786#d_2_A_i", "https://www.law.cornell.edu/cfr/text/7/246.7#d_2_vii", "https://www.fns.usda.gov/wic/income-eligibility-guidelines-2025-26", - ] + # PDF pages 1-3. + "https://www.govinfo.gov/content/pkg/FR-2016-03-18/pdf/2016-06222.pdf#page=1", + ) def formula(spm_unit, period, parameters): spm_unit_size = spm_unit("spm_unit_size", period.this_year) @@ -31,11 +34,13 @@ def formula(spm_unit, period, parameters): year = period.start.year month = period.start.month hhs_guideline_year = year if month >= 7 else year - 1 - p_fpg = parameters(f"{hhs_guideline_year}-01-01").gov.hhs.fpg - first_person = p_fpg.first_person[wic_state_group] - additional_person = p_fpg.additional_person[wic_state_group] - fpg = first_person + additional_person * (wic_unit_size - 1) + annual_fpg = fpg( + wic_unit_size, + wic_state_group, + f"{hhs_guideline_year}-01-01", + parameters, + ) reduced_school_meal_limit = parameters( period ).gov.usda.school_meals.income.limit.REDUCED - return np.ceil(fpg * reduced_school_meal_limit) + return np.ceil(annual_fpg * reduced_school_meal_limit)