policyengine-us 1.441.3__py3-none-any.whl → 1.450.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 (161) hide show
  1. policyengine_us/parameters/calibration/gov/hhs/medicare/per_capita_cost.yaml +12 -0
  2. policyengine_us/parameters/gov/hhs/medicare/part_a/deductible.yaml +13 -0
  3. policyengine_us/parameters/gov/hhs/medicare/part_a/default_quarters_of_coverage.yaml +10 -0
  4. policyengine_us/parameters/gov/hhs/medicare/part_a/full_premium.yaml +13 -0
  5. policyengine_us/parameters/gov/hhs/medicare/part_a/premium_free_quarters_threshold.yaml +10 -0
  6. policyengine_us/parameters/gov/hhs/medicare/part_a/reduced_premium.yaml +13 -0
  7. policyengine_us/parameters/gov/hhs/medicare/part_a/reduced_premium_quarters_threshold.yaml +10 -0
  8. policyengine_us/parameters/gov/hhs/medicare/part_b/base_premium.yaml +16 -0
  9. policyengine_us/parameters/gov/hhs/medicare/part_b/irmaa/head_of_household.yaml +50 -0
  10. policyengine_us/parameters/gov/hhs/medicare/part_b/irmaa/joint.yaml +49 -0
  11. policyengine_us/parameters/gov/hhs/medicare/part_b/irmaa/separate.yaml +30 -0
  12. policyengine_us/parameters/gov/hhs/medicare/part_b/irmaa/single.yaml +50 -0
  13. policyengine_us/parameters/gov/hhs/medicare/part_b/irmaa/surviving_spouse.yaml +49 -0
  14. policyengine_us/parameters/gov/local/ny/mamdani_income_tax/in_effect.yaml +10 -0
  15. policyengine_us/parameters/gov/local/ny/mamdani_income_tax/rate.yaml +18 -0
  16. policyengine_us/parameters/gov/states/ar/tax/income/rates/main/reduction.yaml +30 -0
  17. policyengine_us/parameters/gov/states/il/hfs/README.md +1 -0
  18. policyengine_us/parameters/gov/states/il/hfs/bcc/eligibility/age.yaml +12 -0
  19. policyengine_us/parameters/gov/states/il/hfs/hbwd/README.md +1 -0
  20. policyengine_us/parameters/gov/states/il/hfs/hbwd/eligibility/age.yaml +25 -0
  21. policyengine_us/parameters/gov/states/il/hfs/hbwd/eligibility/asset/limit.yaml +15 -0
  22. policyengine_us/parameters/gov/states/il/hfs/hbwd/eligibility/income/limit.yaml +15 -0
  23. policyengine_us/parameters/gov/states/il/hfs/hbwd/eligibility/income/sources/earned.yaml +13 -0
  24. policyengine_us/parameters/gov/states/il/hfs/hbwd/eligibility/income/sources/unearned.yaml +25 -0
  25. policyengine_us/parameters/gov/states/il/hfs/hbwd/premium/earned.yaml +96 -0
  26. policyengine_us/parameters/gov/states/il/hfs/hbwd/premium/unearned.yaml +96 -0
  27. policyengine_us/parameters/gov/states/il/hfs/qualified_noncitizen_statuses.yaml +17 -0
  28. policyengine_us/parameters/gov/states/mt/tax/income/deductions/itemized/spouse_allocation_rate.yaml +13 -0
  29. policyengine_us/parameters/gov/states/nj/tax/income/additions.yaml +12 -0
  30. policyengine_us/parameters/gov/states/nj/tax/income/gross_income_sources.yaml +32 -0
  31. policyengine_us/parameters/gov/states/wa/dshs/tanf/income/deductions/earned_income_disregard/amount.yaml +14 -0
  32. policyengine_us/parameters/gov/states/wa/dshs/tanf/income/deductions/earned_income_disregard/percentage_disregarded.yaml +14 -0
  33. policyengine_us/parameters/gov/states/wa/dshs/tanf/income/limit.yaml +36 -0
  34. policyengine_us/parameters/gov/states/wa/dshs/tanf/maximum_family_size.yaml +14 -0
  35. policyengine_us/parameters/gov/states/wa/dshs/tanf/payment_standard/amount.yaml +32 -0
  36. policyengine_us/parameters/gov/states/wa/dshs/tanf/payment_standard/maximum_amount.yaml +12 -0
  37. policyengine_us/parameters/gov/states/wa/dshs/tanf/resource_limit.yaml +15 -0
  38. policyengine_us/parameters/gov/territories/pr/tax/income/gradual_adjustment/adjustment_limit_basis.yaml +12 -0
  39. policyengine_us/parameters/gov/territories/pr/tax/income/gradual_adjustment/exemption_rate.yaml +13 -0
  40. policyengine_us/parameters/gov/territories/pr/tax/income/gradual_adjustment/rate.yaml +12 -0
  41. policyengine_us/parameters/gov/territories/pr/tax/income/gradual_adjustment/threshold.yaml +13 -0
  42. policyengine_us/parameters/gov/territories/pr/tax/income/regular_tax/percentage.yaml +21 -0
  43. policyengine_us/parameters/gov/territories/pr/tax/income/taxable_income/deductions/sources.yaml +18 -0
  44. policyengine_us/parameters/gov/territories/pr/tax/income/taxable_income/exemptions/sources.yaml +15 -0
  45. policyengine_us/reforms/local/ny/__init__.py +4 -0
  46. policyengine_us/reforms/local/ny/mamdani_income_tax.py +84 -0
  47. policyengine_us/reforms/reforms.py +9 -0
  48. policyengine_us/reforms/states/ut/ut_refundable_eitc.py +3 -3
  49. policyengine_us/tests/policy/baseline/gov/hhs/medicare/costs/medicare_cost.yaml +65 -0
  50. policyengine_us/tests/policy/baseline/gov/hhs/medicare/eligibility/base_part_a_premium.yaml +35 -0
  51. policyengine_us/tests/policy/baseline/gov/hhs/medicare/eligibility/base_part_b_premium.yaml +15 -0
  52. policyengine_us/tests/policy/baseline/gov/hhs/medicare/eligibility/income_adjusted_part_b_premium.yaml +77 -0
  53. policyengine_us/tests/policy/baseline/gov/local/ca/la/general_relief/eligible/immigration/la_general_relief_immigration_status_eligible_person.yaml +2 -2
  54. policyengine_us/tests/policy/baseline/gov/states/ar/tax/income/integration.yaml +35 -0
  55. policyengine_us/tests/policy/baseline/gov/states/co/tax/income/additions/federal_deduction/co_federal_deduction_addback.yaml +2 -2
  56. policyengine_us/tests/policy/baseline/gov/states/il/dhs/tanf/eligibility/il_tanf_immigration_status_eligible_person.yaml +26 -4
  57. policyengine_us/tests/policy/baseline/gov/states/il/hfs/bcc/eligibility/il_bcc_age_eligible.yaml +39 -0
  58. policyengine_us/tests/policy/baseline/gov/states/il/hfs/bcc/eligibility/il_bcc_eligible.yaml +95 -0
  59. policyengine_us/tests/policy/baseline/gov/states/il/hfs/bcc/eligibility/il_bcc_insurance_eligible.yaml +35 -0
  60. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/asset/il_hbwd_countable_assets.yaml +23 -0
  61. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_age_eligible.yaml +39 -0
  62. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_asset_eligible.yaml +31 -0
  63. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_disability_eligible.yaml +35 -0
  64. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_eligible.yaml +65 -0
  65. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_employment_eligible.yaml +34 -0
  66. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_income_eligible.yaml +25 -0
  67. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/il_hbwd_person.yaml +34 -0
  68. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/il_hbwd_premium.yaml +84 -0
  69. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/integration.yaml +183 -0
  70. policyengine_us/tests/policy/baseline/gov/states/il/hfs/il_hfs_immigration_status_eligible.yaml +47 -0
  71. policyengine_us/tests/policy/baseline/gov/states/mo/tax/income/deductions/mo_federal_income_tax_deduction.yaml +2 -14
  72. policyengine_us/tests/policy/baseline/gov/states/mo/tax/income/deductions/mo_pension_and_ss_or_ssd_deduction/mo_pension_and_ss_or_ssd_deduction_section_a.yaml +2 -2
  73. policyengine_us/tests/policy/baseline/gov/states/mo/tax/income/deductions/mo_pension_and_ss_or_ssd_deduction/mo_pension_and_ss_or_ssd_deduction_section_b.yaml +1 -1
  74. policyengine_us/tests/policy/baseline/gov/states/mo/tax/income/deductions/mo_pension_and_ss_or_ssd_deduction/mo_pension_and_ss_or_ssd_deduction_section_c.yaml +1 -1
  75. policyengine_us/tests/policy/baseline/gov/states/nc/tax/income/deductions/nc_itemized_deductions.yaml +2 -2
  76. policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/integration.yaml +44 -0
  77. policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/taxable_income/nj_agi.yaml +7 -8
  78. policyengine_us/tests/policy/baseline/gov/states/oh/tax/income/credits/joint_filing_credit/oh_joint_filing_credit_qualifying_income.yaml +29 -0
  79. policyengine_us/tests/policy/baseline/gov/states/oh/tax/income/integration.yaml +82 -0
  80. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/assistance_unit/tx_tanf_categorically_eligible_person.yaml +1 -1
  81. policyengine_us/tests/policy/baseline/gov/states/ut/tax/income/credits/ss_benefits_credit/ut_ss_benefits_credit_max.yaml +5 -5
  82. policyengine_us/tests/policy/baseline/gov/states/wa/dshs/tanf/benefit/wa_tanf_payment_standard.yaml +48 -0
  83. policyengine_us/tests/policy/baseline/gov/states/wa/dshs/tanf/eligibility/wa_tanf_eligible.yaml +65 -0
  84. policyengine_us/tests/policy/baseline/gov/states/wa/dshs/tanf/eligibility/wa_tanf_income_eligible.yaml +96 -0
  85. policyengine_us/tests/policy/baseline/gov/states/wa/dshs/tanf/income/wa_tanf_countable_earned_income.yaml +70 -0
  86. policyengine_us/tests/policy/baseline/gov/states/wa/dshs/tanf/integration.yaml +676 -0
  87. policyengine_us/tests/policy/baseline/gov/states/wa/dshs/tanf/wa_tanf.yaml +102 -0
  88. policyengine_us/tests/policy/baseline/gov/states/wa/dshs/tanf/wa_tanf_resources_eligible.yaml +6 -7
  89. policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/gradual_adjustment/pr_gradual_adjustment_amount.yaml +29 -0
  90. policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/gradual_adjustment/pr_gradual_adjustment_eligible.yaml +15 -0
  91. policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/pr_agi.yaml +17 -0
  92. policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/pr_agi_person.yaml +17 -0
  93. policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/pr_tax_before_credits.yaml +19 -0
  94. policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/taxable_income/pr_net_taxable_income.yaml +26 -0
  95. policyengine_us/tests/policy/baseline/gov/usda/snap/snap_min_allotment.yaml +3 -3
  96. policyengine_us/tests/policy/baseline/gov/usda/wic/integration.yaml +181 -0
  97. policyengine_us/tests/policy/baseline/gov/usda/wic/is_wic_at_nutritional_risk.yaml +33 -0
  98. policyengine_us/tests/policy/baseline/gov/usda/wic/is_wic_eligible.yaml +28 -15
  99. policyengine_us/tests/policy/baseline/household/demographic/geographic/state_group.yaml +21 -0
  100. policyengine_us/tests/policy/baseline/household/expense/health/has_bcc_qualifying_coverage.yaml +12 -0
  101. policyengine_us/tests/policy/contrib/local/ny/nyc_mamdani_income_tax.yaml +51 -0
  102. policyengine_us/variables/gov/hhs/medicare/costs/medicare_cost.py +30 -0
  103. policyengine_us/variables/gov/hhs/medicare/costs/medicare_enrolled.py +14 -0
  104. policyengine_us/variables/gov/hhs/medicare/eligibility/part_a/base_part_a_premium.py +32 -0
  105. policyengine_us/variables/gov/hhs/medicare/eligibility/part_a/is_premium_free_part_a.py +22 -0
  106. policyengine_us/variables/gov/hhs/medicare/eligibility/part_a/medicare_quarters_of_coverage.py +16 -0
  107. policyengine_us/variables/gov/hhs/medicare/eligibility/part_b/base_part_b_premium.py +16 -0
  108. policyengine_us/variables/gov/hhs/medicare/eligibility/part_b/income_adjusted_part_b_premium.py +55 -0
  109. policyengine_us/variables/gov/states/ca/tax/income/alternative_minimum_tax/exemption/ca_amt_exemption.py +4 -2
  110. policyengine_us/variables/gov/states/ca/tax/income/ca_income_tax.py +1 -0
  111. policyengine_us/variables/gov/states/il/dhs/tanf/eligibility/il_tanf_immigration_status_eligible_person.py +5 -1
  112. policyengine_us/variables/gov/states/il/hfs/bcc/eligibility/il_bcc_age_eligible.py +15 -0
  113. policyengine_us/variables/gov/states/il/hfs/bcc/eligibility/il_bcc_eligible.py +27 -0
  114. policyengine_us/variables/gov/states/il/hfs/bcc/eligibility/il_bcc_insurance_eligible.py +29 -0
  115. policyengine_us/variables/gov/states/il/hfs/hbwd/asset/il_hbwd_countable_assets.py +34 -0
  116. policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_age_eligible.py +20 -0
  117. policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_asset_eligible.py +21 -0
  118. policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_disability_eligible.py +20 -0
  119. policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_eligible.py +33 -0
  120. policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_employment_eligible.py +25 -0
  121. policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_income_eligible.py +23 -0
  122. policyengine_us/variables/gov/states/il/hfs/hbwd/il_hbwd.py +17 -0
  123. policyengine_us/variables/gov/states/il/hfs/hbwd/il_hbwd_person.py +24 -0
  124. policyengine_us/variables/gov/states/il/hfs/hbwd/il_hbwd_premium.py +23 -0
  125. policyengine_us/variables/gov/states/il/hfs/hbwd/income/earned/il_hbwd_countable_earned_income.py +24 -0
  126. policyengine_us/variables/gov/states/il/hfs/hbwd/income/earned/il_hbwd_gross_earned_income.py +16 -0
  127. policyengine_us/variables/gov/states/il/hfs/hbwd/income/il_hbwd_countable_income.py +21 -0
  128. policyengine_us/variables/gov/states/il/hfs/hbwd/income/unearned/il_hbwd_countable_unearned_income.py +16 -0
  129. policyengine_us/variables/gov/states/il/hfs/il_hfs_immigration_status_eligible.py +23 -0
  130. policyengine_us/variables/gov/states/mt/tax/income/deductions/itemized/general/mt_itemized_deductions_indiv.py +3 -2
  131. policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_additions.py +8 -3
  132. policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_gross_income.py +17 -0
  133. policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_total_income.py +12 -6
  134. policyengine_us/variables/gov/states/oh/tax/income/credits/joint_filing_credit/oh_joint_filing_credit_qualifying_income.py +7 -3
  135. policyengine_us/variables/gov/states/wa/dshs/tanf/benefit/wa_tanf_payment_standard.py +22 -0
  136. policyengine_us/variables/gov/states/wa/dshs/tanf/eligibility/wa_tanf_eligible.py +42 -0
  137. policyengine_us/variables/gov/states/wa/dshs/tanf/eligibility/wa_tanf_income_eligible.py +31 -0
  138. policyengine_us/variables/gov/states/wa/dshs/tanf/income/wa_tanf_countable_earned_income.py +33 -0
  139. policyengine_us/variables/gov/states/wa/dshs/tanf/income/wa_tanf_countable_income.py +16 -0
  140. policyengine_us/variables/gov/states/wa/dshs/tanf/wa_tanf.py +34 -0
  141. policyengine_us/variables/gov/states/wa/dshs/tanf/wa_tanf_resources_eligible.py +3 -2
  142. policyengine_us/variables/gov/territories/pr/tax/income/gradual_adjustment/pr_gradual_adjustment_amount.py +23 -0
  143. policyengine_us/variables/gov/territories/pr/tax/income/gradual_adjustment/pr_gradual_adjustment_eligible.py +16 -0
  144. policyengine_us/variables/gov/territories/pr/tax/income/pr_agi.py +11 -1
  145. policyengine_us/variables/gov/territories/pr/tax/income/pr_agi_person.py +11 -1
  146. policyengine_us/variables/gov/territories/pr/tax/income/pr_regular_tax_before_credits.py +9 -0
  147. policyengine_us/variables/gov/territories/pr/tax/income/taxable_income/deductions/pr_deductions.py +13 -0
  148. policyengine_us/variables/gov/territories/pr/tax/income/taxable_income/exemptions/pr_exemptions.py +13 -0
  149. policyengine_us/variables/gov/territories/pr/tax/income/taxable_income/pr_net_taxable_income.py +6 -0
  150. policyengine_us/variables/gov/usda/wic/is_wic_at_nutritional_risk.py +3 -10
  151. policyengine_us/variables/gov/usda/wic/is_wic_eligible.py +10 -1
  152. policyengine_us/variables/household/demographic/geographic/state_group.py +8 -5
  153. policyengine_us/variables/household/expense/health/has_bcc_qualifying_coverage.py +16 -0
  154. {policyengine_us-1.441.3.dist-info → policyengine_us-1.450.0.dist-info}/METADATA +2 -2
  155. {policyengine_us-1.441.3.dist-info → policyengine_us-1.450.0.dist-info}/RECORD +160 -43
  156. {policyengine_us-1.441.3.dist-info → policyengine_us-1.450.0.dist-info}/WHEEL +1 -1
  157. policyengine_us/parameters/gov/states/wa/dshs/tanf/eligibility/resources/limit.yaml +0 -11
  158. /policyengine_us/variables/gov/states/co/ssa/{state_suplement → state_supplement}/co_state_supplement.py +0 -0
  159. /policyengine_us/variables/gov/states/co/ssa/{state_suplement → state_supplement}/co_state_supplement_eligible.py +0 -0
  160. {policyengine_us-1.441.3.dist-info → policyengine_us-1.450.0.dist-info}/entry_points.txt +0 -0
  161. {policyengine_us-1.441.3.dist-info → policyengine_us-1.450.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,14 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class medicare_enrolled(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Medicare enrolled"
8
+ documentation = (
9
+ "Whether the person is enrolled in Medicare (Part A and/or Part B)"
10
+ )
11
+ definition_period = YEAR
12
+ reference = "https://www.cms.gov/medicare"
13
+ defined_for = "is_medicare_eligible"
14
+ default_value = True # Most Medicare-eligible people are enrolled
@@ -0,0 +1,32 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class base_part_a_premium(Variable):
5
+ value_type = float
6
+ entity = Person
7
+ label = "Medicare Part A Base Premium"
8
+ unit = USD
9
+ documentation = (
10
+ "Annual Medicare Part A premium. Most people (99%) qualify for "
11
+ "premium-free Part A with 40+ quarters of Medicare-covered employment. "
12
+ "Those with 30-39 quarters pay a reduced premium, and those with "
13
+ "fewer than 30 quarters pay the full premium."
14
+ )
15
+ definition_period = YEAR
16
+ reference = "https://www.cms.gov/newsroom/fact-sheets/2025-medicare-parts-b-premiums-and-deductibles"
17
+ defined_for = "is_medicare_eligible"
18
+
19
+ def formula(person, period, parameters):
20
+ p = parameters(period).gov.hhs.medicare.part_a
21
+ quarters_covered = person("medicare_quarters_of_coverage", period)
22
+
23
+ premium_free_part_a = person("is_premium_free_part_a", period)
24
+ quarters_above_reduced_premium_threshold = (
25
+ quarters_covered >= p.reduced_premium_quarters_threshold
26
+ )
27
+ premium_amount = where(
28
+ quarters_above_reduced_premium_threshold,
29
+ p.reduced_premium,
30
+ p.full_premium,
31
+ )
32
+ return where(premium_free_part_a, 0, premium_amount) * MONTHS_IN_YEAR
@@ -0,0 +1,22 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class is_premium_free_part_a(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Qualifies for premium-free Part A"
8
+ documentation = (
9
+ "Whether the person qualifies for premium-free Medicare Part A "
10
+ "based on having 40 or more quarters of Medicare-covered employment. "
11
+ "Approximately 99% of Medicare beneficiaries qualify for premium-free Part A."
12
+ )
13
+ definition_period = YEAR
14
+ reference = (
15
+ "https://www.medicare.gov/basics/costs/medicare-costs/part-a-costs"
16
+ )
17
+ defined_for = "is_medicare_eligible"
18
+
19
+ def formula(person, period, parameters):
20
+ p = parameters(period).gov.hhs.medicare.part_a
21
+ quarters = person("medicare_quarters_of_coverage", period)
22
+ return quarters >= p.premium_free_quarters_threshold
@@ -0,0 +1,16 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class medicare_quarters_of_coverage(Variable):
5
+ value_type = int
6
+ entity = Person
7
+ label = "Medicare quarters of coverage"
8
+ documentation = (
9
+ "Number of quarters of Medicare-covered employment. Most people have "
10
+ "40+ quarters and qualify for premium-free Part A. Those with 30-39 "
11
+ "quarters pay a reduced premium, and those with fewer than 30 quarters "
12
+ "pay the full premium."
13
+ )
14
+ definition_period = YEAR
15
+
16
+ adds = "gov.hhs.medicare.part_a.default_quarters_of_coverage"
@@ -0,0 +1,16 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class base_part_b_premium(Variable):
5
+ value_type = float
6
+ entity = Person
7
+ label = "Medicare Part B Base Premium"
8
+ unit = USD
9
+ documentation = "Medicare Part B Premium."
10
+ definition_period = YEAR
11
+ defined_for = "is_medicare_eligible"
12
+
13
+ def formula(person, period, parameters):
14
+ p = parameters(period).gov.hhs.medicare.part_b
15
+ # base_premium is a monthly amount, multiply by MONTHS_IN_YEAR for annual
16
+ return p.base_premium * MONTHS_IN_YEAR
@@ -0,0 +1,55 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class income_adjusted_part_b_premium(Variable):
5
+ value_type = float
6
+ entity = Person
7
+ label = "Medicare Part B premium (income-adjusted)"
8
+ unit = USD
9
+ definition_period = YEAR
10
+ defined_for = "is_medicare_eligible"
11
+ reference = "https://www.medicare.gov/your-medicare-costs/part-b-costs"
12
+ documentation = "Medicare Part B premium adjusted for income (IRMAA). Based on modified adjusted gross income from 2 years prior."
13
+
14
+ def formula(person, period, parameters):
15
+
16
+ tax_unit = person.tax_unit
17
+ filing_status = tax_unit("filing_status", period)
18
+ # Medicare Part B IRMAA is based on MAGI from 2 years prior
19
+ # MAGI = AGI + tax-exempt interest
20
+ prior_period = period.offset(-2, "year")
21
+ agi = tax_unit("adjusted_gross_income", prior_period)
22
+ tax_exempt_interest = tax_unit(
23
+ "tax_exempt_interest_income", prior_period
24
+ )
25
+ magi = agi + tax_exempt_interest
26
+ base = person("base_part_b_premium", period)
27
+
28
+ # Build boolean masks for each status
29
+ status = filing_status.possible_values
30
+ statuses = [
31
+ status.SINGLE,
32
+ status.JOINT,
33
+ status.HEAD_OF_HOUSEHOLD,
34
+ status.SURVIVING_SPOUSE,
35
+ status.SEPARATE,
36
+ ]
37
+ in_status = [filing_status == s for s in statuses]
38
+
39
+ p = parameters(period).gov.hhs.medicare.part_b.irmaa
40
+
41
+ irmaa_amount = select(
42
+ in_status,
43
+ [
44
+ p.single.calc(magi),
45
+ p.joint.calc(magi),
46
+ p.head_of_household.calc(magi),
47
+ p.surviving_spouse.calc(magi),
48
+ p.separate.calc(magi),
49
+ ],
50
+ )
51
+
52
+ # IRMAA amounts are monthly, multiply by MONTHS_IN_YEAR to get annual
53
+ # Base is already annual
54
+ annual_irmaa = irmaa_amount * MONTHS_IN_YEAR
55
+ return base + annual_irmaa
@@ -29,10 +29,12 @@ class ca_amt_exemption(Variable):
29
29
  reduced_amti_rate = reduced_amti * p_irs.phase_out.rate
30
30
  # Line 6
31
31
  adult_exemption = max_(exemption_max_amount - reduced_amti_rate, 0)
32
- # Eligible children receive an increased exemption amount
32
+ # Eligible children receive an increased exemption amount.
33
+ # This applies when the HEAD of the tax unit is a child dependent.
33
34
  person = tax_unit.members
34
35
  eligible_child = person("is_child_dependent", period)
35
- head_is_eligible_child = tax_unit.any(eligible_child)
36
+ is_head = person("is_tax_unit_head", period)
37
+ head_is_eligible_child = tax_unit.any(eligible_child & is_head)
36
38
  # Line 7
37
39
  exemption_amount_child = p_irs.child.amount
38
40
  # Line 8
@@ -12,6 +12,7 @@ class ca_income_tax(Variable):
12
12
 
13
13
  adds = [
14
14
  "ca_income_tax_before_refundable_credits",
15
+ "ca_amt",
15
16
  "ca_mental_health_services_tax",
16
17
  "ca_use_tax",
17
18
  ]
@@ -20,5 +20,9 @@ class il_tanf_immigration_status_eligible_person(Variable):
20
20
  is_citizen = (
21
21
  immigration_status == immigration_status.possible_values.CITIZEN
22
22
  )
23
+ # Per 89 Ill. Admin. Code 112.10, honorably discharged veterans
24
+ # (and their spouses/dependents) are eligible regardless of
25
+ # immigration status.
26
+ is_veteran = person("is_veteran", period.this_year)
23
27
 
24
- return has_qualifying_status | is_citizen
28
+ return has_qualifying_status | is_citizen | is_veteran
@@ -0,0 +1,15 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_bcc_age_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Illinois Health Benefits for Persons with Breast or Cervical Cancer age eligible"
8
+ definition_period = YEAR
9
+ reference = ("https://www.dhs.state.il.us/page.aspx?item=33528",)
10
+ defined_for = StateCode.IL
11
+
12
+ def formula(person, period, parameters):
13
+ p = parameters(period).gov.states.il.hfs.bcc.eligibility
14
+ age = person("age", period)
15
+ return age < p.age
@@ -0,0 +1,27 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_bcc_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Illinois Health Benefits for Persons with Breast or Cervical Cancer eligible"
8
+ definition_period = YEAR
9
+ reference = (
10
+ "https://www.dhs.state.il.us/page.aspx?item=33528",
11
+ "https://www.dhs.state.il.us/page.aspx?item=33527",
12
+ )
13
+ defined_for = StateCode.IL
14
+
15
+ def formula(person, period, parameters):
16
+ is_female = person("is_female", period)
17
+ age_eligible = person("il_bcc_age_eligible", period)
18
+ immigration_eligible = person(
19
+ "il_hfs_immigration_status_eligible", period
20
+ )
21
+ insurance_eligible = person("il_bcc_insurance_eligible", period)
22
+ return (
23
+ is_female
24
+ & age_eligible
25
+ & immigration_eligible
26
+ & insurance_eligible
27
+ )
@@ -0,0 +1,29 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_bcc_insurance_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Illinois BCC insurance eligible"
8
+ definition_period = YEAR
9
+ reference = (
10
+ "https://www.dhs.state.il.us/page.aspx?item=33528",
11
+ "https://www.ilga.gov/legislation/ilcs/documents/030500050K5-2.htm",
12
+ )
13
+ defined_for = StateCode.IL
14
+
15
+ def formula(person, period, parameters):
16
+ # Per PM 06-20-02, persons are eligible if they are "uninsured".
17
+ # A person is NOT uninsured (thus ineligible) if they have:
18
+ # - Medicaid eligibility through another pathway
19
+ # - Health coverage that would pay for cancer treatment
20
+ #
21
+ # Exceptions that still qualify as "uninsured":
22
+ # - Coverage with limited benefits
23
+ # - Coverage where lifetime cap has been met/exceeded
24
+ # - Coverage that excludes cancer treatment
25
+ # - Indian Health Service coverage only
26
+ on_medicaid = person("is_medicaid_eligible", period)
27
+ has_qualifying_coverage = person("has_bcc_qualifying_coverage", period)
28
+ has_disqualifying_coverage = on_medicaid | has_qualifying_coverage
29
+ return ~has_disqualifying_coverage
@@ -0,0 +1,34 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_countable_assets(Variable):
5
+ value_type = float
6
+ unit = USD
7
+ entity = Person
8
+ label = "Illinois Health Benefits for Workers with Disabilities countable assets"
9
+ definition_period = MONTH
10
+ reference = (
11
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.381",
12
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
13
+ "https://hfs.illinois.gov/medicalprograms/hbwd/eligibility.html",
14
+ )
15
+ defined_for = StateCode.IL
16
+
17
+ def formula(person, period, parameters):
18
+ # HBWD exempt assets per § 120.381:
19
+ # - Primary residence (homestead)
20
+ # - Personal effects and household goods
21
+ # - One vehicle (full exemption if essential, $4,500 if not)
22
+ # - Life insurance ≤$1,500
23
+ # - Burial resources
24
+ # - Retirement accounts inaccessible before age 59.5
25
+ # - Medical savings accounts (26 USC 220)
26
+ # Currently only implementing vehicle exemption
27
+ # § 120.381 and § 113.141 have identical vehicle exemption rules,
28
+ # so using AABD vehicle calculation
29
+ cash_assets = person.spm_unit("spm_unit_cash_assets", period.this_year)
30
+ vehicle_value = person.spm_unit(
31
+ "il_aabd_countable_vehicle_value", period
32
+ )
33
+ # TODO: Implement homestead, retirement account, burial, and other exemptions
34
+ return cash_assets + vehicle_value
@@ -0,0 +1,20 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_age_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = (
8
+ "Illinois Health Benefits for Workers with Disabilities age eligible"
9
+ )
10
+ definition_period = MONTH
11
+ reference = (
12
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
13
+ "https://hfs.illinois.gov/medicalprograms/hbwd/eligibility.html",
14
+ )
15
+ defined_for = StateCode.IL
16
+
17
+ def formula(person, period, parameters):
18
+ p = parameters(period).gov.states.il.hfs.hbwd.eligibility
19
+ age = person("monthly_age", period)
20
+ return p.age.calc(age)
@@ -0,0 +1,21 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_asset_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = (
8
+ "Illinois Health Benefits for Workers with Disabilities asset eligible"
9
+ )
10
+ definition_period = MONTH
11
+ reference = (
12
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
13
+ "https://hfs.illinois.gov/medicalprograms/hbwd/eligibility.html",
14
+ )
15
+ defined_for = StateCode.IL
16
+
17
+ def formula(person, period, parameters):
18
+ p = parameters(period).gov.states.il.hfs.hbwd.eligibility
19
+ # Check countable assets against $25,000 limit
20
+ countable_assets = person("il_hbwd_countable_assets", period)
21
+ return countable_assets <= p.asset.limit
@@ -0,0 +1,20 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_disability_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Illinois Health Benefits for Workers with Disabilities disability eligible"
8
+ definition_period = MONTH
9
+ reference = (
10
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
11
+ "https://hfs.illinois.gov/medicalprograms/hbwd/eligibility.html",
12
+ )
13
+ defined_for = StateCode.IL
14
+
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)
18
+ # Or currently receiving SSDI
19
+ receives_ssdi = person("social_security_disability", period) > 0
20
+ return is_ssi_disabled | receives_ssdi
@@ -0,0 +1,33 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Illinois Health Benefits for Workers with Disabilities eligible"
8
+ definition_period = MONTH
9
+ reference = (
10
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
11
+ "https://hfs.illinois.gov/medicalprograms/hbwd/eligibility.html",
12
+ "https://hfs.illinois.gov/medicalprograms/hbwd.html",
13
+ )
14
+ defined_for = StateCode.IL
15
+
16
+ def formula(person, period, parameters):
17
+ age_eligible = person("il_hbwd_age_eligible", period)
18
+ disability_eligible = person("il_hbwd_disability_eligible", period)
19
+ employment_eligible = person("il_hbwd_employment_eligible", period)
20
+ income_eligible = person("il_hbwd_income_eligible", period)
21
+ asset_eligible = person("il_hbwd_asset_eligible", period)
22
+ immigration_eligible = person(
23
+ "il_hfs_immigration_status_eligible", period
24
+ )
25
+
26
+ return (
27
+ age_eligible
28
+ & disability_eligible
29
+ & employment_eligible
30
+ & income_eligible
31
+ & asset_eligible
32
+ & immigration_eligible
33
+ )
@@ -0,0 +1,25 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_employment_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Illinois Health Benefits for Workers with Disabilities employment eligible"
8
+ definition_period = MONTH
9
+ reference = (
10
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
11
+ "https://hfs.illinois.gov/medicalprograms/hbwd/eligibility.html",
12
+ )
13
+ defined_for = StateCode.IL
14
+
15
+ def formula(person, period, parameters):
16
+ # Per § 120.510(l)(1), employment is verified by current payment
17
+ # under FICA or IMRF. We use earned income as a proxy for
18
+ # employment with FICA contributions.
19
+ #
20
+ # Not currently modeled:
21
+ # - § 120.510(l)(2)(A): Future employment exception (60 days)
22
+ # - § 120.510(l)(2)(B): Medical inability grace period (90 days)
23
+ # - § 120.510(l)(2)(C): Job loss grace period (30 days)
24
+ earned_income = person("il_hbwd_gross_earned_income", period)
25
+ return earned_income > 0
@@ -0,0 +1,23 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_income_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Illinois Health Benefits for Workers with Disabilities income eligible"
8
+ definition_period = MONTH
9
+ reference = (
10
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
11
+ "https://hfs.illinois.gov/medicalprograms/hbwd/eligibility.html",
12
+ )
13
+ defined_for = StateCode.IL
14
+
15
+ def formula(person, period, parameters):
16
+ p = parameters(period).gov.states.il.hfs.hbwd.eligibility
17
+ # Income limit is 350% of FPL
18
+ fpg = person.spm_unit("spm_unit_fpg", period)
19
+ income_limit = fpg * p.income.limit
20
+ # Check household countable income against limit
21
+ # Per § 120.510(f), counts individual + spouse income
22
+ countable_income = person.spm_unit("il_hbwd_countable_income", period)
23
+ return countable_income <= income_limit
@@ -0,0 +1,17 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd(Variable):
5
+ value_type = float
6
+ entity = SPMUnit
7
+ label = "Illinois Health Benefits for Workers with Disabilities"
8
+ unit = USD
9
+ definition_period = MONTH
10
+ reference = (
11
+ "https://hfs.illinois.gov/medicalprograms/hbwd.html",
12
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
13
+ "https://hfs.illinois.gov/medicalprograms/hbwd/about.html",
14
+ )
15
+ defined_for = StateCode.IL
16
+
17
+ adds = ["il_hbwd_person"]
@@ -0,0 +1,24 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_person(Variable):
5
+ value_type = float
6
+ entity = Person
7
+ label = "Illinois Health Benefits for Workers with Disabilities per person"
8
+ unit = USD
9
+ definition_period = MONTH
10
+ reference = (
11
+ "https://hfs.illinois.gov/medicalprograms/hbwd.html",
12
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
13
+ )
14
+ defined_for = "il_hbwd_eligible"
15
+
16
+ def formula(person, period, parameters):
17
+ # HBWD provides comprehensive healthcare coverage
18
+ # Could model as:
19
+ # 1. Negative premium (cost to individual)
20
+ # 2. Imputed healthcare value minus premium
21
+ # 3. Healthcare coverage indicator
22
+ # For now, return negative premium as cost
23
+ premium = person("il_hbwd_premium", period)
24
+ return -premium
@@ -0,0 +1,23 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_premium(Variable):
5
+ value_type = float
6
+ entity = Person
7
+ label = "Illinois Health Benefits for Workers with Disabilities monthly premium"
8
+ unit = USD
9
+ definition_period = MONTH
10
+ reference = (
11
+ "https://hfs.illinois.gov/medicalprograms/hbwd/premiums.html",
12
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
13
+ )
14
+ defined_for = "il_hbwd_eligible"
15
+
16
+ def formula(person, period, parameters):
17
+ p = parameters(period).gov.states.il.hfs.hbwd.premium
18
+
19
+ earned = person("il_hbwd_countable_earned_income", period)
20
+ unearned = person("il_hbwd_countable_unearned_income", period)
21
+
22
+ # Lookup premium components from bracket parameters
23
+ return p.earned.calc(earned) + p.unearned.calc(unearned)
@@ -0,0 +1,24 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_countable_earned_income(Variable):
5
+ value_type = float
6
+ unit = USD
7
+ entity = Person
8
+ label = "Illinois Health Benefits for Workers with Disabilities countable earned income"
9
+ definition_period = MONTH
10
+ reference = (
11
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.360",
12
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.362",
13
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.370",
14
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
15
+ )
16
+ defined_for = StateCode.IL
17
+
18
+ adds = ["il_aabd_earned_income_after_exemption_person"]
19
+ # HBWD uses the same earned income calculation as AABD per
20
+ # 89 Ill. Admin. Code § 120.510(i) referencing § 120.362 and § 120.370
21
+ # § 120.362 and § 113.120 have identical exemption amounts:
22
+ # - $25 flat exemption (§ 120.362(a) / § 113.120(a))
23
+ # - $20 + 50% of next $60 for disabled workers (§ 120.362(b)(1) / § 113.120(b))
24
+ # § 120.370 references AABD MANG work expense deductions
@@ -0,0 +1,16 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_gross_earned_income(Variable):
5
+ value_type = float
6
+ unit = USD
7
+ entity = Person
8
+ label = "Illinois Health Benefits for Workers with Disabilities gross earned income"
9
+ definition_period = MONTH
10
+ reference = (
11
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.360",
12
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
13
+ )
14
+ defined_for = StateCode.IL
15
+
16
+ adds = "gov.states.il.hfs.hbwd.eligibility.income.sources.earned"
@@ -0,0 +1,21 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_countable_income(Variable):
5
+ value_type = float
6
+ unit = USD
7
+ entity = SPMUnit
8
+ label = "Illinois Health Benefits for Workers with Disabilities countable income"
9
+ definition_period = MONTH
10
+ reference = (
11
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
12
+ "https://hfs.illinois.gov/medicalprograms/hbwd/eligibility.html",
13
+ )
14
+ defined_for = "is_tax_unit_head_or_spouse"
15
+
16
+ adds = [
17
+ "il_aabd_earned_income_after_exemption_person",
18
+ "il_hbwd_countable_unearned_income",
19
+ ]
20
+ # Per § 120.510(f), count income of individual AND spouse
21
+ # Adds automatically sums across SPM unit members
@@ -0,0 +1,16 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_countable_unearned_income(Variable):
5
+ value_type = float
6
+ unit = USD
7
+ entity = Person
8
+ label = "Illinois Health Benefits for Workers with Disabilities countable unearned income"
9
+ definition_period = MONTH
10
+ reference = (
11
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.330",
12
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
13
+ )
14
+ defined_for = StateCode.IL
15
+
16
+ adds = "gov.states.il.hfs.hbwd.eligibility.income.sources.unearned"
@@ -0,0 +1,23 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hfs_immigration_status_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Illinois HFS programs immigration status eligible"
8
+ definition_period = YEAR
9
+ reference = "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.310"
10
+ defined_for = StateCode.IL
11
+
12
+ def formula(person, period, parameters):
13
+ p = parameters(period).gov.states.il.hfs
14
+ immigration_status = person("immigration_status", period)
15
+ is_citizen = (
16
+ immigration_status == immigration_status.possible_values.CITIZEN
17
+ )
18
+ immigration_status_str = immigration_status.decode_to_str()
19
+ has_qualifying_status = np.isin(
20
+ immigration_status_str,
21
+ p.qualified_noncitizen_statuses,
22
+ )
23
+ return has_qualifying_status | is_citizen
@@ -15,11 +15,12 @@ class mt_itemized_deductions_indiv(Variable):
15
15
  defined_for = StateCode.MT
16
16
 
17
17
  def formula(person, period, parameters):
18
- p = parameters(period).gov.irs.deductions
18
+ p = parameters(period).gov.states.mt.tax.income.deductions.itemized
19
19
  # Since we only compute the federal charitable deduction at the tax unit level,
20
20
  # we will split the value between each spouse
21
21
  charitable_deduction = (
22
- person.tax_unit("charitable_deduction", period) * 0.5
22
+ person.tax_unit("charitable_deduction", period)
23
+ * p.spouse_allocation_rate
23
24
  )
24
25
  head_or_spouse = person("is_tax_unit_head_or_spouse", period)
25
26
  # The interest deduction is the sum of mortagage and investment interest expenses