policyengine-us 1.364.0__py3-none-any.whl → 1.365.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.

@@ -0,0 +1,10 @@
1
+ description: The proposed Michigan surtax is in effect, if this is true.
2
+ values:
3
+ 0000-01-01: false
4
+ metadata:
5
+ unit: bool
6
+ period: year
7
+ label: Michigan surtax in effect
8
+ reference:
9
+ - title: Invest in Our Kids ballot initiative text
10
+ href: https://www.michigan.gov/sos/-/media/Project/Websites/sos/BSC-Announcements/Invest-in-MI-Kids-Petition.pdf
@@ -0,0 +1,18 @@
1
+ description: Invest in Our Kids proposed a ballot initiative to implement a surtax on joint filers with taxable income above this threshold.
2
+ metadata:
3
+ type: marginal_rate
4
+ threshold_unit: currency-USD
5
+ rate_unit: /1
6
+ label: Michigan surtax joint rate
7
+ reference:
8
+ - title: Invest in Our Kids ballot initiative text
9
+ href: https://www.michigan.gov/sos/-/media/Project/Websites/sos/BSC-Announcements/Invest-in-MI-Kids-Petition.pdf
10
+ brackets:
11
+ - threshold:
12
+ 2027-01-01: 0
13
+ rate:
14
+ 2027-01-01: 0
15
+ - threshold:
16
+ 2027-01-01: 1_000_000
17
+ rate:
18
+ 2027-01-01: 0.05
@@ -0,0 +1,18 @@
1
+ description: Invest in Our Kids proposed a ballot initiative to implement a surtax on single filers with taxable income above this threshold.
2
+ metadata:
3
+ type: marginal_rate
4
+ threshold_unit: currency-USD
5
+ rate_unit: /1
6
+ label: Michigan surtax single rate.
7
+ reference:
8
+ - title: Invest in Our Kids ballot initiative text
9
+ href: https://www.michigan.gov/sos/-/media/Project/Websites/sos/BSC-Announcements/Invest-in-MI-Kids-Petition.pdf
10
+ brackets:
11
+ - threshold:
12
+ 2027-01-01: 0
13
+ rate:
14
+ 2027-01-01: 0
15
+ - threshold:
16
+ 2027-01-01: 500_000
17
+ rate:
18
+ 2027-01-01: 0.05
@@ -92,6 +92,9 @@ from .congress.afa import (
92
92
  from .reconciliation import (
93
93
  create_reconciled_ssn_for_llc_and_aoc_reform,
94
94
  )
95
+ from .states.mi.surtax import (
96
+ create_mi_surtax_reform,
97
+ )
95
98
  from .additional_tax_bracket import (
96
99
  create_additional_tax_bracket_reform,
97
100
  )
@@ -214,10 +217,11 @@ def create_structural_reforms_from_parameters(parameters, period):
214
217
  ctc_additional_bracket = create_ctc_additional_bracket_reform(
215
218
  parameters, period
216
219
  )
217
-
218
220
  additional_tax_bracket = create_additional_tax_bracket_reform(
219
221
  parameters, period
220
222
  )
223
+ mi_surtax = create_mi_surtax_reform(parameters, period)
224
+
221
225
  american_worker_rebate_act = create_american_worker_rebate_act_reform(
222
226
  parameters, period
223
227
  )
@@ -263,6 +267,7 @@ def create_structural_reforms_from_parameters(parameters, period):
263
267
  afa_other_dependent_credit,
264
268
  reconciled_ssn_for_llc_and_aoc,
265
269
  ctc_additional_bracket,
270
+ mi_surtax,
266
271
  additional_tax_bracket,
267
272
  american_worker_rebate_act,
268
273
  ]
