policyengine-us 1.353.0__py3-none-any.whl → 1.355.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 (176) hide show
  1. policyengine_us/parameters/gov/aca/ineligible_immigration_statuses.yaml +11 -0
  2. policyengine_us/parameters/gov/hhs/medicaid/eligibility/work_requirements/age_range.yaml +25 -0
  3. policyengine_us/parameters/gov/hhs/medicaid/eligibility/work_requirements/applies.yaml +13 -0
  4. policyengine_us/parameters/gov/hhs/medicaid/eligibility/work_requirements/dependent_age_limit.yaml +12 -0
  5. policyengine_us/parameters/gov/hhs/medicaid/eligibility/work_requirements/monthly_hours_threshold.yaml +12 -0
  6. policyengine_us/parameters/gov/irs/credits/cdcc/phase_out/amended_structure/applies.yaml +13 -0
  7. policyengine_us/parameters/gov/irs/credits/cdcc/phase_out/amended_structure/second_increment.yaml +19 -0
  8. policyengine_us/parameters/gov/irs/credits/cdcc/phase_out/amended_structure/second_min.yaml +11 -0
  9. policyengine_us/parameters/gov/irs/credits/cdcc/phase_out/amended_structure/second_start.yaml +21 -0
  10. policyengine_us/parameters/gov/irs/credits/cdcc/phase_out/max.yaml +2 -0
  11. policyengine_us/parameters/gov/irs/credits/cdcc/phase_out/min.yaml +2 -0
  12. policyengine_us/parameters/gov/irs/credits/ctc/adult_ssn_requirement_applies.yaml +11 -0
  13. policyengine_us/parameters/gov/irs/credits/ctc/child_ssn_requirement_applies.yaml +0 -1
  14. policyengine_us/parameters/gov/irs/credits/ctc/eligible_ssn_card_type.yaml +13 -0
  15. policyengine_us/parameters/gov/irs/deductions/auto_loan_interest/cap.yaml +12 -0
  16. policyengine_us/parameters/gov/irs/deductions/auto_loan_interest/phase_out/increment.yaml +11 -0
  17. policyengine_us/parameters/gov/irs/deductions/auto_loan_interest/phase_out/start.yaml +21 -0
  18. policyengine_us/parameters/gov/irs/deductions/auto_loan_interest/phase_out/step.yaml +12 -0
  19. policyengine_us/parameters/gov/irs/deductions/deductions_if_itemizing.yaml +14 -0
  20. policyengine_us/parameters/gov/irs/deductions/deductions_if_not_itemizing.yaml +12 -0
  21. policyengine_us/parameters/gov/irs/deductions/itemized/casualty/active.yaml +0 -1
  22. policyengine_us/parameters/gov/irs/deductions/itemized/charity/ceiling/all.yaml +0 -1
  23. policyengine_us/parameters/gov/irs/deductions/itemized/charity/ceiling/non_cash.yaml +2 -0
  24. policyengine_us/parameters/gov/irs/deductions/itemized/charity/floor/amount.yaml +11 -0
  25. policyengine_us/parameters/gov/irs/deductions/itemized/charity/floor/applies.yaml +12 -0
  26. policyengine_us/parameters/gov/irs/deductions/itemized/charity/non_itemizers_amount.yaml +8 -0
  27. policyengine_us/parameters/gov/irs/deductions/itemized/interest/mortgage/cap.yaml +0 -5
  28. policyengine_us/parameters/gov/irs/deductions/itemized/misc/applies.yaml +0 -1
  29. policyengine_us/parameters/gov/irs/deductions/itemized/reduction/amended_structure/applies.yaml +13 -0
  30. policyengine_us/parameters/gov/irs/deductions/itemized/reduction/amended_structure/rate.yaml +12 -0
  31. policyengine_us/parameters/gov/irs/deductions/itemized/salt_and_real_estate/cap.yaml +30 -5
  32. policyengine_us/parameters/gov/irs/deductions/itemized/salt_and_real_estate/phase_out/floor/amount.yaml +21 -0
  33. policyengine_us/parameters/gov/irs/deductions/itemized/salt_and_real_estate/phase_out/floor/applies.yaml +13 -0
  34. policyengine_us/parameters/gov/irs/deductions/itemized/salt_and_real_estate/phase_out/in_effect.yaml +13 -0
  35. policyengine_us/parameters/gov/irs/deductions/itemized/salt_and_real_estate/phase_out/rate.yaml +12 -0
  36. policyengine_us/parameters/gov/irs/deductions/itemized/salt_and_real_estate/phase_out/threshold.yaml +41 -0
  37. policyengine_us/parameters/gov/irs/deductions/overtime_income/cap.yaml +22 -0
  38. policyengine_us/parameters/gov/irs/deductions/overtime_income/eligible_ssn_card_type.yaml +13 -0
  39. policyengine_us/parameters/gov/irs/deductions/overtime_income/phase_out/rate.yaml +12 -0
  40. policyengine_us/parameters/gov/irs/deductions/overtime_income/phase_out/start.yaml +22 -0
  41. policyengine_us/parameters/gov/irs/deductions/qbi/deduction_floor/amount.yaml +21 -0
  42. policyengine_us/parameters/gov/irs/deductions/qbi/deduction_floor/in_effect.yaml +13 -0
  43. policyengine_us/parameters/gov/irs/deductions/qbi/max/business_property/rate.yaml +1 -6
  44. policyengine_us/parameters/gov/irs/deductions/qbi/max/rate.yaml +1 -2
  45. policyengine_us/parameters/gov/irs/deductions/qbi/max/w2_wages/alt_rate.yaml +1 -6
  46. policyengine_us/parameters/gov/irs/deductions/qbi/max/w2_wages/rate.yaml +1 -6
  47. policyengine_us/parameters/gov/irs/deductions/qbi/phase_out/length.yaml +12 -10
  48. policyengine_us/parameters/gov/irs/deductions/qbi/phase_out/start.yaml +7 -5
  49. policyengine_us/parameters/gov/irs/deductions/senior_deduction/amount.yaml +12 -0
  50. policyengine_us/parameters/gov/irs/deductions/senior_deduction/eligible_ssn_card_type.yaml +13 -0
  51. policyengine_us/parameters/gov/irs/deductions/senior_deduction/phase_out_rate/joint.yaml +20 -0
  52. policyengine_us/parameters/gov/irs/deductions/senior_deduction/phase_out_rate/other.yaml +20 -0
  53. policyengine_us/parameters/gov/irs/deductions/tip_income/cap.yaml +12 -0
  54. policyengine_us/parameters/gov/irs/deductions/tip_income/eligible_ssn_card_type.yaml +13 -0
  55. policyengine_us/parameters/gov/irs/deductions/tip_income/phase_out/rate.yaml +12 -0
  56. policyengine_us/parameters/gov/irs/deductions/tip_income/phase_out/start.yaml +22 -0
  57. policyengine_us/parameters/gov/usda/snap/work_requirements/abawd/age_threshold/dependent.yaml +4 -2
  58. policyengine_us/parameters/gov/usda/snap/work_requirements/abawd/age_threshold/exempted.yaml +4 -1
  59. policyengine_us/parameters/gov/usda/snap/work_requirements/abawd/amended_structure/in_effect.yaml +13 -0
  60. policyengine_us/parameters/gov/usda/snap/work_requirements/abawd/amended_structure/sunset_provisions_apply.yaml +13 -0
  61. policyengine_us/parameters/gov/usda/snap/work_requirements/general/age_threshold/caring_dependent_child.yaml +1 -1
  62. policyengine_us/parameters/gov/usda/snap/work_requirements/general/age_threshold/exempted.yaml +1 -1
  63. policyengine_us/parameters/gov/usda/snap/work_requirements/general/weekly_hours_threshold.yaml +1 -1
  64. policyengine_us/reforms/reconciliation/__init__.py +0 -36
  65. policyengine_us/reforms/reforms.py +0 -63
  66. policyengine_us/tests/policy/baseline/gov/hhs/medicaid/eligibility/medicaid_work_requirement_eligible.yaml +88 -0
  67. policyengine_us/tests/policy/baseline/gov/irs/credits/cdcc/cdcc_rate.yaml +40 -0
  68. policyengine_us/tests/policy/baseline/gov/irs/credits/ctc/maximum/individual/filer_meets_ctc_identification_requirements.yaml +51 -0
  69. policyengine_us/tests/policy/baseline/gov/irs/credits/ctc/maximum/individual/meets_ctc_child_identification_requirements.yaml +2 -2
  70. policyengine_us/tests/policy/baseline/gov/irs/deductions/itemized/salt_and_real_estate/reported_salt.yaml +2 -4
  71. policyengine_us/tests/policy/baseline/gov/irs/deductions/itemized/salt_and_real_estate/salt_deduction.yaml +78 -0
  72. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/auto_loan_interest_deduction.yaml +26 -0
  73. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/itemizing/charitable_deduction.yaml +42 -6
  74. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/itemizing/itemized_taxable_income_deductions_reduction.yaml +18 -5
  75. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/itemizing/misc_deduction.yaml +0 -18
  76. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/overtime_income/overtime_income_deduction.yaml +39 -0
  77. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/overtime_income/overtime_income_deduction_ssn_requirement_met.yaml +53 -0
  78. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/qbid/qualified_business_income_deduction.yaml +33 -0
  79. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/senior_deduction/integration.yaml +107 -0
  80. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/senior_deduction/meets_additional_senior_deduction_identification_requirements.yaml +71 -0
  81. 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
  82. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/tip_income/tip_income_deduction.yaml +79 -0
  83. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/tip_income/tip_income_deduction_ineligible_cardholder_present.yaml +53 -0
  84. policyengine_us/tests/policy/baseline/gov/usda/snap/eligibility/work_requirements/meets_snap_abawd_work_requirements.yaml +105 -0
  85. policyengine_us/variables/gov/hhs/medicaid/eligibility/is_medicaid_eligible.py +9 -0
  86. policyengine_us/variables/gov/hhs/medicaid/eligibility/medicaid_work_requirement_eligible.py +57 -0
  87. policyengine_us/variables/gov/irs/credits/cdcc/cdcc_rate.py +18 -0
  88. policyengine_us/variables/gov/irs/credits/ctc/ctc.py +1 -0
  89. policyengine_us/variables/gov/irs/credits/ctc/maximum/individual/filer_meets_ctc_identification_requirements.py +20 -0
  90. policyengine_us/variables/gov/irs/credits/ctc/maximum/individual/meets_ctc_child_identification_requirements.py +3 -6
  91. policyengine_us/variables/gov/irs/credits/ctc/maximum/individual/meets_ctc_identification_requirements.py +17 -0
  92. policyengine_us/variables/gov/irs/income/taxable_income/deductions/auto_loan_interest/auto_loan_interest_deduction.py +30 -0
  93. policyengine_us/variables/gov/irs/income/taxable_income/deductions/itemizing/charitable_deduction.py +18 -3
  94. policyengine_us/variables/gov/irs/income/taxable_income/deductions/itemizing/itemized_taxable_income_deductions_reduction.py +18 -0
  95. policyengine_us/variables/gov/irs/income/taxable_income/deductions/itemizing/salt_cap.py +12 -2
  96. policyengine_us/variables/gov/irs/income/taxable_income/deductions/overtime_income/overtime_income_deduction.py +24 -0
  97. policyengine_us/variables/gov/irs/income/taxable_income/deductions/overtime_income/overtime_income_deduction_ssn_requirement_met.py +25 -0
  98. policyengine_us/variables/gov/irs/income/taxable_income/deductions/qualified_business_income_deduction/qualified_business_income_deduction.py +10 -3
  99. policyengine_us/variables/gov/irs/income/taxable_income/deductions/senior_deduction/additional_senior_deduction.py +31 -0
  100. policyengine_us/variables/gov/irs/income/taxable_income/deductions/senior_deduction/additional_senior_deduction_eligible_person.py +24 -0
  101. policyengine_us/variables/gov/irs/income/taxable_income/deductions/tax_unit_itemizes.py +0 -1
  102. policyengine_us/variables/gov/irs/income/taxable_income/deductions/tip_income/tip_income_deduction.py +23 -0
  103. policyengine_us/variables/gov/irs/income/taxable_income/deductions/tip_income/tip_income_deduction_ssn_requirement_met.py +25 -0
  104. policyengine_us/variables/gov/usda/snap/eligibility/work_requirements/meets_snap_abawd_work_requirements.py +37 -7
  105. {policyengine_us-1.353.0.dist-info → policyengine_us-1.355.0.dist-info}/METADATA +1 -1
  106. {policyengine_us-1.353.0.dist-info → policyengine_us-1.355.0.dist-info}/RECORD +109 -118
  107. policyengine_us/parameters/gov/contrib/reconciliation/aca_ptc_immigration_status/in_effect.yaml +0 -13
  108. policyengine_us/parameters/gov/contrib/reconciliation/additional_senior_standard_deduction/amount.yaml +0 -12
  109. policyengine_us/parameters/gov/contrib/reconciliation/additional_senior_standard_deduction/in_effect.yaml +0 -12
  110. policyengine_us/parameters/gov/contrib/reconciliation/additional_senior_standard_deduction/rate/joint.yaml +0 -20
  111. policyengine_us/parameters/gov/contrib/reconciliation/additional_senior_standard_deduction/rate/other.yaml +0 -20
  112. policyengine_us/parameters/gov/contrib/reconciliation/auto_loan_interest_ald/cap.yaml +0 -12
  113. policyengine_us/parameters/gov/contrib/reconciliation/auto_loan_interest_ald/in_effect.yaml +0 -13
  114. policyengine_us/parameters/gov/contrib/reconciliation/auto_loan_interest_ald/phase_out/increment.yaml +0 -11
  115. policyengine_us/parameters/gov/contrib/reconciliation/auto_loan_interest_ald/phase_out/start.yaml +0 -21
  116. policyengine_us/parameters/gov/contrib/reconciliation/auto_loan_interest_ald/phase_out/step.yaml +0 -11
  117. policyengine_us/parameters/gov/contrib/reconciliation/auto_loan_interest_ald/senate_version/applies.yaml +0 -12
  118. policyengine_us/parameters/gov/contrib/reconciliation/cdcc/in_effect.yaml +0 -12
  119. policyengine_us/parameters/gov/contrib/reconciliation/cdcc/phase_out/second_increment.yaml +0 -19
  120. policyengine_us/parameters/gov/contrib/reconciliation/cdcc/phase_out/second_min.yaml +0 -11
  121. policyengine_us/parameters/gov/contrib/reconciliation/cdcc/phase_out/second_start.yaml +0 -19
  122. policyengine_us/parameters/gov/contrib/reconciliation/charitable_donations/floor.yaml +0 -12
  123. policyengine_us/parameters/gov/contrib/reconciliation/charitable_donations/in_effect.yaml +0 -12
  124. policyengine_us/parameters/gov/contrib/reconciliation/ctc/in_effect.yaml +0 -12
  125. policyengine_us/parameters/gov/contrib/reconciliation/ctc/one_person_ssn_req.yaml +0 -12
  126. policyengine_us/parameters/gov/contrib/reconciliation/overtime_income_exempt/cap.yaml +0 -22
  127. policyengine_us/parameters/gov/contrib/reconciliation/overtime_income_exempt/in_effect.yaml +0 -12
  128. policyengine_us/parameters/gov/contrib/reconciliation/overtime_income_exempt/phase_out/applies.yaml +0 -12
  129. policyengine_us/parameters/gov/contrib/reconciliation/overtime_income_exempt/phase_out/rate.yaml +0 -12
  130. policyengine_us/parameters/gov/contrib/reconciliation/overtime_income_exempt/phase_out/start.yaml +0 -24
  131. policyengine_us/parameters/gov/contrib/reconciliation/pease/amended_structure/in_effect.yaml +0 -12
  132. policyengine_us/parameters/gov/contrib/reconciliation/pease/amended_structure/salt_rate.yaml +0 -12
  133. policyengine_us/parameters/gov/contrib/reconciliation/pease/in_effect.yaml +0 -12
  134. policyengine_us/parameters/gov/contrib/reconciliation/pease/rate.yaml +0 -12
  135. policyengine_us/parameters/gov/contrib/reconciliation/qbid/deduction_floor/amount.yaml +0 -21
  136. policyengine_us/parameters/gov/contrib/reconciliation/qbid/deduction_floor/in_effect.yaml +0 -12
  137. policyengine_us/parameters/gov/contrib/reconciliation/qbid/in_effect.yaml +0 -12
  138. policyengine_us/parameters/gov/contrib/reconciliation/qbid/phase_out_rate.yaml +0 -12
  139. policyengine_us/parameters/gov/contrib/reconciliation/qbid/use_bdc_income.yaml +0 -12
  140. policyengine_us/parameters/gov/contrib/reconciliation/tip_income_exempt/cap.yaml +0 -22
  141. policyengine_us/parameters/gov/contrib/reconciliation/tip_income_exempt/in_effect.yaml +0 -12
  142. policyengine_us/parameters/gov/contrib/reconciliation/tip_income_exempt/phase_out/applies.yaml +0 -12
  143. policyengine_us/parameters/gov/contrib/reconciliation/tip_income_exempt/phase_out/rate.yaml +0 -12
  144. policyengine_us/parameters/gov/contrib/reconciliation/tip_income_exempt/phase_out/start.yaml +0 -23
  145. policyengine_us/parameters/gov/contrib/salt_phase_out/floor/amount.yaml +0 -21
  146. policyengine_us/parameters/gov/contrib/salt_phase_out/floor/applies.yaml +0 -11
  147. policyengine_us/parameters/gov/contrib/salt_phase_out/in_effect.yaml +0 -8
  148. policyengine_us/parameters/gov/contrib/salt_phase_out/rate.yaml +0 -13
  149. policyengine_us/parameters/gov/contrib/salt_phase_out/threshold.yaml +0 -21
  150. policyengine_us/reforms/reconciliation/aca_ptc_immigration_status.py +0 -55
  151. policyengine_us/reforms/reconciliation/ctc_ssn.py +0 -86
  152. policyengine_us/reforms/reconciliation/reconciled_additional_senior_standard_deduction.py +0 -151
  153. policyengine_us/reforms/reconciliation/reconciled_auto_loan_interest_ald.py +0 -153
  154. policyengine_us/reforms/reconciliation/reconciled_medicaid_work_requirement.py +0 -157
  155. policyengine_us/reforms/reconciliation/reconciled_pease.py +0 -85
  156. policyengine_us/reforms/reconciliation/reconciled_qbid.py +0 -78
  157. policyengine_us/reforms/reconciliation/reconciled_snap_abawd_work_requirement.py +0 -125
  158. policyengine_us/reforms/reconciliation/reconciled_tip_and_overtime_exempt.py +0 -177
  159. policyengine_us/reforms/reconciliation/reconciliation_cdcc.py +0 -78
  160. policyengine_us/reforms/reconciliation/reconciliation_charitable_deduction.py +0 -78
  161. policyengine_us/reforms/reconciliation/reconciliation_qbid_with_floor.py +0 -72
  162. policyengine_us/reforms/salt_phase_out/__init__.py +0 -3
  163. policyengine_us/reforms/salt_phase_out/salt_phase_out_reform.py +0 -59
  164. policyengine_us/tests/policy/contrib/reconciliation/ctc_ssn.yaml +0 -150
  165. policyengine_us/tests/policy/contrib/reconciliation/reconciled_additional_senior_standard_deduction.yaml +0 -173
  166. policyengine_us/tests/policy/contrib/reconciliation/reconciled_auto_loan_interest_ald.yaml +0 -96
  167. policyengine_us/tests/policy/contrib/reconciliation/reconciled_pease.yaml +0 -85
  168. policyengine_us/tests/policy/contrib/reconciliation/reconciled_qbid.yaml +0 -31
  169. policyengine_us/tests/policy/contrib/reconciliation/reconciled_snap_abawd_work_requirement.yaml +0 -118
  170. policyengine_us/tests/policy/contrib/reconciliation/reconciliation_cdcc.yaml +0 -59
  171. policyengine_us/tests/policy/contrib/reconciliation/reconciliation_charitable_deduction.yaml +0 -58
  172. policyengine_us/tests/policy/contrib/reconciliation/reconciliation_qbid_with_floor.yaml +0 -38
  173. policyengine_us/tests/policy/contrib/salt_phase_out/salt_phase_out_reform.yaml +0 -118
  174. {policyengine_us-1.353.0.dist-info → policyengine_us-1.355.0.dist-info}/WHEEL +0 -0
  175. {policyengine_us-1.353.0.dist-info → policyengine_us-1.355.0.dist-info}/entry_points.txt +0 -0
  176. {policyengine_us-1.353.0.dist-info → policyengine_us-1.355.0.dist-info}/licenses/LICENSE +0 -0
