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.

Files changed (99) hide show
  1. policyengine_us/parameters/gov/dhs/immigration/qualified_noncitizen_status.yaml +18 -0
  2. policyengine_us/parameters/gov/local/tx/harris/rides/age_threshold.yaml +13 -0
  3. policyengine_us/parameters/gov/local/tx/harris/rides/customer_payment_rate.yaml +12 -0
  4. policyengine_us/parameters/gov/states/tx/tanf/age_threshold/minor_child.yaml +13 -0
  5. policyengine_us/parameters/gov/states/tx/tanf/age_threshold/student_dependent.yaml +13 -0
  6. policyengine_us/parameters/gov/states/tx/tanf/income/deductions/child_support.yaml +14 -0
  7. policyengine_us/parameters/gov/states/tx/tanf/income/deductions/dependent_care.yaml +23 -0
  8. policyengine_us/parameters/gov/states/tx/tanf/income/deductions/work_expense.yaml +13 -0
  9. policyengine_us/parameters/gov/states/tx/tanf/income/disregards/applicant_fraction.yaml +12 -0
  10. policyengine_us/parameters/gov/states/tx/tanf/income/disregards/continuing_recipient_cap.yaml +13 -0
  11. policyengine_us/parameters/gov/states/tx/tanf/income/disregards/continuing_recipient_months.yaml +14 -0
  12. policyengine_us/parameters/gov/states/tx/tanf/income/disregards/continuing_recipient_rate.yaml +13 -0
  13. policyengine_us/parameters/gov/states/tx/tanf/income/sources/earned.yaml +15 -0
  14. policyengine_us/parameters/gov/states/tx/tanf/income/sources/unearned.yaml +28 -0
  15. policyengine_us/parameters/gov/states/tx/tanf/minimum_grant.yaml +13 -0
  16. policyengine_us/parameters/gov/states/tx/tanf/needs_standard/budgetary_needs/additional_person.yaml +17 -0
  17. policyengine_us/parameters/gov/states/tx/tanf/needs_standard/budgetary_needs/caretaker_with_second_parent.yaml +81 -0
  18. policyengine_us/parameters/gov/states/tx/tanf/needs_standard/budgetary_needs/caretaker_without_second_parent.yaml +85 -0
  19. policyengine_us/parameters/gov/states/tx/tanf/needs_standard/budgetary_needs/non_caretaker.yaml +85 -0
  20. policyengine_us/parameters/gov/states/tx/tanf/needs_standard/recognizable_needs/additional_person.yaml +17 -0
  21. policyengine_us/parameters/gov/states/tx/tanf/needs_standard/recognizable_needs/rate.yaml +17 -0
  22. policyengine_us/parameters/gov/states/tx/tanf/ottanf/payment_amount.yaml +13 -0
  23. policyengine_us/parameters/gov/states/tx/tanf/payment_standard/additional_person.yaml +19 -0
  24. policyengine_us/parameters/gov/states/tx/tanf/payment_standard/caretaker_with_second_parent.yaml +105 -0
  25. policyengine_us/parameters/gov/states/tx/tanf/payment_standard/caretaker_without_second_parent.yaml +112 -0
  26. policyengine_us/parameters/gov/states/tx/tanf/payment_standard/non_caretaker.yaml +111 -0
  27. policyengine_us/parameters/gov/states/tx/tanf/resources/resource_limit.yaml +13 -0
  28. policyengine_us/parameters/gov/states/tx/tanf/resources/vehicle_exemption.yaml +11 -0
  29. policyengine_us/tests/policy/baseline/gov/local/tx/harris/in_harris_county_tx.yaml +27 -0
  30. policyengine_us/tests/policy/baseline/gov/local/tx/harris/rides/tx_harris_rides_eligible.yaml +35 -0
  31. policyengine_us/tests/policy/baseline/gov/local/tx/harris/rides/tx_harris_rides_subsidy.yaml +32 -0
  32. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/assistance_unit/tx_tanf_age_eligible_child.yaml +34 -0
  33. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/assistance_unit/tx_tanf_assistance_unit_size.yaml +62 -0
  34. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/assistance_unit/tx_tanf_categorically_eligible_person.yaml +49 -0
  35. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/assistance_unit/tx_tanf_eligible_child.yaml +34 -0
  36. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/assistance_unit/tx_tanf_eligible_parent.yaml +38 -0
  37. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/eligibility/tx_tanf_budgetary_needs.yaml +65 -0
  38. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/eligibility/tx_tanf_budgetary_needs_test.yaml +30 -0
  39. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/eligibility/tx_tanf_caretaker_type.yaml +116 -0
  40. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/eligibility/tx_tanf_eligible.yaml +123 -0
  41. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/eligibility/tx_tanf_income_eligible.yaml +69 -0
  42. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/eligibility/tx_tanf_recognizable_needs_test.yaml +54 -0
  43. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/eligibility/tx_tanf_resources_eligible.yaml +44 -0
  44. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/income/deductions/tx_tanf_child_support_deduction.yaml +55 -0
  45. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/income/deductions/tx_tanf_dependent_care_deduction.yaml +54 -0
  46. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/income/earned/tx_tanf_countable_earned_income.yaml +39 -0
  47. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/income/earned/tx_tanf_earned_income_after_disregard_person.yaml +36 -0
  48. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/income/tx_tanf_income_for_budgetary_needs_test.yaml +102 -0
  49. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/income/unearned/tx_tanf_countable_unearned_income.yaml +49 -0
  50. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/integration.yaml +291 -0
  51. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/ottanf/tx_ottanf.yaml +47 -0
  52. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/ottanf/tx_ottanf_crisis_criteria.yaml +17 -0
  53. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/ottanf/tx_ottanf_eligible.yaml +158 -0
  54. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/resources/tx_tanf_countable_resources.yaml +39 -0
  55. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/tx_regular_tanf.yaml +74 -0
  56. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/tx_tanf.yaml +89 -0
  57. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/tx_tanf_payment_standard.yaml +61 -0
  58. policyengine_us/tests/policy/baseline/household/demographic/person/is_citizen_or_legal_immigrant.yaml +55 -0
  59. policyengine_us/variables/gov/local/tx/harris/in_harris_county_tx.py +12 -0
  60. policyengine_us/variables/gov/local/tx/harris/rides/tx_harris_rides_eligible.py +22 -0
  61. policyengine_us/variables/gov/local/tx/harris/rides/tx_harris_rides_subsidy.py +26 -0
  62. policyengine_us/variables/gov/states/tx/tanf/assistance_unit/tx_tanf_age_eligible_child.py +27 -0
  63. policyengine_us/variables/gov/states/tx/tanf/assistance_unit/tx_tanf_assistance_unit_size.py +18 -0
  64. policyengine_us/variables/gov/states/tx/tanf/assistance_unit/tx_tanf_categorically_eligible_person.py +19 -0
  65. policyengine_us/variables/gov/states/tx/tanf/assistance_unit/tx_tanf_eligible_child.py +24 -0
  66. policyengine_us/variables/gov/states/tx/tanf/assistance_unit/tx_tanf_eligible_parent.py +24 -0
  67. policyengine_us/variables/gov/states/tx/tanf/eligibility/tx_tanf_budgetary_needs.py +57 -0
  68. policyengine_us/variables/gov/states/tx/tanf/eligibility/tx_tanf_budgetary_needs_test.py +21 -0
  69. policyengine_us/variables/gov/states/tx/tanf/eligibility/tx_tanf_caretaker_type.py +50 -0
  70. policyengine_us/variables/gov/states/tx/tanf/eligibility/tx_tanf_eligible.py +29 -0
  71. policyengine_us/variables/gov/states/tx/tanf/eligibility/tx_tanf_income_eligible.py +40 -0
  72. policyengine_us/variables/gov/states/tx/tanf/eligibility/tx_tanf_recognizable_needs_test.py +23 -0
  73. policyengine_us/variables/gov/states/tx/tanf/eligibility/tx_tanf_resources_eligible.py +19 -0
  74. policyengine_us/variables/gov/states/tx/tanf/income/deductions/tx_tanf_child_support_deduction.py +21 -0
  75. policyengine_us/variables/gov/states/tx/tanf/income/deductions/tx_tanf_dependent_care_deduction.py +39 -0
  76. policyengine_us/variables/gov/states/tx/tanf/income/earned/tx_tanf_countable_earned_income.py +28 -0
  77. policyengine_us/variables/gov/states/tx/tanf/income/earned/tx_tanf_earned_income_after_disregard_person.py +52 -0
  78. policyengine_us/variables/gov/states/tx/tanf/income/earned/tx_tanf_gross_earned_income.py +16 -0
  79. policyengine_us/variables/gov/states/tx/tanf/income/tx_tanf_countable_income.py +19 -0
  80. policyengine_us/variables/gov/states/tx/tanf/income/tx_tanf_income_for_budgetary_needs_test.py +47 -0
  81. policyengine_us/variables/gov/states/tx/tanf/income/unearned/tx_tanf_countable_unearned_income.py +27 -0
  82. policyengine_us/variables/gov/states/tx/tanf/income/unearned/tx_tanf_gross_unearned_income.py +16 -0
  83. policyengine_us/variables/gov/states/tx/tanf/ottanf/tx_ottanf.py +17 -0
  84. policyengine_us/variables/gov/states/tx/tanf/ottanf/tx_ottanf_crisis_criteria.py +21 -0
  85. policyengine_us/variables/gov/states/tx/tanf/ottanf/tx_ottanf_eligible.py +36 -0
  86. policyengine_us/variables/gov/states/tx/tanf/resources/tx_tanf_countable_resources.py +31 -0
  87. policyengine_us/variables/gov/states/tx/tanf/tx_regular_tanf.py +27 -0
  88. policyengine_us/variables/gov/states/tx/tanf/tx_tanf.py +25 -0
  89. policyengine_us/variables/gov/states/tx/tanf/tx_tanf_payment_standard.py +51 -0
  90. policyengine_us/variables/household/demographic/person/is_citizen_or_legal_immigrant.py +22 -0
  91. policyengine_us/variables/household/expense/person/pre_subsidy_transportation_expense.py +9 -0
  92. {policyengine_us-1.417.3.dist-info → policyengine_us-1.419.0.dist-info}/METADATA +1 -1
  93. {policyengine_us-1.417.3.dist-info → policyengine_us-1.419.0.dist-info}/RECORD +96 -8
  94. policyengine_us/parameters/gov/states/tx/tanf/monthly_income_limit.yaml +0 -31
  95. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/tx_tanf_income_limit.yaml +0 -17
  96. policyengine_us/variables/gov/states/tx/tanf/tx_tanf_income_limit.py +0 -18
  97. {policyengine_us-1.417.3.dist-info → policyengine_us-1.419.0.dist-info}/WHEEL +0 -0
  98. {policyengine_us-1.417.3.dist-info → policyengine_us-1.419.0.dist-info}/entry_points.txt +0 -0
  99. {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
+ )