policyengine-us 1.358.1__py3-none-any.whl → 1.360.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 (96) hide show
  1. policyengine_us/parameters/gov/states/dc/dhs/gac/README.md +1 -0
  2. policyengine_us/parameters/gov/states/dc/dhs/gac/income_disregard/amount.yaml +12 -0
  3. policyengine_us/parameters/gov/states/dc/dhs/power/README.md +1 -0
  4. policyengine_us/parameters/gov/states/dc/dhs/power/age_threshold/older.yaml +11 -0
  5. policyengine_us/parameters/gov/states/dc/dhs/power/age_threshold/younger.yaml +11 -0
  6. policyengine_us/parameters/gov/states/dc/dhs/power/disqualifying_benefits.yaml +14 -0
  7. policyengine_us/parameters/gov/states/dc/dhs/qualified_noncitizen_statuses.yaml +21 -0
  8. policyengine_us/parameters/gov/states/dc/dhs/tanf/standard_payment/amount.yaml +1 -1
  9. policyengine_us/parameters/gov/states/dc/dhs/tanf/work_requirement/required_hours/single_parent/amount.yaml +20 -0
  10. policyengine_us/parameters/gov/states/dc/dhs/tanf/work_requirement/required_hours/single_parent/higher/amount.yaml +12 -0
  11. policyengine_us/parameters/gov/states/dc/dhs/tanf/work_requirement/required_hours/single_parent/lower/amount.yaml +12 -0
  12. policyengine_us/parameters/gov/states/dc/dhs/tanf/work_requirement/required_hours/single_parent/lower/young_child_age_threshold.yaml +11 -0
  13. policyengine_us/parameters/gov/states/dc/dhs/tanf/work_requirement/required_hours/two_parents/amount.yaml +12 -0
  14. policyengine_us/parameters/gov/states/dc/dhs/tanf/work_requirement/work_exempted/elderly_age_threshold.yaml +11 -0
  15. policyengine_us/parameters/gov/states/dc/dhs/tanf/work_requirement/work_exempted/infant_age_threshold.yaml +11 -0
  16. policyengine_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/military_retirement/amount.yaml +3 -1
  17. policyengine_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/military_retirement/full_exemption_threshold.yaml +11 -0
  18. policyengine_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/military_retirement/income_based_structure/in_effect.yaml +11 -0
  19. policyengine_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/military_retirement/partial_exemption_threshold.yaml +11 -0
  20. policyengine_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/social_security/reduction/end.yaml +7 -0
  21. policyengine_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/social_security/reduction/start.yaml +7 -0
  22. policyengine_us/parameters/gov/states/vt/tax/income/credits/ctc/age_limit.yaml +3 -0
  23. policyengine_us/parameters/gov/states/vt/tax/income/credits/eitc/enhanced_structure/in_effect.yaml +13 -0
  24. policyengine_us/parameters/gov/states/vt/tax/income/credits/eitc/enhanced_structure/rate.yaml +21 -0
  25. policyengine_us/parameters/gov/states/vt/tax/income/credits/refundable.yaml +8 -1
  26. policyengine_us/parameters/gov/states/vt/tax/income/credits/veteran/amount.yaml +11 -0
  27. policyengine_us/parameters/gov/states/vt/tax/income/credits/veteran/full_credit_threshold.yaml +11 -0
  28. policyengine_us/parameters/gov/states/vt/tax/income/credits/veteran/income_increment.yaml +11 -0
  29. policyengine_us/parameters/gov/states/vt/tax/income/credits/veteran/partial_credit_threshold.yaml +11 -0
  30. policyengine_us/parameters/gov/states/vt/tax/income/credits/veteran/reduction_per_increment.yaml +11 -0
  31. policyengine_us/tests/policy/baseline/gov/hhs/tanf/cash/integration.yaml +1 -0
  32. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/dc_pap_eligible_child.yaml +47 -0
  33. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/gac/dc_gac.yaml +86 -0
  34. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/gac/dc_gac_standard_payment.yaml +39 -0
  35. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/gac/eligibility/dc_gac_eligible.yaml +39 -0
  36. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/gac/eligibility/dc_gac_eligible_child.yaml +58 -0
  37. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/gac/eligibility/dc_gac_income_eligible.yaml +26 -0
  38. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/gac/income/dc_gac_earned_income_after_disregard_person.yaml +32 -0
  39. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/integration_tests.yaml +171 -0
  40. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/power/dc_power.yaml +26 -0
  41. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/power/dc_power_eligible.yaml +94 -0
  42. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/power/dc_power_head_or_spouse_eligible.yaml +84 -0
  43. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/dc_tanf_assistance_unit_size.yaml +17 -0
  44. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/dc_tanf_standard_payment.yaml +5 -5
  45. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/eligibility/dc_tanf_basic_eligibility_requirements.yaml +39 -0
  46. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/eligibility/dc_tanf_demographic_eligible_person.yaml +11 -0
  47. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/eligibility/dc_tanf_eligible.yaml +6 -6
  48. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/eligibility/dc_tanf_immigration_status_eligible_person.yaml +0 -12
  49. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/eligibility/dc_tanf_income_eligible.yaml +0 -2
  50. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/integration.yaml +6 -2
  51. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/work_requirement/dc_tanf_is_working.yaml +128 -0
  52. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/work_requirement/dc_tanf_meets_work_requirements.yaml +53 -0
  53. policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/work_requirement/dc_tanf_work_requirement_exempt.yaml +81 -0
  54. policyengine_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_military_retirement_pay_exclusion.yaml +55 -0
  55. policyengine_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_retirement_income_exemption.yaml +53 -0
  56. policyengine_us/tests/policy/baseline/gov/states/vt/tax/income/credits/vt_ctc.yaml +37 -0
  57. policyengine_us/tests/policy/baseline/gov/states/vt/tax/income/credits/vt_veteran_tax_credit.yaml +151 -0
  58. policyengine_us/tests/policy/baseline/gov/states/vt/tax/income/vt_eitc.yaml +39 -0
  59. policyengine_us/tests/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_military_retirement_income_based_exemption.yaml +106 -0
  60. policyengine_us/tests/variables/gov/states/vt/tax/income/credits/vt_veteran_tax_credit.yaml +129 -0
  61. policyengine_us/tests/variables/gov/states/vt/tax/income/vt_eitc.yaml +100 -0
  62. policyengine_us/variables/gov/states/dc/dhs/dc_pap_eligible_child.py +23 -0
  63. policyengine_us/variables/gov/states/dc/dhs/gac/dc_gac.py +18 -0
  64. policyengine_us/variables/gov/states/dc/dhs/gac/dc_gac_assistance_unit_size.py +15 -0
  65. policyengine_us/variables/gov/states/dc/dhs/gac/dc_gac_standard_payment.py +19 -0
  66. policyengine_us/variables/gov/states/dc/dhs/gac/eligibility/dc_gac_eligible.py +20 -0
  67. policyengine_us/variables/gov/states/dc/dhs/gac/eligibility/dc_gac_eligible_child.py +15 -0
  68. policyengine_us/variables/gov/states/dc/dhs/gac/eligibility/dc_gac_income_eligible.py +19 -0
  69. policyengine_us/variables/gov/states/dc/dhs/gac/income/dc_gac_countable_income.py +18 -0
  70. policyengine_us/variables/gov/states/dc/dhs/gac/income/dc_gac_countable_unearned_income_person.py +17 -0
  71. policyengine_us/variables/gov/states/dc/dhs/gac/income/dc_gac_earned_income_after_disregard_person.py +28 -0
  72. policyengine_us/variables/gov/states/dc/dhs/power/dc_power.py +18 -0
  73. policyengine_us/variables/gov/states/dc/dhs/power/dc_power_eligible.py +30 -0
  74. policyengine_us/variables/gov/states/dc/dhs/power/dc_power_has_disqualifying_beneifts.py +14 -0
  75. policyengine_us/variables/gov/states/dc/dhs/power/dc_power_head_or_spouse_eligible.py +38 -0
  76. policyengine_us/variables/gov/states/dc/dhs/tanf/dc_tanf_assistance_unit_size.py +15 -0
  77. policyengine_us/variables/gov/states/dc/dhs/tanf/dc_tanf_standard_payment.py +1 -1
  78. policyengine_us/variables/gov/states/dc/dhs/tanf/eligibility/dc_tanf_basic_eligibility_requirements.py +18 -0
  79. policyengine_us/variables/gov/states/dc/dhs/tanf/eligibility/dc_tanf_demographic_eligible_person.py +10 -12
  80. policyengine_us/variables/gov/states/dc/dhs/tanf/eligibility/dc_tanf_eligible.py +5 -17
  81. policyengine_us/variables/gov/states/dc/dhs/tanf/eligibility/dc_tanf_immigration_status_eligible_person.py +6 -1
  82. policyengine_us/variables/gov/states/dc/dhs/tanf/income/dc_tanf_countable_income.py +6 -1
  83. policyengine_us/variables/gov/states/dc/dhs/tanf/work_requirement/dc_tanf_is_working.py +40 -0
  84. policyengine_us/variables/gov/states/dc/dhs/tanf/work_requirement/dc_tanf_meets_work_requirements.py +22 -0
  85. policyengine_us/variables/gov/states/dc/dhs/tanf/work_requirement/dc_tanf_work_requirement_exempt.py +39 -0
  86. policyengine_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_military_retirement_cap_based_exemption.py +25 -0
  87. policyengine_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_military_retirement_income_based_exemption.py +79 -0
  88. policyengine_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_military_retirement_pay_exclusion.py +19 -4
  89. policyengine_us/variables/gov/states/vt/tax/income/credits/vt_veteran_tax_credit.py +58 -0
  90. policyengine_us/variables/gov/states/vt/tax/income/vt_eitc.py +9 -1
  91. policyengine_us/variables/household/demographic/person/is_related_to_head_or_spouse.py +9 -0
  92. {policyengine_us-1.358.1.dist-info → policyengine_us-1.360.0.dist-info}/METADATA +1 -1
  93. {policyengine_us-1.358.1.dist-info → policyengine_us-1.360.0.dist-info}/RECORD +96 -29
  94. {policyengine_us-1.358.1.dist-info → policyengine_us-1.360.0.dist-info}/WHEEL +0 -0
  95. {policyengine_us-1.358.1.dist-info → policyengine_us-1.360.0.dist-info}/entry_points.txt +0 -0
  96. {policyengine_us-1.358.1.dist-info → policyengine_us-1.360.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,106 @@
1
+ - name: No military retirement pay - zero exemption
2
+ period: 2025
3
+ input:
4
+ state_code: VT
5
+ military_retirement_pay: 0
6
+ adjusted_gross_income: 100_000
7
+ output:
8
+ vt_military_retirement_income_based_exemption: 0
9
+
10
+ - name: Before 2025 - no income-based exemption (thresholds are infinity)
11
+ period: 2024
12
+ input:
13
+ state_code: VT
14
+ military_retirement_pay: 15_000
15
+ adjusted_gross_income: 50_000 # Low AGI but before effective date
16
+ output:
17
+ vt_military_retirement_income_based_exemption: 0
18
+
19
+ - name: 2025 full exemption - AGI below threshold
20
+ period: 2025
21
+ input:
22
+ state_code: VT
23
+ military_retirement_pay: 15_000
24
+ adjusted_gross_income: 100_000 # Below $125,000 threshold
25
+ output:
26
+ vt_military_retirement_income_based_exemption: 15_000
27
+
28
+ - name: 2025 no exemption - AGI above partial threshold
29
+ period: 2025
30
+ input:
31
+ state_code: VT
32
+ military_retirement_pay: 15_000
33
+ adjusted_gross_income: 180_000 # Above $175,000 threshold
34
+ output:
35
+ vt_military_retirement_income_based_exemption: 0
36
+
37
+ - name: 2025 partial exemption - midpoint calculation
38
+ period: 2025
39
+ input:
40
+ state_code: VT
41
+ military_retirement_pay: 20_000
42
+ adjusted_gross_income: 150_000 # Midpoint between $125K and $175K thresholds
43
+ output:
44
+ # (175,000 - 150,000) / (175,000 - 125,000) = 25,000 / 50,000 = 0.5
45
+ # 0.5 * 20,000 = 10,000
46
+ vt_military_retirement_income_based_exemption: 10_000
47
+
48
+ - name: 2025 partial exemption - near full threshold
49
+ period: 2025
50
+ input:
51
+ state_code: VT
52
+ military_retirement_pay: 30_000
53
+ adjusted_gross_income: 130_000 # $5K above full threshold
54
+ output:
55
+ # (175,000 - 130,000) / (175,000 - 125,000) = 45,000 / 50,000 = 0.9
56
+ # 0.9 * 30,000 = 27,000
57
+ vt_military_retirement_income_based_exemption: 27_000
58
+
59
+ - name: 2025 full exemption at threshold boundary
60
+ period: 2025
61
+ input:
62
+ state_code: VT
63
+ military_retirement_pay: 20_000
64
+ adjusted_gross_income: 124_999 # Just below $125,000 threshold
65
+ output:
66
+ vt_military_retirement_income_based_exemption: 20_000
67
+
68
+ - name: 2025 zero exemption exactly at partial threshold
69
+ period: 2025
70
+ input:
71
+ state_code: VT
72
+ military_retirement_pay: 15_000
73
+ adjusted_gross_income: 175_000 # Exactly at $175,000 threshold
74
+ output:
75
+ vt_military_retirement_income_based_exemption: 0
76
+
77
+ - name: 2025 small partial exemption near upper threshold
78
+ period: 2025
79
+ input:
80
+ state_code: VT
81
+ military_retirement_pay: 25_000
82
+ adjusted_gross_income: 170_000 # $5K below partial threshold
83
+ output:
84
+ # (175,000 - 170,000) / (175,000 - 125,000) = 5,000 / 50,000 = 0.1
85
+ # 0.1 * 25,000 = 2,500
86
+ vt_military_retirement_income_based_exemption: 2_500
87
+
88
+ - name: 2025 zero AGI - full exemption
89
+ period: 2025
90
+ input:
91
+ state_code: VT
92
+ military_retirement_pay: 10_000
93
+ adjusted_gross_income: 0
94
+ output:
95
+ vt_military_retirement_income_based_exemption: 10_000
96
+
97
+ - name: 2025 large retirement amount with partial exemption
98
+ period: 2025
99
+ input:
100
+ state_code: VT
101
+ military_retirement_pay: 100_000
102
+ adjusted_gross_income: 160_000 # In partial range
103
+ output:
104
+ # (175,000 - 160,000) / (175,000 - 125,000) = 15,000 / 50,000 = 0.3
105
+ # 0.3 * 100,000 = 30,000
106
+ vt_military_retirement_income_based_exemption: 30_000
@@ -0,0 +1,129 @@
1
+ - name: No veteran status - zero credit
2
+ period: 2025
3
+ input:
4
+ is_veteran: false
5
+ adjusted_gross_income: 20_000
6
+ output:
7
+ vt_veteran_tax_credit: 0
8
+
9
+ - name: Veteran with low AGI - full credit amount
10
+ period: 2025
11
+ input:
12
+ state_code: VT
13
+ is_veteran: true
14
+ adjusted_gross_income: 20_000 # Below $25,000 threshold
15
+ output:
16
+ vt_veteran_tax_credit: 250
17
+
18
+ - name: Veteran at full credit threshold boundary
19
+ period: 2025
20
+ input:
21
+ state_code: VT
22
+ is_veteran: true
23
+ adjusted_gross_income: 24_999 # Just below $25,000 threshold
24
+ output:
25
+ vt_veteran_tax_credit: 250
26
+
27
+ - name: Veteran just above full credit threshold
28
+ period: 2025
29
+ input:
30
+ state_code: VT
31
+ is_veteran: true
32
+ adjusted_gross_income: 25_050 # $50 above threshold, triggers first increment
33
+ output:
34
+ # ceil(50/100) = 1 increment, $250 - (1 * $5) = $245
35
+ vt_veteran_tax_credit: 245
36
+
37
+ - name: Veteran at exact increment boundary
38
+ period: 2025
39
+ input:
40
+ state_code: VT
41
+ is_veteran: true
42
+ adjusted_gross_income: 25_200 # Exactly 2 increments above threshold
43
+ output:
44
+ # ceil(200/100) = 2 increments, $250 - (2 * $5) = $240
45
+ vt_veteran_tax_credit: 240
46
+
47
+ - name: Veteran with moderate income reduction
48
+ period: 2025
49
+ input:
50
+ state_code: VT
51
+ is_veteran: true
52
+ adjusted_gross_income: 27_000 # $2,000 above threshold
53
+ output:
54
+ # ceil(2000/100) = 20 increments, $250 - (20 * $5) = $150
55
+ vt_veteran_tax_credit: 150
56
+
57
+ - name: Veteran near phaseout boundary
58
+ period: 2025
59
+ input:
60
+ is_veteran: true
61
+ adjusted_gross_income: 29_950 # $50 below $30,000 threshold
62
+ output:
63
+ # ceil(4950/100) = 50 increments, $250 - (50 * $5) = $0 (max reduction reached)
64
+ vt_veteran_tax_credit: 0
65
+
66
+ - name: Veteran above partial credit threshold - no credit
67
+ period: 2025
68
+ input:
69
+ is_veteran: true
70
+ adjusted_gross_income: 35_000 # Above $30,000 threshold
71
+ output:
72
+ vt_veteran_tax_credit: 0
73
+
74
+ - name: Before 2025 - no credit regardless of veteran status and income
75
+ period: 2024
76
+ input:
77
+ is_veteran: true
78
+ adjusted_gross_income: 15_000 # Low income but before effective date
79
+ output:
80
+ vt_veteran_tax_credit: 0
81
+
82
+ - name: Veteran with zero AGI - full credit
83
+ period: 2025
84
+ input:
85
+ state_code: VT
86
+ is_veteran: true
87
+ adjusted_gross_income: 0
88
+ output:
89
+ vt_veteran_tax_credit: 250
90
+
91
+ - name: Multiple veterans in tax unit
92
+ period: 2025
93
+ input:
94
+ people:
95
+ veteran1:
96
+ is_veteran: true
97
+ veteran2:
98
+ is_veteran: true
99
+ tax_units:
100
+ tax_unit:
101
+ members: [veteran1, veteran2]
102
+ adjusted_gross_income: 20_000
103
+ households:
104
+ household:
105
+ members: [veteran1, veteran2]
106
+ state_code: VT
107
+ output:
108
+ # Credit applies per tax unit, not per veteran
109
+ vt_veteran_tax_credit: 250
110
+
111
+ - name: Mixed household with one veteran
112
+ period: 2025
113
+ input:
114
+ people:
115
+ veteran:
116
+ is_veteran: true
117
+ non_veteran:
118
+ is_veteran: false
119
+ tax_units:
120
+ tax_unit:
121
+ members: [veteran, non_veteran]
122
+ adjusted_gross_income: 20_000
123
+ households:
124
+ household:
125
+ members: [veteran, non_veteran]
126
+ state_code: VT
127
+ output:
128
+ # Credit applies if any member is veteran
129
+ vt_veteran_tax_credit: 250
@@ -0,0 +1,100 @@
1
+ - name: Zero federal EITC - zero Vermont EITC
2
+ period: 2022
3
+ input:
4
+ eitc: 0
5
+ tax_unit_child_dependents: 1
6
+ output:
7
+ vt_eitc: 0
8
+
9
+ - name: Federal EITC with one child - 38% match rate in 2022
10
+ period: 2022
11
+ input:
12
+ state_code: VT
13
+ eitc: 1_000
14
+ tax_unit_child_dependents: 1
15
+ output:
16
+ vt_eitc: 380 # 38% of $1,000
17
+
18
+ - name: Federal EITC with multiple children - 38% match rate in 2022
19
+ period: 2022
20
+ input:
21
+ state_code: VT
22
+ eitc: 2_000
23
+ tax_unit_child_dependents: 2
24
+ output:
25
+ vt_eitc: 760 # 38% of $2,000
26
+
27
+ - name: Federal EITC with no children - 38% match rate in 2022 (before enhancement)
28
+ period: 2022
29
+ input:
30
+ state_code: VT
31
+ eitc: 500
32
+ tax_unit_child_dependents: 0
33
+ output:
34
+ vt_eitc: 190 # 38% of $500
35
+
36
+ - name: Enhanced structure not in effect - use basic match rate in 2024
37
+ period: 2024
38
+ input:
39
+ state_code: VT
40
+ eitc: 1_200
41
+ tax_unit_child_dependents: 1
42
+ output:
43
+ vt_eitc: 456 # 38% of $1,200 (using basic match rate)
44
+
45
+ - name: Enhanced structure in effect for childless workers in 2025
46
+ period: 2025
47
+ input:
48
+ state_code: VT
49
+ eitc: 600
50
+ tax_unit_child_dependents: 0
51
+ output:
52
+ # Enhanced structure should provide 100% match for childless workers
53
+ vt_eitc: 600
54
+
55
+ - name: Enhanced structure in effect for workers with children in 2025
56
+ period: 2025
57
+ input:
58
+ state_code: VT
59
+ eitc: 1_500
60
+ tax_unit_child_dependents: 1
61
+ output:
62
+ # Enhanced structure should still use 38% match for workers with children
63
+ vt_eitc: 570
64
+
65
+ - name: Large federal EITC amount
66
+ period: 2022
67
+ input:
68
+ state_code: VT
69
+ eitc: 5_000
70
+ tax_unit_child_dependents: 3
71
+ output:
72
+ vt_eitc: 1_900 # 38% of $5,000
73
+
74
+ - name: Very small federal EITC amount
75
+ period: 2022
76
+ input:
77
+ state_code: VT
78
+ eitc: 1
79
+ tax_unit_child_dependents: 1
80
+ output:
81
+ vt_eitc: 0.38 # 38% of $1
82
+
83
+ - name: Federal EITC in 2021 with 36% match rate
84
+ period: 2021
85
+ input:
86
+ state_code: VT
87
+ eitc: 1_000
88
+ tax_unit_child_dependents: 1
89
+ output:
90
+ vt_eitc: 360 # 36% of $1,000 (2021 rate)
91
+
92
+ - name: Three children in enhanced structure
93
+ period: 2025
94
+ input:
95
+ state_code: VT
96
+ eitc: 2_000
97
+ tax_unit_child_dependents: 3
98
+ output:
99
+ # Enhanced structure should use parameterized rate for 3 children
100
+ vt_eitc: 760 # Should be 38% for children in most cases
@@ -0,0 +1,23 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class dc_pap_eligible_child(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ definition_period = MONTH
8
+ label = "Eligible child for DC Public Assistance Programs based on demographics"
9
+ reference = (
10
+ "https://code.dccouncil.gov/us/dc/council/code/sections/4-205.18"
11
+ )
12
+ defined_for = "dc_tanf_immigration_status_eligible_person"
13
+
14
+ def formula(person, period, parameters):
15
+ p = parameters(period).gov.states.dc.dhs.tanf.age_threshold
16
+ age = person("monthly_age", period)
17
+ dependent = person("is_tax_unit_dependent", period)
18
+ secondary_school_student = person("is_in_secondary_school", period)
19
+ age_limit = where(
20
+ secondary_school_student, p.student_dependent, p.minor_child
21
+ )
22
+
23
+ return dependent & (age < age_limit)
@@ -0,0 +1,18 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class dc_gac(Variable):
5
+ value_type = float
6
+ entity = SPMUnit
7
+ label = "DC General Assistance for Children (GAC)"
8
+ unit = USD
9
+ definition_period = MONTH
10
+ reference = (
11
+ "https://code.dccouncil.gov/us/dc/council/code/sections/4-205.05a"
12
+ )
13
+ defined_for = "dc_gac_eligible"
14
+
15
+ def formula(spm_unit, period, parameters):
16
+ countable_income = spm_unit("dc_gac_countable_income", period)
17
+ standard_payment = spm_unit("dc_gac_standard_payment", period)
18
+ return max_(standard_payment - countable_income, 0)
@@ -0,0 +1,15 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class dc_gac_assistance_unit_size(Variable):
5
+ value_type = int
6
+ entity = SPMUnit
7
+ label = "DC General Assistance for Children (GAC) assistance unit size"
8
+ definition_period = MONTH
9
+ reference = (
10
+ "https://code.dccouncil.gov/us/dc/council/code/sections/4-205.05a"
11
+ )
12
+ defined_for = StateCode.DC
13
+
14
+ # Only eligible child can be counted as a member of the GAC assistance unit.
15
+ adds = ["dc_gac_eligible_child"]
@@ -0,0 +1,19 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class dc_gac_standard_payment(Variable):
5
+ value_type = float
6
+ entity = SPMUnit
7
+ label = "DC General Assistance for Children (GAC) standard payment"
8
+ unit = USD
9
+ definition_period = MONTH
10
+ reference = (
11
+ "https://code.dccouncil.gov/us/dc/council/code/sections/4-205.52"
12
+ )
13
+ defined_for = StateCode.DC
14
+
15
+ def formula(spm_unit, period, parameters):
16
+ unit_size = spm_unit("dc_gac_assistance_unit_size", period)
17
+ p = parameters(period).gov.states.dc.dhs.tanf.standard_payment
18
+ capped_unit_size = min_(unit_size, p.max_unit_size)
19
+ return p.amount[capped_unit_size]
@@ -0,0 +1,20 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class dc_gac_eligible(Variable):
5
+ value_type = bool
6
+ entity = SPMUnit
7
+ label = "Eligible for DC General Assistance for Children (GAC)"
8
+ definition_period = MONTH
9
+ reference = (
10
+ "https://code.dccouncil.gov/us/dc/council/code/sections/4-205.05a#(c)"
11
+ )
12
+ defined_for = "dc_gac_income_eligible"
13
+
14
+ def formula(spm_unit, period, parameters):
15
+ has_eligible_child = (
16
+ add(spm_unit, period, ["dc_gac_eligible_child"]) > 0
17
+ )
18
+ resources_eligible = spm_unit("dc_tanf_resources_eligible", period)
19
+
20
+ return has_eligible_child & resources_eligible
@@ -0,0 +1,15 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class dc_gac_eligible_child(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ definition_period = MONTH
8
+ label = "Eligible child for DC General Assistance for Children (GAC) based on demographics"
9
+ reference = (
10
+ "https://code.dccouncil.gov/us/dc/council/code/sections/4-205.05a"
11
+ )
12
+ defined_for = "dc_pap_eligible_child"
13
+
14
+ def formula(person, period, parameters):
15
+ return ~person("is_related_to_head_or_spouse", period)
@@ -0,0 +1,19 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class dc_gac_income_eligible(Variable):
5
+ value_type = bool
6
+ entity = SPMUnit
7
+ label = (
8
+ "Eligible for DC General Assistance for Children (GAC) due to income"
9
+ )
10
+ definition_period = MONTH
11
+ reference = (
12
+ "https://code.dccouncil.gov/us/dc/council/code/sections/4-205.10"
13
+ )
14
+ defined_for = StateCode.DC
15
+
16
+ def formula(spm_unit, period, parameters):
17
+ countable_income = spm_unit("dc_gac_countable_income", period)
18
+ standard_payment = spm_unit("dc_gac_standard_payment", period)
19
+ return countable_income <= standard_payment
@@ -0,0 +1,18 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class dc_gac_countable_income(Variable):
5
+ value_type = float
6
+ entity = SPMUnit
7
+ label = "DC General Assistance for Children (GAC) countable income"
8
+ unit = USD
9
+ definition_period = MONTH
10
+ reference = (
11
+ "https://code.dccouncil.gov/us/dc/council/code/sections/4-205.05a#(e)"
12
+ )
13
+ defined_for = StateCode.DC
14
+
15
+ adds = [
16
+ "dc_gac_earned_income_after_disregard_person",
17
+ "dc_gac_countable_unearned_income_person",
18
+ ]
@@ -0,0 +1,17 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class dc_gac_countable_unearned_income_person(Variable):
5
+ value_type = float
6
+ entity = Person
7
+ label = (
8
+ "DC General Assistance for Children (GAC) unearned income per person"
9
+ )
10
+ unit = USD
11
+ definition_period = MONTH
12
+ reference = (
13
+ "https://code.dccouncil.gov/us/dc/council/code/sections/4-205.05a#(e)"
14
+ )
15
+ defined_for = "dc_gac_eligible_child"
16
+
17
+ adds = ["dc_tanf_gross_unearned_income"]
@@ -0,0 +1,28 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class dc_gac_earned_income_after_disregard_person(Variable):
5
+ value_type = float
6
+ entity = Person
7
+ label = "DC General Assistance for Children (GAC) earned income after disregard per person"
8
+ unit = USD
9
+ definition_period = MONTH
10
+ reference = (
11
+ "https://code.dccouncil.gov/us/dc/council/code/sections/4-205.05a#(e)"
12
+ )
13
+ defined_for = "dc_gac_eligible_child"
14
+
15
+ def formula(person, period, parameters):
16
+ p = parameters(period).gov.states.dc.dhs
17
+ gross_earnings = person("dc_tanf_gross_earned_income", period)
18
+ adjusted_income = max_(
19
+ gross_earnings - p.gac.income_disregard.amount, 0
20
+ )
21
+ full_time_student = person("is_full_time_student", period)
22
+ weekly_hours_worked = person("monthly_hours_worked", period)
23
+ work_full_time = (
24
+ weekly_hours_worked
25
+ >= p.tanf.work_requirement.required_hours.single_parent.higher.amount
26
+ )
27
+
28
+ return where(work_full_time & ~full_time_student, adjusted_income, 0)
@@ -0,0 +1,18 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class dc_power(Variable):
5
+ value_type = float
6
+ entity = SPMUnit
7
+ label = "DC Program on Work, Employment, and Responsibility (POWER)"
8
+ unit = USD
9
+ definition_period = MONTH
10
+ reference = (
11
+ "https://code.dccouncil.gov/us/dc/council/code/sections/4-205.52"
12
+ )
13
+ defined_for = "dc_power_eligible"
14
+
15
+ def formula(spm_unit, period, parameters):
16
+ standard_payment = spm_unit("dc_tanf_standard_payment", period)
17
+ countable_income = spm_unit("dc_tanf_countable_income", period)
18
+ return max_(standard_payment - countable_income, 0)
@@ -0,0 +1,30 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class dc_power_eligible(Variable):
5
+ value_type = bool
6
+ entity = SPMUnit
7
+ definition_period = MONTH
8
+ label = "Eligible for DC Program on Work, Employment, and Responsibility (POWER)"
9
+ reference = (
10
+ "https://code.dccouncil.gov/us/dc/council/code/sections/4-205.72",
11
+ "https://code.dccouncil.gov/us/dc/council/code/sections/4-205.72a",
12
+ )
13
+ defined_for = StateCode.DC
14
+
15
+ def formula(spm_unit, period, parameters):
16
+ has_eligible_head_or_spouse = (
17
+ add(spm_unit, period, ["dc_power_head_or_spouse_eligible"]) > 0
18
+ )
19
+ meets_basic_eligibility_requirements = spm_unit(
20
+ "dc_tanf_basic_eligibility_requirements", period
21
+ )
22
+ has_disqualifying_benefits = spm_unit(
23
+ "dc_power_has_disqualifying_benefits", period
24
+ )
25
+
26
+ return (
27
+ has_eligible_head_or_spouse
28
+ & meets_basic_eligibility_requirements
29
+ & ~has_disqualifying_benefits
30
+ )
@@ -0,0 +1,14 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class dc_power_has_disqualifying_benefits(Variable):
5
+ value_type = bool
6
+ entity = SPMUnit
7
+ label = "Is receiving disqualifying benefits under DC Program on Work, Employment, and Responsibility (POWER)"
8
+ definition_period = YEAR
9
+ defined_for = StateCode.DC
10
+ reference = (
11
+ "https://code.dccouncil.gov/us/dc/council/code/sections/4-205.72#(d)"
12
+ )
13
+
14
+ adds = "gov.states.dc.dhs.power.disqualifying_benefits"
@@ -0,0 +1,38 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class dc_power_head_or_spouse_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ definition_period = MONTH
8
+ label = "Eligible for DC Program on Work, Employment, and Responsibility (POWER)"
9
+ reference = (
10
+ "https://code.dccouncil.gov/us/dc/council/code/sections/4-205.72",
11
+ "https://code.dccouncil.gov/us/dc/council/code/sections/4-205.72a",
12
+ )
13
+ defined_for = "is_tax_unit_head_or_spouse"
14
+
15
+ def formula(person, period, parameters):
16
+ p = parameters(period).gov.states.dc.dhs.power.age_threshold
17
+ spm_unit = person.spm_unit
18
+ is_parent = person("is_parent", period)
19
+ is_pregnant = person("is_pregnant", period)
20
+ age = person("monthly_age", period)
21
+
22
+ # Parent of a minor child with incapacitated household member (includes self)
23
+ # Covers both 4-205.72(b)(2) and 4-205.72a(a)(1)(A)
24
+ has_incapable_of_self_care = spm_unit.any(
25
+ person("is_incapable_of_self_care", period)
26
+ )
27
+ has_minor_child = spm_unit.any(person("dc_pap_eligible_child", period))
28
+ parent_with_incapacitated = (
29
+ is_parent & has_minor_child & has_incapable_of_self_care
30
+ )
31
+
32
+ # Parent of a minor child and experienced domestic violence (4-205.72a (a)(2)(A))(not modeled)
33
+ # Pregnant or parenting teen under 19 (4-205.72a(a)(3))
34
+ teen_parent = (is_pregnant | is_parent) & (age < p.younger)
35
+
36
+ # Parent or caretaker who is 60 years of age or older (4-205.72a (a)(5))
37
+
38
+ return parent_with_incapacitated | teen_parent | (age >= p.older)
@@ -0,0 +1,15 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class dc_tanf_assistance_unit_size(Variable):
5
+ value_type = int
6
+ entity = SPMUnit
7
+ label = "DC Temporary Assistance for Needy Families (TANF) assistance unit size"
8
+ definition_period = MONTH
9
+ reference = (
10
+ "https://code.dccouncil.gov/us/dc/council/code/sections/4-205.15"
11
+ )
12
+ defined_for = StateCode.DC
13
+
14
+ adds = ["spm_unit_size"]
15
+ subtracts = ["dc_gac_assistance_unit_size"]
@@ -15,7 +15,7 @@ class dc_tanf_standard_payment(Variable):
15
15
  defined_for = StateCode.DC
16
16
 
17
17
  def formula(spm_unit, period, parameters):
18
- unit_size = spm_unit("spm_unit_size", period)
18
+ unit_size = spm_unit("dc_tanf_assistance_unit_size", period)
19
19
  p = parameters(period).gov.states.dc.dhs.tanf.standard_payment
20
20
  capped_unit_size = min_(unit_size, p.max_unit_size)
21
21
  return p.amount[capped_unit_size]