policyengine-us 1.449.6__py3-none-any.whl → 1.458.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 (114) hide show
  1. policyengine_us/parameters/gov/contrib/states/de/dependent_credit/age_limit/in_effect.yaml +9 -0
  2. policyengine_us/parameters/gov/contrib/states/de/dependent_credit/age_limit/threshold.yaml +9 -0
  3. policyengine_us/parameters/gov/contrib/states/de/dependent_credit/amount.yaml +9 -0
  4. policyengine_us/parameters/gov/contrib/states/de/dependent_credit/in_effect.yaml +9 -0
  5. policyengine_us/parameters/gov/contrib/states/de/dependent_credit/phaseout/rate.yaml +9 -0
  6. policyengine_us/parameters/gov/contrib/states/de/dependent_credit/phaseout/threshold.yaml +23 -0
  7. policyengine_us/parameters/gov/irs/deductions/qbi/max/reit_ptp_rate.yaml +13 -0
  8. policyengine_us/parameters/gov/states/ca/chhs/medi_cal_enrollment_freeze/in_effect.yaml +12 -0
  9. policyengine_us/parameters/gov/states/il/dhs/aabd/{qualified_noncitizen_status.yaml → qualified_noncitizen_statuses.yaml} +3 -5
  10. policyengine_us/parameters/gov/states/il/dhs/tanf/{qualified_noncitizen_status.yaml → qualified_noncitizen_statuses.yaml} +2 -2
  11. policyengine_us/parameters/gov/states/il/hfs/bcc/eligibility/age.yaml +12 -0
  12. policyengine_us/parameters/gov/states/il/hfs/fpp/eligibility/household_size.yaml +14 -0
  13. policyengine_us/parameters/gov/states/il/hfs/fpp/eligibility/income_limit.yaml +15 -0
  14. policyengine_us/parameters/gov/states/il/hfs/mpe/eligibility/income_limit.yaml +13 -0
  15. policyengine_us/parameters/gov/states/il/hfs/qualified_noncitizen_statuses.yaml +17 -0
  16. policyengine_us/parameters/gov/states/nj/tax/income/additions.yaml +12 -0
  17. policyengine_us/parameters/gov/states/nj/tax/income/gross_income_sources.yaml +32 -0
  18. policyengine_us/parameters/gov/states/ut/tax/income/credits/at_home_parent/amount.yaml +4 -0
  19. policyengine_us/parameters/gov/states/ut/tax/income/credits/at_home_parent/max_agi.yaml +6 -2
  20. policyengine_us/parameters/gov/states/ut/tax/income/credits/at_home_parent/max_child_age.yaml +6 -2
  21. policyengine_us/parameters/gov/states/ut/tax/income/credits/at_home_parent/parent_max_earnings.yaml +6 -2
  22. policyengine_us/parameters/gov/states/ut/tax/income/credits/ctc/amount.yaml +4 -0
  23. policyengine_us/parameters/gov/states/ut/tax/income/credits/ctc/child_age_threshold.yaml +4 -0
  24. policyengine_us/parameters/gov/states/ut/tax/income/credits/ctc/reduction/rate.yaml +4 -0
  25. policyengine_us/parameters/gov/states/ut/tax/income/credits/ctc/reduction/start.yaml +4 -0
  26. policyengine_us/parameters/gov/states/ut/tax/income/credits/earned_income/rate.yaml +4 -0
  27. policyengine_us/parameters/gov/states/ut/tax/income/credits/military_retirement/rate.yaml +26 -0
  28. policyengine_us/parameters/gov/states/ut/tax/income/credits/non_refundable.yaml +5 -0
  29. policyengine_us/parameters/gov/states/ut/tax/income/credits/retirement/birth_year.yaml +4 -0
  30. policyengine_us/parameters/gov/states/ut/tax/income/credits/retirement/max.yaml +4 -0
  31. policyengine_us/parameters/gov/states/ut/tax/income/credits/retirement/phase_out/rate.yaml +4 -0
  32. policyengine_us/parameters/gov/states/ut/tax/income/credits/retirement/phase_out/threshold.yaml +4 -0
  33. policyengine_us/parameters/gov/states/ut/tax/income/credits/ss_benefits/phase_out/rate.yaml +4 -0
  34. policyengine_us/parameters/gov/states/ut/tax/income/credits/ss_benefits/phase_out/threshold.yaml +4 -0
  35. policyengine_us/parameters/gov/states/ut/tax/income/credits/taxpayer/in_effect.yaml +2 -0
  36. policyengine_us/parameters/gov/states/ut/tax/income/credits/taxpayer/personal_exemption.yaml +5 -0
  37. policyengine_us/parameters/gov/states/ut/tax/income/credits/taxpayer/phase_out/rate.yaml +5 -1
  38. policyengine_us/parameters/gov/states/ut/tax/income/credits/taxpayer/phase_out/threshold.yaml +9 -0
  39. policyengine_us/parameters/gov/states/ut/tax/income/credits/taxpayer/rate.yaml +4 -0
  40. policyengine_us/parameters/gov/states/ut/tax/income/rate.yaml +3 -0
  41. policyengine_us/reforms/reforms.py +7 -0
  42. policyengine_us/reforms/state_dependent_exemptions/repeal_state_dependent_exemptions.py +1 -1
  43. policyengine_us/reforms/states/de/__init__.py +3 -0
  44. policyengine_us/reforms/states/de/dependent_credit/de_dependent_credit_reform.py +165 -0
  45. policyengine_us/tests/policy/baseline/gov/hhs/medicaid/medicaid_enrolled.yaml +105 -0
  46. policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/qbid/qbid_amount.yaml +75 -3
  47. policyengine_us/tests/policy/baseline/gov/local/ca/la/general_relief/eligible/immigration/la_general_relief_immigration_status_eligible_person.yaml +2 -2
  48. policyengine_us/tests/policy/baseline/gov/states/ca/chhs/is_ca_medicaid_immigration_status_eligible.yaml +59 -5
  49. policyengine_us/tests/policy/baseline/gov/states/il/dhs/tanf/eligibility/il_tanf_immigration_status_eligible_person.yaml +2 -10
  50. policyengine_us/tests/policy/baseline/gov/states/il/hfs/bcc/eligibility/il_bcc_age_eligible.yaml +39 -0
  51. policyengine_us/tests/policy/baseline/gov/states/il/hfs/bcc/eligibility/il_bcc_eligible.yaml +95 -0
  52. policyengine_us/tests/policy/baseline/gov/states/il/hfs/bcc/eligibility/il_bcc_insurance_eligible.yaml +35 -0
  53. policyengine_us/tests/policy/baseline/gov/states/il/hfs/fpp/il_fpp_income_eligible.yaml +35 -0
  54. policyengine_us/tests/policy/baseline/gov/states/il/hfs/fpp/il_fpp_income_level.yaml +27 -0
  55. policyengine_us/tests/policy/baseline/gov/states/il/hfs/fpp/integration.yaml +116 -0
  56. policyengine_us/tests/policy/baseline/gov/states/il/hfs/il_hfs_immigration_status_eligible.yaml +47 -0
  57. policyengine_us/tests/policy/baseline/gov/states/il/hfs/mpe/il_mpe_eligible.yaml +39 -0
  58. policyengine_us/tests/policy/baseline/gov/states/il/hfs/mpe/il_mpe_income_eligible.yaml +23 -0
  59. policyengine_us/tests/policy/baseline/gov/states/il/hfs/mpe/integration.yaml +138 -0
  60. policyengine_us/tests/policy/baseline/gov/states/il/hfs/smib/eligibility/il_smib_eligible.yaml +88 -0
  61. policyengine_us/tests/policy/baseline/gov/states/il/hfs/smib/integration.yaml +73 -0
  62. policyengine_us/tests/policy/baseline/gov/states/ky/tax/income/credits/family_size_tax_credit/ky_family_size_tax_credit_rate.yaml +8 -8
  63. policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/credits/eitc/nj_eitc.yaml +8 -3
  64. policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/integration.yaml +137 -0
  65. policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/taxable_income/nj_agi.yaml +7 -8
  66. policyengine_us/tests/policy/baseline/gov/states/tx/tanf/assistance_unit/tx_tanf_categorically_eligible_person.yaml +1 -1
  67. policyengine_us/tests/policy/baseline/gov/states/ut/tax/income/credits/military_retirement_credit/ut_military_retirement_credit.yaml +89 -0
  68. policyengine_us/tests/policy/baseline/gov/states/ut/tax/income/credits/military_retirement_credit/ut_military_retirement_credit_eligible.yaml +50 -0
  69. policyengine_us/tests/policy/baseline/gov/states/wv/tax/income/credits/liftc/wv_low_income_family_tax_credit_fpg.yaml +10 -6
  70. policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/pr_agi.yaml +1 -1
  71. policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/pr_agi_person.yaml +1 -1
  72. policyengine_us/tests/policy/baseline/gov/usda/snap/snap_min_allotment.yaml +3 -3
  73. policyengine_us/tests/policy/baseline/household/expense/health/has_bcc_qualifying_coverage.yaml +12 -0
  74. policyengine_us/tests/policy/contrib/state_dependent_exemptions/repeal_state_dependent_exemptions.yaml +25 -1
  75. policyengine_us/tests/policy/contrib/states/de/dependent_credit_reform_test.yaml +210 -0
  76. policyengine_us/variables/gov/hhs/medicaid/costs/medicaid_group.py +2 -2
  77. policyengine_us/variables/gov/hhs/medicaid/receives_medicaid.py +17 -0
  78. policyengine_us/variables/gov/irs/income/taxable_income/deductions/qualified_business_income_deduction/qbid_amount.py +16 -6
  79. policyengine_us/variables/gov/states/ca/chhs/is_ca_medicaid_immigration_status_eligible.py +25 -4
  80. policyengine_us/variables/gov/states/il/dhs/aabd/eligibility/il_aabd_immigration_status_eligible_person.py +1 -1
  81. policyengine_us/variables/gov/states/il/dhs/tanf/eligibility/il_tanf_immigration_status_eligible_person.py +1 -1
  82. policyengine_us/variables/gov/states/il/hfs/bcc/eligibility/il_bcc_age_eligible.py +15 -0
  83. policyengine_us/variables/gov/states/il/hfs/bcc/eligibility/il_bcc_eligible.py +27 -0
  84. policyengine_us/variables/gov/states/il/hfs/bcc/eligibility/il_bcc_insurance_eligible.py +29 -0
  85. policyengine_us/variables/gov/states/il/hfs/fpp/eligibility/il_fpp_eligible.py +40 -0
  86. policyengine_us/variables/gov/states/il/hfs/fpp/eligibility/il_fpp_income_eligible.py +18 -0
  87. policyengine_us/variables/gov/states/il/hfs/fpp/il_fpp_income_level.py +29 -0
  88. policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_eligible.py +1 -1
  89. policyengine_us/variables/gov/states/il/hfs/{hbwd/eligibility/il_hbwd_immigration_status_eligible.py → il_hfs_immigration_status_eligible.py} +5 -8
  90. policyengine_us/variables/gov/states/il/hfs/mpe/eligibility/il_mpe_income_eligible.py +15 -0
  91. policyengine_us/variables/gov/states/il/hfs/mpe/il_mpe_eligible.py +15 -0
  92. policyengine_us/variables/gov/states/il/hfs/smib/eligibility/il_smib_categorical_eligible.py +26 -0
  93. policyengine_us/variables/gov/states/il/hfs/smib/eligibility/il_smib_eligible.py +28 -0
  94. policyengine_us/variables/gov/states/il/hfs/smib/il_smib.py +21 -0
  95. policyengine_us/variables/gov/states/il/hfs/smib/il_smib_person.py +24 -0
  96. policyengine_us/variables/gov/states/ky/tax/income/credits/family_size_credit/ky_family_size_tax_credit_rate.py +1 -1
  97. policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_additions.py +8 -3
  98. policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_gross_income.py +17 -0
  99. policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_total_income.py +12 -6
  100. policyengine_us/variables/gov/states/nj/tax/income/credits/eitc/nj_eitc.py +7 -1
  101. policyengine_us/variables/gov/states/ut/tax/income/credits/military_retirement_credit/ut_military_retirement_credit.py +20 -0
  102. policyengine_us/variables/gov/states/ut/tax/income/credits/military_retirement_credit/ut_military_retirement_credit_eligible.py +22 -0
  103. policyengine_us/variables/gov/states/wv/tax/income/credits/liftc/wv_low_income_family_tax_credit_fpg.py +1 -1
  104. policyengine_us/variables/household/expense/health/has_bcc_qualifying_coverage.py +16 -0
  105. policyengine_us/variables/household/income/person/dividends/qualified_reit_and_ptp_income.py +1 -1
  106. policyengine_us/variables/household/income/spm_unit/spm_unit_tenure_type.py +17 -0
  107. {policyengine_us-1.449.6.dist-info → policyengine_us-1.458.0.dist-info}/METADATA +2 -2
  108. {policyengine_us-1.449.6.dist-info → policyengine_us-1.458.0.dist-info}/RECORD +111 -60
  109. policyengine_us/parameters/gov/states/il/hfs/hbwd/eligibility/qualified_noncitizen_statuses.yaml +0 -21
  110. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_immigration_status_eligible.yaml +0 -47
  111. policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/integation.yaml +0 -57
  112. {policyengine_us-1.449.6.dist-info → policyengine_us-1.458.0.dist-info}/WHEEL +0 -0
  113. {policyengine_us-1.449.6.dist-info → policyengine_us-1.458.0.dist-info}/entry_points.txt +0 -0
  114. {policyengine_us-1.449.6.dist-info → policyengine_us-1.458.0.dist-info}/licenses/LICENSE +0 -0
