policyengine-us 1.417.3__py3-none-any.whl → 1.419.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of policyengine-us might be problematic. Click here for more details.
- policyengine_us/parameters/gov/dhs/immigration/qualified_noncitizen_status.yaml +18 -0
- policyengine_us/parameters/gov/local/tx/harris/rides/age_threshold.yaml +13 -0
- policyengine_us/parameters/gov/local/tx/harris/rides/customer_payment_rate.yaml +12 -0
- policyengine_us/parameters/gov/states/tx/tanf/age_threshold/minor_child.yaml +13 -0
- policyengine_us/parameters/gov/states/tx/tanf/age_threshold/student_dependent.yaml +13 -0
- policyengine_us/parameters/gov/states/tx/tanf/income/deductions/child_support.yaml +14 -0
- policyengine_us/parameters/gov/states/tx/tanf/income/deductions/dependent_care.yaml +23 -0
- policyengine_us/parameters/gov/states/tx/tanf/income/deductions/work_expense.yaml +13 -0
- policyengine_us/parameters/gov/states/tx/tanf/income/disregards/applicant_fraction.yaml +12 -0
- policyengine_us/parameters/gov/states/tx/tanf/income/disregards/continuing_recipient_cap.yaml +13 -0
- policyengine_us/parameters/gov/states/tx/tanf/income/disregards/continuing_recipient_months.yaml +14 -0
- policyengine_us/parameters/gov/states/tx/tanf/income/disregards/continuing_recipient_rate.yaml +13 -0
- policyengine_us/parameters/gov/states/tx/tanf/income/sources/earned.yaml +15 -0
- policyengine_us/parameters/gov/states/tx/tanf/income/sources/unearned.yaml +28 -0
- policyengine_us/parameters/gov/states/tx/tanf/minimum_grant.yaml +13 -0
- policyengine_us/parameters/gov/states/tx/tanf/needs_standard/budgetary_needs/additional_person.yaml +17 -0
- policyengine_us/parameters/gov/states/tx/tanf/needs_standard/budgetary_needs/caretaker_with_second_parent.yaml +81 -0
- policyengine_us/parameters/gov/states/tx/tanf/needs_standard/budgetary_needs/caretaker_without_second_parent.yaml +85 -0
- policyengine_us/parameters/gov/states/tx/tanf/needs_standard/budgetary_needs/non_caretaker.yaml +85 -0
- policyengine_us/parameters/gov/states/tx/tanf/needs_standard/recognizable_needs/additional_person.yaml +17 -0
- policyengine_us/parameters/gov/states/tx/tanf/needs_standard/recognizable_needs/rate.yaml +17 -0
- policyengine_us/parameters/gov/states/tx/tanf/ottanf/payment_amount.yaml +13 -0
- policyengine_us/parameters/gov/states/tx/tanf/payment_standard/additional_person.yaml +19 -0
- policyengine_us/parameters/gov/states/tx/tanf/payment_standard/caretaker_with_second_parent.yaml +105 -0
- policyengine_us/parameters/gov/states/tx/tanf/payment_standard/caretaker_without_second_parent.yaml +112 -0
- policyengine_us/parameters/gov/states/tx/tanf/payment_standard/non_caretaker.yaml +111 -0
- policyengine_us/parameters/gov/states/tx/tanf/resources/resource_limit.yaml +13 -0
- policyengine_us/parameters/gov/states/tx/tanf/resources/vehicle_exemption.yaml +11 -0
- policyengine_us/tests/policy/baseline/gov/local/tx/harris/in_harris_county_tx.yaml +27 -0
- policyengine_us/tests/policy/baseline/gov/local/tx/harris/rides/tx_harris_rides_eligible.yaml +35 -0
- policyengine_us/tests/policy/baseline/gov/local/tx/harris/rides/tx_harris_rides_subsidy.yaml +32 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/assistance_unit/tx_tanf_age_eligible_child.yaml +34 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/assistance_unit/tx_tanf_assistance_unit_size.yaml +62 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/assistance_unit/tx_tanf_categorically_eligible_person.yaml +49 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/assistance_unit/tx_tanf_eligible_child.yaml +34 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/assistance_unit/tx_tanf_eligible_parent.yaml +38 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/eligibility/tx_tanf_budgetary_needs.yaml +65 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/eligibility/tx_tanf_budgetary_needs_test.yaml +30 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/eligibility/tx_tanf_caretaker_type.yaml +116 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/eligibility/tx_tanf_eligible.yaml +123 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/eligibility/tx_tanf_income_eligible.yaml +69 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/eligibility/tx_tanf_recognizable_needs_test.yaml +54 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/eligibility/tx_tanf_resources_eligible.yaml +44 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/income/deductions/tx_tanf_child_support_deduction.yaml +55 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/income/deductions/tx_tanf_dependent_care_deduction.yaml +54 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/income/earned/tx_tanf_countable_earned_income.yaml +39 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/income/earned/tx_tanf_earned_income_after_disregard_person.yaml +36 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/income/tx_tanf_income_for_budgetary_needs_test.yaml +102 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/income/unearned/tx_tanf_countable_unearned_income.yaml +49 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/integration.yaml +291 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/ottanf/tx_ottanf.yaml +47 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/ottanf/tx_ottanf_crisis_criteria.yaml +17 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/ottanf/tx_ottanf_eligible.yaml +158 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/resources/tx_tanf_countable_resources.yaml +39 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/tx_regular_tanf.yaml +74 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/tx_tanf.yaml +89 -0
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/tx_tanf_payment_standard.yaml +61 -0
- policyengine_us/tests/policy/baseline/household/demographic/person/is_citizen_or_legal_immigrant.yaml +55 -0
- policyengine_us/variables/gov/local/tx/harris/in_harris_county_tx.py +12 -0
- policyengine_us/variables/gov/local/tx/harris/rides/tx_harris_rides_eligible.py +22 -0
- policyengine_us/variables/gov/local/tx/harris/rides/tx_harris_rides_subsidy.py +26 -0
- policyengine_us/variables/gov/states/tx/tanf/assistance_unit/tx_tanf_age_eligible_child.py +27 -0
- policyengine_us/variables/gov/states/tx/tanf/assistance_unit/tx_tanf_assistance_unit_size.py +18 -0
- policyengine_us/variables/gov/states/tx/tanf/assistance_unit/tx_tanf_categorically_eligible_person.py +19 -0
- policyengine_us/variables/gov/states/tx/tanf/assistance_unit/tx_tanf_eligible_child.py +24 -0
- policyengine_us/variables/gov/states/tx/tanf/assistance_unit/tx_tanf_eligible_parent.py +24 -0
- policyengine_us/variables/gov/states/tx/tanf/eligibility/tx_tanf_budgetary_needs.py +57 -0
- policyengine_us/variables/gov/states/tx/tanf/eligibility/tx_tanf_budgetary_needs_test.py +21 -0
- policyengine_us/variables/gov/states/tx/tanf/eligibility/tx_tanf_caretaker_type.py +50 -0
- policyengine_us/variables/gov/states/tx/tanf/eligibility/tx_tanf_eligible.py +29 -0
- policyengine_us/variables/gov/states/tx/tanf/eligibility/tx_tanf_income_eligible.py +40 -0
- policyengine_us/variables/gov/states/tx/tanf/eligibility/tx_tanf_recognizable_needs_test.py +23 -0
- policyengine_us/variables/gov/states/tx/tanf/eligibility/tx_tanf_resources_eligible.py +19 -0
- policyengine_us/variables/gov/states/tx/tanf/income/deductions/tx_tanf_child_support_deduction.py +21 -0
- policyengine_us/variables/gov/states/tx/tanf/income/deductions/tx_tanf_dependent_care_deduction.py +39 -0
- policyengine_us/variables/gov/states/tx/tanf/income/earned/tx_tanf_countable_earned_income.py +28 -0
- policyengine_us/variables/gov/states/tx/tanf/income/earned/tx_tanf_earned_income_after_disregard_person.py +52 -0
- policyengine_us/variables/gov/states/tx/tanf/income/earned/tx_tanf_gross_earned_income.py +16 -0
- policyengine_us/variables/gov/states/tx/tanf/income/tx_tanf_countable_income.py +19 -0
- policyengine_us/variables/gov/states/tx/tanf/income/tx_tanf_income_for_budgetary_needs_test.py +47 -0
- policyengine_us/variables/gov/states/tx/tanf/income/unearned/tx_tanf_countable_unearned_income.py +27 -0
- policyengine_us/variables/gov/states/tx/tanf/income/unearned/tx_tanf_gross_unearned_income.py +16 -0
- policyengine_us/variables/gov/states/tx/tanf/ottanf/tx_ottanf.py +17 -0
- policyengine_us/variables/gov/states/tx/tanf/ottanf/tx_ottanf_crisis_criteria.py +21 -0
- policyengine_us/variables/gov/states/tx/tanf/ottanf/tx_ottanf_eligible.py +36 -0
- policyengine_us/variables/gov/states/tx/tanf/resources/tx_tanf_countable_resources.py +31 -0
- policyengine_us/variables/gov/states/tx/tanf/tx_regular_tanf.py +27 -0
- policyengine_us/variables/gov/states/tx/tanf/tx_tanf.py +25 -0
- policyengine_us/variables/gov/states/tx/tanf/tx_tanf_payment_standard.py +51 -0
- policyengine_us/variables/household/demographic/person/is_citizen_or_legal_immigrant.py +22 -0
- policyengine_us/variables/household/expense/person/pre_subsidy_transportation_expense.py +9 -0
- {policyengine_us-1.417.3.dist-info → policyengine_us-1.419.0.dist-info}/METADATA +1 -1
- {policyengine_us-1.417.3.dist-info → policyengine_us-1.419.0.dist-info}/RECORD +96 -8
- policyengine_us/parameters/gov/states/tx/tanf/monthly_income_limit.yaml +0 -31
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/tx_tanf_income_limit.yaml +0 -17
- policyengine_us/variables/gov/states/tx/tanf/tx_tanf_income_limit.py +0 -18
- {policyengine_us-1.417.3.dist-info → policyengine_us-1.419.0.dist-info}/WHEEL +0 -0
- {policyengine_us-1.417.3.dist-info → policyengine_us-1.419.0.dist-info}/entry_points.txt +0 -0
- {policyengine_us-1.417.3.dist-info → policyengine_us-1.419.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
- name: Case 1, regular TANF higher than OTTANF.
|
|
2
|
+
period: 2025-01
|
|
3
|
+
absolute_error_margin: 0.3
|
|
4
|
+
input:
|
|
5
|
+
tx_regular_tanf: 320
|
|
6
|
+
tx_ottanf: 83.33
|
|
7
|
+
state_code: TX
|
|
8
|
+
output:
|
|
9
|
+
tx_tanf: 320
|
|
10
|
+
# Regular TANF ($320/month) > OTTANF ($83.33/month) → Choose TANF
|
|
11
|
+
|
|
12
|
+
- name: Case 2, OTTANF higher than regular TANF.
|
|
13
|
+
period: 2025-01
|
|
14
|
+
absolute_error_margin: 0.3
|
|
15
|
+
input:
|
|
16
|
+
tx_regular_tanf: 0
|
|
17
|
+
tx_ottanf: 83.33
|
|
18
|
+
state_code: TX
|
|
19
|
+
output:
|
|
20
|
+
tx_tanf: 83.33
|
|
21
|
+
# Regular TANF ($0) < OTTANF ($83.33/month) → Choose OTTANF
|
|
22
|
+
|
|
23
|
+
- name: Case 3, both zero.
|
|
24
|
+
period: 2025-01
|
|
25
|
+
input:
|
|
26
|
+
tx_regular_tanf: 0
|
|
27
|
+
tx_ottanf: 0
|
|
28
|
+
state_code: TX
|
|
29
|
+
output:
|
|
30
|
+
tx_tanf: 0
|
|
31
|
+
# Both zero → zero
|
|
32
|
+
|
|
33
|
+
- name: Case 4, equal amounts.
|
|
34
|
+
period: 2025-01
|
|
35
|
+
absolute_error_margin: 0.3
|
|
36
|
+
input:
|
|
37
|
+
tx_regular_tanf: 83.33
|
|
38
|
+
tx_ottanf: 83.33
|
|
39
|
+
state_code: TX
|
|
40
|
+
output:
|
|
41
|
+
tx_tanf: 83.33
|
|
42
|
+
# Both equal → returns 83.33
|
|
43
|
+
|
|
44
|
+
- name: Case 5, integration test regular TANF better for low income.
|
|
45
|
+
period: 2025-01
|
|
46
|
+
absolute_error_margin: 0.3
|
|
47
|
+
input:
|
|
48
|
+
people:
|
|
49
|
+
person1:
|
|
50
|
+
age: 30
|
|
51
|
+
is_tax_unit_head_or_spouse: true
|
|
52
|
+
employment_income: 0
|
|
53
|
+
immigration_status: CITIZEN
|
|
54
|
+
person2:
|
|
55
|
+
age: 10
|
|
56
|
+
immigration_status: CITIZEN
|
|
57
|
+
spm_units:
|
|
58
|
+
spm_unit:
|
|
59
|
+
members: [person1, person2]
|
|
60
|
+
spm_unit_cash_assets: 500
|
|
61
|
+
is_tanf_enrolled: false
|
|
62
|
+
tx_ottanf_crisis_criteria: true
|
|
63
|
+
households:
|
|
64
|
+
household:
|
|
65
|
+
members: [person1, person2]
|
|
66
|
+
state_code: TX
|
|
67
|
+
output:
|
|
68
|
+
tx_regular_tanf: 320
|
|
69
|
+
# Low income → eligible for regular TANF
|
|
70
|
+
tx_ottanf: 83.33
|
|
71
|
+
# Also eligible for OTTANF
|
|
72
|
+
tx_tanf: 320
|
|
73
|
+
# Regular TANF ($320) > OTTANF ($83.33) → Choose TANF
|
|
74
|
+
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
- name: Case 1, single parent with no income receives full grant.
|
|
2
|
+
period: 2025-01
|
|
3
|
+
input:
|
|
4
|
+
people:
|
|
5
|
+
person1:
|
|
6
|
+
age: 30
|
|
7
|
+
is_tax_unit_head_or_spouse: true
|
|
8
|
+
employment_income: 0
|
|
9
|
+
person2:
|
|
10
|
+
age: 10
|
|
11
|
+
spm_units:
|
|
12
|
+
spm_unit:
|
|
13
|
+
members: [person1, person2]
|
|
14
|
+
spm_unit_cash_assets: 800
|
|
15
|
+
is_tanf_enrolled: false
|
|
16
|
+
households:
|
|
17
|
+
household:
|
|
18
|
+
members: [person1, person2]
|
|
19
|
+
state_code: TX
|
|
20
|
+
output:
|
|
21
|
+
tx_regular_tanf: 320
|
|
22
|
+
|
|
23
|
+
- name: Case 2, benefit reduced by countable income.
|
|
24
|
+
period: 2025-01
|
|
25
|
+
absolute_error_margin: 0.01
|
|
26
|
+
input:
|
|
27
|
+
people:
|
|
28
|
+
person1:
|
|
29
|
+
age: 30
|
|
30
|
+
is_tax_unit_head_or_spouse: true
|
|
31
|
+
employment_income: 3_000
|
|
32
|
+
person2:
|
|
33
|
+
age: 10
|
|
34
|
+
spm_units:
|
|
35
|
+
spm_unit:
|
|
36
|
+
members: [person1, person2]
|
|
37
|
+
spm_unit_cash_assets: 800
|
|
38
|
+
is_tanf_enrolled: false
|
|
39
|
+
households:
|
|
40
|
+
household:
|
|
41
|
+
members: [person1, person2]
|
|
42
|
+
state_code: TX
|
|
43
|
+
output:
|
|
44
|
+
tx_regular_tanf: 232.90
|
|
45
|
+
|
|
46
|
+
- name: Case 3, minimum grant applied.
|
|
47
|
+
period: 2025-01
|
|
48
|
+
absolute_error_margin: 0.01
|
|
49
|
+
input:
|
|
50
|
+
people:
|
|
51
|
+
person1:
|
|
52
|
+
age: 30
|
|
53
|
+
is_tax_unit_head_or_spouse: true
|
|
54
|
+
employment_income: 3_720
|
|
55
|
+
person2:
|
|
56
|
+
age: 10
|
|
57
|
+
spm_units:
|
|
58
|
+
spm_unit:
|
|
59
|
+
members: [person1, person2]
|
|
60
|
+
spm_unit_cash_assets: 800
|
|
61
|
+
is_tanf_enrolled: false
|
|
62
|
+
households:
|
|
63
|
+
household:
|
|
64
|
+
members: [person1, person2]
|
|
65
|
+
state_code: TX
|
|
66
|
+
output:
|
|
67
|
+
tx_regular_tanf: 192.70
|
|
68
|
+
|
|
69
|
+
- name: Case 4, ineligible household receives zero.
|
|
70
|
+
period: 2025-01
|
|
71
|
+
input:
|
|
72
|
+
people:
|
|
73
|
+
person1:
|
|
74
|
+
age: 30
|
|
75
|
+
is_tax_unit_head_or_spouse: true
|
|
76
|
+
employment_income: 24_000
|
|
77
|
+
person2:
|
|
78
|
+
age: 10
|
|
79
|
+
spm_units:
|
|
80
|
+
spm_unit:
|
|
81
|
+
members: [person1, person2]
|
|
82
|
+
spm_unit_cash_assets: 800
|
|
83
|
+
is_tanf_enrolled: false
|
|
84
|
+
households:
|
|
85
|
+
household:
|
|
86
|
+
members: [person1, person2]
|
|
87
|
+
state_code: TX
|
|
88
|
+
output:
|
|
89
|
+
tx_regular_tanf: 0
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
- name: Case 1, caretaker without second parent size 2.
|
|
2
|
+
period: 2025-01
|
|
3
|
+
input:
|
|
4
|
+
people:
|
|
5
|
+
person1:
|
|
6
|
+
age: 30
|
|
7
|
+
is_tax_unit_head_or_spouse: true
|
|
8
|
+
person2:
|
|
9
|
+
age: 10
|
|
10
|
+
spm_units:
|
|
11
|
+
spm_unit:
|
|
12
|
+
members: [person1, person2]
|
|
13
|
+
households:
|
|
14
|
+
household:
|
|
15
|
+
members: [person1, person2]
|
|
16
|
+
state_code: TX
|
|
17
|
+
output:
|
|
18
|
+
tx_tanf_payment_standard: 320
|
|
19
|
+
|
|
20
|
+
- name: Case 2, caretaker with second parent size 3.
|
|
21
|
+
period: 2025-01
|
|
22
|
+
input:
|
|
23
|
+
people:
|
|
24
|
+
person1:
|
|
25
|
+
age: 30
|
|
26
|
+
is_tax_unit_head_or_spouse: true
|
|
27
|
+
person2:
|
|
28
|
+
age: 29
|
|
29
|
+
is_tax_unit_head_or_spouse: true
|
|
30
|
+
person3:
|
|
31
|
+
age: 10
|
|
32
|
+
spm_units:
|
|
33
|
+
spm_unit:
|
|
34
|
+
members: [person1, person2, person3]
|
|
35
|
+
households:
|
|
36
|
+
household:
|
|
37
|
+
members: [person1, person2, person3]
|
|
38
|
+
state_code: TX
|
|
39
|
+
output:
|
|
40
|
+
tx_tanf_payment_standard: 405
|
|
41
|
+
|
|
42
|
+
- name: Case 3, non-caretaker size 2.
|
|
43
|
+
period: 2025-01
|
|
44
|
+
input:
|
|
45
|
+
people:
|
|
46
|
+
person1:
|
|
47
|
+
age: 60
|
|
48
|
+
is_tax_unit_head_or_spouse: false
|
|
49
|
+
person2:
|
|
50
|
+
age: 10
|
|
51
|
+
person3:
|
|
52
|
+
age: 8
|
|
53
|
+
spm_units:
|
|
54
|
+
spm_unit:
|
|
55
|
+
members: [person1, person2, person3]
|
|
56
|
+
households:
|
|
57
|
+
household:
|
|
58
|
+
members: [person1, person2, person3]
|
|
59
|
+
state_code: TX
|
|
60
|
+
output:
|
|
61
|
+
tx_tanf_payment_standard: 182
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
- name: Case 1, citizen eligible.
|
|
2
|
+
period: 2025-01
|
|
3
|
+
input:
|
|
4
|
+
immigration_status: CITIZEN
|
|
5
|
+
output:
|
|
6
|
+
is_citizen_or_legal_immigrant: true
|
|
7
|
+
# Citizen → eligible
|
|
8
|
+
|
|
9
|
+
- name: Case 2, legal permanent resident eligible.
|
|
10
|
+
period: 2025-01
|
|
11
|
+
input:
|
|
12
|
+
immigration_status: LEGAL_PERMANENT_RESIDENT
|
|
13
|
+
output:
|
|
14
|
+
is_citizen_or_legal_immigrant: true
|
|
15
|
+
# Qualified noncitizen → eligible
|
|
16
|
+
|
|
17
|
+
- name: Case 3, refugee eligible.
|
|
18
|
+
period: 2025-01
|
|
19
|
+
input:
|
|
20
|
+
immigration_status: REFUGEE
|
|
21
|
+
output:
|
|
22
|
+
is_citizen_or_legal_immigrant: true
|
|
23
|
+
# Qualified noncitizen → eligible
|
|
24
|
+
|
|
25
|
+
- name: Case 4, undocumented not eligible.
|
|
26
|
+
period: 2025-01
|
|
27
|
+
input:
|
|
28
|
+
immigration_status: UNDOCUMENTED
|
|
29
|
+
output:
|
|
30
|
+
is_citizen_or_legal_immigrant: false
|
|
31
|
+
# Not qualified immigration status → not eligible
|
|
32
|
+
|
|
33
|
+
- name: Case 5, DACA not eligible.
|
|
34
|
+
period: 2025-01
|
|
35
|
+
input:
|
|
36
|
+
immigration_status: DACA
|
|
37
|
+
output:
|
|
38
|
+
is_citizen_or_legal_immigrant: false
|
|
39
|
+
# Not qualified immigration status → not eligible
|
|
40
|
+
|
|
41
|
+
- name: Case 6, asylee eligible.
|
|
42
|
+
period: 2025-01
|
|
43
|
+
input:
|
|
44
|
+
immigration_status: ASYLEE
|
|
45
|
+
output:
|
|
46
|
+
is_citizen_or_legal_immigrant: true
|
|
47
|
+
# Qualified noncitizen → eligible
|
|
48
|
+
|
|
49
|
+
- name: Case 7, Cuban/Haitian entrant eligible.
|
|
50
|
+
period: 2025-01
|
|
51
|
+
input:
|
|
52
|
+
immigration_status: CUBAN_HAITIAN_ENTRANT
|
|
53
|
+
output:
|
|
54
|
+
is_citizen_or_legal_immigrant: true
|
|
55
|
+
# Qualified noncitizen → eligible
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class in_harris_county_tx(Variable):
|
|
5
|
+
value_type = bool
|
|
6
|
+
entity = Household
|
|
7
|
+
definition_period = YEAR
|
|
8
|
+
label = "Is in Harris County, Texas"
|
|
9
|
+
|
|
10
|
+
def formula(household, period, parameters):
|
|
11
|
+
county = household("county_str", period)
|
|
12
|
+
return county == "HARRIS_COUNTY_TX"
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class tx_harris_rides_eligible(Variable):
|
|
5
|
+
value_type = bool
|
|
6
|
+
entity = Person
|
|
7
|
+
definition_period = YEAR
|
|
8
|
+
label = "Harris County RIDES eligibility"
|
|
9
|
+
reference = "https://rides.harriscountytx.gov/Registration/Registration-Information"
|
|
10
|
+
defined_for = "in_harris_county_tx"
|
|
11
|
+
|
|
12
|
+
def formula(person, period, parameters):
|
|
13
|
+
p = parameters(period).gov.local.tx.harris.rides
|
|
14
|
+
|
|
15
|
+
# Age eligibility
|
|
16
|
+
age = person("age", period)
|
|
17
|
+
age_eligible = age >= p.age_threshold
|
|
18
|
+
|
|
19
|
+
# Disability eligibility
|
|
20
|
+
has_disability = person("is_disabled", period)
|
|
21
|
+
|
|
22
|
+
return age_eligible | has_disability
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class tx_harris_rides_subsidy(Variable):
|
|
5
|
+
value_type = float
|
|
6
|
+
entity = Person
|
|
7
|
+
definition_period = YEAR
|
|
8
|
+
label = "Harris County RIDES transportation subsidy"
|
|
9
|
+
reference = "https://rides.harriscountytx.gov/"
|
|
10
|
+
unit = USD
|
|
11
|
+
defined_for = "tx_harris_rides_eligible"
|
|
12
|
+
|
|
13
|
+
def formula(person, period, parameters):
|
|
14
|
+
p = parameters(period).gov.local.tx.harris.rides
|
|
15
|
+
|
|
16
|
+
# Get estimated transportation costs
|
|
17
|
+
# In a real implementation, this would be based on actual trip data
|
|
18
|
+
# For now, we'll use a simplified estimate
|
|
19
|
+
transportation_costs = person(
|
|
20
|
+
"pre_subsidy_transportation_expense", period
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
# RIDES subsidizes 60% of trip costs (customer pays 40%)
|
|
24
|
+
subsidy_rate = 1 - p.customer_payment_rate
|
|
25
|
+
|
|
26
|
+
return transportation_costs * subsidy_rate
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class tx_tanf_age_eligible_child(Variable):
|
|
5
|
+
value_type = bool
|
|
6
|
+
entity = Person
|
|
7
|
+
label = "Age-eligible child for Texas TANF based on demographics"
|
|
8
|
+
definition_period = MONTH
|
|
9
|
+
reference = (
|
|
10
|
+
"https://www.hhs.texas.gov/handbooks/texas-works-handbook/a-220-tanf",
|
|
11
|
+
"https://www.law.cornell.edu/regulations/texas/1-TAC-372-307",
|
|
12
|
+
)
|
|
13
|
+
defined_for = StateCode.TX
|
|
14
|
+
|
|
15
|
+
def formula(person, period, parameters):
|
|
16
|
+
p = parameters(period).gov.states.tx.tanf.age_threshold
|
|
17
|
+
age = person("monthly_age", period)
|
|
18
|
+
is_dependent = person("is_tax_unit_dependent", period)
|
|
19
|
+
is_full_time_student = person("is_full_time_student", period)
|
|
20
|
+
|
|
21
|
+
age_eligible = where(
|
|
22
|
+
is_full_time_student,
|
|
23
|
+
age < p.student_dependent,
|
|
24
|
+
age < p.minor_child,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
return age_eligible & is_dependent
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class tx_tanf_assistance_unit_size(Variable):
|
|
5
|
+
value_type = int
|
|
6
|
+
entity = SPMUnit
|
|
7
|
+
label = "Texas TANF assistance unit size"
|
|
8
|
+
definition_period = MONTH
|
|
9
|
+
reference = (
|
|
10
|
+
"https://www.law.cornell.edu/regulations/texas/1-Tex-Admin-Code-SS-372-104",
|
|
11
|
+
"https://www.hhs.texas.gov/handbooks/texas-works-handbook/a-220-tanf",
|
|
12
|
+
)
|
|
13
|
+
defined_for = StateCode.TX
|
|
14
|
+
|
|
15
|
+
adds = [
|
|
16
|
+
"tx_tanf_eligible_child",
|
|
17
|
+
"tx_tanf_eligible_parent",
|
|
18
|
+
]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class tx_tanf_categorically_eligible_person(Variable):
|
|
5
|
+
value_type = bool
|
|
6
|
+
entity = Person
|
|
7
|
+
definition_period = MONTH
|
|
8
|
+
label = "Categorically eligible person for Texas TANF"
|
|
9
|
+
reference = (
|
|
10
|
+
"https://www.law.cornell.edu/regulations/texas/1-Tex-Admin-Code-SS-372-201",
|
|
11
|
+
"https://www.law.cornell.edu/regulations/texas/1-Tex-Admin-Code-SS-372-104",
|
|
12
|
+
)
|
|
13
|
+
defined_for = StateCode.TX
|
|
14
|
+
|
|
15
|
+
def formula(person, period, parameters):
|
|
16
|
+
immigration_eligible = person("is_citizen_or_legal_immigrant", period)
|
|
17
|
+
ssi = person("ssi", period)
|
|
18
|
+
|
|
19
|
+
return immigration_eligible & (ssi == 0)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class tx_tanf_eligible_child(Variable):
|
|
5
|
+
value_type = bool
|
|
6
|
+
entity = Person
|
|
7
|
+
definition_period = MONTH
|
|
8
|
+
label = "Eligible child for Texas TANF (included in certified group)"
|
|
9
|
+
reference = (
|
|
10
|
+
"https://www.law.cornell.edu/regulations/texas/1-Tex-Admin-Code-SS-372-104",
|
|
11
|
+
"https://www.hhs.texas.gov/handbooks/texas-works-handbook/a-220-tanf",
|
|
12
|
+
)
|
|
13
|
+
defined_for = StateCode.TX
|
|
14
|
+
|
|
15
|
+
def formula(person, period, parameters):
|
|
16
|
+
# Child must meet age/demographic requirements
|
|
17
|
+
age_eligible = person("tx_tanf_age_eligible_child", period)
|
|
18
|
+
|
|
19
|
+
# And meet inclusion requirements (immigration eligible, not receiving SSI)
|
|
20
|
+
inclusion_requirements = person(
|
|
21
|
+
"tx_tanf_categorically_eligible_person", period
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
return age_eligible & inclusion_requirements
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class tx_tanf_eligible_parent(Variable):
|
|
5
|
+
value_type = bool
|
|
6
|
+
entity = Person
|
|
7
|
+
definition_period = MONTH
|
|
8
|
+
label = "Eligible parent for Texas TANF (included in certified group)"
|
|
9
|
+
reference = (
|
|
10
|
+
"https://www.law.cornell.edu/regulations/texas/1-Tex-Admin-Code-SS-372-104",
|
|
11
|
+
"https://www.law.cornell.edu/regulations/texas/1-Tex-Admin-Code-SS-372-102",
|
|
12
|
+
)
|
|
13
|
+
defined_for = StateCode.TX
|
|
14
|
+
|
|
15
|
+
def formula(person, period, parameters):
|
|
16
|
+
# Per § 372.104, parents living in household must be included in certified group
|
|
17
|
+
is_parent = person("is_tax_unit_head_or_spouse", period)
|
|
18
|
+
|
|
19
|
+
# Must meet inclusion requirements
|
|
20
|
+
inclusion_requirements = person(
|
|
21
|
+
"tx_tanf_categorically_eligible_person", period
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
return is_parent & inclusion_requirements
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class tx_tanf_budgetary_needs(Variable):
|
|
5
|
+
value_type = float
|
|
6
|
+
entity = SPMUnit
|
|
7
|
+
label = "Texas TANF budgetary needs amount"
|
|
8
|
+
unit = USD
|
|
9
|
+
definition_period = MONTH
|
|
10
|
+
reference = (
|
|
11
|
+
"https://www.hhs.texas.gov/handbooks/texas-works-handbook/c-110-tanf",
|
|
12
|
+
"https://www.law.cornell.edu/regulations/texas/1-Tex-Admin-Code-SS-372-2",
|
|
13
|
+
)
|
|
14
|
+
defined_for = StateCode.TX
|
|
15
|
+
|
|
16
|
+
def formula(spm_unit, period, parameters):
|
|
17
|
+
# Budgetary needs varies by caretaker type and household size
|
|
18
|
+
size = spm_unit("tx_tanf_assistance_unit_size", period)
|
|
19
|
+
caretaker_type = spm_unit("tx_tanf_caretaker_type", period)
|
|
20
|
+
p = parameters(period).gov.states.tx.tanf.needs_standard
|
|
21
|
+
|
|
22
|
+
# Determine caretaker type
|
|
23
|
+
non_caretaker = (
|
|
24
|
+
caretaker_type == caretaker_type.possible_values.NON_CARETAKER
|
|
25
|
+
)
|
|
26
|
+
caretaker_without_second = (
|
|
27
|
+
caretaker_type
|
|
28
|
+
== caretaker_type.possible_values.CARETAKER_WITHOUT_SECOND_PARENT
|
|
29
|
+
)
|
|
30
|
+
caretaker_with_second = (
|
|
31
|
+
caretaker_type
|
|
32
|
+
== caretaker_type.possible_values.CARETAKER_WITH_SECOND_PARENT
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
# For sizes <= 15, use table; for sizes > 15, use size 15 + increment
|
|
36
|
+
size_capped = min_(size, 15)
|
|
37
|
+
additional_people = max_(size - 15, 0)
|
|
38
|
+
additional_amount = (
|
|
39
|
+
additional_people * p.budgetary_needs.additional_person
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
# Get base amount for size (capped at 15)
|
|
43
|
+
base_amount = select(
|
|
44
|
+
[non_caretaker, caretaker_without_second, caretaker_with_second],
|
|
45
|
+
[
|
|
46
|
+
p.budgetary_needs.non_caretaker.calc(size_capped),
|
|
47
|
+
p.budgetary_needs.caretaker_without_second_parent.calc(
|
|
48
|
+
size_capped
|
|
49
|
+
),
|
|
50
|
+
p.budgetary_needs.caretaker_with_second_parent.calc(
|
|
51
|
+
size_capped
|
|
52
|
+
),
|
|
53
|
+
],
|
|
54
|
+
default=0,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
return base_amount + additional_amount
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class tx_tanf_budgetary_needs_test(Variable):
|
|
5
|
+
value_type = bool
|
|
6
|
+
entity = SPMUnit
|
|
7
|
+
label = "Meets Texas TANF budgetary needs test"
|
|
8
|
+
definition_period = MONTH
|
|
9
|
+
reference = "https://www.hhs.texas.gov/handbooks/texas-works-handbook/a-1340-income-limits"
|
|
10
|
+
defined_for = StateCode.TX
|
|
11
|
+
|
|
12
|
+
def formula(spm_unit, period, parameters):
|
|
13
|
+
# Budgetary needs test applies to applicants (not receiving TANF in last 4 months)
|
|
14
|
+
# Household passes if budgetary needs > income
|
|
15
|
+
|
|
16
|
+
budgetary_needs = spm_unit("tx_tanf_budgetary_needs", period)
|
|
17
|
+
income_for_test = spm_unit(
|
|
18
|
+
"tx_tanf_income_for_budgetary_needs_test", period
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
return budgetary_needs > income_for_test
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class TxTanfCaretakerType(Enum):
|
|
5
|
+
NON_CARETAKER = "Non-caretaker"
|
|
6
|
+
CARETAKER_WITHOUT_SECOND_PARENT = "Caretaker without second parent"
|
|
7
|
+
CARETAKER_WITH_SECOND_PARENT = "Caretaker with second parent"
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class tx_tanf_caretaker_type(Variable):
|
|
11
|
+
value_type = Enum
|
|
12
|
+
possible_values = TxTanfCaretakerType
|
|
13
|
+
default_value = TxTanfCaretakerType.NON_CARETAKER
|
|
14
|
+
entity = SPMUnit
|
|
15
|
+
label = "Texas TANF caretaker type"
|
|
16
|
+
definition_period = MONTH
|
|
17
|
+
reference = (
|
|
18
|
+
"https://www.hhs.texas.gov/handbooks/texas-works-handbook/c-110-tanf"
|
|
19
|
+
)
|
|
20
|
+
defined_for = StateCode.TX
|
|
21
|
+
|
|
22
|
+
def formula(spm_unit, period, parameters):
|
|
23
|
+
# Caretaker type determines payment standard amount
|
|
24
|
+
# Based on number of parents included in certified group
|
|
25
|
+
|
|
26
|
+
person = spm_unit.members
|
|
27
|
+
eligible_parent = person("tx_tanf_eligible_parent", period)
|
|
28
|
+
eligible_child = person("tx_tanf_eligible_child", period)
|
|
29
|
+
|
|
30
|
+
# Count payment-eligible parents and children
|
|
31
|
+
parent_count = spm_unit.sum(eligible_parent)
|
|
32
|
+
has_eligible_child = spm_unit.any(eligible_child)
|
|
33
|
+
|
|
34
|
+
# Determine caretaker type
|
|
35
|
+
# Non-caretaker: No parents in certified group (child-only cases)
|
|
36
|
+
# Caretaker without second: One parent in certified group
|
|
37
|
+
# Caretaker with second: Two or more parents in certified group
|
|
38
|
+
non_caretaker = has_eligible_child & (parent_count == 0)
|
|
39
|
+
caretaker_without_second = has_eligible_child & (parent_count == 1)
|
|
40
|
+
caretaker_with_second = has_eligible_child & (parent_count >= 2)
|
|
41
|
+
|
|
42
|
+
return select(
|
|
43
|
+
[non_caretaker, caretaker_without_second, caretaker_with_second],
|
|
44
|
+
[
|
|
45
|
+
TxTanfCaretakerType.NON_CARETAKER,
|
|
46
|
+
TxTanfCaretakerType.CARETAKER_WITHOUT_SECOND_PARENT,
|
|
47
|
+
TxTanfCaretakerType.CARETAKER_WITH_SECOND_PARENT,
|
|
48
|
+
],
|
|
49
|
+
default=TxTanfCaretakerType.NON_CARETAKER,
|
|
50
|
+
)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class tx_tanf_eligible(Variable):
|
|
5
|
+
value_type = bool
|
|
6
|
+
entity = SPMUnit
|
|
7
|
+
label = "Eligible for Texas Temporary Assistance for Needy Families (TANF)"
|
|
8
|
+
definition_period = MONTH
|
|
9
|
+
reference = (
|
|
10
|
+
"https://www.hhs.texas.gov/handbooks/texas-works-handbook/a-220-tanf",
|
|
11
|
+
"https://www.hhs.texas.gov/handbooks/texas-works-handbook/a-2420-eligibility-requirements",
|
|
12
|
+
"https://www.law.cornell.edu/regulations/texas/title-1/part-15/chapter-372/subchapter-B",
|
|
13
|
+
)
|
|
14
|
+
defined_for = StateCode.TX
|
|
15
|
+
|
|
16
|
+
def formula(spm_unit, period, parameters):
|
|
17
|
+
person = spm_unit.members
|
|
18
|
+
|
|
19
|
+
# Must have at least one eligible child in certified group
|
|
20
|
+
# (eligible child already includes immigration and SSI checks)
|
|
21
|
+
has_eligible_child = spm_unit.any(
|
|
22
|
+
person("tx_tanf_eligible_child", period)
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
# Financial eligibility
|
|
26
|
+
income_eligible = spm_unit("tx_tanf_income_eligible", period)
|
|
27
|
+
resources_eligible = spm_unit("tx_tanf_resources_eligible", period)
|
|
28
|
+
|
|
29
|
+
return has_eligible_child & income_eligible & resources_eligible
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class tx_tanf_income_eligible(Variable):
|
|
5
|
+
value_type = bool
|
|
6
|
+
entity = SPMUnit
|
|
7
|
+
label = "Meets Texas TANF income test"
|
|
8
|
+
definition_period = MONTH
|
|
9
|
+
reference = "https://www.hhs.texas.gov/handbooks/texas-works-handbook/a-1340-income-limits"
|
|
10
|
+
defined_for = StateCode.TX
|
|
11
|
+
|
|
12
|
+
def formula(spm_unit, period, parameters):
|
|
13
|
+
# Texas TANF has two income eligibility tests per § 372.408:
|
|
14
|
+
#
|
|
15
|
+
# Budgetary needs test (§ 372.408 (a)(1)):
|
|
16
|
+
# - Uses income WITHOUT earned income disregards (1/3 or 90%)
|
|
17
|
+
# - Income < budgetary needs amount (100% of needs)
|
|
18
|
+
# - Applies to: NEW applicants only
|
|
19
|
+
#
|
|
20
|
+
# Recognizable needs test (§ 372.408 (a)(2)):
|
|
21
|
+
# - Uses income WITH earned income disregards (1/3 or 90%)
|
|
22
|
+
# - Income < recognizable needs amount (25% of budgetary needs)
|
|
23
|
+
# - Applies to: EVERYONE (applicants AND continuing recipients)
|
|
24
|
+
#
|
|
25
|
+
# Test requirements by enrollment status:
|
|
26
|
+
# - New applicants: Must pass budgetary test AND recognizable test
|
|
27
|
+
# - Continuing recipients: Must pass recognizable test only
|
|
28
|
+
|
|
29
|
+
is_enrolled = spm_unit("is_tanf_enrolled", period)
|
|
30
|
+
passes_budgetary = spm_unit("tx_tanf_budgetary_needs_test", period)
|
|
31
|
+
passes_recognizable = spm_unit(
|
|
32
|
+
"tx_tanf_recognizable_needs_test", period
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
# Apply the appropriate test(s) based on enrollment status
|
|
36
|
+
return where(
|
|
37
|
+
is_enrolled,
|
|
38
|
+
passes_recognizable, # Continuing: recognizable test only
|
|
39
|
+
passes_budgetary & passes_recognizable, # Applicants: BOTH tests
|
|
40
|
+
)
|