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.

Files changed (102) hide show
  1. policyengine_us/parameters/gov/contrib/states/ri/ctc/age_limit.yaml +9 -0
  2. policyengine_us/parameters/gov/contrib/states/ri/ctc/amount.yaml +9 -0
  3. policyengine_us/parameters/gov/contrib/states/ri/ctc/in_effect.yaml +9 -0
  4. policyengine_us/parameters/gov/contrib/states/ri/ctc/phaseout/rate.yaml +9 -0
  5. policyengine_us/parameters/gov/contrib/states/ri/ctc/phaseout/threshold.yaml +23 -0
  6. policyengine_us/parameters/gov/contrib/states/ri/ctc/refundability/cap.yaml +9 -0
  7. policyengine_us/parameters/gov/contrib/states/ri/dependent_exemption/age_limit/in_effect.yaml +9 -0
  8. policyengine_us/parameters/gov/contrib/states/ri/dependent_exemption/age_limit/threshold.yaml +9 -0
  9. policyengine_us/parameters/gov/contrib/states/ri/dependent_exemption/amount.yaml +15 -0
  10. policyengine_us/parameters/gov/contrib/states/ri/dependent_exemption/in_effect.yaml +9 -0
  11. policyengine_us/parameters/gov/contrib/states/ri/dependent_exemption/phaseout/rate.yaml +9 -0
  12. policyengine_us/parameters/gov/contrib/states/ri/dependent_exemption/phaseout/threshold.yaml +23 -0
  13. policyengine_us/parameters/gov/states/ca/tax/income/agi/subtractions.yaml +1 -0
  14. policyengine_us/parameters/gov/states/co/tax/income/credits/refundable.yaml +1 -0
  15. policyengine_us/parameters/gov/states/co/tax/income/credits/sales_tax_refund/amount/scale.yaml +1 -1
  16. policyengine_us/parameters/gov/states/co/tax/income/credits/tabor/joint.yaml +12 -0
  17. policyengine_us/parameters/gov/states/co/tax/income/credits/tabor/single.yaml +12 -0
  18. policyengine_us/parameters/gov/states/de/tax/income/credits/refundable.yaml +2 -2
  19. policyengine_us/parameters/gov/states/de/tax/income/credits/relief_rebate/amount.yaml +1 -1
  20. policyengine_us/parameters/gov/states/ga/tax/income/credits/non_refundable.yaml +1 -4
  21. policyengine_us/parameters/gov/states/ga/tax/income/credits/surplus_tax_rebate/amount.yaml +5 -5
  22. policyengine_us/parameters/gov/states/hi/tax/income/credits/act_115_rebate/joint.yaml +20 -0
  23. policyengine_us/parameters/gov/states/hi/tax/income/credits/act_115_rebate/single.yaml +20 -0
  24. policyengine_us/parameters/gov/states/hi/tax/income/credits/refundable.yaml +6 -0
  25. policyengine_us/parameters/gov/states/id/tax/income/credits/2022_rebate/floor.yaml +1 -1
  26. policyengine_us/parameters/gov/states/id/tax/income/credits/2022_rebate/rate.yaml +1 -1
  27. policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml +4 -4
  28. policyengine_us/parameters/gov/states/id/tax/income/credits/special_seasonal_rebate/floor.yaml +5 -5
  29. policyengine_us/parameters/gov/states/id/tax/income/credits/special_seasonal_rebate/rate.yaml +1 -1
  30. policyengine_us/parameters/gov/states/il/tax/income/credits/income_tax_rebate/amount/dependent.yaml +10 -0
  31. policyengine_us/parameters/gov/states/il/tax/income/credits/income_tax_rebate/amount/joint.yaml +20 -0
  32. policyengine_us/parameters/gov/states/il/tax/income/credits/income_tax_rebate/amount/other.yaml +20 -0
  33. policyengine_us/parameters/gov/states/il/tax/income/credits/income_tax_rebate/max_dependents.yaml +10 -0
  34. policyengine_us/parameters/gov/states/il/tax/income/credits/refundable.yaml +5 -0
  35. policyengine_us/parameters/gov/states/in/tax/income/credits/automatic_refund_rebate/amount/additional.yaml +10 -0
  36. policyengine_us/parameters/gov/states/in/tax/income/credits/automatic_refund_rebate/amount/base.yaml +12 -0
  37. policyengine_us/parameters/gov/states/in/tax/income/credits/refundable.yaml +6 -1
  38. policyengine_us/parameters/gov/states/ma/tax/income/credits/refundable.yaml +12 -0
  39. policyengine_us/parameters/gov/states/ma/tax/income/credits/taxpayer_refund_rebate/rate.yaml +10 -0
  40. policyengine_us/parameters/gov/states/me/tax/income/credits/refundable.yaml +6 -0
  41. policyengine_us/parameters/gov/states/me/tax/income/credits/relief_rebate/amount.yaml +10 -0
  42. policyengine_us/parameters/gov/states/me/tax/income/credits/relief_rebate/income_limit.yaml +21 -0
  43. policyengine_us/parameters/gov/states/mn/tax/income/credits/cwfc/ctc/age_limit.yaml +14 -0
  44. policyengine_us/parameters/gov/states/mt/tax/income/credits/non_refundable.yaml +1 -4
  45. policyengine_us/parameters/gov/states/mt/tax/income/credits/rebate/amount.yaml +5 -5
  46. policyengine_us/parameters/gov/states/ri/tax/income/credits/child_tax_rebate/amount.yaml +1 -1
  47. policyengine_us/parameters/gov/states/ri/tax/income/credits/child_tax_rebate/limit/age.yaml +1 -1
  48. policyengine_us/parameters/gov/states/ri/tax/income/credits/child_tax_rebate/limit/child.yaml +1 -1
  49. policyengine_us/parameters/gov/states/ri/tax/income/credits/child_tax_rebate/limit/income.yaml +5 -5
  50. policyengine_us/parameters/gov/states/ri/tax/income/credits/refundable.yaml +1 -4
  51. policyengine_us/parameters/gov/states/sc/tax/income/credits/2022_rebate/amount.yaml +12 -0
  52. policyengine_us/parameters/gov/states/sc/tax/income/credits/non_refundable.yaml +7 -1
  53. policyengine_us/parameters/gov/states/va/tax/income/credits/non_refundable.yaml +6 -2
  54. policyengine_us/parameters/gov/states/va/tax/income/rebate/amount.yaml +10 -0
  55. policyengine_us/reforms/reforms.py +8 -0
  56. policyengine_us/reforms/states/ri/__init__.py +2 -0
  57. policyengine_us/reforms/states/ri/ctc/__init__.py +1 -0
  58. policyengine_us/reforms/states/ri/ctc/ri_ctc_reform.py +176 -0
  59. policyengine_us/reforms/states/ri/exemption/__init__.py +1 -0
  60. policyengine_us/reforms/states/ri/exemption/ri_exemption_reform.py +137 -0
  61. policyengine_us/tests/policy/baseline/gov/irs/integration/us_itemize.yaml +1 -1
  62. policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/integration.yaml +50 -0
  63. policyengine_us/tests/policy/baseline/gov/states/co/tax/income/credits/co_tabor_cash_back.yaml +71 -0
  64. policyengine_us/tests/policy/baseline/gov/states/co/tax/income/integration.yaml +38 -0
  65. policyengine_us/tests/policy/baseline/gov/states/hi/tax/income/credits/hi_act_115_rebate.yaml +35 -0
  66. policyengine_us/tests/policy/baseline/gov/states/hi/tax/income/integration.yaml +63 -0
  67. policyengine_us/tests/policy/baseline/gov/states/il/tax/income/credits/il_income_tax_rebate.yaml +49 -0
  68. policyengine_us/tests/policy/baseline/gov/states/il/tax/income/credits/il_income_tax_rebate_eligible.yaml +35 -0
  69. policyengine_us/tests/policy/baseline/gov/states/in/tax/income/credits/in_automatic_refund_rebate.yaml +47 -0
  70. policyengine_us/tests/policy/baseline/gov/states/ma/tax/income/credits/ma_taxpayer_refund_rebate.yaml +42 -0
  71. policyengine_us/tests/policy/baseline/gov/states/ma/tax/income/integration_ma.yaml +6 -0
  72. policyengine_us/tests/policy/baseline/gov/states/me/tax/income/credits/me_relief_rebate.yaml +26 -0
  73. policyengine_us/tests/policy/baseline/gov/states/me/tax/income/credits/me_relief_rebate_eligible.yaml +35 -0
  74. policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/credits/mn_child_and_working_families_credits_ctc_eligible_child.yaml +26 -0
  75. policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/mn_integration.yaml +55 -0
  76. policyengine_us/tests/policy/baseline/gov/states/mt/tax/income/integration.yaml +3 -0
  77. policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/integration.yaml +47 -0
  78. policyengine_us/tests/policy/baseline/gov/states/sc/tax/income/credits/sc_2022_rebate.yaml +76 -0
  79. policyengine_us/tests/policy/baseline/gov/states/va/tax/income/integration.yaml +2 -0
  80. policyengine_us/tests/policy/baseline/gov/states/wi/tax/income/integration.yaml +48 -0
  81. policyengine_us/tests/policy/contrib/states/ri/ctc_reform_test.yaml +177 -0
  82. policyengine_us/tests/policy/contrib/states/ri/exemption_reform_test.yaml +88 -0
  83. policyengine_us/variables/gov/states/co/tax/income/credits/co_tabor_cash_back.py +17 -0
  84. policyengine_us/variables/gov/states/hi/tax/income/credits/hi_act_115_rebate.py +32 -0
  85. policyengine_us/variables/gov/states/il/tax/income/credits/il_income_tax_rebate.py +27 -0
  86. policyengine_us/variables/gov/states/il/tax/income/credits/il_income_tax_rebate_eligible.py +24 -0
  87. policyengine_us/variables/gov/states/in/tax/income/credits/in_automatic_refund_rebate.py +26 -0
  88. policyengine_us/variables/gov/states/ma/tax/income/credits/ma_taxpayer_refund_rebate.py +29 -0
  89. policyengine_us/variables/gov/states/me/tax/income/credits/me_relief_rebate.py +16 -0
  90. policyengine_us/variables/gov/states/me/tax/income/credits/me_relief_rebate_eligible.py +17 -0
  91. policyengine_us/variables/gov/states/mn/tax/income/credits/mn_child_and_working_families_credits.py +5 -1
  92. policyengine_us/variables/gov/states/mn/tax/income/credits/mn_child_and_working_families_credits_ctc_eligible_child.py +24 -0
  93. policyengine_us/variables/gov/states/mt/tax/income/credits/rebate/mt_income_tax_rebate.py +1 -2
  94. policyengine_us/variables/gov/states/sc/tax/income/credits/sc_2022_rebate.py +29 -0
  95. policyengine_us/variables/gov/states/wi/tax/income/credits/married_couple/wi_married_couple_credit.py +7 -5
  96. {policyengine_us-1.423.0.dist-info → policyengine_us-1.424.2.dist-info}/METADATA +1 -1
  97. {policyengine_us-1.423.0.dist-info → policyengine_us-1.424.2.dist-info}/RECORD +100 -47
  98. policyengine_us/tests/policy/baseline/gov/states/hi/tax/income/credits/hi_low_income_household_renters/integration.yaml +0 -61
  99. policyengine_us/tests/policy/baseline/gov/states/ri/tax/income/agi/subtractions/taxable_retirement_income/integration.yaml +0 -45
  100. {policyengine_us-1.423.0.dist-info → policyengine_us-1.424.2.dist-info}/WHEEL +0 -0
  101. {policyengine_us-1.423.0.dist-info → policyengine_us-1.424.2.dist-info}/entry_points.txt +0 -0
  102. {policyengine_us-1.423.0.dist-info → policyengine_us-1.424.2.dist-info}/licenses/LICENSE +0 -0