@@ -4,14 +4,13 @@ from policyengine_us.model_api import *
4
4
  class qbid_amount(Variable):
5
5
  value_type = float
6
6
  entity = Person
7
- label = (
8
- "Per-cap qualified business income deduction amount for each person"
9
- )
7
+ label = "Per-person qualified business income deduction amount"
10
8
  unit = USD
11
9
  definition_period = YEAR
12
10
  reference = (
13
- "https://www.law.cornell.edu/uscode/text/26/199A#b_1"
14
- "https://www.irs.gov/pub/irs-prior/p535--2018.pdf"
11
+ "https://www.law.cornell.edu/uscode/text/26/199A#b_1",
12
+ "https://www.irs.gov/pub/irs-prior/p535--2018.pdf",
13
+ "https://www.irs.gov/pub/irs-pdf/f8995.pdf",
15
14
  )
16
15
 
17
16
  def formula(person, period, parameters):
@@ -53,4 +52,15 @@ class qbid_amount(Variable):
53
52
  )
54
53
  line26 = max_(0, adj_qbid_max - reduction)
55
54
  line12 = where(adj_cap < adj_qbid_max, line26, 0)
56
- return max_(line11, line12) # Worksheet 12-A, line 13
55
+ # QBI component (Worksheet 12-A, line 13 / Form 8995 Line 5)
56
+ qbi_component = max_(line11, line12)
57
+
58
+ # REIT/PTP component (Form 8995 Lines 6-9)
59
+ # Per §199A(b)(1)(B), qualified REIT dividends and qualified PTP income
60
+ # receive a 20% deduction WITHOUT W-2 wage or UBIA limitations
61
+ reit_ptp_income = person("qualified_reit_and_ptp_income", period)
62
+ reit_ptp_component = p.max.reit_ptp_rate * max_(0, reit_ptp_income)
63
+
64
+ # Total QBID = QBI component + REIT/PTP component
65
+ # (Form 8995 Line 10: Add lines 5 and 9)
66
+ return qbi_component + reit_ptp_component
@@ -4,15 +4,36 @@ from policyengine_us.model_api import *
4
4
  class is_ca_medicaid_immigration_status_eligible(Variable):