@@ -0,0 +1,3 @@
1
+ from .surtax import (
2
+ create_mi_surtax_reform,
3
+ )
@@ -0,0 +1,64 @@
1
+ from policyengine_us.model_api import *
2
+ from policyengine_core.periods import period as period_
3
+
4
+
5
+ def create_mi_surtax() -> Reform:
6
+ class mi_surtax(Variable):
7
+ value_type = float
8
+ entity = TaxUnit
9
+ label = "Michigan surtax"
10
+ defined_for = StateCode.MI
11
+ unit = USD
12
+ definition_period = YEAR
13
+
14
+ def formula(tax_unit, period, parameters):
15
+ taxable_income = tax_unit("mi_taxable_income", period)
16
+ joint = tax_unit("tax_unit_is_joint", period)
17
+ p = parameters(period).gov.contrib.states.mi.surtax.rate
18
+ return where(
19
+ joint,
20
+ p.joint.calc(taxable_income),
21
+ p.single.calc(taxable_income),
22
+ )
23
+
24
+ class mi_income_tax(Variable):
25
+ value_type = float
26
+ entity = TaxUnit
27
+ label = "Michigan income tax"
28
+ unit = USD
29
+ definition_period = YEAR
30
+ defined_for = StateCode.MI
31
+
32
+ adds = ["mi_income_tax_before_refundable_credits", "mi_surtax"]
33
+ subtracts = ["mi_refundable_credits"]
34
+
35
+ class reform(Reform):
36
+ def apply(self):
37
+ self.update_variable(mi_income_tax)
38
+ self.update_variable(mi_surtax)
39
+
40
+ return reform
41
+
42
+
43
+ def create_mi_surtax_reform(parameters, period, bypass: bool = False):
44
+ if bypass:
45
+ return create_mi_surtax()
46
+
47
+ p = parameters.gov.contrib.states.mi.surtax
48
+
49
+ reform_active = False
50
+ current_period = period_(period)
51
+
52
+ for i in range(5):
53
+ if p(current_period).in_effect:
54
+ reform_active = True
55
+ break
56
+ current_period = current_period.offset(1, "year")
57
+
58
+ if reform_active:
59
+ return create_mi_surtax()
60
+ else:
61
+ return None
62
+
63
+
64
+ mi_surtax = create_mi_surtax_reform(None, None, bypass=True)
@@ -0,0 +1,91 @@
1
+ - name: Single filer below threshold in 2027
2
+ period: 2027
3
+ reforms: policyengine_us.reforms.states.mi.surtax.mi_surtax
4
+ input:
5
+ gov.contrib.states.mi.surtax.in_effect: True
6
+ mi_taxable_income: 400_000
7
+ filing_status: SINGLE
8
+ state_code: MI
9
+ output:
10
+ mi_surtax: 0
11
+
12
+ - name: Single filer at threshold in 2027
13
+ period: 2027
14
+ reforms: policyengine_us.reforms.states.mi.surtax.mi_surtax
15
+ input:
16
+ gov.contrib.states.mi.surtax.in_effect: True
17
+ mi_taxable_income: 500_000
18
+ filing_status: SINGLE
19
+ state_code: MI
20
+ output:
21
+ mi_surtax: 0
22
+
23
+ - name: Single filer above threshold in 2027
24
+ period: 2027
25
+ reforms: policyengine_us.reforms.states.mi.surtax.mi_surtax
26
+ input:
27
+ gov.contrib.states.mi.surtax.in_effect: True
28
+ mi_taxable_income: 600_000
29
+ filing_status: SINGLE
30
+ state_code: MI
31
+ output:
32
+ # (600_000 - 500_000) * 0.05 = 100_000 * 0.05 = 5_000
33
+ mi_surtax: 5_000
34
+
35
+ - name: Single filer well above threshold in 2027
36
+ period: 2027
37
+ reforms: policyengine_us.reforms.states.mi.surtax.mi_surtax
38
+ input:
39
+ gov.contrib.states.mi.surtax.in_effect: True
40
+ mi_taxable_income: 1_000_000
41
+ filing_status: SINGLE
42
+ state_code: MI
43
+ output:
44
+ # (1_000_000 - 500_000) * 0.05 = 500_000 * 0.05 = 25_000
45
+ mi_surtax: 25_000
46
+
47
+ - name: Joint filer below threshold in 2027
48
+ period: 2027
49
+ reforms: policyengine_us.reforms.states.mi.surtax.mi_surtax
50
+ input:
51
+ gov.contrib.states.mi.surtax.in_effect: True
52
+ mi_taxable_income: 800_000
53
+ filing_status: JOINT
54
+ state_code: MI
55
+ output:
56
+ mi_surtax: 0
57
+
58
+ - name: Joint filer at threshold in 2027
59
+ period: 2027
60
+ reforms: policyengine_us.reforms.states.mi.surtax.mi_surtax
61
+ input:
62
+ gov.contrib.states.mi.surtax.in_effect: True
63
+ mi_taxable_income: 1_000_000
64
+ filing_status: JOINT
65
+ state_code: MI
66
+ output:
67
+ mi_surtax: 0
68
+
69
+ - name: Joint filer above threshold in 2027
70
+ period: 2027
71
+ reforms: policyengine_us.reforms.states.mi.surtax.mi_surtax
72
+ input:
73
+ gov.contrib.states.mi.surtax.in_effect: True
74
+ mi_taxable_income: 1_200_000
75
+ filing_status: JOINT
76
+ state_code: MI
77
+ output:
78
+ # (1_200_000 - 1_000_000) * 0.05 = 200_000 * 0.05 = 10_000
79
+ mi_surtax: 10_000
80
+
81
+ - name: Joint filer well above threshold in 2027
82
+ period: 2027
83
+ reforms: policyengine_us.reforms.states.mi.surtax.mi_surtax
84
+ input:
85
+ gov.contrib.states.mi.surtax.in_effect: True
86
+ mi_taxable_income: 2_000_000
87
+ filing_status: JOINT
88
+ state_code: MI
89
+ output:
90
+ # (2_000_000 - 1_000_000) * 0.05 = 1_000_000 * 0.05 = 50_000
91
+ mi_surtax: 50_000
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: policyengine-us
3
- Version: 1.364.0
3
+ Version: 1.365.0
4
4
  Summary: Add your description here.