@@ -12,10 +12,7 @@ class meets_ctc_child_identification_requirements(Variable):
12
12
  p = parameters(period).gov.irs.credits.ctc
13
13
  if p.child_ssn_requirement_applies:
14
14
  ssn_card_type = person("ssn_card_type", period)
15
- ssn_card_types = ssn_card_type.possible_values
16
- citizen = ssn_card_type == ssn_card_types.CITIZEN
17
- non_citizen_valid_ead = (
18
- ssn_card_type == ssn_card_types.NON_CITIZEN_VALID_EAD
19
- )
20
- return citizen | non_citizen_valid_ead
15
+ ssn_card_str = ssn_card_type.decode_to_str()
16
+ p = parameters(period).gov.irs.credits.ctc
17
+ return np.isin(ssn_card_str, p.eligible_ssn_card_type)
21
18
  return True
@@ -0,0 +1,17 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class meets_ctc_identification_requirements(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ definition_period = YEAR
8
+ label = "Person meets CTC identification requirements"
9
+ reference = (
10
+ "https://www.congress.gov/bill/119th-congress/house-bill/1/text"
11
+ )
12
+
13
+ def formula(person, period, parameters):
14
+ ssn_card_type = person("ssn_card_type", period)
15
+ ssn_card_str = ssn_card_type.decode_to_str()
16
+ p = parameters(period).gov.irs.credits.ctc
17
+ return np.isin(ssn_card_str, p.eligible_ssn_card_type)
@@ -0,0 +1,30 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class auto_loan_interest_deduction(Variable):
5
+ value_type = float
6
+ entity = TaxUnit
7
+ label = "Auto loan interest deduction"
8
+ unit = USD
9
+ definition_period = YEAR
10
+ reference = (
11
+ "https://www.congress.gov/bill/119th-congress/house-bill/1/text"
12
+ )
13
+
14
+ def formula(tax_unit, period, parameters):
15
+ auto_loan_interest = add(tax_unit, period, ["auto_loan_interest"])
16
+ p = parameters(period).gov.irs.deductions.auto_loan_interest
17
+ capped_interest = min_(auto_loan_interest, p.cap)
18
+ # Get filing status.
19
+ filing_status = tax_unit("filing_status", period)
20
+
21
+ # Get the phaseout start amount based on filing status (line 4).
22
+ phaseout_start = p.phase_out.start[filing_status]
23
+ agi_pre_ald = tax_unit("adjusted_gross_income", period)
24
+ # Get the excess amount, if any, in thousands of dollars (rounded up) [lines 5 and 6].
25
+ excess = max_(agi_pre_ald - phaseout_start, 0)
26
+ increments = np.ceil(excess / p.phase_out.increment)
27
+
28
+ # Calculate the excess part phase out amount (line 7).
29
+ phase_out_amount = increments * p.phase_out.step
30
+ return max_(capped_interest - phase_out_amount, 0)
@@ -16,10 +16,25 @@ class charitable_deduction(Variable):
16
16
  tax_unit, period, ["charitable_non_cash_donations"]
17
17
  )