@@ -11,4 +11,4 @@ metadata:
11
11
  href: http://webserver.rilin.state.ri.us/Statutes/TITLE44/44-30/44-VI/44-30-103.htm
12
12
 
13
13
  values:
14
- 2022-01-01: 18
14
+ 2021-01-01: 18
@@ -13,4 +13,4 @@ metadata:
13
13
  href: http://webserver.rilin.state.ri.us/Statutes/TITLE44/44-30/44-VI/44-30-103.htm
14
14
 
15
15
  values:
16
- 2022-01-01: 3
16
+ 2021-01-01: 3
@@ -13,12 +13,12 @@ metadata:
13
13
  href: http://webserver.rilin.state.ri.us/Statutes/TITLE44/44-30/44-VI/44-30-103.htm
14
14
 
15
15
  SINGLE:
16
- 2022-01-01: 100_000
16
+ 2021-01-01: 100_000
17
17
  JOINT:
18
- 2022-01-01: 200_000
18
+ 2021-01-01: 200_000
19
19
  SEPARATE:
20
- 2022-01-01: 100_000
20
+ 2021-01-01: 100_000
21
21
  HEAD_OF_HOUSEHOLD:
22
- 2022-01-01: 100_000
22
+ 2021-01-01: 100_000
23
23
  SURVIVING_SPOUSE:
24
- 2022-01-01: 100_000
24
+ 2021-01-01: 100_000
@@ -3,11 +3,8 @@ values:
3
3
  2021-01-01:
4
4
  - ri_eitc
5
5
  - ri_property_tax_credit
6
- 2022-01-01:
7
- - ri_eitc
8
- - ri_property_tax_credit
9
6
  - ri_child_tax_rebate
10
- 2023-01-01:
7
+ 2022-01-01:
11
8
  - ri_eitc
12
9
  - ri_property_tax_credit
13
10
 
@@ -0,0 +1,12 @@
1
+ description: South Carolina provides a 2022 rebate of this amount.
2
+ values:
3
+ 2021-01-01: 800
4
+ metadata:
5
+ unit: currency-USD
6
+ period: year
7
+ label: South Carolina 2022 rebate amount
8
+ reference:
9
+ - title: South Carolina General Assembly, S1087, Section 6, (B)
10
+ # The house bill initially appropriated a $700 rebate which was increased to $800 due to sufficient funds
11
+ # https://dor.sc.gov/rebate-2022
12
+ href: https://www.scstatehouse.gov/sess124_2021-2022/bills/1087.htm
@@ -1,11 +1,17 @@
1
- description: South Carolina non-refundable tax credits.
1
+ description: South Carolina provides the following non-refundable tax credits.
2
2
  values:
3
3
  2021-01-01:
4
4
  - sc_cdcc
5
5
  - sc_eitc
6
6
  - sc_two_wage_earner_credit
7
+ - sc_2022_rebate
8
+ 2022-01-01:
9
+ - sc_cdcc
10
+ - sc_eitc
11
+ - sc_two_wage_earner_credit
7
12
  metadata:
8
13
  unit: list
14
+ period: year
9
15
  label: South Carolina non-refundable tax credits
10
16
  reference:
11
17
  - title: SC 1040 tax form (2021)
@@ -1,12 +1,16 @@
1
- description: Virginia non-refundable tax credits.
1
+ description: Virginia provides the following non-refundable tax credits.
2
2
  values:
3
3
  2021-01-01:
4
4
  - va_non_refundable_eitc
5
+ - va_rebate
6
+ 2022-01-01:
7
+ - va_non_refundable_eitc
5
8
  2023-01-01:
6
9
  - va_non_refundable_eitc
7
10
  - va_rebate
8
- 2025-01-01:
11
+ 2024-01-01:
9
12
  - va_non_refundable_eitc
13
+
10
14
  metadata:
11
15
  unit: list
12
16
  period: year
@@ -19,12 +19,22 @@ metadata:
19
19
  # House Bill 1600 reauthorized rebate for tax year 2024
20
20
 
21
21
  JOINT:
22
+ 2021-01-01: 500
23
+ 2022-01-01: 0
22
24
  2023-01-01: 400
23
25
  SINGLE:
26
+ 2021-01-01: 250
27
+ 2022-01-01: 0
24
28
  2023-01-01: 200
25
29
  SEPARATE:
30
+ 2021-01-01: 250
31
+ 2022-01-01: 0
26
32
  2023-01-01: 200
27
33
  HEAD_OF_HOUSEHOLD:
34
+ 2021-01-01: 250
35
+ 2022-01-01: 0
28
36
  2023-01-01: 200
29
37
  SURVIVING_SPOUSE:
38
+ 2021-01-01: 250
39
+ 2022-01-01: 0
30
40
  2023-01-01: 200
@@ -110,6 +110,10 @@ from .crfb import (
110
110
  create_non_refundable_ss_credit_reform,
111
111
  create_senior_deduction_extension_reform,
112
112
  )
113
+ from .states.ri.ctc.ri_ctc_reform import create_ri_ctc_reform
114
+ from .states.ri.exemption.ri_exemption_reform import (
115
+ create_ri_exemption_reform_fn,
116
+ )
113
117
  from .aca import (
114
118
  create_aca_ptc_additional_bracket_reform,
115
119
  create_aca_ptc_simplified_bracket_reform,
@@ -257,6 +261,8 @@ def create_structural_reforms_from_parameters(parameters, period):
257
261
  ctc_minimum_refundable_amount = (
258
262
  create_ctc_minimum_refundable_amount_reform(parameters, period)
259
263
  )
264
+ ri_ctc = create_ri_ctc_reform(parameters, period)
265
+ ri_exemption = create_ri_exemption_reform_fn(parameters, period)
260
266
  aca_ptc_additional_bracket = create_aca_ptc_additional_bracket_reform(
261
267
  parameters, period
262
268
  )
@@ -314,6 +320,8 @@ def create_structural_reforms_from_parameters(parameters, period):
314
320
  ctc_per_child_phase_out,
315
321
  ctc_per_child_phase_in,
316
322
  ctc_minimum_refundable_amount,
323
+ ri_ctc,
324
+ ri_exemption,
317
325
  aca_ptc_additional_bracket,
318
326
  aca_ptc_simplified_bracket,
319
327
  ]