5
5
  Author-email: PolicyEngine <hello@policyengine.org>
6
6
  License-File: LICENSE
@@ -240,6 +240,9 @@ policyengine_us/parameters/gov/contrib/states/dc/property_tax/income_limit/elder
240
240
  policyengine_us/parameters/gov/contrib/states/dc/property_tax/income_limit/non_elderly.yaml,sha256=EP-FHIU74pRZDzFsloLCdekB12FblZpUElJgWMUOKUs,1139
241
241
  policyengine_us/parameters/gov/contrib/states/dc/property_tax/phase_out/applies.yaml,sha256=_P9RtcHpXLRmDfaLH0CTu8lvfWvGbux3s-sQaEzylUw,236
242
242
  policyengine_us/parameters/gov/contrib/states/dc/property_tax/phase_out/rate.yaml,sha256=aQ2MZLZ38DD2FCHT_FCMfsYR0g2GRrmEjwnDz45IYB4,223
243
+ policyengine_us/parameters/gov/contrib/states/mi/surtax/in_effect.yaml,sha256=JrcQCFWEBf-A43PBtf3Vj8ohMf0jr_CZPrNZyMXzCT4,362
244
+ policyengine_us/parameters/gov/contrib/states/mi/surtax/rate/joint.yaml,sha256=8gKQEf3wb9xBmo4TYTBZExDNHDrO8ZLLXvqk7WyAyAo,595
245
+ policyengine_us/parameters/gov/contrib/states/mi/surtax/rate/single.yaml,sha256=m0dZ9g_ViK8J1YFXoiSysrchBxRNAJ-AfwkNiHnz90s,596
243
246
  policyengine_us/parameters/gov/contrib/states/mn/walz/hf1938/repeal.yaml,sha256=cqJhAAodges-MNKNeyZAR_EnAHGOkfwlQ_-Id7Ck020,200