18
18
  positive_agi = tax_unit("positive_agi", period)
19
- p = parameters(period).gov.irs.deductions.itemized.charity.ceiling
19
+ p = parameters(period).gov.irs.deductions.itemized.charity
20
20
  capped_non_cash_donations = min_(
21
- non_cash_donations, p.non_cash * positive_agi
21
+ non_cash_donations, p.ceiling.non_cash * positive_agi
22
22
  )
23
23
 
24
- total_cap = p.all * positive_agi
24
+ total_cap = p.ceiling.all * positive_agi
25
+ if p.floor.applies:
26
+ deduction_floor = p.floor.amount * positive_agi
27
+ reduced_non_cash_donations = max_(
28
+ non_cash_donations - deduction_floor, 0
29
+ )
30
+ capped_reduced_non_cash_donations = min_(
31
+ reduced_non_cash_donations, p.ceiling.non_cash * positive_agi
32
+ )
33
+
34
+ remaining_floor = max_(deduction_floor - non_cash_donations, 0)
35
+ reduced_cash_donations = max_(cash_donations - remaining_floor, 0)
36
+ return min_(
37
+ capped_reduced_non_cash_donations + reduced_cash_donations,
38
+ total_cap,
39
+ )
25
40
  return min_(capped_non_cash_donations + cash_donations, total_cap)
