From fc575d2f5c69508181628bdb8ccee16edc384a2a Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 18 Dec 2025 20:41:21 -0500 Subject: [PATCH 1/4] Initial commit for Mississippi TANF implementation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Starting implementation of Mississippi TANF (Temporary Assistance for Needy Families). Documentation and parallel development will follow. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 From 17b0c0377395d84686948a3278270e0e14b3d4bd Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 18 Dec 2025 21:17:08 -0500 Subject: [PATCH 2/4] Add Mississippi TANF program implementation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implements Mississippi Temporary Assistance for Needy Families (TANF) program including income eligibility, resources eligibility, benefit calculation, and payment standards. Closes #7012 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- changelog_entry.yaml | 4 + .../tanf/income/gross_income_limit_rate.yaml | 14 + .../ms/dhs/tanf/need_standard/amount.yaml | 33 ++ .../tanf/need_standard/max_table_size.yaml | 12 + .../payment_standard/additional_person.yaml | 14 + .../tanf/payment_standard/first_person.yaml | 14 + .../tanf/payment_standard/second_person.yaml | 14 + .../states/ms/dhs/tanf/resources/limit.yaml | 14 + .../gov/states/ms/dhs/tanf/integration.yaml | 267 +++++++++++++ .../gov/states/ms/dhs/tanf/ms_tanf.yaml | 124 ++++++ .../states/ms/dhs/tanf/ms_tanf_eligible.yaml | 86 ++++ .../ms/dhs/tanf/ms_tanf_income_eligible.yaml | 146 +++++++ .../ms/dhs/tanf/ms_tanf_maximum_benefit.yaml | 95 +++++ .../dhs/tanf/ms_tanf_resources_eligible.yaml | 66 ++++ .../dhs/tanf/eligibility/ms_tanf_eligible.py | 32 ++ .../eligibility/ms_tanf_income_eligible.py | 33 ++ .../eligibility/ms_tanf_resources_eligible.py | 18 + .../gov/states/ms/dhs/tanf/ms_tanf.py | 19 + .../ms/dhs/tanf/ms_tanf_countable_income.py | 18 + .../ms/dhs/tanf/ms_tanf_maximum_benefit.py | 25 ++ sources/working_references.md | 372 ++++++++++++++++++ 21 files changed, 1420 insertions(+) create mode 100644 policyengine_us/parameters/gov/states/ms/dhs/tanf/income/gross_income_limit_rate.yaml create mode 100644 policyengine_us/parameters/gov/states/ms/dhs/tanf/need_standard/amount.yaml create mode 100644 policyengine_us/parameters/gov/states/ms/dhs/tanf/need_standard/max_table_size.yaml create mode 100644 policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/additional_person.yaml create mode 100644 policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/first_person.yaml create mode 100644 policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/second_person.yaml create mode 100644 policyengine_us/parameters/gov/states/ms/dhs/tanf/resources/limit.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/integration.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_eligible.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_income_eligible.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_maximum_benefit.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_resources_eligible.yaml create mode 100644 policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_eligible.py create mode 100644 policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_income_eligible.py create mode 100644 policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_resources_eligible.py create mode 100644 policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf.py create mode 100644 policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf_countable_income.py create mode 100644 policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf_maximum_benefit.py create mode 100644 sources/working_references.md diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb2d..2b8ca1a797f 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,4 @@ +- bump: minor + changes: + added: + - Add Mississippi TANF program. diff --git a/policyengine_us/parameters/gov/states/ms/dhs/tanf/income/gross_income_limit_rate.yaml b/policyengine_us/parameters/gov/states/ms/dhs/tanf/income/gross_income_limit_rate.yaml new file mode 100644 index 00000000000..4c40ec7d256 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ms/dhs/tanf/income/gross_income_limit_rate.yaml @@ -0,0 +1,14 @@ +description: Mississippi limits gross income to this share of the need standard under the Temporary Assistance for Needy Families program. + +values: + 2019-07-01: 1.85 + +metadata: + unit: /1 + period: month + label: Mississippi TANF gross income limit rate + reference: + - title: Miss. Code. tit. 18, pt. 19 - TANF State Plan + href: https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 + - title: Mississippi Department of Human Services - Applying for TANF + href: https://www.mdhs.ms.gov/help/tanf/applying-for-tanf/ diff --git a/policyengine_us/parameters/gov/states/ms/dhs/tanf/need_standard/amount.yaml b/policyengine_us/parameters/gov/states/ms/dhs/tanf/need_standard/amount.yaml new file mode 100644 index 00000000000..f4372864aaf --- /dev/null +++ b/policyengine_us/parameters/gov/states/ms/dhs/tanf/need_standard/amount.yaml @@ -0,0 +1,33 @@ +description: Mississippi sets this amount as the need standard under the Temporary Assistance for Needy Families program. +# NOTE: For households larger than 10, add $75 per person above 10 + +metadata: + unit: currency-USD + period: month + breakdown: + - range(1, 11) + label: Mississippi TANF need standard amount + reference: + - title: Miss. Code. tit. 18, pt. 19 - TANF State Plan + href: https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 + +1: + 2019-07-01: 339 +2: + 2019-07-01: 460 +3: + 2019-07-01: 581 +4: + 2019-07-01: 702 +5: + 2019-07-01: 823 +6: + 2019-07-01: 944 +7: + 2019-07-01: 1_065 +8: + 2019-07-01: 1_186 +9: + 2019-07-01: 1_307 +10: + 2019-07-01: 1_428 diff --git a/policyengine_us/parameters/gov/states/ms/dhs/tanf/need_standard/max_table_size.yaml b/policyengine_us/parameters/gov/states/ms/dhs/tanf/need_standard/max_table_size.yaml new file mode 100644 index 00000000000..4e367ef4934 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ms/dhs/tanf/need_standard/max_table_size.yaml @@ -0,0 +1,12 @@ +description: Mississippi caps need standard calculations at this household size under the Temporary Assistance for Needy Families program. + +values: + 2019-07-01: 10 + +metadata: + unit: person + period: year + label: Mississippi TANF need standard maximum table size + reference: + - title: Miss. Code. tit. 18, pt. 19 - TANF State Plan + href: https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 diff --git a/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/additional_person.yaml b/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/additional_person.yaml new file mode 100644 index 00000000000..d6bc71c5d25 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/additional_person.yaml @@ -0,0 +1,14 @@ +description: Mississippi provides this amount for each additional person beyond the second under the Temporary Assistance for Needy Families program. + +values: + 2019-07-01: 24 + +metadata: + unit: currency-USD + period: month + label: Mississippi TANF payment standard additional person + reference: + - title: Mississippi Code Section 43-17-5(1) + href: https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-5/ + - title: Miss. Code. tit. 18, pt. 19 - TANF State Plan + href: https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 diff --git a/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/first_person.yaml b/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/first_person.yaml new file mode 100644 index 00000000000..477831f3a18 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/first_person.yaml @@ -0,0 +1,14 @@ +description: Mississippi provides this amount for the first person under the Temporary Assistance for Needy Families program. + +values: + 2019-07-01: 200 + +metadata: + unit: currency-USD + period: month + label: Mississippi TANF payment standard first person + reference: + - title: Mississippi Code Section 43-17-5(1) + href: https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-5/ + - title: Miss. Code. tit. 18, pt. 19 - TANF State Plan + href: https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 diff --git a/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/second_person.yaml b/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/second_person.yaml new file mode 100644 index 00000000000..a1cd503b9fa --- /dev/null +++ b/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/second_person.yaml @@ -0,0 +1,14 @@ +description: Mississippi provides this amount for the second person under the Temporary Assistance for Needy Families program. + +values: + 2019-07-01: 36 + +metadata: + unit: currency-USD + period: month + label: Mississippi TANF payment standard second person + reference: + - title: Mississippi Code Section 43-17-5(1) + href: https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-5/ + - title: Miss. Code. tit. 18, pt. 19 - TANF State Plan + href: https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 diff --git a/policyengine_us/parameters/gov/states/ms/dhs/tanf/resources/limit.yaml b/policyengine_us/parameters/gov/states/ms/dhs/tanf/resources/limit.yaml new file mode 100644 index 00000000000..4fe5069ba88 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ms/dhs/tanf/resources/limit.yaml @@ -0,0 +1,14 @@ +description: Mississippi limits resources to this amount under the Temporary Assistance for Needy Families program. + +values: + 2019-07-01: 2_000 + +metadata: + unit: currency-USD + period: month + label: Mississippi TANF resource limit + reference: + - title: Miss. Code. tit. 18, pt. 19 - TANF State Plan + href: https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 + - title: Mississippi Department of Human Services - TANF + href: https://www.mdhs.ms.gov/help/tanf/ diff --git a/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/integration.yaml new file mode 100644 index 00000000000..b6549afac51 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/integration.yaml @@ -0,0 +1,267 @@ +# Mississippi TANF Integration Tests +# +# Program Rules: +# - Income eligibility: Gross income <= 185% of need standard +# - Need standards by size: 1=$339, 2=$460, 3=$581, 4=$702, 5=$823 +# - Income limits by size: 1=$627, 2=$851, 3=$1,074, 4=$1,298, 5=$1,523 +# - Payment standards: First person $200, second $36, each additional $24 +# - Resource limit: $2,000 +# - Benefit: Maximum Payment Standard - Countable Income + +- name: Case 1, single parent with one child, no income, receives maximum benefit. + period: 2024-01 + input: + people: + person1: + age: 30 + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_assets: 500 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: MS + output: + # Household size: 2 + spm_unit_size: 2 + # Payment standard: $200 + $36 = $236 + ms_tanf_maximum_benefit: 236 + # Resources: $500 <= $2,000 + ms_tanf_resources_eligible: true + # Income: $0 <= $851 (185% of $460) + ms_tanf_income_eligible: true + # Final benefit: $236 - $0 = $236 + ms_tanf_eligible: true + ms_tanf: 236 + +- name: Case 2, family of 3 with low earned income. + period: 2024-01 + input: + people: + person1: + age: 35 + employment_income_before_lsr: 6_000 + # Annual income: $6,000 -> Monthly: $500 + person2: + age: 8 + is_tax_unit_dependent: true + person3: + age: 3 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2, person3] + spm_unit_assets: 800 + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: MS + output: + # Household size: 3 + spm_unit_size: 3 + # Payment standard: $200 + $36 + $24 = $260 + ms_tanf_maximum_benefit: 260 + # Resources: $800 <= $2,000 + ms_tanf_resources_eligible: true + # Gross income: $500/month + # Limit: $581 * 1.85 = $1,074.85 + # $500 <= $1,074.85 + ms_tanf_income_eligible: true + # Final eligibility + ms_tanf_eligible: true + +- name: Case 3, family of 3 with income at 185% threshold. + period: 2024-01 + input: + people: + person1: + age: 35 + employment_income_before_lsr: 12_888 + # Annual income: $12,888 -> Monthly: $1,074 + person2: + age: 8 + is_tax_unit_dependent: true + person3: + age: 3 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2, person3] + spm_unit_assets: 500 + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: MS + output: + # Household size: 3 + spm_unit_size: 3 + # Payment standard: $200 + $36 + $24 = $260 + ms_tanf_maximum_benefit: 260 + # Gross income: $1,074/month + # Limit: $581 * 1.85 = $1,074.85 + # $1,074 <= $1,074.85 = true (exactly at threshold) + ms_tanf_income_eligible: true + ms_tanf_resources_eligible: true + ms_tanf_eligible: true + +- name: Case 4, family of 3 with income above 185% threshold. + period: 2024-01 + input: + people: + person1: + age: 35 + employment_income_before_lsr: 15_000 + # Annual income: $15,000 -> Monthly: $1,250 + person2: + age: 8 + is_tax_unit_dependent: true + person3: + age: 3 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2, person3] + spm_unit_assets: 500 + tax_units: + tax_unit: + members: [person1, person2, person3] + households: + household: + members: [person1, person2, person3] + state_code: MS + output: + # Household size: 3 + spm_unit_size: 3 + # Gross income: $1,250/month + # Limit: $581 * 1.85 = $1,074.85 + # $1,250 > $1,074.85 = false + ms_tanf_income_eligible: false + ms_tanf_resources_eligible: true + ms_tanf_eligible: false + ms_tanf: 0 + +- name: Case 5, family of 4 with resources at limit. + period: 2024-01 + input: + people: + person1: + age: 40 + person2: + age: 38 + person3: + age: 10 + is_tax_unit_dependent: true + person4: + age: 6 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + spm_unit_assets: 2_000 + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + households: + household: + members: [person1, person2, person3, person4] + state_code: MS + output: + # Household size: 4 + spm_unit_size: 4 + # Payment standard: $200 + $36 + $24 + $24 = $284 + ms_tanf_maximum_benefit: 284 + # Resources: $2,000 <= $2,000 + ms_tanf_resources_eligible: true + # Income: $0/month <= $1,298.7 + ms_tanf_income_eligible: true + ms_tanf_eligible: true + # Benefit: $284 - $0 = $284 + ms_tanf: 284 + +- name: Case 6, family with resources exceeding limit. + period: 2024-01 + input: + people: + person1: + age: 30 + person2: + age: 5 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2] + spm_unit_assets: 3_000 + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: MS + output: + # Household size: 2 + spm_unit_size: 2 + # Resources: $3,000 > $2,000 + ms_tanf_resources_eligible: false + # Income: $0 <= $851 = true + ms_tanf_income_eligible: true + # Fails resources test, so ineligible + ms_tanf_eligible: false + ms_tanf: 0 + +- name: Case 7, large family of 5 with mixed income. + period: 2024-01 + input: + people: + person1: + age: 35 + employment_income_before_lsr: 6_000 + # Annual: $6,000 -> Monthly: $500 + person2: + age: 12 + is_tax_unit_dependent: true + person3: + age: 8 + is_tax_unit_dependent: true + person4: + age: 5 + is_tax_unit_dependent: true + person5: + age: 2 + is_tax_unit_dependent: true + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5] + spm_unit_assets: 200 + tax_units: + tax_unit: + members: [person1, person2, person3, person4, person5] + households: + household: + members: [person1, person2, person3, person4, person5] + state_code: MS + output: + # Household size: 5 + spm_unit_size: 5 + # Payment standard: $200 + $36 + ($24 * 3) = $308 + ms_tanf_maximum_benefit: 308 + # Resources: $200 <= $2,000 + ms_tanf_resources_eligible: true + # Gross income: $500/month + # Limit: $823 * 1.85 = $1,522.55 + # $500 <= $1,522.55 = true + ms_tanf_income_eligible: true + ms_tanf_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf.yaml b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf.yaml new file mode 100644 index 00000000000..af61e97f72f --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf.yaml @@ -0,0 +1,124 @@ +# Mississippi TANF benefit calculation tests +# Benefit = Maximum Payment Standard - Countable Income +# If countable income exceeds payment standard, benefit = $0 +# Must be eligible (ms_tanf_eligible) to receive any benefit + +- name: Case 1, ineligible household receives zero benefit. + period: 2024-01 + input: + state_code: MS + ms_tanf_eligible: false + ms_tanf_maximum_benefit: 260 + ms_tanf_countable_income: 0 + output: + ms_tanf: 0 + +- name: Case 2, eligible household with no income receives maximum benefit. + period: 2024-01 + input: + state_code: MS + ms_tanf_eligible: true + ms_tanf_maximum_benefit: 260 + ms_tanf_countable_income: 0 + output: + # $260 - $0 = $260 + ms_tanf: 260 + +- name: Case 3, eligible household with countable income receives reduced benefit. + period: 2024-01 + input: + state_code: MS + ms_tanf_eligible: true + ms_tanf_maximum_benefit: 260 + ms_tanf_countable_income: 100 + output: + # $260 - $100 = $160 + ms_tanf: 160 + +- name: Case 4, eligible family of 2 with no income. + period: 2024-01 + input: + state_code: MS + ms_tanf_eligible: true + ms_tanf_maximum_benefit: 236 + ms_tanf_countable_income: 0 + output: + # $236 - $0 = $236 + ms_tanf: 236 + +- name: Case 5, eligible family of 2 with some income. + period: 2024-01 + input: + state_code: MS + ms_tanf_eligible: true + ms_tanf_maximum_benefit: 236 + ms_tanf_countable_income: 150 + output: + # $236 - $150 = $86 + ms_tanf: 86 + +- name: Case 6, eligible family of 4 with no income. + period: 2024-01 + input: + state_code: MS + ms_tanf_eligible: true + ms_tanf_maximum_benefit: 284 + ms_tanf_countable_income: 0 + output: + # $284 - $0 = $284 + ms_tanf: 284 + +- name: Case 7, eligible family of 4 with income. + period: 2024-01 + input: + state_code: MS + ms_tanf_eligible: true + ms_tanf_maximum_benefit: 284 + ms_tanf_countable_income: 200 + output: + # $284 - $200 = $84 + ms_tanf: 84 + +- name: Case 8, countable income equals maximum benefit. + period: 2024-01 + input: + state_code: MS + ms_tanf_eligible: true + ms_tanf_maximum_benefit: 260 + ms_tanf_countable_income: 260 + output: + # $260 - $260 = $0 + ms_tanf: 0 + +- name: Case 9, countable income exceeds maximum benefit. + period: 2024-01 + input: + state_code: MS + ms_tanf_eligible: true + ms_tanf_maximum_benefit: 260 + ms_tanf_countable_income: 300 + output: + # $260 - $300 = -$40, capped at $0 + ms_tanf: 0 + +- name: Case 10, single person eligible with small income. + period: 2024-01 + input: + state_code: MS + ms_tanf_eligible: true + ms_tanf_maximum_benefit: 200 + ms_tanf_countable_income: 50 + output: + # $200 - $50 = $150 + ms_tanf: 150 + +- name: Case 11, high income reduces benefit to near zero. + period: 2024-01 + input: + state_code: MS + ms_tanf_eligible: true + ms_tanf_maximum_benefit: 260 + ms_tanf_countable_income: 255 + output: + # $260 - $255 = $5 + ms_tanf: 5 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_eligible.yaml new file mode 100644 index 00000000000..2c6f3fc68f0 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_eligible.yaml @@ -0,0 +1,86 @@ +# Mississippi TANF overall eligibility tests +# Eligible when: +# - In Mississippi (defined_for = MS) +# - Has eligible household member (is_person_demographic_tanf_eligible) +# - Meets income test (ms_tanf_income_eligible) +# - Meets resources test (ms_tanf_resources_eligible) + +- name: Case 1, eligible when all conditions met. + period: 2024-01 + input: + state_code: MS + is_person_demographic_tanf_eligible: true + ms_tanf_income_eligible: true + ms_tanf_resources_eligible: true + output: + ms_tanf_eligible: true + +- name: Case 2, ineligible when not in Mississippi. + period: 2024-01 + input: + state_code: NY + is_person_demographic_tanf_eligible: true + ms_tanf_income_eligible: true + ms_tanf_resources_eligible: true + output: + ms_tanf_eligible: false + +- name: Case 3, ineligible when not demographically eligible. + period: 2024-01 + input: + state_code: MS + is_person_demographic_tanf_eligible: false + ms_tanf_income_eligible: true + ms_tanf_resources_eligible: true + output: + ms_tanf_eligible: false + +- name: Case 4, ineligible when income test fails. + period: 2024-01 + input: + state_code: MS + is_person_demographic_tanf_eligible: true + ms_tanf_income_eligible: false + ms_tanf_resources_eligible: true + output: + ms_tanf_eligible: false + +- name: Case 5, ineligible when resources test fails. + period: 2024-01 + input: + state_code: MS + is_person_demographic_tanf_eligible: true + ms_tanf_income_eligible: true + ms_tanf_resources_eligible: false + output: + ms_tanf_eligible: false + +- name: Case 6, ineligible when all tests fail. + period: 2024-01 + input: + state_code: NY + is_person_demographic_tanf_eligible: false + ms_tanf_income_eligible: false + ms_tanf_resources_eligible: false + output: + ms_tanf_eligible: false + +- name: Case 7, ineligible when income and resources fail. + period: 2024-01 + input: + state_code: MS + is_person_demographic_tanf_eligible: true + ms_tanf_income_eligible: false + ms_tanf_resources_eligible: false + output: + ms_tanf_eligible: false + +- name: Case 8, ineligible when demographic and resources fail. + period: 2024-01 + input: + state_code: MS + is_person_demographic_tanf_eligible: false + ms_tanf_income_eligible: true + ms_tanf_resources_eligible: false + output: + ms_tanf_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_income_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_income_eligible.yaml new file mode 100644 index 00000000000..a461500d85f --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_income_eligible.yaml @@ -0,0 +1,146 @@ +# Mississippi TANF income eligibility tests +# Gross income limit = Need Standard x 1.85 (185%) +# Need standards by size: 1=$339, 2=$460, 3=$581, 4=$702 +# Income limits by size: 1=$627, 2=$851, 3=$1,074, 4=$1,298 + +- name: Case 1, single person with zero income. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 1 + tanf_gross_earned_income: 0 + tanf_gross_unearned_income: 0 + output: + # Limit: $339 * 1.85 = $627.15 + ms_tanf_income_eligible: true + +- name: Case 2, single person with income at limit. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 1 + tanf_gross_earned_income: 627 + tanf_gross_unearned_income: 0 + output: + # Limit: $339 * 1.85 = $627.15 + # Income: $627 <= $627.15 = true + ms_tanf_income_eligible: true + +- name: Case 3, single person with income above limit. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 1 + tanf_gross_earned_income: 628 + tanf_gross_unearned_income: 0 + output: + # Limit: $339 * 1.85 = $627.15 + # Income: $628 > $627.15 = false + ms_tanf_income_eligible: false + +- name: Case 4, family of 2 with income below limit. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 2 + tanf_gross_earned_income: 500 + tanf_gross_unearned_income: 200 + output: + # Limit: $460 * 1.85 = $851 + # Income: $700 <= $851 = true + ms_tanf_income_eligible: true + +- name: Case 5, family of 2 with income at limit. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 2 + tanf_gross_earned_income: 600 + tanf_gross_unearned_income: 251 + output: + # Limit: $460 * 1.85 = $851 + # Income: $851 <= $851 = true + ms_tanf_income_eligible: true + +- name: Case 6, family of 2 with income above limit. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 2 + tanf_gross_earned_income: 600 + tanf_gross_unearned_income: 252 + output: + # Limit: $460 * 1.85 = $851 + # Income: $852 > $851 = false + ms_tanf_income_eligible: false + +- name: Case 7, family of 3 with income below limit. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 3 + tanf_gross_earned_income: 800 + tanf_gross_unearned_income: 0 + output: + # Limit: $581 * 1.85 = $1,074.85 + # Income: $800 <= $1,074.85 = true + ms_tanf_income_eligible: true + +- name: Case 8, family of 3 with income at limit. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 3 + tanf_gross_earned_income: 1_074 + tanf_gross_unearned_income: 0 + output: + # Limit: $581 * 1.85 = $1,074.85 + # Income: $1,074 <= $1,074.85 = true + ms_tanf_income_eligible: true + +- name: Case 9, family of 3 with income above limit. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 3 + tanf_gross_earned_income: 1_075 + tanf_gross_unearned_income: 0 + output: + # Limit: $581 * 1.85 = $1,074.85 + # Income: $1,075 > $1,074.85 = false + ms_tanf_income_eligible: false + +- name: Case 10, family of 4 with income below limit. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 4 + tanf_gross_earned_income: 1_000 + tanf_gross_unearned_income: 200 + output: + # Limit: $702 * 1.85 = $1,298.7 + # Income: $1,200 <= $1,298.7 = true + ms_tanf_income_eligible: true + +- name: Case 11, family of 4 with income above limit. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 4 + tanf_gross_earned_income: 1_000 + tanf_gross_unearned_income: 300 + output: + # Limit: $702 * 1.85 = $1,298.7 + # Income: $1,300 > $1,298.7 = false + ms_tanf_income_eligible: false + +- name: Case 12, not in Mississippi. + period: 2024-01 + input: + state_code: NY + spm_unit_size: 3 + tanf_gross_earned_income: 500 + tanf_gross_unearned_income: 0 + output: + # Not in MS, returns false (defined_for = MS) + ms_tanf_income_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_maximum_benefit.yaml b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_maximum_benefit.yaml new file mode 100644 index 00000000000..e7b5958fd52 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_maximum_benefit.yaml @@ -0,0 +1,95 @@ +# Mississippi TANF maximum benefit (payment standard) tests +# Per MS Code 43-17-5(1): +# - First person: $200 +# - Second person: $36 +# - Each additional person: $24 + +- name: Case 1, family of 1. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 1 + output: + # $200 (first person only) + ms_tanf_maximum_benefit: 200 + +- name: Case 2, family of 2. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 2 + output: + # $200 + $36 = $236 + ms_tanf_maximum_benefit: 236 + +- name: Case 3, family of 3. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 3 + output: + # $200 + $36 + $24 = $260 + ms_tanf_maximum_benefit: 260 + +- name: Case 4, family of 4. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 4 + output: + # $200 + $36 + $24 + $24 = $284 + ms_tanf_maximum_benefit: 284 + +- name: Case 5, family of 5. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 5 + output: + # $200 + $36 + ($24 * 3) = $308 + ms_tanf_maximum_benefit: 308 + +- name: Case 6, family of 6. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 6 + output: + # $200 + $36 + ($24 * 4) = $332 + ms_tanf_maximum_benefit: 332 + +- name: Case 7, family of 7. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 7 + output: + # $200 + $36 + ($24 * 5) = $356 + ms_tanf_maximum_benefit: 356 + +- name: Case 8, family of 8. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 8 + output: + # $200 + $36 + ($24 * 6) = $380 + ms_tanf_maximum_benefit: 380 + +- name: Case 9, family of 10. + period: 2024-01 + input: + state_code: MS + spm_unit_size: 10 + output: + # $200 + $36 + ($24 * 8) = $428 + ms_tanf_maximum_benefit: 428 + +- name: Case 10, not in Mississippi. + period: 2024-01 + input: + state_code: NY + spm_unit_size: 3 + output: + # Not in MS, returns 0 (defined_for = MS) + ms_tanf_maximum_benefit: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_resources_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_resources_eligible.yaml new file mode 100644 index 00000000000..d7b8c5ece2a --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_resources_eligible.yaml @@ -0,0 +1,66 @@ +# Mississippi TANF resources eligibility tests +# Resource limit: $2,000 for all households +# Effective date: July 1, 2019 + +- name: Case 1, zero resources. + period: 2024-01 + input: + state_code: MS + spm_unit_assets: 0 + output: + # $0 <= $2,000 = true + ms_tanf_resources_eligible: true + +- name: Case 2, resources well below limit. + period: 2024-01 + input: + state_code: MS + spm_unit_assets: 500 + output: + # $500 <= $2,000 = true + ms_tanf_resources_eligible: true + +- name: Case 3, resources below limit. + period: 2024-01 + input: + state_code: MS + spm_unit_assets: 1_500 + output: + # $1,500 <= $2,000 = true + ms_tanf_resources_eligible: true + +- name: Case 4, resources exactly at limit. + period: 2024-01 + input: + state_code: MS + spm_unit_assets: 2_000 + output: + # $2,000 <= $2,000 = true + ms_tanf_resources_eligible: true + +- name: Case 5, resources slightly above limit. + period: 2024-01 + input: + state_code: MS + spm_unit_assets: 2_001 + output: + # $2,001 > $2,000 = false + ms_tanf_resources_eligible: false + +- name: Case 6, resources well above limit. + period: 2024-01 + input: + state_code: MS + spm_unit_assets: 5_000 + output: + # $5,000 > $2,000 = false + ms_tanf_resources_eligible: false + +- name: Case 7, not in Mississippi. + period: 2024-01 + input: + state_code: NY + spm_unit_assets: 500 + output: + # Not in MS, returns false (defined_for = MS) + ms_tanf_resources_eligible: false diff --git a/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_eligible.py b/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_eligible.py new file mode 100644 index 00000000000..5fc4e31984e --- /dev/null +++ b/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_eligible.py @@ -0,0 +1,32 @@ +from policyengine_us.model_api import * + + +class ms_tanf_eligible(Variable): + value_type = bool + entity = SPMUnit + label = "Mississippi TANF eligibility" + definition_period = MONTH + defined_for = StateCode.MS + reference = ( + "https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-1/", + "https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19", + ) + + def formula(spm_unit, period, parameters): + # Use federal demographic eligibility baseline + demographic_eligible = spm_unit("is_demographic_tanf_eligible", period) + + # Use federal immigration eligibility baseline + immigration_eligible = ( + add(spm_unit, period, ["is_citizen_or_legal_immigrant"]) > 0 + ) + + income_eligible = spm_unit("ms_tanf_income_eligible", period) + resources_eligible = spm_unit("ms_tanf_resources_eligible", period) + + return ( + demographic_eligible + & immigration_eligible + & income_eligible + & resources_eligible + ) diff --git a/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_income_eligible.py b/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_income_eligible.py new file mode 100644 index 00000000000..ad25fc6c96e --- /dev/null +++ b/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_income_eligible.py @@ -0,0 +1,33 @@ +from policyengine_us.model_api import * + + +class ms_tanf_income_eligible(Variable): + value_type = bool + entity = SPMUnit + label = "Mississippi TANF income eligibility" + definition_period = MONTH + defined_for = StateCode.MS + reference = ( + "https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19", + "https://www.mdhs.ms.gov/help/tanf/applying-for-tanf/", + ) + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ms.dhs.tanf + + # Use federal baseline for gross income + gross_income = add( + spm_unit, + period, + ["tanf_gross_earned_income", "tanf_gross_unearned_income"], + ) + + # Get need standard based on household size (capped at table max) + size = spm_unit("spm_unit_size", period.this_year) + capped_size = min_(size, p.need_standard.max_table_size).astype(int) + need_standard = p.need_standard.amount[capped_size] + + # Gross income limit is 185% of need standard + gross_income_limit = need_standard * p.income.gross_income_limit_rate + + return gross_income <= gross_income_limit diff --git a/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_resources_eligible.py b/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_resources_eligible.py new file mode 100644 index 00000000000..13cc3e27181 --- /dev/null +++ b/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_resources_eligible.py @@ -0,0 +1,18 @@ +from policyengine_us.model_api import * + + +class ms_tanf_resources_eligible(Variable): + value_type = bool + entity = SPMUnit + label = "Mississippi TANF resources eligibility" + definition_period = MONTH + defined_for = StateCode.MS + reference = ( + "https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19", + "https://www.mdhs.ms.gov/help/tanf/", + ) + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ms.dhs.tanf.resources + household_assets = spm_unit("spm_unit_assets", period.this_year) + return household_assets <= p.limit diff --git a/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf.py b/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf.py new file mode 100644 index 00000000000..ae326a68a8c --- /dev/null +++ b/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf.py @@ -0,0 +1,19 @@ +from policyengine_us.model_api import * + + +class ms_tanf(Variable): + value_type = float + entity = SPMUnit + label = "Mississippi TANF" + unit = USD + definition_period = MONTH + defined_for = "ms_tanf_eligible" + reference = ( + "https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-5/", + "https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19", + ) + + def formula(spm_unit, period, parameters): + maximum_benefit = spm_unit("ms_tanf_maximum_benefit", period) + countable_income = spm_unit("ms_tanf_countable_income", period) + return max_(maximum_benefit - countable_income, 0) diff --git a/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf_countable_income.py b/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf_countable_income.py new file mode 100644 index 00000000000..72dbf769b8c --- /dev/null +++ b/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf_countable_income.py @@ -0,0 +1,18 @@ +from policyengine_us.model_api import * + + +class ms_tanf_countable_income(Variable): + value_type = float + entity = SPMUnit + label = "Mississippi TANF countable income" + unit = USD + definition_period = MONTH + defined_for = StateCode.MS + reference = ( + "https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19", + ) + # NOTE: Mississippi has 6-month and 3-month total earned income disregards + # that cannot be tracked in PolicyEngine. This simplified implementation + # uses gross income without those time-limited disregards. + + adds = ["tanf_gross_earned_income", "tanf_gross_unearned_income"] diff --git a/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf_maximum_benefit.py b/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf_maximum_benefit.py new file mode 100644 index 00000000000..1f3da6e9ec9 --- /dev/null +++ b/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf_maximum_benefit.py @@ -0,0 +1,25 @@ +from policyengine_us.model_api import * + + +class ms_tanf_maximum_benefit(Variable): + value_type = float + entity = SPMUnit + label = "Mississippi TANF maximum benefit" + unit = USD + definition_period = MONTH + defined_for = StateCode.MS + reference = ( + "https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-5/", + "https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19", + ) + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ms.dhs.tanf.payment_standard + size = spm_unit("spm_unit_size", period.this_year) + + # Per MS Code 43-17-5: $200 first person + $36 second + $24 each additional + first_person = p.first_person + second_person = where(size >= 2, p.second_person, 0) + additional_persons = max_(size - 2, 0) * p.additional_person + + return first_person + second_person + additional_persons diff --git a/sources/working_references.md b/sources/working_references.md new file mode 100644 index 00000000000..47f39b73262 --- /dev/null +++ b/sources/working_references.md @@ -0,0 +1,372 @@ +# Collected Documentation + +## Mississippi TANF Implementation +**Collected**: 2025-12-18 +**Implementation Task**: Document Mississippi's Temporary Assistance for Needy Families (TANF) program for PolicyEngine implementation + +--- + +## Official Program Name + +**Federal Program**: Temporary Assistance for Needy Families (TANF) +**State's Official Name**: Mississippi Temporary Assistance for Needy Families (TANF) +**Abbreviation**: TANF +**Agency**: Mississippi Department of Human Services (MDHS) +**Source**: Mississippi Code Section 43-17-1 + +**Variable Prefix**: `ms_tanf` + +--- + +## Legal Authority + +### Primary Statute +- **Mississippi Code Title 43, Chapter 17** + - Section 43-17-1: Program establishment + - Section 43-17-5: Amount of assistance (payment standards) + - URL: https://law.justia.com/codes/mississippi/title-43/chapter-17/ + +### Administrative Regulations +- **Mississippi Administrative Code Title 18, Part 19** + - Division of Economic Assistance TANF State Plan + - URL: https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 + +--- + +## Income Eligibility + +### Definition of "Needy Family" +A needy family is defined as a family with dependent child(ren) and an **average annual income at or below 185 percent of the need standard**. + +**Source**: Miss. Code. tit. 18, pt. 19 - https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 + +### Gross Income Limits by Household Size +The gross monthly income limits (185% of need standard) are: + +| Household Size | Maximum Monthly Gross Income | +|----------------|------------------------------| +| 1 | $627 | +| 2 | $851 | +| 3 | $1,074 | +| 4 | $1,298 | +| 5 | $1,522 | +| 6 | $1,746 | +| 7 | $1,970 | +| 8 | $2,194 | +| 9 | $2,417 | +| 10 | $2,641 | + +**Source**: Mississippi Department of Human Services - https://www.mdhs.ms.gov/help/tanf/applying-for-tanf/ + +### Need Standard (Calculated) +The Need Standard can be derived by dividing the gross income limits by 1.85: + +| Household Size | Need Standard (Monthly) | +|----------------|-------------------------| +| 1 | $339 | +| 2 | $460 | +| 3 | $581 | +| 4 | $702 | +| 5 | $823 | +| 6 | $944 | +| 7 | $1,065 | +| 8 | $1,186 | +| 9 | $1,307 | +| 10 | $1,428 | + +**Note**: For households larger than 10, add $75 to the requirements for each person above 10 and compute 185 percent of that figure, rounding down to the nearest dollar. + +**Source**: Miss. Code. tit. 18, pt. 19 - https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 + +### Income Limit Calculation +``` +Gross Income Limit = Need Standard x 1.85 +``` +**Implementation approach:** +- [x] Store the need standard amounts by household size +- [x] Store the 185% multiplier as a rate parameter (1.85) + +--- + +## Payment Standards (Maximum Benefit Amounts) + +### Statutory Payment Formula +Per Mississippi Code Section 43-17-5(1): +- **First person**: $200 per month +- **Second person**: $36 per month +- **Each additional person**: $24 per month + +**Source**: Mississippi Code 1972 Annotated at 43-17-5(1) - https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-5/ + +### Maximum Monthly Benefit by Household Size + +| Household Size | Calculation | Maximum Monthly Benefit | +|----------------|-------------|-------------------------| +| 1 | $200 | $200 | +| 2 | $200 + $36 | $236 | +| 3 | $200 + $36 + $24 | $260 | +| 4 | $200 + $36 + $24 + $24 | $284 | +| 5 | $200 + $36 + $24 + $24 + $24 | $308 | +| 6 | $200 + $36 + $24 + $24 + $24 + $24 | $332 | +| 7 | $200 + $36 + $24 + $24 + $24 + $24 + $24 | $356 | +| 8 | $200 + $36 + $24 + $24 + $24 + $24 + $24 + $24 | $380 | +| 9 | $200 + $36 + $24 + $24 + $24 + $24 + $24 + $24 + $24 | $404 | +| 10 | $200 + $36 + $24 + $24 + $24 + $24 + $24 + $24 + $24 + $24 | $428 | + +**Implementation approach:** +- [x] Store first person amount ($200) +- [x] Store second person amount ($36) +- [x] Store each additional person amount ($24) +- [x] Calculate benefit using formula: first + second + (additional * (size - 2)) + +--- + +## Resource Limits + +### Resource Limit Amount +**$2,000** for all TANF households + +**Effective Date**: July 1, 2019 + +**Exclusions**: +- Personal home (primary residence) +- Personal vehicle + +**Source**: Mississippi Department of Human Services - https://www.mdhs.ms.gov/help/tanf/ + +### Hope Act Changes +In 2017, the Mississippi Legislature passed House Bill 1090, "The Medicaid and Human Services Transparency and Fraud Prevention Act" (Hope Act). Under the Hope Act: +- Broad-Based Categorical Eligibility (BBCE) status is no longer permitted for most TANF households +- Effective July 1, 2019, all families applying for TANF are subject to evaluation of all household resources + +**Source**: Miss. Code. tit. 18, pt. 19 - https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 + +--- + +## Earned Income Disregards + +### Six-Month Total Earned Income Disregard +TANF recipients who find full-time employment may have their earned income **totally disregarded** for up to six (6) months. + +**Requirements:** +- Employment of **35 or more hours per week** +- Earnings at or above the **federal minimum wage** +- Must claim within 30 days of new approval or job start date + +**Source**: Miss. Code. tit. 18, pt. 19 - https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 + +### Three-Month Total Earned Income Disregard +Available when TANF case is subject to closure due to increased earnings. + +**Requirements:** +- Employment of **at least 25 hours per week** +- Earnings at or above the **federal minimum wage** +- Cannot be combined with six-month disregard +- Can be claimed again after 12-month consecutive break in assistance + +**Source**: Miss. Code. tit. 18, pt. 19 - https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 + +### Marriage Disregard +When a TANF recipient marries, the **new spouse's income and resources are disregarded for six months**. + +**Purpose**: Allows single parents who marry employed persons to continue receiving TANF benefits without immediately losing assistance. + +**Source**: Miss. Code. tit. 18, pt. 19 - https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 + +--- + +## Non-Financial Eligibility Requirements + +### Household Composition +- Must have at least one **child under 18 years of age** living in the home +- Child must be deprived of parental support due to: + - Incapacity of a parent + - Death of a parent + - Continued absence of a parent + - Unemployment of principal wage earner (two-parent families only) + +### Two-Parent Families +Two-parent families are eligible only if the principal wage earner: +- Is designated as "unemployed" +- Has not worked full-time for at least 30 days prior to receipt of TANF benefits + +### Citizenship/Immigration Status +- Must be a U.S. citizen or legal permanent resident +- Lawful permanent residents are only potentially eligible if they can be credited with 40 quarters of work (approximately 10 years) + +### School Attendance and Immunizations +- Children under age 7 must comply with immunization requirements +- Children ages 6 to 17 must attend school with satisfactory attendance +- Children age 18 in the Assistance Unit (full-time students) must have satisfactory school attendance +- **Sanction**: 25% monthly benefit reduction for non-compliance without good cause + +**Source**: Mississippi Code 43-17-5 and Miss. Code. tit. 18, pt. 19 + +--- + +## Family Benefit Cap + +Mississippi imposes a **family benefit cap** to prevent increases in assistance for new children coming into the family after the initial **ten (10) months of benefits**. + +**Exceptions apply** as defined in state law. + +**Source**: Miss. Code. tit. 18, pt. 19 - https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 + +--- + +## Benefit Calculation + +### Formula +``` +Benefit = Maximum Payment Standard - Countable Income +``` + +If countable income exceeds the payment standard, benefit = $0 + +### Determining Countable Income +**Note**: Mississippi's specific earned income disregard calculation (beyond the 6-month and 3-month total disregards) was not found in available HTML sources. The TANF Manual may contain additional details. + +Based on the total disregard structure: +- During disregard periods (6-month or 3-month), earned income is fully excluded +- Outside disregard periods, standard TANF income counting rules apply + +--- + +## Non-Simulatable Rules (Architecture Limitations) + +### Cannot Be Simulated - Requires Historical Tracking + +**Time Limit**: 60-month lifetime limit on TANF benefits +- The Department of Human Services shall deny TANF benefits to families which include an adult who has received TANF assistance for sixty (60) months, whether consecutive or not +- **CANNOT ENFORCE - requires benefit history tracking** + +**Earned Income Disregard Periods**: +- 6-month total disregard requires tracking employment start date and duration +- 3-month total disregard requires tracking when case would close due to earnings +- **CANNOT TRACK - requires employment history** + +**Marriage Disregard**: +- 6-month disregard of new spouse's income requires tracking marriage date +- **CANNOT TRACK - requires marital history** + +**Family Benefit Cap**: +- Requires tracking which children were born after 10 months of initial benefits +- **CANNOT ENFORCE - requires benefit and birth history** + +**Work Requirements**: +- Required after 24 months of assistance or when deemed work-ready +- Progressive sanctions for non-compliance +- **CANNOT ENFORCE - requires participation history** + +### Partially Simulatable +- **Earned Income Disregards**: Can implement assuming household qualifies, but cannot track time limits + +### Can Be Simulated +- [x] Current gross income eligibility test +- [x] Current resource eligibility test +- [x] Current benefit calculation (payment standard - countable income) +- [x] Current household composition requirements +- [x] Demographic eligibility (age of children) + +--- + +## Implementation Notes + +### Variables to Create +1. `ms_tanf` - Main benefit calculation variable +2. `ms_tanf_eligible` - Overall eligibility determination +3. `ms_tanf_income_eligible` - Gross income test (185% of need standard) +4. `ms_tanf_resources_eligible` - Resource limit test ($2,000) +5. `ms_tanf_maximum_benefit` - Payment standard by household size +6. `ms_tanf_countable_income` - Countable income for benefit calculation + +### Parameters to Create +1. `need_standard/amount.yaml` - Need standard by household size +2. `income/gross_income_limit_rate.yaml` - 185% multiplier +3. `payment_standard/first_person.yaml` - $200 +4. `payment_standard/second_person.yaml` - $36 +5. `payment_standard/additional_person.yaml` - $24 +6. `resources/limit.yaml` - $2,000 resource limit + +### Demographic Eligibility +**Implementation approach:** +- [x] Use federal demographic eligibility (minor child under 18) +- [ ] May need state-specific rules for two-parent unemployment definition + +### Immigration Eligibility +**Implementation approach:** +- [ ] Use federal immigration eligibility baseline +- [ ] Note: 40 quarters work requirement for LPRs (cannot track) + +--- + +## References for Metadata + +### For Parameters +```yaml +reference: + - title: "Mississippi Code Section 43-17-5(1)" + href: "https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-5/" + - title: "Miss. Code. tit. 18, pt. 19 - TANF State Plan" + href: "https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19" +``` + +### For Variables +```python +reference = ( + "https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-5/", + "https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19", +) +``` + +--- + +## PDFs for Future Reference + +The following PDFs contain additional information but could not be fully extracted: + +1. **Mississippi TANF Policy Manual (Volume III)** + - URL: https://www.mdhs.ms.gov/wp-content/uploads/2019/07/TANF-Manual-Revised_7.19.pdf + - Expected content: Detailed eligibility procedures, income calculation methodology, deduction amounts + - Key sections: Chapter 2 (Definitions), Section 4105 (Earned Income Disregards) + +2. **NCCP TANF Profile - Mississippi** + - URL: https://www.nccp.org/wp-content/uploads/2024/08/TANF-profile-Mississippi-.pdf + - Expected content: Summary of Mississippi TANF policies, comparison data + +3. **Mississippi TANF Eligibility Flyer** + - URL: https://www.mdhs.ms.gov/wp-content/uploads/2018/02/MDHS_TANF-Eligibility-Flyer.pdf + - Expected content: Quick reference for eligibility requirements + +4. **SPLC Mississippi TANF Recommendations** + - URL: https://www.splcenter.org/wp-content/uploads/files/policy-mississippi-tanf-recommendations.pdf + - Expected content: Policy analysis and recommendations + +5. **CBPP Mississippi TANF Spending Report** + - URL: https://www.cbpp.org/sites/default/files/atoms/files/tanf_spending_ms.pdf + - Expected content: TANF spending data and analysis + +6. **ACF Graphical Overview of State TANF Policies (July 2023)** + - URL: https://acf.gov/sites/default/files/documents/opre/opre-graphical-overview-tanf-policies-dec2024.pdf + - Expected content: Comparative state TANF policy data + +--- + +## Sources + +### Primary Sources +- [Mississippi Department of Human Services - TANF](https://www.mdhs.ms.gov/help/tanf/) +- [Mississippi Department of Human Services - Applying for TANF](https://www.mdhs.ms.gov/help/tanf/applying-for-tanf/) +- [Mississippi Administrative Code Title 18, Part 19](https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19) +- [Mississippi Administrative Code Title 18, Part 19 (Effective 4/14/2025)](https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19_v2) +- [Mississippi Code Section 43-17-1](https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-1/) +- [Mississippi Code Section 43-17-5](https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-5/) + +### Legislative Bills (for context on proposed changes) +- [HB 582 (2024) - TANF Program Changes](https://billstatus.ls.state.ms.us/documents/2024/html/HB/0500-0599/HB0582IN.htm) +- [HB 715 (2024)](https://billstatus.ls.state.ms.us/documents/2024/html/HB/0700-0799/HB0715IN.htm) +- [SB 2723 (2025)](https://billstatus.ls.state.ms.us/documents/2025/html/SB/2700-2799/SB2723IN.htm) + +### Comparative Resources +- [Urban Institute Welfare Rules Database](https://wrd.urban.org/policy-tables) +- [ACF TANF Resources](https://acf.gov/ofa/programs/temporary-assistance-needy-families-tanf) From 3bca1266a2c779dd7ae4f9fc8de6c67b9438533a Mon Sep 17 00:00:00 2001 From: Ziming Date: Tue, 23 Dec 2025 17:45:36 -0500 Subject: [PATCH 3/4] draft --- .../tanf/income/gross_income_limit_rate.yaml | 8 +- .../ms/dhs/tanf/need_standard/amount.yaml | 39 +- .../tanf/need_standard/max_table_size.yaml | 8 +- .../payment_standard/additional_person.yaml | 8 +- .../tanf/payment_standard/first_person.yaml | 11 +- .../tanf/payment_standard/second_person.yaml | 8 +- .../states/ms/dhs/tanf/resources/limit.yaml | 2 +- .../gov/states/ms/dhs/tanf/integration.yaml | 14 +- .../gov/states/ms/dhs/tanf/ms_tanf.yaml | 22 +- .../states/ms/dhs/tanf/ms_tanf_eligible.yaml | 16 +- .../ms/dhs/tanf/ms_tanf_income_eligible.yaml | 38 +- .../ms/dhs/tanf/ms_tanf_maximum_benefit.yaml | 42 +- .../dhs/tanf/ms_tanf_resources_eligible.yaml | 14 +- .../dhs/tanf/eligibility/ms_tanf_eligible.py | 1 + .../eligibility/ms_tanf_income_eligible.py | 1 + .../eligibility/ms_tanf_resources_eligible.py | 1 + .../gov/states/ms/dhs/tanf/ms_tanf.py | 2 +- .../ms/dhs/tanf/ms_tanf_countable_income.py | 1 + .../ms/dhs/tanf/ms_tanf_maximum_benefit.py | 5 +- sources/working_references.md | 372 ------------------ 20 files changed, 147 insertions(+), 466 deletions(-) delete mode 100644 sources/working_references.md diff --git a/policyengine_us/parameters/gov/states/ms/dhs/tanf/income/gross_income_limit_rate.yaml b/policyengine_us/parameters/gov/states/ms/dhs/tanf/income/gross_income_limit_rate.yaml index 4c40ec7d256..6ee864c7e41 100644 --- a/policyengine_us/parameters/gov/states/ms/dhs/tanf/income/gross_income_limit_rate.yaml +++ b/policyengine_us/parameters/gov/states/ms/dhs/tanf/income/gross_income_limit_rate.yaml @@ -1,14 +1,14 @@ description: Mississippi limits gross income to this share of the need standard under the Temporary Assistance for Needy Families program. values: - 2019-07-01: 1.85 + 2018-07-01: 1.85 metadata: unit: /1 period: month label: Mississippi TANF gross income limit rate reference: - - title: Miss. Code. tit. 18, pt. 19 - TANF State Plan + - title: Miss. Code. tit. 18, pt. 19 - TANF State Plan (185% of Need Standard) href: https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 - - title: Mississippi Department of Human Services - Applying for TANF - href: https://www.mdhs.ms.gov/help/tanf/applying-for-tanf/ + - title: MDHS TANF Eligibility Flyer (2018) - Shows 185% Requirements + href: https://www.mdhs.ms.gov/wp-content/uploads/2018/02/MDHS_TANF-Eligibility-Flyer.pdf diff --git a/policyengine_us/parameters/gov/states/ms/dhs/tanf/need_standard/amount.yaml b/policyengine_us/parameters/gov/states/ms/dhs/tanf/need_standard/amount.yaml index f4372864aaf..9828f9654e2 100644 --- a/policyengine_us/parameters/gov/states/ms/dhs/tanf/need_standard/amount.yaml +++ b/policyengine_us/parameters/gov/states/ms/dhs/tanf/need_standard/amount.yaml @@ -1,5 +1,4 @@ description: Mississippi sets this amount as the need standard under the Temporary Assistance for Needy Families program. -# NOTE: For households larger than 10, add $75 per person above 10 metadata: unit: currency-USD @@ -8,26 +7,40 @@ metadata: - range(1, 11) label: Mississippi TANF need standard amount reference: - - title: Miss. Code. tit. 18, pt. 19 - TANF State Plan - href: https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 + - title: MDHS TANF Eligibility Flyer (2018) - 100% Requirements Table + href: https://www.mdhs.ms.gov/wp-content/uploads/2018/02/MDHS_TANF-Eligibility-Flyer.pdf + - title: Mississippi Department of Human Services - Applying for TANF (Gross Income Limits, values derived by dividing by 1.85) + href: https://www.mdhs.ms.gov/help/tanf/applying-for-tanf/ +# 2018 values from MDHS Eligibility Flyer (100% Requirements = Need Standard) +# 2025 values derived from current MDHS website gross income limits / 1.85 1: - 2019-07-01: 339 + 2018-07-01: 218 + 2025-07-01: 339 2: - 2019-07-01: 460 + 2018-07-01: 293 + 2025-07-01: 460 3: - 2019-07-01: 581 + 2018-07-01: 368 + 2025-07-01: 581 4: - 2019-07-01: 702 + 2018-07-01: 443 + 2025-07-01: 702 5: - 2019-07-01: 823 + 2018-07-01: 518 + 2025-07-01: 823 6: - 2019-07-01: 944 + 2018-07-01: 593 + 2025-07-01: 944 7: - 2019-07-01: 1_065 + 2018-07-01: 668 + 2025-07-01: 1_065 8: - 2019-07-01: 1_186 + 2018-07-01: 743 + 2025-07-01: 1_186 9: - 2019-07-01: 1_307 + 2018-07-01: 818 + 2025-07-01: 1_307 10: - 2019-07-01: 1_428 + 2018-07-01: 893 + 2025-07-01: 1_428 diff --git a/policyengine_us/parameters/gov/states/ms/dhs/tanf/need_standard/max_table_size.yaml b/policyengine_us/parameters/gov/states/ms/dhs/tanf/need_standard/max_table_size.yaml index 4e367ef4934..94aa3f726c3 100644 --- a/policyengine_us/parameters/gov/states/ms/dhs/tanf/need_standard/max_table_size.yaml +++ b/policyengine_us/parameters/gov/states/ms/dhs/tanf/need_standard/max_table_size.yaml @@ -1,12 +1,14 @@ description: Mississippi caps need standard calculations at this household size under the Temporary Assistance for Needy Families program. values: - 2019-07-01: 10 + 2018-07-01: 10 metadata: unit: person period: year label: Mississippi TANF need standard maximum table size reference: - - title: Miss. Code. tit. 18, pt. 19 - TANF State Plan - href: https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 + - title: MDHS TANF Eligibility Flyer (2018) - Income Requirements Table (shows sizes 1-10) + href: https://www.mdhs.ms.gov/wp-content/uploads/2018/02/MDHS_TANF-Eligibility-Flyer.pdf + - title: Mississippi Department of Human Services - Applying for TANF (Income Limits Table shows sizes 1-10) + href: https://www.mdhs.ms.gov/help/tanf/applying-for-tanf/ diff --git a/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/additional_person.yaml b/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/additional_person.yaml index d6bc71c5d25..cd473cd71ce 100644 --- a/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/additional_person.yaml +++ b/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/additional_person.yaml @@ -1,14 +1,14 @@ description: Mississippi provides this amount for each additional person beyond the second under the Temporary Assistance for Needy Families program. values: - 2019-07-01: 24 + 2018-07-01: 24 metadata: unit: currency-USD period: month label: Mississippi TANF payment standard additional person reference: - - title: Mississippi Code Section 43-17-5(1) - href: https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-5/ - - title: Miss. Code. tit. 18, pt. 19 - TANF State Plan + - title: MDHS TANF Eligibility Flyer (2018) - Maximum TANF Grant Table + href: https://www.mdhs.ms.gov/wp-content/uploads/2018/02/MDHS_TANF-Eligibility-Flyer.pdf + - title: Miss. Code. tit. 18, pt. 19 - TANF State Plan (Payment Standards) href: https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 diff --git a/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/first_person.yaml b/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/first_person.yaml index 477831f3a18..2b99d80f67e 100644 --- a/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/first_person.yaml +++ b/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/first_person.yaml @@ -1,14 +1,17 @@ description: Mississippi provides this amount for the first person under the Temporary Assistance for Needy Families program. values: - 2019-07-01: 200 + 2018-07-01: 110 + 2021-05-01: 200 metadata: unit: currency-USD period: month label: Mississippi TANF payment standard first person reference: - - title: Mississippi Code Section 43-17-5(1) - href: https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-5/ - - title: Miss. Code. tit. 18, pt. 19 - TANF State Plan + - title: MDHS TANF Eligibility Flyer (2018) - Maximum TANF Grant Table + href: https://www.mdhs.ms.gov/wp-content/uploads/2018/02/MDHS_TANF-Eligibility-Flyer.pdf + - title: SB 2759 (2021) - TANF Benefit Increase (first person from $110 to $200) + href: https://billstatus.ls.state.ms.us/documents/2021/html/SB/2700-2799/SB2759SG.htm + - title: Miss. Code. tit. 18, pt. 19 - TANF State Plan (Payment Standards) href: https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 diff --git a/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/second_person.yaml b/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/second_person.yaml index a1cd503b9fa..0076deca747 100644 --- a/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/second_person.yaml +++ b/policyengine_us/parameters/gov/states/ms/dhs/tanf/payment_standard/second_person.yaml @@ -1,14 +1,14 @@ description: Mississippi provides this amount for the second person under the Temporary Assistance for Needy Families program. values: - 2019-07-01: 36 + 2018-07-01: 36 metadata: unit: currency-USD period: month label: Mississippi TANF payment standard second person reference: - - title: Mississippi Code Section 43-17-5(1) - href: https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-5/ - - title: Miss. Code. tit. 18, pt. 19 - TANF State Plan + - title: MDHS TANF Eligibility Flyer (2018) - Maximum TANF Grant Table + href: https://www.mdhs.ms.gov/wp-content/uploads/2018/02/MDHS_TANF-Eligibility-Flyer.pdf + - title: Miss. Code. tit. 18, pt. 19 - TANF State Plan (Payment Standards) href: https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 diff --git a/policyengine_us/parameters/gov/states/ms/dhs/tanf/resources/limit.yaml b/policyengine_us/parameters/gov/states/ms/dhs/tanf/resources/limit.yaml index 4fe5069ba88..34fd5bfa7ce 100644 --- a/policyengine_us/parameters/gov/states/ms/dhs/tanf/resources/limit.yaml +++ b/policyengine_us/parameters/gov/states/ms/dhs/tanf/resources/limit.yaml @@ -1,7 +1,7 @@ description: Mississippi limits resources to this amount under the Temporary Assistance for Needy Families program. values: - 2019-07-01: 2_000 + 2018-07-01: 2_000 metadata: unit: currency-USD diff --git a/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/integration.yaml index b6549afac51..ce0c68e42f9 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/integration.yaml @@ -9,7 +9,7 @@ # - Benefit: Maximum Payment Standard - Countable Income - name: Case 1, single parent with one child, no income, receives maximum benefit. - period: 2024-01 + period: 2026-01 input: people: person1: @@ -42,7 +42,7 @@ ms_tanf: 236 - name: Case 2, family of 3 with low earned income. - period: 2024-01 + period: 2026-01 input: people: person1: @@ -81,7 +81,7 @@ ms_tanf_eligible: true - name: Case 3, family of 3 with income at 185% threshold. - period: 2024-01 + period: 2026-01 input: people: person1: @@ -118,7 +118,7 @@ ms_tanf_eligible: true - name: Case 4, family of 3 with income above 185% threshold. - period: 2024-01 + period: 2026-01 input: people: person1: @@ -154,7 +154,7 @@ ms_tanf: 0 - name: Case 5, family of 4 with resources at limit. - period: 2024-01 + period: 2026-01 input: people: person1: @@ -192,7 +192,7 @@ ms_tanf: 284 - name: Case 6, family with resources exceeding limit. - period: 2024-01 + period: 2026-01 input: people: person1: @@ -223,7 +223,7 @@ ms_tanf: 0 - name: Case 7, large family of 5 with mixed income. - period: 2024-01 + period: 2026-01 input: people: person1: diff --git a/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf.yaml b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf.yaml index af61e97f72f..efa341c2bc3 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf.yaml @@ -4,7 +4,7 @@ # Must be eligible (ms_tanf_eligible) to receive any benefit - name: Case 1, ineligible household receives zero benefit. - period: 2024-01 + period: 2026-01 input: state_code: MS ms_tanf_eligible: false @@ -14,7 +14,7 @@ ms_tanf: 0 - name: Case 2, eligible household with no income receives maximum benefit. - period: 2024-01 + period: 2026-01 input: state_code: MS ms_tanf_eligible: true @@ -25,7 +25,7 @@ ms_tanf: 260 - name: Case 3, eligible household with countable income receives reduced benefit. - period: 2024-01 + period: 2026-01 input: state_code: MS ms_tanf_eligible: true @@ -36,7 +36,7 @@ ms_tanf: 160 - name: Case 4, eligible family of 2 with no income. - period: 2024-01 + period: 2026-01 input: state_code: MS ms_tanf_eligible: true @@ -47,7 +47,7 @@ ms_tanf: 236 - name: Case 5, eligible family of 2 with some income. - period: 2024-01 + period: 2026-01 input: state_code: MS ms_tanf_eligible: true @@ -58,7 +58,7 @@ ms_tanf: 86 - name: Case 6, eligible family of 4 with no income. - period: 2024-01 + period: 2026-01 input: state_code: MS ms_tanf_eligible: true @@ -69,7 +69,7 @@ ms_tanf: 284 - name: Case 7, eligible family of 4 with income. - period: 2024-01 + period: 2026-01 input: state_code: MS ms_tanf_eligible: true @@ -80,7 +80,7 @@ ms_tanf: 84 - name: Case 8, countable income equals maximum benefit. - period: 2024-01 + period: 2026-01 input: state_code: MS ms_tanf_eligible: true @@ -91,7 +91,7 @@ ms_tanf: 0 - name: Case 9, countable income exceeds maximum benefit. - period: 2024-01 + period: 2026-01 input: state_code: MS ms_tanf_eligible: true @@ -102,7 +102,7 @@ ms_tanf: 0 - name: Case 10, single person eligible with small income. - period: 2024-01 + period: 2026-01 input: state_code: MS ms_tanf_eligible: true @@ -113,7 +113,7 @@ ms_tanf: 150 - name: Case 11, high income reduces benefit to near zero. - period: 2024-01 + period: 2026-01 input: state_code: MS ms_tanf_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_eligible.yaml index 2c6f3fc68f0..c644c446aea 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_eligible.yaml @@ -6,7 +6,7 @@ # - Meets resources test (ms_tanf_resources_eligible) - name: Case 1, eligible when all conditions met. - period: 2024-01 + period: 2026-01 input: state_code: MS is_person_demographic_tanf_eligible: true @@ -16,7 +16,7 @@ ms_tanf_eligible: true - name: Case 2, ineligible when not in Mississippi. - period: 2024-01 + period: 2026-01 input: state_code: NY is_person_demographic_tanf_eligible: true @@ -26,7 +26,7 @@ ms_tanf_eligible: false - name: Case 3, ineligible when not demographically eligible. - period: 2024-01 + period: 2026-01 input: state_code: MS is_person_demographic_tanf_eligible: false @@ -36,7 +36,7 @@ ms_tanf_eligible: false - name: Case 4, ineligible when income test fails. - period: 2024-01 + period: 2026-01 input: state_code: MS is_person_demographic_tanf_eligible: true @@ -46,7 +46,7 @@ ms_tanf_eligible: false - name: Case 5, ineligible when resources test fails. - period: 2024-01 + period: 2026-01 input: state_code: MS is_person_demographic_tanf_eligible: true @@ -56,7 +56,7 @@ ms_tanf_eligible: false - name: Case 6, ineligible when all tests fail. - period: 2024-01 + period: 2026-01 input: state_code: NY is_person_demographic_tanf_eligible: false @@ -66,7 +66,7 @@ ms_tanf_eligible: false - name: Case 7, ineligible when income and resources fail. - period: 2024-01 + period: 2026-01 input: state_code: MS is_person_demographic_tanf_eligible: true @@ -76,7 +76,7 @@ ms_tanf_eligible: false - name: Case 8, ineligible when demographic and resources fail. - period: 2024-01 + period: 2026-01 input: state_code: MS is_person_demographic_tanf_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_income_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_income_eligible.yaml index a461500d85f..a2622b0e44c 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_income_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_income_eligible.yaml @@ -4,7 +4,7 @@ # Income limits by size: 1=$627, 2=$851, 3=$1,074, 4=$1,298 - name: Case 1, single person with zero income. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_size: 1 @@ -15,7 +15,7 @@ ms_tanf_income_eligible: true - name: Case 2, single person with income at limit. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_size: 1 @@ -27,7 +27,7 @@ ms_tanf_income_eligible: true - name: Case 3, single person with income above limit. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_size: 1 @@ -39,7 +39,7 @@ ms_tanf_income_eligible: false - name: Case 4, family of 2 with income below limit. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_size: 2 @@ -51,7 +51,7 @@ ms_tanf_income_eligible: true - name: Case 5, family of 2 with income at limit. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_size: 2 @@ -63,7 +63,7 @@ ms_tanf_income_eligible: true - name: Case 6, family of 2 with income above limit. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_size: 2 @@ -75,7 +75,7 @@ ms_tanf_income_eligible: false - name: Case 7, family of 3 with income below limit. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_size: 3 @@ -87,7 +87,7 @@ ms_tanf_income_eligible: true - name: Case 8, family of 3 with income at limit. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_size: 3 @@ -99,7 +99,7 @@ ms_tanf_income_eligible: true - name: Case 9, family of 3 with income above limit. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_size: 3 @@ -111,7 +111,7 @@ ms_tanf_income_eligible: false - name: Case 10, family of 4 with income below limit. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_size: 4 @@ -123,7 +123,7 @@ ms_tanf_income_eligible: true - name: Case 11, family of 4 with income above limit. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_size: 4 @@ -134,8 +134,20 @@ # Income: $1,300 > $1,298.7 = false ms_tanf_income_eligible: false -- name: Case 12, not in Mississippi. - period: 2024-01 +- name: Case 12, family of 11 need standard capped at size 10. + period: 2026-01 + input: + state_code: MS + spm_unit_size: 11 + tanf_gross_earned_income: 2_641 + tanf_gross_unearned_income: 0 + output: + # Limit: $1,428 * 1.85 = $2,641.80 (uses size 10 need standard) + # Income: $2,641 <= $2,641.80 = true + ms_tanf_income_eligible: true + +- name: Case 13, not in Mississippi. + period: 2026-01 input: state_code: NY spm_unit_size: 3 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_maximum_benefit.yaml b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_maximum_benefit.yaml index e7b5958fd52..c8dd03647ea 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_maximum_benefit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_maximum_benefit.yaml @@ -5,7 +5,7 @@ # - Each additional person: $24 - name: Case 1, family of 1. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_size: 1 @@ -14,7 +14,7 @@ ms_tanf_maximum_benefit: 200 - name: Case 2, family of 2. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_size: 2 @@ -23,7 +23,7 @@ ms_tanf_maximum_benefit: 236 - name: Case 3, family of 3. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_size: 3 @@ -32,7 +32,7 @@ ms_tanf_maximum_benefit: 260 - name: Case 4, family of 4. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_size: 4 @@ -41,7 +41,7 @@ ms_tanf_maximum_benefit: 284 - name: Case 5, family of 5. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_size: 5 @@ -50,7 +50,7 @@ ms_tanf_maximum_benefit: 308 - name: Case 6, family of 6. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_size: 6 @@ -59,7 +59,7 @@ ms_tanf_maximum_benefit: 332 - name: Case 7, family of 7. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_size: 7 @@ -68,7 +68,7 @@ ms_tanf_maximum_benefit: 356 - name: Case 8, family of 8. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_size: 8 @@ -76,8 +76,17 @@ # $200 + $36 + ($24 * 6) = $380 ms_tanf_maximum_benefit: 380 -- name: Case 9, family of 10. - period: 2024-01 +- name: Case 9, family of 9. + period: 2026-01 + input: + state_code: MS + spm_unit_size: 9 + output: + # $200 + $36 + ($24 * 7) = $404 + ms_tanf_maximum_benefit: 404 + +- name: Case 10, family of 10. + period: 2026-01 input: state_code: MS spm_unit_size: 10 @@ -85,8 +94,17 @@ # $200 + $36 + ($24 * 8) = $428 ms_tanf_maximum_benefit: 428 -- name: Case 10, not in Mississippi. - period: 2024-01 +- name: Case 11, family of 11. + period: 2026-01 + input: + state_code: MS + spm_unit_size: 11 + output: + # $200 + $36 + ($24 * 9) = $452 + ms_tanf_maximum_benefit: 452 + +- name: Case 12, not in Mississippi. + period: 2026-01 input: state_code: NY spm_unit_size: 3 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_resources_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_resources_eligible.yaml index d7b8c5ece2a..833dd23510b 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_resources_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ms/dhs/tanf/ms_tanf_resources_eligible.yaml @@ -3,7 +3,7 @@ # Effective date: July 1, 2019 - name: Case 1, zero resources. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_assets: 0 @@ -12,7 +12,7 @@ ms_tanf_resources_eligible: true - name: Case 2, resources well below limit. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_assets: 500 @@ -21,7 +21,7 @@ ms_tanf_resources_eligible: true - name: Case 3, resources below limit. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_assets: 1_500 @@ -30,7 +30,7 @@ ms_tanf_resources_eligible: true - name: Case 4, resources exactly at limit. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_assets: 2_000 @@ -39,7 +39,7 @@ ms_tanf_resources_eligible: true - name: Case 5, resources slightly above limit. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_assets: 2_001 @@ -48,7 +48,7 @@ ms_tanf_resources_eligible: false - name: Case 6, resources well above limit. - period: 2024-01 + period: 2026-01 input: state_code: MS spm_unit_assets: 5_000 @@ -57,7 +57,7 @@ ms_tanf_resources_eligible: false - name: Case 7, not in Mississippi. - period: 2024-01 + period: 2026-01 input: state_code: NY spm_unit_assets: 500 diff --git a/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_eligible.py b/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_eligible.py index 5fc4e31984e..bc85c924011 100644 --- a/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_eligible.py +++ b/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_eligible.py @@ -8,6 +8,7 @@ class ms_tanf_eligible(Variable): definition_period = MONTH defined_for = StateCode.MS reference = ( + "https://www.mdhs.ms.gov/wp-content/uploads/2018/02/MDHS_TANF-Eligibility-Flyer.pdf", "https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-1/", "https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19", ) diff --git a/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_income_eligible.py b/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_income_eligible.py index ad25fc6c96e..b1b08eb2f29 100644 --- a/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_income_eligible.py +++ b/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_income_eligible.py @@ -8,6 +8,7 @@ class ms_tanf_income_eligible(Variable): definition_period = MONTH defined_for = StateCode.MS reference = ( + "https://www.mdhs.ms.gov/wp-content/uploads/2018/02/MDHS_TANF-Eligibility-Flyer.pdf", "https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19", "https://www.mdhs.ms.gov/help/tanf/applying-for-tanf/", ) diff --git a/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_resources_eligible.py b/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_resources_eligible.py index 13cc3e27181..78c88b87091 100644 --- a/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_resources_eligible.py +++ b/policyengine_us/variables/gov/states/ms/dhs/tanf/eligibility/ms_tanf_resources_eligible.py @@ -8,6 +8,7 @@ class ms_tanf_resources_eligible(Variable): definition_period = MONTH defined_for = StateCode.MS reference = ( + "https://www.mdhs.ms.gov/wp-content/uploads/2018/02/MDHS_TANF-Eligibility-Flyer.pdf", "https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19", "https://www.mdhs.ms.gov/help/tanf/", ) diff --git a/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf.py b/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf.py index ae326a68a8c..34f9ba67265 100644 --- a/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf.py +++ b/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf.py @@ -9,7 +9,7 @@ class ms_tanf(Variable): definition_period = MONTH defined_for = "ms_tanf_eligible" reference = ( - "https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-5/", + "https://www.mdhs.ms.gov/wp-content/uploads/2018/02/MDHS_TANF-Eligibility-Flyer.pdf", "https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19", ) diff --git a/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf_countable_income.py b/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf_countable_income.py index 72dbf769b8c..b5eed6bf585 100644 --- a/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf_countable_income.py +++ b/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf_countable_income.py @@ -9,6 +9,7 @@ class ms_tanf_countable_income(Variable): definition_period = MONTH defined_for = StateCode.MS reference = ( + "https://www.mdhs.ms.gov/wp-content/uploads/2018/02/MDHS_TANF-Eligibility-Flyer.pdf", "https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19", ) # NOTE: Mississippi has 6-month and 3-month total earned income disregards diff --git a/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf_maximum_benefit.py b/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf_maximum_benefit.py index 1f3da6e9ec9..b8c322e976a 100644 --- a/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf_maximum_benefit.py +++ b/policyengine_us/variables/gov/states/ms/dhs/tanf/ms_tanf_maximum_benefit.py @@ -9,7 +9,8 @@ class ms_tanf_maximum_benefit(Variable): definition_period = MONTH defined_for = StateCode.MS reference = ( - "https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-5/", + "https://www.mdhs.ms.gov/wp-content/uploads/2018/02/MDHS_TANF-Eligibility-Flyer.pdf", + "https://billstatus.ls.state.ms.us/documents/2021/html/SB/2700-2799/SB2759SG.htm", "https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19", ) @@ -17,7 +18,7 @@ def formula(spm_unit, period, parameters): p = parameters(period).gov.states.ms.dhs.tanf.payment_standard size = spm_unit("spm_unit_size", period.this_year) - # Per MS Code 43-17-5: $200 first person + $36 second + $24 each additional + # Payment standard: first_person + second_person (if size >= 2) + additional_person * (size - 2) first_person = p.first_person second_person = where(size >= 2, p.second_person, 0) additional_persons = max_(size - 2, 0) * p.additional_person diff --git a/sources/working_references.md b/sources/working_references.md deleted file mode 100644 index 47f39b73262..00000000000 --- a/sources/working_references.md +++ /dev/null @@ -1,372 +0,0 @@ -# Collected Documentation - -## Mississippi TANF Implementation -**Collected**: 2025-12-18 -**Implementation Task**: Document Mississippi's Temporary Assistance for Needy Families (TANF) program for PolicyEngine implementation - ---- - -## Official Program Name - -**Federal Program**: Temporary Assistance for Needy Families (TANF) -**State's Official Name**: Mississippi Temporary Assistance for Needy Families (TANF) -**Abbreviation**: TANF -**Agency**: Mississippi Department of Human Services (MDHS) -**Source**: Mississippi Code Section 43-17-1 - -**Variable Prefix**: `ms_tanf` - ---- - -## Legal Authority - -### Primary Statute -- **Mississippi Code Title 43, Chapter 17** - - Section 43-17-1: Program establishment - - Section 43-17-5: Amount of assistance (payment standards) - - URL: https://law.justia.com/codes/mississippi/title-43/chapter-17/ - -### Administrative Regulations -- **Mississippi Administrative Code Title 18, Part 19** - - Division of Economic Assistance TANF State Plan - - URL: https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 - ---- - -## Income Eligibility - -### Definition of "Needy Family" -A needy family is defined as a family with dependent child(ren) and an **average annual income at or below 185 percent of the need standard**. - -**Source**: Miss. Code. tit. 18, pt. 19 - https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 - -### Gross Income Limits by Household Size -The gross monthly income limits (185% of need standard) are: - -| Household Size | Maximum Monthly Gross Income | -|----------------|------------------------------| -| 1 | $627 | -| 2 | $851 | -| 3 | $1,074 | -| 4 | $1,298 | -| 5 | $1,522 | -| 6 | $1,746 | -| 7 | $1,970 | -| 8 | $2,194 | -| 9 | $2,417 | -| 10 | $2,641 | - -**Source**: Mississippi Department of Human Services - https://www.mdhs.ms.gov/help/tanf/applying-for-tanf/ - -### Need Standard (Calculated) -The Need Standard can be derived by dividing the gross income limits by 1.85: - -| Household Size | Need Standard (Monthly) | -|----------------|-------------------------| -| 1 | $339 | -| 2 | $460 | -| 3 | $581 | -| 4 | $702 | -| 5 | $823 | -| 6 | $944 | -| 7 | $1,065 | -| 8 | $1,186 | -| 9 | $1,307 | -| 10 | $1,428 | - -**Note**: For households larger than 10, add $75 to the requirements for each person above 10 and compute 185 percent of that figure, rounding down to the nearest dollar. - -**Source**: Miss. Code. tit. 18, pt. 19 - https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 - -### Income Limit Calculation -``` -Gross Income Limit = Need Standard x 1.85 -``` -**Implementation approach:** -- [x] Store the need standard amounts by household size -- [x] Store the 185% multiplier as a rate parameter (1.85) - ---- - -## Payment Standards (Maximum Benefit Amounts) - -### Statutory Payment Formula -Per Mississippi Code Section 43-17-5(1): -- **First person**: $200 per month -- **Second person**: $36 per month -- **Each additional person**: $24 per month - -**Source**: Mississippi Code 1972 Annotated at 43-17-5(1) - https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-5/ - -### Maximum Monthly Benefit by Household Size - -| Household Size | Calculation | Maximum Monthly Benefit | -|----------------|-------------|-------------------------| -| 1 | $200 | $200 | -| 2 | $200 + $36 | $236 | -| 3 | $200 + $36 + $24 | $260 | -| 4 | $200 + $36 + $24 + $24 | $284 | -| 5 | $200 + $36 + $24 + $24 + $24 | $308 | -| 6 | $200 + $36 + $24 + $24 + $24 + $24 | $332 | -| 7 | $200 + $36 + $24 + $24 + $24 + $24 + $24 | $356 | -| 8 | $200 + $36 + $24 + $24 + $24 + $24 + $24 + $24 | $380 | -| 9 | $200 + $36 + $24 + $24 + $24 + $24 + $24 + $24 + $24 | $404 | -| 10 | $200 + $36 + $24 + $24 + $24 + $24 + $24 + $24 + $24 + $24 | $428 | - -**Implementation approach:** -- [x] Store first person amount ($200) -- [x] Store second person amount ($36) -- [x] Store each additional person amount ($24) -- [x] Calculate benefit using formula: first + second + (additional * (size - 2)) - ---- - -## Resource Limits - -### Resource Limit Amount -**$2,000** for all TANF households - -**Effective Date**: July 1, 2019 - -**Exclusions**: -- Personal home (primary residence) -- Personal vehicle - -**Source**: Mississippi Department of Human Services - https://www.mdhs.ms.gov/help/tanf/ - -### Hope Act Changes -In 2017, the Mississippi Legislature passed House Bill 1090, "The Medicaid and Human Services Transparency and Fraud Prevention Act" (Hope Act). Under the Hope Act: -- Broad-Based Categorical Eligibility (BBCE) status is no longer permitted for most TANF households -- Effective July 1, 2019, all families applying for TANF are subject to evaluation of all household resources - -**Source**: Miss. Code. tit. 18, pt. 19 - https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 - ---- - -## Earned Income Disregards - -### Six-Month Total Earned Income Disregard -TANF recipients who find full-time employment may have their earned income **totally disregarded** for up to six (6) months. - -**Requirements:** -- Employment of **35 or more hours per week** -- Earnings at or above the **federal minimum wage** -- Must claim within 30 days of new approval or job start date - -**Source**: Miss. Code. tit. 18, pt. 19 - https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 - -### Three-Month Total Earned Income Disregard -Available when TANF case is subject to closure due to increased earnings. - -**Requirements:** -- Employment of **at least 25 hours per week** -- Earnings at or above the **federal minimum wage** -- Cannot be combined with six-month disregard -- Can be claimed again after 12-month consecutive break in assistance - -**Source**: Miss. Code. tit. 18, pt. 19 - https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 - -### Marriage Disregard -When a TANF recipient marries, the **new spouse's income and resources are disregarded for six months**. - -**Purpose**: Allows single parents who marry employed persons to continue receiving TANF benefits without immediately losing assistance. - -**Source**: Miss. Code. tit. 18, pt. 19 - https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 - ---- - -## Non-Financial Eligibility Requirements - -### Household Composition -- Must have at least one **child under 18 years of age** living in the home -- Child must be deprived of parental support due to: - - Incapacity of a parent - - Death of a parent - - Continued absence of a parent - - Unemployment of principal wage earner (two-parent families only) - -### Two-Parent Families -Two-parent families are eligible only if the principal wage earner: -- Is designated as "unemployed" -- Has not worked full-time for at least 30 days prior to receipt of TANF benefits - -### Citizenship/Immigration Status -- Must be a U.S. citizen or legal permanent resident -- Lawful permanent residents are only potentially eligible if they can be credited with 40 quarters of work (approximately 10 years) - -### School Attendance and Immunizations -- Children under age 7 must comply with immunization requirements -- Children ages 6 to 17 must attend school with satisfactory attendance -- Children age 18 in the Assistance Unit (full-time students) must have satisfactory school attendance -- **Sanction**: 25% monthly benefit reduction for non-compliance without good cause - -**Source**: Mississippi Code 43-17-5 and Miss. Code. tit. 18, pt. 19 - ---- - -## Family Benefit Cap - -Mississippi imposes a **family benefit cap** to prevent increases in assistance for new children coming into the family after the initial **ten (10) months of benefits**. - -**Exceptions apply** as defined in state law. - -**Source**: Miss. Code. tit. 18, pt. 19 - https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19 - ---- - -## Benefit Calculation - -### Formula -``` -Benefit = Maximum Payment Standard - Countable Income -``` - -If countable income exceeds the payment standard, benefit = $0 - -### Determining Countable Income -**Note**: Mississippi's specific earned income disregard calculation (beyond the 6-month and 3-month total disregards) was not found in available HTML sources. The TANF Manual may contain additional details. - -Based on the total disregard structure: -- During disregard periods (6-month or 3-month), earned income is fully excluded -- Outside disregard periods, standard TANF income counting rules apply - ---- - -## Non-Simulatable Rules (Architecture Limitations) - -### Cannot Be Simulated - Requires Historical Tracking - -**Time Limit**: 60-month lifetime limit on TANF benefits -- The Department of Human Services shall deny TANF benefits to families which include an adult who has received TANF assistance for sixty (60) months, whether consecutive or not -- **CANNOT ENFORCE - requires benefit history tracking** - -**Earned Income Disregard Periods**: -- 6-month total disregard requires tracking employment start date and duration -- 3-month total disregard requires tracking when case would close due to earnings -- **CANNOT TRACK - requires employment history** - -**Marriage Disregard**: -- 6-month disregard of new spouse's income requires tracking marriage date -- **CANNOT TRACK - requires marital history** - -**Family Benefit Cap**: -- Requires tracking which children were born after 10 months of initial benefits -- **CANNOT ENFORCE - requires benefit and birth history** - -**Work Requirements**: -- Required after 24 months of assistance or when deemed work-ready -- Progressive sanctions for non-compliance -- **CANNOT ENFORCE - requires participation history** - -### Partially Simulatable -- **Earned Income Disregards**: Can implement assuming household qualifies, but cannot track time limits - -### Can Be Simulated -- [x] Current gross income eligibility test -- [x] Current resource eligibility test -- [x] Current benefit calculation (payment standard - countable income) -- [x] Current household composition requirements -- [x] Demographic eligibility (age of children) - ---- - -## Implementation Notes - -### Variables to Create -1. `ms_tanf` - Main benefit calculation variable -2. `ms_tanf_eligible` - Overall eligibility determination -3. `ms_tanf_income_eligible` - Gross income test (185% of need standard) -4. `ms_tanf_resources_eligible` - Resource limit test ($2,000) -5. `ms_tanf_maximum_benefit` - Payment standard by household size -6. `ms_tanf_countable_income` - Countable income for benefit calculation - -### Parameters to Create -1. `need_standard/amount.yaml` - Need standard by household size -2. `income/gross_income_limit_rate.yaml` - 185% multiplier -3. `payment_standard/first_person.yaml` - $200 -4. `payment_standard/second_person.yaml` - $36 -5. `payment_standard/additional_person.yaml` - $24 -6. `resources/limit.yaml` - $2,000 resource limit - -### Demographic Eligibility -**Implementation approach:** -- [x] Use federal demographic eligibility (minor child under 18) -- [ ] May need state-specific rules for two-parent unemployment definition - -### Immigration Eligibility -**Implementation approach:** -- [ ] Use federal immigration eligibility baseline -- [ ] Note: 40 quarters work requirement for LPRs (cannot track) - ---- - -## References for Metadata - -### For Parameters -```yaml -reference: - - title: "Mississippi Code Section 43-17-5(1)" - href: "https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-5/" - - title: "Miss. Code. tit. 18, pt. 19 - TANF State Plan" - href: "https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19" -``` - -### For Variables -```python -reference = ( - "https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-5/", - "https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19", -) -``` - ---- - -## PDFs for Future Reference - -The following PDFs contain additional information but could not be fully extracted: - -1. **Mississippi TANF Policy Manual (Volume III)** - - URL: https://www.mdhs.ms.gov/wp-content/uploads/2019/07/TANF-Manual-Revised_7.19.pdf - - Expected content: Detailed eligibility procedures, income calculation methodology, deduction amounts - - Key sections: Chapter 2 (Definitions), Section 4105 (Earned Income Disregards) - -2. **NCCP TANF Profile - Mississippi** - - URL: https://www.nccp.org/wp-content/uploads/2024/08/TANF-profile-Mississippi-.pdf - - Expected content: Summary of Mississippi TANF policies, comparison data - -3. **Mississippi TANF Eligibility Flyer** - - URL: https://www.mdhs.ms.gov/wp-content/uploads/2018/02/MDHS_TANF-Eligibility-Flyer.pdf - - Expected content: Quick reference for eligibility requirements - -4. **SPLC Mississippi TANF Recommendations** - - URL: https://www.splcenter.org/wp-content/uploads/files/policy-mississippi-tanf-recommendations.pdf - - Expected content: Policy analysis and recommendations - -5. **CBPP Mississippi TANF Spending Report** - - URL: https://www.cbpp.org/sites/default/files/atoms/files/tanf_spending_ms.pdf - - Expected content: TANF spending data and analysis - -6. **ACF Graphical Overview of State TANF Policies (July 2023)** - - URL: https://acf.gov/sites/default/files/documents/opre/opre-graphical-overview-tanf-policies-dec2024.pdf - - Expected content: Comparative state TANF policy data - ---- - -## Sources - -### Primary Sources -- [Mississippi Department of Human Services - TANF](https://www.mdhs.ms.gov/help/tanf/) -- [Mississippi Department of Human Services - Applying for TANF](https://www.mdhs.ms.gov/help/tanf/applying-for-tanf/) -- [Mississippi Administrative Code Title 18, Part 19](https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19) -- [Mississippi Administrative Code Title 18, Part 19 (Effective 4/14/2025)](https://www.law.cornell.edu/regulations/mississippi/Miss-Code-tit-18-pt-19_v2) -- [Mississippi Code Section 43-17-1](https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-1/) -- [Mississippi Code Section 43-17-5](https://law.justia.com/codes/mississippi/title-43/chapter-17/section-43-17-5/) - -### Legislative Bills (for context on proposed changes) -- [HB 582 (2024) - TANF Program Changes](https://billstatus.ls.state.ms.us/documents/2024/html/HB/0500-0599/HB0582IN.htm) -- [HB 715 (2024)](https://billstatus.ls.state.ms.us/documents/2024/html/HB/0700-0799/HB0715IN.htm) -- [SB 2723 (2025)](https://billstatus.ls.state.ms.us/documents/2025/html/SB/2700-2799/SB2723IN.htm) - -### Comparative Resources -- [Urban Institute Welfare Rules Database](https://wrd.urban.org/policy-tables) -- [ACF TANF Resources](https://acf.gov/ofa/programs/temporary-assistance-needy-families-tanf) From 757d0ecaf862b9506490ce6461f232b232ec2de5 Mon Sep 17 00:00:00 2001 From: Ziming Date: Tue, 23 Dec 2025 17:46:08 -0500 Subject: [PATCH 4/4] uv --- uv.lock | 137 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 68 insertions(+), 69 deletions(-) diff --git a/uv.lock b/uv.lock index 0c06d6e488c..c2c7e2219e5 100644 --- a/uv.lock +++ b/uv.lock @@ -586,7 +586,7 @@ version = "3.15.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4d/6a/0d79de0b025aa85dc8864de8e97659c94cf3d23148394a954dc5ca52f8c8/h5py-3.15.1.tar.gz", hash = "sha256:c86e3ed45c4473564de55aa83b6fc9e5ead86578773dfbd93047380042e26b69", size = 426236, upload-time = "2025-10-16T10:35:27.404Z" } wheels = [ @@ -714,14 +714,14 @@ wheels = [ [[package]] name = "importlib-metadata" -version = "8.7.0" +version = "8.7.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "zipp" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/76/66/650a33bd90f786193e4de4b3ad86ea60b53c89b669a5c7be931fac31cdb0/importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000", size = 56641, upload-time = "2025-04-27T15:29:01.736Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd", size = 27656, upload-time = "2025-04-27T15:29:00.214Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151", size = 27865, upload-time = "2025-12-21T10:00:18.329Z" }, ] [[package]] @@ -1079,7 +1079,7 @@ version = "1.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "pandas" }, ] sdist = { url = "https://files.pythonhosted.org/packages/31/e9/7f77ee19b2d3dcdb561ceaeb915ef6a944eb315412d0e8065c12817b7ff4/microdf_python-1.1.1.tar.gz", hash = "sha256:97dd0cb8562d98a32bbd35861719ae565544143e2ad8a462d6f6261058d9c469", size = 17290, upload-time = "2025-12-01T14:13:57.131Z" } @@ -1089,19 +1089,19 @@ wheels = [ [[package]] name = "mistune" -version = "3.1.4" +version = "3.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d7/02/a7fb8b21d4d55ac93cdcde9d3638da5dd0ebdd3a4fed76c7725e10b81cbe/mistune-3.1.4.tar.gz", hash = "sha256:b5a7f801d389f724ec702840c11d8fc48f2b33519102fc7ee739e8177b672164", size = 94588, upload-time = "2025-08-29T07:20:43.594Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/55/d01f0c4b45ade6536c51170b9043db8b2ec6ddf4a35c7ea3f5f559ac935b/mistune-3.2.0.tar.gz", hash = "sha256:708487c8a8cdd99c9d90eb3ed4c3ed961246ff78ac82f03418f5183ab70e398a", size = 95467, upload-time = "2025-12-23T11:36:34.994Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/f0/8282d9641415e9e33df173516226b404d367a0fc55e1a60424a152913abc/mistune-3.1.4-py3-none-any.whl", hash = "sha256:93691da911e5d9d2e23bc54472892aff676df27a75274962ff9edc210364266d", size = 53481, upload-time = "2025-08-29T07:20:42.218Z" }, + { url = "https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl", hash = "sha256:febdc629a3c78616b94393c6580551e0e34cc289987ec6c35ed3f4be42d0eee1", size = 53598, upload-time = "2025-12-23T11:36:33.211Z" }, ] [[package]] name = "nbclient" -version = "0.10.3" +version = "0.10.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-client" }, @@ -1109,9 +1109,9 @@ dependencies = [ { name = "nbformat" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8d/f3/1f6cf2ede4b026bc5f0b424cb41adf22f9c804e90a4dbd4fdb42291a35d5/nbclient-0.10.3.tar.gz", hash = "sha256:0baf171ee246e3bb2391da0635e719f27dc77d99aef59e0b04dcb935ee04c575", size = 62564, upload-time = "2025-12-19T15:50:09.331Z" } +sdist = { url = "https://files.pythonhosted.org/packages/56/91/1c1d5a4b9a9ebba2b4e32b8c852c2975c872aec1fe42ab5e516b2cecd193/nbclient-0.10.4.tar.gz", hash = "sha256:1e54091b16e6da39e297b0ece3e10f6f29f4ac4e8ee515d29f8a7099bd6553c9", size = 62554, upload-time = "2025-12-23T07:45:46.369Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b2/77/0c73678f5260501a271fd7342bee5d639440f2e9e07d590f1100a056d87c/nbclient-0.10.3-py3-none-any.whl", hash = "sha256:39e9bd403504dd2484dd0fd25235bb6a683ce8cd9873356e40d880696adc9e35", size = 25473, upload-time = "2025-12-19T15:50:07.671Z" }, + { url = "https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl", hash = "sha256:9162df5a7373d70d606527300a95a975a47c137776cd942e52d9c7e29ff83440", size = 25465, upload-time = "2025-12-23T07:45:44.51Z" }, ] [[package]] @@ -1203,7 +1203,7 @@ version = "2.14.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cb/2f/fdba158c9dbe5caca9c3eca3eaffffb251f2fb8674bf8e2d0aed5f38d319/numexpr-2.14.1.tar.gz", hash = "sha256:4be00b1086c7b7a5c32e31558122b7b80243fe098579b170967da83f3152b48b", size = 119400, upload-time = "2025-10-13T16:17:27.351Z" } wheels = [ @@ -1316,65 +1316,64 @@ wheels = [ [[package]] name = "numpy" -version = "2.3.5" +version = "2.4.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.12'", "python_full_version == '3.11.*'", ] -sdist = { url = "https://files.pythonhosted.org/packages/76/65/21b3bc86aac7b8f2862db1e808f1ea22b028e30a225a34a5ede9bf8678f2/numpy-2.3.5.tar.gz", hash = "sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0", size = 20584950, upload-time = "2025-11-16T22:52:42.067Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/77/84dd1d2e34d7e2792a236ba180b5e8fcc1e3e414e761ce0253f63d7f572e/numpy-2.3.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:de5672f4a7b200c15a4127042170a694d4df43c992948f5e1af57f0174beed10", size = 17034641, upload-time = "2025-11-16T22:49:19.336Z" }, - { url = "https://files.pythonhosted.org/packages/2a/ea/25e26fa5837106cde46ae7d0b667e20f69cbbc0efd64cba8221411ab26ae/numpy-2.3.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:acfd89508504a19ed06ef963ad544ec6664518c863436306153e13e94605c218", size = 12528324, upload-time = "2025-11-16T22:49:22.582Z" }, - { url = "https://files.pythonhosted.org/packages/4d/1a/e85f0eea4cf03d6a0228f5c0256b53f2df4bc794706e7df019fc622e47f1/numpy-2.3.5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:ffe22d2b05504f786c867c8395de703937f934272eb67586817b46188b4ded6d", size = 5356872, upload-time = "2025-11-16T22:49:25.408Z" }, - { url = "https://files.pythonhosted.org/packages/5c/bb/35ef04afd567f4c989c2060cde39211e4ac5357155c1833bcd1166055c61/numpy-2.3.5-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:872a5cf366aec6bb1147336480fef14c9164b154aeb6542327de4970282cd2f5", size = 6893148, upload-time = "2025-11-16T22:49:27.549Z" }, - { url = "https://files.pythonhosted.org/packages/f2/2b/05bbeb06e2dff5eab512dfc678b1cc5ee94d8ac5956a0885c64b6b26252b/numpy-2.3.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3095bdb8dd297e5920b010e96134ed91d852d81d490e787beca7e35ae1d89cf7", size = 14557282, upload-time = "2025-11-16T22:49:30.964Z" }, - { url = "https://files.pythonhosted.org/packages/65/fb/2b23769462b34398d9326081fad5655198fcf18966fcb1f1e49db44fbf31/numpy-2.3.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4", size = 16897903, upload-time = "2025-11-16T22:49:34.191Z" }, - { url = "https://files.pythonhosted.org/packages/ac/14/085f4cf05fc3f1e8aa95e85404e984ffca9b2275a5dc2b1aae18a67538b8/numpy-2.3.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6cf9b429b21df6b99f4dee7a1218b8b7ffbbe7df8764dc0bd60ce8a0708fed1e", size = 16341672, upload-time = "2025-11-16T22:49:37.2Z" }, - { url = "https://files.pythonhosted.org/packages/6f/3b/1f73994904142b2aa290449b3bb99772477b5fd94d787093e4f24f5af763/numpy-2.3.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748", size = 18838896, upload-time = "2025-11-16T22:49:39.727Z" }, - { url = "https://files.pythonhosted.org/packages/cd/b9/cf6649b2124f288309ffc353070792caf42ad69047dcc60da85ee85fea58/numpy-2.3.5-cp311-cp311-win32.whl", hash = "sha256:b0c7088a73aef3d687c4deef8452a3ac7c1be4e29ed8bf3b366c8111128ac60c", size = 6563608, upload-time = "2025-11-16T22:49:42.079Z" }, - { url = "https://files.pythonhosted.org/packages/aa/44/9fe81ae1dcc29c531843852e2874080dc441338574ccc4306b39e2ff6e59/numpy-2.3.5-cp311-cp311-win_amd64.whl", hash = "sha256:a414504bef8945eae5f2d7cb7be2d4af77c5d1cb5e20b296c2c25b61dff2900c", size = 13078442, upload-time = "2025-11-16T22:49:43.99Z" }, - { url = "https://files.pythonhosted.org/packages/6d/a7/f99a41553d2da82a20a2f22e93c94f928e4490bb447c9ff3c4ff230581d3/numpy-2.3.5-cp311-cp311-win_arm64.whl", hash = "sha256:0cd00b7b36e35398fa2d16af7b907b65304ef8bb4817a550e06e5012929830fa", size = 10458555, upload-time = "2025-11-16T22:49:47.092Z" }, - { url = "https://files.pythonhosted.org/packages/44/37/e669fe6cbb2b96c62f6bbedc6a81c0f3b7362f6a59230b23caa673a85721/numpy-2.3.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e", size = 16733873, upload-time = "2025-11-16T22:49:49.84Z" }, - { url = "https://files.pythonhosted.org/packages/c5/65/df0db6c097892c9380851ab9e44b52d4f7ba576b833996e0080181c0c439/numpy-2.3.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769", size = 12259838, upload-time = "2025-11-16T22:49:52.863Z" }, - { url = "https://files.pythonhosted.org/packages/5b/e1/1ee06e70eb2136797abe847d386e7c0e830b67ad1d43f364dd04fa50d338/numpy-2.3.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5", size = 5088378, upload-time = "2025-11-16T22:49:55.055Z" }, - { url = "https://files.pythonhosted.org/packages/6d/9c/1ca85fb86708724275103b81ec4cf1ac1d08f465368acfc8da7ab545bdae/numpy-2.3.5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4", size = 6628559, upload-time = "2025-11-16T22:49:57.371Z" }, - { url = "https://files.pythonhosted.org/packages/74/78/fcd41e5a0ce4f3f7b003da85825acddae6d7ecb60cf25194741b036ca7d6/numpy-2.3.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d", size = 14250702, upload-time = "2025-11-16T22:49:59.632Z" }, - { url = "https://files.pythonhosted.org/packages/b6/23/2a1b231b8ff672b4c450dac27164a8b2ca7d9b7144f9c02d2396518352eb/numpy-2.3.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28", size = 16606086, upload-time = "2025-11-16T22:50:02.127Z" }, - { url = "https://files.pythonhosted.org/packages/a0/c5/5ad26fbfbe2012e190cc7d5003e4d874b88bb18861d0829edc140a713021/numpy-2.3.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b", size = 16025985, upload-time = "2025-11-16T22:50:04.536Z" }, - { url = "https://files.pythonhosted.org/packages/d2/fa/dd48e225c46c819288148d9d060b047fd2a6fb1eb37eae25112ee4cb4453/numpy-2.3.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c", size = 18542976, upload-time = "2025-11-16T22:50:07.557Z" }, - { url = "https://files.pythonhosted.org/packages/05/79/ccbd23a75862d95af03d28b5c6901a1b7da4803181513d52f3b86ed9446e/numpy-2.3.5-cp312-cp312-win32.whl", hash = "sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952", size = 6285274, upload-time = "2025-11-16T22:50:10.746Z" }, - { url = "https://files.pythonhosted.org/packages/2d/57/8aeaf160312f7f489dea47ab61e430b5cb051f59a98ae68b7133ce8fa06a/numpy-2.3.5-cp312-cp312-win_amd64.whl", hash = "sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa", size = 12782922, upload-time = "2025-11-16T22:50:12.811Z" }, - { url = "https://files.pythonhosted.org/packages/78/a6/aae5cc2ca78c45e64b9ef22f089141d661516856cf7c8a54ba434576900d/numpy-2.3.5-cp312-cp312-win_arm64.whl", hash = "sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013", size = 10194667, upload-time = "2025-11-16T22:50:16.16Z" }, - { url = "https://files.pythonhosted.org/packages/db/69/9cde09f36da4b5a505341180a3f2e6fadc352fd4d2b7096ce9778db83f1a/numpy-2.3.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff", size = 16728251, upload-time = "2025-11-16T22:50:19.013Z" }, - { url = "https://files.pythonhosted.org/packages/79/fb/f505c95ceddd7027347b067689db71ca80bd5ecc926f913f1a23e65cf09b/numpy-2.3.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188", size = 12254652, upload-time = "2025-11-16T22:50:21.487Z" }, - { url = "https://files.pythonhosted.org/packages/78/da/8c7738060ca9c31b30e9301ee0cf6c5ffdbf889d9593285a1cead337f9a5/numpy-2.3.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0", size = 5083172, upload-time = "2025-11-16T22:50:24.562Z" }, - { url = "https://files.pythonhosted.org/packages/a4/b4/ee5bb2537fb9430fd2ef30a616c3672b991a4129bb1c7dcc42aa0abbe5d7/numpy-2.3.5-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903", size = 6622990, upload-time = "2025-11-16T22:50:26.47Z" }, - { url = "https://files.pythonhosted.org/packages/95/03/dc0723a013c7d7c19de5ef29e932c3081df1c14ba582b8b86b5de9db7f0f/numpy-2.3.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d", size = 14248902, upload-time = "2025-11-16T22:50:28.861Z" }, - { url = "https://files.pythonhosted.org/packages/f5/10/ca162f45a102738958dcec8023062dad0cbc17d1ab99d68c4e4a6c45fb2b/numpy-2.3.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017", size = 16597430, upload-time = "2025-11-16T22:50:31.56Z" }, - { url = "https://files.pythonhosted.org/packages/2a/51/c1e29be863588db58175175f057286900b4b3327a1351e706d5e0f8dd679/numpy-2.3.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf", size = 16024551, upload-time = "2025-11-16T22:50:34.242Z" }, - { url = "https://files.pythonhosted.org/packages/83/68/8236589d4dbb87253d28259d04d9b814ec0ecce7cb1c7fed29729f4c3a78/numpy-2.3.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce", size = 18533275, upload-time = "2025-11-16T22:50:37.651Z" }, - { url = "https://files.pythonhosted.org/packages/40/56/2932d75b6f13465239e3b7b7e511be27f1b8161ca2510854f0b6e521c395/numpy-2.3.5-cp313-cp313-win32.whl", hash = "sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e", size = 6277637, upload-time = "2025-11-16T22:50:40.11Z" }, - { url = "https://files.pythonhosted.org/packages/0c/88/e2eaa6cffb115b85ed7c7c87775cb8bcf0816816bc98ca8dbfa2ee33fe6e/numpy-2.3.5-cp313-cp313-win_amd64.whl", hash = "sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b", size = 12779090, upload-time = "2025-11-16T22:50:42.503Z" }, - { url = "https://files.pythonhosted.org/packages/8f/88/3f41e13a44ebd4034ee17baa384acac29ba6a4fcc2aca95f6f08ca0447d1/numpy-2.3.5-cp313-cp313-win_arm64.whl", hash = "sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae", size = 10194710, upload-time = "2025-11-16T22:50:44.971Z" }, - { url = "https://files.pythonhosted.org/packages/13/cb/71744144e13389d577f867f745b7df2d8489463654a918eea2eeb166dfc9/numpy-2.3.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd", size = 16827292, upload-time = "2025-11-16T22:50:47.715Z" }, - { url = "https://files.pythonhosted.org/packages/71/80/ba9dc6f2a4398e7f42b708a7fdc841bb638d353be255655498edbf9a15a8/numpy-2.3.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f", size = 12378897, upload-time = "2025-11-16T22:50:51.327Z" }, - { url = "https://files.pythonhosted.org/packages/2e/6d/db2151b9f64264bcceccd51741aa39b50150de9b602d98ecfe7e0c4bff39/numpy-2.3.5-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a", size = 5207391, upload-time = "2025-11-16T22:50:54.542Z" }, - { url = "https://files.pythonhosted.org/packages/80/ae/429bacace5ccad48a14c4ae5332f6aa8ab9f69524193511d60ccdfdc65fa/numpy-2.3.5-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139", size = 6721275, upload-time = "2025-11-16T22:50:56.794Z" }, - { url = "https://files.pythonhosted.org/packages/74/5b/1919abf32d8722646a38cd527bc3771eb229a32724ee6ba340ead9b92249/numpy-2.3.5-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e", size = 14306855, upload-time = "2025-11-16T22:50:59.208Z" }, - { url = "https://files.pythonhosted.org/packages/a5/87/6831980559434973bebc30cd9c1f21e541a0f2b0c280d43d3afd909b66d0/numpy-2.3.5-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9", size = 16657359, upload-time = "2025-11-16T22:51:01.991Z" }, - { url = "https://files.pythonhosted.org/packages/dd/91/c797f544491ee99fd00495f12ebb7802c440c1915811d72ac5b4479a3356/numpy-2.3.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946", size = 16093374, upload-time = "2025-11-16T22:51:05.291Z" }, - { url = "https://files.pythonhosted.org/packages/74/a6/54da03253afcbe7a72785ec4da9c69fb7a17710141ff9ac5fcb2e32dbe64/numpy-2.3.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1", size = 18594587, upload-time = "2025-11-16T22:51:08.585Z" }, - { url = "https://files.pythonhosted.org/packages/80/e9/aff53abbdd41b0ecca94285f325aff42357c6b5abc482a3fcb4994290b18/numpy-2.3.5-cp313-cp313t-win32.whl", hash = "sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3", size = 6405940, upload-time = "2025-11-16T22:51:11.541Z" }, - { url = "https://files.pythonhosted.org/packages/d5/81/50613fec9d4de5480de18d4f8ef59ad7e344d497edbef3cfd80f24f98461/numpy-2.3.5-cp313-cp313t-win_amd64.whl", hash = "sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234", size = 12920341, upload-time = "2025-11-16T22:51:14.312Z" }, - { url = "https://files.pythonhosted.org/packages/bb/ab/08fd63b9a74303947f34f0bd7c5903b9c5532c2d287bead5bdf4c556c486/numpy-2.3.5-cp313-cp313t-win_arm64.whl", hash = "sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7", size = 10262507, upload-time = "2025-11-16T22:51:16.846Z" }, - { url = "https://files.pythonhosted.org/packages/c6/65/f9dea8e109371ade9c782b4e4756a82edf9d3366bca495d84d79859a0b79/numpy-2.3.5-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:f0963b55cdd70fad460fa4c1341f12f976bb26cb66021a5580329bd498988310", size = 16910689, upload-time = "2025-11-16T22:52:23.247Z" }, - { url = "https://files.pythonhosted.org/packages/00/4f/edb00032a8fb92ec0a679d3830368355da91a69cab6f3e9c21b64d0bb986/numpy-2.3.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:f4255143f5160d0de972d28c8f9665d882b5f61309d8362fdd3e103cf7bf010c", size = 12457053, upload-time = "2025-11-16T22:52:26.367Z" }, - { url = "https://files.pythonhosted.org/packages/16/a4/e8a53b5abd500a63836a29ebe145fc1ab1f2eefe1cfe59276020373ae0aa/numpy-2.3.5-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:a4b9159734b326535f4dd01d947f919c6eefd2d9827466a696c44ced82dfbc18", size = 5285635, upload-time = "2025-11-16T22:52:29.266Z" }, - { url = "https://files.pythonhosted.org/packages/a3/2f/37eeb9014d9c8b3e9c55bc599c68263ca44fdbc12a93e45a21d1d56df737/numpy-2.3.5-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:2feae0d2c91d46e59fcd62784a3a83b3fb677fead592ce51b5a6fbb4f95965ff", size = 6801770, upload-time = "2025-11-16T22:52:31.421Z" }, - { url = "https://files.pythonhosted.org/packages/7d/e4/68d2f474df2cb671b2b6c2986a02e520671295647dad82484cde80ca427b/numpy-2.3.5-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ffac52f28a7849ad7576293c0cb7b9f08304e8f7d738a8cb8a90ec4c55a998eb", size = 14391768, upload-time = "2025-11-16T22:52:33.593Z" }, - { url = "https://files.pythonhosted.org/packages/b8/50/94ccd8a2b141cb50651fddd4f6a48874acb3c91c8f0842b08a6afc4b0b21/numpy-2.3.5-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7", size = 16729263, upload-time = "2025-11-16T22:52:36.369Z" }, - { url = "https://files.pythonhosted.org/packages/2d/ee/346fa473e666fe14c52fcdd19ec2424157290a032d4c41f98127bfb31ac7/numpy-2.3.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f16417ec91f12f814b10bafe79ef77e70113a2f5f7018640e7425ff979253425", size = 12967213, upload-time = "2025-11-16T22:52:39.38Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/a4/7a/6a3d14e205d292b738db449d0de649b373a59edb0d0b4493821d0a3e8718/numpy-2.4.0.tar.gz", hash = "sha256:6e504f7b16118198f138ef31ba24d985b124c2c469fe8467007cf30fd992f934", size = 20685720, upload-time = "2025-12-20T16:18:19.023Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/7e/7bae7cbcc2f8132271967aa03e03954fc1e48aa1f3bf32b29ca95fbef352/numpy-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:316b2f2584682318539f0bcaca5a496ce9ca78c88066579ebd11fd06f8e4741e", size = 16940166, upload-time = "2025-12-20T16:15:43.434Z" }, + { url = "https://files.pythonhosted.org/packages/0f/27/6c13f5b46776d6246ec884ac5817452672156a506d08a1f2abb39961930a/numpy-2.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a2718c1de8504121714234b6f8241d0019450353276c88b9453c9c3d92e101db", size = 12641781, upload-time = "2025-12-20T16:15:45.701Z" }, + { url = "https://files.pythonhosted.org/packages/14/1c/83b4998d4860d15283241d9e5215f28b40ac31f497c04b12fa7f428ff370/numpy-2.4.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:21555da4ec4a0c942520ead42c3b0dc9477441e085c42b0fbdd6a084869a6f6b", size = 5470247, upload-time = "2025-12-20T16:15:47.943Z" }, + { url = "https://files.pythonhosted.org/packages/54/08/cbce72c835d937795571b0464b52069f869c9e78b0c076d416c5269d2718/numpy-2.4.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:413aa561266a4be2d06cd2b9665e89d9f54c543f418773076a76adcf2af08bc7", size = 6799807, upload-time = "2025-12-20T16:15:49.795Z" }, + { url = "https://files.pythonhosted.org/packages/ff/be/2e647961cd8c980591d75cdcd9e8f647d69fbe05e2a25613dc0a2ea5fb1a/numpy-2.4.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0feafc9e03128074689183031181fac0897ff169692d8492066e949041096548", size = 14701992, upload-time = "2025-12-20T16:15:51.615Z" }, + { url = "https://files.pythonhosted.org/packages/a2/fb/e1652fb8b6fd91ce6ed429143fe2e01ce714711e03e5b762615e7b36172c/numpy-2.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8fdfed3deaf1928fb7667d96e0567cdf58c2b370ea2ee7e586aa383ec2cb346", size = 16646871, upload-time = "2025-12-20T16:15:54.129Z" }, + { url = "https://files.pythonhosted.org/packages/62/23/d841207e63c4322842f7cd042ae981cffe715c73376dcad8235fb31debf1/numpy-2.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e06a922a469cae9a57100864caf4f8a97a1026513793969f8ba5b63137a35d25", size = 16487190, upload-time = "2025-12-20T16:15:56.147Z" }, + { url = "https://files.pythonhosted.org/packages/bc/a0/6a842c8421ebfdec0a230e65f61e0dabda6edbef443d999d79b87c273965/numpy-2.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:927ccf5cd17c48f801f4ed43a7e5673a2724bd2171460be3e3894e6e332ef83a", size = 18580762, upload-time = "2025-12-20T16:15:58.524Z" }, + { url = "https://files.pythonhosted.org/packages/0a/d1/c79e0046641186f2134dde05e6181825b911f8bdcef31b19ddd16e232847/numpy-2.4.0-cp311-cp311-win32.whl", hash = "sha256:882567b7ae57c1b1a0250208cc21a7976d8cbcc49d5a322e607e6f09c9e0bd53", size = 6233359, upload-time = "2025-12-20T16:16:00.938Z" }, + { url = "https://files.pythonhosted.org/packages/fc/f0/74965001d231f28184d6305b8cdc1b6fcd4bf23033f6cb039cfe76c9fca7/numpy-2.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b986403023c8f3bf8f487c2e6186afda156174d31c175f747d8934dfddf3479", size = 12601132, upload-time = "2025-12-20T16:16:02.484Z" }, + { url = "https://files.pythonhosted.org/packages/65/32/55408d0f46dfebce38017f5bd931affa7256ad6beac1a92a012e1fbc67a7/numpy-2.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:3f3096405acc48887458bbf9f6814d43785ac7ba2a57ea6442b581dedbc60ce6", size = 10573977, upload-time = "2025-12-20T16:16:04.77Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ff/f6400ffec95de41c74b8e73df32e3fff1830633193a7b1e409be7fb1bb8c/numpy-2.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2a8b6bb8369abefb8bd1801b054ad50e02b3275c8614dc6e5b0373c305291037", size = 16653117, upload-time = "2025-12-20T16:16:06.709Z" }, + { url = "https://files.pythonhosted.org/packages/fd/28/6c23e97450035072e8d830a3c411bf1abd1f42c611ff9d29e3d8f55c6252/numpy-2.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2e284ca13d5a8367e43734148622caf0b261b275673823593e3e3634a6490f83", size = 12369711, upload-time = "2025-12-20T16:16:08.758Z" }, + { url = "https://files.pythonhosted.org/packages/bc/af/acbef97b630ab1bb45e6a7d01d1452e4251aa88ce680ac36e56c272120ec/numpy-2.4.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:49ff32b09f5aa0cd30a20c2b39db3e669c845589f2b7fc910365210887e39344", size = 5198355, upload-time = "2025-12-20T16:16:10.902Z" }, + { url = "https://files.pythonhosted.org/packages/c1/c8/4e0d436b66b826f2e53330adaa6311f5cac9871a5b5c31ad773b27f25a74/numpy-2.4.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:36cbfb13c152b1c7c184ddac43765db8ad672567e7bafff2cc755a09917ed2e6", size = 6545298, upload-time = "2025-12-20T16:16:12.607Z" }, + { url = "https://files.pythonhosted.org/packages/ef/27/e1f5d144ab54eac34875e79037011d511ac57b21b220063310cb96c80fbc/numpy-2.4.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:35ddc8f4914466e6fc954c76527aa91aa763682a4f6d73249ef20b418fe6effb", size = 14398387, upload-time = "2025-12-20T16:16:14.257Z" }, + { url = "https://files.pythonhosted.org/packages/67/64/4cb909dd5ab09a9a5d086eff9586e69e827b88a5585517386879474f4cf7/numpy-2.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc578891de1db95b2a35001b695451767b580bb45753717498213c5ff3c41d63", size = 16363091, upload-time = "2025-12-20T16:16:17.32Z" }, + { url = "https://files.pythonhosted.org/packages/9d/9c/8efe24577523ec6809261859737cf117b0eb6fdb655abdfdc81b2e468ce4/numpy-2.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98e81648e0b36e325ab67e46b5400a7a6d4a22b8a7c8e8bbfe20e7db7906bf95", size = 16176394, upload-time = "2025-12-20T16:16:19.524Z" }, + { url = "https://files.pythonhosted.org/packages/61/f0/1687441ece7b47a62e45a1f82015352c240765c707928edd8aef875d5951/numpy-2.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d57b5046c120561ba8fa8e4030fbb8b822f3063910fa901ffadf16e2b7128ad6", size = 18287378, upload-time = "2025-12-20T16:16:22.866Z" }, + { url = "https://files.pythonhosted.org/packages/d3/6f/f868765d44e6fc466467ed810ba9d8d6db1add7d4a748abfa2a4c99a3194/numpy-2.4.0-cp312-cp312-win32.whl", hash = "sha256:92190db305a6f48734d3982f2c60fa30d6b5ee9bff10f2887b930d7b40119f4c", size = 5955432, upload-time = "2025-12-20T16:16:25.06Z" }, + { url = "https://files.pythonhosted.org/packages/d4/b5/94c1e79fcbab38d1ca15e13777477b2914dd2d559b410f96949d6637b085/numpy-2.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:680060061adb2d74ce352628cb798cfdec399068aa7f07ba9fb818b2b3305f98", size = 12306201, upload-time = "2025-12-20T16:16:26.979Z" }, + { url = "https://files.pythonhosted.org/packages/70/09/c39dadf0b13bb0768cd29d6a3aaff1fb7c6905ac40e9aaeca26b1c086e06/numpy-2.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:39699233bc72dd482da1415dcb06076e32f60eddc796a796c5fb6c5efce94667", size = 10308234, upload-time = "2025-12-20T16:16:29.417Z" }, + { url = "https://files.pythonhosted.org/packages/a7/0d/853fd96372eda07c824d24adf02e8bc92bb3731b43a9b2a39161c3667cc4/numpy-2.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a152d86a3ae00ba5f47b3acf3b827509fd0b6cb7d3259665e63dafbad22a75ea", size = 16649088, upload-time = "2025-12-20T16:16:31.421Z" }, + { url = "https://files.pythonhosted.org/packages/e3/37/cc636f1f2a9f585434e20a3e6e63422f70bfe4f7f6698e941db52ea1ac9a/numpy-2.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39b19251dec4de8ff8496cd0806cbe27bf0684f765abb1f4809554de93785f2d", size = 12364065, upload-time = "2025-12-20T16:16:33.491Z" }, + { url = "https://files.pythonhosted.org/packages/ed/69/0b78f37ca3690969beee54103ce5f6021709134e8020767e93ba691a72f1/numpy-2.4.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:009bd0ea12d3c784b6639a8457537016ce5172109e585338e11334f6a7bb88ee", size = 5192640, upload-time = "2025-12-20T16:16:35.636Z" }, + { url = "https://files.pythonhosted.org/packages/1d/2a/08569f8252abf590294dbb09a430543ec8f8cc710383abfb3e75cc73aeda/numpy-2.4.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5fe44e277225fd3dff6882d86d3d447205d43532c3627313d17e754fb3905a0e", size = 6541556, upload-time = "2025-12-20T16:16:37.276Z" }, + { url = "https://files.pythonhosted.org/packages/93/e9/a949885a4e177493d61519377952186b6cbfdf1d6002764c664ba28349b5/numpy-2.4.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f935c4493eda9069851058fa0d9e39dbf6286be690066509305e52912714dbb2", size = 14396562, upload-time = "2025-12-20T16:16:38.953Z" }, + { url = "https://files.pythonhosted.org/packages/99/98/9d4ad53b0e9ef901c2ef1d550d2136f5ac42d3fd2988390a6def32e23e48/numpy-2.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8cfa5f29a695cb7438965e6c3e8d06e0416060cf0d709c1b1c1653a939bf5c2a", size = 16351719, upload-time = "2025-12-20T16:16:41.503Z" }, + { url = "https://files.pythonhosted.org/packages/28/de/5f3711a38341d6e8dd619f6353251a0cdd07f3d6d101a8fd46f4ef87f895/numpy-2.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ba0cb30acd3ef11c94dc27fbfba68940652492bc107075e7ffe23057f9425681", size = 16176053, upload-time = "2025-12-20T16:16:44.552Z" }, + { url = "https://files.pythonhosted.org/packages/2a/5b/2a3753dc43916501b4183532e7ace862e13211042bceafa253afb5c71272/numpy-2.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:60e8c196cd82cbbd4f130b5290007e13e6de3eca79f0d4d38014769d96a7c475", size = 18277859, upload-time = "2025-12-20T16:16:47.174Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c5/a18bcdd07a941db3076ef489d036ab16d2bfc2eae0cf27e5a26e29189434/numpy-2.4.0-cp313-cp313-win32.whl", hash = "sha256:5f48cb3e88fbc294dc90e215d86fbaf1c852c63dbdb6c3a3e63f45c4b57f7344", size = 5953849, upload-time = "2025-12-20T16:16:49.554Z" }, + { url = "https://files.pythonhosted.org/packages/4f/f1/719010ff8061da6e8a26e1980cf090412d4f5f8060b31f0c45d77dd67a01/numpy-2.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:a899699294f28f7be8992853c0c60741f16ff199205e2e6cdca155762cbaa59d", size = 12302840, upload-time = "2025-12-20T16:16:51.227Z" }, + { url = "https://files.pythonhosted.org/packages/f5/5a/b3d259083ed8b4d335270c76966cb6cf14a5d1b69e1a608994ac57a659e6/numpy-2.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:9198f447e1dc5647d07c9a6bbe2063cc0132728cc7175b39dbc796da5b54920d", size = 10308509, upload-time = "2025-12-20T16:16:53.313Z" }, + { url = "https://files.pythonhosted.org/packages/31/01/95edcffd1bb6c0633df4e808130545c4f07383ab629ac7e316fb44fff677/numpy-2.4.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74623f2ab5cc3f7c886add4f735d1031a1d2be4a4ae63c0546cfd74e7a31ddf6", size = 12491815, upload-time = "2025-12-20T16:16:55.496Z" }, + { url = "https://files.pythonhosted.org/packages/59/ea/5644b8baa92cc1c7163b4b4458c8679852733fa74ca49c942cfa82ded4e0/numpy-2.4.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:0804a8e4ab070d1d35496e65ffd3cf8114c136a2b81f61dfab0de4b218aacfd5", size = 5320321, upload-time = "2025-12-20T16:16:57.468Z" }, + { url = "https://files.pythonhosted.org/packages/26/4e/e10938106d70bc21319bd6a86ae726da37edc802ce35a3a71ecdf1fdfe7f/numpy-2.4.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:02a2038eb27f9443a8b266a66911e926566b5a6ffd1a689b588f7f35b81e7dc3", size = 6641635, upload-time = "2025-12-20T16:16:59.379Z" }, + { url = "https://files.pythonhosted.org/packages/b3/8d/a8828e3eaf5c0b4ab116924df82f24ce3416fa38d0674d8f708ddc6c8aac/numpy-2.4.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1889b3a3f47a7b5bee16bc25a2145bd7cb91897f815ce3499db64c7458b6d91d", size = 14456053, upload-time = "2025-12-20T16:17:01.768Z" }, + { url = "https://files.pythonhosted.org/packages/68/a1/17d97609d87d4520aa5ae2dcfb32305654550ac6a35effb946d303e594ce/numpy-2.4.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85eef4cb5625c47ee6425c58a3502555e10f45ee973da878ac8248ad58c136f3", size = 16401702, upload-time = "2025-12-20T16:17:04.235Z" }, + { url = "https://files.pythonhosted.org/packages/18/32/0f13c1b2d22bea1118356b8b963195446f3af124ed7a5adfa8fdecb1b6ca/numpy-2.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6dc8b7e2f4eb184b37655195f421836cfae6f58197b67e3ffc501f1333d993fa", size = 16242493, upload-time = "2025-12-20T16:17:06.856Z" }, + { url = "https://files.pythonhosted.org/packages/ae/23/48f21e3d309fbc137c068a1475358cbd3a901b3987dcfc97a029ab3068e2/numpy-2.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:44aba2f0cafd287871a495fb3163408b0bd25bbce135c6f621534a07f4f7875c", size = 18324222, upload-time = "2025-12-20T16:17:09.392Z" }, + { url = "https://files.pythonhosted.org/packages/ac/52/41f3d71296a3dcaa4f456aaa3c6fc8e745b43d0552b6bde56571bb4b4a0f/numpy-2.4.0-cp313-cp313t-win32.whl", hash = "sha256:20c115517513831860c573996e395707aa9fb691eb179200125c250e895fcd93", size = 6076216, upload-time = "2025-12-20T16:17:11.437Z" }, + { url = "https://files.pythonhosted.org/packages/35/ff/46fbfe60ab0710d2a2b16995f708750307d30eccbb4c38371ea9e986866e/numpy-2.4.0-cp313-cp313t-win_amd64.whl", hash = "sha256:b48e35f4ab6f6a7597c46e301126ceba4c44cd3280e3750f85db48b082624fa4", size = 12444263, upload-time = "2025-12-20T16:17:13.182Z" }, + { url = "https://files.pythonhosted.org/packages/a3/e3/9189ab319c01d2ed556c932ccf55064c5d75bb5850d1df7a482ce0badead/numpy-2.4.0-cp313-cp313t-win_arm64.whl", hash = "sha256:4d1cfce39e511069b11e67cd0bd78ceff31443b7c9e5c04db73c7a19f572967c", size = 10378265, upload-time = "2025-12-20T16:17:15.211Z" }, + { url = "https://files.pythonhosted.org/packages/4b/ef/088e7c7342f300aaf3ee5f2c821c4b9996a1bef2aaf6a49cc8ab4883758e/numpy-2.4.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b54c83f1c0c0f1d748dca0af516062b8829d53d1f0c402be24b4257a9c48ada6", size = 16819003, upload-time = "2025-12-20T16:18:03.41Z" }, + { url = "https://files.pythonhosted.org/packages/ff/ce/a53017b5443b4b84517182d463fc7bcc2adb4faa8b20813f8e5f5aeb5faa/numpy-2.4.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:aabb081ca0ec5d39591fc33018cd4b3f96e1a2dd6756282029986d00a785fba4", size = 12567105, upload-time = "2025-12-20T16:18:05.594Z" }, + { url = "https://files.pythonhosted.org/packages/77/58/5ff91b161f2ec650c88a626c3905d938c89aaadabd0431e6d9c1330c83e2/numpy-2.4.0-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:8eafe7c36c8430b7794edeab3087dec7bf31d634d92f2af9949434b9d1964cba", size = 5395590, upload-time = "2025-12-20T16:18:08.031Z" }, + { url = "https://files.pythonhosted.org/packages/1d/4e/f1a084106df8c2df8132fc437e56987308e0524836aa7733721c8429d4fe/numpy-2.4.0-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:2f585f52b2baf07ff3356158d9268ea095e221371f1074fadea2f42544d58b4d", size = 6709947, upload-time = "2025-12-20T16:18:09.836Z" }, + { url = "https://files.pythonhosted.org/packages/63/09/3d8aeb809c0332c3f642da812ac2e3d74fc9252b3021f8c30c82e99e3f3d/numpy-2.4.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:32ed06d0fe9cae27d8fb5f400c63ccee72370599c75e683a6358dd3a4fb50aaf", size = 14535119, upload-time = "2025-12-20T16:18:12.105Z" }, + { url = "https://files.pythonhosted.org/packages/fd/7f/68f0fc43a2cbdc6bb239160c754d87c922f60fbaa0fa3cd3d312b8a7f5ee/numpy-2.4.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:57c540ed8fb1f05cb997c6761cd56db72395b0d6985e90571ff660452ade4f98", size = 16475815, upload-time = "2025-12-20T16:18:14.433Z" }, + { url = "https://files.pythonhosted.org/packages/11/73/edeacba3167b1ca66d51b1a5a14697c2c40098b5ffa01811c67b1785a5ab/numpy-2.4.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a39fb973a726e63223287adc6dafe444ce75af952d711e400f3bf2b36ef55a7b", size = 12489376, upload-time = "2025-12-20T16:18:16.524Z" }, ] [[package]] @@ -1401,7 +1400,7 @@ version = "2.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "python-dateutil" }, { name = "pytz" }, { name = "tzdata" }, @@ -1517,7 +1516,7 @@ dependencies = [ { name = "microdf-python" }, { name = "numexpr" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "pandas" }, { name = "plotly" }, { name = "psutil" }, @@ -1535,7 +1534,7 @@ wheels = [ [[package]] name = "policyengine-us" -version = "1.469.0" +version = "1.470.1" source = { editable = "." } dependencies = [ { name = "microdf-python" },