policyengine-us 1.458.0__py3-none-any.whl → 1.465.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.
Files changed (200) hide show
  1. policyengine_us/parameters/gov/contrib/aca/ptc_700_fpl_cliff/brackets.yaml +52 -0
  2. policyengine_us/parameters/gov/contrib/aca/ptc_700_fpl_cliff/in_effect.yaml +9 -0
  3. policyengine_us/parameters/gov/contrib/aca/ptc_700_fpl_cliff/income_eligibility.yaml +27 -0
  4. policyengine_us/parameters/gov/hhs/medicare/savings_programs/eligibility/asset/applies.yaml +115 -0
  5. policyengine_us/parameters/gov/hhs/medicare/savings_programs/eligibility/asset/couple.yaml +14 -0
  6. policyengine_us/parameters/gov/hhs/medicare/savings_programs/eligibility/asset/individual.yaml +14 -0
  7. policyengine_us/parameters/gov/hhs/medicare/savings_programs/eligibility/income/qi/fpl_limit.yaml +14 -0
  8. policyengine_us/parameters/gov/hhs/medicare/savings_programs/eligibility/income/qmb/fpl_limit.yaml +18 -0
  9. policyengine_us/parameters/gov/hhs/medicare/savings_programs/eligibility/income/slmb/fpl_limit.yaml +15 -0
  10. policyengine_us/parameters/gov/states/az/tax/income/credits/property_tax/income_sources.yaml +17 -9
  11. policyengine_us/parameters/gov/states/hi/tax/income/credits/food_excise_tax/amount/head_of_household.yaml +1 -1
  12. policyengine_us/parameters/gov/states/hi/tax/income/credits/food_excise_tax/amount/joint.yaml +1 -1
  13. policyengine_us/parameters/gov/states/hi/tax/income/credits/food_excise_tax/amount/separate.yaml +1 -1
  14. policyengine_us/parameters/gov/states/hi/tax/income/credits/food_excise_tax/amount/single.yaml +1 -1
  15. policyengine_us/parameters/gov/states/hi/tax/income/credits/food_excise_tax/amount/surviving_spouse.yaml +1 -1
  16. policyengine_us/parameters/gov/states/ia/tax/income/credits/child_care/fraction.yaml +1 -1
  17. policyengine_us/parameters/gov/states/il/dhs/aabd/asset/sources.yaml +0 -1
  18. policyengine_us/parameters/gov/states/mi/tax/income/household_resources.yaml +1 -1
  19. policyengine_us/parameters/gov/states/mo/dss/tanf/child_care_deduction/amount.yaml +27 -0
  20. policyengine_us/parameters/gov/states/mo/dss/tanf/earned_income_disregard/amount.yaml +14 -0
  21. policyengine_us/parameters/gov/states/mo/dss/tanf/earned_income_disregard/thirty_only/amount.yaml +14 -0
  22. policyengine_us/parameters/gov/states/mo/dss/tanf/earned_income_disregard/thirty_plus_one_third/flat_amount.yaml +14 -0
  23. policyengine_us/parameters/gov/states/mo/dss/tanf/earned_income_disregard/thirty_plus_one_third/percentage.yaml +14 -0
  24. policyengine_us/parameters/gov/states/mo/dss/tanf/earned_income_disregard/two_thirds_disregard/percentage.yaml +14 -0
  25. policyengine_us/parameters/gov/states/mo/dss/tanf/income_limit/max_table_size.yaml +12 -0
  26. policyengine_us/parameters/gov/states/mo/dss/tanf/income_limit/rate.yaml +14 -0
  27. policyengine_us/parameters/gov/states/mo/dss/tanf/maximum_benefit/percentage.yaml +14 -0
  28. policyengine_us/parameters/gov/states/mo/dss/tanf/minimum_payment.yaml +12 -0
  29. policyengine_us/parameters/gov/states/mo/dss/tanf/resource_limit/amount.yaml +14 -0
  30. policyengine_us/parameters/gov/states/mo/dss/tanf/standard_of_need/additional_person_increment.yaml +12 -0
  31. policyengine_us/parameters/gov/states/mo/dss/tanf/standard_of_need/amount.yaml +38 -0
  32. policyengine_us/parameters/gov/states/mo/dss/tanf/standard_of_need/base_table_max_size.yaml +12 -0
  33. policyengine_us/parameters/gov/states/pa/dhs/tanf/county_group/group_1.yaml +19 -0
  34. policyengine_us/parameters/gov/states/pa/dhs/tanf/county_group/group_2.yaml +44 -0
  35. policyengine_us/parameters/gov/states/pa/dhs/tanf/county_group/group_3.yaml +31 -0
  36. policyengine_us/parameters/gov/states/pa/dhs/tanf/county_group/group_4.yaml +29 -0
  37. policyengine_us/parameters/gov/states/pa/dhs/tanf/family_size_allowance/additional_person.yaml +14 -0
  38. policyengine_us/parameters/gov/states/pa/dhs/tanf/family_size_allowance/amount.yaml +69 -0
  39. policyengine_us/parameters/gov/states/pa/dhs/tanf/income/deductions/earned_income_disregard/percentage.yaml +14 -0
  40. policyengine_us/parameters/gov/states/pa/dhs/tanf/income/deductions/work_expense/additional.yaml +15 -0
  41. policyengine_us/parameters/gov/states/pa/dhs/tanf/income/deductions/work_expense/initial.yaml +14 -0
  42. policyengine_us/parameters/gov/states/pa/dhs/tanf/max_family_size_in_table.yaml +12 -0
  43. policyengine_us/parameters/gov/states/pa/dhs/tanf/resource_limit.yaml +7 -6
  44. policyengine_us/parameters/gov/states/pa/dhs/tanf/standard_of_need/additional_person.yaml +14 -0
  45. policyengine_us/parameters/gov/states/pa/dhs/tanf/standard_of_need/amount.yaml +69 -0
  46. policyengine_us/parameters/gov/states/wi/dcf/README.md +1 -0
  47. policyengine_us/parameters/gov/states/wi/dcf/works/README.md +1 -0
  48. policyengine_us/parameters/gov/states/wi/dcf/works/asset/limit.yaml +16 -0
  49. policyengine_us/parameters/gov/states/wi/dcf/works/asset/vehicle_exclusion.yaml +14 -0
  50. policyengine_us/parameters/gov/states/wi/dcf/works/income_limit/rate.yaml +16 -0
  51. policyengine_us/parameters/gov/states/wi/dcf/works/placement/amount.yaml +30 -0
  52. policyengine_us/parameters/gov/states/wi/dcf/works/placement/arp_pregnancy_month_threshold.yaml +14 -0
  53. policyengine_us/parameters/gov/states/wi/dcf/works/placement/cmc_infant_age_limit.yaml +15 -0
  54. policyengine_us/reforms/aca/__init__.py +3 -0
  55. policyengine_us/reforms/aca/aca_ptc_700_fpl_cliff.py +125 -0
  56. policyengine_us/reforms/reforms.py +5 -0
  57. policyengine_us/tests/policy/baseline/gov/hhs/medicare/savings_programs/category/msp_category.yaml +69 -0
  58. policyengine_us/tests/policy/baseline/gov/hhs/medicare/savings_programs/eligibility/msp_eligible.yaml +62 -0
  59. policyengine_us/tests/policy/baseline/gov/hhs/medicare/savings_programs/income/msp_fpg.yaml +22 -0
  60. policyengine_us/tests/policy/baseline/gov/hhs/medicare/savings_programs/integration.yaml +84 -0
  61. policyengine_us/tests/policy/baseline/gov/hhs/medicare/savings_programs/msp_benefit_value.yaml +62 -0
  62. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/adjusted_gross_income/irs_gross_income/social_security/taxable_social_security_tier_1.yaml +157 -0
  63. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/adjusted_gross_income/irs_gross_income/social_security/taxable_social_security_tier_2.yaml +106 -0
  64. policyengine_us/tests/policy/baseline/gov/ssa/revenue/tob_revenue_medicare_hi.yaml +105 -0
  65. policyengine_us/tests/policy/baseline/gov/ssa/revenue/tob_revenue_oasdi.yaml +86 -0
  66. policyengine_us/tests/policy/baseline/gov/ssa/revenue/tob_revenue_total.yaml +19 -0
  67. policyengine_us/tests/policy/baseline/gov/ssa/revenue/tob_tier_split.yaml +90 -0
  68. policyengine_us/tests/policy/baseline/gov/states/az/tax/income/az_property_tax_credit_agi.yaml +58 -0
  69. policyengine_us/tests/policy/baseline/gov/states/az/tax/income/integration.yaml +28 -0
  70. policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_ptc.yaml +27 -0
  71. policyengine_us/tests/policy/baseline/gov/states/hi/tax/income/credits/food_excise/hi_food_excise_credit.yaml +29 -1
  72. policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/ia_cdcc.yaml +3 -3
  73. policyengine_us/tests/policy/baseline/gov/states/ia/tax/income/ia_integration.yaml +31 -1
  74. policyengine_us/tests/policy/baseline/gov/states/il/dhs/aabd/eligibility/il_aabd_non_financial_eligible_person.yaml +6 -6
  75. policyengine_us/tests/policy/baseline/gov/states/il/hfs/fpp/integration.yaml +2 -2
  76. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_disability_eligible.yaml +18 -5
  77. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_eligible.yaml +5 -5
  78. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/integration.yaml +8 -8
  79. policyengine_us/tests/policy/baseline/gov/states/ma/tax/income/gross_income/integration.yaml +28 -0
  80. policyengine_us/tests/policy/baseline/gov/states/me/tax/income/credits/integration.yaml +87 -0
  81. policyengine_us/tests/policy/baseline/gov/states/me/tax/income/credits/me_dependent_exemption_credit_amount_person.yaml +3 -2
  82. policyengine_us/tests/policy/baseline/gov/states/mi/tax/income/credits/home_heating/mi_home_heating_credit.yaml +87 -0
  83. policyengine_us/tests/policy/baseline/gov/states/mi/tax/income/mi_household_resources.yaml +57 -0
  84. policyengine_us/tests/policy/baseline/gov/states/mo/dss/tanf/integration.yaml +275 -0
  85. policyengine_us/tests/policy/baseline/gov/states/mo/dss/tanf/mo_tanf.yaml +60 -0
  86. policyengine_us/tests/policy/baseline/gov/states/mo/dss/tanf/mo_tanf_child_care_deduction.yaml +187 -0
  87. policyengine_us/tests/policy/baseline/gov/states/mo/dss/tanf/mo_tanf_countable_income.yaml +49 -0
  88. policyengine_us/tests/policy/baseline/gov/states/mo/dss/tanf/mo_tanf_earned_income_deductions.yaml +53 -0
  89. policyengine_us/tests/policy/baseline/gov/states/mo/dss/tanf/mo_tanf_eligible.yaml +59 -0
  90. policyengine_us/tests/policy/baseline/gov/states/mo/dss/tanf/mo_tanf_gross_income_eligible.yaml +29 -0
  91. policyengine_us/tests/policy/baseline/gov/states/mo/dss/tanf/mo_tanf_income_eligible.yaml +49 -0
  92. policyengine_us/tests/policy/baseline/gov/states/mo/dss/tanf/mo_tanf_maximum_benefit.yaml +47 -0
  93. policyengine_us/tests/policy/baseline/gov/states/mo/dss/tanf/mo_tanf_percentage_of_need_test.yaml +53 -0
  94. policyengine_us/tests/policy/baseline/gov/states/mo/dss/tanf/mo_tanf_resources_eligible.yaml +23 -0
  95. policyengine_us/tests/policy/baseline/gov/states/mo/dss/tanf/mo_tanf_standard_of_need.yaml +71 -0
  96. policyengine_us/tests/policy/baseline/gov/states/mo/dss/tanf/mo_tanf_standard_of_need_test.yaml +44 -0
  97. policyengine_us/tests/policy/baseline/gov/states/mt/tax/income/integration.yaml +29 -0
  98. policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/eligibility/pa_tanf_disregard_eligible.yaml +114 -0
  99. policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/eligibility/pa_tanf_eligible.yaml +65 -0
  100. policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/eligibility/pa_tanf_income_eligible.yaml +62 -0
  101. policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/eligibility/pa_tanf_resources_eligible.yaml +47 -0
  102. policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/income/pa_tanf_earned_income_after_deductions_person.yaml +81 -0
  103. policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/integration.yaml +386 -0
  104. policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/pa_tanf.yaml +53 -0
  105. policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/pa_tanf_county_group.yaml +63 -0
  106. policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/pa_tanf_maximum_benefit.yaml +92 -0
  107. policyengine_us/tests/policy/baseline/gov/states/pa/dhs/tanf/pa_tanf_standard_of_need.yaml +73 -0
  108. policyengine_us/tests/policy/baseline/gov/states/wi/dcf/works/integration.yaml +282 -0
  109. policyengine_us/tests/policy/baseline/gov/states/wi/dcf/works/wi_works.yaml +50 -0
  110. policyengine_us/tests/policy/baseline/gov/states/wi/dcf/works/wi_works_countable_income.yaml +49 -0
  111. policyengine_us/tests/policy/baseline/gov/states/wi/dcf/works/wi_works_countable_resources.yaml +54 -0
  112. policyengine_us/tests/policy/baseline/gov/states/wi/dcf/works/wi_works_eligible.yaml +61 -0
  113. policyengine_us/tests/policy/baseline/gov/states/wi/dcf/works/wi_works_income_eligible.yaml +43 -0
  114. policyengine_us/tests/policy/baseline/gov/states/wi/dcf/works/wi_works_placement.yaml +111 -0
  115. policyengine_us/tests/policy/baseline/gov/states/wi/dcf/works/wi_works_resources_eligible.yaml +38 -0
  116. policyengine_us/tests/policy/baseline/gov/states/wv/tax/income/credits/heptc/wv_homestead_excess_property_tax_credit.yaml +31 -0
  117. policyengine_us/tests/policy/contrib/aca/ptc_700_fpl_cliff.yaml +136 -0
  118. policyengine_us/tests/test_batched.py +39 -68
  119. policyengine_us/variables/gov/hhs/medicare/savings_programs/category/is_qi_eligible.py +33 -0
  120. policyengine_us/variables/gov/hhs/medicare/savings_programs/category/is_qmb_eligible.py +28 -0
  121. policyengine_us/variables/gov/hhs/medicare/savings_programs/category/is_slmb_eligible.py +33 -0
  122. policyengine_us/variables/gov/hhs/medicare/savings_programs/category/msp_category.py +33 -0
  123. policyengine_us/variables/gov/hhs/medicare/savings_programs/eligibility/msp_asset_eligible.py +26 -0
  124. policyengine_us/variables/gov/hhs/medicare/savings_programs/eligibility/msp_eligible.py +20 -0
  125. policyengine_us/variables/gov/hhs/medicare/savings_programs/eligibility/msp_income_eligible.py +26 -0
  126. policyengine_us/variables/gov/hhs/medicare/savings_programs/income/msp_countable_income.py +35 -0
  127. policyengine_us/variables/gov/hhs/medicare/savings_programs/income/msp_fpg.py +40 -0
  128. policyengine_us/variables/gov/hhs/medicare/savings_programs/msp.py +15 -0
  129. policyengine_us/variables/gov/hhs/medicare/savings_programs/msp_benefit_value.py +37 -0
  130. policyengine_us/variables/gov/irs/income/taxable_income/adjusted_gross_income/irs_gross_income/social_security/taxable_social_security_tier_1.py +58 -0
  131. policyengine_us/variables/gov/irs/income/taxable_income/adjusted_gross_income/irs_gross_income/social_security/taxable_social_security_tier_2.py +17 -0
  132. policyengine_us/variables/gov/simulation/labor_supply_response/labor_supply_behavioral_response.py +57 -42
  133. policyengine_us/variables/gov/ssa/revenue/tob_revenue_medicare_hi.py +31 -0
  134. policyengine_us/variables/gov/ssa/revenue/tob_revenue_oasdi.py +31 -0
  135. policyengine_us/variables/gov/ssa/revenue/tob_revenue_total.py +44 -0
  136. policyengine_us/variables/gov/states/az/tax/income/credits/property_tax_credit/az_property_tax_credit_agi.py +53 -0
  137. policyengine_us/variables/gov/states/dc/tax/income/credits/dc_ptc.py +7 -3
  138. policyengine_us/variables/gov/states/ia/tax/income/credits/ia_cdcc.py +4 -2
  139. policyengine_us/variables/gov/states/il/dhs/aabd/eligibility/il_aabd_non_financial_eligible_person.py +23 -5
  140. policyengine_us/variables/gov/states/il/hfs/fpp/eligibility/il_fpp_eligible.py +1 -1
  141. policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_disability_eligible.py +7 -3
  142. policyengine_us/variables/gov/states/ma/tax/income/gross_income/ma_part_c_gross_income.py +7 -1
  143. policyengine_us/variables/gov/states/me/tax/income/credits/dependent_exemption/me_dependent_exemption_credit_amount_person.py +1 -1
  144. policyengine_us/variables/gov/states/mi/tax/income/mi_household_resources.py +34 -5
  145. policyengine_us/variables/gov/states/mo/dss/tanf/eligibility/mo_tanf_eligible.py +23 -0
  146. policyengine_us/variables/gov/states/mo/dss/tanf/eligibility/mo_tanf_gross_income_eligible.py +24 -0
  147. policyengine_us/variables/gov/states/mo/dss/tanf/eligibility/mo_tanf_income_eligible.py +18 -0
  148. policyengine_us/variables/gov/states/mo/dss/tanf/eligibility/mo_tanf_percentage_of_need_test.py +20 -0
  149. policyengine_us/variables/gov/states/mo/dss/tanf/eligibility/mo_tanf_resources_eligible.py +18 -0
  150. policyengine_us/variables/gov/states/mo/dss/tanf/eligibility/mo_tanf_standard_of_need_test.py +17 -0
  151. policyengine_us/variables/gov/states/mo/dss/tanf/income/deductions/mo_tanf_child_care_deduction.py +24 -0
  152. policyengine_us/variables/gov/states/mo/dss/tanf/income/deductions/mo_tanf_earned_income_deductions.py +36 -0
  153. policyengine_us/variables/gov/states/mo/dss/tanf/income/mo_tanf_countable_income.py +21 -0
  154. policyengine_us/variables/gov/states/mo/dss/tanf/income/mo_tanf_income_for_need_test.py +23 -0
  155. policyengine_us/variables/gov/states/mo/dss/tanf/mo_tanf.py +21 -0
  156. policyengine_us/variables/gov/states/mo/dss/tanf/mo_tanf_maximum_benefit.py +19 -0
  157. policyengine_us/variables/gov/states/mo/dss/tanf/mo_tanf_standard_of_need.py +23 -0
  158. policyengine_us/variables/gov/states/mt/tax/income/capital_gains/mt_capital_gains_tax_indiv.py +3 -1
  159. policyengine_us/variables/gov/states/mt/tax/income/capital_gains/mt_capital_gains_tax_joint.py +3 -1
  160. policyengine_us/variables/gov/states/mt/tax/income/tax_calculation/mt_regular_income_tax_indiv.py +3 -0
  161. policyengine_us/variables/gov/states/mt/tax/income/tax_calculation/mt_regular_income_tax_joint.py +3 -0
  162. policyengine_us/variables/gov/states/pa/dhs/tanf/eligibility/pa_tanf_disregard_eligible.py +31 -0
  163. policyengine_us/variables/gov/states/pa/dhs/tanf/eligibility/pa_tanf_eligible.py +29 -0
  164. policyengine_us/variables/gov/states/pa/dhs/tanf/eligibility/pa_tanf_income_eligible.py +16 -0
  165. policyengine_us/variables/gov/states/pa/dhs/tanf/eligibility/pa_tanf_resources_eligible.py +7 -5
  166. policyengine_us/variables/gov/states/pa/dhs/tanf/income/pa_tanf_countable_earned_income.py +15 -0
  167. policyengine_us/variables/gov/states/pa/dhs/tanf/income/pa_tanf_countable_income.py +16 -0
  168. policyengine_us/variables/gov/states/pa/dhs/tanf/income/pa_tanf_earned_income_after_deductions_person.py +27 -0
  169. policyengine_us/variables/gov/states/pa/dhs/tanf/pa_tanf.py +19 -0
  170. policyengine_us/variables/gov/states/pa/dhs/tanf/pa_tanf_county_group.py +38 -0
  171. policyengine_us/variables/gov/states/pa/dhs/tanf/pa_tanf_maximum_benefit.py +30 -0
  172. policyengine_us/variables/gov/states/pa/dhs/tanf/pa_tanf_standard_of_need.py +30 -0
  173. policyengine_us/variables/gov/states/wi/dcf/works/eligibility/wi_works_eligible.py +22 -0
  174. policyengine_us/variables/gov/states/wi/dcf/works/eligibility/wi_works_income_eligible.py +20 -0
  175. policyengine_us/variables/gov/states/wi/dcf/works/eligibility/wi_works_resources_eligible.py +18 -0
  176. policyengine_us/variables/gov/states/wi/dcf/works/income/wi_works_countable_income.py +18 -0
  177. policyengine_us/variables/gov/states/wi/dcf/works/resources/wi_works_countable_resources.py +21 -0
  178. policyengine_us/variables/gov/states/wi/dcf/works/wi_works.py +19 -0
  179. policyengine_us/variables/gov/states/wi/dcf/works/wi_works_placement.py +45 -0
  180. policyengine_us/variables/gov/states/wv/tax/income/credits/heptc/wv_homestead_excess_property_tax_credit.py +3 -3
  181. policyengine_us/variables/gov/states/wv/tax/income/credits/heptc/wv_homestead_excess_property_tax_credit_eligible.py +5 -2
  182. {policyengine_us-1.458.0.dist-info → policyengine_us-1.465.0.dist-info}/METADATA +1 -1
  183. {policyengine_us-1.458.0.dist-info → policyengine_us-1.465.0.dist-info}/RECORD +186 -62
  184. policyengine_us/parameters/gov/states/il/dhs/aabd/aged_age_threshold.yaml +0 -11
  185. policyengine_us/parameters/gov/states/mo/dss/tanf/income_limit.yaml +0 -26
  186. policyengine_us/parameters/gov/states/pa/dhs/tanf/cash_assistance/age_limit.yaml +0 -11
  187. policyengine_us/parameters/gov/states/pa/dhs/tanf/pregnancy_eligibility/age_limit.yaml +0 -9
  188. policyengine_us/tests/policy/baseline/gov/states/il/dhs/aabd/eligibility/il_aabd_aged_blind_disabled_person.yaml +0 -39
  189. policyengine_us/tests/policy/baseline/gov/states/mo/dss/tanf/mo_tanf_income_limit.yaml +0 -23
  190. policyengine_us/tests/policy/baseline/gov/states/pa/tanf/cash_assistance/pa_tanf_age_eligible.yaml +0 -44
  191. policyengine_us/tests/policy/baseline/gov/states/pa/tanf/pregnancy_eligibility/pa_tanf_pregnancy_eligibility.yaml +0 -59
  192. policyengine_us/tests/policy/baseline/gov/states/pa/tax/income/dhs/tanf/eligibility/pa_tanf_resources_eligible.yaml +0 -24
  193. policyengine_us/variables/gov/states/il/dhs/aabd/eligibility/il_aabd_aged_blind_disabled_person.py +0 -22
  194. policyengine_us/variables/gov/states/mo/dss/tanf/mo_tanf_income_limit.py +0 -18
  195. policyengine_us/variables/gov/states/pa/dhs/tanf/cash_assistance/pa_tanf_age_eligible.py +0 -22
  196. policyengine_us/variables/gov/states/pa/dhs/tanf/eligibility/pa_tanf_countable_resources.py +0 -10
  197. policyengine_us/variables/gov/states/pa/dhs/tanf/eligibility/pregnancy_eligibility/age_eligibility.py +0 -22
  198. {policyengine_us-1.458.0.dist-info → policyengine_us-1.465.0.dist-info}/WHEEL +0 -0
  199. {policyengine_us-1.458.0.dist-info → policyengine_us-1.465.0.dist-info}/entry_points.txt +0 -0
  200. {policyengine_us-1.458.0.dist-info → policyengine_us-1.465.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,58 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class taxable_social_security_tier_1(Variable):
5
+ value_type = float
6
+ entity = TaxUnit
7
+ definition_period = YEAR
8
+ label = "Taxable Social Security (tier 1)"
9
+ documentation = "Taxable Social Security from 0-50% taxation tier, credited to OASDI trust funds"
10
+ unit = USD
11
+ reference = "https://www.law.cornell.edu/uscode/text/26/86#a_1"
12
+
13
+ def formula(tax_unit, period, parameters):
14
+ p = parameters(period).gov.irs.social_security.taxability
15
+ gross_ss = tax_unit("tax_unit_social_security", period)
16
+ combined_income = tax_unit(
17
+ "tax_unit_combined_income_for_social_security_taxability", period
18
+ )
19
+ filing_status = tax_unit("filing_status", period)
20
+ status = filing_status.possible_values
21
+ separate = filing_status == status.SEPARATE
22
+ cohabitating = tax_unit("cohabitating_spouses", period)
23
+
24
+ base_amount = where(
25
+ separate & cohabitating,
26
+ p.threshold.base.separate_cohabitating,
27
+ p.threshold.base.main[filing_status],
28
+ )
29
+ adjusted_base_amount = where(
30
+ separate & cohabitating,
31
+ p.threshold.adjusted_base.separate_cohabitating,
32
+ p.threshold.adjusted_base.main[filing_status],
33
+ )
34
+
35
+ under_first_threshold = combined_income < base_amount
36
+ under_second_threshold = combined_income < adjusted_base_amount
37
+
38
+ combined_income_excess = tax_unit(
39
+ "tax_unit_ss_combined_income_excess", period
40
+ )
41
+
42
+ # Tier 1 amount (IRC §86(a)(1))
43
+ amount_under_paragraph_1 = min_(
44
+ p.rate.base.benefit_cap * gross_ss,
45
+ p.rate.base.excess * combined_income_excess,
46
+ )
47
+
48
+ # Bracket amount when in tier 2 (IRC §86(a)(2)(A)(ii))
49
+ bracket_amount = min_(
50
+ amount_under_paragraph_1,
51
+ p.rate.additional.bracket * (adjusted_base_amount - base_amount),
52
+ )
53
+
54
+ return select(
55
+ [under_first_threshold, under_second_threshold],
56
+ [0, amount_under_paragraph_1],
57
+ default=bracket_amount,
58
+ )
@@ -0,0 +1,17 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class taxable_social_security_tier_2(Variable):
5
+ value_type = float
6
+ entity = TaxUnit
7
+ definition_period = YEAR
8
+ label = "Taxable Social Security (tier 2)"
9
+ documentation = "Taxable Social Security from 50-85% taxation tier, credited to Medicare HI trust fund"
10
+ unit = USD
11
+ reference = "https://www.law.cornell.edu/uscode/text/26/86#a_2"
12
+
13
+ # tier_2 = total_taxable - tier_1 capped at 0
14
+ def formula(tax_unit, period, parameters):
15
+ tier_1 = tax_unit("taxable_social_security_tier_1", period)
16
+ total_taxable = tax_unit("tax_unit_taxable_social_security", period)
17
+ return max_(total_taxable - tier_1, 0)
@@ -16,53 +16,68 @@ class labor_supply_behavioral_response(Variable):
16
16
  if p.elasticities.income == 0 and p.elasticities.substitution.all == 0:
17
17
  return 0
18
18
 
19
- measurement_branch = simulation.get_branch(
20
- "lsr_measurement", clone_system=True
21
- ) # A branch without LSRs
22
- baseline_branch = simulation.get_branch("baseline").get_branch(
23
- "baseline_lsr_measurement", clone_system=True
24
- ) # Already created by default
25
- baseline_branch.tax_benefit_system.parameters.simulation = (
26
- measurement_branch.tax_benefit_system.parameters.simulation
27
- )
19
+ # Guard against re-entry (prevents recursion when branches calculate variables)
20
+ if (
21
+ hasattr(simulation, "_lsr_calculating")
22
+ and simulation._lsr_calculating
23
+ ):
24
+ return 0
28
25
 
29
- # (system with LSRs) <- (system without LSRs used to calculate LSRs)
30
- # |
31
- # * -(baseline system without LSRs used to calculate LSRs)
26
+ # Mark that we're calculating LSR
27
+ simulation._lsr_calculating = True
32
28
 
33
- for branch in [measurement_branch, baseline_branch]:
34
- branch.tax_benefit_system.neutralize_variable(
35
- "employment_income_behavioral_response"
36
- )
37
- branch.tax_benefit_system.neutralize_variable(
38
- "self_employment_income_behavioral_response"
39
- )
40
- branch.set_input(
41
- "employment_income_before_lsr",
42
- period,
43
- person("employment_income_before_lsr", period),
29
+ try:
30
+ measurement_branch = simulation.get_branch(
31
+ "lsr_measurement", clone_system=True
32
+ ) # A branch without LSRs
33
+ baseline_branch = simulation.get_branch("baseline").get_branch(
34
+ "baseline_lsr_measurement", clone_system=True
35
+ ) # Already created by default
36
+ baseline_branch.tax_benefit_system.parameters.simulation = (
37
+ measurement_branch.tax_benefit_system.parameters.simulation
44
38
  )
45
- branch.set_input(
46
- "self_employment_income_before_lsr",
39
+
40
+ # (system with LSRs) <- (system without LSRs used to calculate LSRs)
41
+ # |
42
+ # * -(baseline system without LSRs used to calculate LSRs)
43
+
44
+ for branch in [measurement_branch, baseline_branch]:
45
+ branch.tax_benefit_system.neutralize_variable(
46
+ "employment_income_behavioral_response"
47
+ )
48
+ branch.tax_benefit_system.neutralize_variable(
49
+ "self_employment_income_behavioral_response"
50
+ )
51
+ branch.set_input(
52
+ "employment_income_before_lsr",
53
+ period,
54
+ person("employment_income_before_lsr", period),
55
+ )
56
+ branch.set_input(
57
+ "self_employment_income_before_lsr",
58
+ period,
59
+ person("self_employment_income_before_lsr", period),
60
+ )
61
+
62
+ response = add(
63
+ person,
47
64
  period,
48
- person("self_employment_income_before_lsr", period),
65
+ [
66
+ "income_elasticity_lsr",
67
+ "substitution_elasticity_lsr",
68
+ ],
49
69
  )
70
+ simulation = person.simulation
71
+ del simulation.branches["baseline"].branches[
72
+ "baseline_lsr_measurement"
73
+ ]
74
+ del simulation.branches["lsr_measurement"]
50
75
 
51
- response = add(
52
- person,
53
- period,
54
- [
55
- "income_elasticity_lsr",
56
- "substitution_elasticity_lsr",
57
- ],
58
- )
59
- simulation = person.simulation
60
- del simulation.branches["baseline"].branches[
61
- "baseline_lsr_measurement"
62
- ]
63
- del simulation.branches["lsr_measurement"]
76
+ simulation.macro_cache_read = False
77
+ simulation.macro_cache_write = False
64
78
 
65
- simulation.macro_cache_read = False
66
- simulation.macro_cache_write = False
79
+ return response
67
80
 
68
- return response
81
+ finally:
82
+ # Clear the re-entry guard
83
+ simulation._lsr_calculating = False
@@ -0,0 +1,31 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class tob_revenue_medicare_hi(Variable):
5
+ value_type = float
6
+ entity = TaxUnit
7
+ definition_period = YEAR
8
+ label = "Medicare HI trust fund revenue from SS benefit taxation (tier 2)"
9
+ documentation = "Tax revenue from tier 2 (50-85%) Social Security benefit taxation credited to Medicare HI trust fund"
10
+ unit = USD
11
+
12
+ def formula(tax_unit, period, parameters):
13
+ """
14
+ Calculate Medicare HI trust fund revenue from tier 2 SS taxation.
15
+
16
+ Allocates total TOB revenue to Medicare HI based on tier 2's proportion
17
+ of total taxable SS.
18
+ """
19
+ # Get total TOB revenue
20
+ total_tob = tax_unit("tob_revenue_total", period)
21
+
22
+ # Get tier amounts
23
+ tier1 = tax_unit("taxable_social_security_tier_1", period)
24
+ tier2 = tax_unit("taxable_social_security_tier_2", period)
25
+ total_taxable = tier1 + tier2
26
+
27
+ # Allocate total TOB based on tier 2 proportion
28
+ # Use where to handle division by zero
29
+ medicare_share = where(total_taxable > 0, tier2 / total_taxable, 0)
30
+
31
+ return total_tob * medicare_share
@@ -0,0 +1,31 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class tob_revenue_oasdi(Variable):
5
+ value_type = float
6
+ entity = TaxUnit
7
+ definition_period = YEAR
8
+ label = "OASDI trust fund revenue from SS benefit taxation (tier 1)"
9
+ documentation = "Tax revenue from tier 1 (0-50%) Social Security benefit taxation credited to OASDI trust funds"
10
+ unit = USD
11
+
12
+ def formula(tax_unit, period, parameters):
13
+ """
14
+ Calculate OASDI trust fund revenue from tier 1 SS taxation.
15
+
16
+ Allocates total TOB revenue to OASDI based on tier 1's proportion
17
+ of total taxable SS.
18
+ """
19
+ # Get total TOB revenue
20
+ total_tob = tax_unit("tob_revenue_total", period)
21
+
22
+ # Get tier amounts
23
+ tier1 = tax_unit("taxable_social_security_tier_1", period)
24
+ tier2 = tax_unit("taxable_social_security_tier_2", period)
25
+ total_taxable = tier1 + tier2
26
+
27
+ # Allocate total TOB based on tier 1 proportion
28
+ # Use where to handle division by zero
29
+ oasdi_share = where(total_taxable > 0, tier1 / total_taxable, 0)
30
+
31
+ return total_tob * oasdi_share
@@ -0,0 +1,44 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class tob_revenue_total(Variable):
5
+ value_type = float
6
+ entity = TaxUnit
7
+ definition_period = YEAR
8
+ label = "Total trust fund revenue from SS benefit taxation"
9
+ documentation = "Tax revenue from taxation of Social Security benefits using branching methodology"
10
+ unit = USD
11
+
12
+ def formula(tax_unit, period, parameters):
13
+ """
14
+ Calculate trust fund revenue using branching + neutralization.
15
+
16
+ This is the CORRECT way to isolate TOB revenue, superior to the
17
+ average effective tax rate approximation.
18
+ """
19
+ sim = tax_unit.simulation
20
+
21
+ # Calculate income tax WITH taxable SS
22
+ income_tax_with_ss = tax_unit("income_tax", period)
23
+
24
+ # Create branch and neutralize taxable SS
25
+ branch = sim.get_branch("tob_calc", clone_system=True)
26
+ branch.tax_benefit_system.neutralize_variable(
27
+ "tax_unit_taxable_social_security"
28
+ )
29
+
30
+ # Delete all calculated variables to force recalculation
31
+ for var_name in list(branch.tax_benefit_system.variables.keys()):
32
+ if var_name not in branch.input_variables:
33
+ try:
34
+ branch.delete_arrays(var_name)
35
+ except:
36
+ pass
37
+
38
+ # Recalculate income tax without taxable SS
39
+ income_tax_without_ss = branch.tax_unit("income_tax", period)
40
+
41
+ # Clean up branch
42
+ del sim.branches["tob_calc"]
43
+
44
+ return income_tax_with_ss - income_tax_without_ss
@@ -0,0 +1,53 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class az_property_tax_credit_agi(Variable):
5
+ value_type = float
6
+ entity = TaxUnit
7
+ label = "Arizona adjusted gross income for property tax credit"
8
+ unit = USD
9
+ definition_period = YEAR
10
+ documentation = (
11
+ "Adjusted gross income as defined for Arizona property tax credit purposes. "
12
+ "Per ARS 43-1072(H)(6) and ITR 12-1, this starts with Federal AGI and only "
13
+ "excludes items specifically listed in ARS 43-1072(I): Social Security, "
14
+ "railroad retirement, workers compensation, Arizona unemployment, veterans "
15
+ "disability pensions, welfare, and gifts. Unlike regular Arizona income tax, "
16
+ "this does NOT exclude pension income, capital gains, or Arizona exemptions."
17
+ )
18
+ reference = [
19
+ "https://www.azleg.gov/ars/43/01072.htm", # ARS 43-1072
20
+ "https://azdor.gov/sites/default/files/2023-03/RULINGS_INDV_2012_itr12-1.pdf", # ITR 12-1
21
+ ]
22
+ defined_for = StateCode.AZ
23
+
24
+ def formula(tax_unit, period, parameters):
25
+ # Start with Federal AGI
26
+ # Per ITR 12-1, income includes wages, interest, business/farm income,
27
+ # rent/royalty, S-corp/partnership income, alimony, capital gains,
28
+ # pension/annuity income, and other non-excluded income.
29
+ federal_agi = tax_unit("adjusted_gross_income", period)
30
+
31
+ # Per ARS 43-1072(I) and ITR 12-1 "Items Excluded from Income",
32
+ # we ONLY exclude Social Security benefits (and other items like
33
+ # railroad retirement, workers comp, AZ unemployment, veterans
34
+ # disability pensions, welfare, and gifts - but these are typically
35
+ # not in Federal AGI anyway).
36
+ #
37
+ # Federal AGI only includes the TAXABLE portion of Social Security,
38
+ # but for property tax credit, ALL Social Security should be excluded.
39
+ # So we subtract the taxable portion that's in Federal AGI.
40
+ taxable_social_security = tax_unit(
41
+ "tax_unit_taxable_social_security", period
42
+ )
43
+
44
+ # NOTE: We do NOT subtract Arizona's regular subtractions here because:
45
+ # - Pension exclusions (az_public_pension_exclusion,
46
+ # az_military_retirement_subtraction) should be INCLUDED per
47
+ # ITR 12-1 item (9)
48
+ # - Capital gains subtraction (az_long_term_capital_gains_subtraction)
49
+ # should be INCLUDED per ITR 12-1 item (7)
50
+ # - US Government interest should be INCLUDED per ITR 12-1 item (2)
51
+ # - Arizona exemptions (aged, blind) should NOT be subtracted
52
+
53
+ return max_(0, federal_agi - taxable_social_security)
@@ -18,15 +18,19 @@ class dc_ptc(Variable):
18
18
  retax = add(tax_unit, period, ["real_estate_taxes"])
19
19
  p_dc = parameters(period).gov.states.dc.tax.income.credits
20
20
  ptax = retax + rent * p_dc.ptc.rent_ratio
21
+
21
22
  elderly_age = p_dc.ptc.min_elderly_age
22
23
  head_age = tax_unit("age_head", period)
23
24
  spouse_age = tax_unit("age_spouse", period)
24
25
  is_elderly = (head_age >= elderly_age) | (spouse_age >= elderly_age)
26
+
27
+ # Only positive AGI creates an offset (negative AGI should not reduce offset)
25
28
  us_agi = tax_unit("adjusted_gross_income", period)
26
- ptax_offset = us_agi * where(
29
+ positive_agi = max_(0, us_agi)
30
+ ptax_offset = positive_agi * where(
27
31
  is_elderly,
28
- p_dc.ptc.fraction_elderly.calc(us_agi, right=True),
29
- p_dc.ptc.fraction_nonelderly.calc(us_agi, right=True),
32
+ p_dc.ptc.fraction_elderly.calc(positive_agi, right=True),
33
+ p_dc.ptc.fraction_nonelderly.calc(positive_agi, right=True),
30
34
  )
31
35
  uncapped_ptc = max_(0, ptax - ptax_offset)
32
36
  return min_(p_dc.ptc.max, uncapped_ptc)
@@ -18,6 +18,8 @@ class ia_cdcc(Variable):
18
18
  def formula(tax_unit, period, parameters):
19
19
  # Iowa matches the potential federal credit
20
20
  federal_cdcc = tax_unit("cdcc_potential", period)
21
- netinc = add(tax_unit, period, ["ia_net_income"])
21
+ taxable_income = tax_unit("ia_taxable_income", period)
22
22
  p = parameters(period).gov.states.ia.tax.income
23
- return federal_cdcc * p.credits.child_care.fraction.calc(netinc)
23
+ return federal_cdcc * p.credits.child_care.fraction.calc(
24
+ taxable_income
25
+ )
@@ -6,15 +6,33 @@ class il_aabd_non_financial_eligible_person(Variable):
6
6
  entity = Person
7
7
  definition_period = MONTH
8
8
  label = "Eligible person for Illinois Aid to the Aged, Blind or Disabled (AABD)"
9
- reference = "https://www.law.cornell.edu/regulations/illinois/title-89/part-113/subpart-B"
9
+ reference = (
10
+ "https://www.law.cornell.edu/regulations/illinois/title-89/part-113/subpart-B",
11
+ "https://www.dhs.state.il.us/page.aspx?item=15910",
12
+ )
10
13
  defined_for = StateCode.IL
11
14
 
12
15
  def formula(person, period, parameters):
13
- aged_or_blind_or_disabled = person(
14
- "il_aabd_aged_blind_disabled_person", period
15
- )
16
+ # Per IDHS Policy Manual PM 11-01-00, a person must either:
17
+ # 1. Receive SSI, OR
18
+ # 2. Be ineligible for SSI due to income (but meet all other SSI requirements)
19
+ #
20
+ # Note: The policy manual only mentions "disabled" for under-65 persons
21
+ # who are SSI-ineligible due to income, but 89 Ill. Admin. Code 113.40(b)
22
+ # explicitly states: "The Department will make the determination of
23
+ # blindness when the client has been denied SSI on the basis of too
24
+ # much income." So blind persons are also covered.
25
+ #
26
+ # is_ssi_eligible checks categorical (aged/blind/disabled), resources,
27
+ # and immigration status for SSI. If True, person qualifies for IL AABD
28
+ # regardless of whether they actually receive SSI (income may be too high).
29
+ ssi_status_eligible = person("is_ssi_eligible", period.this_year)
30
+
31
+ # IL AABD has additional qualified noncitizen categories beyond SSI
32
+ # (e.g., abuse victims, trafficking victims, military families per
33
+ # 89 Ill. Admin. Code 113.10), so we check IL-specific immigration.
16
34
  immigration_status_eligible = person(
17
35
  "il_aabd_immigration_status_eligible_person", period
18
36
  )
19
37
 
20
- return aged_or_blind_or_disabled & immigration_status_eligible
38
+ return ssi_status_eligible & immigration_status_eligible
@@ -31,7 +31,7 @@ class il_fpp_eligible(Variable):
31
31
  "il_hfs_immigration_status_eligible", period
32
32
  )
33
33
  # Cannot be enrolled in other non-spenddown full medical coverage
34
- not_on_medicaid = ~person("is_medicaid_eligible", period)
34
+ not_on_medicaid = ~person("receives_medicaid", period)
35
35
  return (
36
36
  income_eligible
37
37
  & not_pregnant
@@ -13,8 +13,12 @@ class il_hbwd_disability_eligible(Variable):
13
13
  defined_for = StateCode.IL
14
14
 
15
15
  def formula(person, period, parameters):
16
- # Must meet Social Security Administration's definition of disability
17
- is_ssi_disabled = person("is_ssi_disabled", period)
16
+ # Must meet Social Security Administration's definition of disability.
17
+ # Per DB101 Illinois "For HBWD, Social Security's disability
18
+ # rules related to earned income do not apply" - so we use is_disabled
19
+ # (medical definition) instead of is_ssi_disabled (which includes SGA test).
20
+ # See: https://il.db101.org/il/programs/health_coverage/how_health/program2b.htm
21
+ is_disabled = person("is_disabled", period.this_year)
18
22
  # Or currently receiving SSDI
19
23
  receives_ssdi = person("social_security_disability", period) > 0
20
- return is_ssi_disabled | receives_ssdi
24
+ return is_disabled | receives_ssdi
@@ -11,4 +11,10 @@ class ma_part_c_gross_income(Variable):
11
11
  defined_for = StateCode.MA
12
12
 
13
13
  def formula(tax_unit, period, parameters):
14
- return max_(0, add(tax_unit, period, ["long_term_capital_gains"]))
14
+ # Long-term capital gains
15
+ ltcg = add(tax_unit, period, ["long_term_capital_gains"])
16
+ # Short-term capital gains (can be negative)
17
+ stcg = add(tax_unit, period, ["short_term_capital_gains"])
18
+ # Per MA Schedule B line 22, short-term losses offset long-term gains
19
+ stcg_losses = min_(0, stcg)
20
+ return max_(0, ltcg + stcg_losses)
@@ -8,7 +8,7 @@ class me_dependent_exemption_credit_amount_person(Variable):
8
8
  label = "Maine dependent exemption credit amount for each person"
9
9
  reference = "https://www.mainelegislature.org/legis/statutes/36/title36sec5219-SS.html"
10
10
  definition_period = YEAR
11
- defined_for = "ctc_qualifying_child"
11
+ defined_for = "is_tax_unit_dependent"
12
12
 
13
13
  def formula(person, period, parameters):
14
14
  dependent = person("is_tax_unit_dependent", period)
@@ -8,11 +8,42 @@ class mi_household_resources(Variable):
8
8
  unit = USD
9
9
  definition_period = YEAR
10
10
  defined_for = StateCode.MI
11
- reference = "https://law.justia.com/codes/michigan/2022/chapter-206/statute-act-281-of-1967/division-281-1967-1/division-281-1967-1-9/section-206-508/"
11
+ reference = (
12
+ "https://law.justia.com/codes/michigan/2022/chapter-206/"
13
+ "statute-act-281-of-1967/division-281-1967-1/division-281-1967-1-9/"
14
+ "section-206-508/",
15
+ "https://www.michigan.gov/taxes/-/media/Project/Websites/taxes/"
16
+ "Forms/IIT/TY2024/BOOK_MI-1040CR-7.pdf",
17
+ )
12
18
 
13
19
  def formula(tax_unit, period, parameters):
14
20
  p = parameters(period).gov.states.mi.tax.income
15
- household_resources = add(tax_unit, period, p.household_resources)
21
+ # Per form instructions, only certain income sources must be
22
+ # floored at 0 if negative. Capital gains have special loss limitation.
23
+ income_sources = p.household_resources
24
+
25
+ # Sources that must be floored at 0 per form instructions:
26
+ # "Net business income (including net farm income). If negative, enter 0"
27
+ # "Net royalty or rent income. If negative, enter 0"
28
+ floored_sources = {
29
+ "farm_income",
30
+ "self_employment_income",
31
+ "partnership_s_corp_income",
32
+ "rental_income",
33
+ "farm_rent_income",
34
+ }
35
+
36
+ # Iterate through each source, applying flooring only to
37
+ # sources that require it per form instructions
38
+ total = 0
39
+ for source in income_sources:
40
+ if source in floored_sources:
41
+ # Per MI-1040CR instructions: "If negative, enter 0"
42
+ total += max_(add(tax_unit, period, [source]), 0)
43
+ else:
44
+ # Other sources are added as-is without flooring
45
+ total += add(tax_unit, period, [source])
46
+
16
47
  health_insurance_premiums = add(
17
48
  tax_unit, period, ["health_insurance_premiums"]
18
49
  )
@@ -21,7 +52,5 @@ class mi_household_resources(Variable):
21
52
  )
22
53
  return max_(
23
54
  0,
24
- household_resources
25
- - health_insurance_premiums
26
- - above_the_line_deductions,
55
+ total - health_insurance_premiums - above_the_line_deductions,
27
56
  )
@@ -0,0 +1,23 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class mo_tanf_eligible(Variable):
5
+ value_type = bool
6
+ entity = SPMUnit
7
+ label = (
8
+ "Eligible for Missouri Temporary Assistance for Needy Families (TANF)"
9
+ )
10
+ definition_period = MONTH
11
+ reference = (
12
+ "https://www.law.cornell.edu/regulations/missouri/13-CSR-40-2-310",
13
+ "https://dssmanuals.mo.gov/temporary-assistance-case-management/0200-000-00/",
14
+ )
15
+ defined_for = StateCode.MO
16
+
17
+ def formula(spm_unit, period, parameters):
18
+ person = spm_unit.members
19
+ demographic = person("is_person_demographic_tanf_eligible", period)
20
+ has_eligible_member = spm_unit.any(demographic)
21
+ income_eligible = spm_unit("mo_tanf_income_eligible", period)
22
+ resources_eligible = spm_unit("mo_tanf_resources_eligible", period)
23
+ return has_eligible_member & income_eligible & resources_eligible
@@ -0,0 +1,24 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class mo_tanf_gross_income_eligible(Variable):
5
+ value_type = bool
6
+ entity = SPMUnit
7
+ label = "Missouri TANF gross income eligibility"
8
+ definition_period = MONTH
9
+ reference = (
10
+ "https://www.law.cornell.edu/regulations/missouri/13-CSR-40-2-310",
11
+ "https://dssmanuals.mo.gov/temporary-assistance-case-management/0210-010-05-185/",
12
+ )
13
+ defined_for = StateCode.MO
14
+
15
+ def formula(spm_unit, period, parameters):
16
+ p = parameters(period).gov.states.mo.dss.tanf
17
+ gross_income = add(
18
+ spm_unit,
19
+ period,
20
+ ["tanf_gross_earned_income", "tanf_gross_unearned_income"],
21
+ )
22
+ standard_of_need = spm_unit("mo_tanf_standard_of_need", period)
23
+ limit = standard_of_need * p.income_limit.rate
24
+ return gross_income < limit
@@ -0,0 +1,18 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class mo_tanf_income_eligible(Variable):
5
+ value_type = bool
6
+ entity = SPMUnit
7
+ label = "Missouri TANF income eligibility (passes all three income tests)"
8
+ definition_period = MONTH
9
+ reference = (
10
+ "https://www.law.cornell.edu/regulations/missouri/13-CSR-40-2-310",
11
+ )
12
+ defined_for = StateCode.MO
13
+
14
+ def formula(spm_unit, period, parameters):
15
+ gross = spm_unit("mo_tanf_gross_income_eligible", period)
16
+ need = spm_unit("mo_tanf_standard_of_need_test", period)
17
+ pct = spm_unit("mo_tanf_percentage_of_need_test", period)
18
+ return gross & need & pct
@@ -0,0 +1,20 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class mo_tanf_percentage_of_need_test(Variable):
5
+ value_type = bool
6
+ entity = SPMUnit
7
+ label = "Missouri TANF Percentage of Need test eligibility"
8
+ definition_period = MONTH
9
+ reference = (
10
+ "https://www.law.cornell.edu/regulations/missouri/13-CSR-40-2-310",
11
+ "https://dssmanuals.mo.gov/temporary-assistance-case-management/0210-010-15/",
12
+ )
13
+ defined_for = StateCode.MO
14
+
15
+ def formula(spm_unit, period, parameters):
16
+ p = parameters(period).gov.states.mo.dss.tanf
17
+ standard_of_need = spm_unit("mo_tanf_standard_of_need", period)
18
+ income = spm_unit("mo_tanf_countable_income", period)
19
+ limit = standard_of_need * p.maximum_benefit.percentage
20
+ return income < limit
@@ -0,0 +1,18 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class mo_tanf_resources_eligible(Variable):
5
+ value_type = bool
6
+ entity = SPMUnit
7
+ label = "Missouri TANF resource eligibility"
8
+ definition_period = MONTH
9
+ reference = (
10
+ "https://www.law.cornell.edu/regulations/missouri/13-CSR-40-2-310",
11
+ "https://dssmanuals.mo.gov/temporary-assistance-case-management/0200-000-00/",
12
+ )
13
+ defined_for = StateCode.MO
14
+
15
+ def formula(spm_unit, period, parameters):
16
+ p = parameters(period).gov.states.mo.dss.tanf.resource_limit
17
+ resources = spm_unit("spm_unit_cash_assets", period.this_year)
18
+ return resources <= p.amount