@@ -21,5 +21,23 @@ class itemized_taxable_income_deductions_reduction(Variable):
21
21
  "total_itemized_taxable_income_deductions", period
22
22
  )
23
23
  maximum_deductions_reduction = maximum_deductions * p.rate.base
24
+ if p.amended_structure.applies:
25
+ top_rate_threshold = parameters(
26
+ period
27
+ ).gov.irs.income.bracket.thresholds["6"][filing_status]
28
+ exemptions = tax_unit("exemptions", period)
29
+ taxable_income = max_(0, agi - exemptions)
30
+ taxable_income_excess = max_(
31
+ 0, taxable_income - top_rate_threshold
32
+ )
33
+ total_itemized_deductions = tax_unit(
34
+ "total_itemized_taxable_income_deductions", period
35
+ )
36
+ lesser_of_deductions_or_excess = min_(
37
+ total_itemized_deductions, taxable_income_excess
38
+ )
39
+ return (
40
+ p.amended_structure.rate * lesser_of_deductions_or_excess
41
+ )
24
42
  return min_(agi_excess_reduction, maximum_deductions_reduction)
25
43
  return 0
@@ -10,6 +10,16 @@ class salt_cap(Variable):
10
10
  reference = "https://www.law.cornell.edu/uscode/text/26/164"
