policyengine-us 1.423.0__py3-none-any.whl → 1.424.2__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/contrib/states/ri/ctc/age_limit.yaml +9 -0
- policyengine_us/parameters/gov/contrib/states/ri/ctc/amount.yaml +9 -0
- policyengine_us/parameters/gov/contrib/states/ri/ctc/in_effect.yaml +9 -0
- policyengine_us/parameters/gov/contrib/states/ri/ctc/phaseout/rate.yaml +9 -0
- policyengine_us/parameters/gov/contrib/states/ri/ctc/phaseout/threshold.yaml +23 -0
- policyengine_us/parameters/gov/contrib/states/ri/ctc/refundability/cap.yaml +9 -0
- policyengine_us/parameters/gov/contrib/states/ri/dependent_exemption/age_limit/in_effect.yaml +9 -0
- policyengine_us/parameters/gov/contrib/states/ri/dependent_exemption/age_limit/threshold.yaml +9 -0
- policyengine_us/parameters/gov/contrib/states/ri/dependent_exemption/amount.yaml +15 -0
- policyengine_us/parameters/gov/contrib/states/ri/dependent_exemption/in_effect.yaml +9 -0
- policyengine_us/parameters/gov/contrib/states/ri/dependent_exemption/phaseout/rate.yaml +9 -0
- policyengine_us/parameters/gov/contrib/states/ri/dependent_exemption/phaseout/threshold.yaml +23 -0
- policyengine_us/parameters/gov/states/ca/tax/income/agi/subtractions.yaml +1 -0
- policyengine_us/parameters/gov/states/co/tax/income/credits/refundable.yaml +1 -0
- policyengine_us/parameters/gov/states/co/tax/income/credits/sales_tax_refund/amount/scale.yaml +1 -1
- policyengine_us/parameters/gov/states/co/tax/income/credits/tabor/joint.yaml +12 -0
- policyengine_us/parameters/gov/states/co/tax/income/credits/tabor/single.yaml +12 -0
- policyengine_us/parameters/gov/states/de/tax/income/credits/refundable.yaml +2 -2
- policyengine_us/parameters/gov/states/de/tax/income/credits/relief_rebate/amount.yaml +1 -1
- policyengine_us/parameters/gov/states/ga/tax/income/credits/non_refundable.yaml +1 -4
- policyengine_us/parameters/gov/states/ga/tax/income/credits/surplus_tax_rebate/amount.yaml +5 -5
- policyengine_us/parameters/gov/states/hi/tax/income/credits/act_115_rebate/joint.yaml +20 -0
- policyengine_us/parameters/gov/states/hi/tax/income/credits/act_115_rebate/single.yaml +20 -0
- policyengine_us/parameters/gov/states/hi/tax/income/credits/refundable.yaml +6 -0
- policyengine_us/parameters/gov/states/id/tax/income/credits/2022_rebate/floor.yaml +1 -1
- policyengine_us/parameters/gov/states/id/tax/income/credits/2022_rebate/rate.yaml +1 -1
- policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml +4 -4
- policyengine_us/parameters/gov/states/id/tax/income/credits/special_seasonal_rebate/floor.yaml +5 -5
- policyengine_us/parameters/gov/states/id/tax/income/credits/special_seasonal_rebate/rate.yaml +1 -1
- policyengine_us/parameters/gov/states/il/tax/income/credits/income_tax_rebate/amount/dependent.yaml +10 -0
- policyengine_us/parameters/gov/states/il/tax/income/credits/income_tax_rebate/amount/joint.yaml +20 -0
- policyengine_us/parameters/gov/states/il/tax/income/credits/income_tax_rebate/amount/other.yaml +20 -0
- policyengine_us/parameters/gov/states/il/tax/income/credits/income_tax_rebate/max_dependents.yaml +10 -0
- policyengine_us/parameters/gov/states/il/tax/income/credits/refundable.yaml +5 -0
- policyengine_us/parameters/gov/states/in/tax/income/credits/automatic_refund_rebate/amount/additional.yaml +10 -0
- policyengine_us/parameters/gov/states/in/tax/income/credits/automatic_refund_rebate/amount/base.yaml +12 -0
- policyengine_us/parameters/gov/states/in/tax/income/credits/refundable.yaml +6 -1
- policyengine_us/parameters/gov/states/ma/tax/income/credits/refundable.yaml +12 -0
- policyengine_us/parameters/gov/states/ma/tax/income/credits/taxpayer_refund_rebate/rate.yaml +10 -0
- policyengine_us/parameters/gov/states/me/tax/income/credits/refundable.yaml +6 -0
- policyengine_us/parameters/gov/states/me/tax/income/credits/relief_rebate/amount.yaml +10 -0
- policyengine_us/parameters/gov/states/me/tax/income/credits/relief_rebate/income_limit.yaml +21 -0
- policyengine_us/parameters/gov/states/mn/tax/income/credits/cwfc/ctc/age_limit.yaml +14 -0
- policyengine_us/parameters/gov/states/mt/tax/income/credits/non_refundable.yaml +1 -4
- policyengine_us/parameters/gov/states/mt/tax/income/credits/rebate/amount.yaml +5 -5
- policyengine_us/parameters/gov/states/ri/tax/income/credits/child_tax_rebate/amount.yaml +1 -1
- policyengine_us/parameters/gov/states/ri/tax/income/credits/child_tax_rebate/limit/age.yaml +1 -1
- policyengine_us/parameters/gov/states/ri/tax/income/credits/child_tax_rebate/limit/child.yaml +1 -1
- policyengine_us/parameters/gov/states/ri/tax/income/credits/child_tax_rebate/limit/income.yaml +5 -5
- policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml +1 -4
- policyengine_us/parameters/gov/states/sc/tax/income/credits/2022_rebate/amount.yaml +12 -0
- policyengine_us/parameters/gov/states/sc/tax/income/credits/non_refundable.yaml +7 -1
- policyengine_us/parameters/gov/states/va/tax/income/credits/non_refundable.yaml +6 -2
- policyengine_us/parameters/gov/states/va/tax/income/rebate/amount.yaml +10 -0
- policyengine_us/reforms/reforms.py +8 -0
- policyengine_us/reforms/states/ri/__init__.py +2 -0
- policyengine_us/reforms/states/ri/ctc/__init__.py +1 -0
- policyengine_us/reforms/states/ri/ctc/ri_ctc_reform.py +176 -0
- policyengine_us/reforms/states/ri/exemption/__init__.py +1 -0
- policyengine_us/reforms/states/ri/exemption/ri_exemption_reform.py +137 -0
- policyengine_us/tests/policy/baseline/gov/irs/integration/us_itemize.yaml +1 -1
- policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/integration.yaml +50 -0
- policyengine_us/tests/policy/baseline/gov/states/co/tax/income/credits/co_tabor_cash_back.yaml +71 -0
- policyengine_us/tests/policy/baseline/gov/states/co/tax/income/integration.yaml +38 -0
- policyengine_us/tests/policy/baseline/gov/states/hi/tax/income/credits/hi_act_115_rebate.yaml +35 -0
- policyengine_us/tests/policy/baseline/gov/states/hi/tax/income/integration.yaml +63 -0
- policyengine_us/tests/policy/baseline/gov/states/il/tax/income/credits/il_income_tax_rebate.yaml +49 -0
- policyengine_us/tests/policy/baseline/gov/states/il/tax/income/credits/il_income_tax_rebate_eligible.yaml +35 -0
- policyengine_us/tests/policy/baseline/gov/states/in/tax/income/credits/in_automatic_refund_rebate.yaml +47 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/tax/income/credits/ma_taxpayer_refund_rebate.yaml +42 -0
- policyengine_us/tests/policy/baseline/gov/states/ma/tax/income/integration_ma.yaml +6 -0
- policyengine_us/tests/policy/baseline/gov/states/me/tax/income/credits/me_relief_rebate.yaml +26 -0
- policyengine_us/tests/policy/baseline/gov/states/me/tax/income/credits/me_relief_rebate_eligible.yaml +35 -0
- policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/credits/mn_child_and_working_families_credits_ctc_eligible_child.yaml +26 -0
- policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/mn_integration.yaml +55 -0
- policyengine_us/tests/policy/baseline/gov/states/mt/tax/income/integration.yaml +3 -0
- policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/integration.yaml +47 -0
- policyengine_us/tests/policy/baseline/gov/states/sc/tax/income/credits/sc_2022_rebate.yaml +76 -0
- policyengine_us/tests/policy/baseline/gov/states/va/tax/income/integration.yaml +2 -0
- policyengine_us/tests/policy/baseline/gov/states/wi/tax/income/integration.yaml +48 -0
- policyengine_us/tests/policy/contrib/states/ri/ctc_reform_test.yaml +177 -0
- policyengine_us/tests/policy/contrib/states/ri/exemption_reform_test.yaml +88 -0
- policyengine_us/variables/gov/states/co/tax/income/credits/co_tabor_cash_back.py +17 -0
- policyengine_us/variables/gov/states/hi/tax/income/credits/hi_act_115_rebate.py +32 -0
- policyengine_us/variables/gov/states/il/tax/income/credits/il_income_tax_rebate.py +27 -0
- policyengine_us/variables/gov/states/il/tax/income/credits/il_income_tax_rebate_eligible.py +24 -0
- policyengine_us/variables/gov/states/in/tax/income/credits/in_automatic_refund_rebate.py +26 -0
- policyengine_us/variables/gov/states/ma/tax/income/credits/ma_taxpayer_refund_rebate.py +29 -0
- policyengine_us/variables/gov/states/me/tax/income/credits/me_relief_rebate.py +16 -0
- policyengine_us/variables/gov/states/me/tax/income/credits/me_relief_rebate_eligible.py +17 -0
- policyengine_us/variables/gov/states/mn/tax/income/credits/mn_child_and_working_families_credits.py +5 -1
- policyengine_us/variables/gov/states/mn/tax/income/credits/mn_child_and_working_families_credits_ctc_eligible_child.py +24 -0
- policyengine_us/variables/gov/states/mt/tax/income/credits/rebate/mt_income_tax_rebate.py +1 -2
- policyengine_us/variables/gov/states/sc/tax/income/credits/sc_2022_rebate.py +29 -0
- policyengine_us/variables/gov/states/wi/tax/income/credits/married_couple/wi_married_couple_credit.py +7 -5
- {policyengine_us-1.423.0.dist-info → policyengine_us-1.424.2.dist-info}/METADATA +1 -1
- {policyengine_us-1.423.0.dist-info → policyengine_us-1.424.2.dist-info}/RECORD +100 -47
- policyengine_us/tests/policy/baseline/gov/states/hi/tax/income/credits/hi_low_income_household_renters/integration.yaml +0 -61
- policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/taxable_retirement_income/integration.yaml +0 -45
- {policyengine_us-1.423.0.dist-info → policyengine_us-1.424.2.dist-info}/WHEEL +0 -0
- {policyengine_us-1.423.0.dist-info → policyengine_us-1.424.2.dist-info}/entry_points.txt +0 -0
- {policyengine_us-1.423.0.dist-info → policyengine_us-1.424.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
- name: RI CTC - fully refundable with AGI phaseout
|
|
2
|
+
absolute_error_margin: 0.1
|
|
3
|
+
period: 2025
|
|
4
|
+
reforms: policyengine_us.reforms.states.ri.ctc.ri_ctc_reform.ri_ctc
|
|
5
|
+
input:
|
|
6
|
+
gov.contrib.states.ri.ctc.in_effect: true
|
|
7
|
+
gov.contrib.states.ri.ctc.amount: 1_000
|
|
8
|
+
gov.contrib.states.ri.ctc.age_limit: 18
|
|
9
|
+
gov.contrib.states.ri.ctc.refundability.cap: 999_999 # High cap = fully refundable, amount.yaml controls max
|
|
10
|
+
gov.contrib.states.ri.ctc.phaseout.threshold.SINGLE: 75_000
|
|
11
|
+
gov.contrib.states.ri.ctc.phaseout.rate: 0.05
|
|
12
|
+
people:
|
|
13
|
+
parent:
|
|
14
|
+
age: 35
|
|
15
|
+
employment_income: 50_000
|
|
16
|
+
child1:
|
|
17
|
+
age: 5
|
|
18
|
+
is_tax_unit_dependent: true
|
|
19
|
+
child2:
|
|
20
|
+
age: 10
|
|
21
|
+
is_tax_unit_dependent: true
|
|
22
|
+
tax_units:
|
|
23
|
+
tax_unit:
|
|
24
|
+
members: [parent, child1, child2]
|
|
25
|
+
filing_status: SINGLE
|
|
26
|
+
households:
|
|
27
|
+
household:
|
|
28
|
+
members: [parent, child1, child2]
|
|
29
|
+
state_name: RI
|
|
30
|
+
output:
|
|
31
|
+
ri_ctc_eligible_children: 2
|
|
32
|
+
ri_ctc_maximum: 2_000 # 2 children × $1_000 amount
|
|
33
|
+
ri_ctc_phaseout: 0
|
|
34
|
+
ri_total_ctc: 2_000
|
|
35
|
+
ri_refundable_ctc: 2_000 # min(2_000 total credit, 999_999 cap) = 2_000 (amount controls)
|
|
36
|
+
ri_non_refundable_ctc: 0
|
|
37
|
+
ri_refundable_credits: 2_246.32 # 2_000 (CTC) + 246.32 (EITC)
|
|
38
|
+
ri_non_refundable_credits: 0
|
|
39
|
+
|
|
40
|
+
- name: RI CTC - partially refundable
|
|
41
|
+
absolute_error_margin: 0.1
|
|
42
|
+
period: 2025
|
|
43
|
+
reforms: policyengine_us.reforms.states.ri.ctc.ri_ctc_reform.ri_ctc
|
|
44
|
+
input:
|
|
45
|
+
gov.contrib.states.ri.ctc.in_effect: true
|
|
46
|
+
gov.contrib.states.ri.ctc.amount: 1_500
|
|
47
|
+
gov.contrib.states.ri.ctc.age_limit: 18
|
|
48
|
+
gov.contrib.states.ri.ctc.refundability.cap: 1_000 # Cap < total credit = partially refundable
|
|
49
|
+
gov.contrib.states.ri.ctc.phaseout.threshold.SINGLE: 75_000
|
|
50
|
+
gov.contrib.states.ri.ctc.phaseout.rate: 0.05
|
|
51
|
+
people:
|
|
52
|
+
parent:
|
|
53
|
+
age: 35
|
|
54
|
+
employment_income: 30_000
|
|
55
|
+
child1:
|
|
56
|
+
age: 5
|
|
57
|
+
is_tax_unit_dependent: true
|
|
58
|
+
tax_units:
|
|
59
|
+
tax_unit:
|
|
60
|
+
members: [parent, child1]
|
|
61
|
+
filing_status: SINGLE
|
|
62
|
+
households:
|
|
63
|
+
household:
|
|
64
|
+
members: [parent, child1]
|
|
65
|
+
state_name: RI
|
|
66
|
+
output:
|
|
67
|
+
ri_total_ctc: 1_500
|
|
68
|
+
ri_refundable_ctc: 1_000 # min(1_500 total credit, 1_000 cap) = 1_000
|
|
69
|
+
ri_non_refundable_ctc: 500 # 1_500 - 1_000 = 500
|
|
70
|
+
ri_refundable_credits: 1_522.45 # 1_000 (CTC refundable) + 522.45 (EITC)
|
|
71
|
+
ri_non_refundable_credits: 500 # 500 (CTC non-refundable)
|
|
72
|
+
|
|
73
|
+
- name: RI CTC - nonrefundable with no phaseout
|
|
74
|
+
absolute_error_margin: 0.1
|
|
75
|
+
period: 2025
|
|
76
|
+
reforms: policyengine_us.reforms.states.ri.ctc.ri_ctc_reform.ri_ctc
|
|
77
|
+
input:
|
|
78
|
+
gov.contrib.states.ri.ctc.in_effect: true
|
|
79
|
+
gov.contrib.states.ri.ctc.amount: 500
|
|
80
|
+
gov.contrib.states.ri.ctc.age_limit: 6
|
|
81
|
+
gov.contrib.states.ri.ctc.refundability.cap: 0 # Cap = 0, credit is nonrefundable
|
|
82
|
+
people:
|
|
83
|
+
parent:
|
|
84
|
+
age: 35
|
|
85
|
+
employment_income: 40_000
|
|
86
|
+
child1:
|
|
87
|
+
age: 3
|
|
88
|
+
is_tax_unit_dependent: true
|
|
89
|
+
child2:
|
|
90
|
+
age: 10
|
|
91
|
+
is_tax_unit_dependent: true
|
|
92
|
+
tax_units:
|
|
93
|
+
tax_unit:
|
|
94
|
+
members: [parent, child1, child2]
|
|
95
|
+
filing_status: SINGLE
|
|
96
|
+
households:
|
|
97
|
+
household:
|
|
98
|
+
members: [parent, child1, child2]
|
|
99
|
+
state_name: RI
|
|
100
|
+
output:
|
|
101
|
+
ri_ctc_eligible_children: 1
|
|
102
|
+
ri_total_ctc: 500
|
|
103
|
+
ri_refundable_ctc: 0 # min(500 total credit, 0 cap) = 0
|
|
104
|
+
ri_non_refundable_ctc: 500 # 500 - 0 = 500
|
|
105
|
+
ri_refundable_credits: 583.28 # 0 (CTC refundable) + 583.28 (EITC)
|
|
106
|
+
ri_non_refundable_credits: 500 # 500 (CTC non-refundable)
|
|
107
|
+
|
|
108
|
+
- name: RI CTC - AGI phaseout reduces credit
|
|
109
|
+
absolute_error_margin: 0.1
|
|
110
|
+
period: 2025
|
|
111
|
+
reforms: policyengine_us.reforms.states.ri.ctc.ri_ctc_reform.ri_ctc
|
|
112
|
+
input:
|
|
113
|
+
gov.contrib.states.ri.ctc.in_effect: true
|
|
114
|
+
gov.contrib.states.ri.ctc.amount: 1_000
|
|
115
|
+
gov.contrib.states.ri.ctc.age_limit: 18
|
|
116
|
+
gov.contrib.states.ri.ctc.refundability.cap: 999_999 # Fully refundable
|
|
117
|
+
gov.contrib.states.ri.ctc.phaseout.threshold.SINGLE: 75_000
|
|
118
|
+
gov.contrib.states.ri.ctc.phaseout.rate: 0.05
|
|
119
|
+
people:
|
|
120
|
+
parent:
|
|
121
|
+
age: 35
|
|
122
|
+
employment_income: 85_000
|
|
123
|
+
child1:
|
|
124
|
+
age: 5
|
|
125
|
+
is_tax_unit_dependent: true
|
|
126
|
+
tax_units:
|
|
127
|
+
tax_unit:
|
|
128
|
+
members: [parent, child1]
|
|
129
|
+
filing_status: SINGLE
|
|
130
|
+
households:
|
|
131
|
+
household:
|
|
132
|
+
members: [parent, child1]
|
|
133
|
+
state_name: RI
|
|
134
|
+
output:
|
|
135
|
+
ri_ctc_maximum: 1_000 # 1 child × $1_000 amount
|
|
136
|
+
ri_ctc_phaseout: 500 # (85_000 - 75_000) * 0.05 = 500
|
|
137
|
+
ri_total_ctc: 500 # 1_000 - 500 = 500
|
|
138
|
+
ri_refundable_ctc: 500 # min(500 total credit, 999_999 cap) = 500 (total credit controls)
|
|
139
|
+
ri_non_refundable_ctc: 0
|
|
140
|
+
ri_refundable_credits: 500 # 500 (CTC refundable) + 0 (EITC - income too high)
|
|
141
|
+
ri_non_refundable_credits: 0
|
|
142
|
+
|
|
143
|
+
- name: RI CTC - cap exceeds amount but amount controls max
|
|
144
|
+
absolute_error_margin: 0.1
|
|
145
|
+
period: 2025
|
|
146
|
+
reforms: policyengine_us.reforms.states.ri.ctc.ri_ctc_reform.ri_ctc
|
|
147
|
+
input:
|
|
148
|
+
gov.contrib.states.ri.ctc.in_effect: true
|
|
149
|
+
gov.contrib.states.ri.ctc.amount: 500 # Only $500 per child
|
|
150
|
+
gov.contrib.states.ri.ctc.age_limit: 18
|
|
151
|
+
gov.contrib.states.ri.ctc.refundability.cap: 10_000 # Cap is much higher than possible credit
|
|
152
|
+
people:
|
|
153
|
+
parent:
|
|
154
|
+
age: 35
|
|
155
|
+
employment_income: 40_000
|
|
156
|
+
child1:
|
|
157
|
+
age: 5
|
|
158
|
+
is_tax_unit_dependent: true
|
|
159
|
+
child2:
|
|
160
|
+
age: 10
|
|
161
|
+
is_tax_unit_dependent: true
|
|
162
|
+
tax_units:
|
|
163
|
+
tax_unit:
|
|
164
|
+
members: [parent, child1, child2]
|
|
165
|
+
filing_status: SINGLE
|
|
166
|
+
households:
|
|
167
|
+
household:
|
|
168
|
+
members: [parent, child1, child2]
|
|
169
|
+
state_name: RI
|
|
170
|
+
output:
|
|
171
|
+
ri_ctc_eligible_children: 2
|
|
172
|
+
ri_ctc_maximum: 1_000 # 2 children × $500 amount (NOT $10_000!)
|
|
173
|
+
ri_total_ctc: 1_000 # amount.yaml controls the maximum
|
|
174
|
+
ri_refundable_ctc: 1_000 # min(1_000 total credit, 10_000 cap) = 1_000
|
|
175
|
+
ri_non_refundable_ctc: 0
|
|
176
|
+
ri_refundable_credits: 1_583.28 # 1_000 (CTC refundable) + 583.28 (EITC)
|
|
177
|
+
ri_non_refundable_credits: 0
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
- name: RI exemption reform - restrict to children under 18
|
|
2
|
+
period: 2025
|
|
3
|
+
reforms: policyengine_us.reforms.states.ri.exemption.ri_exemption_reform.ri_exemption_reform
|
|
4
|
+
input:
|
|
5
|
+
gov.contrib.states.ri.dependent_exemption.in_effect: true
|
|
6
|
+
gov.contrib.states.ri.dependent_exemption.amount: 5_100
|
|
7
|
+
gov.contrib.states.ri.dependent_exemption.age_limit.in_effect: true
|
|
8
|
+
gov.contrib.states.ri.dependent_exemption.age_limit.threshold: 18
|
|
9
|
+
people:
|
|
10
|
+
parent:
|
|
11
|
+
age: 40
|
|
12
|
+
employment_income: 60_000
|
|
13
|
+
child1:
|
|
14
|
+
age: 16
|
|
15
|
+
is_tax_unit_dependent: true
|
|
16
|
+
child2:
|
|
17
|
+
age: 20
|
|
18
|
+
is_tax_unit_dependent: true
|
|
19
|
+
tax_units:
|
|
20
|
+
tax_unit:
|
|
21
|
+
members: [parent, child1, child2]
|
|
22
|
+
filing_status: SINGLE
|
|
23
|
+
households:
|
|
24
|
+
household:
|
|
25
|
+
members: [parent, child1, child2]
|
|
26
|
+
state_name: RI
|
|
27
|
+
output:
|
|
28
|
+
ri_exemptions: 10_150 # 1 personal (5_050) + 1 dependent (5_100)
|
|
29
|
+
|
|
30
|
+
- name: RI exemption reform - restrict to children under 13
|
|
31
|
+
period: 2025
|
|
32
|
+
reforms: policyengine_us.reforms.states.ri.exemption.ri_exemption_reform.ri_exemption_reform
|
|
33
|
+
input:
|
|
34
|
+
gov.contrib.states.ri.dependent_exemption.in_effect: true
|
|
35
|
+
gov.contrib.states.ri.dependent_exemption.amount: 5_100
|
|
36
|
+
gov.contrib.states.ri.dependent_exemption.age_limit.in_effect: true
|
|
37
|
+
gov.contrib.states.ri.dependent_exemption.age_limit.threshold: 13
|
|
38
|
+
people:
|
|
39
|
+
parent:
|
|
40
|
+
age: 40
|
|
41
|
+
employment_income: 60_000
|
|
42
|
+
child1:
|
|
43
|
+
age: 10
|
|
44
|
+
is_tax_unit_dependent: true
|
|
45
|
+
child2:
|
|
46
|
+
age: 16
|
|
47
|
+
is_tax_unit_dependent: true
|
|
48
|
+
tax_units:
|
|
49
|
+
tax_unit:
|
|
50
|
+
members: [parent, child1, child2]
|
|
51
|
+
filing_status: SINGLE
|
|
52
|
+
households:
|
|
53
|
+
household:
|
|
54
|
+
members: [parent, child1, child2]
|
|
55
|
+
state_name: RI
|
|
56
|
+
output:
|
|
57
|
+
ri_exemptions: 10_150 # 1 personal (5_050) + 1 dependent (5_100)
|
|
58
|
+
|
|
59
|
+
- name: RI exemption reform - AGI phaseout
|
|
60
|
+
period: 2025
|
|
61
|
+
reforms: policyengine_us.reforms.states.ri.exemption.ri_exemption_reform.ri_exemption_reform
|
|
62
|
+
input:
|
|
63
|
+
gov.contrib.states.ri.dependent_exemption.in_effect: true
|
|
64
|
+
gov.contrib.states.ri.dependent_exemption.amount: 5_100
|
|
65
|
+
gov.contrib.states.ri.dependent_exemption.phaseout.threshold.SINGLE: 100_000
|
|
66
|
+
gov.contrib.states.ri.dependent_exemption.phaseout.rate: 0.05
|
|
67
|
+
people:
|
|
68
|
+
parent:
|
|
69
|
+
age: 40
|
|
70
|
+
employment_income: 120_000
|
|
71
|
+
child1:
|
|
72
|
+
age: 10
|
|
73
|
+
is_tax_unit_dependent: true
|
|
74
|
+
tax_units:
|
|
75
|
+
tax_unit:
|
|
76
|
+
members: [parent, child1]
|
|
77
|
+
filing_status: SINGLE
|
|
78
|
+
households:
|
|
79
|
+
household:
|
|
80
|
+
members: [parent, child1]
|
|
81
|
+
state_name: RI
|
|
82
|
+
output:
|
|
83
|
+
# Personal exemption: 5_050 (baseline)
|
|
84
|
+
# Dependent exemption before phaseout: 5_100
|
|
85
|
+
# Phaseout: (120_000 - 100_000) * 0.05 = 1_000 (only applies to dependent exemption)
|
|
86
|
+
# Dependent exemption after phaseout: 5_100 - 1_000 = 4_100
|
|
87
|
+
# Final: 5_050 (personal) + 4_100 (dependent) = 9_150
|
|
88
|
+
ri_exemptions: 9_150
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class co_tabor_cash_back(Variable):
|
|
5
|
+
value_type = float
|
|
6
|
+
entity = TaxUnit
|
|
7
|
+
label = "Colorado TABOR cash back"
|
|
8
|
+
defined_for = StateCode.CO
|
|
9
|
+
unit = USD
|
|
10
|
+
definition_period = YEAR
|
|
11
|
+
reference = "https://leg.colorado.gov/sites/default/files/documents/2022A/bills/2022a_233_01.pdf"
|
|
12
|
+
|
|
13
|
+
def formula(tax_unit, period, parameters):
|
|
14
|
+
p = parameters(period).gov.states.co.tax.income.credits.tabor
|
|
15
|
+
|
|
16
|
+
joint = tax_unit("tax_unit_is_joint", period)
|
|
17
|
+
return where(joint, p.joint, p.single)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class hi_act_115_rebate(Variable):
|
|
5
|
+
value_type = float
|
|
6
|
+
entity = TaxUnit
|
|
7
|
+
label = "Hawaii ACT 115 rebate"
|
|
8
|
+
defined_for = StateCode.HI
|
|
9
|
+
unit = USD
|
|
10
|
+
definition_period = YEAR
|
|
11
|
+
reference = "https://tax.hawaii.gov/act-115-ref/"
|
|
12
|
+
|
|
13
|
+
def formula(tax_unit, period, parameters):
|
|
14
|
+
p = parameters(period).gov.states.hi.tax.income.credits.act_115_rebate
|
|
15
|
+
filing_status = tax_unit("filing_status", period)
|
|
16
|
+
statuses = filing_status.possible_values
|
|
17
|
+
federal_agi = tax_unit("adjusted_gross_income", period)
|
|
18
|
+
return select(
|
|
19
|
+
[
|
|
20
|
+
filing_status == statuses.JOINT,
|
|
21
|
+
filing_status == statuses.HEAD_OF_HOUSEHOLD,
|
|
22
|
+
filing_status == statuses.SEPARATE,
|
|
23
|
+
filing_status == statuses.SURVIVING_SPOUSE,
|
|
24
|
+
],
|
|
25
|
+
[
|
|
26
|
+
p.joint.calc(federal_agi),
|
|
27
|
+
p.single.calc(federal_agi),
|
|
28
|
+
p.single.calc(federal_agi),
|
|
29
|
+
p.joint.calc(federal_agi),
|
|
30
|
+
],
|
|
31
|
+
default=p.single.calc(federal_agi),
|
|
32
|
+
)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class il_income_tax_rebate(Variable):
|
|
5
|
+
value_type = float
|
|
6
|
+
entity = TaxUnit
|
|
7
|
+
label = "Illinois income tax rebate"
|
|
8
|
+
defined_for = "il_income_tax_rebate_eligible"
|
|
9
|
+
unit = USD
|
|
10
|
+
definition_period = YEAR
|
|
11
|
+
reference = "https://codes.findlaw.com/il/chapter-35-revenue/il-st-sect-35-5-212-1.html"
|
|
12
|
+
|
|
13
|
+
def formula(tax_unit, period, parameters):
|
|
14
|
+
p = parameters(
|
|
15
|
+
period
|
|
16
|
+
).gov.states.il.tax.income.credits.income_tax_rebate
|
|
17
|
+
federal_agi = tax_unit("adjusted_gross_income", period)
|
|
18
|
+
joint = tax_unit("tax_unit_is_joint", period)
|
|
19
|
+
base_amount = where(
|
|
20
|
+
joint,
|
|
21
|
+
p.amount.joint.calc(federal_agi),
|
|
22
|
+
p.amount.other.calc(federal_agi),
|
|
23
|
+
)
|
|
24
|
+
dependent_count = tax_unit("tax_unit_dependents", period)
|
|
25
|
+
capped_dependents = min_(dependent_count, p.max_dependents)
|
|
26
|
+
dependent_amount = capped_dependents * p.amount.dependent
|
|
27
|
+
return base_amount + dependent_amount
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class il_income_tax_rebate_eligible(Variable):
|
|
5
|
+
value_type = float
|
|
6
|
+
entity = TaxUnit
|
|
7
|
+
label = "Illinois income tax rebate eligible"
|
|
8
|
+
defined_for = StateCode.IL
|
|
9
|
+
unit = USD
|
|
10
|
+
definition_period = YEAR
|
|
11
|
+
reference = "https://codes.findlaw.com/il/chapter-35-revenue/il-st-sect-35-5-212-1.html"
|
|
12
|
+
|
|
13
|
+
def formula(tax_unit, period, parameters):
|
|
14
|
+
p = parameters(
|
|
15
|
+
period
|
|
16
|
+
).gov.states.il.tax.income.credits.income_tax_rebate
|
|
17
|
+
federal_agi = tax_unit("adjusted_gross_income", period)
|
|
18
|
+
joint = tax_unit("tax_unit_is_joint", period)
|
|
19
|
+
income_threshold = where(
|
|
20
|
+
joint,
|
|
21
|
+
p.amount.joint.thresholds[1],
|
|
22
|
+
p.amount.other.thresholds[1],
|
|
23
|
+
)
|
|
24
|
+
return federal_agi < income_threshold
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class in_automatic_refund_rebate(Variable):
|
|
5
|
+
value_type = float
|
|
6
|
+
entity = TaxUnit
|
|
7
|
+
label = "Indiana automatic refund rebate"
|
|
8
|
+
defined_for = StateCode.IN
|
|
9
|
+
unit = USD
|
|
10
|
+
definition_period = YEAR
|
|
11
|
+
reference = "https://law.justia.com/codes/indiana/2022/title-4/article-10/chapter-22/"
|
|
12
|
+
|
|
13
|
+
def formula(tax_unit, period, parameters):
|
|
14
|
+
p = (
|
|
15
|
+
parameters(period)
|
|
16
|
+
.gov.states["in"]
|
|
17
|
+
.tax.income.credits.automatic_refund_rebate.amount
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
# Total amount per person (base + additional)
|
|
21
|
+
amount_per_person = p.base + p.additional
|
|
22
|
+
|
|
23
|
+
# Multiply by number of head and spouse
|
|
24
|
+
head_spouse_count = tax_unit("head_spouse_count", period)
|
|
25
|
+
|
|
26
|
+
return amount_per_person * head_spouse_count
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class ma_taxpayer_refund_rebate(Variable):
|
|
5
|
+
value_type = float
|
|
6
|
+
entity = TaxUnit
|
|
7
|
+
label = "Massachusetts taxpayer refund rebate"
|
|
8
|
+
defined_for = StateCode.MA
|
|
9
|
+
unit = USD
|
|
10
|
+
definition_period = YEAR
|
|
11
|
+
reference = "https://tax.hawaii.gov/act-115-ref/"
|
|
12
|
+
|
|
13
|
+
def formula(tax_unit, period, parameters):
|
|
14
|
+
income_tax_before_credits = tax_unit(
|
|
15
|
+
"ma_income_tax_before_refundable_credits", period
|
|
16
|
+
)
|
|
17
|
+
p = parameters(period).gov.states.ma.tax.income.credits
|
|
18
|
+
|
|
19
|
+
# Sum refundable credits except ma_taxpayer_refund_rebate to avoid circular reference
|
|
20
|
+
refundable_credit_list = p.refundable
|
|
21
|
+
other_refundable_credits = 0
|
|
22
|
+
for credit in refundable_credit_list:
|
|
23
|
+
if credit != "ma_taxpayer_refund_rebate":
|
|
24
|
+
other_refundable_credits += tax_unit(credit, period)
|
|
25
|
+
|
|
26
|
+
income_tax_less_credits = max_(
|
|
27
|
+
income_tax_before_credits - other_refundable_credits, 0
|
|
28
|
+
)
|
|
29
|
+
return p.taxpayer_refund_rebate.rate * income_tax_less_credits
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class me_relief_rebate(Variable):
|
|
5
|
+
value_type = float
|
|
6
|
+
entity = TaxUnit
|
|
7
|
+
label = "Maine Relief Rebate"
|
|
8
|
+
defined_for = "me_relief_rebate_eligible"
|
|
9
|
+
unit = USD
|
|
10
|
+
definition_period = YEAR
|
|
11
|
+
reference = "https://www.maine.gov/governor/mills/relief-checks"
|
|
12
|
+
|
|
13
|
+
def formula(tax_unit, period, parameters):
|
|
14
|
+
p = parameters(period).gov.states.me.tax.income.credits.relief_rebate
|
|
15
|
+
head_spouse_count = tax_unit("head_spouse_count", period)
|
|
16
|
+
return head_spouse_count * p.amount
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class me_relief_rebate_eligible(Variable):
|
|
5
|
+
value_type = bool
|
|
6
|
+
entity = TaxUnit
|
|
7
|
+
label = "Maine Relief Rebate eligible"
|
|
8
|
+
defined_for = StateCode.ME
|
|
9
|
+
definition_period = YEAR
|
|
10
|
+
reference = "https://www.maine.gov/governor/mills/relief-checks"
|
|
11
|
+
|
|
12
|
+
def formula(tax_unit, period, parameters):
|
|
13
|
+
p = parameters(period).gov.states.me.tax.income.credits.relief_rebate
|
|
14
|
+
filing_status = tax_unit("filing_status", period)
|
|
15
|
+
federal_agi = tax_unit("adjusted_gross_income", period)
|
|
16
|
+
income_threshold = p.income_limit[filing_status]
|
|
17
|
+
return federal_agi < income_threshold
|
policyengine_us/variables/gov/states/mn/tax/income/credits/mn_child_and_working_families_credits.py
CHANGED
|
@@ -20,7 +20,11 @@ class mn_child_and_working_families_credits(Variable):
|
|
|
20
20
|
# The credits are defined by separate legal code sections
|
|
21
21
|
# but are calculated together in the tax forms.
|
|
22
22
|
# Child Tax Credit computation:
|
|
23
|
-
qualifying_children =
|
|
23
|
+
qualifying_children = add(
|
|
24
|
+
tax_unit,
|
|
25
|
+
period,
|
|
26
|
+
["mn_child_and_working_families_credits_ctc_eligible_child"],
|
|
27
|
+
)
|
|
24
28
|
p = parameters(period).gov.states.mn.tax.income.credits.cwfc
|
|
25
29
|
base_ctc_amount = qualifying_children * p.ctc.amount
|
|
26
30
|
# Working Family Credit computation:
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class mn_child_and_working_families_credits_ctc_eligible_child(Variable):
|
|
5
|
+
value_type = float
|
|
6
|
+
entity = Person
|
|
7
|
+
label = "Minnesota child and working families credits child tax credit eligible child"
|
|
8
|
+
unit = USD
|
|
9
|
+
definition_period = YEAR
|
|
10
|
+
reference = (
|
|
11
|
+
"https://www.revisor.mn.gov/statutes/cite/290.0661#stat.290.0661.4"
|
|
12
|
+
"https://www.revisor.mn.gov/statutes/cite/290.0671"
|
|
13
|
+
"https://www.revenue.state.mn.us/sites/default/files/2024-01/m1cwfc-23_1.pdf"
|
|
14
|
+
)
|
|
15
|
+
defined_for = StateCode.MN
|
|
16
|
+
|
|
17
|
+
def formula(person, period, parameters):
|
|
18
|
+
age = person("age", period)
|
|
19
|
+
meets_eitc_identification_requirements = person(
|
|
20
|
+
"meets_eitc_identification_requirements", period
|
|
21
|
+
)
|
|
22
|
+
p = parameters(period).gov.states.mn.tax.income.credits.cwfc.ctc
|
|
23
|
+
age_eligible = age < p.age_limit
|
|
24
|
+
return age_eligible & meets_eitc_identification_requirements
|
|
@@ -4,14 +4,13 @@ from policyengine_us.model_api import *
|
|
|
4
4
|
class mt_income_tax_rebate(Variable):
|
|
5
5
|
value_type = float
|
|
6
6
|
entity = TaxUnit
|
|
7
|
-
label = "Montana
|
|
7
|
+
label = "Montana 2021 income tax rebate"
|
|
8
8
|
unit = USD
|
|
9
9
|
definition_period = YEAR
|
|
10
10
|
reference = "https://archive.legmt.gov/bills/mca/title_0150/chapter_0300/part_0210/section_0910/0150-0300-0210-0910.html"
|
|
11
11
|
defined_for = StateCode.MT
|
|
12
12
|
|
|
13
13
|
# The rebate is based on 2021 income tax liability, but provided in 2023
|
|
14
|
-
# we assume that the tax liability does not change between 2021 and 2023
|
|
15
14
|
def formula(tax_unit, period, parameters):
|
|
16
15
|
p = parameters(period).gov.states.mt.tax.income.credits.rebate
|
|
17
16
|
filing_status = tax_unit("filing_status", period)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class sc_2022_rebate(Variable):
|
|
5
|
+
value_type = float
|
|
6
|
+
entity = TaxUnit
|
|
7
|
+
label = "South Carolina 2022 rebate"
|
|
8
|
+
defined_for = StateCode.SC
|
|
9
|
+
unit = USD
|
|
10
|
+
definition_period = YEAR
|
|
11
|
+
reference = "https://www.scstatehouse.gov/sess124_2021-2022/bills/1087.htm"
|
|
12
|
+
|
|
13
|
+
def formula(tax_unit, period, parameters):
|
|
14
|
+
tax_before_non_refundable_credits = tax_unit(
|
|
15
|
+
"sc_income_tax_before_non_refundable_credits", period
|
|
16
|
+
)
|
|
17
|
+
p = parameters(period).gov.states.sc.tax.income.credits
|
|
18
|
+
other_non_refundable_credits = 0
|
|
19
|
+
for credit in p.non_refundable:
|
|
20
|
+
if credit != "sc_2022_rebate":
|
|
21
|
+
other_non_refundable_credits += tax_unit(credit, period)
|
|
22
|
+
refundable_credits = tax_unit("sc_refundable_credits", period)
|
|
23
|
+
tax_after_credits = max_(
|
|
24
|
+
0,
|
|
25
|
+
tax_before_non_refundable_credits
|
|
26
|
+
- other_non_refundable_credits
|
|
27
|
+
- refundable_credits,
|
|
28
|
+
)
|
|
29
|
+
return min_(tax_after_credits, p["2022_rebate"].amount)
|
|
@@ -20,11 +20,13 @@ class wi_married_couple_credit(Variable):
|
|
|
20
20
|
fstatus = tax_unit("filing_status", period)
|
|
21
21
|
eligible = fstatus == fstatus.possible_values.JOINT
|
|
22
22
|
p = parameters(period).gov.states.wi.tax.income.credits
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
person = tax_unit.members
|
|
24
|
+
income = add(person, period, p.married_couple.income_sources)
|
|
25
|
+
floored_income = max_(0, income)
|
|
26
|
+
is_head = person("is_tax_unit_head", period)
|
|
27
|
+
is_spouse = person("is_tax_unit_spouse", period)
|
|
28
|
+
head_income = tax_unit.sum(is_head * floored_income)
|
|
29
|
+
spouse_income = tax_unit.sum(is_spouse * floored_income)
|
|
28
30
|
lower_income = min_(head_income, spouse_income)
|
|
29
31
|
return min_(
|
|
30
32
|
eligible * lower_income * p.married_couple.rate,
|