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
@@ -0,0 +1,71 @@
1
+ - name: Two eligible seniors
2
+ period: 2025
3
+ input:
4
+ people:
5
+ person1:
6
+ age: 65
7
+ is_tax_unit_head_or_spouse: true
8
+ ssn_card_type: CITIZEN
9
+ person2:
10
+ age: 65
11
+ is_tax_unit_head_or_spouse: true
12
+ ssn_card_type: NON_CITIZEN_VALID_EAD
13
+ tax_units:
14
+ tax_unit:
15
+ members: [person1, person2]
16
+ output:
17
+ additional_senior_deduction_eligible_person: [true, true]
18
+
19
+ - name: One non-senior
20
+ period: 2025
21
+ input:
22
+ people:
23
+ person1:
24
+ age: 65
25
+ is_tax_unit_head_or_spouse: true
26
+ ssn_card_type: CITIZEN
27
+ person2:
28
+ age: 64
29
+ is_tax_unit_head_or_spouse: true
30
+ ssn_card_type: NON_CITIZEN_VALID_EAD
31
+ tax_units:
32
+ tax_unit:
33
+ members: [person1, person2]
34
+ output:
35
+ additional_senior_deduction_eligible_person: [true, false]
36
+
37
+ - name: One senior dependent
38
+ period: 2025
39
+ input:
40
+ people:
41
+ person1:
42
+ age: 65
43
+ is_tax_unit_head_or_spouse: true
44
+ ssn_card_type: CITIZEN
45
+ person2:
46
+ age: 65
47
+ is_tax_unit_head_or_spouse: false
48
+ ssn_card_type: NON_CITIZEN_VALID_EAD
49
+ tax_units:
50
+ tax_unit:
51
+ members: [person1, person2]
52
+ output:
53
+ additional_senior_deduction_eligible_person: [true, false]
54
+
55
+ - name: One person without an SSN card
56
+ period: 2025
57
+ input:
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: NONE
67
+ tax_units:
68
+ tax_unit:
69
+ members: [person1, person2]
70
+ output:
71
+ additional_senior_deduction_eligible_person: [true, false]
@@ -1,68 +1,6 @@
1
- - name: Tip income is exempt but overtime income is not
2
- period: 2026
3
- reforms: policyengine_us.reforms.reconciliation.reconciled_tip_and_overtime_exempt.reconciled_tip_and_overtime_exempt
4
- input:
5
- gov.contrib.reconciliation.tip_income_exempt.in_effect: true
6
- gov.contrib.reconciliation.overtime_income_exempt.in_effect: false
7
- tip_income: 200
8
- fsla_overtime_premium: 300
9
- standard_deduction: 0
10
- qualified_business_income_deduction: 0
11
- charitable_deduction: 0
12
- interest_deduction: 0
13
- salt_deduction: 0
14
- medical_expense_deduction: 0
15
- casualty_loss_deduction: 0
16
- misc_deduction: 0
17
- output:
18
- taxable_income_deductions_if_itemizing: 200
19
- taxable_income_deductions_if_not_itemizing: 200
20
-
21
- - name: Baseline test - no deductions
22
- period: 2026
23
- input:
24
- gov.contrib.reconciliation.tip_income_exempt.in_effect: false
25
- gov.contrib.reconciliation.overtime_income_exempt.in_effect: false
26
- tip_income: 200
27
- fsla_overtime_premium: 300
28
- standard_deduction: 0
29
- qualified_business_income_deduction: 0
30
- charitable_deduction: 0
31
- interest_deduction: 0
32
- salt_deduction: 0
33
- medical_expense_deduction: 0
34
- casualty_loss_deduction: 0
35
- misc_deduction: 0
36
- output:
37
- taxable_income_deductions_if_itemizing: 0
38
- taxable_income_deductions_if_not_itemizing: 0
39
-
40
- - name: Tip income is not exempt but overtime income is
41
- period: 2026
42
- reforms: policyengine_us.reforms.reconciliation.reconciled_tip_and_overtime_exempt.reconciled_tip_and_overtime_exempt
43
- input:
44
- gov.contrib.reconciliation.tip_income_exempt.in_effect: false
45
- gov.contrib.reconciliation.overtime_income_exempt.in_effect: true
46
- tip_income: 200
47
- fsla_overtime_premium: 300
48
- standard_deduction: 0
49
- qualified_business_income_deduction: 0
50
- charitable_deduction: 0
51
- interest_deduction: 0
52
- salt_deduction: 0
53
- medical_expense_deduction: 0
54
- casualty_loss_deduction: 0
55
- misc_deduction: 0
56
- output:
57
- taxable_income_deductions_if_itemizing: 300
58
- taxable_income_deductions_if_not_itemizing: 300
59
-
60
1
  - name: Tip and overtime income are exempt
