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.
- policyengine_us/parameters/gov/contrib/states/de/dependent_credit/age_limit/in_effect.yaml +9 -0
- policyengine_us/parameters/gov/contrib/states/de/dependent_credit/age_limit/threshold.yaml +9 -0
- policyengine_us/parameters/gov/contrib/states/de/dependent_credit/amount.yaml +9 -0
- policyengine_us/parameters/gov/contrib/states/de/dependent_credit/in_effect.yaml +9 -0
- policyengine_us/parameters/gov/contrib/states/de/dependent_credit/phaseout/rate.yaml +9 -0
- policyengine_us/parameters/gov/contrib/states/de/dependent_credit/phaseout/threshold.yaml +23 -0
- policyengine_us/parameters/gov/irs/deductions/qbi/max/reit_ptp_rate.yaml +13 -0
- policyengine_us/parameters/gov/states/ca/chhs/medi_cal_enrollment_freeze/in_effect.yaml +12 -0
- policyengine_us/parameters/gov/states/il/dhs/aabd/{qualified_noncitizen_status.yaml → qualified_noncitizen_statuses.yaml} +3 -5
- policyengine_us/parameters/gov/states/il/dhs/tanf/{qualified_noncitizen_status.yaml → qualified_noncitizen_statuses.yaml} +2 -2
- policyengine_us/parameters/gov/states/il/hfs/bcc/eligibility/age.yaml +12 -0
- policyengine_us/parameters/gov/states/il/hfs/fpp/eligibility/household_size.yaml +14 -0
- policyengine_us/parameters/gov/states/il/hfs/fpp/eligibility/income_limit.yaml +15 -0
- policyengine_us/parameters/gov/states/il/hfs/mpe/eligibility/income_limit.yaml +13 -0
- policyengine_us/parameters/gov/states/il/hfs/qualified_noncitizen_statuses.yaml +17 -0
- policyengine_us/parameters/gov/states/nj/tax/income/additions.yaml +12 -0
- policyengine_us/parameters/gov/states/nj/tax/income/gross_income_sources.yaml +32 -0
- policyengine_us/parameters/gov/states/ut/tax/income/credits/at_home_parent/amount.yaml +4 -0
- policyengine_us/parameters/gov/states/ut/tax/income/credits/at_home_parent/max_agi.yaml +6 -2
- policyengine_us/parameters/gov/states/ut/tax/income/credits/at_home_parent/max_child_age.yaml +6 -2
- policyengine_us/parameters/gov/states/ut/tax/income/credits/at_home_parent/parent_max_earnings.yaml +6 -2
- policyengine_us/parameters/gov/states/ut/tax/income/credits/ctc/amount.yaml +4 -0
- policyengine_us/parameters/gov/states/ut/tax/income/credits/ctc/child_age_threshold.yaml +4 -0
- policyengine_us/parameters/gov/states/ut/tax/income/credits/ctc/reduction/rate.yaml +4 -0
- policyengine_us/parameters/gov/states/ut/tax/income/credits/ctc/reduction/start.yaml +4 -0
- policyengine_us/parameters/gov/states/ut/tax/income/credits/earned_income/rate.yaml +4 -0
- policyengine_us/parameters/gov/states/ut/tax/income/credits/military_retirement/rate.yaml +26 -0
- policyengine_us/parameters/gov/states/ut/tax/income/credits/non_refundable.yaml +5 -0
- policyengine_us/parameters/gov/states/ut/tax/income/credits/retirement/birth_year.yaml +4 -0
- policyengine_us/parameters/gov/states/ut/tax/income/credits/retirement/max.yaml +4 -0
- policyengine_us/parameters/gov/states/ut/tax/income/credits/retirement/phase_out/rate.yaml +4 -0
- policyengine_us/parameters/gov/states/ut/tax/income/credits/retirement/phase_out/threshold.yaml +4 -0
- policyengine_us/parameters/gov/states/ut/tax/income/credits/ss_benefits/phase_out/rate.yaml +4 -0
- policyengine_us/parameters/gov/states/ut/tax/income/credits/ss_benefits/phase_out/threshold.yaml +4 -0
- policyengine_us/parameters/gov/states/ut/tax/income/credits/taxpayer/in_effect.yaml +2 -0
- policyengine_us/parameters/gov/states/ut/tax/income/credits/taxpayer/personal_exemption.yaml +5 -0
- policyengine_us/parameters/gov/states/ut/tax/income/credits/taxpayer/phase_out/rate.yaml +5 -1
- policyengine_us/parameters/gov/states/ut/tax/income/credits/taxpayer/phase_out/threshold.yaml +9 -0
- policyengine_us/parameters/gov/states/ut/tax/income/credits/taxpayer/rate.yaml +4 -0
- policyengine_us/parameters/gov/states/ut/tax/income/rate.yaml +3 -0
- policyengine_us/reforms/reforms.py +7 -0
- policyengine_us/reforms/state_dependent_exemptions/repeal_state_dependent_exemptions.py +1 -1
- policyengine_us/reforms/states/de/__init__.py +3 -0
- policyengine_us/reforms/states/de/dependent_credit/de_dependent_credit_reform.py +165 -0
- policyengine_us/tests/policy/baseline/gov/hhs/medicaid/medicaid_enrolled.yaml +105 -0
- policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/qbid/qbid_amount.yaml +75 -3
- policyengine_us/tests/policy/baseline/gov/local/ca/la/general_relief/eligible/immigration/la_general_relief_immigration_status_eligible_person.yaml +2 -2
- policyengine_us/tests/policy/baseline/gov/states/ca/chhs/is_ca_medicaid_immigration_status_eligible.yaml +59 -5
- policyengine_us/tests/policy/baseline/gov/states/il/dhs/tanf/eligibility/il_tanf_immigration_status_eligible_person.yaml +2 -10
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/bcc/eligibility/il_bcc_age_eligible.yaml +39 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/bcc/eligibility/il_bcc_eligible.yaml +95 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/bcc/eligibility/il_bcc_insurance_eligible.yaml +35 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/fpp/il_fpp_income_eligible.yaml +35 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/fpp/il_fpp_income_level.yaml +27 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/fpp/integration.yaml +116 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/il_hfs_immigration_status_eligible.yaml +47 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/mpe/il_mpe_eligible.yaml +39 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/mpe/il_mpe_income_eligible.yaml +23 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/mpe/integration.yaml +138 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/smib/eligibility/il_smib_eligible.yaml +88 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/smib/integration.yaml +73 -0
- policyengine_us/tests/policy/baseline/gov/states/ky/tax/income/credits/family_size_tax_credit/ky_family_size_tax_credit_rate.yaml +8 -8
- policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/credits/eitc/nj_eitc.yaml +8 -3
- policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/integration.yaml +137 -0
- policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/taxable_income/nj_agi.yaml +7 -8
- policyengine_us/tests/policy/baseline/gov/states/tx/tanf/assistance_unit/tx_tanf_categorically_eligible_person.yaml +1 -1
- policyengine_us/tests/policy/baseline/gov/states/ut/tax/income/credits/military_retirement_credit/ut_military_retirement_credit.yaml +89 -0
- policyengine_us/tests/policy/baseline/gov/states/ut/tax/income/credits/military_retirement_credit/ut_military_retirement_credit_eligible.yaml +50 -0
- policyengine_us/tests/policy/baseline/gov/states/wv/tax/income/credits/liftc/wv_low_income_family_tax_credit_fpg.yaml +10 -6
- policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/pr_agi.yaml +1 -1
- policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/pr_agi_person.yaml +1 -1
- policyengine_us/tests/policy/baseline/gov/usda/snap/snap_min_allotment.yaml +3 -3
- policyengine_us/tests/policy/baseline/household/expense/health/has_bcc_qualifying_coverage.yaml +12 -0
- policyengine_us/tests/policy/contrib/state_dependent_exemptions/repeal_state_dependent_exemptions.yaml +25 -1
- policyengine_us/tests/policy/contrib/states/de/dependent_credit_reform_test.yaml +210 -0
- policyengine_us/variables/gov/hhs/medicaid/costs/medicaid_group.py +2 -2
- policyengine_us/variables/gov/hhs/medicaid/receives_medicaid.py +17 -0
- policyengine_us/variables/gov/irs/income/taxable_income/deductions/qualified_business_income_deduction/qbid_amount.py +16 -6
- policyengine_us/variables/gov/states/ca/chhs/is_ca_medicaid_immigration_status_eligible.py +25 -4
- policyengine_us/variables/gov/states/il/dhs/aabd/eligibility/il_aabd_immigration_status_eligible_person.py +1 -1
- policyengine_us/variables/gov/states/il/dhs/tanf/eligibility/il_tanf_immigration_status_eligible_person.py +1 -1
- policyengine_us/variables/gov/states/il/hfs/bcc/eligibility/il_bcc_age_eligible.py +15 -0
- policyengine_us/variables/gov/states/il/hfs/bcc/eligibility/il_bcc_eligible.py +27 -0
- policyengine_us/variables/gov/states/il/hfs/bcc/eligibility/il_bcc_insurance_eligible.py +29 -0
- policyengine_us/variables/gov/states/il/hfs/fpp/eligibility/il_fpp_eligible.py +40 -0
- policyengine_us/variables/gov/states/il/hfs/fpp/eligibility/il_fpp_income_eligible.py +18 -0
- policyengine_us/variables/gov/states/il/hfs/fpp/il_fpp_income_level.py +29 -0
- policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_eligible.py +1 -1
- policyengine_us/variables/gov/states/il/hfs/{hbwd/eligibility/il_hbwd_immigration_status_eligible.py → il_hfs_immigration_status_eligible.py} +5 -8
- policyengine_us/variables/gov/states/il/hfs/mpe/eligibility/il_mpe_income_eligible.py +15 -0
- policyengine_us/variables/gov/states/il/hfs/mpe/il_mpe_eligible.py +15 -0
- policyengine_us/variables/gov/states/il/hfs/smib/eligibility/il_smib_categorical_eligible.py +26 -0
- policyengine_us/variables/gov/states/il/hfs/smib/eligibility/il_smib_eligible.py +28 -0
- policyengine_us/variables/gov/states/il/hfs/smib/il_smib.py +21 -0
- policyengine_us/variables/gov/states/il/hfs/smib/il_smib_person.py +24 -0
- policyengine_us/variables/gov/states/ky/tax/income/credits/family_size_credit/ky_family_size_tax_credit_rate.py +1 -1
- policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_additions.py +8 -3
- policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_gross_income.py +17 -0
- policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_total_income.py +12 -6
- policyengine_us/variables/gov/states/nj/tax/income/credits/eitc/nj_eitc.py +7 -1
- policyengine_us/variables/gov/states/ut/tax/income/credits/military_retirement_credit/ut_military_retirement_credit.py +20 -0
- policyengine_us/variables/gov/states/ut/tax/income/credits/military_retirement_credit/ut_military_retirement_credit_eligible.py +22 -0
- policyengine_us/variables/gov/states/wv/tax/income/credits/liftc/wv_low_income_family_tax_credit_fpg.py +1 -1
- policyengine_us/variables/household/expense/health/has_bcc_qualifying_coverage.py +16 -0
- policyengine_us/variables/household/income/person/dividends/qualified_reit_and_ptp_income.py +1 -1
- policyengine_us/variables/household/income/spm_unit/spm_unit_tenure_type.py +17 -0
- {policyengine_us-1.449.6.dist-info → policyengine_us-1.458.0.dist-info}/METADATA +2 -2
- {policyengine_us-1.449.6.dist-info → policyengine_us-1.458.0.dist-info}/RECORD +111 -60
- policyengine_us/parameters/gov/states/il/hfs/hbwd/eligibility/qualified_noncitizen_statuses.yaml +0 -21
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_immigration_status_eligible.yaml +0 -47
- policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/integation.yaml +0 -57
- {policyengine_us-1.449.6.dist-info → policyengine_us-1.458.0.dist-info}/WHEEL +0 -0
- {policyengine_us-1.449.6.dist-info → policyengine_us-1.458.0.dist-info}/entry_points.txt +0 -0
- {policyengine_us-1.449.6.dist-info → policyengine_us-1.458.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
from policyengine_us.model_api import *
|
|
2
|
+
from policyengine_core.periods import period as period_
|
|
3
|
+
from policyengine_core.periods import instant
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def create_de_dependent_credit_reform() -> Reform:
|
|
7
|
+
class de_eligible_dependents_count(Variable):
|
|
8
|
+
value_type = int
|
|
9
|
+
entity = TaxUnit
|
|
10
|
+
label = "Delaware eligible dependents count"
|
|
11
|
+
definition_period = YEAR
|
|
12
|
+
defined_for = StateCode.DE
|
|
13
|
+
|
|
14
|
+
def formula(tax_unit, period, parameters):
|
|
15
|
+
p = parameters(period).gov.contrib.states.de.dependent_credit
|
|
16
|
+
|
|
17
|
+
person = tax_unit.members
|
|
18
|
+
age = person("age", period)
|
|
19
|
+
is_dependent = person("is_tax_unit_dependent", period)
|
|
20
|
+
|
|
21
|
+
# Apply age limit if in effect
|
|
22
|
+
if p.age_limit.in_effect:
|
|
23
|
+
age_threshold = p.age_limit.threshold
|
|
24
|
+
eligible_dependents = is_dependent & (age < age_threshold)
|
|
25
|
+
else:
|
|
26
|
+
eligible_dependents = is_dependent
|
|
27
|
+
|
|
28
|
+
return tax_unit.sum(eligible_dependents)
|
|
29
|
+
|
|
30
|
+
class de_dependent_credit_maximum(Variable):
|
|
31
|
+
value_type = float
|
|
32
|
+
entity = TaxUnit
|
|
33
|
+
label = "Delaware dependent credit maximum before phaseout"
|
|
34
|
+
unit = USD
|
|
35
|
+
definition_period = YEAR
|
|
36
|
+
defined_for = StateCode.DE
|
|
37
|
+
|
|
38
|
+
def formula(tax_unit, period, parameters):
|
|
39
|
+
p = parameters(period).gov.contrib.states.de.dependent_credit
|
|
40
|
+
|
|
41
|
+
dependents_count = tax_unit("de_eligible_dependents_count", period)
|
|
42
|
+
return dependents_count * p.amount
|
|
43
|
+
|
|
44
|
+
class de_dependent_credit_phaseout(Variable):
|
|
45
|
+
value_type = float
|
|
46
|
+
entity = TaxUnit
|
|
47
|
+
label = "Delaware dependent credit phaseout amount"
|
|
48
|
+
unit = USD
|
|
49
|
+
definition_period = YEAR
|
|
50
|
+
defined_for = StateCode.DE
|
|
51
|
+
|
|
52
|
+
def formula(tax_unit, period, parameters):
|
|
53
|
+
p = parameters(period).gov.contrib.states.de.dependent_credit
|
|
54
|
+
|
|
55
|
+
filing_status = tax_unit("filing_status", period)
|
|
56
|
+
files_separately = tax_unit("de_files_separately", period)
|
|
57
|
+
agi_indiv = add(tax_unit, period, ["de_agi_indiv"])
|
|
58
|
+
agi_joint = add(tax_unit, period, ["de_agi_joint"])
|
|
59
|
+
agi = where(files_separately, agi_indiv, agi_joint)
|
|
60
|
+
|
|
61
|
+
threshold = p.phaseout.threshold[filing_status]
|
|
62
|
+
excess_income = max_(agi - threshold, 0)
|
|
63
|
+
return excess_income * p.phaseout.rate
|
|
64
|
+
|
|
65
|
+
class de_dependent_credit(Variable):
|
|
66
|
+
value_type = float
|
|
67
|
+
entity = TaxUnit
|
|
68
|
+
label = "Delaware dependent credit"
|
|
69
|
+
unit = USD
|
|
70
|
+
definition_period = YEAR
|
|
71
|
+
defined_for = StateCode.DE
|
|
72
|
+
|
|
73
|
+
def formula(tax_unit, period, parameters):
|
|
74
|
+
|
|
75
|
+
maximum = tax_unit("de_dependent_credit_maximum", period)
|
|
76
|
+
phaseout = tax_unit("de_dependent_credit_phaseout", period)
|
|
77
|
+
|
|
78
|
+
return max_(maximum - phaseout, 0)
|
|
79
|
+
|
|
80
|
+
class de_older_dependents_count(Variable):
|
|
81
|
+
value_type = float
|
|
82
|
+
entity = TaxUnit
|
|
83
|
+
label = "Delaware older dependents count"
|
|
84
|
+
unit = USD
|
|
85
|
+
definition_period = YEAR
|
|
86
|
+
defined_for = StateCode.DE
|
|
87
|
+
|
|
88
|
+
def formula(tax_unit, period, parameters):
|
|
89
|
+
person = tax_unit.members
|
|
90
|
+
is_dependent = person("is_tax_unit_dependent", period)
|
|
91
|
+
total_dependents = tax_unit.sum(is_dependent)
|
|
92
|
+
eligible_dependent_credit = tax_unit(
|
|
93
|
+
"de_eligible_dependents_count", period
|
|
94
|
+
)
|
|
95
|
+
return max_(0, total_dependents - eligible_dependent_credit)
|
|
96
|
+
|
|
97
|
+
class de_personal_credit(Variable):
|
|
98
|
+
value_type = float
|
|
99
|
+
entity = TaxUnit
|
|
100
|
+
label = "Delaware personal credit"
|
|
101
|
+
unit = USD
|
|
102
|
+
definition_period = YEAR
|
|
103
|
+
defined_for = StateCode.DE
|
|
104
|
+
|
|
105
|
+
def formula(tax_unit, period, parameters):
|
|
106
|
+
p_base = parameters(
|
|
107
|
+
period
|
|
108
|
+
).gov.states.de.tax.income.credits.personal_credits
|
|
109
|
+
|
|
110
|
+
# Calculate personal credit base amount (head + spouse + older dependents)
|
|
111
|
+
filing_status = tax_unit("filing_status", period)
|
|
112
|
+
older_dependents = tax_unit("de_older_dependents_count", period)
|
|
113
|
+
personal_count = (
|
|
114
|
+
where(
|
|
115
|
+
filing_status == filing_status.possible_values.JOINT,
|
|
116
|
+
2,
|
|
117
|
+
1,
|
|
118
|
+
)
|
|
119
|
+
+ older_dependents
|
|
120
|
+
)
|
|
121
|
+
personal_credit_amount = personal_count * p_base.personal
|
|
122
|
+
|
|
123
|
+
# Add dependent credit (has its own phase-out logic)
|
|
124
|
+
dependent_credit_amount = tax_unit("de_dependent_credit", period)
|
|
125
|
+
|
|
126
|
+
return personal_credit_amount + dependent_credit_amount
|
|
127
|
+
|
|
128
|
+
class reform(Reform):
|
|
129
|
+
def apply(self):
|
|
130
|
+
self.update_variable(de_eligible_dependents_count)
|
|
131
|
+
self.update_variable(de_dependent_credit_maximum)
|
|
132
|
+
self.update_variable(de_dependent_credit_phaseout)
|
|
133
|
+
self.update_variable(de_dependent_credit)
|
|
134
|
+
self.update_variable(de_older_dependents_count)
|
|
135
|
+
self.update_variable(de_personal_credit)
|
|
136
|
+
|
|
137
|
+
return reform
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def create_de_dependent_credit_reform_fn(
|
|
141
|
+
parameters, period, bypass: bool = False
|
|
142
|
+
):
|
|
143
|
+
if bypass:
|
|
144
|
+
return create_de_dependent_credit_reform()
|
|
145
|
+
|
|
146
|
+
p = parameters.gov.contrib.states.de.dependent_credit
|
|
147
|
+
|
|
148
|
+
reform_active = False
|
|
149
|
+
current_period = period_(period)
|
|
150
|
+
|
|
151
|
+
for i in range(5):
|
|
152
|
+
if p(current_period).in_effect:
|
|
153
|
+
reform_active = True
|
|
154
|
+
break
|
|
155
|
+
current_period = current_period.offset(1, "year")
|
|
156
|
+
|
|
157
|
+
if reform_active:
|
|
158
|
+
return create_de_dependent_credit_reform()
|
|
159
|
+
else:
|
|
160
|
+
return None
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
de_dependent_credit_reform = create_de_dependent_credit_reform_fn(
|
|
164
|
+
None, None, bypass=True
|
|
165
|
+
)
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Integration tests for medicaid_enrolled variable
|
|
2
|
+
# Tests compare CA undocumented immigrant eligibility before/after 2026 rule change
|
|
3
|
+
# Existing enrollees retain coverage by setting receives_medicaid: true as input
|
|
4
|
+
|
|
5
|
+
- name: Case 1, undocumented adult in CA 2026 existing enrollee retains coverage.
|
|
6
|
+
period: 2026
|
|
7
|
+
input:
|
|
8
|
+
people:
|
|
9
|
+
person1:
|
|
10
|
+
age: 35
|
|
11
|
+
employment_income: 15_000
|
|
12
|
+
immigration_status: UNDOCUMENTED
|
|
13
|
+
receives_medicaid: true
|
|
14
|
+
tax_units:
|
|
15
|
+
tax_unit:
|
|
16
|
+
members: [person1]
|
|
17
|
+
spm_units:
|
|
18
|
+
spm_unit:
|
|
19
|
+
members: [person1]
|
|
20
|
+
households:
|
|
21
|
+
household:
|
|
22
|
+
members: [person1]
|
|
23
|
+
state_code: CA
|
|
24
|
+
output:
|
|
25
|
+
# Existing enrollees retain coverage via continuous coverage provision
|
|
26
|
+
# receives_medicaid: true signals this person was enrolled before the freeze
|
|
27
|
+
receives_medicaid: [true]
|
|
28
|
+
is_ca_medicaid_immigration_status_eligible: [true]
|
|
29
|
+
is_medicaid_eligible: [true]
|
|
30
|
+
medicaid_enrolled: [true]
|
|
31
|
+
medicaid: [6_439.11]
|
|
32
|
+
|
|
33
|
+
- name: Case 2, undocumented adult in CA 2024 enrolled and eligible.
|
|
34
|
+
period: 2024
|
|
35
|
+
input:
|
|
36
|
+
people:
|
|
37
|
+
person1:
|
|
38
|
+
age: 35
|
|
39
|
+
employment_income: 15_000
|
|
40
|
+
immigration_status: UNDOCUMENTED
|
|
41
|
+
receives_medicaid: true
|
|
42
|
+
tax_units:
|
|
43
|
+
tax_unit:
|
|
44
|
+
members: [person1]
|
|
45
|
+
spm_units:
|
|
46
|
+
spm_unit:
|
|
47
|
+
members: [person1]
|
|
48
|
+
households:
|
|
49
|
+
household:
|
|
50
|
+
members: [person1]
|
|
51
|
+
state_code: CA
|
|
52
|
+
output:
|
|
53
|
+
# In 2024, undocumented adults age 26-49 are eligible in CA
|
|
54
|
+
is_medicaid_eligible: [true]
|
|
55
|
+
|
|
56
|
+
- name: Case 3, undocumented adult in CA 2026 not existing enrollee.
|
|
57
|
+
period: 2026
|
|
58
|
+
input:
|
|
59
|
+
people:
|
|
60
|
+
person1:
|
|
61
|
+
age: 35
|
|
62
|
+
employment_income: 15_000
|
|
63
|
+
immigration_status: UNDOCUMENTED
|
|
64
|
+
# receives_medicaid defaults to false - new applicant blocked by freeze
|
|
65
|
+
tax_units:
|
|
66
|
+
tax_unit:
|
|
67
|
+
members: [person1]
|
|
68
|
+
spm_units:
|
|
69
|
+
spm_unit:
|
|
70
|
+
members: [person1]
|
|
71
|
+
households:
|
|
72
|
+
household:
|
|
73
|
+
members: [person1]
|
|
74
|
+
state_code: CA
|
|
75
|
+
output:
|
|
76
|
+
# New applicants are blocked by the 2026 enrollment freeze
|
|
77
|
+
receives_medicaid: [false]
|
|
78
|
+
is_ca_medicaid_immigration_status_eligible: [false]
|
|
79
|
+
is_medicaid_eligible: [false]
|
|
80
|
+
medicaid_enrolled: [false]
|
|
81
|
+
|
|
82
|
+
- name: Case 4, undocumented adult in CA 2025 computed enrollment.
|
|
83
|
+
period: 2025
|
|
84
|
+
input:
|
|
85
|
+
people:
|
|
86
|
+
person1:
|
|
87
|
+
age: 35
|
|
88
|
+
employment_income: 15_000
|
|
89
|
+
immigration_status: UNDOCUMENTED
|
|
90
|
+
# receives_medicaid not set - using computed enrollment
|
|
91
|
+
tax_units:
|
|
92
|
+
tax_unit:
|
|
93
|
+
members: [person1]
|
|
94
|
+
spm_units:
|
|
95
|
+
spm_unit:
|
|
96
|
+
members: [person1]
|
|
97
|
+
households:
|
|
98
|
+
household:
|
|
99
|
+
members: [person1]
|
|
100
|
+
state_code: CA
|
|
101
|
+
output:
|
|
102
|
+
# In 2025, undocumented adults are still eligible in CA
|
|
103
|
+
is_medicaid_eligible: [true]
|
|
104
|
+
medicaid_enrolled: [true]
|
|
105
|
+
takes_up_medicaid_if_eligible: [true]
|
policyengine_us/tests/policy/baseline/gov/irs/income/taxable_income/deductions/qbid/qbid_amount.yaml
CHANGED
|
@@ -27,12 +27,14 @@
|
|
|
27
27
|
w2_wages_from_qualified_business: 8_000
|
|
28
28
|
unadjusted_basis_qualified_property: 50_000
|
|
29
29
|
taxable_income_less_qbid: 400_100
|
|
30
|
+
qualified_reit_and_ptp_income: 1_000
|
|
30
31
|
business_is_sstb: False
|
|
31
32
|
filing_status: JOINT
|
|
32
33
|
output:
|
|
33
|
-
# Calculation: QBI component is $8,800
|
|
34
|
-
#
|
|
35
|
-
|
|
34
|
+
# Calculation: QBI component is $8,800 (same as Entity 1).
|
|
35
|
+
# REIT/PTP component = 0.20 * 1k = $200.
|
|
36
|
+
# Total = $8,800 + $200 = $9,000.
|
|
37
|
+
qbid_amount: 9_000
|
|
36
38
|
|
|
37
39
|
- name: Non-SSTB above phase-in range (Entity 2 from Appendix A)
|
|
38
40
|
period: 2022
|
|
@@ -127,3 +129,73 @@
|
|
|
127
129
|
# The final taxable income cap (at 24k) is applied at the
|
|
128
130
|
# tax-unit level, outside the scope of this business-level function.
|
|
129
131
|
qbid_amount: 40_000
|
|
132
|
+
|
|
133
|
+
# REIT/PTP Income Tests - Form 8995 Lines 6-9
|
|
134
|
+
# REIT/PTP income gets 20% deduction WITHOUT W-2 wage or UBIA limitations
|
|
135
|
+
|
|
136
|
+
- name: REIT/PTP only - no QBI (Form 8995 simplified path)
|
|
137
|
+
period: 2022
|
|
138
|
+
input:
|
|
139
|
+
qualified_business_income: 0
|
|
140
|
+
w2_wages_from_qualified_business: 0
|
|
141
|
+
unadjusted_basis_qualified_property: 0
|
|
142
|
+
taxable_income_less_qbid: 100_000
|
|
143
|
+
qualified_reit_and_ptp_income: 10_000
|
|
144
|
+
business_is_sstb: False
|
|
145
|
+
filing_status: SINGLE
|
|
146
|
+
output:
|
|
147
|
+
# No QBI, so QBI component = $0.
|
|
148
|
+
# REIT/PTP component = 0.20 * 10k = $2,000.
|
|
149
|
+
# Total = $2,000.
|
|
150
|
+
qbid_amount: 2_000
|
|
151
|
+
|
|
152
|
+
- name: REIT/PTP with SSTB - REIT/PTP not affected by SSTB phase-out
|
|
153
|
+
period: 2022
|
|
154
|
+
input:
|
|
155
|
+
qualified_business_income: 110_000
|
|
156
|
+
w2_wages_from_qualified_business: 60_000
|
|
157
|
+
unadjusted_basis_qualified_property: 6_000
|
|
158
|
+
taxable_income_less_qbid: 460_100
|
|
159
|
+
qualified_reit_and_ptp_income: 50_000
|
|
160
|
+
business_is_sstb: True
|
|
161
|
+
filing_status: JOINT
|
|
162
|
+
output:
|
|
163
|
+
# SSTB above phase-in range, so QBI component = $0 (fully phased out).
|
|
164
|
+
# REIT/PTP is NOT subject to SSTB rules, so:
|
|
165
|
+
# REIT/PTP component = 0.20 * 50k = $10,000.
|
|
166
|
+
# Total = $0 + $10,000 = $10,000.
|
|
167
|
+
qbid_amount: 10_000
|
|
168
|
+
|
|
169
|
+
- name: REIT/PTP above wage limitation - no wage cap applies
|
|
170
|
+
period: 2022
|
|
171
|
+
input:
|
|
172
|
+
qualified_business_income: 0
|
|
173
|
+
w2_wages_from_qualified_business: 0
|
|
174
|
+
unadjusted_basis_qualified_property: 0
|
|
175
|
+
taxable_income_less_qbid: 500_000
|
|
176
|
+
qualified_reit_and_ptp_income: 100_000
|
|
177
|
+
business_is_sstb: False
|
|
178
|
+
filing_status: JOINT
|
|
179
|
+
output:
|
|
180
|
+
# No QBI, so QBI component = $0.
|
|
181
|
+
# Even though taxable income is above threshold and W-2 wages are $0,
|
|
182
|
+
# REIT/PTP is NOT subject to W-2 wage limitations.
|
|
183
|
+
# REIT/PTP component = 0.20 * 100k = $20,000.
|
|
184
|
+
qbid_amount: 20_000
|
|
185
|
+
|
|
186
|
+
- name: Combined QBI and REIT/PTP - below threshold
|
|
187
|
+
period: 2024
|
|
188
|
+
input:
|
|
189
|
+
qualified_business_income: 50_000
|
|
190
|
+
w2_wages_from_qualified_business: 30_000
|
|
191
|
+
unadjusted_basis_qualified_property: 0
|
|
192
|
+
taxable_income_less_qbid: 150_000
|
|
193
|
+
qualified_reit_and_ptp_income: 25_000
|
|
194
|
+
business_is_sstb: False
|
|
195
|
+
filing_status: SINGLE
|
|
196
|
+
output:
|
|
197
|
+
# Below threshold ($191,950 single in 2024), so no W-2/UBIA limit.
|
|
198
|
+
# QBI component = 0.20 * 50k = $10,000.
|
|
199
|
+
# REIT/PTP component = 0.20 * 25k = $5,000.
|
|
200
|
+
# Total = $15,000.
|
|
201
|
+
qbid_amount: 15_000
|
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
output:
|
|
7
7
|
la_general_relief_immigration_status_eligible_person: true
|
|
8
8
|
|
|
9
|
-
- name: Residents are eligible
|
|
9
|
+
- name: Legal Permanent Residents are eligible
|
|
10
10
|
period: 2022
|
|
11
11
|
input:
|
|
12
12
|
in_la: true
|
|
13
|
-
immigration_status:
|
|
13
|
+
immigration_status: LEGAL_PERMANENT_RESIDENT
|
|
14
14
|
output:
|
|
15
15
|
la_general_relief_immigration_status_eligible_person: true
|
|
16
16
|
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
# Tests for CA state-funded Medicaid eligibility regardless of immigration status
|
|
2
|
+
# Per California Welfare and Institutions Code Section 14007.8
|
|
3
|
+
|
|
4
|
+
# Age-based eligibility tests (standard pathway)
|
|
5
|
+
|
|
6
|
+
- name: Case 1, child under 19 is eligible in 2020.
|
|
2
7
|
period: 2020
|
|
3
8
|
input:
|
|
4
9
|
age: 18
|
|
@@ -7,7 +12,7 @@
|
|
|
7
12
|
output:
|
|
8
13
|
is_ca_medicaid_immigration_status_eligible: true
|
|
9
14
|
|
|
10
|
-
- name:
|
|
15
|
+
- name: Case 2, adult 50+ is ineligible in 2020 (before expansion).
|
|
11
16
|
period: 2020
|
|
12
17
|
input:
|
|
13
18
|
age: 50
|
|
@@ -16,7 +21,7 @@
|
|
|
16
21
|
output:
|
|
17
22
|
is_ca_medicaid_immigration_status_eligible: false
|
|
18
23
|
|
|
19
|
-
- name:
|
|
24
|
+
- name: Case 3, adult 26+ is ineligible in 2020 (before expansion).
|
|
20
25
|
period: 2020
|
|
21
26
|
input:
|
|
22
27
|
age: 26
|
|
@@ -25,7 +30,7 @@
|
|
|
25
30
|
output:
|
|
26
31
|
is_ca_medicaid_immigration_status_eligible: false
|
|
27
32
|
|
|
28
|
-
- name:
|
|
33
|
+
- name: Case 4, pregnant adult is eligible regardless of age.
|
|
29
34
|
period: 2020
|
|
30
35
|
input:
|
|
31
36
|
age: 26
|
|
@@ -34,7 +39,7 @@
|
|
|
34
39
|
output:
|
|
35
40
|
is_ca_medicaid_immigration_status_eligible: true
|
|
36
41
|
|
|
37
|
-
- name:
|
|
42
|
+
- name: Case 5, adult 26+ is eligible in 2024 (after expansion).
|
|
38
43
|
period: 2024
|
|
39
44
|
input:
|
|
40
45
|
age: 26
|
|
@@ -42,3 +47,52 @@
|
|
|
42
47
|
state_code: CA
|
|
43
48
|
output:
|
|
44
49
|
is_ca_medicaid_immigration_status_eligible: true
|
|
50
|
+
|
|
51
|
+
# Continuous coverage tests for 2026 enrollment freeze
|
|
52
|
+
|
|
53
|
+
- name: Case 6, undocumented adult not on Medicaid is ineligible in 2026.
|
|
54
|
+
period: 2026
|
|
55
|
+
input:
|
|
56
|
+
age: 35
|
|
57
|
+
is_pregnant: false
|
|
58
|
+
immigration_status: UNDOCUMENTED
|
|
59
|
+
receives_medicaid: false
|
|
60
|
+
state_code: CA
|
|
61
|
+
output:
|
|
62
|
+
is_ca_medicaid_immigration_status_eligible: false
|
|
63
|
+
|
|
64
|
+
- name: Case 7, undocumented adult on Medicaid retains eligibility in 2026.
|
|
65
|
+
period: 2026
|
|
66
|
+
input:
|
|
67
|
+
age: 35
|
|
68
|
+
is_pregnant: false
|
|
69
|
+
immigration_status: UNDOCUMENTED
|
|
70
|
+
receives_medicaid: true
|
|
71
|
+
state_code: CA
|
|
72
|
+
output:
|
|
73
|
+
# Existing enrollees without SIS retain coverage per Section 14007.8
|
|
74
|
+
is_ca_medicaid_immigration_status_eligible: true
|
|
75
|
+
|
|
76
|
+
- name: Case 8, child under 19 is still eligible in 2026 (not affected by freeze).
|
|
77
|
+
period: 2026
|
|
78
|
+
input:
|
|
79
|
+
age: 10
|
|
80
|
+
is_pregnant: false
|
|
81
|
+
receives_medicaid: false
|
|
82
|
+
state_code: CA
|
|
83
|
+
output:
|
|
84
|
+
# Children under 19 remain eligible for new enrollment
|
|
85
|
+
is_ca_medicaid_immigration_status_eligible: true
|
|
86
|
+
|
|
87
|
+
- name: Case 9, refugee on Medicaid does not get CA state-funded eligibility.
|
|
88
|
+
period: 2026
|
|
89
|
+
input:
|
|
90
|
+
age: 35
|
|
91
|
+
is_pregnant: false
|
|
92
|
+
immigration_status: REFUGEE
|
|
93
|
+
receives_medicaid: true
|
|
94
|
+
state_code: CA
|
|
95
|
+
output:
|
|
96
|
+
# Refugees have satisfactory immigration status - they use federal rules
|
|
97
|
+
# CA state-funded program is only for those without SIS
|
|
98
|
+
is_ca_medicaid_immigration_status_eligible: false
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
- name: Eligible refugee
|
|
1
|
+
- name: Eligible refugee
|
|
2
2
|
period: 2023
|
|
3
3
|
input:
|
|
4
4
|
immigration_status: REFUGEE
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
output:
|
|
7
7
|
il_tanf_immigration_status_eligible_person: true
|
|
8
8
|
|
|
9
|
-
- name: Not eligible undocumented
|
|
9
|
+
- name: Not eligible undocumented
|
|
10
10
|
period: 2023
|
|
11
11
|
input:
|
|
12
12
|
immigration_status: UNDOCUMENTED
|
|
@@ -21,11 +21,3 @@
|
|
|
21
21
|
state_code: IL
|
|
22
22
|
output:
|
|
23
23
|
il_tanf_immigration_status_eligible_person: true
|
|
24
|
-
|
|
25
|
-
- name: Eligible HONORABLY_DISCHARGED_VETERAN
|
|
26
|
-
period: 2023
|
|
27
|
-
input:
|
|
28
|
-
immigration_status: HONORABLY_DISCHARGED_VETERAN
|
|
29
|
-
state_code: IL
|
|
30
|
-
output:
|
|
31
|
-
il_tanf_immigration_status_eligible_person: true
|
policyengine_us/tests/policy/baseline/gov/states/il/hfs/bcc/eligibility/il_bcc_age_eligible.yaml
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
- name: Age eligible at 0 (newborn)
|
|
2
|
+
period: 2024
|
|
3
|
+
input:
|
|
4
|
+
state_code: IL
|
|
5
|
+
age: 0
|
|
6
|
+
output:
|
|
7
|
+
il_bcc_age_eligible: true
|
|
8
|
+
|
|
9
|
+
- name: Age eligible at 30
|
|
10
|
+
period: 2024
|
|
11
|
+
input:
|
|
12
|
+
state_code: IL
|
|
13
|
+
age: 30
|
|
14
|
+
output:
|
|
15
|
+
il_bcc_age_eligible: true
|
|
16
|
+
|
|
17
|
+
- name: Age eligible at 64
|
|
18
|
+
period: 2024
|
|
19
|
+
input:
|
|
20
|
+
state_code: IL
|
|
21
|
+
age: 64
|
|
22
|
+
output:
|
|
23
|
+
il_bcc_age_eligible: true
|
|
24
|
+
|
|
25
|
+
- name: Age ineligible at 65
|
|
26
|
+
period: 2024
|
|
27
|
+
input:
|
|
28
|
+
state_code: IL
|
|
29
|
+
age: 65
|
|
30
|
+
output:
|
|
31
|
+
il_bcc_age_eligible: false
|
|
32
|
+
|
|
33
|
+
- name: Age ineligible at 70
|
|
34
|
+
period: 2024
|
|
35
|
+
input:
|
|
36
|
+
state_code: IL
|
|
37
|
+
age: 70
|
|
38
|
+
output:
|
|
39
|
+
il_bcc_age_eligible: false
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
- name: Eligible female US citizen under 65 without insurance
|
|
2
|
+
period: 2024
|
|
3
|
+
input:
|
|
4
|
+
state_code: IL
|
|
5
|
+
is_female: true
|
|
6
|
+
age: 45
|
|
7
|
+
immigration_status: CITIZEN
|
|
8
|
+
receives_medicaid: false
|
|
9
|
+
has_bcc_qualifying_coverage: false
|
|
10
|
+
output:
|
|
11
|
+
il_bcc_eligible: true
|
|
12
|
+
|
|
13
|
+
- name: Eligible female legal permanent resident
|
|
14
|
+
period: 2024
|
|
15
|
+
input:
|
|
16
|
+
state_code: IL
|
|
17
|
+
is_female: true
|
|
18
|
+
age: 35
|
|
19
|
+
immigration_status: LEGAL_PERMANENT_RESIDENT
|
|
20
|
+
receives_medicaid: false
|
|
21
|
+
has_bcc_qualifying_coverage: false
|
|
22
|
+
output:
|
|
23
|
+
il_bcc_eligible: true
|
|
24
|
+
|
|
25
|
+
- name: Eligible female refugee
|
|
26
|
+
period: 2024
|
|
27
|
+
input:
|
|
28
|
+
state_code: IL
|
|
29
|
+
is_female: true
|
|
30
|
+
age: 28
|
|
31
|
+
immigration_status: REFUGEE
|
|
32
|
+
receives_medicaid: false
|
|
33
|
+
has_bcc_qualifying_coverage: false
|
|
34
|
+
output:
|
|
35
|
+
il_bcc_eligible: true
|
|
36
|
+
|
|
37
|
+
- name: Ineligible due to age over 65
|
|
38
|
+
period: 2024
|
|
39
|
+
input:
|
|
40
|
+
state_code: IL
|
|
41
|
+
is_female: true
|
|
42
|
+
age: 70
|
|
43
|
+
immigration_status: CITIZEN
|
|
44
|
+
receives_medicaid: false
|
|
45
|
+
has_bcc_qualifying_coverage: false
|
|
46
|
+
output:
|
|
47
|
+
il_bcc_eligible: false
|
|
48
|
+
|
|
49
|
+
- name: Ineligible due to non-qualifying immigration status
|
|
50
|
+
period: 2024
|
|
51
|
+
input:
|
|
52
|
+
state_code: IL
|
|
53
|
+
is_female: true
|
|
54
|
+
age: 40
|
|
55
|
+
immigration_status: UNDOCUMENTED
|
|
56
|
+
receives_medicaid: false
|
|
57
|
+
has_bcc_qualifying_coverage: false
|
|
58
|
+
output:
|
|
59
|
+
il_bcc_eligible: false
|
|
60
|
+
|
|
61
|
+
- name: Ineligible male
|
|
62
|
+
period: 2024
|
|
63
|
+
input:
|
|
64
|
+
state_code: IL
|
|
65
|
+
is_female: false
|
|
66
|
+
age: 45
|
|
67
|
+
immigration_status: CITIZEN
|
|
68
|
+
receives_medicaid: false
|
|
69
|
+
has_bcc_qualifying_coverage: false
|
|
70
|
+
output:
|
|
71
|
+
il_bcc_eligible: false
|
|
72
|
+
|
|
73
|
+
- name: Ineligible due to qualifying health coverage
|
|
74
|
+
period: 2024
|
|
75
|
+
input:
|
|
76
|
+
state_code: IL
|
|
77
|
+
is_female: true
|
|
78
|
+
age: 45
|
|
79
|
+
immigration_status: CITIZEN
|
|
80
|
+
receives_medicaid: false
|
|
81
|
+
has_bcc_qualifying_coverage: true
|
|
82
|
+
output:
|
|
83
|
+
il_bcc_eligible: false
|
|
84
|
+
|
|
85
|
+
- name: Ineligible due to Medicaid coverage
|
|
86
|
+
period: 2024
|
|
87
|
+
input:
|
|
88
|
+
state_code: IL
|
|
89
|
+
is_female: true
|
|
90
|
+
age: 45
|
|
91
|
+
immigration_status: CITIZEN
|
|
92
|
+
receives_medicaid: true
|
|
93
|
+
has_bcc_qualifying_coverage: false
|
|
94
|
+
output:
|
|
95
|
+
il_bcc_eligible: false
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
- name: Eligible - no insurance
|
|
2
|
+
period: 2024
|
|
3
|
+
input:
|
|
4
|
+
state_code: IL
|
|
5
|
+
receives_medicaid: false
|
|
6
|
+
has_bcc_qualifying_coverage: false
|
|
7
|
+
output:
|
|
8
|
+
il_bcc_insurance_eligible: true
|
|
9
|
+
|
|
10
|
+
- name: Ineligible - on Medicaid
|
|
11
|
+
period: 2024
|
|
12
|
+
input:
|
|
13
|
+
state_code: IL
|
|
14
|
+
receives_medicaid: true
|
|
15
|
+
has_bcc_qualifying_coverage: false
|
|
16
|
+
output:
|
|
17
|
+
il_bcc_insurance_eligible: false
|
|
18
|
+
|
|
19
|
+
- name: Ineligible - has qualifying health coverage
|
|
20
|
+
period: 2024
|
|
21
|
+
input:
|
|
22
|
+
state_code: IL
|
|
23
|
+
receives_medicaid: false
|
|
24
|
+
has_bcc_qualifying_coverage: true
|
|
25
|
+
output:
|
|
26
|
+
il_bcc_insurance_eligible: false
|
|
27
|
+
|
|
28
|
+
- name: Ineligible - both Medicaid and qualifying coverage
|
|
29
|
+
period: 2024
|
|
30
|
+
input:
|
|
31
|
+
state_code: IL
|
|
32
|
+
receives_medicaid: true
|
|
33
|
+
has_bcc_qualifying_coverage: true
|
|
34
|
+
output:
|
|
35
|
+
il_bcc_insurance_eligible: false
|