@@ -0,0 +1,2 @@
1
+ from .ctc import create_ri_ctc_reform
2
+ from .exemption import create_ri_exemption_reform_fn
@@ -0,0 +1 @@
1
+ from .ri_ctc_reform import create_ri_ctc_reform
@@ -0,0 +1,176 @@
1
+ from policyengine_us.model_api import *
2
+ from policyengine_core.periods import period as period_
3
+ from policyengine_core.periods import instant
4
+
5
+
6
+ def create_ri_ctc() -> Reform:
7
+ class ri_ctc_eligible_children(Variable):
8
+ value_type = int
9
+ entity = TaxUnit
10
+ label = "Rhode Island CTC eligible children count"
11
+ definition_period = YEAR
12
+ defined_for = StateCode.RI
13
+
14
+ def formula(tax_unit, period, parameters):
15
+ p = parameters(period).gov.contrib.states.ri.ctc
16
+
17
+ person = tax_unit.members
18
+ age = person("age", period)
19
+ is_dependent = person("is_tax_unit_dependent", period)
20
+
21
+ # Check age eligibility
22
+ meets_age = age < p.age_limit
23
+
24
+ eligible = is_dependent & meets_age
25
+ return tax_unit.sum(eligible)
26
+
27
+ class ri_ctc_maximum(Variable):
28
+ value_type = float
29
+ entity = TaxUnit
30
+ label = "Rhode Island CTC maximum amount before phaseout"
31
+ unit = USD
32
+ definition_period = YEAR
33
+ defined_for = StateCode.RI
34
+
35
+ def formula(tax_unit, period, parameters):
36
+ p = parameters(period).gov.contrib.states.ri.ctc
37
+
38
+ eligible_children = tax_unit("ri_ctc_eligible_children", period)
39
+ return eligible_children * p.amount
40
+
41
+ class ri_ctc_phaseout(Variable):
42
+ value_type = float
43
+ entity = TaxUnit
44
+ label = "Rhode Island CTC phaseout amount"
45
+ unit = USD
46
+ definition_period = YEAR
47
+ defined_for = StateCode.RI
48
+
49
+ def formula(tax_unit, period, parameters):
50
+ p = parameters(period).gov.contrib.states.ri.ctc
51
+
52
+ filing_status = tax_unit("filing_status", period)
53
+ agi = tax_unit("ri_agi", period)
54
+
55
+ threshold = p.phaseout.threshold[filing_status]
56
+ excess_income = max_(agi - threshold, 0)
57
+ return excess_income * p.phaseout.rate
58
+
59
+ class ri_total_ctc(Variable):
60
+ value_type = float
61
+ entity = TaxUnit
62
+ label = "Rhode Island Child Tax Credit"
63
+ unit = USD
64
+ definition_period = YEAR
65
+ defined_for = StateCode.RI
66
+
67
+ def formula(tax_unit, period, parameters):
68
+ p = parameters(period).gov.contrib.states.ri.ctc
69
+
70
+ # Calculate maximum credit
71
+ maximum = tax_unit("ri_ctc_maximum", period)
72
+
73
+ # Apply phaseout
74
+ phaseout = tax_unit("ri_ctc_phaseout", period)
75
+
76
+ return max_(maximum - phaseout, 0)
77
+
78
+ class ri_refundable_ctc(Variable):
79
+ value_type = float
80
+ entity = TaxUnit
81
+ label = "Rhode Island CTC refundable portion"
82
+ unit = USD
83
+ definition_period = YEAR
84
+ defined_for = StateCode.RI
85
+
86
+ def formula(tax_unit, period, parameters):
87
+ p = parameters(period).gov.contrib.states.ri.ctc
88
+
89
+ total_credit = tax_unit("ri_total_ctc", period)
90
+
91
+ # The refundable portion is the minimum of the cap and total credit
92
+ # This ensures the refundable amount never exceeds the total credit
93
+ # - If cap = 0: credit is nonrefundable
94
+ # - If 0 < cap < total_credit: credit is partially refundable
95
+ # - If cap >= total_credit: credit is fully refundable
96
+ return min_(total_credit, p.refundability.cap)
97
+
98
+ class ri_non_refundable_ctc(Variable):
99
+ value_type = float
100
+ entity = TaxUnit
101
+ label = "Rhode Island CTC non-refundable portion"
102
+ unit = USD
103
+ definition_period = YEAR
104
+ defined_for = StateCode.RI
105
+
106
+ def formula(tax_unit, period, parameters):
107
+ p = parameters(period).gov.contrib.states.ri.ctc
108
+
109
+ total_credit = tax_unit("ri_total_ctc", period)
110
+ refundable_portion = tax_unit("ri_refundable_ctc", period)
111
+ return max_(total_credit - refundable_portion, 0)
112
+
113
+ def modify_parameters(parameters):
114
+ # Add ri_refundable_ctc to refundable credits list
115
+ refundable = parameters.gov.states.ri.tax.income.credits.refundable
116
+ current_refundable = refundable(instant("2025-01-01"))
117
+ if "ri_refundable_ctc" not in current_refundable:
118
+ new_refundable = list(current_refundable) + ["ri_refundable_ctc"]
119
+ refundable.update(
120
+ start=instant("2025-01-01"),
121
+ stop=instant("2100-12-31"),
122
+ value=new_refundable,
123
+ )
124
+
125
+ # Add ri_non_refundable_ctc to non-refundable credits list
126
+ non_refundable = (
127
+ parameters.gov.states.ri.tax.income.credits.non_refundable
128
+ )
129
+ current_non_refundable = non_refundable(instant("2025-01-01"))
130
+ if "ri_non_refundable_ctc" not in current_non_refundable:
131
+ new_non_refundable = list(current_non_refundable) + [
132
+ "ri_non_refundable_ctc"
133
+ ]
134
+ non_refundable.update(
135
+ start=instant("2025-01-01"),
136
+ stop=instant("2100-12-31"),
137
+ value=new_non_refundable,
138
+ )
139
+
140
+ return parameters
141
+
142
+ class reform(Reform):
143
+ def apply(self):
144
+ self.update_variable(ri_ctc_eligible_children)
145
+ self.update_variable(ri_ctc_maximum)
146
+ self.update_variable(ri_ctc_phaseout)
147
+ self.update_variable(ri_total_ctc)
148
+ self.update_variable(ri_refundable_ctc)
149
+ self.update_variable(ri_non_refundable_ctc)
150
+ self.modify_parameters(modify_parameters)
151
+
152
+ return reform
153
+
154
+
155
+ def create_ri_ctc_reform(parameters, period, bypass: bool = False):
156
+ if bypass:
157
+ return create_ri_ctc()
158
+
159
+ p = parameters.gov.contrib.states.ri.ctc
160
+
161
+ reform_active = False
162
+ current_period = period_(period)
163
+
164
+ for i in range(5):
165
+ if p(current_period).in_effect:
166
+ reform_active = True
167
+ break
168
+ current_period = current_period.offset(1, "year")
169
+
170
+ if reform_active:
171
+ return create_ri_ctc()
172
+ else:
173
+ return None
174
+
175
+
176
+ ri_ctc = create_ri_ctc_reform(None, None, bypass=True)
@@ -0,0 +1 @@
1
+ from .ri_exemption_reform import create_ri_exemption_reform_fn
@@ -0,0 +1,137 @@
1
+ from policyengine_us.model_api import *
2
+ from policyengine_core.periods import period as period_
3
+ from policyengine_core.periods import instant
4
+
5
+
6
+ def create_ri_exemption_reform() -> Reform:
7
+ class ri_eligible_dependents_count(Variable):
8
+ value_type = int
9
+ entity = TaxUnit
10
+ label = "Rhode Island eligible dependents count"
11
+ definition_period = YEAR
12
+ defined_for = StateCode.RI
13
+
14
+ def formula(tax_unit, period, parameters):
15
+ p = parameters(period).gov.contrib.states.ri.dependent_exemption
16
+
17
+ person = tax_unit.members
18
+ age = person("age", period)
19
+ is_dependent = person("is_tax_unit_dependent", period)
20
+
21
+ # Apply age limit if in effect
22
+ if p.age_limit.in_effect:
23
+ age_threshold = p.age_limit.threshold
24
+ eligible_dependents = is_dependent & (age < age_threshold)
25
+ else:
26
+ eligible_dependents = is_dependent
27
+
28
+ return tax_unit.sum(eligible_dependents)
29
+
30
+ class ri_dependent_exemption_maximum(Variable):
31
+ value_type = float
32
+ entity = TaxUnit
33
+ label = "Rhode Island dependent exemption maximum before phaseout"
34
+ unit = USD
35
+ definition_period = YEAR
36
+ defined_for = StateCode.RI
37
+
38
+ def formula(tax_unit, period, parameters):
39
+ p = parameters(period).gov.contrib.states.ri.dependent_exemption
40
+
41
+ dependents_count = tax_unit("ri_eligible_dependents_count", period)
42
+ return dependents_count * p.amount
43
+
44
+ class ri_dependent_exemption_phaseout(Variable):
45
+ value_type = float
46
+ entity = TaxUnit
47
+ label = "Rhode Island dependent exemption phaseout amount"
48
+ unit = USD
49
+ definition_period = YEAR
50
+ defined_for = StateCode.RI
51
+
52
+ def formula(tax_unit, period, parameters):
53
+ p = parameters(period).gov.contrib.states.ri.dependent_exemption
54
+
55
+ filing_status = tax_unit("filing_status", period)
56
+ agi = tax_unit("ri_agi", period)
57
+
58
+ threshold = p.phaseout.threshold[filing_status]
59
+ excess_income = max_(agi - threshold, 0)
60
+ return excess_income * p.phaseout.rate
61
+
62
+ class ri_dependent_exemption(Variable):
63
+ value_type = float
64
+ entity = TaxUnit
65
+ label = "Rhode Island dependent exemption"
66
+ unit = USD
67
+ definition_period = YEAR
68
+ defined_for = StateCode.RI
69
+
70
+ def formula(tax_unit, period, parameters):
71
+ p = parameters(period).gov.contrib.states.ri.dependent_exemption
72
+
73
+ maximum = tax_unit("ri_dependent_exemption_maximum", period)
74
+ phaseout = tax_unit("ri_dependent_exemption_phaseout", period)
75
+
76
+ return max_(maximum - phaseout, 0)
77
+
78
+ class ri_exemptions(Variable):
79
+ value_type = float
80
+ entity = TaxUnit
81
+ label = "Rhode Island exemptions"
82
+ unit = USD
83
+ definition_period = YEAR
84
+ defined_for = StateCode.RI
85
+
86
+ def formula(tax_unit, period, parameters):
87
+ p_base = parameters(period).gov.states.ri.tax.income.exemption
88
+
89
+ # Personal exemptions use baseline amount
90
+ filing_status = tax_unit("filing_status", period)
91
+ personal_exemptions = where(
92
+ filing_status == filing_status.possible_values.JOINT,
93
+ 2,
94
+ 1,
95
+ )
96
+ personal_exemption_amount = personal_exemptions * p_base.amount
97
+
98
+ # Add dependent exemption
99
+ dependent_exemption_amount = tax_unit(
100
+ "ri_dependent_exemption", period
101
+ )
102
+
103
+ return personal_exemption_amount + dependent_exemption_amount
104
+
105
+ class reform(Reform):
106
+ def apply(self):
107
+ self.update_variable(ri_eligible_dependents_count)
108
+ self.update_variable(ri_dependent_exemption_maximum)
109
+ self.update_variable(ri_dependent_exemption_phaseout)
110
+ self.update_variable(ri_dependent_exemption)
111
+ self.update_variable(ri_exemptions)
112
+
113
+ return reform
114
+
115
+
116
+ def create_ri_exemption_reform_fn(parameters, period, bypass: bool = False):
117
+ if bypass:
118
+ return create_ri_exemption_reform()
119
+
120
+ p = parameters.gov.contrib.states.ri.dependent_exemption
121
+
122
+ reform_active = False
123
+ current_period = period_(period)
124
+
125
+ for i in range(5):
126
+ if p(current_period).in_effect:
127
+ reform_active = True
128
+ break
129
+ current_period = current_period.offset(1, "year")
130
+
131
+ if reform_active:
132
+ return create_ri_exemption_reform()
133
+ else:
134
+ return None
135
+
136
+
137
+ ri_exemption_reform = create_ri_exemption_reform_fn(None, None, bypass=True)
@@ -49,7 +49,7 @@
49
49
  members: [person1]