11
11
 
12
12
  def formula(tax_unit, period, parameters):
13
- p = parameters(period).gov.irs.deductions.itemized.salt_and_real_estate
14
13
  filing_status = tax_unit("filing_status", period)
15
- return p.cap[filing_status]
14
+ p = parameters(period).gov.irs.deductions.itemized.salt_and_real_estate
15
+ max_cap = p.cap[filing_status]
16
+ if p.phase_out.in_effect:
17
+ agi = tax_unit("adjusted_gross_income", period)
18
+ agi_excess = max_(0, agi - p.phase_out.threshold[filing_status])
19
+ phase_out = p.phase_out.rate * agi_excess
20
+ phased_out_cap = max_(0, max_cap - phase_out)
21
+ if p.phase_out.floor.applies:
22
+ floor = p.phase_out.floor.amount[filing_status]
23
+ return max_(phased_out_cap, floor)
24
+ return phased_out_cap
25
+ return max_cap
@@ -0,0 +1,24 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class overtime_income_deduction(Variable):
5
+ value_type = float
6
+ entity = TaxUnit
7
+ label = "Overtime income deduction"
8
+ unit = USD
9
+ definition_period = YEAR
10
+ defined_for = "overtime_income_deduction_ssn_requirement_met"
11
+
12
+ def formula(tax_unit, period, parameters):
13
+ person = tax_unit.members
14
+ overtime_income = person("fsla_overtime_premium", period)
15
+ agi = tax_unit("adjusted_gross_income", period)
16
+ filing_status = tax_unit("filing_status", period)
17
+ p = parameters(period).gov.irs.deductions.overtime_income
18
+ cap = p.cap[filing_status]
19
+ start = p.phase_out.start[filing_status]
20
+ agi_excess = max_(agi - start, 0)
21
+ phase_out_amount = agi_excess * p.phase_out.rate
22
+ total_overtime_income = tax_unit.sum(overtime_income)
23
+ capped_overtime_income = min_(cap, total_overtime_income)
24
+ return max_(0, capped_overtime_income - phase_out_amount)
@@ -0,0 +1,25 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class overtime_income_deduction_ssn_requirement_met(Variable):
5
+ value_type = bool
6
+ entity = TaxUnit
7
+ label = "SSN requirement met for the overtime income deduction"
8
+ definition_period = YEAR
9
+
10
+ def formula(tax_unit, period, parameters):
11
+ person = tax_unit.members
12
+ ssn_card_type = person("ssn_card_type", period)
13
+ ssn_card_str = ssn_card_type.decode_to_str()
14
+ p = parameters(period).gov.irs.deductions.overtime_income
15
+ eligible_ssn_card_type = np.isin(
16
+ ssn_card_str, p.eligible_ssn_card_type
17
+ )
18
+ joint = tax_unit("tax_unit_is_joint", period)
19
+ head_or_spouse = person("is_tax_unit_head_or_spouse", period)
20
+ eligible_head_or_spouse = eligible_ssn_card_type & head_or_spouse
21
+ return where(
22
+ joint,
23
+ tax_unit.sum(eligible_head_or_spouse) == 2,
24
+ tax_unit.any(eligible_head_or_spouse),
25
+ )
@@ -22,6 +22,13 @@ class qualified_business_income_deduction(Variable):
22
22
  # in 2018 IRS Publication 535, Worksheet 12-A, lines 32-37