61
2
  period: 2026
62
- reforms: policyengine_us.reforms.reconciliation.reconciled_tip_and_overtime_exempt.reconciled_tip_and_overtime_exempt
63
3
  input:
64
- gov.contrib.reconciliation.tip_income_exempt.in_effect: true
65
- gov.contrib.reconciliation.overtime_income_exempt.in_effect: true
66
4
  tip_income: 200
67
5
  fsla_overtime_premium: 300
68
6
  standard_deduction: 0
@@ -77,12 +15,9 @@
77
15
  taxable_income_deductions_if_itemizing: 500
78
16
  taxable_income_deductions_if_not_itemizing: 500
79
17
 
80
- - name: Test for SSN card type - head eligible
18
+ - name: Test for SSN card type - head eligible - no deduction allowed
81
19
  period: 2026
82
- reforms: policyengine_us.reforms.reconciliation.reconciled_tip_and_overtime_exempt.reconciled_tip_and_overtime_exempt
83
20
  input:
84
- gov.contrib.reconciliation.tip_income_exempt.in_effect: true
85
- gov.contrib.reconciliation.overtime_income_exempt.in_effect: true
86
21
  people:
87
22
  person1:
88
23
  ssn_card_type: CITIZEN
@@ -104,15 +39,14 @@
104
39
  casualty_loss_deduction: 0
105
40
  misc_deduction: 0
106
41
  output:
107
- taxable_income_deductions_if_itemizing: 500
108
- taxable_income_deductions_if_not_itemizing: 500
42
+ tip_income_deduction: 0
43
+ overtime_income_deduction: 0
44
+ taxable_income_deductions_if_itemizing: 0
45
+ taxable_income_deductions_if_not_itemizing: 0
109
46
 
110
- - name: Test for SSN card type - spouse eligible
47
+ - name: Test for SSN card type - spouse eligible - no deduction allowed
111
48
  period: 2026
112
- reforms: policyengine_us.reforms.reconciliation.reconciled_tip_and_overtime_exempt.reconciled_tip_and_overtime_exempt
113
49
  input:
114
- gov.contrib.reconciliation.tip_income_exempt.in_effect: true
115
- gov.contrib.reconciliation.overtime_income_exempt.in_effect: true
116
50
  people:
117
51
  person1:
118
52
  ssn_card_type: NONE
@@ -134,16 +68,43 @@
134
68
  casualty_loss_deduction: 0
135
69
  misc_deduction: 0
136
70
  output:
137
- taxable_income_deductions_if_itemizing: 1_500
138
- taxable_income_deductions_if_not_itemizing: 1_500
71
+ tip_income_deduction: 0
72
+ overtime_income_deduction: 0
73
+ taxable_income_deductions_if_itemizing: 0
74
+ taxable_income_deductions_if_not_itemizing: 0
75
+
76
+ - name: Test for SSN card type - both eligible
77
+ period: 2026
78
+ input:
79
+ people:
80
+ person1:
81
+ ssn_card_type: CITIZEN
82
+ tip_income: 200
83
+ fsla_overtime_premium: 300
84
+ person2:
85
+ ssn_card_type: NON_CITIZEN_VALID_EAD
86
+ tip_income: 600
87
+ fsla_overtime_premium: 900
88
+ tax_units:
89
+ tax_unit:
90
+ members: [person1, person2]
91
+ standard_deduction: 0
92
+ qualified_business_income_deduction: 0
93
+ charitable_deduction: 0
94
+ interest_deduction: 0
95
+ salt_deduction: 0
96
+ medical_expense_deduction: 0
97
+ casualty_loss_deduction: 0
98
+ misc_deduction: 0
99
+ output:
100
+ tip_income_deduction: 800
101
+ overtime_income_deduction: 1_200
102
+ taxable_income_deductions_if_itemizing: 2_000
103
+ taxable_income_deductions_if_not_itemizing: 2_000
139
104
 
