Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/aca-fpl-coverage-year-state.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
The premium tax credit's poverty line (aca_fpg) uses the state of residence in the coverage year, so Alaska and Hawaii households use their own guidelines when the state is supplied only for the coverage year. Households in Puerto Rico, Guam and the Virgin Islands, which have no poverty guideline and no Exchange, are not Marketplace enrollees, pay no Marketplace premium and are not eligible for the credit.
14 changes: 10 additions & 4 deletions policyengine_us/tests/core/test_claimable_filer_ptc_invariants.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@
on a return with a head or spouse where neither can be claimed,
`aca_ptc_slcsp` = `slcsp`,
`aca_magi` = `medicaid_magi`, `aca_tax_family_size` = `tax_unit_size` and
`aca_fpg` = `tax_unit_fpg` for the prior year (these simulations supply no
prior-year size, so the two sizes agree). A unit with neither a head nor a
`aca_fpg` = the prior year's guideline for the coverage year's tax family
size and state group (Form 8962 lines 1 and 4). A unit with neither a head nor a
spouse is filed by its oldest member, so a claimable minor changes it.
3. Monotonicity, for the drawn couples in every year and the seeded
population: marking another filer as claimable never raises the tax
Expand All @@ -50,6 +50,7 @@
from hypothesis import strategies as st

from policyengine_us import Simulation
from policyengine_us.variables.gov.hhs.tax_unit_fpg import fpg
from policyengine_us.tests.core.test_dependent_elsewhere_head_spouse_swap_invariance import (
CLAIM_PATTERNS,
TOLERANCE,
Expand Down Expand Up @@ -343,9 +344,14 @@ def _identities(sim, year):
np.testing.assert_array_equal(
size[unclaimed], _calc(sim, "tax_unit_size", year)[unclaimed]
)
# Form 8962 lines 1 and 4: the prior year's guideline for the coverage
# year's tax family size and state of residence (26 CFR 1.36B-1(h)).
state_group = sim.populations["tax_unit"].household("state_group_str", str(year))
expected_fpg = fpg(
size, state_group, str(year - 1), sim.tax_benefit_system.parameters
)
np.testing.assert_allclose(
_calc(sim, "aca_fpg", year)[unclaimed],
_calc(sim, "tax_unit_fpg", year - 1)[unclaimed],
_calc(sim, "aca_fpg", year)[unclaimed], expected_fpg[unclaimed]
)


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,194 @@
output:
aca_magi_fraction: 2.54

- name: Coverage in 2026 in Alaska uses Alaska's 2025 guideline.
# 30,000 / 19,550 = 1.5345, floored to 1.53. The contiguous states'
# guideline (15,650) would give 1.91.
period: 2026
input:
people:
person1:
age: 40
tax_units:
tax_unit:
members: [person1]
aca_magi: 30_000
households:
household:
members: [person1]
state_code: AK
output:
aca_magi_fraction: 1.53

- name: Coverage in 2026 in Hawaii uses Hawaii's 2025 guideline.
# 30,000 / 17,990 = 1.6676, floored to 1.66. The contiguous states'
# guideline (15,650) would give 1.91.
period: 2026
input:
people:
person1:
age: 40
tax_units:
tax_unit:
members: [person1]
aca_magi: 30_000
households:
household:
members: [person1]
state_code: HI
output:
aca_magi_fraction: 1.66

- name: Coverage in 2026 for an Alaska family of three uses Alaska's per-person increment.
# 19,550 + 2 x 6,880 = 33,310; 50,000 / 33,310 = 1.5011, floored to 1.50.
period: 2026
input:
people:
parent:
age: 40
child1:
age: 10
child2:
age: 8
tax_units:
tax_unit:
members: [parent, child1, child2]
aca_magi: 50_000
households:
household:
members: [parent, child1, child2]
state_code: AK
output:
aca_magi_fraction: 1.5

- name: A household that moves from Alaska in 2025 to Texas in 2026 uses Texas's guideline for 2026 coverage.
# The state of residence in the coverage year decides the guideline, not
# the state in the guideline year. 30,000 / 15,650 = 1.9169, floored to
# 1.91. Alaska's 2025 guideline (19,550) would give 1.53.
period: 2026
input:
people:
person1:
age: 40
tax_units:
tax_unit:
members: [person1]
aca_magi: 30_000
households:
household:
members: [person1]
state_code:
2025: AK
2026: TX
output:
aca_magi_fraction: 1.91

- name: Family size is the coverage year's.
# aca_tax_family_size is 3 for 2026 only; 2025 counts the one listed
# member. Alaska's 2025 guideline for three: 19,550 + 2 x 6,880 = 33,310.
# 50,000 / 33,310 = 1.5011, floored to 1.50. The 2025 size of one would
# give 50,000 / 19,550 = 2.55.
period: 2026
input:
people:
person1:
age: 40
tax_units:
tax_unit:
members: [person1]
aca_magi: 50_000
aca_tax_family_size:
2026: 3
households:
household:
members: [person1]
state_code: AK
output:
aca_magi_fraction: 1.5

- name: Coverage in 2025 in Alaska uses Alaska's 2024 guideline.
# 30,000 / 18,810 = 1.5949, floored to 1.59.
period: 2025
input:
people:
person1:
age: 40
tax_units:
tax_unit:
members: [person1]
aca_magi: 30_000
households:
household:
members: [person1]
state_code: AK
output:
aca_magi_fraction: 1.59

- name: Households in Alaska and Texas in one simulation each use their own state's guideline.
# 30,000 / 19,550 = 1.53 and 30,000 / 15,650 = 1.91.
period: 2026
input:
people:
person1:
age: 40
person2:
age: 40
tax_units:
tax_unit1:
members: [person1]
aca_magi: 30_000
tax_unit2:
members: [person2]
aca_magi: 30_000
households:
household1:
members: [person1]
state_code: AK
household2:
members: [person2]
state_code: TX
output:
aca_magi_fraction: [1.53, 1.91]

- name: Income exactly on a whole percentage of the guideline is not floored one point low.
# 100 x 36,621 / 15,650 = 234 exactly, so Worksheet 2 gives 234. Dividing
# first, in the 32-bit arithmetic aca_magi and aca_fpg are stored in, gives
# 36,621 / 15,650 x 100 just under 234, which floors to 2.33.
period: 2026
input:
people:
person1:
age: 40
tax_units:
tax_unit:
members: [person1]
aca_magi: 36_621
households:
household:
members: [person1]
state_code: TX
output:
aca_magi_fraction: 2.34

- name: Negative ACA MAGI gives a fraction of 0.
# MAGI is floored at 0 before dividing (Form 8962 line 3 enters -0- for a
# negative total). From PR 10413's cases.
period: 2026
input:
people:
person1:
age: 40
tax_units:
tax_unit:
members: [person1]
aca_magi: -5_000
households:
household:
members: [person1]
state_code: AK
output:
aca_magi_fraction: 0

- name: 2025 joint return with one claimable spouse measures income against the one-person line (the claimable spouse is the head)
period: 2025
input:
Expand Down
Loading
Loading