244
247
  policyengine_us/parameters/gov/contrib/states/mt/ctc/README.md,sha256=TRI937j56he0xD-7rMRuHeehLoJwbJX3N2kozuxmVdk,18
245
248
  policyengine_us/parameters/gov/contrib/states/mt/ctc/amount.yaml,sha256=HtIsSZilx_9d6vMYZIMRk9Qe98PqNnE-yOboJUeiXBU,563
@@ -3055,7 +3058,7 @@ policyengine_us/params_on_demand/gov/hhs/medicaid/geography/medicaid_rating_area
3055
3058
  policyengine_us/reforms/__init__.py,sha256=FPV8k2633kzUhbKUK8jC6yJONbnZ5n9zLAq2UL57KH4,113
3056
3059
  policyengine_us/reforms/dc_kccatc.py,sha256=LyGMfEKe-0TgQ-2vCYGOD8W-EGEW8_DgIqCQP89qDyg,4283
3057
3060
  policyengine_us/reforms/dc_tax_threshold_joint_ratio.py,sha256=G-5E1EJFGZ3VeUl_fuyj82nMIttHRNRdlT-x98koJrk,1633
3058
- policyengine_us/reforms/reforms.py,sha256=7pz2oSehJkfkdnFJ4zNIpWJoYOIS67QiGD2YAuhAQGo,9360
3061
+ policyengine_us/reforms/reforms.py,sha256=n6hBdmlke2QPjB15YDu8yuxxQhc6RrOP-n-DxL6RiK4,9502
3059
3062
  policyengine_us/reforms/taxsim.py,sha256=bXNFWfjBX5USld1C7fziT6BBmRy-avz00QtL8WmCHy0,5276
3060
3063
  policyengine_us/reforms/winship.py,sha256=_q74Af1nkmoh0-M6PZJ2FcJAn6v5zf5sAEgvxjwHwyA,3069
3061
3064
  policyengine_us/reforms/additional_tax_bracket/__init__.py,sha256=087GDzojnzkbARUgGTQDMNVWJzjtNZvBGr46jfu1kXc,89
@@ -3120,6 +3123,8 @@ policyengine_us/reforms/state_dependent_exemptions/__init__.py,sha256=qF3SRSDntS
3120
3123
  policyengine_us/reforms/state_dependent_exemptions/repeal_state_dependent_exemptions.py,sha256=Asi9vxgvsx3_GKY3Lyee_hZexfB3TLCzd-3hSTosdv4,22610
3121
3124
  policyengine_us/reforms/states/dc/property_tax/__init__.py,sha256=yEfVK0QtATzjmj7WekqGXd0RIdNPDIW7Uy_t4jAFKSA,73
3122
3125
  policyengine_us/reforms/states/dc/property_tax/dc_property_tax_reform.py,sha256=SA2R0cqg7jR4c2f4M3dZHV1m_FkYD0q8jiO8XP9C40o,5097
3126
+ policyengine_us/reforms/states/mi/__init__.py,sha256=QA0f8Kz0mJKgquLh_pojuDlEnUvo3y99LY0FT7zgm-g,53
3127
+ policyengine_us/reforms/states/mi/surtax.py,sha256=pQm1Mk5-A63BRJA2o7Ki1sxMus0vp1dlqda9KWHvnG4,1791
3123
3128
  policyengine_us/reforms/states/mn/walz/__init__.py,sha256=i4-uKPdqTZ99GHsBLnb3pB0ePj1A76eMz57c-QMRDeE,73
3124
3129
  policyengine_us/reforms/states/mn/walz/mn_walz_hf1938.py,sha256=LTYBqTKQ6z1ia8OKK0Ept2tuLxNPd_Im8bMnjt1R9cY,9774
3125
3130
  policyengine_us/reforms/states/mt/ctc/__init__.py,sha256=i2LhiD6XvP-twVhjs1P9g80QUZHEAgeVRUSy8wqRlzg,50
