policyengine-us 1.441.1__py3-none-any.whl → 1.441.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.
@@ -0,0 +1,68 @@
1
+ - name: No phase-out, no kiddie tax
2
+ period: 2022
3
+ input:
4
+ amt_income: 200_000
5
+ amt_kiddie_tax_applies: false
6
+ filer_adjusted_earnings: 400_000
7
+ filing_status: SINGLE
8
+ output:
9
+ # Base exemption for SINGLE in 2022 is 75,900
10
+ # income_excess = max(0, 200,000 - 539,900) = 0
11
+ # No phase-out, full exemption of 75,900
12
+ amt_exemption: 75_900
13
+
14
+ - name: No phase-out, kiddie tax applies with low earnings
15
+ period: 2022
16
+ input:
17
+ amt_income: 200_000
18
+ amt_kiddie_tax_applies: true
19
+ filer_adjusted_earnings: 10_000
20
+ filing_status: SINGLE
21
+ output:
22
+ # Base exemption for SINGLE in 2022 is 75,900
23
+ # reduced_exemption = 75,900 (no phase-out)
24
+ # exemption_cap = 10,000 + 8,200 (child amount) = 18,200
25
+ # amt_exemption = min(75,900, 18,200) = 18,200
26
+ amt_exemption: 18_200
27
+
28
+ - name: Full phase-out at high income
29
+ period: 2022
30
+ input:
31
+ amt_income: 1_000_000
32
+ amt_kiddie_tax_applies: false
33
+ filer_adjusted_earnings: 400_000
34
+ filing_status: SINGLE
35
+ output:
36
+ # Base exemption for SINGLE in 2022 is 75,900
37
+ # income_excess = max(0, 1,000,000 - 539,900) = 460,100
38
+ # exemption_phase_out = 0.25 * 460,100 = 115,025
39
+ # reduced_exemption = max(0, 75,900 - 115,025) = 0
40
+ amt_exemption: 0
41
+
42
+ - name: Partial phase-out
43
+ period: 2022
44
+ input:
45
+ amt_income: 600_000
46
+ amt_kiddie_tax_applies: false
47
+ filer_adjusted_earnings: 400_000
48
+ filing_status: SINGLE
49
+ output:
50
+ # Base exemption for SINGLE in 2022 is 75,900
51
+ # income_excess = max(0, 600,000 - 539,900) = 60,100
52
+ # exemption_phase_out = 0.25 * 60,100 = 15,025
53
+ # reduced_exemption = max(0, 75,900 - 15,025) = 60,875
54
+ amt_exemption: 60_875
55
+
56
+ - name: Joint filers, no phase-out
57
+ period: 2022
58
+ input:
59
+ amt_income: 500_000
60
+ amt_kiddie_tax_applies: false
61
+ filer_adjusted_earnings: 400_000
62
+ filing_status: JOINT
63
+ output:
64
+ # Base exemption for JOINT in 2022 is 118,100
65
+ # Phase-out starts at 1,079,800
66
+ # income_excess = max(0, 500,000 - 1,079,800) = 0
67
+ # Full exemption of 118,100
68
+ amt_exemption: 118_100
@@ -0,0 +1,47 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class amt_exemption(Variable):
5
+ value_type = float
6
+ entity = TaxUnit
7
+ definition_period = YEAR
8
+ label = "Alternative Minimum Tax exemption"
9
+ unit = USD
10
+ documentation = (
11
+ "AMT exemption amount after phase-out and kiddie tax adjustments. "
12
+ "Form 6251, Line 5."
13
+ )
14
+ reference = [
15
+ "https://www.law.cornell.edu/uscode/text/26/55#d", # 26 U.S.C. § 55(d)
16
+ "https://www.irs.gov/instructions/i6251",
17
+ ]
18
+
19
+ def formula(tax_unit, period, parameters):
20
+ p = parameters(period).gov.irs.income.amt
21
+ phase_out = p.exemption.phase_out
22
+ filing_status = tax_unit("filing_status", period)
23
+ amt_income = tax_unit("amt_income", period)
24
+
25
+ # Base exemption amount based on filing status
26
+ base_exemption_amount = p.exemption.amount[filing_status]
27
+
28
+ # Phase-out at higher income levels
29
+ income_excess = max_(0, amt_income - phase_out.start[filing_status])
30
+ exemption_phase_out = phase_out.rate * income_excess
31
+ reduced_exemption_amount = max_(
32
+ 0,
33
+ base_exemption_amount - exemption_phase_out,
34
+ )
35
+
36
+ # A reduced exemption amount is applied to kiddie tax filers
37
+ kiddie_tax_applies = tax_unit("amt_kiddie_tax_applies", period)
38
+ adj_earnings = tax_unit("filer_adjusted_earnings", period)
39
+ child_amount = p.exemption.child.amount
40
+
41
+ exemption_cap = where(
42
+ kiddie_tax_applies,
43
+ adj_earnings + child_amount,
44
+ np.inf,
45
+ )
46
+
47
+ return min_(reduced_exemption_amount, exemption_cap)
@@ -17,28 +17,10 @@ class amt_income_less_exemptions(Variable):
17
17
  taxable_income = tax_unit("taxable_income", period)