140
105
  - name: Phase out structure applies, joint filing status, agi below phase out start
141
106
  period: 2026
142
- reforms: policyengine_us.reforms.reconciliation.reconciled_tip_and_overtime_exempt.reconciled_tip_and_overtime_exempt
143
107
  input:
144
- gov.contrib.reconciliation.tip_income_exempt.in_effect: true
145
- gov.contrib.reconciliation.overtime_income_exempt.in_effect: true
146
- gov.contrib.reconciliation.overtime_income_exempt.phase_out.applies: true
147
108
  people:
148
109
  person1:
149
110
  ssn_card_type: NON_CITIZEN_VALID_EAD
@@ -170,11 +131,7 @@
170
131
 
171
132
  - name: Phase out structure applies, joint filing status, agi below phase out start, head not eligible
172
133
  period: 2026
173
- reforms: policyengine_us.reforms.reconciliation.reconciled_tip_and_overtime_exempt.reconciled_tip_and_overtime_exempt
174
134
  input:
175
- gov.contrib.reconciliation.tip_income_exempt.in_effect: true
176
- gov.contrib.reconciliation.overtime_income_exempt.in_effect: true
177
- gov.contrib.reconciliation.overtime_income_exempt.phase_out.applies: true
178
135
  people:
179
136
  person1:
180
137
  ssn_card_type: NONE
@@ -201,11 +158,7 @@
201
158
 
202
159
  - name: Phase out structure applies, joint filing status, agi below phase out start, child without ssn card
203
160
  period: 2026
204
- reforms: policyengine_us.reforms.reconciliation.reconciled_tip_and_overtime_exempt.reconciled_tip_and_overtime_exempt
205
161
  input:
206
- gov.contrib.reconciliation.tip_income_exempt.in_effect: true
207
- gov.contrib.reconciliation.overtime_income_exempt.in_effect: true
208
- gov.contrib.reconciliation.overtime_income_exempt.phase_out.applies: true
209
162
  people:
210
163
  person1:
211
164
  ssn_card_type: NON_CITIZEN_VALID_EAD
@@ -235,11 +188,7 @@
235
188
 
236
189
  - name: Phase out structure applies, joint filing status, agi below phase out start, partially phased out
237
190
  period: 2026
238
- reforms: policyengine_us.reforms.reconciliation.reconciled_tip_and_overtime_exempt.reconciled_tip_and_overtime_exempt
239
191
  input:
240
- gov.contrib.reconciliation.tip_income_exempt.in_effect: true
241
- gov.contrib.reconciliation.overtime_income_exempt.in_effect: true
242
- gov.contrib.reconciliation.overtime_income_exempt.phase_out.applies: true
243
192
  people:
244
193
  person1:
245
194
  ssn_card_type: NON_CITIZEN_VALID_EAD
@@ -266,11 +215,7 @@
266
215
 
267
216
  - name: Phase out structure applies, joint filing status, agi below phase out start, fully phased out
268
217
  period: 2026
269
- reforms: policyengine_us.reforms.reconciliation.reconciled_tip_and_overtime_exempt.reconciled_tip_and_overtime_exempt
270
218
  input:
271
- gov.contrib.reconciliation.tip_income_exempt.in_effect: true
272
- gov.contrib.reconciliation.overtime_income_exempt.in_effect: true
273
- gov.contrib.reconciliation.overtime_income_exempt.phase_out.applies: true
274
219
  people:
275
220
  person1:
276
221
  ssn_card_type: NON_CITIZEN_VALID_EAD
@@ -297,11 +242,7 @@
297
242
 
298
243
  - name: Tip income phase out structure applies, joint filing status, agi below phase out start
299
244
  period: 2026
300
- reforms: policyengine_us.reforms.reconciliation.reconciled_tip_and_overtime_exempt.reconciled_tip_and_overtime_exempt
301
245
  input:
302
- gov.contrib.reconciliation.tip_income_exempt.in_effect: true
303
- gov.contrib.reconciliation.overtime_income_exempt.in_effect: true
304
- gov.contrib.reconciliation.tip_income_exempt.phase_out.applies: true
305
246
  people:
306
247
  person1:
307
248
  ssn_card_type: NON_CITIZEN_VALID_EAD
@@ -328,11 +269,7 @@
328
269
 
329
270
  - name: Tip income phase out structure applies, joint filing status, agi below phase out start, head not eligible
330
271
  period: 2026
331
- reforms: policyengine_us.reforms.reconciliation.reconciled_tip_and_overtime_exempt.reconciled_tip_and_overtime_exempt
332
272
  input:
333
- gov.contrib.reconciliation.tip_income_exempt.in_effect: true
334
- gov.contrib.reconciliation.overtime_income_exempt.in_effect: true
335
- gov.contrib.reconciliation.tip_income_exempt.phase_out.applies: true
336
273
  people:
337
274
  person1:
338
275
  ssn_card_type: NONE
@@ -359,11 +296,7 @@
359
296
 
360
297
  - name: Tip income phase out structure applies, joint filing status, agi below phase out start, child without ssn card
361
298
  period: 2026
362
- reforms: policyengine_us.reforms.reconciliation.reconciled_tip_and_overtime_exempt.reconciled_tip_and_overtime_exempt
363
299
  input:
364
- gov.contrib.reconciliation.tip_income_exempt.in_effect: true
365
- gov.contrib.reconciliation.overtime_income_exempt.in_effect: true
366
- gov.contrib.reconciliation.tip_income_exempt.phase_out.applies: true
367
300
  people:
368
301
  person1:
369
302
  ssn_card_type: NON_CITIZEN_VALID_EAD
@@ -393,11 +326,7 @@
393
326
 
394
327
  - name: Tip income phase out structure applies, joint filing status, agi below phase out start, partially phased out
395
328
  period: 2026
396
- reforms: policyengine_us.reforms.reconciliation.reconciled_tip_and_overtime_exempt.reconciled_tip_and_overtime_exempt
397
329
  input:
398
- gov.contrib.reconciliation.tip_income_exempt.in_effect: true
399
- gov.contrib.reconciliation.overtime_income_exempt.in_effect: true
400
- gov.contrib.reconciliation.tip_income_exempt.phase_out.applies: true
401
330
  people:
402
331
  person1:
403
332
  ssn_card_type: NON_CITIZEN_VALID_EAD
@@ -424,11 +353,7 @@
424
353
 
425
354
  - name: Tip income phase out structure applies, joint filing status, agi below phase out start, fully phased out
426
355
  period: 2026
427
- reforms: policyengine_us.reforms.reconciliation.reconciled_tip_and_overtime_exempt.reconciled_tip_and_overtime_exempt
428
356
  input:
429
- gov.contrib.reconciliation.tip_income_exempt.in_effect: true
430
- gov.contrib.reconciliation.overtime_income_exempt.in_effect: true
431
- gov.contrib.reconciliation.tip_income_exempt.phase_out.applies: true
432
357
  people:
433
358
  person1:
434
359
  ssn_card_type: NON_CITIZEN_VALID_EAD
