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.
- policyengine_us/parameters/gov/states/dc/dhs/gac/README.md +1 -0
- policyengine_us/parameters/gov/states/dc/dhs/gac/income_disregard/amount.yaml +12 -0
- policyengine_us/parameters/gov/states/dc/dhs/power/README.md +1 -0
- policyengine_us/parameters/gov/states/dc/dhs/power/age_threshold/older.yaml +11 -0
- policyengine_us/parameters/gov/states/dc/dhs/power/age_threshold/younger.yaml +11 -0
- policyengine_us/parameters/gov/states/dc/dhs/power/disqualifying_benefits.yaml +14 -0
- policyengine_us/parameters/gov/states/dc/dhs/qualified_noncitizen_statuses.yaml +21 -0
- policyengine_us/parameters/gov/states/dc/dhs/tanf/standard_payment/amount.yaml +1 -1
- policyengine_us/parameters/gov/states/dc/dhs/tanf/work_requirement/required_hours/single_parent/amount.yaml +20 -0
- policyengine_us/parameters/gov/states/dc/dhs/tanf/work_requirement/required_hours/single_parent/higher/amount.yaml +12 -0
- policyengine_us/parameters/gov/states/dc/dhs/tanf/work_requirement/required_hours/single_parent/lower/amount.yaml +12 -0
- policyengine_us/parameters/gov/states/dc/dhs/tanf/work_requirement/required_hours/single_parent/lower/young_child_age_threshold.yaml +11 -0
- policyengine_us/parameters/gov/states/dc/dhs/tanf/work_requirement/required_hours/two_parents/amount.yaml +12 -0
- policyengine_us/parameters/gov/states/dc/dhs/tanf/work_requirement/work_exempted/elderly_age_threshold.yaml +11 -0
- policyengine_us/parameters/gov/states/dc/dhs/tanf/work_requirement/work_exempted/infant_age_threshold.yaml +11 -0
- policyengine_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/military_retirement/amount.yaml +3 -1
- policyengine_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/military_retirement/full_exemption_threshold.yaml +11 -0
- policyengine_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/military_retirement/income_based_structure/in_effect.yaml +11 -0
- policyengine_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/military_retirement/partial_exemption_threshold.yaml +11 -0
- policyengine_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/social_security/reduction/end.yaml +7 -0
- policyengine_us/parameters/gov/states/vt/tax/income/agi/retirement_income_exemption/social_security/reduction/start.yaml +7 -0
- policyengine_us/parameters/gov/states/vt/tax/income/credits/ctc/age_limit.yaml +3 -0
- policyengine_us/parameters/gov/states/vt/tax/income/credits/eitc/enhanced_structure/in_effect.yaml +13 -0
- policyengine_us/parameters/gov/states/vt/tax/income/credits/eitc/enhanced_structure/rate.yaml +21 -0
- policyengine_us/parameters/gov/states/vt/tax/income/credits/refundable.yaml +8 -1
- policyengine_us/parameters/gov/states/vt/tax/income/credits/veteran/amount.yaml +11 -0
- policyengine_us/parameters/gov/states/vt/tax/income/credits/veteran/full_credit_threshold.yaml +11 -0
- policyengine_us/parameters/gov/states/vt/tax/income/credits/veteran/income_increment.yaml +11 -0
- policyengine_us/parameters/gov/states/vt/tax/income/credits/veteran/partial_credit_threshold.yaml +11 -0
- policyengine_us/parameters/gov/states/vt/tax/income/credits/veteran/reduction_per_increment.yaml +11 -0
- policyengine_us/tests/policy/baseline/gov/hhs/tanf/cash/integration.yaml +1 -0
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/dc_pap_eligible_child.yaml +47 -0
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/gac/dc_gac.yaml +86 -0
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/gac/dc_gac_standard_payment.yaml +39 -0
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/gac/eligibility/dc_gac_eligible.yaml +39 -0
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/gac/eligibility/dc_gac_eligible_child.yaml +58 -0
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/gac/eligibility/dc_gac_income_eligible.yaml +26 -0
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/gac/income/dc_gac_earned_income_after_disregard_person.yaml +32 -0
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/integration_tests.yaml +171 -0
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/power/dc_power.yaml +26 -0
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/power/dc_power_eligible.yaml +94 -0
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/power/dc_power_head_or_spouse_eligible.yaml +84 -0
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/dc_tanf_assistance_unit_size.yaml +17 -0
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/dc_tanf_standard_payment.yaml +5 -5
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/eligibility/dc_tanf_basic_eligibility_requirements.yaml +39 -0
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/eligibility/dc_tanf_demographic_eligible_person.yaml +11 -0
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/eligibility/dc_tanf_eligible.yaml +6 -6
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/eligibility/dc_tanf_immigration_status_eligible_person.yaml +0 -12
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/eligibility/dc_tanf_income_eligible.yaml +0 -2
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/integration.yaml +6 -2
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/work_requirement/dc_tanf_is_working.yaml +128 -0
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/work_requirement/dc_tanf_meets_work_requirements.yaml +53 -0
- policyengine_us/tests/policy/baseline/gov/states/dc/dhs/tanf/work_requirement/dc_tanf_work_requirement_exempt.yaml +81 -0
- policyengine_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_military_retirement_pay_exclusion.yaml +55 -0
- policyengine_us/tests/policy/baseline/gov/states/vt/tax/income/agi/subtractions/vt_retirement_income_exemption.yaml +53 -0
- policyengine_us/tests/policy/baseline/gov/states/vt/tax/income/credits/vt_ctc.yaml +37 -0
- policyengine_us/tests/policy/baseline/gov/states/vt/tax/income/credits/vt_veteran_tax_credit.yaml +151 -0
- policyengine_us/tests/policy/baseline/gov/states/vt/tax/income/vt_eitc.yaml +39 -0
- 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
- policyengine_us/tests/variables/gov/states/vt/tax/income/credits/vt_veteran_tax_credit.yaml +129 -0
- policyengine_us/tests/variables/gov/states/vt/tax/income/vt_eitc.yaml +100 -0
- policyengine_us/variables/gov/states/dc/dhs/dc_pap_eligible_child.py +23 -0
- policyengine_us/variables/gov/states/dc/dhs/gac/dc_gac.py +18 -0
- policyengine_us/variables/gov/states/dc/dhs/gac/dc_gac_assistance_unit_size.py +15 -0
- policyengine_us/variables/gov/states/dc/dhs/gac/dc_gac_standard_payment.py +19 -0
- policyengine_us/variables/gov/states/dc/dhs/gac/eligibility/dc_gac_eligible.py +20 -0
- policyengine_us/variables/gov/states/dc/dhs/gac/eligibility/dc_gac_eligible_child.py +15 -0
- policyengine_us/variables/gov/states/dc/dhs/gac/eligibility/dc_gac_income_eligible.py +19 -0
- policyengine_us/variables/gov/states/dc/dhs/gac/income/dc_gac_countable_income.py +18 -0
- policyengine_us/variables/gov/states/dc/dhs/gac/income/dc_gac_countable_unearned_income_person.py +17 -0
- policyengine_us/variables/gov/states/dc/dhs/gac/income/dc_gac_earned_income_after_disregard_person.py +28 -0
- policyengine_us/variables/gov/states/dc/dhs/power/dc_power.py +18 -0
- policyengine_us/variables/gov/states/dc/dhs/power/dc_power_eligible.py +30 -0
- policyengine_us/variables/gov/states/dc/dhs/power/dc_power_has_disqualifying_beneifts.py +14 -0
- policyengine_us/variables/gov/states/dc/dhs/power/dc_power_head_or_spouse_eligible.py +38 -0
- policyengine_us/variables/gov/states/dc/dhs/tanf/dc_tanf_assistance_unit_size.py +15 -0
- policyengine_us/variables/gov/states/dc/dhs/tanf/dc_tanf_standard_payment.py +1 -1
- policyengine_us/variables/gov/states/dc/dhs/tanf/eligibility/dc_tanf_basic_eligibility_requirements.py +18 -0
- policyengine_us/variables/gov/states/dc/dhs/tanf/eligibility/dc_tanf_demographic_eligible_person.py +10 -12
- policyengine_us/variables/gov/states/dc/dhs/tanf/eligibility/dc_tanf_eligible.py +5 -17
- policyengine_us/variables/gov/states/dc/dhs/tanf/eligibility/dc_tanf_immigration_status_eligible_person.py +6 -1
- policyengine_us/variables/gov/states/dc/dhs/tanf/income/dc_tanf_countable_income.py +6 -1
- policyengine_us/variables/gov/states/dc/dhs/tanf/work_requirement/dc_tanf_is_working.py +40 -0
- policyengine_us/variables/gov/states/dc/dhs/tanf/work_requirement/dc_tanf_meets_work_requirements.py +22 -0
- policyengine_us/variables/gov/states/dc/dhs/tanf/work_requirement/dc_tanf_work_requirement_exempt.py +39 -0
- policyengine_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_military_retirement_cap_based_exemption.py +25 -0
- policyengine_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_military_retirement_income_based_exemption.py +79 -0
- policyengine_us/variables/gov/states/vt/tax/income/adjusted_gross_income/subtractions/retirement_income_exemption/vt_military_retirement_pay_exclusion.py +19 -4
- policyengine_us/variables/gov/states/vt/tax/income/credits/vt_veteran_tax_credit.py +58 -0
- policyengine_us/variables/gov/states/vt/tax/income/vt_eitc.py +9 -1
- policyengine_us/variables/household/demographic/person/is_related_to_head_or_spouse.py +9 -0
- {policyengine_us-1.358.1.dist-info → policyengine_us-1.360.0.dist-info}/METADATA +1 -1
- {policyengine_us-1.358.1.dist-info → policyengine_us-1.360.0.dist-info}/RECORD +96 -29
- {policyengine_us-1.358.1.dist-info → policyengine_us-1.360.0.dist-info}/WHEEL +0 -0
- {policyengine_us-1.358.1.dist-info → policyengine_us-1.360.0.dist-info}/entry_points.txt +0 -0
- {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
|
+
]
|
policyengine_us/variables/gov/states/dc/dhs/gac/income/dc_gac_countable_unearned_income_person.py
ADDED
|
@@ -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("
|
|
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]
|