@@ -5111,6 +5116,7 @@ policyengine_us/tests/policy/contrib/snap_ea/mid_year_snap_ea_reform.py,sha256=A
5111
5116
  policyengine_us/tests/policy/contrib/snap_ea/snap_ca_ea_reform.yaml,sha256=7ivYCiPdnT3XxVP7o-aJzer9gdM8Ot_f_zyFCZptBxc,540
5112
5117
  policyengine_us/tests/policy/contrib/state_dependent_exemptions/repeal_state_dependent_exemptions.yaml,sha256=6CgLgOtzdJ7WUoqW-gLU9wG1rABNlsDVT9lEwuCuxzs,2031
5113
5118
  policyengine_us/tests/policy/contrib/states/dc/property_tax/dc_property_tax_credit.yaml,sha256=GylamIRxoQ3IUrWIYqb-2Ix8X26QvQ2f_wqsfr3EEMo,5745
5119
+ policyengine_us/tests/policy/contrib/states/mi/mi_surtax.yaml,sha256=XQ2_X2XMihcuLNWMWfdAfeEglM-e19VY2pBnHCWYQeE,2541
5114
5120
  policyengine_us/tests/policy/contrib/states/mn/walz/mn_walz_hf1938.yaml,sha256=5T1QsbKqOf52Vjk8vv1ZruEo8RWR9pKXBqcc0Dazcds,2958
5115
5121
  policyengine_us/tests/policy/contrib/states/mt/ctc/mt_ctc.yaml,sha256=WYTHmavj-lmZjVB2foKqFnWnza4fqWPspj1Oieqm9is,3129
5116
5122
  policyengine_us/tests/policy/contrib/states/ny/ny_working_families_tax_credit.yaml,sha256=XPIBSvoA_fbz56jj5oyphaglco44oMwSvLPB5yJNhMM,8232
@@ -8230,8 +8236,8 @@ policyengine_us/variables/input/farm_income.py,sha256=BEKxYmHNNnWJAAvULl5qZJigy5
8230
8236
  policyengine_us/variables/input/geography.py,sha256=XmBlgXhzBoLRKk6R8taVZHqUw1eU8MbNeGS9iJ7_l44,4506
8231
8237
  policyengine_us/variables/input/self_employment_income.py,sha256=PwsGz8R4lRikKWUYOhsC0qosNNLXq4f5SQmfw4S3mk8,511
8232
8238
  policyengine_us/variables/input/self_employment_income_before_lsr.py,sha256=E8fcX9Nlyqz8dziHhQv_euutdmoIwFMMWePUwbbwv_w,379
8233
- policyengine_us-1.364.0.dist-info/METADATA,sha256=flFzy9Ko_MCeT0RwaytxeRdfVcEn1C-XTB2PnUGWx_I,1693
8234
- policyengine_us-1.364.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
8235
- policyengine_us-1.364.0.dist-info/entry_points.txt,sha256=MLaqNyNTbReALyKNkde85VkuFFpdPWAcy8VRG1mjczc,57
8236
- policyengine_us-1.364.0.dist-info/licenses/LICENSE,sha256=2N5ReRelkdqkR9a-KP-y-shmcD5P62XoYiG-miLTAzo,34519
8237
- policyengine_us-1.364.0.dist-info/RECORD,,
8239
+ policyengine_us-1.365.0.dist-info/METADATA,sha256=DQE2dHq4VJDvHfFPlYb1VuGGPavQDv6ZmYNVN0UP1uM,1693
8240
+ policyengine_us-1.365.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
8241
+ policyengine_us-1.365.0.dist-info/entry_points.txt,sha256=MLaqNyNTbReALyKNkde85VkuFFpdPWAcy8VRG1mjczc,57
8242
+ policyengine_us-1.365.0.dist-info/licenses/LICENSE,sha256=2N5ReRelkdqkR9a-KP-y-shmcD5P62XoYiG-miLTAzo,34519
8243
+ policyengine_us-1.365.0.dist-info/RECORD,,