@@ -0,0 +1,79 @@
1
+ - name: Ineligible cardholder present
2
+ period: 2025
3
+ input:
4
+ tip_income_deduction_ssn_requirement_met: false
5
+ tip_income: 10_000
6
+ adjusted_gross_income: 100_000
7
+ filing_status: JOINT
8
+ output:
9
+ tip_income_deduction: 0
10
+
11
+ - name: AGI below phase out start
12
+ period: 2025
13
+ input:
14
+ tip_income_deduction_ssn_requirement_met: true
15
+ tip_income: 10_000
16
+ adjusted_gross_income: 100_000
17
+ filing_status: JOINT
18
+ output:
19
+ tip_income_deduction: 10_000
20
+
21
+ - name: Fully phased out
22
+ period: 2025
23
+ input:
24
+ tip_income_deduction_ssn_requirement_met: true
25
+ tip_income: 10_000
26
+ adjusted_gross_income: 1_000_000
27
+ filing_status: JOINT
28
+ output:
29
+ tip_income_deduction: 0
30
+
31
+ - name: Partially phased out
32
+ period: 2025
33
+ input:
34
+ tip_income_deduction_ssn_requirement_met: true
35
+ tip_income: 10_000
36
+ adjusted_gross_income: 190_000
37
+ filing_status: JOINT
38
+ output:
39
+ tip_income_deduction: 10_000
40
+
41
+ - name: Ineligible cardholder present
42
+ period: 2025
43
+ input:
44
+ people:
45
+ person1:
46
+ ssn_card_type: CITIZEN
47
+ is_tax_unit_head: true
48
+ is_tax_unit_spouse: false
49
+ tip_income: 1_000
50
+ person2:
51
+ ssn_card_type: OTHER_NON_CITIZEN
52
+ is_tax_unit_head: false
53
+ is_tax_unit_spouse: true
54
+ tax_units:
55
+ tax_unit:
56
+ members: [person1, person2]
57
+ output:
58
+ tip_income_deduction_ssn_requirement_met: false
59
+ tip_income_deduction: 0
60
+
61
+ - name: Ineligible cardholder not present
62
+ period: 2025
63
+ input:
64
+ people:
65
+ person1:
66
+ ssn_card_type: CITIZEN
67
+ is_tax_unit_head: true
68
+ is_tax_unit_spouse: false
69
+ person2:
70
+ ssn_card_type: CITIZEN
71
+ is_tax_unit_head: true
72
+ is_tax_unit_spouse: false
73
+ tip_income: 1_000
74
+ tax_units:
75
+ tax_unit:
76
+ members: [person1, person2]
77
+ output:
78
+ tip_income_deduction_ssn_requirement_met: true
79
+ tip_income_deduction: 1_000
@@ -0,0 +1,53 @@
1
+ - name: Ineligible cardholder present
2
+ period: 2025
3
+ input:
4
+ people:
5
+ person1:
6
+ ssn_card_type: CITIZEN
7
+ is_tax_unit_head: true
8
+ is_tax_unit_spouse: false
9
+ person2:
10
+ ssn_card_type: OTHER_NON_CITIZEN
11
+ is_tax_unit_head: false
12
+ is_tax_unit_spouse: true
13
+ tax_units:
14
+ tax_unit:
15
+ members: [person1, person2]
16
+ output:
17
+ tip_income_deduction_ssn_requirement_met: false
18
+
19
+ - name: Ineligible cardholder present, but not head or spouse
20
+ period: 2025
21
+ input:
22
+ people:
23
+ person1:
24
+ ssn_card_type: CITIZEN
25
+ is_tax_unit_head: true
26
+ is_tax_unit_spouse: false
27
+ person2:
28
+ ssn_card_type: OTHER_NON_CITIZEN
29
+ is_tax_unit_head: false
30
+ is_tax_unit_spouse: false
31
+ tax_units:
32
+ tax_unit:
33
+ members: [person1, person2]
34
+ output:
35
+ tip_income_deduction_ssn_requirement_met: true
36
+
37
+ - name: Ineligible cardholder not present
38
+ period: 2025
39
+ input:
40
+ people:
41
+ person1:
42
+ ssn_card_type: CITIZEN
43
+ is_tax_unit_head: true
44
+ is_tax_unit_spouse: false
45
+ person2:
46
+ ssn_card_type: NON_CITIZEN_VALID_EAD
47
+ is_tax_unit_head: true
48
+ is_tax_unit_spouse: false
49
+ tax_units:
50
+ tax_unit:
51
+ members: [person1, person2]
52
+ output:
53
+ tip_income_deduction_ssn_requirement_met: true
@@ -84,3 +84,108 @@
84
84
  members: [person1, person2]
85
85
  output:
86
86
  meets_snap_abawd_work_requirements: [false, true]