5
5
  value_type = bool
6
6
  entity = Person
7
- label = "Eligible for California state-funded Medicaid regardless of immigration status"
7
+ label = "Eligible for California Medi-Cal without satisfactory immigration status"
8
8
  definition_period = YEAR
9
- reference = [
9
+ reference = (
10
10
  "https://california.public.law/codes/welfare_and_institutions_code_section_14007.8",
11
- ]
11
+ )
12
+ documentation = """
13
+ California Welfare and Institutions Code Section 14007.8 provides
14
+ state-funded Medi-Cal to individuals without satisfactory immigration
15
+ status based on age brackets. Starting January 1, 2026, new enrollments
16
+ for adults 19+ are frozen, but existing enrollees retain coverage.
17
+ """
12
18
  defined_for = StateCode.CA
13
19
 
14
20
  def formula(person, period, parameters):
15
21
  p = parameters(period).gov.states.ca.chhs
16
22
  age = person("age", period)
17
23
  pregnant = person("is_pregnant", period)
18
- return p.eligible_regardless_of_immigration_status.calc(age) | pregnant
24
+ # Standard eligibility based on age or pregnancy
25
+ standard_eligible = (
26
+ p.eligible_regardless_of_immigration_status.calc(age) | pregnant
27
+ )
28
+ # Continuous coverage only applies after enrollment freeze
29
+ if p.medi_cal_enrollment_freeze.in_effect:
30
+ receives_medicaid = person("receives_medicaid", period)
31
+ # Section 14007.8 is specifically for undocumented immigrants
32
+ immigration_status = person("immigration_status", period)
33
+ undocumented = (
34
+ immigration_status
35
+ == immigration_status.possible_values.UNDOCUMENTED
36
+ )
37
+ continuous_coverage = receives_medicaid & undocumented
38
+ return standard_eligible | continuous_coverage
39
+ return standard_eligible
@@ -18,6 +18,6 @@ class il_aabd_immigration_status_eligible_person(Variable):
18
18
  immigration_status_str = immigration_status.decode_to_str()