23
23
  taxinc_less_qbid = tax_unit("taxable_income_less_qbid", period)
24
24
  netcg_qdiv = tax_unit("adjusted_net_capital_gain", period)
25
- p = parameters(period).gov.irs.deductions.qbi.max
26
- taxinc_cap = p.rate * max_(0, taxinc_less_qbid - netcg_qdiv)
27
- return min_(uncapped_qbid, taxinc_cap)
25
+ p = parameters(period).gov.irs.deductions.qbi
26
+ taxinc_cap = p.max.rate * max_(0, taxinc_less_qbid - netcg_qdiv)
27
+ pre_floor_qbid = min_(uncapped_qbid, taxinc_cap)
28
+ if p.deduction_floor.in_effect:
29
+ qualified_business_income = tax_unit(
30
+ "qualified_business_income", period
31
+ )
32
+ floor = p.deduction_floor.amount.calc(qualified_business_income)
33
+ return max_(pre_floor_qbid, floor)
34
+ return pre_floor_qbid
@@ -0,0 +1,31 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class additional_senior_deduction(Variable):
5
+ value_type = float
6
+ entity = TaxUnit
7
+ label = "Senior deduction"
8
+ unit = USD
9
+ definition_period = YEAR
10
+ reference = (
11
+ "https://www.congress.gov/bill/119th-congress/house-bill/1/text"
12
+ )
13
+
14
+ def formula(tax_unit, period, parameters):
15
+ p = parameters(period).gov.irs.deductions.senior_deduction
16
+ eligible_seniors = add(
17
+ tax_unit,
18
+ period,
19
+ ["additional_senior_deduction_eligible_person"],
20
+ )
21
+
22
+ base_deduction = p.amount * eligible_seniors
23
+ agi = tax_unit("adjusted_gross_income", period)
24
+ filing_status = tax_unit("filing_status", period)
25
+ joint = filing_status == filing_status.possible_values.JOINT
26
+ phase_out_amount = where(
27
+ joint,
28
+ p.phase_out_rate.joint.calc(agi),
29
+ p.phase_out_rate.other.calc(agi),
30
+ )
31
+ return max_(base_deduction - phase_out_amount, 0)
@@ -0,0 +1,24 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class additional_senior_deduction_eligible_person(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ definition_period = YEAR
8
+ label = "Person is eligible for the additional senior deduction"
9
+ reference = (
10
+ "https://www.congress.gov/bill/119th-congress/house-bill/1/text"
11
+ )
12
+
13
+ def formula(person, period, parameters):
14
+ ssn_card_type = person("ssn_card_type", period)
15
+ ssn_card_str = ssn_card_type.decode_to_str()
16
+ p = parameters(period).gov.irs.deductions.senior_deduction
17
+ eligible_ssn_card_type = np.isin(
18
+ ssn_card_str, p.eligible_ssn_card_type
19
+ )
20
+ head_or_spouse = person("is_tax_unit_head_or_spouse", period)
21
+ age = person("age", period)
22
+ p_irs = parameters(period).gov.irs.deductions.standard.aged_or_blind
23
+ aged = age >= p_irs.age_threshold
24
+ return eligible_ssn_card_type & head_or_spouse & aged
@@ -22,7 +22,6 @@ class tax_unit_itemizes(Variable):
22
22
  else:
23
23
  # determine federal itemization behavior by comparing deductions
24
24
  standard_deduction = tax_unit("standard_deduction", period)
25
- p = parameters(period).gov.irs.deductions
26
25
  itemized_deductions = tax_unit(
27
26
  "itemized_taxable_income_deductions", period
28
27
  )
@@ -0,0 +1,23 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class tip_income_deduction(Variable):
5
+ value_type = float
6
+ entity = TaxUnit
7
+ label = "Tip income deduction"
8
+ unit = USD
9
+ definition_period = YEAR
10
+ defined_for = "tip_income_deduction_ssn_requirement_met"
11
+
12
+ def formula(tax_unit, period, parameters):
13
+ person = tax_unit.members
14
+ tip_income = person("tip_income", period)
15
+ agi = tax_unit("adjusted_gross_income", period)
16
+ filing_status = tax_unit("filing_status", period)
17
+ p = parameters(period).gov.irs.deductions.tip_income
18
+ start = p.phase_out.start[filing_status]
19
+ agi_excess = max_(agi - start, 0)
20
+ phase_out_amount = agi_excess * p.phase_out.rate
21
+ total_tip_income = tax_unit.sum(tip_income)
22
+ capped_tip_income = min_(p.cap, total_tip_income)
23
+ return max_(0, capped_tip_income - phase_out_amount)
@@ -0,0 +1,25 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class tip_income_deduction_ssn_requirement_met(Variable):
5
+ value_type = bool
6
+ entity = TaxUnit
7
+ label = "SSN requirement met for the tip income deduction"
8
+ definition_period = YEAR
9
+
10
+ def formula(tax_unit, period, parameters):
11
+ person = tax_unit.members
12
+ ssn_card_type = person("ssn_card_type", period)
13
+ ssn_card_str = ssn_card_type.decode_to_str()
14
+ p = parameters(period).gov.irs.deductions.tip_income
15
+ eligible_ssn_card_type = np.isin(
16
+ ssn_card_str, p.eligible_ssn_card_type
17
+ )
18
+ joint = tax_unit("tax_unit_is_joint", period)
19
+ head_or_spouse = person("is_tax_unit_head_or_spouse", period)
20
+ eligible_head_or_spouse = eligible_ssn_card_type & head_or_spouse
21
+ return where(
22
+ joint,
23
+ tax_unit.sum(eligible_head_or_spouse) == 2,
24
+ tax_unit.any(eligible_head_or_spouse),
25
+ )
@@ -14,16 +14,16 @@ class meets_snap_abawd_work_requirements(Variable):
14
14
  weekly_hours_worked = person("weekly_hours_worked", period.this_year)
15
15
  # Work at least 20 hours a week
16
16
  is_working = weekly_hours_worked >= p.weekly_hours_threshold
17
- # Under 18 or 55 years of age or older are exempted
18
- worked_exempted_age = p.age_threshold.exempted.calc(age)
17
+ # Adults within an age range are exempt
18
+ working_age_exempt = p.age_threshold.exempted.calc(age)
19
19
  # Unable to work due to a physical or mental limitation
20
20
  is_disabled = person("is_disabled", period)
21
21
  # Parent of a household member under 18
22
22
  is_dependent = person("is_tax_unit_dependent", period)
23
- is_child = age < p.age_threshold.dependent
23
+ is_qualifying_child = age < p.age_threshold.dependent
24
24
  is_parent = person("is_parent", period)
25
- has_child = person.spm_unit.any(is_dependent & is_child)
26
- exempted_parent = is_parent & has_child
25
+ has_child = person.spm_unit.any(is_dependent & is_qualifying_child)
26
+ exempt_parent = is_parent & has_child
27
27
  # Exempted from the general work requirements
28
28
  meets_snap_general_work_requirements = person(
29
29
  "meets_snap_general_work_requirements", period
@@ -34,11 +34,41 @@ class meets_snap_abawd_work_requirements(Variable):
34
34
  is_homeless = person.household("is_homeless", period)
35
35
  # A veteran
36
36
  is_veteran = person("is_veteran", period)
37
+ if p.amended_structure.in_effect:
38
+ is_child = person("is_child", period)
39
+ older_child_dependent = (
40
+ is_dependent & is_child & ~is_qualifying_child
41
+ )
42
+ is_married = person.family("is_married", period)
43
+ has_older_child_dependent = person.spm_unit.any(
44
+ older_child_dependent
45
+ )
46
+ is_head_or_spouse = person("is_tax_unit_head_or_spouse", period)
47
+ has_head_or_spouse_working = person.spm_unit.any(
48
+ is_head_or_spouse & is_working
49
+ )
50
+ exempt_married_person = where(
51
+ is_married & has_older_child_dependent,
52
+ has_head_or_spouse_working,
53
+ 0,
54
+ )
55
+ base_conditions = (
56
+ is_working
57
+ | working_age_exempt
58
+ | is_disabled
59
+ | exempt_parent
60
+ | meets_snap_general_work_requirements
61
+ | is_pregnant
62
+ | exempt_married_person
63
+ )
64
+ if p.amended_structure.sunset_provisions_apply:
65
+ return base_conditions
66
+ return base_conditions | is_homeless | is_veteran
37
67
  return (
38
68
  is_working
39
- | worked_exempted_age
69
+ | working_age_exempt
40
70
  | is_disabled
41
- | exempted_parent
71
+ | exempt_parent
42
72
  | meets_snap_general_work_requirements
43
73
  | is_pregnant
44
74
  | is_homeless
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: policyengine-us
3
- Version: 1.353.0
3
+ Version: 1.355.0
4
4
  Summary: Add your description here.
5
5
  Author-email: PolicyEngine <hello@policyengine.org>
6
6
  License-File: LICENSE