18
18
  kiddie_tax_applies = tax_unit("amt_kiddie_tax_applies", period)
19
19
  applied_income = where(kiddie_tax_applies, taxable_income, amt_income)
20
+
20
21
  # Form 6251, Part II top
21
- p = parameters(period).gov.irs.income.amt
22
- phase_out = p.exemption.phase_out
23
- filing_status = tax_unit("filing_status", period)
24
- # Line 5 the exemption amount is based on filing status and
25
- # is phased-out at higher income
26
- base_exemption_amount = p.exemption.amount[filing_status]
27
- income_excess = max_(0, amt_income - phase_out.start[filing_status])
28
- exemption_phase_out = phase_out.rate * income_excess
29
- reduced_exemption_amount = max_(
30
- 0,
31
- (base_exemption_amount - exemption_phase_out),
32
- )
33
- # A reduced exemption amount is applied to kiddie tax filers
34
- adj_earnings = tax_unit("filer_adjusted_earnings", period)
35
- child_amount = p.exemption.child.amount
22
+ # Line 5
23
+ amt_exemption = tax_unit("amt_exemption", period)
36
24
 
37
- exemption_cap = where(
38
- kiddie_tax_applies,
39
- adj_earnings + child_amount,
40
- np.inf,
41
- )
42
- capped_exemption_amount = min_(reduced_exemption_amount, exemption_cap)
43
25
  # Line 6
44
- return max_(0, applied_income - capped_exemption_amount)
26
+ return max_(0, applied_income - amt_exemption)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: policyengine-us
3
- Version: 1.441.1
3
+ Version: 1.441.2
4
4
  Summary: Add your description here.
5
5
  Author-email: PolicyEngine <hello@policyengine.org>
6
6
  License-File: LICENSE
@@ -3709,6 +3709,7 @@ policyengine_us/tests/policy/baseline/gov/irs/tax/federal_income/alternative_min
3709
3709
  policyengine_us/tests/policy/baseline/gov/irs/tax/federal_income/alternative_minimum_tax/base_tax/amt_base_tax.yaml,sha256=SXdsIDBaCdOyYvRwtStZfl3GKynf0EjGU8H8bG2OUjs,457
3710
3710
  policyengine_us/tests/policy/baseline/gov/irs/tax/federal_income/alternative_minimum_tax/base_tax/amt_higher_base_tax.yaml,sha256=nvJD0yK_3HHqTGPEWYLhpYFM3xvmOP9q-aerHFOhsxY,488
3711
3711
  policyengine_us/tests/policy/baseline/gov/irs/tax/federal_income/alternative_minimum_tax/base_tax/amt_lower_base_tax.yaml,sha256=6hIYLFWVlvc97ZP0dCagPIGEVNblercTEzwUoxo9s-4,475
3712
+ policyengine_us/tests/policy/baseline/gov/irs/tax/federal_income/alternative_minimum_tax/exemption/amt_exemption.yaml,sha256=q2q_EpzliOp0gVzQLH0MC5MfqVIof2ztfHUHITNAnvQ,2062
3712
3713
  policyengine_us/tests/policy/baseline/gov/irs/tax/federal_income/alternative_minimum_tax/income/amt_excluded_deductions.yaml,sha256=TzOqHwdeqP_Hgb7pQmRzIeOEHlzPM1o7uHdx1HUmHzk,1037
3713
3714
  policyengine_us/tests/policy/baseline/gov/irs/tax/federal_income/alternative_minimum_tax/income/amt_income.yaml,sha256=afFV4CTgYBIMvLZZBLy6D9e8lDVVVB4i6ihNH7_r6ko,1103
3714
3715
  policyengine_us/tests/policy/baseline/gov/irs/tax/federal_income/alternative_minimum_tax/income/amt_income_less_exemptions.yaml,sha256=SJUu7xmDLojXjkx1C8JvDV8XKEsOasurOOsbZ2A5KEs,1108
@@ -6082,9 +6083,10 @@ policyengine_us/variables/gov/irs/tax/federal_income/alternative_minimum_tax/reg
6082
6083
  policyengine_us/variables/gov/irs/tax/federal_income/alternative_minimum_tax/base_tax/amt_base_tax.py,sha256=4yYT2wf3SHjQuFALh_tmklKdlXRvkm1G30X31TMKPmw,448
