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

Files changed (154) hide show
  1. policyengine_us/parameters/gov/irs/credits/cdcc/phase_out/amended_structure/applies.yaml +13 -0
  2. policyengine_us/parameters/gov/irs/credits/cdcc/phase_out/amended_structure/second_increment.yaml +19 -0
  3. policyengine_us/parameters/gov/irs/credits/cdcc/phase_out/amended_structure/second_min.yaml +11 -0
  4. policyengine_us/parameters/gov/irs/credits/cdcc/phase_out/amended_structure/second_start.yaml +21 -0
  5. policyengine_us/parameters/gov/irs/credits/cdcc/phase_out/max.yaml +2 -0
  6. policyengine_us/parameters/gov/irs/credits/cdcc/phase_out/min.yaml +2 -0
  7. policyengine_us/parameters/gov/irs/credits/ctc/adult_ssn_requirement_applies.yaml +11 -0
  8. policyengine_us/parameters/gov/irs/credits/ctc/child_ssn_requirement_applies.yaml +0 -1
  9. policyengine_us/parameters/gov/irs/credits/ctc/eligible_ssn_card_type.yaml +13 -0
  10. policyengine_us/parameters/gov/irs/deductions/auto_loan_interest/cap.yaml +12 -0
  11. policyengine_us/parameters/gov/irs/deductions/auto_loan_interest/phase_out/increment.yaml +11 -0
  12. policyengine_us/parameters/gov/irs/deductions/auto_loan_interest/phase_out/start.yaml +21 -0
  13. policyengine_us/parameters/gov/irs/deductions/auto_loan_interest/phase_out/step.yaml +12 -0
  14. policyengine_us/parameters/gov/irs/deductions/deductions_if_itemizing.yaml +14 -0
  15. policyengine_us/parameters/gov/irs/deductions/deductions_if_not_itemizing.yaml +12 -0
  16. policyengine_us/parameters/gov/irs/deductions/itemized/casualty/active.yaml +0 -1
  17. policyengine_us/parameters/gov/irs/deductions/itemized/charity/ceiling/all.yaml +0 -1
  18. policyengine_us/parameters/gov/irs/deductions/itemized/charity/ceiling/non_cash.yaml +2 -0
  19. policyengine_us/parameters/gov/irs/deductions/itemized/charity/floor/amount.yaml +11 -0
  20. policyengine_us/parameters/gov/irs/deductions/itemized/charity/floor/applies.yaml +12 -0
  21. policyengine_us/parameters/gov/irs/deductions/itemized/charity/non_itemizers_amount.yaml +8 -0
  22. policyengine_us/parameters/gov/irs/deductions/itemized/interest/mortgage/cap.yaml +0 -5
  23. policyengine_us/parameters/gov/irs/deductions/itemized/misc/applies.yaml +0 -1
  24. policyengine_us/parameters/gov/irs/deductions/itemized/reduction/amended_structure/applies.yaml +13 -0
  25. policyengine_us/parameters/gov/irs/deductions/itemized/reduction/amended_structure/rate.yaml +12 -0
  26. policyengine_us/parameters/gov/irs/deductions/itemized/salt_and_real_estate/cap.yaml +30 -5
  27. policyengine_us/parameters/gov/irs/deductions/itemized/salt_and_real_estate/phase_out/floor/amount.yaml +21 -0
  28. policyengine_us/parameters/gov/irs/deductions/itemized/salt_and_real_estate/phase_out/floor/applies.yaml +13 -0
  29. policyengine_us/parameters/gov/irs/deductions/itemized/salt_and_real_estate/phase_out/in_effect.yaml +13 -0
  30. policyengine_us/parameters/gov/irs/deductions/itemized/salt_and_real_estate/phase_out/rate.yaml +12 -0
  31. policyengine_us/parameters/gov/irs/deductions/itemized/salt_and_real_estate/phase_out/threshold.yaml +41 -0
  32. policyengine_us/parameters/gov/irs/deductions/overtime_income/cap.yaml +22 -0
  33. policyengine_us/parameters/gov/irs/deductions/overtime_income/eligible_ssn_card_type.yaml +13 -0
  34. policyengine_us/parameters/gov/irs/deductions/overtime_income/phase_out/rate.yaml +12 -0
  35. policyengine_us/parameters/gov/irs/deductions/overtime_income/phase_out/start.yaml +22 -0
  36. policyengine_us/parameters/gov/irs/deductions/qbi/deduction_floor/amount.yaml +21 -0
  37. policyengine_us/parameters/gov/irs/deductions/qbi/deduction_floor/in_effect.yaml +13 -0
  38. policyengine_us/parameters/gov/irs/deductions/qbi/max/business_property/rate.yaml +1 -6
  39. policyengine_us/parameters/gov/irs/deductions/qbi/max/rate.yaml +1 -2
  40. policyengine_us/parameters/gov/irs/deductions/qbi/max/w2_wages/alt_rate.yaml +1 -6
  41. policyengine_us/parameters/gov/irs/deductions/qbi/max/w2_wages/rate.yaml +1 -6
  42. policyengine_us/parameters/gov/irs/deductions/qbi/phase_out/length.yaml +12 -10
  43. policyengine_us/parameters/gov/irs/deductions/qbi/phase_out/start.yaml +7 -5
  44. policyengine_us/parameters/gov/irs/deductions/senior_deduction/amount.yaml +12 -0
  45. policyengine_us/parameters/gov/irs/deductions/senior_deduction/eligible_ssn_card_type.yaml +13 -0
  46. policyengine_us/parameters/gov/irs/deductions/senior_deduction/phase_out_rate/joint.yaml +20 -0
  47. policyengine_us/parameters/gov/irs/deductions/senior_deduction/phase_out_rate/other.yaml +20 -0
  48. policyengine_us/parameters/gov/irs/deductions/tip_income/cap.yaml +12 -0
  49. policyengine_us/parameters/gov/irs/deductions/tip_income/eligible_ssn_card_type.yaml +13 -0
  50. policyengine_us/parameters/gov/irs/deductions/tip_income/phase_out/rate.yaml +12 -0
  51. policyengine_us/parameters/gov/irs/deductions/tip_income/phase_out/start.yaml +22 -0
  52. policyengine_us/reforms/reconciliation/__init__.py +0 -27
  53. policyengine_us/reforms/reforms.py +0 -45
  54. policyengine_us/tests/policy/baseline/gov/irs/credits/cdcc/cdcc_rate.yaml +40 -0
  55. policyengine_us/tests/policy/baseline/gov/irs/credits/ctc/maximum/individual/filer_meets_ctc_identification_requirements.yaml +51 -0
  56. policyengine_us/tests/policy/baseline/gov/irs/credits/ctc/maximum/individual/meets_ctc_child_identification_requirements.yaml +2 -2
  57. policyengine_us/tests/policy/baseline/gov/irs/deductions/itemized/salt_and_real_estate/reported_salt.yaml +2 -4
  58. policyengine_us/tests/policy/baseline/gov/irs/deductions/itemized/salt_and_real_estate/salt_deduction.yaml +78 -0
  59. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/auto_loan_interest_deduction.yaml +26 -0
  60. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/itemizing/charitable_deduction.yaml +42 -6
  61. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/itemizing/itemized_taxable_income_deductions_reduction.yaml +18 -5
  62. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/itemizing/misc_deduction.yaml +0 -18
  63. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/overtime_income/overtime_income_deduction.yaml +39 -0
  64. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/overtime_income/overtime_income_deduction_ssn_requirement_met.yaml +53 -0
  65. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/qbid/qualified_business_income_deduction.yaml +33 -0
  66. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/senior_deduction/integration.yaml +107 -0
  67. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/senior_deduction/meets_additional_senior_deduction_identification_requirements.yaml +71 -0
  68. policyengine_us/tests/policy/{contrib/reconciliation/reconciled_tip_and_overtime_exempt.yaml → baseline/gov/irs/income/taxable_income/deductions/tip_and_overtime_income_deduction.yaml} +39 -114
  69. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/tip_income/tip_income_deduction.yaml +79 -0
  70. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/tip_income/tip_income_deduction_ineligible_cardholder_present.yaml +53 -0
  71. policyengine_us/variables/gov/irs/credits/cdcc/cdcc_rate.py +18 -0
  72. policyengine_us/variables/gov/irs/credits/ctc/ctc.py +1 -0
  73. policyengine_us/variables/gov/irs/credits/ctc/maximum/individual/filer_meets_ctc_identification_requirements.py +20 -0
  74. policyengine_us/variables/gov/irs/credits/ctc/maximum/individual/meets_ctc_child_identification_requirements.py +3 -6
  75. policyengine_us/variables/gov/irs/credits/ctc/maximum/individual/meets_ctc_identification_requirements.py +17 -0
  76. policyengine_us/variables/gov/irs/income/taxable_income/deductions/auto_loan_interest/auto_loan_interest_deduction.py +30 -0
  77. policyengine_us/variables/gov/irs/income/taxable_income/deductions/itemizing/charitable_deduction.py +18 -3
  78. policyengine_us/variables/gov/irs/income/taxable_income/deductions/itemizing/itemized_taxable_income_deductions_reduction.py +18 -0
  79. policyengine_us/variables/gov/irs/income/taxable_income/deductions/itemizing/salt_cap.py +12 -2
  80. policyengine_us/variables/gov/irs/income/taxable_income/deductions/overtime_income/overtime_income_deduction.py +24 -0
  81. policyengine_us/variables/gov/irs/income/taxable_income/deductions/overtime_income/overtime_income_deduction_ssn_requirement_met.py +25 -0
  82. policyengine_us/variables/gov/irs/income/taxable_income/deductions/qualified_business_income_deduction/qualified_business_income_deduction.py +10 -3
  83. policyengine_us/variables/gov/irs/income/taxable_income/deductions/senior_deduction/additional_senior_deduction.py +31 -0
  84. policyengine_us/variables/gov/irs/income/taxable_income/deductions/senior_deduction/additional_senior_deduction_eligible_person.py +24 -0
  85. policyengine_us/variables/gov/irs/income/taxable_income/deductions/tax_unit_itemizes.py +0 -1
  86. policyengine_us/variables/gov/irs/income/taxable_income/deductions/tip_income/tip_income_deduction.py +23 -0
  87. policyengine_us/variables/gov/irs/income/taxable_income/deductions/tip_income/tip_income_deduction_ssn_requirement_met.py +25 -0
  88. {policyengine_us-1.353.0.dist-info → policyengine_us-1.354.0.dist-info}/METADATA +1 -1
  89. {policyengine_us-1.353.0.dist-info → policyengine_us-1.354.0.dist-info}/RECORD +92 -104
  90. policyengine_us/parameters/gov/contrib/reconciliation/additional_senior_standard_deduction/amount.yaml +0 -12
  91. policyengine_us/parameters/gov/contrib/reconciliation/additional_senior_standard_deduction/in_effect.yaml +0 -12
  92. policyengine_us/parameters/gov/contrib/reconciliation/additional_senior_standard_deduction/rate/joint.yaml +0 -20
  93. policyengine_us/parameters/gov/contrib/reconciliation/additional_senior_standard_deduction/rate/other.yaml +0 -20
  94. policyengine_us/parameters/gov/contrib/reconciliation/auto_loan_interest_ald/cap.yaml +0 -12
  95. policyengine_us/parameters/gov/contrib/reconciliation/auto_loan_interest_ald/in_effect.yaml +0 -13
  96. policyengine_us/parameters/gov/contrib/reconciliation/auto_loan_interest_ald/phase_out/increment.yaml +0 -11
  97. policyengine_us/parameters/gov/contrib/reconciliation/auto_loan_interest_ald/phase_out/start.yaml +0 -21
  98. policyengine_us/parameters/gov/contrib/reconciliation/auto_loan_interest_ald/phase_out/step.yaml +0 -11
  99. policyengine_us/parameters/gov/contrib/reconciliation/auto_loan_interest_ald/senate_version/applies.yaml +0 -12
  100. policyengine_us/parameters/gov/contrib/reconciliation/cdcc/in_effect.yaml +0 -12
  101. policyengine_us/parameters/gov/contrib/reconciliation/cdcc/phase_out/second_increment.yaml +0 -19
  102. policyengine_us/parameters/gov/contrib/reconciliation/cdcc/phase_out/second_min.yaml +0 -11
  103. policyengine_us/parameters/gov/contrib/reconciliation/cdcc/phase_out/second_start.yaml +0 -19
  104. policyengine_us/parameters/gov/contrib/reconciliation/charitable_donations/floor.yaml +0 -12
  105. policyengine_us/parameters/gov/contrib/reconciliation/charitable_donations/in_effect.yaml +0 -12
  106. policyengine_us/parameters/gov/contrib/reconciliation/ctc/in_effect.yaml +0 -12
  107. policyengine_us/parameters/gov/contrib/reconciliation/ctc/one_person_ssn_req.yaml +0 -12
  108. policyengine_us/parameters/gov/contrib/reconciliation/overtime_income_exempt/cap.yaml +0 -22
  109. policyengine_us/parameters/gov/contrib/reconciliation/overtime_income_exempt/in_effect.yaml +0 -12
  110. policyengine_us/parameters/gov/contrib/reconciliation/overtime_income_exempt/phase_out/applies.yaml +0 -12
  111. policyengine_us/parameters/gov/contrib/reconciliation/overtime_income_exempt/phase_out/rate.yaml +0 -12
  112. policyengine_us/parameters/gov/contrib/reconciliation/overtime_income_exempt/phase_out/start.yaml +0 -24
  113. policyengine_us/parameters/gov/contrib/reconciliation/pease/amended_structure/in_effect.yaml +0 -12
  114. policyengine_us/parameters/gov/contrib/reconciliation/pease/amended_structure/salt_rate.yaml +0 -12
  115. policyengine_us/parameters/gov/contrib/reconciliation/pease/in_effect.yaml +0 -12
  116. policyengine_us/parameters/gov/contrib/reconciliation/pease/rate.yaml +0 -12
  117. policyengine_us/parameters/gov/contrib/reconciliation/qbid/deduction_floor/amount.yaml +0 -21
  118. policyengine_us/parameters/gov/contrib/reconciliation/qbid/deduction_floor/in_effect.yaml +0 -12
  119. policyengine_us/parameters/gov/contrib/reconciliation/qbid/in_effect.yaml +0 -12
  120. policyengine_us/parameters/gov/contrib/reconciliation/qbid/phase_out_rate.yaml +0 -12
  121. policyengine_us/parameters/gov/contrib/reconciliation/qbid/use_bdc_income.yaml +0 -12
  122. policyengine_us/parameters/gov/contrib/reconciliation/tip_income_exempt/cap.yaml +0 -22
  123. policyengine_us/parameters/gov/contrib/reconciliation/tip_income_exempt/in_effect.yaml +0 -12
  124. policyengine_us/parameters/gov/contrib/reconciliation/tip_income_exempt/phase_out/applies.yaml +0 -12
  125. policyengine_us/parameters/gov/contrib/reconciliation/tip_income_exempt/phase_out/rate.yaml +0 -12
  126. policyengine_us/parameters/gov/contrib/reconciliation/tip_income_exempt/phase_out/start.yaml +0 -23
  127. policyengine_us/parameters/gov/contrib/salt_phase_out/floor/amount.yaml +0 -21
  128. policyengine_us/parameters/gov/contrib/salt_phase_out/floor/applies.yaml +0 -11
  129. policyengine_us/parameters/gov/contrib/salt_phase_out/in_effect.yaml +0 -8
  130. policyengine_us/parameters/gov/contrib/salt_phase_out/rate.yaml +0 -13
  131. policyengine_us/parameters/gov/contrib/salt_phase_out/threshold.yaml +0 -21
  132. policyengine_us/reforms/reconciliation/ctc_ssn.py +0 -86
  133. policyengine_us/reforms/reconciliation/reconciled_additional_senior_standard_deduction.py +0 -151
  134. policyengine_us/reforms/reconciliation/reconciled_auto_loan_interest_ald.py +0 -153
  135. policyengine_us/reforms/reconciliation/reconciled_pease.py +0 -85
  136. policyengine_us/reforms/reconciliation/reconciled_qbid.py +0 -78
  137. policyengine_us/reforms/reconciliation/reconciled_tip_and_overtime_exempt.py +0 -177
  138. policyengine_us/reforms/reconciliation/reconciliation_cdcc.py +0 -78
  139. policyengine_us/reforms/reconciliation/reconciliation_charitable_deduction.py +0 -78
  140. policyengine_us/reforms/reconciliation/reconciliation_qbid_with_floor.py +0 -72
  141. policyengine_us/reforms/salt_phase_out/__init__.py +0 -3
  142. policyengine_us/reforms/salt_phase_out/salt_phase_out_reform.py +0 -59
  143. policyengine_us/tests/policy/contrib/reconciliation/ctc_ssn.yaml +0 -150
  144. policyengine_us/tests/policy/contrib/reconciliation/reconciled_additional_senior_standard_deduction.yaml +0 -173
  145. policyengine_us/tests/policy/contrib/reconciliation/reconciled_auto_loan_interest_ald.yaml +0 -96
  146. policyengine_us/tests/policy/contrib/reconciliation/reconciled_pease.yaml +0 -85
  147. policyengine_us/tests/policy/contrib/reconciliation/reconciled_qbid.yaml +0 -31
  148. policyengine_us/tests/policy/contrib/reconciliation/reconciliation_cdcc.yaml +0 -59
  149. policyengine_us/tests/policy/contrib/reconciliation/reconciliation_charitable_deduction.yaml +0 -58
  150. policyengine_us/tests/policy/contrib/reconciliation/reconciliation_qbid_with_floor.yaml +0 -38
  151. policyengine_us/tests/policy/contrib/salt_phase_out/salt_phase_out_reform.yaml +0 -118
  152. {policyengine_us-1.353.0.dist-info → policyengine_us-1.354.0.dist-info}/WHEEL +0 -0
  153. {policyengine_us-1.353.0.dist-info → policyengine_us-1.354.0.dist-info}/entry_points.txt +0 -0
  154. {policyengine_us-1.353.0.dist-info → policyengine_us-1.354.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,78 +0,0 @@
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_reconciliation_cdcc() -> Reform:
7
- class cdcc_rate(Variable):
8
- value_type = float
9
- entity = TaxUnit
10
- label = "CDCC credit rate"
11
- unit = USD
12
- definition_period = YEAR
13
- reference = "https://www.law.cornell.edu/uscode/text/26/21#a_2"
14
-
15
- def formula(tax_unit, period, parameters):
16
- p = parameters(period).gov.irs.credits.cdcc
17
- agi = tax_unit("adjusted_gross_income", period)
18
-
19
- # First phase-out
20
- excess_agi = max_(0, agi - p.phase_out.start)
21
- increments = np.ceil(excess_agi / p.phase_out.increment)
22
- percentage_reduction = increments * p.phase_out.rate
23
- phased_out_rate = max_(
24
- p.phase_out.min, p.phase_out.max - percentage_reduction
25
- )
26
-
27
- # Second phase-out
28
- p_ref = parameters(period).gov.contrib.reconciliation.cdcc
29
- filing_status = tax_unit("filing_status", period)
30
- second_phase_out_start = p_ref.phase_out.second_start[
31
- filing_status
32
- ]
33
- second_excess_agi = max_(0, agi - second_phase_out_start)
34
- second_phase_out_increment = p_ref.phase_out.second_increment[
35
- filing_status
36
- ]
37
- second_increments = np.ceil(
38
- second_excess_agi / second_phase_out_increment
39
- )
40
- second_percentage_reduction = second_increments * p.phase_out.rate
41
- return max_(
42
- p_ref.phase_out.second_min,
43
- phased_out_rate - second_percentage_reduction,
44
- )
45
-
46
- class reform(Reform):
47
- def apply(self):
48
- self.update_variable(cdcc_rate)
49
-
50
- return reform
51
-
52
-
53
- def create_reconciliation_cdcc_reform(
54
- parameters, period, bypass: bool = False
55
- ):
56
- if bypass:
57
- return create_reconciliation_cdcc()
58
-
59
- p = parameters.gov.contrib.reconciliation.cdcc
60
-
61
- reform_active = False
62
- current_period = period_(period)
63
-
64
- for i in range(5):
65
- if p(current_period).in_effect:
66
- reform_active = True
67
- break
68
- current_period = current_period.offset(1, "year")
69
-
70
- if reform_active:
71
- return create_reconciliation_cdcc()
72
- else:
73
- return None
74
-
75
-
76
- reconciliation_cdcc = create_reconciliation_cdcc_reform(
77
- None, None, bypass=True
78
- )
@@ -1,78 +0,0 @@
1
- from policyengine_us.model_api import *
2
- from policyengine_core.periods import period as period_
3
- from policyengine_core.periods import instant
4
- import numpy as np
5
-
6
-
7
- def create_reconciled_charitable_deduction() -> Reform:
8
- class charitable_deduction(Variable):
9
- value_type = float
10
- entity = TaxUnit
11
- label = "Charitable deduction"
12
- unit = USD
13
- documentation = (
14
- "Deduction from taxable income for charitable donations."
15
- )
16
- definition_period = YEAR
17
- reference = "https://www.law.cornell.edu/uscode/text/26/170"
18
-
19
- def formula(tax_unit, period, parameters):
20
- cash_donations = add(
21
- tax_unit, period, ["charitable_cash_donations"]
22
- )
23
- non_cash_donations = add(
24
- tax_unit, period, ["charitable_non_cash_donations"]
25
- )
26
- positive_agi = tax_unit("positive_agi", period)
27
- p = parameters(period).gov.irs.deductions.itemized.charity.ceiling
28
- p_ref = parameters(
29
- period
30
- ).gov.contrib.reconciliation.charitable_donations
31
- deduction_floor = p_ref.floor * positive_agi
32
- reduced_non_cash_donations = max_(
33
- non_cash_donations - deduction_floor, 0
34
- )
35
- capped_non_cash_donations = min_(
36
- reduced_non_cash_donations, p.non_cash * positive_agi
37
- )
38
-
39
- total_cap = p.all * positive_agi
40
- remaining_floor = max_(deduction_floor - non_cash_donations, 0)
41
- reduced_cash_donations = max_(cash_donations - remaining_floor, 0)
42
- return min_(
43
- capped_non_cash_donations + reduced_cash_donations, total_cap
44
- )
45
-
46
- class reform(Reform):
47
- def apply(self):
48
- self.update_variable(charitable_deduction)
49
-
50
- return reform
51
-
52
-
53
- def create_reconciled_charitable_deduction_reform(
54
- parameters, period, bypass: bool = False
55
- ):
56
- if bypass:
57
- return create_reconciled_charitable_deduction()
58
-
59
- p = parameters.gov.contrib.reconciliation.charitable_donations
60
-
61
- reform_active = False
62
- current_period = period_(period)
63
-
64
- for i in range(5):
65
- if p(current_period).in_effect:
66
- reform_active = True
67
- break
68
- current_period = current_period.offset(1, "year")
69
-
70
- if reform_active:
71
- return create_reconciled_charitable_deduction()
72
- else:
73
- return None
74
-
75
-
76
- reconciliation_charitable_deduction = (
77
- create_reconciled_charitable_deduction_reform(None, None, bypass=True)
78
- )
@@ -1,72 +0,0 @@
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_reconciliation_qbid_with_floor() -> Reform:
7
- class qualified_business_income_deduction(Variable):
8
- value_type = float
9
- entity = TaxUnit
10
- label = "Qualified business income deduction for tax unit"
11
- unit = USD
12
- definition_period = YEAR
13
- reference = (
14
- "https://www.law.cornell.edu/uscode/text/26/199A#b_1"
15
- "https://www.irs.gov/pub/irs-prior/p535--2018.pdf"
16
- )
17
-
18
- def formula(tax_unit, period, parameters):
19
- # compute sum of QBID amounts for each person in TaxUnit following
20
- # logic in 2018 IRS Publication 535, Worksheet 12-A, line 16
21
- person = tax_unit.members
22
- qbid_amt = person("qbid_amount", period)
23
- uncapped_qbid = tax_unit.sum(qbid_amt)
24
- # apply taxinc cap at the TaxUnit level following logic
25
- # in 2018 IRS Publication 535, Worksheet 12-A, lines 32-37
26
- taxinc_less_qbid = tax_unit("taxable_income_less_qbid", period)
27
- netcg_qdiv = tax_unit("adjusted_net_capital_gain", period)
28
- p = parameters(period).gov.irs.deductions.qbi.max
29
- taxinc_cap = p.rate * max_(0, taxinc_less_qbid - netcg_qdiv)
30
- pre_floor_qbid = min_(uncapped_qbid, taxinc_cap)
31
- p_ref = parameters(
32
- period
33
- ).gov.contrib.reconciliation.qbid.deduction_floor
34
- qualified_business_income = tax_unit(
35
- "qualified_business_income", period
36
- )
37
- floor = p_ref.amount.calc(qualified_business_income)
38
- return max_(pre_floor_qbid, floor)
39
-
40
- class reform(Reform):
41
- def apply(self):
42
- self.update_variable(qualified_business_income_deduction)
43
-
44
- return reform
45
-
46
-
47
- def create_reconciliation_qbid_with_floor_reform(
48
- parameters, period, bypass: bool = False
49
- ):
50
- if bypass:
51
- return create_reconciliation_qbid_with_floor()
52
-
53
- p = parameters.gov.contrib.reconciliation.qbid.deduction_floor
54
-
55
- reform_active = False
56
- current_period = period_(period)
57
-
58
- for i in range(5):
59
- if p(current_period).in_effect:
60
- reform_active = True
61
- break
62
- current_period = current_period.offset(1, "year")
63
-
64
- if reform_active:
65
- return create_reconciliation_qbid_with_floor()
66
- else:
67
- return None
68
-
69
-
70
- reconciliation_qbid_with_floor = create_reconciliation_qbid_with_floor_reform(
71
- None, None, bypass=True
72
- )
@@ -1,3 +0,0 @@
1
- from .salt_phase_out_reform import (
2
- create_salt_phase_out_reform,
3
- )
@@ -1,59 +0,0 @@
1
- from policyengine_us.model_api import *
2
- from policyengine_core.periods import period as period_
3
-
4
-
5
- def create_salt_phase_out() -> Reform:
6
-
7
- class salt_cap(Variable):
8
- value_type = float
9
- entity = TaxUnit
10
- label = "SALT cap"
11
- unit = USD
12
- definition_period = YEAR
13
- reference = "https://www.law.cornell.edu/uscode/text/26/164"
14
-
15
- def formula(tax_unit, period, parameters):
16
- filing_status = tax_unit("filing_status", period)
17
- p = parameters(
18
- period
19
- ).gov.irs.deductions.itemized.salt_and_real_estate
20
- max_cap = p.cap[filing_status]
21
- p_ref = parameters(period).gov.contrib.salt_phase_out
22
- agi = tax_unit("adjusted_gross_income", period)
23
- agi_excess = max_(0, agi - p_ref.threshold[filing_status])
24
- phase_out = p_ref.rate * agi_excess
25
- phased_out_cap = max_(0, max_cap - phase_out)
26
- if p_ref.floor.applies:
27
- floor = p_ref.floor.amount[filing_status]
28
- return max_(phased_out_cap, floor)
29
- return phased_out_cap
30
-
31
- class reform(Reform):
32
- def apply(self):
33
- self.update_variable(salt_cap)
34
-
35
- return reform
36
-
37
-
38
- def create_salt_phase_out_reform(parameters, period, bypass: bool = False):
39
- if bypass:
40
- return create_salt_phase_out()
41
-
42
- p = parameters.gov.contrib.salt_phase_out
43
-
44
- reform_active = False
45
- current_period = period_(period)
46
-
47
- for i in range(5):
48
- if p(current_period).in_effect:
49
- reform_active = True
50
- break
51
- current_period = current_period.offset(1, "year")
52
-
53
- if reform_active:
54
- return create_salt_phase_out()
55
- else:
56
- return None
57
-
58
-
59
- salt_phase_out_reform = create_salt_phase_out_reform(None, None, bypass=True)
@@ -1,150 +0,0 @@
1
- - name: Case 1, CTC higher than 0.
2
- period: 2026
3
- absolute_error_margin: 0.9
4
- reforms: policyengine_us.reforms.reconciliation.ctc_ssn.ctc_ssn
5
- input:
6
- gov.contrib.reconciliation.ctc.in_effect: true
7
- ctc_maximum_with_arpa_addition: 100
8
- ctc_phase_out: 80
9
- filer_meets_ctc_identification_requirements: true
10
- output:
11
- ctc: 20
12
-
13
- - name: Case 2, CTC capped at 0.
14
- period: 2026
15
- absolute_error_margin: 0.9
16
- reforms: policyengine_us.reforms.reconciliation.ctc_ssn.ctc_ssn
17
- input:
18
- gov.contrib.reconciliation.ctc.in_effect: true
19
- ctc_maximum_with_arpa_addition: 80
20
- ctc_phase_out: 100
21
- filer_meets_ctc_identification_requirements: true
22
- output:
23
- ctc: 0
24
-
25
- - name: Case 3, don't have valid SSN card type, CTC is 0.
26
- period: 2026
27
- absolute_error_margin: 0.9
28
- reforms: policyengine_us.reforms.reconciliation.ctc_ssn.ctc_ssn
29
- input:
30
- gov.contrib.reconciliation.ctc.in_effect: true
31
- ctc_maximum_with_arpa_addition: 100
32
- ctc_phase_out: 80
33
- filer_meets_ctc_identification_requirements: false
34
- output:
35
- ctc: 0
36
-
37
- - name: One person has a valid SSN card type, the other does not
38
- period: 2026
39
- absolute_error_margin: 0.9
40
- reforms: policyengine_us.reforms.reconciliation.ctc_ssn.ctc_ssn
41
- input:
42
- gov.contrib.reconciliation.ctc.in_effect: true
43
- people:
44
- person1:
45
- ssn_card_type: CITIZEN
46
- person2:
47
- ssn_card_type: NONE
48
- output:
49
- meets_ctc_identification_requirements: [true, false]
50
- filer_meets_ctc_identification_requirements: false
51
-
52
- - name: Both people are eligible
53
- period: 2026
54
- absolute_error_margin: 0.9
55
- reforms: policyengine_us.reforms.reconciliation.ctc_ssn.ctc_ssn
56
- input:
57
- gov.contrib.reconciliation.ctc.in_effect: true
58
- people:
59
- person1:
60
- ssn_card_type: CITIZEN
61
- person2:
62
- ssn_card_type: NON_CITIZEN_VALID_EAD
63
- output:
64
- meets_ctc_identification_requirements: [true, true]
65
- filer_meets_ctc_identification_requirements: true
66
-
67
- - name: One of three children eligible
68
- period: 2026
69
- absolute_error_margin: 0.9
70
- reforms: policyengine_us.reforms.reconciliation.ctc_ssn.ctc_ssn
71
- input:
72
- gov.contrib.reconciliation.ctc.in_effect: true
73
- people:
74
- person1:
75
- ssn_card_type: CITIZEN
76
- person2:
77
- ctc_qualifying_child: true
78
- ssn_card_type: NON_CITIZEN_VALID_EAD
79
- person3:
80
- age: 5
81
- ssn_card_type: NONE
82
- person4:
83
- age: 5
84
- ssn_card_type: CITIZEN
85
- output:
86
- ctc_qualifying_children: 1
87
-
88
- - name: One person has a valid SSN card type, the other does not, senate finance rules
89
- period: 2026
90
- absolute_error_margin: 0.9
91
- reforms: policyengine_us.reforms.reconciliation.ctc_ssn.ctc_ssn
92
- input:
93
- gov.contrib.reconciliation.ctc.in_effect: true
94
- gov.contrib.reconciliation.ctc.one_person_ssn_req: true
95
- people:
96
- person1:
97
- ssn_card_type: CITIZEN
98
- person2:
99
- ssn_card_type: NONE
100
- output:
101
- meets_ctc_identification_requirements: [true, false]
102
- filer_meets_ctc_identification_requirements: true
103
-
104
- - name: One person has a valid SSN card type, the other does not, senate finance rules, child status irrelevant
105
- period: 2026
106
- absolute_error_margin: 0.9
107
- reforms: policyengine_us.reforms.reconciliation.ctc_ssn.ctc_ssn
108
- input:
109
- gov.contrib.reconciliation.ctc.in_effect: true
110
- gov.contrib.reconciliation.ctc.one_person_ssn_req: true
111
- people:
112
- person1:
113
- ssn_card_type: CITIZEN
114
- person2:
115
- ssn_card_type: NONE
116
- person3:
117
- age: 5
118
- is_tax_unit_dependent: true
119
- ssn_card_type: NONE
120
- output:
121
- meets_ctc_identification_requirements: [true, false, false]
122
- filer_meets_ctc_identification_requirements: true
123
-
124
- - name: Single person eligible
125
- period: 2026
126
- absolute_error_margin: 0.9
127
- reforms: policyengine_us.reforms.reconciliation.ctc_ssn.ctc_ssn
128
- input:
129
- gov.contrib.reconciliation.ctc.in_effect: true
130
- gov.contrib.reconciliation.ctc.one_person_ssn_req: true
131
- people:
132
- person1:
133
- ssn_card_type: CITIZEN
134
- output:
135
- meets_ctc_identification_requirements: [true]
136
- filer_meets_ctc_identification_requirements: true
137
-
138
- - name: Single person ineligible
139
- period: 2026
140
- absolute_error_margin: 0.9
141
- reforms: policyengine_us.reforms.reconciliation.ctc_ssn.ctc_ssn
142
- input:
143
- gov.contrib.reconciliation.ctc.in_effect: true
144
- gov.contrib.reconciliation.ctc.one_person_ssn_req: true
145
- people:
146
- person1:
147
- ssn_card_type: NONE
148
- output:
149
- meets_ctc_identification_requirements: [false]
150
- filer_meets_ctc_identification_requirements: false
@@ -1,173 +0,0 @@
1
- - name: Two eligible seniors with income below the phase-out
2
- period: 2026
3
- reforms: policyengine_us.reforms.reconciliation.reconciled_additional_senior_standard_deduction.reconciled_additional_senior_standard_deduction
4
- input:
5
- gov.contrib.reconciliation.additional_senior_standard_deduction.in_effect: true
6
- people:
7
- person1:
8
- age: 65
9
- is_tax_unit_head_or_spouse: true
10
- ssn_card_type: CITIZEN
11
- person2:
12
- age: 65
13
- is_tax_unit_head_or_spouse: true
14
- ssn_card_type: CITIZEN
15
- tax_units:
16
- tax_unit:
17
- members: [person1, person2]
18
- filing_status: JOINT
19
- adjusted_gross_income: 100_000
20
- salt_deduction: 0
21
- standard_deduction: 0
22
- output:
23
- additional_senior_standard_deduction: 8_000
24
- taxable_income_deductions_if_itemizing: 8_000
25
- taxable_income_deductions_if_not_itemizing: 8_000
26
-
27
- - name: One eligible senior, no additional SD
28
- period: 2026
29
- reforms: policyengine_us.reforms.reconciliation.reconciled_additional_senior_standard_deduction.reconciled_additional_senior_standard_deduction
30
- input:
31
- gov.contrib.reconciliation.additional_senior_standard_deduction.in_effect: true
32
- people:
33
- person1:
34
- age: 65
35
- is_tax_unit_head_or_spouse: true
36
- ssn_card_type: CITIZEN
37
- person2:
38
- age: 65
39
- is_tax_unit_head_or_spouse: true
40
- ssn_card_type: NONE
41
- tax_units:
42
- tax_unit:
43
- members: [person1, person2]
44
- filing_status: JOINT
45
- adjusted_gross_income: 100_000
46
- salt_deduction: 0
47
- standard_deduction: 0
48
- output:
49
- additional_senior_standard_deduction: 0
50
- taxable_income_deductions_if_itemizing: 0
51
- taxable_income_deductions_if_not_itemizing: 0
52
-
53
- - name: Two eligible seniors, income above the phase-out
54
- period: 2026
55
- reforms: policyengine_us.reforms.reconciliation.reconciled_additional_senior_standard_deduction.reconciled_additional_senior_standard_deduction
56
- input:
57
- gov.contrib.reconciliation.additional_senior_standard_deduction.in_effect: true
58
- people:
59
- person1:
60
- age: 65
61
- is_tax_unit_head_or_spouse: true
62
- ssn_card_type: CITIZEN
63
- person2:
64
- age: 65
65
- is_tax_unit_head_or_spouse: true
66
- ssn_card_type: NON_CITIZEN_VALID_EAD
67
- tax_units:
68
- tax_unit:
69
- members: [person1, person2]
70
- filing_status: JOINT
71
- adjusted_gross_income: 200_000
72
- salt_deduction: 0
73
- standard_deduction: 0
74
- output:
75
- additional_senior_standard_deduction: 6_000
76
- taxable_income_deductions_if_itemizing: 6_000
77
- taxable_income_deductions_if_not_itemizing: 6_000
78
-
79
- - name: Single senior, income above the phase-out, 2025
80
- period: 2025
81
- reforms: policyengine_us.reforms.reconciliation.reconciled_additional_senior_standard_deduction.reconciled_additional_senior_standard_deduction
82
- input:
83
- gov.contrib.reconciliation.additional_senior_standard_deduction.in_effect: true
84
- people:
85
- person1:
86
- age: 65
87
- is_tax_unit_head_or_spouse: true
88
- ssn_card_type: CITIZEN
89
- tax_units:
90
- tax_unit:
91
- members: [person1]
92
- adjusted_gross_income: 90_000
93
- salt_deduction: 0
94
- standard_deduction: 0
95
- output:
96
- additional_senior_standard_deduction: 3_400
97
- taxable_income_deductions_if_itemizing: 3_400
98
- taxable_income_deductions_if_not_itemizing: 3_400
99
-
100
- - name: Single non-senior, income above the phase-out
101
- period: 2026
102
- reforms: policyengine_us.reforms.reconciliation.reconciled_additional_senior_standard_deduction.reconciled_additional_senior_standard_deduction
103
- input:
104
- gov.contrib.reconciliation.additional_senior_standard_deduction.in_effect: true
105
- people:
106
- person1:
107
- age: 64
108
- is_tax_unit_head_or_spouse: true
109
- ssn_card_type: CITIZEN
110
- tax_units:
111
- tax_unit:
112
- members: [person1]
113
- adjusted_gross_income: 90_000
114
- salt_deduction: 0
115
- standard_deduction: 0
116
- output:
117
- additional_senior_standard_deduction: 0
118
- taxable_income_deductions_if_itemizing: 0
119
- taxable_income_deductions_if_not_itemizing: 0
120
-
121
- - name: Test with two structural reforms, tips, overtime and the SD are added
122
- period: 2026
123
- reforms: [policyengine_us.reforms.reconciliation.reconciled_tip_and_overtime_exempt.reconciled_tip_and_overtime_exempt, policyengine_us.reforms.reconciliation.reconciled_additional_senior_standard_deduction.reconciled_additional_senior_standard_deduction]
124
- input:
125
- gov.contrib.reconciliation.additional_senior_standard_deduction.in_effect: true
126
- gov.contrib.reconciliation.tip_income_exempt.in_effect: true
127
- gov.contrib.reconciliation.overtime_income_exempt.in_effect: true
128
- people:
129
- person1:
130
- age: 65
131
- is_tax_unit_head_or_spouse: true
132
- ssn_card_type: CITIZEN
133
- tip_income: 1_000
134
- fsla_overtime_premium: 2_000
135
- tax_units:
136
- tax_unit:
137
- members: [person1]
138
- adjusted_gross_income: 90_000
139
- salt_deduction: 0
140
- standard_deduction: 0
141
- output:
142
- additional_senior_standard_deduction: 3_400
143
- overtime_income_deduction: 2_000
144
- tip_income_deduction: 1_000
145
- taxable_income_deductions_if_itemizing: 6_400
146
- taxable_income_deductions_if_not_itemizing: 6_400
147
-
148
- - name: Testing when reforms are initialized in another order
149
- period: 2026
150
- reforms: [policyengine_us.reforms.reconciliation.reconciled_additional_senior_standard_deduction.reconciled_additional_senior_standard_deduction, policyengine_us.reforms.reconciliation.reconciled_tip_and_overtime_exempt.reconciled_tip_and_overtime_exempt]
151
- input:
152
- gov.contrib.reconciliation.tip_income_exempt.in_effect: true
153
- gov.contrib.reconciliation.overtime_income_exempt.in_effect: true
154
- gov.contrib.reconciliation.additional_senior_standard_deduction.in_effect: true
155
- people:
156
- person1:
157
- age: 65
158
- is_tax_unit_head_or_spouse: true
159
- ssn_card_type: CITIZEN
160
- tip_income: 1_000
161
- fsla_overtime_premium: 2_000
162
- tax_units:
163
- tax_unit:
164
- members: [person1]
165
- adjusted_gross_income: 90_000
166
- salt_deduction: 0
167
- standard_deduction: 0
168
- output:
169
- additional_senior_standard_deduction: 3_400
170
- overtime_income_deduction: 2_000
171
- tip_income_deduction: 1_000
172
- taxable_income_deductions_if_itemizing: 6_400
173
- taxable_income_deductions_if_not_itemizing: 6_400