87
+
88
+ - name: Case 1, baseline, age 55 exempted from general work requirement.
89
+ period: 2026
90
+ absolute_error_margin: 0.9
91
+ input:
92
+ age: 55
93
+ weekly_hours_worked: 1
94
+ is_disabled: false
95
+ output:
96
+ meets_snap_abawd_work_requirements: true
97
+
98
+ - name: Case 2, reform, age 55 is not exempted from general work requirement.
99
+ period: 2027
100
+ absolute_error_margin: 0.9
101
+ input:
102
+ age: 55
103
+ weekly_hours_worked: 1
104
+ is_disabled: false
105
+ output:
106
+ meets_snap_abawd_work_requirements: false
107
+
108
+ - name: Case 3, baseline, have a child at age 15.
109
+ period: 2026-01
110
+ absolute_error_margin: 0.9
111
+ input:
112
+ people:
113
+ person1:
114
+ age: 55
115
+ weekly_hours_worked: 1
116
+ is_disabled: false
117
+ is_parent: true
118
+ person2:
119
+ age: 15
120
+ is_disabled: false
121
+ is_tax_unit_dependent: true
122
+ output:
123
+ meets_snap_abawd_work_requirements: [true, true]
124
+
125
+ - name: Case 4, reform, have a child at age 15.
126
+ period: 2027
127
+ absolute_error_margin: 0.9
128
+ input:
129
+ people:
130
+ person1:
131
+ age: 55
132
+ weekly_hours_worked: 1
133
+ is_disabled: false
134
+ is_parent: true
135
+ person2:
136
+ age: 15
137
+ is_disabled: false
138
+ is_tax_unit_dependent: true
139
+ output:
140
+ meets_snap_abawd_work_requirements: [false, true]
141
+
142
+ - name: Case 5, reform, have a child at age 6.
143
+ period: 2027
144
+ absolute_error_margin: 0.9
145
+ input:
146
+ people:
147
+ person1:
148
+ age: 55
149
+ weekly_hours_worked: 1
150
+ is_disabled: false
151
+ is_parent: true
152
+ person2:
153
+ age: 6
154
+ is_disabled: false
155
+ is_tax_unit_dependent: true
156
+ output:
157
+ meets_snap_abawd_work_requirements: [true, true]
158
+
159
+ - name: Case 6, reform, is veteran with a child 15 in 2027.
160
+ period: 2027
161
+ absolute_error_margin: 0.9
162
+ input:
163
+ people:
164
+ person1:
165
+ age: 55
166
+ weekly_hours_worked: 1
167
+ is_disabled: false
168
+ is_veteran: true
169
+ person2:
170
+ age: 15
171
+ is_disabled: false
172
+ is_tax_unit_dependent: true
173
+ output:
174
+ meets_snap_abawd_work_requirements: [true, true]
175
+
176
+ - name: Case 7, reform, is veteran with a child 15 in 2031, sunset provision in effect.
177
+ period: 2031
178
+ absolute_error_margin: 0.9
179
+ input:
180
+ people:
181
+ person1:
182
+ age: 55
183
+ weekly_hours_worked: 1
184
+ is_disabled: false
185
+ is_veteran: true
186
+ person2:
187
+ age: 15
188
+ is_disabled: false
189
+ is_tax_unit_dependent: true
190
+ output:
191
+ meets_snap_abawd_work_requirements: [false, true]
@@ -25,6 +25,15 @@ class is_medicaid_eligible(Variable):
25
25
  ~undocumented | undocumented & state_covers_undocumented
26
26
  )
27
27
  ca_ffyp_eligible = person("ca_ffyp_eligible", period)
28
+ if p.work_requirements.applies:
29
+ work_requirement_eligible = person(
30
+ "medicaid_work_requirement_eligible", period
31
+ )
32
+ return (
33
+ categorically_eligible
34
+ & immigration_status_eligible
35
+ & work_requirement_eligible
36
+ ) | ca_ffyp_eligible
28
37
  return (
29
38
  categorically_eligible & immigration_status_eligible
30
39
  ) | ca_ffyp_eligible