6083
6084
  policyengine_us/variables/gov/irs/tax/federal_income/alternative_minimum_tax/base_tax/amt_higher_base_tax.py,sha256=OiFFFTCJgkOoBoB1gy6BE6CuKg2l0hU7EzNcF_pSFJ8,878
6084
6085
  policyengine_us/variables/gov/irs/tax/federal_income/alternative_minimum_tax/base_tax/amt_lower_base_tax.py,sha256=FN7x9iFA5g1R4VTzIsq8CX54lK8uTTqKWFkh_CTqyqU,869
6086
+ policyengine_us/variables/gov/irs/tax/federal_income/alternative_minimum_tax/exemption/amt_exemption.py,sha256=1hSL12Xg0ikKjzF0c_TFG2QuiRKgw7Vz2Xnpc2Cyoqw,1629
6085
6087
  policyengine_us/variables/gov/irs/tax/federal_income/alternative_minimum_tax/income/amt_excluded_deductions.py,sha256=0QgcutGxblZdZjvIxGK2Nr9-Thhcc54TT5hyQDU7eWo,735
6086
6088
  policyengine_us/variables/gov/irs/tax/federal_income/alternative_minimum_tax/income/amt_income.py,sha256=8pynvFT8URaSMlkIkPGlXlP37Ope550_xVO4AD62X3M,391
6087
- policyengine_us/variables/gov/irs/tax/federal_income/alternative_minimum_tax/income/amt_income_less_exemptions.py,sha256=qMXau2fX_FONv8SqMG_I0dFX1HKUGjI2FYLvhkWiKYU,1850
6089
+ policyengine_us/variables/gov/irs/tax/federal_income/alternative_minimum_tax/income/amt_income_less_exemptions.py,sha256=kj5aaS0HAlYtIQd8OKCHxO_Ru2aH469WEjKRNphUi8g,930
6088
6090
  policyengine_us/variables/gov/irs/tax/federal_income/alternative_minimum_tax/income/amt_separate_addition.py,sha256=Hz_ffYTqDz4BCQWj9ksLoB7zJEYKYtdshNFFcvIL3UI,1023
6089
6091
  policyengine_us/variables/gov/irs/tax/federal_income/alternative_minimum_tax/kiddie_tax/amt_kiddie_tax_applies.py,sha256=kNMlkpgKXiapLN0UDEoT5Y_qeA2DjrvIUrF97zTpBow,629
6090
6092
  policyengine_us/variables/gov/irs/tax/federal_income/before_credits/income_tax_before_credits.py,sha256=FIHI5BXMxRRITDIzwhb_jZCtMELOE4vl2Ui5zPNefy4,410
@@ -8881,8 +8883,8 @@ policyengine_us/variables/input/farm_income.py,sha256=BEKxYmHNNnWJAAvULl5qZJigy5
8881
8883
  policyengine_us/variables/input/geography.py,sha256=Ux0ueAf0rhZaflyEqz81UuXP3xKCKBDvoO3CrKhiQEc,5421
8882
8884
  policyengine_us/variables/input/self_employment_income.py,sha256=PwsGz8R4lRikKWUYOhsC0qosNNLXq4f5SQmfw4S3mk8,511
8883
8885
  policyengine_us/variables/input/self_employment_income_before_lsr.py,sha256=E8fcX9Nlyqz8dziHhQv_euutdmoIwFMMWePUwbbwv_w,379
8884
- policyengine_us-1.441.1.dist-info/METADATA,sha256=lKga9ZnmKCQASFP0PLIV3zGEDpy0hFHGbmujBYYGCIk,1649
8885
- policyengine_us-1.441.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
8886
- policyengine_us-1.441.1.dist-info/entry_points.txt,sha256=MLaqNyNTbReALyKNkde85VkuFFpdPWAcy8VRG1mjczc,57
8887
- policyengine_us-1.441.1.dist-info/licenses/LICENSE,sha256=2N5ReRelkdqkR9a-KP-y-shmcD5P62XoYiG-miLTAzo,34519
8888
- policyengine_us-1.441.1.dist-info/RECORD,,
8886
+ policyengine_us-1.441.2.dist-info/METADATA,sha256=AjgzaOgQ6Gm2zv-apDpi4AHAZR33eKyfi8u_0g_vucA,1649
8887
+ policyengine_us-1.441.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
8888
+ policyengine_us-1.441.2.dist-info/entry_points.txt,sha256=MLaqNyNTbReALyKNkde85VkuFFpdPWAcy8VRG1mjczc,57
8889
+ policyengine_us-1.441.2.dist-info/licenses/LICENSE,sha256=2N5ReRelkdqkR9a-KP-y-shmcD5P62XoYiG-miLTAzo,34519
8890
+ policyengine_us-1.441.2.dist-info/RECORD,,