19
19
  has_qualifying_status = np.isin(
20
20
  immigration_status_str,
21
- p.qualified_noncitizen_status,
21
+ p.qualified_noncitizen_statuses,
22
22
  )
23
23
  return has_qualifying_status | is_citizen
@@ -15,7 +15,7 @@ class il_tanf_immigration_status_eligible_person(Variable):
15
15
  immigration_status_str = immigration_status.decode_to_str()
16
16
  has_qualifying_status = np.isin(
17
17
  immigration_status_str,
18
- p.qualified_noncitizen_status,
18
+ p.qualified_noncitizen_statuses,
19
19
  )
20
20
  is_citizen = (
21
21
  immigration_status == immigration_status.possible_values.CITIZEN
@@ -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("receives_medicaid", 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,40 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_fpp_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Illinois Family Planning Program eligible"
8
+ definition_period = YEAR
9
+ reference = (
10
+ "https://www.dhs.state.il.us/page.aspx?item=146077",
11
+ "https://hfs.illinois.gov/medicalclients/familyplanning.html",
12
+ "https://www.ilga.gov/agencies/JCAR/EntirePart?titlepart=07700635",
13
+ )
14
+ defined_for = StateCode.IL
15
+
16
+ def formula(person, period, parameters):
17
+ # Note: Illinois has two Family Planning programs:
18
+ # 1. Family Planning Presumptive Eligibility (FPPE) - temporary
19
+ # coverage, does NOT require citizenship/immigration status
20
+ # 2. Ongoing Family Planning Program - 1 year coverage, REQUIRES
21
+ # US citizenship or qualified immigrant status
22
+ # This variable models the ongoing program. The only eligibility
23
+ # difference between the two is the immigration requirement.
24
+
25
+ income_eligible = person("il_fpp_income_eligible", period)
26
+ # Must NOT be pregnant (pregnant individuals should apply for
27
+ # maternal health programs instead)
28
+ not_pregnant = ~person("is_pregnant", period)
29
+ # Use shared IL HFS immigration status check
30
+ immigration_eligible = person(
31
+ "il_hfs_immigration_status_eligible", period
32
+ )
33
+ # Cannot be enrolled in other non-spenddown full medical coverage
34
+ not_on_medicaid = ~person("is_medicaid_eligible", period)
35
+ return (
36
+ income_eligible
37
+ & not_pregnant
38
+ & immigration_eligible
39
+ & not_on_medicaid
40
+ )
@@ -0,0 +1,18 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_fpp_income_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Illinois Family Planning Program income eligible"
8
+ definition_period = YEAR
9
+ reference = (
10
+ "https://www.dhs.state.il.us/page.aspx?item=146077",
11
+ "https://hfs.illinois.gov/medicalclients/familyplanning.html",
12
+ )
13
+ defined_for = StateCode.IL
14
+
15
+ def formula(person, period, parameters):
16
+ p = parameters(period).gov.states.il.hfs.fpp.eligibility
17
+ income_level = person("il_fpp_income_level", period)
18
+ return income_level <= p.income_limit
@@ -0,0 +1,29 @@
1
+ from policyengine_us.model_api import *
2
+ from policyengine_us.variables.gov.hhs.tax_unit_fpg import fpg
3
+
4
+
5
+ class il_fpp_income_level(Variable):
6
+ value_type = float
7
+ entity = Person
8
+ label = "Illinois Family Planning Program income level"
9
+ unit = "/1"
10
+ definition_period = YEAR
11
+ reference = (
12
+ "https://www.dhs.state.il.us/page.aspx?item=146077",
13
+ "https://hfs.illinois.gov/medicalclients/familyplanning.html",
14
+ )
15
+ defined_for = StateCode.IL
16
+
17
+ def formula(person, period, parameters):
18
+ # Only the applicant's income is counted (not household income)
19
+ income = person("adjusted_gross_income_person", period)
20
+
21
+ # Fixed household size of 2 per IL FPP policy
22
+ p = parameters(period).gov.states.il.hfs.fpp.eligibility
23
+
24
+ # Calculate FPG using fixed household size
25
+ state_group = person.household("state_group_str", period)
26
+ fpp_fpg = fpg(p.household_size, state_group, period, parameters)
27
+
28
+ # Return income as fraction of FPL
29
+ return income / fpp_fpg
@@ -20,7 +20,7 @@ class il_hbwd_eligible(Variable):
20
20
  income_eligible = person("il_hbwd_income_eligible", period)
21
21
  asset_eligible = person("il_hbwd_asset_eligible", period)
22
22
  immigration_eligible = person(
23
- "il_hbwd_immigration_status_eligible", period
23
+ "il_hfs_immigration_status_eligible", period
24
24
  )
25
25
 
26
26
  return (
@@ -1,19 +1,16 @@
1
1
  from policyengine_us.model_api import *
2
2
 
3
3
 
4
- class il_hbwd_immigration_status_eligible(Variable):
4
+ class il_hfs_immigration_status_eligible(Variable):
5
5
  value_type = bool
6
6
  entity = Person
7
- label = "Illinois Health Benefits for Workers with Disabilities immigration status eligible"
8
- definition_period = MONTH
9
- reference = (
10
- "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.310",
11
- "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
12
- )
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"
13
10
  defined_for = StateCode.IL
14
11
 
15
12
  def formula(person, period, parameters):
16
- p = parameters(period).gov.states.il.hfs.hbwd.eligibility
13
+ p = parameters(period).gov.states.il.hfs
17
14
  immigration_status = person("immigration_status", period)
18
15
  is_citizen = (
19
16
  immigration_status == immigration_status.possible_values.CITIZEN
@@ -0,0 +1,15 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_mpe_income_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Illinois MPE income eligible"
8
+ definition_period = MONTH
9
+ reference = "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.66"
10
+ defined_for = StateCode.IL
11
+
12
+ def formula(person, period, parameters):
13
+ p = parameters(period).gov.states.il.hfs.mpe.eligibility
14
+ income_level = person("medicaid_income_level", period.this_year)
15
+ return income_level <= p.income_limit
@@ -0,0 +1,15 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_mpe_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Illinois Medicaid Presumptive Eligibility eligible"
8
+ definition_period = MONTH
9
+ reference = "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.66"
10
+ defined_for = StateCode.IL
11
+
12
+ def formula(person, period, parameters):
13
+ is_pregnant = person("is_pregnant", period.this_year)
14
+ income_eligible = person("il_mpe_income_eligible", period)
15
+ return is_pregnant & income_eligible
@@ -0,0 +1,26 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_smib_categorical_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Illinois SMIB categorical eligibility"
8
+ definition_period = MONTH
9
+ documentation = (
10
+ "Eligible for SMIB based on categorical eligibility: "
11
+ "receiving AABD, TANF, or SSI benefits."
12
+ )
13
+ reference = (
14
+ "https://www.ilga.gov/commission/jcar/admincode/089/089001200D00700R.html",
15
+ "https://www.dhs.state.il.us/page.aspx?item=18685",
16
+ )
17
+ defined_for = StateCode.IL
18
+
19
+ def formula(person, period, parameters):
20
+ # AABD recipient
21
+ is_aabd = person("il_aabd_eligible_person", period)
22
+ # TANF recipient (SPM unit level, check if person is in eligible unit)
23
+ is_tanf = person.spm_unit("il_tanf_eligible", period)
24
+ # SSI recipient
25
+ is_ssi = person("is_ssi_eligible", period)
26
+ return is_aabd | is_tanf | is_ssi
@@ -0,0 +1,28 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_smib_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Illinois SMIB Buy-In Program eligible"
8
+ definition_period = MONTH
9
+ documentation = (
10
+ "Eligible for Illinois Supplementary Medical Insurance Benefit "
11
+ "(SMIB) Buy-In Program. The program pays Medicare Part B premiums "
12
+ "for eligible individuals receiving AABD, TANF, SSI, or who qualify "
13
+ "as QMB/SLMB/QI under the Medicare Savings Program."
14
+ )
15
+ reference = (
16
+ "https://www.ilga.gov/commission/jcar/admincode/089/089001200D00700R.html",
17
+ "https://www.dhs.state.il.us/page.aspx?item=18685",
18
+ )
19
+ defined_for = StateCode.IL
20
+
21
+ def formula(person, period, parameters):
22
+ # Must be Medicare eligible (or meet other SMIB criteria)
23
+ is_medicare = person("is_medicare_eligible", period.this_year)
24
+ # Check categorical eligibility (AABD, TANF, SSI)
25
+ categorical_eligible = person("il_smib_categorical_eligible", period)
26
+ # Note: QMB/SLMB/QI eligibility will come from MSP when that PR merges
27
+ # For now, categorical eligibility is the primary path
28
+ return is_medicare & categorical_eligible
@@ -0,0 +1,21 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_smib(Variable):
5
+ value_type = float
6
+ entity = SPMUnit
7
+ unit = USD
8
+ label = "Illinois SMIB Buy-In Program benefit"
9
+ definition_period = MONTH
10
+ documentation = (
11
+ "Illinois Supplementary Medical Insurance Benefit (SMIB) Buy-In "
12
+ "Program. The state pays Medicare Part B premiums for eligible "
13
+ "individuals receiving AABD, TANF, SSI, or who qualify under the "
14
+ "Medicare Savings Program (QMB, SLMB, QI)."
15
+ )
16
+ reference = (
17
+ "https://www.ilga.gov/commission/jcar/admincode/089/089001200D00700R.html",
18
+ "https://www.dhs.state.il.us/page.aspx?item=18685",
19
+ )
20
+ defined_for = StateCode.IL
21
+ adds = ["il_smib_person"]
@@ -0,0 +1,24 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_smib_person(Variable):
5
+ value_type = float
6
+ entity = Person
7
+ unit = USD
8
+ label = "Illinois SMIB benefit (person)"
9
+ definition_period = MONTH
10
+ documentation = (
11
+ "Illinois Supplementary Medical Insurance Benefit (SMIB) Buy-In "
12
+ "Program benefit. The state pays the Medicare Part B premium for "
13
+ "eligible individuals."
14
+ )
15
+ reference = (
16
+ "https://www.ilga.gov/commission/jcar/admincode/089/089001200D00700R.html",
17
+ "https://www.dhs.state.il.us/page.aspx?item=18685",
18
+ )
19
+ defined_for = "il_smib_eligible"
20
+
21
+ def formula(person, period, parameters):
22
+ # SMIB pays the Part B premium
23
+ # base_part_b_premium is annual, convert to monthly
24
+ return person("base_part_b_premium", period.this_year) / MONTHS_IN_YEAR
@@ -16,7 +16,7 @@ class ky_family_size_tax_credit_rate(Variable):
16
16
  income = tax_unit("ky_modified_agi", period)
17
17
  fpg = parameters(period).gov.hhs.fpg
18
18
  # This will be CONTIGUOUS_US for Kentucky.
19
- state_group = tax_unit.household("state_group", period)
19
+ state_group = tax_unit.household("state_group_str", period)
20
20
  p1 = fpg.first_person[state_group]
21
21
  padd = fpg.additional_person[state_group]
22
22
  family_size = tax_unit("tax_unit_size", period)
@@ -4,9 +4,14 @@ from policyengine_us.model_api import *
4
4
  class nj_additions(Variable):
5
5
  value_type = float
6
6
  entity = Person
7
- label = "New Jersey additions to federal AGI by person"
7
+ label = "New Jersey additions to gross income"
8
8
  unit = USD
9
- documentation = "Additions to federal AGI to get NJ total income."
9
+ documentation = "Additions to New Jersey gross income per NJ Statute 54A:5-1. These are amounts added back to gross income that may have been excluded or deducted for federal purposes."
10
10
  definition_period = YEAR
11
- reference = "https://law.justia.com/codes/new-jersey/2022/title-54/section-54-8a-36/"
11
+ reference = (
12
+ "https://law.justia.com/codes/new-jersey/title-54a/section-54a-5-1/",
13
+ "https://www.nj.gov/treasury/taxation/pdf/current/1040.pdf", # Lines 28-38
14
+ )
12
15
  defined_for = StateCode.NJ
16
+
17
+ adds = "gov.states.nj.tax.income.additions"
@@ -0,0 +1,17 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class nj_gross_income(Variable):
5
+ value_type = float
6
+ entity = Person
7
+ label = "New Jersey gross income"
8
+ unit = USD
9
+ documentation = "Gross income calculated from specific income categories per NJ statute, before additions and subtractions. This is built from gross income sources, not federal AGI."
10
+ definition_period = YEAR
11
+ reference = (
12
+ "https://law.justia.com/codes/new-jersey/title-54a/section-54a-5-1/",
13
+ "https://www.nj.gov/treasury/taxation/pdf/current/1040.pdf", # Lines 15-27
14
+ )
15
+ defined_for = StateCode.NJ
16
+
17
+ adds = "gov.states.nj.tax.income.gross_income_sources"
@@ -4,14 +4,20 @@ from policyengine_us.model_api import *
4
4
  class nj_total_income(Variable):
5
5
  value_type = float
6
6
  entity = Person
7
- label = "New Jersey total income by person"
7
+ label = "New Jersey total income"
8
8
  unit = USD
9
+ documentation = "New Jersey total income calculated as gross income plus additions minus subtractions per NJ Statute 54A:5-1. This is the income base before exclusions."
9
10
  definition_period = YEAR
10
- reference = "https://law.justia.com/codes/new-jersey/2022/title-54/section-54-8a-36/"
11
+ reference = (
12
+ "https://law.justia.com/codes/new-jersey/title-54a/section-54a-5-1/",
13
+ "https://www.nj.gov/treasury/taxation/pdf/current/1040.pdf",
14
+ )
11
15
  defined_for = StateCode.NJ
12
16
 
13
17
  def formula(person, period, parameters):
14
- agi = person("adjusted_gross_income_person", period)
15
- nj_additions = person("nj_additions", period)
16
- nj_subtractions = person("nj_agi_subtractions", period)
17
- return max_(0, agi + nj_additions - nj_subtractions)
18
+ # NJ Total Income = Gross Income + Additions - Subtractions
19
+ # Per NJ Statute 54A:5-1 and Form NJ-1040
20
+ gross_income = person("nj_gross_income", period)
21
+ additions = person("nj_additions", period)
22
+ subtractions = person("nj_agi_subtractions", period)
23
+ return max_(0, gross_income + additions - subtractions)
@@ -35,10 +35,16 @@ class nj_eitc(Variable):
35
35
  & federal_eitc_meets_income_test
36
36
  & federal_eitc_takes_up
37
37
  )
38
+ childless_eitc_age_eligible = tax_unit(
39
+ "nj_childless_eitc_age_eligible", period
40
+ )
41
+ childless_eitc_eligible = (
42
+ childless_eitc_age_eligible & federal_eitc_meets_income_test
43
+ )
38
44
  federal_eitc = select(
39
45
  [
40
46
  federal_eitc_eligible,
41
- tax_unit("nj_childless_eitc_age_eligible", period),
47
+ childless_eitc_eligible,
42
48
  ],
43
49
  [
44
50
  tax_unit("eitc", period),
@@ -0,0 +1,20 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class ut_military_retirement_credit(Variable):
5
+ value_type = float
6
+ entity = TaxUnit
7
+ label = "Utah military retirement credit"
8
+ unit = USD
9
+ definition_period = YEAR
10
+ reference = "https://le.utah.gov/xcode/Title59/Chapter10/59-10-S1043.html"
11
+ defined_for = "ut_military_retirement_credit_eligible"
12
+
13
+ def formula(tax_unit, period, parameters):
14
+ military_retirement_pay = add(
15
+ tax_unit, period, ["military_retirement_pay"]
16
+ )
17
+ p = parameters(
18
+ period
19
+ ).gov.states.ut.tax.income.credits.military_retirement
20
+ return military_retirement_pay * p.rate
@@ -0,0 +1,22 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class ut_military_retirement_credit_eligible(Variable):
5
+ value_type = bool
6
+ entity = TaxUnit
7
+ label = "Eligible for the Utah military retirement credit"
8
+ definition_period = YEAR
9
+ reference = "https://le.utah.gov/xcode/Title59/Chapter10/59-10-S1043.html"
10
+ defined_for = StateCode.UT
11
+
12
+ def formula(tax_unit, period, parameters):
13
+ # Has military retirement pay
14
+ military_retirement_pay = add(
15
+ tax_unit, period, ["military_retirement_pay"]
16
+ )
17
+ has_military_retirement_pay = military_retirement_pay > 0
18
+ # Cannot claim if claiming the retirement credit (code 18)
19
+ claims_retirement_credit = tax_unit(
20
+ "ut_claims_retirement_credit", period
21
+ )
22
+ return has_military_retirement_pay & ~claims_retirement_credit
@@ -16,7 +16,7 @@ class wv_low_income_family_tax_credit_fpg(Variable):
16
16
 
17
17
  # max family size limit
18
18
  n = tax_unit("tax_unit_size", period)
19
- state_group = tax_unit.household("state_group", period)
19
+ state_group = tax_unit.household("state_group_str", period)
20
20
 
21
21
  p_fpg = parameters(period).gov.hhs.fpg
22
22
  p1 = p_fpg.first_person[state_group]
@@ -0,0 +1,16 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class has_bcc_qualifying_coverage(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Has health coverage that qualifies for breast/cervical cancer treatment"
8
+ definition_period = YEAR
9
+ reference = "https://www.dhs.state.il.us/page.aspx?item=33528"
10
+ # Per PM 06-20-02, a person is considered "uninsured" for BCC purposes
11
+ # unless they have coverage that would pay for cancer treatment.
12
+ # The following do NOT count as qualifying coverage:
13
+ # - Coverage with limited benefits
14
+ # - Coverage where lifetime cap has been met/exceeded
15
+ # - Coverage that excludes cancer treatment
16
+ # - Indian Health Service coverage only
@@ -6,7 +6,7 @@ class qualified_reit_and_ptp_income(Variable):
6
6
  entity = Person
7
7
  label = "REIT and PTP Income"
8
8
  unit = USD
9
- documentation = "REIT and Publically Traded Partnership Income. Part of the QBID calclulation."
9
+ documentation = "REIT and Publicly Traded Partnership Income. Part of the QBID calculation."
10
10
  definition_period = YEAR
11
11
  reference = "https://www.law.cornell.edu/uscode/text/26/1#h_11"
12
12
  uprating = "calibration.gov.irs.soi.qualified_dividend_income"
@@ -0,0 +1,17 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class SPMUnitTenureType(Enum):
5
+ OWNER_WITH_MORTGAGE = "owner with mortgage"
6
+ OWNER_WITHOUT_MORTGAGE = "owner without mortgage"
7
+ RENTER = "renter"
8
+
9
+
10
+ class spm_unit_tenure_type(Variable):
11
+ value_type = Enum
12
+ entity = SPMUnit
13
+ possible_values = SPMUnitTenureType
14
+ default_value = SPMUnitTenureType.RENTER
15
+ label = "SPM unit tenure type"
16
+ documentation = "Maps to Census SPM_TENMORTSTATUS codes: 1=owner with mortgage, 2=owner without mortgage, 3=renter"
17
+ definition_period = YEAR