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
@@ -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]
@@ -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. REIT component is 0.20 * 1k = $200.
34
- # Total = $8,800
35
- qbid_amount: 8_800
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: RESIDENT
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
- - name: In 2020, children under 19 are eligible
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: In 2020, adults over 50 are ineligible
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: In 2020, adults over 26 are ineligible
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: Pregnant adults are eligible
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: In 2024, adults over 26 are ineligible
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
@@ -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