policyengine-us 1.407.3__py3-none-any.whl → 1.408.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/contrib/ctc/minimum_refundable/amount.yaml +0 -1
- policyengine_us/parameters/gov/states/nm/tax/income/main/head_of_household.yaml +11 -0
- policyengine_us/parameters/gov/states/nm/tax/income/main/joint.yaml +11 -0
- policyengine_us/parameters/gov/states/nm/tax/income/main/separate.yaml +11 -0
- policyengine_us/parameters/gov/states/nm/tax/income/main/single.yaml +11 -0
- policyengine_us/parameters/gov/states/nm/tax/income/main/surviving_spouse.yaml +11 -0
- policyengine_us/reforms/ctc/ctc_minimum_refundable_amount.py +47 -15
- policyengine_us/reforms/ctc/ctc_per_child_phase_in.py +1 -1
- policyengine_us/reforms/ctc/ctc_per_child_phase_out.py +26 -0
- policyengine_us/tests/policy/baseline/gov/states/nm/tax/income/nm_income_tax_before_non_refundable_credits.yaml +28 -1
- policyengine_us/tests/policy/contrib/ctc/ctc_minimum_refundable_amount.yaml +4 -122
- policyengine_us/tests/policy/contrib/ctc/integration.yaml +310 -0
- {policyengine_us-1.407.3.dist-info → policyengine_us-1.408.0.dist-info}/METADATA +1 -1
- {policyengine_us-1.407.3.dist-info → policyengine_us-1.408.0.dist-info}/RECORD +17 -16
- {policyengine_us-1.407.3.dist-info → policyengine_us-1.408.0.dist-info}/WHEEL +0 -0
- {policyengine_us-1.407.3.dist-info → policyengine_us-1.408.0.dist-info}/entry_points.txt +0 -0
- {policyengine_us-1.407.3.dist-info → policyengine_us-1.408.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -5,6 +5,8 @@ metadata:
|
|
|
5
5
|
rate_unit: /1
|
|
6
6
|
label: New Mexico income tax rate head of household filers
|
|
7
7
|
reference:
|
|
8
|
+
- title: NMSA 1978, Section 7-2-7 (Effective January 1, 2025)
|
|
9
|
+
href: https://law.justia.com/codes/new-mexico/chapter-7/article-2/section-7-2-7-d-1/
|
|
8
10
|
- title: New Mexico Income Tax Act, 7-2-7, B
|
|
9
11
|
href: https://klvg4oyd4j.execute-api.us-west-2.amazonaws.com/prod/PublicFiles/34821a9573ca43e7b06dfad20f5183fd/856ebf4b-3814-49dd-8631-ebe579d6a42b/Personal%20Income%20Tax.pdf#page=45 # document page 33
|
|
10
12
|
# Tax form depicts the income tax as a tax rate table without specific rates.
|
|
@@ -21,16 +23,25 @@ brackets:
|
|
|
21
23
|
2008-01-01: 0
|
|
22
24
|
rate:
|
|
23
25
|
2008-01-01: 0.017
|
|
26
|
+
2025-01-01: 0.015
|
|
24
27
|
- threshold:
|
|
25
28
|
2008-01-01: 8_000
|
|
26
29
|
rate:
|
|
27
30
|
2008-01-01: 0.032
|
|
28
31
|
- threshold:
|
|
29
32
|
2008-01-01: 16_000
|
|
33
|
+
2025-01-01: 25_000
|
|
30
34
|
rate:
|
|
31
35
|
2008-01-01: 0.047
|
|
36
|
+
2025-01-01: 0.043
|
|
32
37
|
- threshold:
|
|
33
38
|
2008-01-01: 24_000
|
|
39
|
+
2025-01-01: 50_000
|
|
40
|
+
rate:
|
|
41
|
+
2008-01-01: 0.049
|
|
42
|
+
2025-01-01: 0.047
|
|
43
|
+
- threshold:
|
|
44
|
+
2008-01-01: 100_000
|
|
34
45
|
rate:
|
|
35
46
|
2008-01-01: 0.049
|
|
36
47
|
- threshold:
|
|
@@ -5,6 +5,8 @@ metadata:
|
|
|
5
5
|
rate_unit: /1
|
|
6
6
|
label: New Mexico income tax rate joint filers
|
|
7
7
|
reference:
|
|
8
|
+
- title: NMSA 1978, Section 7-2-7 (Effective January 1, 2025)
|
|
9
|
+
href: https://law.justia.com/codes/new-mexico/chapter-7/article-2/section-7-2-7-d-1/
|
|
8
10
|
- title: New Mexico Income Tax Act, 7-2-7, B
|
|
9
11
|
href: https://klvg4oyd4j.execute-api.us-west-2.amazonaws.com/prod/PublicFiles/34821a9573ca43e7b06dfad20f5183fd/856ebf4b-3814-49dd-8631-ebe579d6a42b/Personal%20Income%20Tax.pdf#page=45 # document page 33
|
|
10
12
|
# Tax form depicts the income tax as a tax rate table without specific rates.
|
|
@@ -21,16 +23,25 @@ brackets:
|
|
|
21
23
|
2008-01-01: 0
|
|
22
24
|
rate:
|
|
23
25
|
2008-01-01: 0.017
|
|
26
|
+
2025-01-01: 0.015
|
|
24
27
|
- threshold:
|
|
25
28
|
2008-01-01: 8_000
|
|
26
29
|
rate:
|
|
27
30
|
2008-01-01: 0.032
|
|
28
31
|
- threshold:
|
|
29
32
|
2008-01-01: 16_000
|
|
33
|
+
2025-01-01: 25_000
|
|
30
34
|
rate:
|
|
31
35
|
2008-01-01: 0.047
|
|
36
|
+
2025-01-01: 0.043
|
|
32
37
|
- threshold:
|
|
33
38
|
2008-01-01: 24_000
|
|
39
|
+
2025-01-01: 50_000
|
|
40
|
+
rate:
|
|
41
|
+
2008-01-01: 0.049
|
|
42
|
+
2025-01-01: 0.047
|
|
43
|
+
- threshold:
|
|
44
|
+
2008-01-01: 100_000
|
|
34
45
|
rate:
|
|
35
46
|
2008-01-01: 0.049
|
|
36
47
|
- threshold:
|
|
@@ -5,6 +5,8 @@ metadata:
|
|
|
5
5
|
rate_unit: /1
|
|
6
6
|
label: New Mexico income tax rate married separate filers
|
|
7
7
|
reference:
|
|
8
|
+
- title: NMSA 1978, Section 7-2-7 (Effective January 1, 2025)
|
|
9
|
+
href: https://law.justia.com/codes/new-mexico/chapter-7/article-2/section-7-2-7-d-1/
|
|
8
10
|
- title: New Mexico Income Tax Act, 7-2-7, B
|
|
9
11
|
href: https://klvg4oyd4j.execute-api.us-west-2.amazonaws.com/prod/PublicFiles/34821a9573ca43e7b06dfad20f5183fd/856ebf4b-3814-49dd-8631-ebe579d6a42b/Personal%20Income%20Tax.pdf#page=45
|
|
10
12
|
# Tax form depicts the income tax as a tax rate table without specific rates.
|
|
@@ -21,16 +23,25 @@ brackets:
|
|
|
21
23
|
2008-01-01: 0
|
|
22
24
|
rate:
|
|
23
25
|
2008-01-01: 0.017
|
|
26
|
+
2025-01-01: 0.015
|
|
24
27
|
- threshold:
|
|
25
28
|
2008-01-01: 4_000
|
|
26
29
|
rate:
|
|
27
30
|
2008-01-01: 0.032
|
|
28
31
|
- threshold:
|
|
29
32
|
2008-01-01: 8_000
|
|
33
|
+
2025-01-01: 12_500
|
|
30
34
|
rate:
|
|
31
35
|
2008-01-01: 0.047
|
|
36
|
+
2025-01-01: 0.043
|
|
32
37
|
- threshold:
|
|
33
38
|
2008-01-01: 12_000
|
|
39
|
+
2025-01-01: 25_000
|
|
40
|
+
rate:
|
|
41
|
+
2008-01-01: 0.049
|
|
42
|
+
2025-01-01: 0.047
|
|
43
|
+
- threshold:
|
|
44
|
+
2008-01-01: 50_000
|
|
34
45
|
rate:
|
|
35
46
|
2008-01-01: 0.049
|
|
36
47
|
- threshold:
|
|
@@ -5,6 +5,8 @@ metadata:
|
|
|
5
5
|
rate_unit: /1
|
|
6
6
|
label: New Mexico income tax rate single filers
|
|
7
7
|
reference:
|
|
8
|
+
- title: NMSA 1978, Section 7-2-7 (Effective January 1, 2025)
|
|
9
|
+
href: https://law.justia.com/codes/new-mexico/chapter-7/article-2/section-7-2-7-d-1/
|
|
8
10
|
- title: New Mexico Income Tax Act, 7-2-7, B
|
|
9
11
|
href: https://klvg4oyd4j.execute-api.us-west-2.amazonaws.com/prod/PublicFiles/34821a9573ca43e7b06dfad20f5183fd/856ebf4b-3814-49dd-8631-ebe579d6a42b/Personal%20Income%20Tax.pdf#page=45 # document page 33
|
|
10
12
|
# Tax form depicts the income tax as a tax rate table without specific rates.
|
|
@@ -21,16 +23,25 @@ brackets:
|
|
|
21
23
|
2008-01-01: 0
|
|
22
24
|
rate:
|
|
23
25
|
2008-01-01: 0.017
|
|
26
|
+
2025-01-01: 0.015
|
|
24
27
|
- threshold:
|
|
25
28
|
2008-01-01: 5_500
|
|
26
29
|
rate:
|
|
27
30
|
2008-01-01: 0.032
|
|
28
31
|
- threshold:
|
|
29
32
|
2008-01-01: 11_000
|
|
33
|
+
2025-01-01: 16_500
|
|
30
34
|
rate:
|
|
31
35
|
2008-01-01: 0.047
|
|
36
|
+
2025-01-01: 0.043
|
|
32
37
|
- threshold:
|
|
33
38
|
2008-01-01: 16_000
|
|
39
|
+
2025-01-01: 33_500
|
|
40
|
+
rate:
|
|
41
|
+
2008-01-01: 0.049
|
|
42
|
+
2025-01-01: 0.047
|
|
43
|
+
- threshold:
|
|
44
|
+
2008-01-01: 66_500
|
|
34
45
|
rate:
|
|
35
46
|
2008-01-01: 0.049
|
|
36
47
|
- threshold:
|
|
@@ -5,6 +5,8 @@ metadata:
|
|
|
5
5
|
rate_unit: /1
|
|
6
6
|
label: New Mexico income tax rate surviving spouse filers
|
|
7
7
|
reference:
|
|
8
|
+
- title: NMSA 1978, Section 7-2-7 (Effective January 1, 2025)
|
|
9
|
+
href: https://law.justia.com/codes/new-mexico/chapter-7/article-2/section-7-2-7-d-1/
|
|
8
10
|
- title: New Mexico Income Tax Act, 7-2-7, B
|
|
9
11
|
href: https://klvg4oyd4j.execute-api.us-west-2.amazonaws.com/prod/PublicFiles/34821a9573ca43e7b06dfad20f5183fd/856ebf4b-3814-49dd-8631-ebe579d6a42b/Personal%20Income%20Tax.pdf#page=45 # document page 33
|
|
10
12
|
# Tax form depicts the income tax as a tax rate table without specific rates.
|
|
@@ -21,16 +23,25 @@ brackets:
|
|
|
21
23
|
2008-01-01: 0
|
|
22
24
|
rate:
|
|
23
25
|
2008-01-01: 0.017
|
|
26
|
+
2025-01-01: 0.015
|
|
24
27
|
- threshold:
|
|
25
28
|
2008-01-01: 8_000
|
|
26
29
|
rate:
|
|
27
30
|
2008-01-01: 0.032
|
|
28
31
|
- threshold:
|
|
29
32
|
2008-01-01: 16_000
|
|
33
|
+
2025-01-01: 25_000
|
|
30
34
|
rate:
|
|
31
35
|
2008-01-01: 0.047
|
|
36
|
+
2025-01-01: 0.043
|
|
32
37
|
- threshold:
|
|
33
38
|
2008-01-01: 24_000
|
|
39
|
+
2025-01-01: 50_000
|
|
40
|
+
rate:
|
|
41
|
+
2008-01-01: 0.049
|
|
42
|
+
2025-01-01: 0.047
|
|
43
|
+
- threshold:
|
|
44
|
+
2008-01-01: 100_000
|
|
34
45
|
rate:
|
|
35
46
|
2008-01-01: 0.049
|
|
36
47
|
- threshold:
|
|
@@ -38,37 +38,69 @@ def create_ctc_minimum_refundable_amount() -> Reform:
|
|
|
38
38
|
# This is the full CTC. This is then limited to the maximum refundable amount per child as per the
|
|
39
39
|
# TCJA provision.
|
|
40
40
|
|
|
41
|
-
ctc = parameters(period).gov.irs.credits.ctc
|
|
42
|
-
|
|
43
41
|
maximum_amount = tax_unit("ctc_refundable_maximum", period)
|
|
44
|
-
|
|
45
42
|
total_ctc = tax_unit("ctc", period)
|
|
46
43
|
|
|
47
|
-
if ctc.refundable.fully_refundable:
|
|
48
|
-
reduction = tax_unit("ctc_phase_out", period)
|
|
49
|
-
reduced_max_amount = max_(0, maximum_amount - reduction)
|
|
50
|
-
return min_(reduced_max_amount, total_ctc)
|
|
51
|
-
|
|
52
44
|
maximum_refundable_ctc = min_(maximum_amount, total_ctc)
|
|
53
45
|
minimum_refundable_ctc = add(
|
|
54
46
|
tax_unit, period, ["ctc_minimum_refundable_amount"]
|
|
55
47
|
)
|
|
56
48
|
phase_in = tax_unit("ctc_phase_in", period)
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
ctc_capped_by_tax = min_(total_ctc, limiting_tax)
|
|
49
|
+
|
|
50
|
+
phase_in_with_minimum = phase_in + minimum_refundable_ctc
|
|
60
51
|
ctc_capped_by_increased_tax = min_(
|
|
61
|
-
total_ctc,
|
|
52
|
+
total_ctc, phase_in_with_minimum
|
|
62
53
|
)
|
|
63
|
-
|
|
64
|
-
|
|
54
|
+
|
|
55
|
+
return min_(maximum_refundable_ctc, ctc_capped_by_increased_tax)
|
|
56
|
+
|
|
57
|
+
class ctc_refundable_maximum(Variable):
|
|
58
|
+
value_type = float
|
|
59
|
+
entity = TaxUnit
|
|
60
|
+
label = "Maximum refundable CTC"
|
|
61
|
+
unit = USD
|
|
62
|
+
documentation = "The maximum refundable CTC for this person."
|
|
63
|
+
definition_period = YEAR
|
|
64
|
+
reference = (
|
|
65
|
+
"https://www.law.cornell.edu/uscode/text/26/24#a",
|
|
66
|
+
"https://www.law.cornell.edu/uscode/text/26/24#h",
|
|
67
|
+
"https://www.law.cornell.edu/uscode/text/26/24#i",
|
|
68
|
+
"https://www.irs.gov/pub/irs-prior/f1040--2021.pdf",
|
|
69
|
+
"https://www.irs.gov/pub/irs-prior/f1040s8--2021.pdf",
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
def formula(tax_unit, period, parameters):
|
|
73
|
+
person = tax_unit.members
|
|
74
|
+
# Use either normal or ARPA CTC maximums.
|
|
75
|
+
individual_max = person("ctc_child_individual_maximum", period)
|
|
76
|
+
arpa_max = person("ctc_child_individual_maximum_arpa", period)
|
|
77
|
+
child_amount = individual_max + arpa_max
|
|
78
|
+
ctc = parameters(period).gov.irs.credits.ctc
|
|
79
|
+
qualifying_children = tax_unit("ctc_qualifying_children", period)
|
|
80
|
+
refundable_max = (
|
|
81
|
+
ctc.refundable.individual_max * qualifying_children
|
|
65
82
|
)
|
|
66
|
-
return min_(
|
|
83
|
+
return tax_unit.sum(min_(child_amount, refundable_max))
|
|
84
|
+
|
|
85
|
+
class non_refundable_ctc(Variable):
|
|
86
|
+
value_type = float
|
|
87
|
+
entity = TaxUnit
|
|
88
|
+
label = "non-refundable CTC"
|
|
89
|
+
unit = USD
|
|
90
|
+
documentation = (
|
|
91
|
+
"The portion of the Child Tax Credit that is not refundable."
|
|
92
|
+
)
|
|
93
|
+
definition_period = YEAR
|
|
94
|
+
|
|
95
|
+
def formula(tax_unit, period, parameters):
|
|
96
|
+
return 0
|
|
67
97
|
|
|
68
98
|
class reform(Reform):
|
|
69
99
|
def apply(self):
|
|
70
100
|
self.update_variable(ctc_minimum_refundable_amount)
|
|
71
101
|
self.update_variable(refundable_ctc)
|
|
102
|
+
self.update_variable(ctc_refundable_maximum)
|
|
103
|
+
self.update_variable(non_refundable_ctc)
|
|
72
104
|
|
|
73
105
|
return reform
|
|
74
106
|
|
|
@@ -37,7 +37,7 @@ def create_ctc_per_child_phase_in_reform(
|
|
|
37
37
|
if bypass:
|
|
38
38
|
return create_ctc_per_child_phase_in()
|
|
39
39
|
|
|
40
|
-
p = parameters.gov.contrib.ctc.
|
|
40
|
+
p = parameters.gov.contrib.ctc.per_child_phase_in
|
|
41
41
|
|
|
42
42
|
reform_active = False
|
|
43
43
|
current_period = period_(period)
|
|
@@ -2,6 +2,7 @@ from policyengine_us.model_api import *
|
|
|
2
2
|
import numpy as np
|
|
3
3
|
from policyengine_core.periods import period as period_
|
|
4
4
|
from policyengine_core.periods import instant
|
|
5
|
+
import numpy as np
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
def create_ctc_per_child_phase_out() -> Reform:
|
|
@@ -30,9 +31,34 @@ def create_ctc_per_child_phase_out() -> Reform:
|
|
|
30
31
|
reduction_amount = p.amount * qualifying_children
|
|
31
32
|
return increments * reduction_amount
|
|
32
33
|
|
|
34
|
+
class ctc_arpa_uncapped_phase_out(Variable):
|
|
35
|
+
value_type = float
|
|
36
|
+
entity = TaxUnit
|
|
37
|
+
label = "Uncapped phase-out of ARPA CTC increase"
|
|
38
|
+
unit = USD
|
|
39
|
+
definition_period = YEAR
|
|
40
|
+
|
|
41
|
+
def formula(tax_unit, period, parameters):
|
|
42
|
+
# Logic sequence follows the form, which is clearer than the IRC.
|
|
43
|
+
p = parameters(period).gov.irs.credits.ctc.phase_out.arpa
|
|
44
|
+
# defined_for didn't work.
|
|
45
|
+
if not p.in_effect:
|
|
46
|
+
return 0
|
|
47
|
+
# The ARPA CTC has two phase-outs: the original, and a new phase-out
|
|
48
|
+
# applying before and only to the increase in the maximum CTC under ARPA.
|
|
49
|
+
# Calculate the income used to assess the new phase-out.
|
|
50
|
+
threshold = tax_unit("ctc_arpa_phase_out_threshold", period)
|
|
51
|
+
agi = tax_unit("adjusted_gross_income", period)
|
|
52
|
+
excess = max_(0, agi - threshold)
|
|
53
|
+
increments = np.ceil(excess / p.increment)
|
|
54
|
+
qualifying_children = tax_unit("ctc_qualifying_children", period)
|
|
55
|
+
reduction_amount = p.amount * qualifying_children
|
|
56
|
+
return increments * reduction_amount
|
|
57
|
+
|
|
33
58
|
class reform(Reform):
|
|
34
59
|
def apply(self):
|
|
35
60
|
self.update_variable(ctc_phase_out)
|
|
61
|
+
self.update_variable(ctc_arpa_uncapped_phase_out)
|
|
36
62
|
|
|
37
63
|
return reform
|
|
38
64
|
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
output:
|
|
17
17
|
nm_income_tax_before_non_refundable_credits: 200
|
|
18
18
|
|
|
19
|
-
- name: Surviving spouse filer with
|
|
19
|
+
- name: Surviving spouse filer with 6,000 of income
|
|
20
20
|
period: 2023
|
|
21
21
|
input:
|
|
22
22
|
state_code: NM
|
|
@@ -24,3 +24,30 @@
|
|
|
24
24
|
filing_status: SURVIVING_SPOUSE
|
|
25
25
|
output:
|
|
26
26
|
nm_income_tax_before_non_refundable_credits: 102
|
|
27
|
+
|
|
28
|
+
- name: Joint family with 10,000 of income in 2025
|
|
29
|
+
period: 2025
|
|
30
|
+
input:
|
|
31
|
+
state_code: NM
|
|
32
|
+
nm_taxable_income: 10_000
|
|
33
|
+
filing_status: JOINT
|
|
34
|
+
output:
|
|
35
|
+
nm_income_tax_before_non_refundable_credits: 184
|
|
36
|
+
|
|
37
|
+
- name: Single filer with 40,000 of income in 2025
|
|
38
|
+
period: 2025
|
|
39
|
+
input:
|
|
40
|
+
state_code: NM
|
|
41
|
+
nm_taxable_income: 40_000
|
|
42
|
+
filing_status: SINGLE
|
|
43
|
+
output:
|
|
44
|
+
nm_income_tax_before_non_refundable_credits: 1_471
|
|
45
|
+
|
|
46
|
+
- name: Married separate filer with 30,000 of income in 2025
|
|
47
|
+
period: 2025
|
|
48
|
+
input:
|
|
49
|
+
state_code: NM
|
|
50
|
+
nm_taxable_income: 30_000
|
|
51
|
+
filing_status: SEPARATE
|
|
52
|
+
output:
|
|
53
|
+
nm_income_tax_before_non_refundable_credits: 1_104.5
|
|
@@ -54,70 +54,9 @@
|
|
|
54
54
|
# Should use minimum of 800
|
|
55
55
|
ctc_phase_in: 75
|
|
56
56
|
ctc_minimum_refundable_amount: [0, 800]
|
|
57
|
-
refundable_ctc:
|
|
57
|
+
refundable_ctc: 875
|
|
58
58
|
ctc: 2_000
|
|
59
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
60
|
|
|
122
61
|
- name: Integration test - multiple children with different ages
|
|
123
62
|
period: 2024
|
|
@@ -244,64 +183,7 @@
|
|
|
244
183
|
# Tax liability is 810, amount_ctc_would_increase = min(2000, 810+4125) - min(2000, 810) = 1190
|
|
245
184
|
refundable_ctc: 1_190 # Limited by amount CTC would increase
|
|
246
185
|
|
|
247
|
-
|
|
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
|
|
186
|
+
- name: Edge case - multiple children ensuring, multiplication of refundable maximum
|
|
305
187
|
period: 2024
|
|
306
188
|
reforms: policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount
|
|
307
189
|
input:
|
|
@@ -330,8 +212,8 @@
|
|
|
330
212
|
# Total minimum = 1_300
|
|
331
213
|
ctc_phase_in: 2_625 # (20_000 - 2_500) * 0.15
|
|
332
214
|
# Phase-in exceeds total minimum, so use phase-in
|
|
333
|
-
ctc_refundable_maximum:
|
|
334
|
-
refundable_ctc:
|
|
215
|
+
ctc_refundable_maximum: 4_000 # 2 * 2_000
|
|
216
|
+
refundable_ctc: 3_925 # Uses phase-in + minimum
|
|
335
217
|
ctc: 4_000 # 2 children * 2_000
|
|
336
218
|
|
|
337
219
|
- name: Edge case - very high income with phase-out affecting refundability
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
- name: HoH filer with 2 kids, 5k earnings
|
|
2
|
+
period: 2025
|
|
3
|
+
reforms: [policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in,
|
|
4
|
+
policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount,
|
|
5
|
+
policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out]
|
|
6
|
+
input:
|
|
7
|
+
gov.contrib.ctc.per_child_phase_out.in_effect: true
|
|
8
|
+
gov.contrib.ctc.per_child_phase_in.in_effect: true
|
|
9
|
+
gov.contrib.ctc.minimum_refundable.in_effect: true
|
|
10
|
+
gov.contrib.ctc.minimum_refundable.amount[0].amount: 2_400
|
|
11
|
+
gov.contrib.ctc.minimum_refundable.amount[1].amount: 2_400
|
|
12
|
+
gov.irs.credits.ctc.refundable.individual_max: 4_800
|
|
13
|
+
gov.irs.credits.ctc.refundable.phase_in.threshold: 0
|
|
14
|
+
gov.irs.credits.ctc.refundable.phase_in.rate: 0.2
|
|
15
|
+
gov.irs.credits.ctc.amount.base[0].amount: 2_200
|
|
16
|
+
gov.irs.credits.ctc.amount.arpa[0].amount: 4_800
|
|
17
|
+
gov.irs.credits.ctc.amount.arpa[1].amount: 4_800
|
|
18
|
+
gov.irs.credits.ctc.phase_out.arpa.in_effect: true
|
|
19
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.JOINT: 35_000
|
|
20
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.SINGLE: 25_000
|
|
21
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.HEAD_OF_HOUSEHOLD: 25_000
|
|
22
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.SURVIVING_SPOUSE: 25_000
|
|
23
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.SEPARATE: 25_000
|
|
24
|
+
gov.irs.credits.ctc.phase_out.threshold.JOINT: 200_000
|
|
25
|
+
gov.irs.credits.ctc.phase_out.threshold.SINGLE: 100_000
|
|
26
|
+
gov.irs.credits.ctc.phase_out.threshold.HEAD_OF_HOUSEHOLD: 100_000
|
|
27
|
+
gov.irs.credits.ctc.phase_out.threshold.SURVIVING_SPOUSE: 100_000
|
|
28
|
+
gov.irs.credits.ctc.phase_out.threshold.SEPARATE: 100_000
|
|
29
|
+
gov.irs.credits.ctc.phase_out.arpa.amount: 25
|
|
30
|
+
gov.irs.credits.ctc.phase_out.amount: 25
|
|
31
|
+
people:
|
|
32
|
+
person1:
|
|
33
|
+
age: 40
|
|
34
|
+
employment_income: 5_000
|
|
35
|
+
person2:
|
|
36
|
+
age: 10
|
|
37
|
+
person3:
|
|
38
|
+
age: 10
|
|
39
|
+
tax_units:
|
|
40
|
+
tax_unit:
|
|
41
|
+
members: [person1, person2, person3]
|
|
42
|
+
households:
|
|
43
|
+
household:
|
|
44
|
+
members: [person1, person2, person3]
|
|
45
|
+
state_code: TX
|
|
46
|
+
output:
|
|
47
|
+
ctc_arpa_phase_out: 0
|
|
48
|
+
ctc_arpa_max_addition: 5_200
|
|
49
|
+
refundable_ctc: 6_800
|
|
50
|
+
non_refundable_ctc: 0
|
|
51
|
+
|
|
52
|
+
- name: HoH filer with 2 kids, 20k earnings
|
|
53
|
+
period: 2025
|
|
54
|
+
reforms: [policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in,
|
|
55
|
+
policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount,
|
|
56
|
+
policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out]
|
|
57
|
+
input:
|
|
58
|
+
gov.contrib.ctc.per_child_phase_out.in_effect: true
|
|
59
|
+
gov.contrib.ctc.per_child_phase_in.in_effect: true
|
|
60
|
+
gov.contrib.ctc.minimum_refundable.in_effect: true
|
|
61
|
+
gov.contrib.ctc.minimum_refundable.amount[0].amount: 2_400
|
|
62
|
+
gov.contrib.ctc.minimum_refundable.amount[1].amount: 2_400
|
|
63
|
+
gov.irs.credits.ctc.refundable.individual_max: 4_800
|
|
64
|
+
gov.irs.credits.ctc.refundable.phase_in.threshold: 0
|
|
65
|
+
gov.irs.credits.ctc.refundable.phase_in.rate: 0.2
|
|
66
|
+
gov.irs.credits.ctc.amount.base[0].amount: 2_200
|
|
67
|
+
gov.irs.credits.ctc.amount.arpa[0].amount: 4_800
|
|
68
|
+
gov.irs.credits.ctc.amount.arpa[1].amount: 4_800
|
|
69
|
+
gov.irs.credits.ctc.phase_out.arpa.in_effect: true
|
|
70
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.JOINT: 35_000
|
|
71
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.SINGLE: 25_000
|
|
72
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.HEAD_OF_HOUSEHOLD: 25_000
|
|
73
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.SURVIVING_SPOUSE: 25_000
|
|
74
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.SEPARATE: 25_000
|
|
75
|
+
gov.irs.credits.ctc.phase_out.threshold.JOINT: 200_000
|
|
76
|
+
gov.irs.credits.ctc.phase_out.threshold.SINGLE: 100_000
|
|
77
|
+
gov.irs.credits.ctc.phase_out.threshold.HEAD_OF_HOUSEHOLD: 100_000
|
|
78
|
+
gov.irs.credits.ctc.phase_out.threshold.SURVIVING_SPOUSE: 100_000
|
|
79
|
+
gov.irs.credits.ctc.phase_out.threshold.SEPARATE: 100_000
|
|
80
|
+
gov.irs.credits.ctc.phase_out.arpa.amount: 25
|
|
81
|
+
gov.irs.credits.ctc.phase_out.amount: 25
|
|
82
|
+
people:
|
|
83
|
+
person1:
|
|
84
|
+
age: 40
|
|
85
|
+
employment_income: 20_000
|
|
86
|
+
person2:
|
|
87
|
+
age: 10
|
|
88
|
+
person3:
|
|
89
|
+
age: 10
|
|
90
|
+
tax_units:
|
|
91
|
+
tax_unit:
|
|
92
|
+
members: [person1, person2, person3]
|
|
93
|
+
households:
|
|
94
|
+
household:
|
|
95
|
+
members: [person1, person2, person3]
|
|
96
|
+
state_code: TX
|
|
97
|
+
output:
|
|
98
|
+
refundable_ctc: 9_600
|
|
99
|
+
non_refundable_ctc: 0
|
|
100
|
+
|
|
101
|
+
- name: HoH filer with 2 kids, 75k earnings
|
|
102
|
+
period: 2025
|
|
103
|
+
reforms: [policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in,
|
|
104
|
+
policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount,
|
|
105
|
+
policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out]
|
|
106
|
+
input:
|
|
107
|
+
gov.contrib.ctc.per_child_phase_out.in_effect: true
|
|
108
|
+
gov.contrib.ctc.per_child_phase_in.in_effect: true
|
|
109
|
+
gov.contrib.ctc.minimum_refundable.in_effect: true
|
|
110
|
+
gov.contrib.ctc.minimum_refundable.amount[0].amount: 2_400
|
|
111
|
+
gov.contrib.ctc.minimum_refundable.amount[1].amount: 2_400
|
|
112
|
+
gov.irs.credits.ctc.refundable.individual_max: 4_800
|
|
113
|
+
gov.irs.credits.ctc.refundable.phase_in.threshold: 0
|
|
114
|
+
gov.irs.credits.ctc.refundable.phase_in.rate: 0.2
|
|
115
|
+
gov.irs.credits.ctc.amount.base[0].amount: 2_200
|
|
116
|
+
gov.irs.credits.ctc.amount.arpa[0].amount: 4_800
|
|
117
|
+
gov.irs.credits.ctc.amount.arpa[1].amount: 4_800
|
|
118
|
+
gov.irs.credits.ctc.phase_out.arpa.in_effect: true
|
|
119
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.JOINT: 35_000
|
|
120
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.SINGLE: 25_000
|
|
121
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.HEAD_OF_HOUSEHOLD: 25_000
|
|
122
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.SURVIVING_SPOUSE: 25_000
|
|
123
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.SEPARATE: 25_000
|
|
124
|
+
gov.irs.credits.ctc.phase_out.threshold.JOINT: 200_000
|
|
125
|
+
gov.irs.credits.ctc.phase_out.threshold.SINGLE: 100_000
|
|
126
|
+
gov.irs.credits.ctc.phase_out.threshold.HEAD_OF_HOUSEHOLD: 100_000
|
|
127
|
+
gov.irs.credits.ctc.phase_out.threshold.SURVIVING_SPOUSE: 100_000
|
|
128
|
+
gov.irs.credits.ctc.phase_out.threshold.SEPARATE: 100_000
|
|
129
|
+
gov.irs.credits.ctc.phase_out.arpa.amount: 25
|
|
130
|
+
gov.irs.credits.ctc.phase_out.amount: 25
|
|
131
|
+
people:
|
|
132
|
+
person1:
|
|
133
|
+
age: 40
|
|
134
|
+
employment_income: 75_000
|
|
135
|
+
person2:
|
|
136
|
+
age: 10
|
|
137
|
+
person3:
|
|
138
|
+
age: 10
|
|
139
|
+
tax_units:
|
|
140
|
+
tax_unit:
|
|
141
|
+
members: [person1, person2, person3]
|
|
142
|
+
households:
|
|
143
|
+
household:
|
|
144
|
+
members: [person1, person2, person3]
|
|
145
|
+
state_code: TX
|
|
146
|
+
output:
|
|
147
|
+
ctc_phase_out: 0
|
|
148
|
+
ctc_arpa_max_addition: 5_200
|
|
149
|
+
ctc_arpa_phase_out: 2_500
|
|
150
|
+
refundable_ctc: 7_100
|
|
151
|
+
non_refundable_ctc: 0
|
|
152
|
+
|
|
153
|
+
- name: Joint filer with 3 kids, 5k income
|
|
154
|
+
period: 2025
|
|
155
|
+
reforms: [policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in,
|
|
156
|
+
policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount,
|
|
157
|
+
policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out]
|
|
158
|
+
input:
|
|
159
|
+
gov.contrib.ctc.per_child_phase_out.in_effect: true
|
|
160
|
+
gov.contrib.ctc.per_child_phase_in.in_effect: true
|
|
161
|
+
gov.contrib.ctc.minimum_refundable.in_effect: true
|
|
162
|
+
gov.contrib.ctc.minimum_refundable.amount[0].amount: 2_400
|
|
163
|
+
gov.contrib.ctc.minimum_refundable.amount[1].amount: 2_400
|
|
164
|
+
gov.irs.credits.ctc.refundable.individual_max: 4_800
|
|
165
|
+
gov.irs.credits.ctc.refundable.phase_in.threshold: 0
|
|
166
|
+
gov.irs.credits.ctc.refundable.phase_in.rate: 0.2
|
|
167
|
+
gov.irs.credits.ctc.amount.base[0].amount: 2_200
|
|
168
|
+
gov.irs.credits.ctc.amount.arpa[0].amount: 4_800
|
|
169
|
+
gov.irs.credits.ctc.amount.arpa[1].amount: 4_800
|
|
170
|
+
gov.irs.credits.ctc.phase_out.arpa.in_effect: true
|
|
171
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.JOINT: 35_000
|
|
172
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.SINGLE: 25_000
|
|
173
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.HEAD_OF_HOUSEHOLD: 25_000
|
|
174
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.SURVIVING_SPOUSE: 25_000
|
|
175
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.SEPARATE: 25_000
|
|
176
|
+
gov.irs.credits.ctc.phase_out.threshold.JOINT: 200_000
|
|
177
|
+
gov.irs.credits.ctc.phase_out.threshold.SINGLE: 100_000
|
|
178
|
+
gov.irs.credits.ctc.phase_out.threshold.HEAD_OF_HOUSEHOLD: 100_000
|
|
179
|
+
gov.irs.credits.ctc.phase_out.threshold.SURVIVING_SPOUSE: 100_000
|
|
180
|
+
gov.irs.credits.ctc.phase_out.threshold.SEPARATE: 100_000
|
|
181
|
+
gov.irs.credits.ctc.phase_out.arpa.amount: 25
|
|
182
|
+
gov.irs.credits.ctc.phase_out.amount: 25
|
|
183
|
+
people:
|
|
184
|
+
person1:
|
|
185
|
+
age: 40
|
|
186
|
+
employment_income: 5_000
|
|
187
|
+
person2:
|
|
188
|
+
age: 40
|
|
189
|
+
person3:
|
|
190
|
+
age: 10
|
|
191
|
+
person4:
|
|
192
|
+
age: 10
|
|
193
|
+
person5:
|
|
194
|
+
age: 10
|
|
195
|
+
tax_units:
|
|
196
|
+
tax_unit:
|
|
197
|
+
members: [person1, person2, person3, person4, person5]
|
|
198
|
+
households:
|
|
199
|
+
household:
|
|
200
|
+
members: [person1, person2, person3, person4, person5]
|
|
201
|
+
state_code: TX
|
|
202
|
+
output:
|
|
203
|
+
refundable_ctc: 10_200
|
|
204
|
+
non_refundable_ctc: 0
|
|
205
|
+
|
|
206
|
+
- name: Joint filer with 3 kids, 75k income
|
|
207
|
+
period: 2025
|
|
208
|
+
reforms: [policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in,
|
|
209
|
+
policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount,
|
|
210
|
+
policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out]
|
|
211
|
+
input:
|
|
212
|
+
gov.contrib.ctc.per_child_phase_out.in_effect: true
|
|
213
|
+
gov.contrib.ctc.per_child_phase_in.in_effect: true
|
|
214
|
+
gov.contrib.ctc.minimum_refundable.in_effect: true
|
|
215
|
+
gov.contrib.ctc.minimum_refundable.amount[0].amount: 2_400
|
|
216
|
+
gov.contrib.ctc.minimum_refundable.amount[1].amount: 2_400
|
|
217
|
+
gov.irs.credits.ctc.refundable.individual_max: 4_800
|
|
218
|
+
gov.irs.credits.ctc.refundable.phase_in.threshold: 0
|
|
219
|
+
gov.irs.credits.ctc.refundable.phase_in.rate: 0.2
|
|
220
|
+
gov.irs.credits.ctc.amount.base[0].amount: 2_200
|
|
221
|
+
gov.irs.credits.ctc.amount.arpa[0].amount: 4_800
|
|
222
|
+
gov.irs.credits.ctc.amount.arpa[1].amount: 4_800
|
|
223
|
+
gov.irs.credits.ctc.phase_out.arpa.in_effect: true
|
|
224
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.JOINT: 35_000
|
|
225
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.SINGLE: 25_000
|
|
226
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.HEAD_OF_HOUSEHOLD: 25_000
|
|
227
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.SURVIVING_SPOUSE: 25_000
|
|
228
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.SEPARATE: 25_000
|
|
229
|
+
gov.irs.credits.ctc.phase_out.threshold.JOINT: 200_000
|
|
230
|
+
gov.irs.credits.ctc.phase_out.threshold.SINGLE: 100_000
|
|
231
|
+
gov.irs.credits.ctc.phase_out.threshold.HEAD_OF_HOUSEHOLD: 100_000
|
|
232
|
+
gov.irs.credits.ctc.phase_out.threshold.SURVIVING_SPOUSE: 100_000
|
|
233
|
+
gov.irs.credits.ctc.phase_out.threshold.SEPARATE: 100_000
|
|
234
|
+
gov.irs.credits.ctc.phase_out.arpa.amount: 25
|
|
235
|
+
gov.irs.credits.ctc.phase_out.amount: 25
|
|
236
|
+
people:
|
|
237
|
+
person1:
|
|
238
|
+
age: 40
|
|
239
|
+
employment_income: 75_000
|
|
240
|
+
person2:
|
|
241
|
+
age: 40
|
|
242
|
+
person3:
|
|
243
|
+
age: 10
|
|
244
|
+
person4:
|
|
245
|
+
age: 10
|
|
246
|
+
person5:
|
|
247
|
+
age: 10
|
|
248
|
+
tax_units:
|
|
249
|
+
tax_unit:
|
|
250
|
+
members: [person1, person2, person3, person4, person5]
|
|
251
|
+
households:
|
|
252
|
+
household:
|
|
253
|
+
members: [person1, person2, person3, person4, person5]
|
|
254
|
+
state_code: TX
|
|
255
|
+
output:
|
|
256
|
+
refundable_ctc: 11_400
|
|
257
|
+
non_refundable_ctc: 0
|
|
258
|
+
|
|
259
|
+
- name: Joint filer with 3 kids, 250k income
|
|
260
|
+
period: 2025
|
|
261
|
+
reforms: [policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in,
|
|
262
|
+
policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount,
|
|
263
|
+
policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out]
|
|
264
|
+
input:
|
|
265
|
+
gov.contrib.ctc.per_child_phase_out.in_effect: true
|
|
266
|
+
gov.contrib.ctc.per_child_phase_in.in_effect: true
|
|
267
|
+
gov.contrib.ctc.minimum_refundable.in_effect: true
|
|
268
|
+
gov.contrib.ctc.minimum_refundable.amount[0].amount: 2_400
|
|
269
|
+
gov.contrib.ctc.minimum_refundable.amount[1].amount: 2_400
|
|
270
|
+
gov.irs.credits.ctc.refundable.individual_max: 4_800
|
|
271
|
+
gov.irs.credits.ctc.refundable.phase_in.threshold: 0
|
|
272
|
+
gov.irs.credits.ctc.refundable.phase_in.rate: 0.2
|
|
273
|
+
gov.irs.credits.ctc.amount.base[0].amount: 2_200
|
|
274
|
+
gov.irs.credits.ctc.amount.arpa[0].amount: 4_800
|
|
275
|
+
gov.irs.credits.ctc.amount.arpa[1].amount: 4_800
|
|
276
|
+
gov.irs.credits.ctc.phase_out.arpa.in_effect: true
|
|
277
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.JOINT: 35_000
|
|
278
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.SINGLE: 25_000
|
|
279
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.HEAD_OF_HOUSEHOLD: 25_000
|
|
280
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.SURVIVING_SPOUSE: 25_000
|
|
281
|
+
gov.irs.credits.ctc.phase_out.arpa.threshold.SEPARATE: 25_000
|
|
282
|
+
gov.irs.credits.ctc.phase_out.threshold.JOINT: 200_000
|
|
283
|
+
gov.irs.credits.ctc.phase_out.threshold.SINGLE: 100_000
|
|
284
|
+
gov.irs.credits.ctc.phase_out.threshold.HEAD_OF_HOUSEHOLD: 100_000
|
|
285
|
+
gov.irs.credits.ctc.phase_out.threshold.SURVIVING_SPOUSE: 100_000
|
|
286
|
+
gov.irs.credits.ctc.phase_out.threshold.SEPARATE: 100_000
|
|
287
|
+
gov.irs.credits.ctc.phase_out.arpa.amount: 25
|
|
288
|
+
gov.irs.credits.ctc.phase_out.amount: 25
|
|
289
|
+
people:
|
|
290
|
+
person1:
|
|
291
|
+
age: 40
|
|
292
|
+
employment_income: 250_000
|
|
293
|
+
person2:
|
|
294
|
+
age: 40
|
|
295
|
+
person3:
|
|
296
|
+
age: 10
|
|
297
|
+
person4:
|
|
298
|
+
age: 10
|
|
299
|
+
person5:
|
|
300
|
+
age: 10
|
|
301
|
+
tax_units:
|
|
302
|
+
tax_unit:
|
|
303
|
+
members: [person1, person2, person3, person4, person5]
|
|
304
|
+
households:
|
|
305
|
+
household:
|
|
306
|
+
members: [person1, person2, person3, person4, person5]
|
|
307
|
+
state_code: TX
|
|
308
|
+
output:
|
|
309
|
+
refundable_ctc: 2_850
|
|
310
|
+
non_refundable_ctc: 0
|
|
@@ -193,7 +193,7 @@ 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=
|
|
196
|
+
policyengine_us/parameters/gov/contrib/ctc/minimum_refundable/amount.yaml,sha256=N-CdleZoKvaiccSvOuJxXUpAIaqQ-_L7AzJZJiwDNzs,401
|
|
197
197
|
policyengine_us/parameters/gov/contrib/ctc/minimum_refundable/in_effect.yaml,sha256=po9YS0kG2KWs3UUYQ-WV9XRZguIoYmSIHnmNYKpyAR8,190
|
|
198
198
|
policyengine_us/parameters/gov/contrib/ctc/oldest_child_supplement/amount.yaml,sha256=-AtkjP9B6crQ614NPcKC1pENjFG2VAp7sapWA2wj9Fk,213
|
|
199
199
|
policyengine_us/parameters/gov/contrib/ctc/oldest_child_supplement/in_effect.yaml,sha256=pEG7lrB40aoTw8sASIk_FBjdyH8GR0Dke6KsnPZWaFI,228
|
|
@@ -2464,11 +2464,11 @@ policyengine_us/parameters/gov/states/nm/tax/income/exemptions/social_security_i
|
|
|
2464
2464
|
policyengine_us/parameters/gov/states/nm/tax/income/exemptions/unreimbursed_medical_care_expense/age_eligibility.yaml,sha256=PpOJ0QBv28M0Ynu2Rf0V4E_yca9rsPuAOQ2MILMVDHY,1576
|
|
2465
2465
|
policyengine_us/parameters/gov/states/nm/tax/income/exemptions/unreimbursed_medical_care_expense/amount.yaml,sha256=AqrETSw49QP2Ye_Ymnrg4T3LL02uTQVKL6UgusZjHZ4,1551
|
|
2466
2466
|
policyengine_us/parameters/gov/states/nm/tax/income/exemptions/unreimbursed_medical_care_expense/min_expenses.yaml,sha256=najLyigognCJ6p0vAvTTeho0PFDC-8tzhFxBPBJyo_o,1593
|
|
2467
|
-
policyengine_us/parameters/gov/states/nm/tax/income/main/head_of_household.yaml,sha256=
|
|
2468
|
-
policyengine_us/parameters/gov/states/nm/tax/income/main/joint.yaml,sha256=
|
|
2469
|
-
policyengine_us/parameters/gov/states/nm/tax/income/main/separate.yaml,sha256=
|
|
2470
|
-
policyengine_us/parameters/gov/states/nm/tax/income/main/single.yaml,sha256=
|
|
2471
|
-
policyengine_us/parameters/gov/states/nm/tax/income/main/surviving_spouse.yaml,sha256=
|
|
2467
|
+
policyengine_us/parameters/gov/states/nm/tax/income/main/head_of_household.yaml,sha256=l7BvMf9Yv2HJNLHvYAAqPJQwVNLIz2HwN4g65jY1zTk,2139
|
|
2468
|
+
policyengine_us/parameters/gov/states/nm/tax/income/main/joint.yaml,sha256=PL-3CvVvUZknbV5AOQVfkwF2jUAF9-E4o2pF4uCqUmg,2119
|
|
2469
|
+
policyengine_us/parameters/gov/states/nm/tax/income/main/separate.yaml,sha256=qeUJzG383T-tv_-LKEYh1kIo5hdDk9cC4EwCLaLSgFk,2136
|
|
2470
|
+
policyengine_us/parameters/gov/states/nm/tax/income/main/single.yaml,sha256=mUj5aHkhEpagxgdjugzAZqkvfzR_LRyQSF49jz7Alm0,2116
|
|
2471
|
+
policyengine_us/parameters/gov/states/nm/tax/income/main/surviving_spouse.yaml,sha256=lV5gzcCR-LiquE5wa9AfOquUTX7QHvaUXwKbB6z0QUE,2137
|
|
2472
2472
|
policyengine_us/parameters/gov/states/nm/tax/income/rebates/2021_income/additional/amount.yaml,sha256=5d2xt9aiXh28l33pKEb4lLD2Z0gpvuaGAYF50u3smYk,1133
|
|
2473
2473
|
policyengine_us/parameters/gov/states/nm/tax/income/rebates/2021_income/main/amount.yaml,sha256=7z4l61B1k8FhXew8ZCQgFztBjobFFjnDe1WNxlpftpo,1097
|
|
2474
2474
|
policyengine_us/parameters/gov/states/nm/tax/income/rebates/2021_income/main/income_limit.yaml,sha256=BoeIOqATrkPDDcfR0akJDKlWVaCFED5jsedbjQbpsyM,1141
|
|
@@ -3175,10 +3175,10 @@ policyengine_us/reforms/crfb/tax_employer_payroll_tax.py,sha256=-V6vv51aYb0NRuB4
|
|
|
3175
3175
|
policyengine_us/reforms/crfb/tax_employer_social_security_tax.py,sha256=hawAdLtwCnY3_7jUVPTM0KpeYRfT7tVk0xqCMhdxP4E,4292
|
|
3176
3176
|
policyengine_us/reforms/ctc/__init__.py,sha256=mXLIEHPIXHe5PyI96pTmP9b3y1jwwTcMoRNOIx808Y4,434
|
|
3177
3177
|
policyengine_us/reforms/ctc/ctc_additional_bracket.py,sha256=KNmEB_OLwpLbvaPo4w0n18VnAmg0u3efirfVVCOrWj4,2391
|
|
3178
|
-
policyengine_us/reforms/ctc/ctc_minimum_refundable_amount.py,sha256=
|
|
3178
|
+
policyengine_us/reforms/ctc/ctc_minimum_refundable_amount.py,sha256=Enge7PcmzrG8UhJWi1Y-b7s5PkJfK0Yt5a-Xmp3KYb4,4862
|
|
3179
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=
|
|
3181
|
-
policyengine_us/reforms/ctc/ctc_per_child_phase_out.py,sha256=
|
|
3180
|
+
policyengine_us/reforms/ctc/ctc_per_child_phase_in.py,sha256=9URwoFEFvP7W-N_rmEG9_N1LTUEEvOS_jX7z8qT6PAQ,1765
|
|
3181
|
+
policyengine_us/reforms/ctc/ctc_per_child_phase_out.py,sha256=6Z55YKtB5K_Wl21O_6HpohPEp4nJ0PUCAtkt_T2nYY8,3363
|
|
3182
3182
|
policyengine_us/reforms/deductions/salt/__init__.py,sha256=wbfISQikAqCdy0MnLC-oZKmieRksm64MKHnNFbW3Ldw,114
|
|
3183
3183
|
policyengine_us/reforms/deductions/salt/limit_salt_deduction_to_property_taxes.py,sha256=F3KrYmOeR0JdkSxj7iClIdkagpHDcUpGnYLFCIjd7hw,1372
|
|
3184
3184
|
policyengine_us/reforms/eitc/__init__.py,sha256=bHbMSYp45mGa_JeBgHxDeyBh2_cGoc74SGKZ_8NKCCc,100
|
|
@@ -4702,7 +4702,7 @@ policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/taxable_income/nj
|
|
|
4702
4702
|
policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/taxable_income/nj_taxable_income.yaml,sha256=PPTJnuVyDScbFiZha_P5MSRQ4lH05lCYVL32uA1KmZw,507
|
|
4703
4703
|
policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/taxable_income/nj_taxable_income_before_property_tax_deduction.yaml,sha256=_jTVDGYXHiYkqw_ASGrP7rrB8htm9hVM_d7HOEo0gb0,519
|
|
4704
4704
|
policyengine_us/tests/policy/baseline/gov/states/nm/tax/income/integration.yaml,sha256=nmRIBz5dSEZdiCsamXdX1Z1Ei4uRJ1ZQ2lge2O95gs0,3533
|
|
4705
|
-
policyengine_us/tests/policy/baseline/gov/states/nm/tax/income/nm_income_tax_before_non_refundable_credits.yaml,sha256=
|
|
4705
|
+
policyengine_us/tests/policy/baseline/gov/states/nm/tax/income/nm_income_tax_before_non_refundable_credits.yaml,sha256=W71TLxtrLrLxo025NP8lAWSGvAT5dgmpCMFjGfYUZ1w,1324
|
|
4706
4706
|
policyengine_us/tests/policy/baseline/gov/states/nm/tax/income/nm_income_tax_before_refundable_credits.yaml,sha256=niD-6BSDTzLSV2ixmE51jDSCEzyJfAMZNQwArIHQZHI,425
|
|
4707
4707
|
policyengine_us/tests/policy/baseline/gov/states/nm/tax/income/nm_taxable_income.yaml,sha256=oXh84TKSMBVcWcSnSAz_mC3UUw89Q5KOpYdkdUI_51k,780
|
|
4708
4708
|
policyengine_us/tests/policy/baseline/gov/states/nm/tax/income/nm_withheld_income_tax.yaml,sha256=TzYs9UkH_om_FpIa1agLVk-CgPmrkSaX0B4a1GG1jmA,716
|
|
@@ -5265,10 +5265,11 @@ policyengine_us/tests/policy/contrib/crfb/tax_employer_medicare_tax.yaml,sha256=
|
|
|
5265
5265
|
policyengine_us/tests/policy/contrib/crfb/tax_employer_payroll_tax_percentage.yaml,sha256=N3l6vYyluEGIbd2HfSQFuAYPzg0r4CC0JZujm3-joO8,5510
|
|
5266
5266
|
policyengine_us/tests/policy/contrib/crfb/tax_employer_social_security_tax.yaml,sha256=0boINedj32lA-V2VLztNBoylnOlzRinlwtcg3JIij0g,474
|
|
5267
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=
|
|
5268
|
+
policyengine_us/tests/policy/contrib/ctc/ctc_minimum_refundable_amount.yaml,sha256=Q5WTmiU2PusZvwo1zfMmRAMwOSGtgYMR0jqrMZcZe84,7255
|
|
5269
5269
|
policyengine_us/tests/policy/contrib/ctc/ctc_older_child_supplement.yaml,sha256=7P67DlafOtTxAcpH2ossYPDInWyz6DJayNf_0Ed7rcQ,2059
|
|
5270
5270
|
policyengine_us/tests/policy/contrib/ctc/ctc_per_child_phase_in.yaml,sha256=uCAlu5Gj4iww2hCWbsqFst7zcT6UvM9_D9cKQyRc5QE,4754
|
|
5271
5271
|
policyengine_us/tests/policy/contrib/ctc/ctc_per_child_phase_out.yaml,sha256=H5k9TyIge7VeZRGxIXVTOQPV5SpqAuX509iV-SXLBI4,3829
|
|
5272
|
+
policyengine_us/tests/policy/contrib/ctc/integration.yaml,sha256=AXSMGiunYvGYxnz8DWAF90w_2dytjOReofBOD51a7_g,13300
|
|
5272
5273
|
policyengine_us/tests/policy/contrib/deductions/salt/limit_salt_deduction_to_property_taxes.yaml,sha256=hm9EmieOGGkIMfWgcNeKegLgAz9QQiGAeZKTlmxpJgU,1453
|
|
5273
5274
|
policyengine_us/tests/policy/contrib/eitc/halve_joint_eitc_phase_out_rate.yaml,sha256=PxlvKGjORZl3BldCdXJMCxTuQ4mcdwPXYWsuSSB9fqw,1605
|
|
5274
5275
|
policyengine_us/tests/policy/contrib/federal/abolish_federal_income_tax.yaml,sha256=mz696NDcL4oiTfj4jCg-PLKDE5p3-nsdAaIUglkz9rs,1600
|
|
@@ -8480,8 +8481,8 @@ policyengine_us/variables/input/farm_income.py,sha256=BEKxYmHNNnWJAAvULl5qZJigy5
|
|
|
8480
8481
|
policyengine_us/variables/input/geography.py,sha256=Ux0ueAf0rhZaflyEqz81UuXP3xKCKBDvoO3CrKhiQEc,5421
|
|
8481
8482
|
policyengine_us/variables/input/self_employment_income.py,sha256=PwsGz8R4lRikKWUYOhsC0qosNNLXq4f5SQmfw4S3mk8,511
|
|
8482
8483
|
policyengine_us/variables/input/self_employment_income_before_lsr.py,sha256=E8fcX9Nlyqz8dziHhQv_euutdmoIwFMMWePUwbbwv_w,379
|
|
8483
|
-
policyengine_us-1.
|
|
8484
|
-
policyengine_us-1.
|
|
8485
|
-
policyengine_us-1.
|
|
8486
|
-
policyengine_us-1.
|
|
8487
|
-
policyengine_us-1.
|
|
8484
|
+
policyengine_us-1.408.0.dist-info/METADATA,sha256=E9KXk0R9VfaKX-BGp1clOVzGbLOgbpwXTKG7lEIOG4A,1649
|
|
8485
|
+
policyengine_us-1.408.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
8486
|
+
policyengine_us-1.408.0.dist-info/entry_points.txt,sha256=MLaqNyNTbReALyKNkde85VkuFFpdPWAcy8VRG1mjczc,57
|
|
8487
|
+
policyengine_us-1.408.0.dist-info/licenses/LICENSE,sha256=2N5ReRelkdqkR9a-KP-y-shmcD5P62XoYiG-miLTAzo,34519
|
|
8488
|
+
policyengine_us-1.408.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|