diff --git a/changelog.d/wa-cascade-care-savings-exact-fpl-ratio.fixed.md b/changelog.d/wa-cascade-care-savings-exact-fpl-ratio.fixed.md new file mode 100644 index 00000000000..319a8ed10c7 --- /dev/null +++ b/changelog.d/wa-cascade-care-savings-exact-fpl-ratio.fixed.md @@ -0,0 +1 @@ +Decide Washington Cascade Care Savings eligibility on the exact ratio of ACA MAGI to the prior-year poverty guideline instead of the truncated `aca_magi_fraction`, so incomes from 250.003% to 250.994% of the poverty line are no longer eligible (PY2026 and PY2027 Cascade Care Savings Policy, Section 4(1)(c): "Has income up to 250% of the Federal Poverty Level"). diff --git a/policyengine_us/parameters/gov/states/wa/wahbe/cascade_care_savings/fpl_limit.yaml b/policyengine_us/parameters/gov/states/wa/wahbe/cascade_care_savings/fpl_limit.yaml index f984eff66ed..3105ed41ab0 100644 --- a/policyengine_us/parameters/gov/states/wa/wahbe/cascade_care_savings/fpl_limit.yaml +++ b/policyengine_us/parameters/gov/states/wa/wahbe/cascade_care_savings/fpl_limit.yaml @@ -1,7 +1,8 @@ description: Washington limits income to this share of the federal poverty line under the Cascade Care Savings program. values: # Eligibility caps household income (ACA MAGI per 26 U.S.C. 36B(d)(2)) at 250% - # of the federal poverty line, applied as a "<=" comparison ("up to 250%"). + # of the federal poverty line, applied as a "<=" comparison ("up to 250%") on + # the exact income-to-guideline ratio, not the truncated aca_magi_fraction. 2026-01-01: 2.5 metadata: diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/wahbe/cascade_care_savings/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/wahbe/cascade_care_savings/integration.yaml index b4df56fbabc..db7b20ed410 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/wa/wahbe/cascade_care_savings/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/wahbe/cascade_care_savings/integration.yaml @@ -1,11 +1,13 @@ # Integration tests for Washington Cascade Care Savings (CCS). # -# These exercise the full chain: aca_magi_fraction (income gate) -> +# These exercise the full chain: ACA MAGI over the prior-year guideline (income +# gate, on the exact ratio) -> # wa_cascade_care_savings_eligible (Group 1 / Group 3 membership) -> # wa_cascade_care_savings (per-member build-up, capped by SLCSP - APTC). # -# slcsp, aca_ptc, and aca_magi_fraction are supplied directly (SLCSP as an annual -# value) so the arithmetic is fully hand-verifiable. slcsp is a MONTH variable; +# slcsp and aca_ptc are supplied directly (SLCSP as an annual value), and income +# is aca_magi against a prior-year tax_unit_fpg pinned to $10,000, so the +# arithmetic is fully hand-verifiable. slcsp is a MONTH variable; # at the YEAR test period its output is the annual sum (= the value supplied). # Each scenario documents the per-member build-up and the cap. # @@ -31,7 +33,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.4 + aca_magi: 14_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 6_000 aca_ptc: 5_000 assigned_aca_ptc: 5_000 @@ -59,7 +63,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.8 + aca_magi: 18_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 6_000 aca_ptc: 5_000 assigned_aca_ptc: 5_000 @@ -91,7 +97,9 @@ tax_units: tax_unit: members: [person1, person2] - aca_magi_fraction: 2.2 + aca_magi: 22_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 8_000 aca_ptc: 7_000 assigned_aca_ptc: 7_000 @@ -122,7 +130,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.0 + aca_magi: 20_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 12_000 aca_ptc: 0 assigned_aca_ptc: 0 @@ -154,7 +164,9 @@ tax_units: tax_unit: members: [person1, person2] - aca_magi_fraction: 1.6 + aca_magi: 16_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 10_000 aca_ptc: 4_000 assigned_aca_ptc: 4_000 @@ -184,7 +196,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.0 + aca_magi: 10_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 6_000 aca_ptc: 0 assigned_aca_ptc: 0 @@ -211,7 +225,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.6 + aca_magi: 26_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 6_000 aca_ptc: 3_000 assigned_aca_ptc: 3_000 @@ -254,7 +270,9 @@ tax_units: tax_unit: members: [person1, person2, person3, person4] - aca_magi_fraction: 1.6 + aca_magi: 16_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 15_000 aca_ptc: 6_000 assigned_aca_ptc: 6_000 @@ -283,7 +301,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.4 + aca_magi: 14_000 + tax_unit_fpg: + 2026: 10_000 slcsp: 6_000 aca_ptc: 5_000 assigned_aca_ptc: 5_000 @@ -322,7 +342,9 @@ tax_units: tax_unit: members: [person1, person2] - aca_magi_fraction: 1.4 + aca_magi: 14_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 6_000 aca_ptc: 5_000 assigned_aca_ptc: 5_000 @@ -362,7 +384,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.4 + aca_magi: 14_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 6_000 aca_ptc: 5_000 assigned_aca_ptc: 5_000 @@ -394,7 +418,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.6 + aca_magi: 26_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 12_000 aca_ptc: 0 assigned_aca_ptc: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/wahbe/cascade_care_savings/wa_cascade_care_savings.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/wahbe/cascade_care_savings/wa_cascade_care_savings.yaml index 986ed843771..b64b1d2ea26 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/wa/wahbe/cascade_care_savings/wa_cascade_care_savings.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/wahbe/cascade_care_savings/wa_cascade_care_savings.yaml @@ -1,9 +1,10 @@ # Unit tests for the Washington Cascade Care Savings amount. # # All inputs (is_aca_ptc_eligible / immigration_status / -# wa_apple_health_expansion_eligible per person, aca_magi_fraction, slcsp as an -# annual value, aca_ptc) are supplied directly so every expected value is exactly -# hand-verifiable and independent of the rating-area premium lookup. slcsp is a +# wa_apple_health_expansion_eligible per person, aca_magi against a prior-year +# tax_unit_fpg pinned to $10,000, slcsp as an annual value, aca_ptc) are supplied +# directly so every expected value is exactly hand-verifiable and independent of +# the rating-area premium lookup. slcsp is a # MONTH-period variable; the amount formula annualizes it via # add(tax_unit, period, ["slcsp"]). Providing slcsp at the YEAR period sets the # annual total, so the values below are annual SLCSP. @@ -36,7 +37,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.4 + aca_magi: 14_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 6_000 aca_ptc: 5_000 households: @@ -59,7 +62,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.8 + aca_magi: 18_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 6_000 aca_ptc: 5_000 households: @@ -82,7 +87,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.0 + aca_magi: 20_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 6_000 aca_ptc: 5_000 households: @@ -110,7 +117,9 @@ tax_units: tax_unit: members: [person1, person2] - aca_magi_fraction: 2.2 + aca_magi: 22_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 8_000 aca_ptc: 7_000 households: @@ -138,7 +147,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.0 + aca_magi: 20_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 12_000 aca_ptc: 3_000 households: @@ -167,7 +178,9 @@ tax_units: tax_unit: members: [person1, person2] - aca_magi_fraction: 1.6 + aca_magi: 16_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 10_000 aca_ptc: 4_000 households: @@ -192,7 +205,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.2 + aca_magi: 22_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 5_000 aca_ptc: 5_000 households: @@ -216,7 +231,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.6 + aca_magi: 26_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 6_000 aca_ptc: 2_000 households: @@ -242,7 +259,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.4 + aca_magi: 14_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 0 aca_ptc: 0 households: @@ -264,7 +283,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.0 + aca_magi: 20_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 6_000 aca_ptc: 2_000 households: @@ -286,7 +307,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.0 + aca_magi: 20_000 + tax_unit_fpg: + 2024: 10_000 slcsp: 6_000 aca_ptc: 2_000 households: @@ -313,7 +336,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.2 + aca_magi: 22_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 6_000 aca_ptc: 5_900 households: @@ -337,7 +362,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.4 + aca_magi: 14_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 6_000 aca_ptc: 5_340 households: @@ -364,7 +391,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.5 + aca_magi: 15_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 1_000 aca_ptc: 0 households: @@ -389,7 +418,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.51 + aca_magi: 15_100 + tax_unit_fpg: + 2025: 10_000 slcsp: 1_000 aca_ptc: 0 households: @@ -430,7 +461,9 @@ tax_units: tax_unit: members: [person1, person2, person3, person4] - aca_magi_fraction: 1.6 + aca_magi: 16_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 15_000 aca_ptc: 6_000 households: @@ -471,7 +504,9 @@ tax_units: tax_unit: members: [person1, person2] - aca_magi_fraction: 1.4 + aca_magi: 14_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 6_000 aca_ptc: 5_000 households: @@ -506,7 +541,9 @@ tax_units: tax_unit: members: [person1, person2] - aca_magi_fraction: 1.4 + aca_magi: 14_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 12_000 aca_ptc: 5_000 households: @@ -535,7 +572,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.4 + aca_magi: 14_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 6_000 aca_ptc: 5_000 households: @@ -562,7 +601,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.4 + aca_magi: 14_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 6_000 aca_ptc: 5_000 households: @@ -590,7 +631,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.4 + aca_magi: 14_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 12_000 aca_ptc: 0 households: @@ -617,7 +660,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.6 + aca_magi: 26_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 12_000 aca_ptc: 0 households: @@ -644,7 +689,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.4 + aca_magi: 14_000 + tax_unit_fpg: + 2026: 10_000 slcsp: 6_000 aca_ptc: 5_000 households: @@ -685,7 +732,9 @@ tax_unit: members: [person1, person2] filing_status: SEPARATE - aca_magi_fraction: 1.4 + aca_magi: 14_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 12_000 aca_ptc: 0 households: @@ -713,7 +762,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.0001 + aca_magi: 20_001 + tax_unit_fpg: + 2025: 10_000 slcsp: 1_000 aca_ptc: 0 households: @@ -740,7 +791,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.5 + aca_magi: 25_000 + tax_unit_fpg: + 2025: 10_000 slcsp: 12_000 aca_ptc: 0 households: diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/wahbe/cascade_care_savings/wa_cascade_care_savings_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/wahbe/cascade_care_savings/wa_cascade_care_savings_eligible.yaml index b1597e9943e..54c8dac51ed 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/wa/wahbe/cascade_care_savings/wa_cascade_care_savings_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/wahbe/cascade_care_savings/wa_cascade_care_savings_eligible.yaml @@ -1,19 +1,23 @@ # Unit tests for Washington Cascade Care Savings tax-unit eligibility. # # wa_cascade_care_savings_eligible (TaxUnit, bool) is true when: -# in_effect (2026+) AND aca_magi_fraction <= 2.5 (fpl_limit) AND the tax unit -# has at least one member in Group 1 or Group 3. +# in_effect (2026+) AND aca_magi / prior-year FPG <= 2.5 (fpl_limit; Section +# 4(1)(c): "up to 250%") AND the tax unit has at least one member in Group 1 +# or Group 3. The income test uses the exact ratio, not the truncated +# aca_magi_fraction. # Group 1: is_aca_ptc_eligible (federally subsidized enrollee). # Group 3: immigration_status == UNDOCUMENTED AND NOT # wa_apple_health_expansion_eligible (undocumented, but not covered # by the Apple Health Expansion Medicaid proxy). -# All person-level gates and aca_magi_fraction are supplied directly so each -# expected value is hand-verifiable. +# All person-level gates are supplied directly. Supplied-income cases pin the +# prior-year guideline to $10,000 and set aca_magi to the target ratio, so each +# expected value is hand-verifiable; income-derived cases use the actual 2025 +# one-person guideline, $15,650. # --- Income limit boundary at 250% FPL (Group 1 member present) --- - name: Case 1, income just below 250% FPL with a Group 1 member is eligible. - # aca_magi_fraction 2.49 <= 2.5 and person1 is Group 1 -> eligible. + # 24_900 / 10_000 = 2.49 <= 2.5 and person1 is Group 1 -> eligible. period: 2026 input: people: @@ -23,7 +27,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.49 + aca_magi: 24_900 + tax_unit_fpg: + 2025: 10_000 households: household: members: [person1] @@ -32,7 +38,7 @@ wa_cascade_care_savings_eligible: true - name: Case 2, income exactly at 250% FPL with a Group 1 member is eligible. - # aca_magi_fraction 2.5 <= 2.5 (inclusive "up to 250%") -> eligible. + # 25_000 / 10_000 = 2.5 <= 2.5 (inclusive "up to 250%") -> eligible. period: 2026 input: people: @@ -42,7 +48,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.5 + aca_magi: 25_000 + tax_unit_fpg: + 2025: 10_000 households: household: members: [person1] @@ -51,7 +59,7 @@ wa_cascade_care_savings_eligible: true - name: Case 3, income just above 250% FPL is ineligible. - # aca_magi_fraction 2.51 > 2.5 -> income-ineligible even with a Group 1 member. + # 25_100 / 10_000 = 2.51 > 2.5 -> income-ineligible even with a Group 1 member. period: 2026 input: people: @@ -61,7 +69,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.51 + aca_magi: 25_100 + tax_unit_fpg: + 2025: 10_000 households: household: members: [person1] @@ -69,6 +79,82 @@ output: wa_cascade_care_savings_eligible: false +- name: Case 3a, $39,124 (249.994% of the 2025 guideline) is eligible. + period: 2026 + input: + people: + person1: + age: 40 + is_aca_ptc_eligible: true + tax_units: + tax_unit: + members: [person1] + aca_magi: 39_124 + households: + household: + members: [person1] + state_code: WA + output: + aca_magi_fraction: 2.49 + wa_cascade_care_savings_eligible: true + +- name: Case 3b, $39,125 (exactly 250%) is eligible. + period: 2026 + input: + people: + person1: + age: 40 + is_aca_ptc_eligible: true + tax_units: + tax_unit: + members: [person1] + aca_magi: 39_125 + households: + household: + members: [person1] + state_code: WA + output: + aca_magi_fraction: 2.50 + wa_cascade_care_savings_eligible: true + +- name: Case 3c, $39,125.47 (250.003%) is ineligible though truncated to 2.50. + period: 2026 + input: + people: + person1: + age: 40 + is_aca_ptc_eligible: true + tax_units: + tax_unit: + members: [person1] + aca_magi: 39_125.47 + households: + household: + members: [person1] + state_code: WA + output: + aca_magi_fraction: 2.50 + wa_cascade_care_savings_eligible: false + +- name: Case 3d, $39,280.56 (250.994%) is ineligible though truncated to 2.50. + period: 2026 + input: + people: + person1: + age: 40 + is_aca_ptc_eligible: true + tax_units: + tax_unit: + members: [person1] + aca_magi: 39_280.56 + households: + household: + members: [person1] + state_code: WA + output: + aca_magi_fraction: 2.50 + wa_cascade_care_savings_eligible: false + # --- Group membership paths --- - name: Case 4, undocumented member not Apple-Health-eligible is Group 3, eligible. @@ -84,7 +170,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.0 + aca_magi: 20_000 + tax_unit_fpg: + 2025: 10_000 households: household: members: [person1] @@ -106,7 +194,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.0 + aca_magi: 10_000 + tax_unit_fpg: + 2025: 10_000 households: household: members: [person1] @@ -127,7 +217,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.5 + aca_magi: 15_000 + tax_unit_fpg: + 2025: 10_000 households: household: members: [person1] @@ -148,7 +240,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.0 + aca_magi: 20_000 + tax_unit_fpg: + 2025: 10_000 households: household: members: [person1] @@ -167,7 +261,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.0 + aca_magi: 20_000 + tax_unit_fpg: + 2024: 10_000 households: household: members: [person1] @@ -199,7 +295,9 @@ tax_units: tax_unit: members: [person1, person2, person3] - aca_magi_fraction: 1.6 + aca_magi: 16_000 + tax_unit_fpg: + 2025: 10_000 households: household: members: [person1, person2, person3] @@ -227,7 +325,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.4 + aca_magi: 14_000 + tax_unit_fpg: + 2025: 10_000 households: household: members: [person1] @@ -252,7 +352,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.4 + aca_magi: 14_000 + tax_unit_fpg: + 2025: 10_000 households: household: members: [person1] @@ -277,7 +379,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 1.4 + aca_magi: 14_000 + tax_unit_fpg: + 2025: 10_000 households: household: members: [person1] @@ -288,7 +392,7 @@ - name: Case 9e, income above 250% FPL with a Group-3 member is ineligible. # Closes the matrix: prior above-limit cases (Case 3) used a Group 1 member. # Here the sole member is Group 3 (UNDOCUMENTED, not Apple-Health-eligible), - # is_aca_ptc_eligible false explicitly. aca_magi_fraction 2.51 > 2.5 (fpl_limit) + # is_aca_ptc_eligible false explicitly. 25_100 / 10_000 = 2.51 > 2.5 (fpl_limit) # -> income-ineligible despite the Group 3 member. period: 2026 input: @@ -301,7 +405,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.51 + aca_magi: 25_100 + tax_unit_fpg: + 2025: 10_000 households: household: members: [person1] @@ -321,7 +427,9 @@ tax_units: tax_unit: members: [person1] - aca_magi_fraction: 2.0 + aca_magi: 20_000 + tax_unit_fpg: + 2026: 10_000 households: household: members: [person1] diff --git a/policyengine_us/variables/gov/states/wa/wahbe/cascade_care_savings/wa_cascade_care_savings_eligible.py b/policyengine_us/variables/gov/states/wa/wahbe/cascade_care_savings/wa_cascade_care_savings_eligible.py index 55b89a4ad29..d4e8f64cf29 100644 --- a/policyengine_us/variables/gov/states/wa/wahbe/cascade_care_savings/wa_cascade_care_savings_eligible.py +++ b/policyengine_us/variables/gov/states/wa/wahbe/cascade_care_savings/wa_cascade_care_savings_eligible.py @@ -14,7 +14,9 @@ class wa_cascade_care_savings_eligible(Variable): documentation = ( "A tax unit is eligible for Cascade Care Savings when the program is " "in effect, household income (ACA MAGI per 26 U.S.C. 36B(d)(2)) is at " - "or below 250% of the federal poverty line, and at least one member is " + "or below 250% of the prior-year federal poverty guideline, measured as " + "the exact ratio rather than the truncated aca_magi_fraction, and at " + "least one member is " "a Cascade Care Savings enrollee (Group 1, eligible for the federal " "ACA premium tax credit; or Group 3, undocumented and lacking minimum " "essential coverage through Washington Apple Health Expansion or Apple " @@ -29,8 +31,13 @@ class wa_cascade_care_savings_eligible(Variable): def formula(tax_unit, period, parameters): p = parameters(period).gov.states.wa.wahbe.cascade_care_savings in_effect = p.in_effect - magi_fraction = tax_unit("aca_magi_fraction", period) - income_eligible = magi_fraction <= p.fpl_limit + # Section 4(1)(c) covers income "up to 250% of the Federal Poverty + # Level". Test the exact ratio, not the truncated aca_magi_fraction: + # truncation maps 250.00%-250.99% to 2.50, which would admit incomes + # above 250%. + magi = max_(tax_unit("aca_magi", period), 0) + exact_magi_frac = magi / tax_unit("tax_unit_fpg", period.last_year) + income_eligible = exact_magi_frac <= p.fpl_limit has_eligible_member = ( add(tax_unit, period, ["wa_cascade_care_savings_member_eligible"]) > 0 )