@@ -0,0 +1,57 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class medicaid_work_requirement_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Eligible person for Medicaid via work requirement"
8
+ definition_period = YEAR
9
+ reference = (
10
+ "https://www.congress.gov/bill/119th-congress/house-bill/1/text"
11
+ )
12
+
13
+ def formula(person, period, parameters):
14
+ p = parameters(period).gov.hhs.medicaid.eligibility.work_requirements
15
+ # Works no less than 80 hours p.680 (2)(A)
16
+ monthly_hours_worked = person("monthly_hours_worked", period)
17
+ meets_monthly_work_hours = (
18
+ monthly_hours_worked >= p.monthly_hours_threshold
19
+ )
20
+ # The individual is enrolled in an educational program at least half-time. p.680 (2)(D)
21
+ is_full_time_student = person("is_full_time_student", period)
22
+ # pregnant or postpartum medical assistance p.681 (3)(A)(i)(II)(bb)
23
+ is_pregnant = person("is_pregnant", period)
24
+ # Has attained age of 19 and is under 65 is require to work p.693 (bb)
25
+ age = person("age", period)
26
+ work_required_age = p.age_range.calc(age)
27
+ # parent, guardian, caretaker of a disabled person
28
+ is_dependent = person("is_tax_unit_dependent", period)
29
+ is_disabled = person("is_disabled", period)
30
+ has_disabled = person.tax_unit.any(is_dependent & is_disabled)
31
+ # veteran and is_permanently_and_totally_disabled p.694 (IV)
32
+ is_veteran = person("is_veteran", period)
33
+ is_permanently_and_totally_disabled = person(
34
+ "is_permanently_and_totally_disabled", period
35
+ )
36
+ eligible_veteran = is_veteran & is_permanently_and_totally_disabled
37
+ # blind or disabled or is_incapable_of_self_care p.694 (V)
38
+ is_blind = person("is_blind", period)
39
+ is_incapable_of_self_care = person("is_incapable_of_self_care", period)
40
+ eligible_disabled = is_blind | is_disabled | is_incapable_of_self_care
41
+ # parent, guardian, caretaker of a dependent child 13 years of age or under p.694 (III)
42
+ child_age_eligible = age <= p.dependent_age_limit
43
+ has_eligible_dependent_child = person.tax_unit.any(
44
+ is_dependent & child_age_eligible
45
+ )
46
+ exempted_from_work = (
47
+ is_full_time_student
48
+ | is_pregnant
49
+ | has_disabled
50
+ | eligible_veteran
51
+ | eligible_disabled
52
+ )
53
+ meets_base_requirement = meets_monthly_work_hours | exempted_from_work
54
+ meets_conditions = (
55
+ meets_base_requirement | has_eligible_dependent_child
56
+ )
57
+ return where(work_required_age, meets_conditions, True)
@@ -25,4 +25,22 @@ class cdcc_rate(Variable):
25
25
  second_excess_agi = max_(0, agi - p.phase_out.second_start)
26
26
  second_increments = np.ceil(second_excess_agi / p.phase_out.increment)
27
27
  second_percentage_reduction = second_increments * p.phase_out.rate
28
+ if p.phase_out.amended_structure.applies:
29
+ # Second phase-out is amended post 2025
30
+ filing_status = tax_unit("filing_status", period)
31
+ second_phase_out_start = (
32
+ p.phase_out.amended_structure.second_start[filing_status]
33
+ )
34
+ second_excess_agi = max_(0, agi - second_phase_out_start)
35
+ second_phase_out_increment = (
36
+ p.phase_out.amended_structure.second_increment[filing_status]
37
+ )
38
+ second_increments = np.ceil(
39
+ second_excess_agi / second_phase_out_increment
40
+ )
41
+ second_percentage_reduction = second_increments * p.phase_out.rate
42
+ return max_(
43
+ p.phase_out.amended_structure.second_min,
44
+ phased_out_rate - second_percentage_reduction,
45
+ )
28
46
  return max_(0, phased_out_rate - second_percentage_reduction)
@@ -8,6 +8,7 @@ class ctc(Variable):
8
8
  unit = USD
9
9
  documentation = "Total value of the non-refundable and refundable portions of the Child Tax Credit."
10
10
  definition_period = YEAR
11
+ defined_for = "filer_meets_ctc_identification_requirements"
11
12
  reference = "https://www.law.cornell.edu/uscode/text/26/24#a"
12
13
 
13
14
  def formula(tax_unit, period, parameters):
@@ -0,0 +1,20 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class filer_meets_ctc_identification_requirements(Variable):
5
+ value_type = bool
6
+ entity = TaxUnit
7
+ definition_period = YEAR
8
+ label = "Filer meets CTC identification requirements"
9
+
10
+ def formula(tax_unit, period, parameters):
11
+ # Both head and spouse in the tax unit must have valid SSN card type to be eligible for the CTC
12
+ p = parameters(period).gov.irs.credits.ctc
13
+ if p.adult_ssn_requirement_applies:
14
+ person = tax_unit.members
15
+ head_or_spouse = person("is_tax_unit_head_or_spouse", period)
16
+ eligible_ssn_card_type = person(
17
+ "meets_ctc_identification_requirements", period
18
+ )
19
+ return tax_unit.any(head_or_spouse & eligible_ssn_card_type)
20
+ return True