Skip to content
Merged
1 change: 1 addition & 0 deletions changelog.d/statute-first-ca-premium-subsidy.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Select California Premium Subsidy bands from exact nonnegative ACA MAGI divided by prior-year FPL under the adopted [2026 Program Design, (d)(4)](https://board.coveredca.com/meetings/2025/July%2028,%202025/CoveredCA_2026_Premium_Subsidy_Program_Design_Final.pdf#page=2): exactly 150% changes from a 3.19% contribution to 0%, while income above 150% enters the 3.19% band. Retain the truncated fraction for the rate within that band, following [FTB 3849 Table 1-2 (2020)](https://www.ftb.ca.gov/forms/2020/2020-3849-instructions.pdf#page=6) and [2021](https://www.ftb.ca.gov/forms/2021/2021-3849-instructions.pdf#page=6); [2025 Form 8962 Worksheet 2 line 4](https://www.irs.gov/pub/irs-prior/i8962--2025.pdf#page=9) likewise tests "more than" on the exact amount before truncating.
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
description: California sets the federal poverty line thresholds for the applicable percentage brackets under the California Premium Subsidy program.
values:
# 150% is untiered in the Program Design prose but sits in the 3.19% band:
# the Explainer labels the band "150% - At or Below 165%", and under
# 26 CFR 1.36B-3(g)(2) FPL-percentage truncation to 2 decimals collapses
# [150%, 151%) to 1.50, so 150% takes the 150-165% bracket rate.
# The adopted Program Design runs its bands "100% up to 150%" (0%) and
# "Above 150% up to 165%", so an exact ratio equal to a threshold takes the
# lower band: 150% pays 0%. The Policy Explainer labels the upper band
# "150% - At or Below 165%"; the model follows the adopted design.
# Band selection uses exact nonnegative ACA MAGI divided by prior-year FPG;
# only the rate lookup uses truncated aca_magi_fraction. The Designs leave
# rounding unspecified. FTB 3849 Table 1-2 (2020/2021) tests exact income
# for "above" boundaries before truncating for lookup; Form 8962 Worksheet 2
# line 4 likewise checks "more than" before truncation.
2026-01-01:
- 1
- 1.5
Expand Down
1 change: 1 addition & 0 deletions policyengine_us/tests/code_health/test_source_conflicts.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@
"policyengine_us/variables/gov/local/ca/cc/ga/eligibility/ca_cc_general_assistance_eligible.py": 1,
"policyengine_us/variables/gov/local/tax/sales/local_sales_tax.py": 1,
"policyengine_us/variables/gov/states/ar/ade/oec/sra/rates/ar_sra_daily_copay.py": 1,
"policyengine_us/variables/gov/states/ca/hbex/premium_subsidy/ca_premium_subsidy_applicable_percentage.py": 1,
"policyengine_us/variables/gov/states/ct/tax/income/rebate/ct_child_tax_rebate.py": 1,
"policyengine_us/variables/gov/states/fl/commerce/liheap/eligibility/fl_liheap_eligible.py": 1,
"policyengine_us/variables/gov/states/fl/commerce/liheap/eligibility/fl_liheap_income_limit.py": 1,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
# figure (spread across 12 months and re-summed by add()), matching the NM
# convention. aca_magi, aca_magi_fraction, slcsp, aca_ptc and is_aca_ptc_eligible
# are supplied directly so each expectation is exactly hand-verifiable.
# Prior-year tax_unit_fpg is pinned so supplied MAGI and FPL fractions agree.
# The negative-MAGI clamp case supplies eligibility and a positive rate to
# isolate the amount formula; its income fraction is correctly zero.
# CA schedule: threshold [1.0, 1.5, 1.65], initial [0, 0.0319], final [0, 0.0391]

# ---- 100-150% FPL band (applicable percentage 0%) ----
Expand All @@ -27,6 +30,8 @@
tax_units:
tax_unit:
members: [person1]
tax_unit_fpg:
2025: 15_000
aca_magi: 21_000
aca_magi_fraction: 1.40
slcsp: 6_000
Expand All @@ -50,6 +55,8 @@
tax_units:
tax_unit:
members: [person1]
tax_unit_fpg:
2025: 15_000
aca_magi: 21_000
aca_magi_fraction: 1.40
slcsp: 6_000
Expand Down Expand Up @@ -77,6 +84,8 @@
tax_units:
tax_unit:
members: [person1]
tax_unit_fpg:
2025: 15_873.015873015873
aca_magi: 25_000
aca_magi_fraction: 1.575
slcsp: 6_000
Expand All @@ -102,6 +111,8 @@
tax_units:
tax_unit:
members: [person1]
tax_unit_fpg:
2025: 15_757.575757575758
aca_magi: 26_000
aca_magi_fraction: 1.65
slcsp: 7_000
Expand All @@ -127,6 +138,8 @@
tax_units:
tax_unit:
members: [person1]
tax_unit_fpg:
2025: 15_000
aca_magi: 24_000
aca_magi_fraction: 1.60
slcsp: 3_000
Expand All @@ -141,7 +154,11 @@
# ---- Negative-MAGI clamp ----

- name: Case 6, negative ACA MAGI is clamped to zero (does not inflate subsidy).
# magi_frac 1.575 -> pct 0.0355; aca_magi -10_000 clamps to 0 so the -pct*income
# Supply eligibility and pct 0.0355 to isolate the amount clamp:
# exact negative MAGI would otherwise be ineligible and select the 0% band,
# hiding a missing amount clamp. The income fraction is zero because
# aca_magi_fraction floors negative MAGI at zero before dividing by FPG.
# aca_magi -10_000 clamps to 0 so the -pct*income
# term is 0 rather than +355. amount = max(0, 6_000 - 2_000 - 0.0355*0) = 4_000.
# Without the clamp it would be 6_000 - 2_000 - 0.0355*(-10_000) = 4_355.
period: 2026
Expand All @@ -154,8 +171,12 @@
tax_units:
tax_unit:
members: [person1]
tax_unit_fpg:
2025: 10_000
aca_magi: -10_000
aca_magi_fraction: 1.575
aca_magi_fraction: 0
ca_premium_subsidy_eligible: true
ca_premium_subsidy_applicable_percentage: 0.0355
slcsp: 6_000
aca_ptc: 2_000
tax_unit_is_filer: true
Expand All @@ -180,6 +201,8 @@
tax_units:
tax_unit:
members: [person1]
tax_unit_fpg:
2025: 15_873.015873015873
aca_magi: 25_000
aca_magi_fraction: 1.575
slcsp: 6_000
Expand All @@ -204,6 +227,8 @@
tax_units:
tax_unit:
members: [person1]
tax_unit_fpg:
2024: 15_873.015873015873
aca_magi: 25_000
aca_magi_fraction: 1.575
slcsp: 6_000
Expand All @@ -228,6 +253,8 @@
tax_units:
tax_unit:
members: [person1]
tax_unit_fpg:
2025: 16_265.060240963856
aca_magi: 27_000
aca_magi_fraction: 1.66
slcsp: 6_000
Expand All @@ -252,6 +279,8 @@
tax_units:
tax_unit:
members: [person1]
tax_unit_fpg:
2025: 15_000
aca_magi: 21_000
aca_magi_fraction: 1.40
slcsp: 0
Expand Down Expand Up @@ -280,6 +309,8 @@
tax_units:
tax_unit:
members: [person1]
tax_unit_fpg:
2025: 15_000
aca_magi: 15_000
aca_magi_fraction: 1.00
slcsp: 6_000
Expand Down Expand Up @@ -310,6 +341,8 @@
tax_units:
tax_unit:
members: [person1]
tax_unit_fpg:
2025: 15_000
aca_magi: 24_000
aca_magi_fraction: 1.60
slcsp: 6_000
Expand Down Expand Up @@ -338,6 +371,8 @@
tax_units:
tax_unit:
members: [person1]
tax_unit_fpg:
2027: 15_873.015873015873
aca_magi: 25_000
aca_magi_fraction: 1.575
slcsp: 6_000
Expand Down Expand Up @@ -368,6 +403,8 @@
tax_units:
tax_unit:
members: [person1]
tax_unit_fpg:
2025: 16_265.060240963856
aca_magi: 27_000
aca_magi_fraction: 1.66
slcsp: 6_000
Expand Down Expand Up @@ -396,6 +433,8 @@
tax_units:
tax_unit:
members: [person1]
tax_unit_fpg:
2025: 15_000
aca_magi: 14_850
aca_magi_fraction: 0.99
slcsp: 6_000
Expand Down Expand Up @@ -427,6 +466,8 @@
tax_units:
tax_unit:
members: [person1]
tax_unit_fpg:
2026: 15_873.015873015873
aca_magi: 25_000
aca_magi_fraction: 1.575
slcsp: 6_000
Expand Down Expand Up @@ -458,6 +499,8 @@
tax_units:
tax_unit:
members: [person1]
tax_unit_fpg:
2025: 15_873.015873015873
aca_magi: 25_000
aca_magi_fraction: 1.575
slcsp: 6_000
Expand All @@ -476,7 +519,8 @@
# add(is_aca_ptc_eligible) > 0, which fires on any eligible member, so the tax
# unit is eligible. The amount uses tax-unit slcsp/aca_ptc (not per-member), so
# the asymmetry does NOT halve or zero the payout. magi_frac 1.575 -> pct 0.0355.
# income 30_000. amount = max(0, 8_000 - 3_000 - 0.0355*30_000) = 5_000 - 1_065 = 3_935.
# Pin prior-year FPG to 20_000: income 31_500 / 20_000 = 1.575.
# amount = max(0, 8_000 - 3_000 - 0.0355*31_500) = 5_000 - 1_118.25 = 3_881.75.
# Confirms the add()>0 gate + defined_for + person->tax_unit aggregation produce
# the full subsidy rather than a per-eligible-member proration.
period: 2026
Expand All @@ -492,7 +536,9 @@
tax_units:
tax_unit:
members: [person1, person2]
aca_magi: 30_000
tax_unit_fpg:
2025: 20_000
aca_magi: 31_500
aca_magi_fraction: 1.575
slcsp: 8_000
aca_ptc: 3_000
Expand All @@ -503,4 +549,5 @@
state_code: CA
output:
ca_premium_subsidy_eligible: true
ca_premium_subsidy: 3_935
ca_premium_subsidy_applicable_percentage: 0.0355
ca_premium_subsidy: 3_881.75
Loading
Loading