policyengine-us 1.406.0__py3-none-any.whl → 1.407.1__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.

@@ -0,0 +1,19 @@
1
+ description: Minimum refundable amount per child for the CTC, exempt from phase-in but subject to phase-out
2
+
3
+ metadata:
4
+ amount_unit: currency-USD
5
+ threshold_unit: year
6
+ type: single_amount
7
+ period: year
8
+ label: CTC minimum refundable amount per child
9
+
10
+ brackets:
11
+ - threshold:
12
+ 2024-01-01: 0
13
+ amount:
14
+ 2024-01-01: 0
15
+ - threshold:
16
+ 2024-01-01: 6
17
+ amount:
18
+ 2024-01-01: 0
19
+
@@ -0,0 +1,7 @@
1
+ description: Whether the CTC minimum refundable amount reform is in effect
2
+ values:
3
+ 2020-01-01: false
4
+ metadata:
5
+ unit: bool
6
+ period: year
7
+ label: CTC minimum refundable amount in effect
@@ -0,0 +1,7 @@
1
+ description: The Child Tax Credit is phased-in per qualifying child in the household, if this is true.
2
+ values:
3
+ 0000-01-01: false
4
+ metadata:
5
+ unit: bool
6
+ period: year
7
+ label: Per-child CTC phase-in in effect
@@ -0,0 +1,7 @@
1
+ description: The Child Tax Credit is phased-out per qualifying child in the household, if this is true.
2
+ values:
3
+ 0000-01-01: false
4
+ metadata:
5
+ unit: bool
6
+ period: year
7
+ label: Per-child CTC phase-out in effect
@@ -4,3 +4,12 @@ from .ctc_older_child_supplement import (
4
4
  from .ctc_additional_bracket import (
5
5
  create_ctc_additional_bracket_reform,
6
6
  )
7
+ from .ctc_per_child_phase_out import (
8
+ create_ctc_per_child_phase_out_reform,
9
+ )
10
+ from .ctc_per_child_phase_in import (
11
+ create_ctc_per_child_phase_in_reform,
12
+ )
13
+ from .ctc_minimum_refundable_amount import (
14
+ create_ctc_minimum_refundable_amount_reform,
15
+ )
@@ -0,0 +1,90 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ def create_ctc_minimum_refundable_amount() -> Reform:
5
+ class ctc_minimum_refundable_amount(Variable):
6
+ value_type = float
7
+ entity = Person
8
+ label = "CTC minimum refundable amount"
9
+ unit = USD
10
+ defined_for = "ctc_qualifying_child"
11
+ documentation = "Minimum refundable amount per child, exempt from phase-in but subject to phase-out."
12
+ definition_period = YEAR
13
+
14
+ def formula(person, period, parameters):
15
+ p = parameters(period).gov.contrib.ctc.minimum_refundable
16
+
17
+ age = person("age", period)
18
+
19
+ return p.amount.calc(age)
20
+
21
+ class refundable_ctc(Variable):
22
+ value_type = float
23
+ entity = TaxUnit
24
+ label = "refundable CTC"
25
+ unit = USD
26
+ documentation = (
27
+ "The portion of the Child Tax Credit that is refundable."
28
+ )
29
+ definition_period = YEAR
30
+ reference = "https://www.law.cornell.edu/uscode/text/26/24#d"
31
+
32
+ def formula(tax_unit, period, parameters):
33
+ # This line corresponds to "the credit which would be allowed under this section [the CTC section]"
34
+ # without regard to this subsection [the refundability section] and the limitation under
35
+ # section 26(a) [the section that limits the amount of the non-refundable CTC to tax liability].
36
+ # This is the full CTC. This is then limited to the maximum refundable amount per child as per the
37
+ # TCJA provision.
38
+
39
+ ctc = parameters(period).gov.irs.credits.ctc
40
+
41
+ maximum_amount = tax_unit("ctc_refundable_maximum", period)
42
+
43
+ total_ctc = tax_unit("ctc", period)
44
+
45
+ if ctc.refundable.fully_refundable:
46
+ reduction = tax_unit("ctc_phase_out", period)
47
+ reduced_max_amount = max_(0, maximum_amount - reduction)
48
+ return min_(reduced_max_amount, total_ctc)
49
+
50
+ maximum_refundable_ctc = min_(maximum_amount, total_ctc)
51
+ minimum_refundable_ctc = add(
52
+ tax_unit, period, ["ctc_minimum_refundable_amount"]
53
+ )
54
+ phase_in = tax_unit("ctc_phase_in", period)
55
+ phase_in_with_minimum = max_(phase_in, minimum_refundable_ctc)
56
+ limiting_tax = tax_unit("ctc_limiting_tax_liability", period)
57
+ ctc_capped_by_tax = min_(total_ctc, limiting_tax)
58
+ ctc_capped_by_increased_tax = min_(
59
+ total_ctc, limiting_tax + phase_in_with_minimum
60
+ )
61
+ amount_ctc_would_increase = (
62
+ ctc_capped_by_increased_tax - ctc_capped_by_tax
63
+ )
64
+ return min_(maximum_refundable_ctc, amount_ctc_would_increase)
65
+
66
+ class reform(Reform):
67
+ def apply(self):
68
+ self.update_variable(ctc_minimum_refundable_amount)
69
+ self.update_variable(refundable_ctc)
70
+
71
+ return reform
72
+
73
+
74
+ def create_ctc_minimum_refundable_amount_reform(
75
+ parameters, period, bypass: bool = False
76
+ ):
77
+ if bypass:
78
+ return create_ctc_minimum_refundable_amount()
79
+
80
+ p = parameters(period).gov.contrib.ctc.minimum_refundable
81
+
82
+ if p.in_effect:
83
+ return create_ctc_minimum_refundable_amount()
84
+ else:
85
+ return None
86
+
87
+
88
+ ctc_minimum_refundable_amount = create_ctc_minimum_refundable_amount_reform(
89
+ None, None, bypass=True
90
+ )
@@ -0,0 +1,49 @@
1
+ from policyengine_us.model_api import *
2
+ import numpy as np
3
+
4
+
5
+ def create_ctc_per_child_phase_in() -> Reform:
6
+ class ctc_phase_in_relevant_earnings(Variable):
7
+ value_type = float
8
+ entity = TaxUnit
9
+ label = "Relevant earnings for the CTC phase-in"
10
+ unit = USD
11
+ definition_period = YEAR
12
+ reference = "https://www.law.cornell.edu/uscode/text/26/24#d"
13
+
14
+ def formula(tax_unit, period, parameters):
15
+
16
+ ctc = parameters(period).gov.irs.credits.ctc
17
+
18
+ earnings = tax_unit("tax_unit_earned_income", period)
19
+ earnings_over_threshold = max_(
20
+ 0, earnings - ctc.refundable.phase_in.threshold
21
+ )
22
+ qualifying_children = tax_unit("ctc_qualifying_children", period)
23
+ phase_in_rate = ctc.refundable.phase_in.rate * qualifying_children
24
+ return earnings_over_threshold * phase_in_rate
25
+
26
+ class reform(Reform):
27
+ def apply(self):
28
+ self.update_variable(ctc_phase_in_relevant_earnings)
29
+
30
+ return reform
31
+
32
+
33
+ def create_ctc_per_child_phase_in_reform(
34
+ parameters, period, bypass: bool = False
35
+ ):
36
+ if bypass:
37
+ return create_ctc_per_child_phase_in()
38
+
39
+ p = parameters(period).gov.contrib.ctc.per_child_phase_out
40
+
41
+ if p.in_effect:
42
+ return create_ctc_per_child_phase_in()
43
+ else:
44
+ return None
45
+
46
+
47
+ ctc_per_child_phase_in = create_ctc_per_child_phase_in_reform(
48
+ None, None, bypass=True
49
+ )
@@ -0,0 +1,54 @@
1
+ from policyengine_us.model_api import *
2
+ import numpy as np
3
+
4
+
5
+ def create_ctc_per_child_phase_out() -> Reform:
6
+ class ctc_phase_out(Variable):
7
+ value_type = float
8
+ entity = TaxUnit
9
+ label = "CTC reduction from income"
10
+ unit = USD
11
+ documentation = "Reduction of the total CTC due to income."
12
+ definition_period = YEAR
13
+
14
+ def formula(tax_unit, period, parameters):
15
+ # TCJA's phase-out changes are purely parametric so don't require
16
+ # structural reform.
17
+
18
+ # The ARPA CTC has two phase-outs: the original, and a new phase-out
19
+ # applying before and only to the increase in the maximum CTC under ARPA.
20
+
21
+ # Start with the normal phase-out.
22
+ income = tax_unit("adjusted_gross_income", period)
23
+ p = parameters(period).gov.irs.credits.ctc.phase_out
24
+ phase_out_threshold = tax_unit("ctc_phase_out_threshold", period)
25
+ qualifying_children = tax_unit("ctc_qualifying_children", period)
26
+ excess = max_(0, income - phase_out_threshold)
27
+ increments = np.ceil(excess / p.increment)
28
+ reduction_amount = p.amount * qualifying_children
29
+ return increments * reduction_amount
30
+
31
+ class reform(Reform):
32
+ def apply(self):
33
+ self.update_variable(ctc_phase_out)
34
+
35
+ return reform
36
+
37
+
38
+ def create_ctc_per_child_phase_out_reform(
39
+ parameters, period, bypass: bool = False
40
+ ):
41
+ if bypass:
42
+ return create_ctc_per_child_phase_out()
43
+
44
+ p = parameters(period).gov.contrib.ctc.per_child_phase_out
45
+
46
+ if p.in_effect:
47
+ return create_ctc_per_child_phase_out()
48
+ else:
49
+ return None
50
+
51
+
52
+ ctc_per_child_phase_out = create_ctc_per_child_phase_out_reform(
53
+ None, None, bypass=True
54
+ )
@@ -59,6 +59,9 @@ from .state_dependent_exemptions import (
59
59
  from .ctc import (
60
60
  create_ctc_older_child_supplement_reform,
61
61
  create_ctc_additional_bracket_reform,
62
+ create_ctc_per_child_phase_in_reform,
63
+ create_ctc_per_child_phase_out_reform,
64
+ create_ctc_minimum_refundable_amount_reform,
62
65
  )
63
66
  from .snap import (
64
67
  create_abolish_snap_deductions_reform,
@@ -106,6 +109,7 @@ from .crfb import (
106
109
  create_senior_deduction_extension_reform,
107
110
  )
108
111
 
112
+
109
113
  from policyengine_core.reforms import Reform
110
114
  import warnings
111
115
 
@@ -235,6 +239,15 @@ def create_structural_reforms_from_parameters(parameters, period):
235
239
  american_worker_rebate_act = create_american_worker_rebate_act_reform(
236
240
  parameters, period
237
241
  )
242
+ ctc_per_child_phase_out = create_ctc_per_child_phase_out_reform(
243
+ parameters, period
244
+ )
245
+ ctc_per_child_phase_in = create_ctc_per_child_phase_in_reform(
246
+ parameters, period
247
+ )
248
+ ctc_minimum_refundable_amount = (
249
+ create_ctc_minimum_refundable_amount_reform(parameters, period)
250
+ )
238
251
 
239
252
  reforms = [
240
253
  afa_reform,
@@ -282,6 +295,9 @@ def create_structural_reforms_from_parameters(parameters, period):
282
295
  mi_surtax,
283
296
  additional_tax_bracket,
284
297
  american_worker_rebate_act,
298
+ ctc_per_child_phase_out,
299
+ ctc_per_child_phase_in,
300
+ ctc_minimum_refundable_amount,
285
301
  ]
286
302
  reforms = tuple(filter(lambda x: x is not None, reforms))
287
303
 
@@ -0,0 +1,365 @@
1
+ # Integration tests - With reform applied
2
+
3
+ - name: Integration test - no earnings, minimum amount should apply
4
+ period: 2024
5
+ reforms: policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount
6
+ input:
7
+ gov.contrib.ctc.minimum_refundable.in_effect: true
8
+ gov.contrib.ctc.minimum_refundable.amount[0].amount: 800
9
+ gov.contrib.ctc.minimum_refundable.amount[1].amount: 500
10
+ people:
11
+ person1:
12
+ age: 40
13
+ is_tax_unit_head: true
14
+ employment_income: 0
15
+ child1:
16
+ age: 5
17
+ ctc_qualifying_child: true
18
+ tax_units:
19
+ tax_unit:
20
+ members: [person1, child1]
21
+ households:
22
+ household:
23
+ members: [person1, child1]
24
+ output:
25
+ ctc_minimum_refundable_amount: [0, 800]
26
+ refundable_ctc: 800
27
+ ctc: 2_000
28
+ ctc_phase_in: 0 # No earnings means no phase-in
29
+
30
+ - name: Integration test - low earnings where minimum exceeds phase-in
31
+ period: 2024
32
+ reforms: policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount
33
+ input:
34
+ gov.contrib.ctc.minimum_refundable.in_effect: true
35
+ gov.contrib.ctc.minimum_refundable.amount[0].amount: 800
36
+ gov.contrib.ctc.minimum_refundable.amount[1].amount: 500
37
+ people:
38
+ person1:
39
+ age: 40
40
+ is_tax_unit_head: true
41
+ employment_income: 3_000 # Low earnings
42
+ child1:
43
+ age: 5
44
+ ctc_qualifying_child: true
45
+ tax_units:
46
+ tax_unit:
47
+ members: [person1, child1]
48
+ households:
49
+ household:
50
+ members: [person1, child1]
51
+ output:
52
+ # Phase-in = (3_000 - 2_500) * 0.15 = 75
53
+ # Minimum = 800 (exceeds phase-in)
54
+ # Should use minimum of 800
55
+ ctc_phase_in: 75
56
+ ctc_minimum_refundable_amount: [0, 800]
57
+ refundable_ctc: 800
58
+ ctc: 2_000
59
+
60
+ - name: Integration test - earnings where phase-in exceeds minimum (edge case)
61
+ period: 2024
62
+ reforms: policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount
63
+ input:
64
+ gov.contrib.ctc.minimum_refundable.in_effect: true
65
+ gov.contrib.ctc.minimum_refundable.amount[0].amount: 800
66
+ gov.contrib.ctc.minimum_refundable.amount[1].amount: 500
67
+ people:
68
+ person1:
69
+ age: 40
70
+ is_tax_unit_head: true
71
+ employment_income: 6_000 # Moderate earnings
72
+ child1:
73
+ age: 5
74
+ ctc_qualifying_child: true
75
+ tax_units:
76
+ tax_unit:
77
+ members: [person1, child1]
78
+ households:
79
+ household:
80
+ members: [person1, child1]
81
+ output:
82
+ # Phase-in = (6_000 - 2_500) * 0.15 = 525
83
+ # Minimum = 800 (exceeds phase-in)
84
+ # Should use minimum of 800, not add minimum on top
85
+ ctc_phase_in: 525
86
+ ctc_minimum_refundable_amount: [0, 800]
87
+ refundable_ctc: 800 # Uses max(phase-in, minimum)
88
+ ctc: 2_000
89
+
90
+ - name: Integration test - high earnings where phase-in far exceeds minimum
91
+ period: 2024
92
+ reforms: policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount
93
+ input:
94
+ gov.contrib.ctc.minimum_refundable.in_effect: true
95
+ gov.contrib.ctc.minimum_refundable.amount[0].amount: 800
96
+ gov.contrib.ctc.minimum_refundable.amount[1].amount: 500
97
+ people:
98
+ person1:
99
+ age: 40
100
+ is_tax_unit_head: true
101
+ employment_income: 30_000
102
+ child1:
103
+ age: 5
104
+ ctc_qualifying_child: true
105
+ tax_units:
106
+ tax_unit:
107
+ members: [person1, child1]
108
+ households:
109
+ household:
110
+ members: [person1, child1]
111
+ output:
112
+ ctc_refundable_maximum: 1_700
113
+ ctc: 2_000
114
+ ctc_phase_out: 0
115
+ ctc_minimum_refundable_amount: [0, 800]
116
+ ctc_phase_in: 4_125 # (30_000 - 2_500) * 0.15
117
+ # Phase-in exceeds minimum, should use phase-in
118
+ # Tax liability is 810, so amount_ctc_would_increase = min(2000, 810+4125) - min(2000, 810) = 2000 - 810 = 1190
119
+ # refundable = min(max_refundable=1700, amount_ctc_would_increase=1190) = 1190
120
+ refundable_ctc: 1_190
121
+
122
+ - name: Integration test - multiple children with different ages
123
+ period: 2024
124
+ reforms: policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount
125
+ input:
126
+ gov.contrib.ctc.minimum_refundable.in_effect: true
127
+ gov.contrib.ctc.minimum_refundable.amount[0].amount: 800 # Under 6
128
+ gov.contrib.ctc.minimum_refundable.amount[1].amount: 500 # 6 and over
129
+ people:
130
+ person1:
131
+ age: 40
132
+ is_tax_unit_head: true
133
+ employment_income: 0 # No earnings
134
+ child1:
135
+ age: 3
136
+ ctc_qualifying_child: true
137
+ child2:
138
+ age: 7
139
+ ctc_qualifying_child: true
140
+ child3:
141
+ age: 10
142
+ ctc_qualifying_child: true
143
+ tax_units:
144
+ tax_unit:
145
+ members: [person1, child1, child2, child3]
146
+ households:
147
+ household:
148
+ members: [person1, child1, child2, child3]
149
+ output:
150
+ ctc_minimum_refundable_amount: [0, 800, 500, 500] # By person
151
+ # Total minimum = 800 + 500 + 500 = 1_800
152
+ refundable_ctc: 1_800
153
+ ctc: 6_000 # 3 children * 2_000
154
+
155
+ # Counterfactual tests - Without reform applied (baseline)
156
+
157
+ - name: Counterfactual - no earnings, no refundable CTC without reform
158
+ period: 2024
159
+ input:
160
+ people:
161
+ person1:
162
+ age: 40
163
+ is_tax_unit_head: true
164
+ employment_income: 0
165
+ child1:
166
+ age: 5
167
+ ctc_qualifying_child: true
168
+ tax_units:
169
+ tax_unit:
170
+ members: [person1, child1]
171
+ households:
172
+ household:
173
+ members: [person1, child1]
174
+ output:
175
+ refundable_ctc: 0 # No refundable CTC without earnings
176
+ ctc: 2_000
177
+ ctc_phase_in: 0
178
+
179
+ - name: Counterfactual - low earnings, limited by phase-in without reform
180
+ period: 2024
181
+ input:
182
+ people:
183
+ person1:
184
+ age: 40
185
+ is_tax_unit_head: true
186
+ employment_income: 3_000
187
+ child1:
188
+ age: 5
189
+ ctc_qualifying_child: true
190
+ tax_units:
191
+ tax_unit:
192
+ members: [person1, child1]
193
+ households:
194
+ household:
195
+ members: [person1, child1]
196
+ output:
197
+ ctc_phase_in: 75 # (3_000 - 2_500) * 0.15 = 75
198
+ refundable_ctc: 75 # Limited by phase-in
199
+ ctc: 2_000
200
+
201
+ - name: Counterfactual - moderate earnings without reform
202
+ period: 2024
203
+ input:
204
+ people:
205
+ person1:
206
+ age: 40
207
+ is_tax_unit_head: true
208
+ employment_income: 6_000
209
+ child1:
210
+ age: 5
211
+ ctc_qualifying_child: true
212
+ tax_units:
213
+ tax_unit:
214
+ members: [person1, child1]
215
+ households:
216
+ household:
217
+ members: [person1, child1]
218
+ output:
219
+ ctc_phase_in: 525 # (6_000 - 2_500) * 0.15
220
+ refundable_ctc: 525 # Uses phase-in
221
+ ctc: 2_000
222
+
223
+ - name: Counterfactual - high earnings without reform
224
+ period: 2024
225
+ input:
226
+ people:
227
+ person1:
228
+ age: 40
229
+ is_tax_unit_head: true
230
+ employment_income: 30_000
231
+ child1:
232
+ age: 5
233
+ ctc_qualifying_child: true
234
+ tax_units:
235
+ tax_unit:
236
+ members: [person1, child1]
237
+ households:
238
+ household:
239
+ members: [person1, child1]
240
+ output:
241
+ ctc_refundable_maximum: 1_700
242
+ ctc: 2_000
243
+ ctc_phase_in: 4_125 # (30_000 - 2_500) * 0.15
244
+ # Tax liability is 810, amount_ctc_would_increase = min(2000, 810+4125) - min(2000, 810) = 1190
245
+ refundable_ctc: 1_190 # Limited by amount CTC would increase
246
+
247
+ # Edge case tests - Ensuring no double attribution
248
+
249
+ - name: Edge case - phase-in approximately equals minimum (no double credit)
250
+ period: 2024
251
+ reforms: policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount
252
+ input:
253
+ gov.contrib.ctc.minimum_refundable.in_effect: true
254
+ gov.contrib.ctc.minimum_refundable.amount[0].amount: 800
255
+ gov.contrib.ctc.minimum_refundable.amount[1].amount: 500
256
+ people:
257
+ person1:
258
+ age: 40
259
+ is_tax_unit_head: true
260
+ employment_income: 7_833 # Earnings to get approximately 800 phase-in
261
+ # Phase-in = (7_833 - 2_500) * 0.15 ≈ 799.95
262
+ child1:
263
+ age: 5
264
+ ctc_qualifying_child: true
265
+ tax_units:
266
+ tax_unit:
267
+ members: [person1, child1]
268
+ households:
269
+ household:
270
+ members: [person1, child1]
271
+ output:
272
+ ctc_phase_in: 799.95 # Approximately equals minimum
273
+ ctc_minimum_refundable_amount: [0, 800]
274
+ refundable_ctc: 800 # Uses minimum since phase-in < minimum
275
+ ctc: 2_000
276
+
277
+ - name: Edge case - phase-in slightly above minimum (ensures correct calculation)
278
+ period: 2024
279
+ reforms: policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount
280
+ input:
281
+ gov.contrib.ctc.minimum_refundable.in_effect: true
282
+ gov.contrib.ctc.minimum_refundable.amount[0].amount: 800
283
+ gov.contrib.ctc.minimum_refundable.amount[1].amount: 500
284
+ people:
285
+ person1:
286
+ age: 40
287
+ is_tax_unit_head: true
288
+ employment_income: 8_000 # Slightly more than needed for 800 phase-in
289
+ child1:
290
+ age: 5
291
+ ctc_qualifying_child: true
292
+ tax_units:
293
+ tax_unit:
294
+ members: [person1, child1]
295
+ households:
296
+ household:
297
+ members: [person1, child1]
298
+ output:
299
+ ctc_phase_in: 825 # (8_000 - 2_500) * 0.15
300
+ ctc_minimum_refundable_amount: [0, 800]
301
+ refundable_ctc: 825 # Uses phase-in since it's higher
302
+ ctc: 2_000
303
+
304
+ - name: Edge case - multiple children ensuring no multiplication of minimum
305
+ period: 2024
306
+ reforms: policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount
307
+ input:
308
+ gov.contrib.ctc.minimum_refundable.in_effect: true
309
+ gov.contrib.ctc.minimum_refundable.amount[0].amount: 800
310
+ gov.contrib.ctc.minimum_refundable.amount[1].amount: 500
311
+ people:
312
+ person1:
313
+ age: 40
314
+ is_tax_unit_head: true
315
+ employment_income: 20_000 # Moderate earnings
316
+ child1:
317
+ age: 3
318
+ ctc_qualifying_child: true
319
+ child2:
320
+ age: 7
321
+ ctc_qualifying_child: true
322
+ tax_units:
323
+ tax_unit:
324
+ members: [person1, child1, child2]
325
+ households:
326
+ household:
327
+ members: [person1, child1, child2]
328
+ output:
329
+ ctc_minimum_refundable_amount: [0, 800, 500]
330
+ # Total minimum = 1_300
331
+ ctc_phase_in: 2_625 # (20_000 - 2_500) * 0.15
332
+ # Phase-in exceeds total minimum, so use phase-in
333
+ ctc_refundable_maximum: 3_400 # 2 * 1_700
334
+ refundable_ctc: 2_625 # Uses phase-in, not phase-in + minimum
335
+ ctc: 4_000 # 2 children * 2_000
336
+
337
+ - name: Edge case - very high income with phase-out affecting refundability
338
+ period: 2024
339
+ reforms: policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount
340
+ input:
341
+ gov.contrib.ctc.minimum_refundable.in_effect: true
342
+ gov.contrib.ctc.minimum_refundable.amount[0].amount: 800
343
+ gov.contrib.ctc.minimum_refundable.amount[1].amount: 500
344
+ people:
345
+ person1:
346
+ age: 40
347
+ is_tax_unit_head: true
348
+ is_tax_unit_spouse: false
349
+ employment_income: 250_000 # High income triggering phase-out
350
+ child1:
351
+ age: 5
352
+ ctc_qualifying_child: true
353
+ tax_units:
354
+ tax_unit:
355
+ members: [person1, child1]
356
+ tax_unit_is_joint: false
357
+ households:
358
+ household:
359
+ members: [person1, child1]
360
+ output:
361
+ # Phase-out starts at 200_000 for single filers
362
+ # Phase-out = (250_000 - 200_000) * 0.05 = 2_500
363
+ ctc_phase_out: 2_500
364
+ ctc: 0 # Fully phased out (2_000 - 2_500 = 0, capped at 0)
365
+ refundable_ctc: 0 # No CTC left to be refundable
@@ -0,0 +1,144 @@
1
+ - name: Earnings below threshold - no phase-in
2
+ period: 2024
3
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in
4
+ input:
5
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
6
+ tax_unit_earned_income: 2_000
7
+ ctc_qualifying_children: 2
8
+ output:
9
+ ctc_phase_in_relevant_earnings: 0
10
+
11
+ - name: Earnings exactly at threshold - no phase-in
12
+ period: 2024
13
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in
14
+ input:
15
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
16
+ tax_unit_earned_income: 2_500
17
+ ctc_qualifying_children: 1
18
+ output:
19
+ ctc_phase_in_relevant_earnings: 0
20
+
21
+ - name: Single child - earnings $1,000 above threshold
22
+ period: 2024
23
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in
24
+ input:
25
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
26
+ tax_unit_earned_income: 3_500
27
+ ctc_qualifying_children: 1
28
+ output:
29
+ ctc_phase_in_relevant_earnings: 150
30
+
31
+ - name: Single child - earnings $5,000 above threshold
32
+ period: 2024
33
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in
34
+ input:
35
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
36
+ tax_unit_earned_income: 7_500
37
+ ctc_qualifying_children: 1
38
+ output:
39
+ ctc_phase_in_relevant_earnings: 750
40
+
41
+ - name: Two children - earnings $1,000 above threshold
42
+ period: 2024
43
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in
44
+ input:
45
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
46
+ tax_unit_earned_income: 3_500
47
+ ctc_qualifying_children: 2
48
+ output:
49
+ ctc_phase_in_relevant_earnings: 300
50
+
51
+ - name: Two children - earnings $5,000 above threshold
52
+ period: 2024
53
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in
54
+ input:
55
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
56
+ tax_unit_earned_income: 7_500
57
+ ctc_qualifying_children: 2
58
+ output:
59
+ ctc_phase_in_relevant_earnings: 1_500
60
+
61
+ - name: Three children - earnings $2,000 above threshold
62
+ period: 2024
63
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in
64
+ input:
65
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
66
+ tax_unit_earned_income: 4_500
67
+ ctc_qualifying_children: 3
68
+ output:
69
+ ctc_phase_in_relevant_earnings: 900
70
+
71
+ - name: Four children - high earnings scenario
72
+ period: 2024
73
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in
74
+ input:
75
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
76
+ tax_unit_earned_income: 10_000
77
+ ctc_qualifying_children: 4
78
+ output:
79
+ ctc_phase_in_relevant_earnings: 4_500
80
+
81
+ - name: Edge case - earnings $1 above threshold with one child
82
+ period: 2024
83
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in
84
+ input:
85
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
86
+ tax_unit_earned_income: 2_501
87
+ ctc_qualifying_children: 1
88
+ output:
89
+ ctc_phase_in_relevant_earnings: 0.15
90
+
91
+ - name: Edge case - earnings $1 above threshold with three children
92
+ period: 2024
93
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in
94
+ input:
95
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
96
+ tax_unit_earned_income: 2_501
97
+ ctc_qualifying_children: 3
98
+ output:
99
+ ctc_phase_in_relevant_earnings: 0.45
100
+
101
+ - name: Counterfactual - same scenario without reform active
102
+ period: 2024
103
+ input:
104
+ gov.contrib.ctc.per_child_phase_out.in_effect: false
105
+ tax_unit_earned_income: 3_500
106
+ ctc_qualifying_children: 2
107
+ output:
108
+ ctc_phase_in_relevant_earnings: 150
109
+
110
+ - name: Large earnings scenario - $50,000 with single child
111
+ period: 2024
112
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in
113
+ input:
114
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
115
+ tax_unit_earned_income: 50_000
116
+ ctc_qualifying_children: 1
117
+ output:
118
+ ctc_phase_in_relevant_earnings: 7_125
119
+
120
+ - name: Large earnings scenario - $50,000 with two children
121
+ period: 2024
122
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in
123
+ input:
124
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
125
+ tax_unit_earned_income: 50_000
126
+ ctc_qualifying_children: 2
127
+ output:
128
+ ctc_phase_in_relevant_earnings: 14_250
129
+
130
+ - name: Large earnings scenario - $50,000 with two children, reform not active
131
+ period: 2024
132
+ input:
133
+ tax_unit_earned_income: 50_000
134
+ ctc_qualifying_children: 2
135
+ output:
136
+ ctc_phase_in_relevant_earnings: 7_125
137
+
138
+ - name: Large earnings scenario - $50,000 with one child, reform not active
139
+ period: 2024
140
+ input:
141
+ tax_unit_earned_income: 50_000
142
+ ctc_qualifying_children: 1
143
+ output:
144
+ ctc_phase_in_relevant_earnings: 7_125
@@ -0,0 +1,118 @@
1
+ - name: Adjusted gross income below the threshold
2
+ period: 2024
3
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out
4
+ input:
5
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
6
+ adjusted_gross_income: 0
7
+ ctc_phase_out_threshold: 200_000
8
+ ctc_qualifying_children: 3
9
+ output:
10
+ ctc_phase_out: 0
11
+
12
+ - name: Single child - no phase out
13
+ period: 2024
14
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out
15
+ input:
16
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
17
+ adjusted_gross_income: 200_000
18
+ ctc_phase_out_threshold: 200_000
19
+ ctc_qualifying_children: 1
20
+ output:
21
+ ctc_phase_out: 0
22
+
23
+ - name: Single child - partial phase out at $1,000 above threshold
24
+ period: 2024
25
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out
26
+ input:
27
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
28
+ adjusted_gross_income: 201_000
29
+ ctc_phase_out_threshold: 200_000
30
+ ctc_qualifying_children: 1
31
+ output:
32
+ ctc_phase_out: 50
33
+
34
+ - name: Single child - partial phase out at $1,500 above threshold
35
+ period: 2024
36
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out
37
+ input:
38
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
39
+ adjusted_gross_income: 201_500
40
+ ctc_phase_out_threshold: 200_000
41
+ ctc_qualifying_children: 1
42
+ output:
43
+ ctc_phase_out: 100
44
+
45
+ - name: Three children - no phase out at threshold
46
+ period: 2024
47
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out
48
+ input:
49
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
50
+ adjusted_gross_income: 200_000
51
+ ctc_phase_out_threshold: 200_000
52
+ ctc_qualifying_children: 3
53
+ output:
54
+ ctc_phase_out: 0
55
+
56
+ - name: Three children - partial phase out at $1,000 above threshold
57
+ period: 2024
58
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out
59
+ input:
60
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
61
+ adjusted_gross_income: 201_000
62
+ ctc_phase_out_threshold: 200_000
63
+ ctc_qualifying_children: 3
64
+ output:
65
+ ctc_phase_out: 150
66
+
67
+ - name: Three children - partial phase out at $2,500 above threshold
68
+ period: 2024
69
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out
70
+ input:
71
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
72
+ adjusted_gross_income: 202_500
73
+ ctc_phase_out_threshold: 200_000
74
+ ctc_qualifying_children: 3
75
+ output:
76
+ ctc_phase_out: 450
77
+
78
+ - name: Two children - large phase out at $10,000 above threshold
79
+ period: 2024
80
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out
81
+ input:
82
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
83
+ adjusted_gross_income: 210_000
84
+ ctc_phase_out_threshold: 200_000
85
+ ctc_qualifying_children: 2
86
+ output:
87
+ ctc_phase_out: 1_000
88
+
89
+ - name: Counterfactual - same scenario without reform active
90
+ period: 2024
91
+ input:
92
+ adjusted_gross_income: 201_000
93
+ ctc_phase_out_threshold: 200_000
94
+ ctc_qualifying_children: 3
95
+ output:
96
+ ctc_phase_out: 50
97
+
98
+ - name: Edge case - exactly at increment boundary
99
+ period: 2024
100
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out
101
+ input:
102
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
103
+ adjusted_gross_income: 202_000
104
+ ctc_phase_out_threshold: 200_000
105
+ ctc_qualifying_children: 2
106
+ output:
107
+ ctc_phase_out: 200
108
+
109
+ - name: Edge case - one dollar over increment boundary
110
+ period: 2024
111
+ reforms: policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out
112
+ input:
113
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
114
+ adjusted_gross_income: 202_001
115
+ ctc_phase_out_threshold: 200_000
116
+ ctc_qualifying_children: 2
117
+ output:
118
+ ctc_phase_out: 300
@@ -38,7 +38,7 @@ class ny_ctc_pre_2024(Variable):
38
38
  if isinstance(ctc_parameter, Parameter):
39
39
  ctc_parameter.update(
40
40
  start=instant("2017-01-01"),
41
- stop=instant("2026-01-01"),
41
+ stop=instant("2035-01-01"),
42
42
  value=ctc_parameter("2017-01-01"),
43
43
  )
44
44
  # Delete all arrays from pre-TCJA CTC branch.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: policyengine-us
3
- Version: 1.406.0
3
+ Version: 1.407.1
4
4
  Summary: Add your description here.
5
5
  Author-email: PolicyEngine <hello@policyengine.org>
6
6
  License-File: LICENSE
@@ -193,8 +193,12 @@ policyengine_us/parameters/gov/contrib/crfb/tax_employer_social_security_tax/in_
193
193
  policyengine_us/parameters/gov/contrib/ctc/additional_bracket/in_effect.yaml,sha256=ye9DVUx50Q5jWNw5m9RFtWHeB7MDwle7qHGX7_wd0Ck,187
194
194
  policyengine_us/parameters/gov/contrib/ctc/additional_bracket/amount/actc.yaml,sha256=_Dyd6AWevefbcEc_QNyAy1LHeEiVXoNqqKp5CENKu3U,457
195
195
  policyengine_us/parameters/gov/contrib/ctc/additional_bracket/amount/base.yaml,sha256=RUHbKjTNmmIbVnCkbY92r15PuS-YsVKiugQ7WIyZyBc,481
196
+ policyengine_us/parameters/gov/contrib/ctc/minimum_refundable/amount.yaml,sha256=vkK1hshSL-DrspUXMW4DUUB98kpw7Wu0N1YRlUJPQgE,404
197
+ policyengine_us/parameters/gov/contrib/ctc/minimum_refundable/in_effect.yaml,sha256=po9YS0kG2KWs3UUYQ-WV9XRZguIoYmSIHnmNYKpyAR8,190
196
198
  policyengine_us/parameters/gov/contrib/ctc/oldest_child_supplement/amount.yaml,sha256=-AtkjP9B6crQ614NPcKC1pENjFG2VAp7sapWA2wj9Fk,213
197
199
  policyengine_us/parameters/gov/contrib/ctc/oldest_child_supplement/in_effect.yaml,sha256=pEG7lrB40aoTw8sASIk_FBjdyH8GR0Dke6KsnPZWaFI,228
200
+ policyengine_us/parameters/gov/contrib/ctc/per_child_phase_in/in_effect.yaml,sha256=r-KcWaveg451v-uPGqQex3rubXeXU5EFUMsF_4k7Au8,211
201
+ policyengine_us/parameters/gov/contrib/ctc/per_child_phase_out/in_effect.yaml,sha256=iP6h0bnOU6wZCv86PPXB97TncyvqgWUV2yanR3JRgRU,213
198
202
  policyengine_us/parameters/gov/contrib/dc_kccatc/README.md,sha256=T7HWK3KBedbUs698XSGQGObR5KrOmdavdMzx6GyG2MU,76
199
203
  policyengine_us/parameters/gov/contrib/dc_kccatc/active.yaml,sha256=pqkV9omZweK_C22ZZ570uQxoiNK932yPatX-Y6M_wX8,181
200
204
  policyengine_us/parameters/gov/contrib/dc_kccatc/expenses/max.yaml,sha256=OS040sM47tFcH4ayy13X6OnlTUwxcREdC5AADMl8nF8,164
@@ -3133,7 +3137,7 @@ policyengine_us/params_on_demand/gov/hhs/medicaid/geography/medicaid_rating_area
3133
3137
  policyengine_us/reforms/__init__.py,sha256=FPV8k2633kzUhbKUK8jC6yJONbnZ5n9zLAq2UL57KH4,113
3134
3138
  policyengine_us/reforms/dc_kccatc.py,sha256=LyGMfEKe-0TgQ-2vCYGOD8W-EGEW8_DgIqCQP89qDyg,4283
3135
3139
  policyengine_us/reforms/dc_tax_threshold_joint_ratio.py,sha256=G-5E1EJFGZ3VeUl_fuyj82nMIttHRNRdlT-x98koJrk,1633
3136
- policyengine_us/reforms/reforms.py,sha256=clBmQkfuj2MFmcJHUu7I0smBD6wCjA4iqp4JKGav3v4,9896
3140
+ policyengine_us/reforms/reforms.py,sha256=vlmmXymCgkY58URYF-3-Sdcy_SvlScKjG-YF7vco2cU,10453
3137
3141
  policyengine_us/reforms/taxsim.py,sha256=bXNFWfjBX5USld1C7fziT6BBmRy-avz00QtL8WmCHy0,5276
3138
3142
  policyengine_us/reforms/winship.py,sha256=_q74Af1nkmoh0-M6PZJ2FcJAn6v5zf5sAEgvxjwHwyA,3069
3139
3143
  policyengine_us/reforms/additional_tax_bracket/__init__.py,sha256=087GDzojnzkbARUgGTQDMNVWJzjtNZvBGr46jfu1kXc,89
@@ -3169,9 +3173,12 @@ policyengine_us/reforms/crfb/senior_deduction_extension.py,sha256=Hdg16tmU8bYUa9
3169
3173
  policyengine_us/reforms/crfb/tax_employer_medicare_tax.py,sha256=Hc2GVwoXn2b_izOyoEpocySLo11BdmzFnyQoEiHJsFI,4236
3170
3174
  policyengine_us/reforms/crfb/tax_employer_payroll_tax.py,sha256=-V6vv51aYb0NRuB4mjqfjD6yGNSLqqgbKVhVG455U3I,4678
3171
3175
  policyengine_us/reforms/crfb/tax_employer_social_security_tax.py,sha256=hawAdLtwCnY3_7jUVPTM0KpeYRfT7tVk0xqCMhdxP4E,4292
3172
- policyengine_us/reforms/ctc/__init__.py,sha256=_qWyJ2JK4xfkef1REpYcXjY2v8m-xppoXGxoPFs7voc,172
3176
+ policyengine_us/reforms/ctc/__init__.py,sha256=mXLIEHPIXHe5PyI96pTmP9b3y1jwwTcMoRNOIx808Y4,434
3173
3177
  policyengine_us/reforms/ctc/ctc_additional_bracket.py,sha256=KNmEB_OLwpLbvaPo4w0n18VnAmg0u3efirfVVCOrWj4,2391
3178
+ policyengine_us/reforms/ctc/ctc_minimum_refundable_amount.py,sha256=TWMzyJOB1KwGhZ4j8aeCc_GbIcmUqf2I1cetwc7D4y4,3352
3174
3179
  policyengine_us/reforms/ctc/ctc_older_child_supplement.py,sha256=eGkehEr_26CYSFo3K4gZ2vJYR_8wDX4r776DIMEaaik,1714
3180
+ policyengine_us/reforms/ctc/ctc_per_child_phase_in.py,sha256=jgfq8YOtYBc8gN-oleE8Fp2zG7h5X0LHLn6At14vFdk,1453
3181
+ policyengine_us/reforms/ctc/ctc_per_child_phase_out.py,sha256=MhcXlTVpDTg1QbGPP-eq-VxKOD6eqnkoKpgbI_lc6_I,1783
3175
3182
  policyengine_us/reforms/deductions/salt/__init__.py,sha256=wbfISQikAqCdy0MnLC-oZKmieRksm64MKHnNFbW3Ldw,114
3176
3183
  policyengine_us/reforms/deductions/salt/limit_salt_deduction_to_property_taxes.py,sha256=F3KrYmOeR0JdkSxj7iClIdkagpHDcUpGnYLFCIjd7hw,1372
3177
3184
  policyengine_us/reforms/eitc/__init__.py,sha256=bHbMSYp45mGa_JeBgHxDeyBh2_cGoc74SGKZ_8NKCCc,100
@@ -5258,7 +5265,10 @@ policyengine_us/tests/policy/contrib/crfb/tax_employer_medicare_tax.yaml,sha256=
5258
5265
  policyengine_us/tests/policy/contrib/crfb/tax_employer_payroll_tax_percentage.yaml,sha256=N3l6vYyluEGIbd2HfSQFuAYPzg0r4CC0JZujm3-joO8,5510
5259
5266
  policyengine_us/tests/policy/contrib/crfb/tax_employer_social_security_tax.yaml,sha256=0boINedj32lA-V2VLztNBoylnOlzRinlwtcg3JIij0g,474
5260
5267
  policyengine_us/tests/policy/contrib/ctc/ctc_additional_bracket.yaml,sha256=0vUrhnn91ETd_lkk1YqG5EzGj8wTj2r5mHZ3A-mjwlo,3445
5268
+ policyengine_us/tests/policy/contrib/ctc/ctc_minimum_refundable_amount.yaml,sha256=bIkE1gHCmMTg8NWtGCZju3_teTwGRjQc3g2usM-wBCQ,11324
5261
5269
  policyengine_us/tests/policy/contrib/ctc/ctc_older_child_supplement.yaml,sha256=7P67DlafOtTxAcpH2ossYPDInWyz6DJayNf_0Ed7rcQ,2059
5270
+ policyengine_us/tests/policy/contrib/ctc/ctc_per_child_phase_in.yaml,sha256=uCAlu5Gj4iww2hCWbsqFst7zcT6UvM9_D9cKQyRc5QE,4754
5271
+ policyengine_us/tests/policy/contrib/ctc/ctc_per_child_phase_out.yaml,sha256=H5k9TyIge7VeZRGxIXVTOQPV5SpqAuX509iV-SXLBI4,3829
5262
5272
  policyengine_us/tests/policy/contrib/deductions/salt/limit_salt_deduction_to_property_taxes.yaml,sha256=hm9EmieOGGkIMfWgcNeKegLgAz9QQiGAeZKTlmxpJgU,1453
5263
5273
  policyengine_us/tests/policy/contrib/eitc/halve_joint_eitc_phase_out_rate.yaml,sha256=PxlvKGjORZl3BldCdXJMCxTuQ4mcdwPXYWsuSSB9fqw,1605
5264
5274
  policyengine_us/tests/policy/contrib/federal/abolish_federal_income_tax.yaml,sha256=mz696NDcL4oiTfj4jCg-PLKDE5p3-nsdAaIUglkz9rs,1600
@@ -7452,7 +7462,7 @@ policyengine_us/variables/gov/states/ny/tax/income/credits/ctc/ny_ctc_post_2024.
7452
7462
  policyengine_us/variables/gov/states/ny/tax/income/credits/ctc/ny_ctc_post_2024_base.py,sha256=firvDXTyXDQvjDzEaMMi8vTiFQ8_L1Tk3o3hLYzMdWM,1037
7453
7463
  policyengine_us/variables/gov/states/ny/tax/income/credits/ctc/ny_ctc_post_2024_eligible.py,sha256=8PP4Om-O5C3XUfSjFe5puZ7dORf0jVm0DXwDkt09E04,1223
7454
7464
  policyengine_us/variables/gov/states/ny/tax/income/credits/ctc/ny_ctc_post_2024_phase_out.py,sha256=bFxYim4489rCULP1Wjo6hzFCCEo51T5AVI4du4vl2MQ,1533
7455
- policyengine_us/variables/gov/states/ny/tax/income/credits/ctc/ny_ctc_pre_2024.py,sha256=NQBL28lN4O8uOes-no6yiG6omwbI6GC3HSZ7ifAr9-8,3909
7465
+ policyengine_us/variables/gov/states/ny/tax/income/credits/ctc/ny_ctc_pre_2024.py,sha256=qjKFRkUkLky0x-VuKvdF6CdqlExNrflYTZgTrMcLoZ8,3909
7456
7466
  policyengine_us/variables/gov/states/ny/tax/income/credits/ctc/ny_ctc_pre_2024_eligible.py,sha256=ZS_8sFxPdFZ_rOHvZTwLv_VQh-N2iSBmABHrdBSYPjg,2269
7457
7467
  policyengine_us/variables/gov/states/ny/tax/income/credits/solar_energy_systems/ny_qualified_solar_energy_systems_equipment_expenditures.py,sha256=PkPQD477kkTqtDyeg7SdevSg7abb04oMBJ5xHFHpspI,407
7458
7468
  policyengine_us/variables/gov/states/ny/tax/income/credits/solar_energy_systems/ny_solar_energy_systems_equipment_credit.py,sha256=L8StSE44y0qJfowTiE2kjkFV1HipBwOdjfv2W7tlKfE,768
@@ -8470,8 +8480,8 @@ policyengine_us/variables/input/farm_income.py,sha256=BEKxYmHNNnWJAAvULl5qZJigy5
8470
8480
  policyengine_us/variables/input/geography.py,sha256=Ux0ueAf0rhZaflyEqz81UuXP3xKCKBDvoO3CrKhiQEc,5421
8471
8481
  policyengine_us/variables/input/self_employment_income.py,sha256=PwsGz8R4lRikKWUYOhsC0qosNNLXq4f5SQmfw4S3mk8,511
8472
8482
  policyengine_us/variables/input/self_employment_income_before_lsr.py,sha256=E8fcX9Nlyqz8dziHhQv_euutdmoIwFMMWePUwbbwv_w,379
8473
- policyengine_us-1.406.0.dist-info/METADATA,sha256=CNLbkTzA8DsSk5vyf4bpXxaYcEdd9KrA1f2tqjxC-7Q,1649
8474
- policyengine_us-1.406.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
8475
- policyengine_us-1.406.0.dist-info/entry_points.txt,sha256=MLaqNyNTbReALyKNkde85VkuFFpdPWAcy8VRG1mjczc,57
8476
- policyengine_us-1.406.0.dist-info/licenses/LICENSE,sha256=2N5ReRelkdqkR9a-KP-y-shmcD5P62XoYiG-miLTAzo,34519
8477
- policyengine_us-1.406.0.dist-info/RECORD,,
8483
+ policyengine_us-1.407.1.dist-info/METADATA,sha256=3NjUqFtFEN6jkn2oeECI_PwKlZGqBkwx67RzdQP1Y_o,1649
8484
+ policyengine_us-1.407.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
8485
+ policyengine_us-1.407.1.dist-info/entry_points.txt,sha256=MLaqNyNTbReALyKNkde85VkuFFpdPWAcy8VRG1mjczc,57
8486
+ policyengine_us-1.407.1.dist-info/licenses/LICENSE,sha256=2N5ReRelkdqkR9a-KP-y-shmcD5P62XoYiG-miLTAzo,34519
8487
+ policyengine_us-1.407.1.dist-info/RECORD,,