50
50
  state_code: IL # state income tax that does not depend on US tax
51
51
  output:
52
- state_income_tax: 4_576.4375 # = il_income_tax = (100000-2375)*0.0495
52
+ state_income_tax: 4_526.4375
53
53
  adjusted_gross_income: 100_000
54
54
  taxable_income_deductions_if_not_itemizing: 12_550
55
55
  taxable_income_deductions_if_itemizing: 8_000 + 10_000
@@ -59,3 +59,53 @@
59
59
  state_fips: 6
60
60
  output:
61
61
  ca_income_tax: 791_292
62
+
63
+ - name: 0-CA.yaml
64
+ absolute_error_margin: 2
65
+ period: 2024
66
+ input:
67
+ people:
68
+ person1:
69
+ age: 40
70
+ employment_income: 0.0
71
+ ssi: 0
72
+ wic: 0
73
+ head_start: 0
74
+ early_head_start: 0
75
+ commodity_supplemental_food_program: 0
76
+ unemployment_compensation: 5440.0
77
+ qualified_dividend_income: 4.3401766
78
+ long_term_capital_gains: 27410.084
79
+ taxable_interest_income: 113.7181
80
+ is_tax_unit_head: true
81
+ person2:
82
+ age: 40
83
+ employment_income: 0.0
84
+ ssi: 0
85
+ wic: 0
86
+ head_start: 0
87
+ early_head_start: 0
88
+ commodity_supplemental_food_program: 0
89
+ qualified_dividend_income: 4.3401766
90
+ long_term_capital_gains: 27410.084
91
+ taxable_interest_income: 113.7181
92
+ is_tax_unit_spouse: true
93
+ tax_units:
94
+ tax_unit:
95
+ members: [person1, person2]
96
+ premium_tax_credit: 0
97
+ local_income_tax: 0
98
+ state_sales_tax: 0
99
+ spm_units:
100
+ spm_unit:
101
+ members: [person1, person2]
102
+ snap: 0
103
+ tanf: 0
104
+ free_school_meals: 0
105
+ reduced_price_school_meals: 0
106
+ households:
107
+ household:
108
+ members: [person1, person2]
109
+ state_fips: 6
110
+ output:
111
+ ca_income_tax: 371
@@ -0,0 +1,71 @@
1
+ - name: Non-joint tax unit receives single amount
2
+ period: 2021
3
+ input:
4
+ state_code: CO
5
+ tax_unit_is_joint: false
6
+ output:
7
+ co_tabor_cash_back: 750
8
+
9
+ - name: Joint tax unit receives joint amount
10
+ period: 2021
11
+ input:
12
+ state_code: CO
13
+ tax_unit_is_joint: true
14
+ output:
15
+ co_tabor_cash_back: 1_500
16
+
17
+ - name: Single filer receives single amount
18
+ period: 2021
19
+ input:
20
+ state_code: CO
21
+ filing_status: SINGLE
22
+ output:
23
+ co_tabor_cash_back: 750
24
+
25
+ - name: Joint filer receives joint amount
26
+ period: 2021
27
+ input:
28
+ state_code: CO
29
+ filing_status: JOINT
30
+ output:
31
+ co_tabor_cash_back: 1_500
32
+
33
+ - name: Married filing separately receives single amount
34
+ period: 2021
35
+ input:
36
+ state_code: CO
37
+ filing_status: SEPARATE
38
+ output:
39
+ co_tabor_cash_back: 750
40
+
41
+ - name: No cash back outside Colorado - non-joint
42
+ period: 2021
43
+ input:
44
+ state_code: CA
45
+ tax_unit_is_joint: false
46
+ output:
47
+ co_tabor_cash_back: 0
48
+
49
+ - name: No cash back outside Colorado - joint
50
+ period: 2021
51
+ input:
52
+ state_code: NY
53
+ tax_unit_is_joint: true
54
+ output:
55
+ co_tabor_cash_back: 0
56
+
57
+ - name: Head of household receives single amount
58
+ period: 2021
59
+ input:
60
+ state_code: CO
61
+ filing_status: HEAD_OF_HOUSEHOLD
62
+ output:
63
+ co_tabor_cash_back: 750
64
+
65
+ - name: Surviving spouse receives single amount
66
+ period: 2021
67
+ input:
68
+ state_code: CO
69
+ filing_status: SURVIVING_SPOUSE
70
+ output:
71
+ co_tabor_cash_back: 750
@@ -21,6 +21,7 @@
21
21
  tax_unit:
22
22
  members: [person1, person2]
23
23
  aca_ptc: 0 # not in TAXSIM35
24
+ co_tabor_cash_back: 0
24
25
  spm_units:
25
26
  spm_unit:
26
27
  members: [person1, person2]
@@ -31,3 +32,40 @@
31
32
  output: # expected results from patched TAXSIM35 2023-08-31 version
32
33
  co_taxable_income: 38230.00
33
34
  co_income_tax: 1608.35
35
+
36
+ - name: 0-CO.yaml
37
+ absolute_error_margin: 2
38
+ period: 2024
39
+ input:
40
+ people:
41
+ person1:
42
+ age: 70
43
+ employment_income: 0.0
44
+ ssi: 0
45
+ wic: 0
46
+ head_start: 0
47
+ early_head_start: 0
48
+ commodity_supplemental_food_program: 0
49
+ short_term_capital_gains: -2020.4384
50
+ taxable_interest_income: 0.4384
51
+ is_tax_unit_head: true
52
+ tax_units:
53
+ tax_unit:
54
+ members: [person1]
55
+ premium_tax_credit: 0
56
+ local_income_tax: 0
57
+ state_sales_tax: 0
58
+ spm_units:
59
+ spm_unit:
60
+ members: [person1]
61
+ snap: 0
62
+ tanf: 0
63
+ free_school_meals: 0
64
+ reduced_price_school_meals: 0
65
+ households:
66
+ household:
67
+ members: [person1]
68
+ state_fips: 8
69
+ output:
70
+ co_sales_tax_refund: 177
71
+ co_income_tax: -977