Skip to content
Draft
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/added/8168.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Marketplace take-up can now use reported Marketplace coverage while preserving a simulated take-up switch, with selected Marketplace plan benchmark ratios documented as explicit inputs.
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,31 @@
selected_marketplace_plan_premium_proxy: 8_000
used_aca_ptc: 0
marketplace_net_premium: 8_000

- name: Reported unsubsidized Marketplace buyer pays selected plan premium when simulated take-up is disabled.
absolute_error_margin: 0.01
period: 2026
input:
people:
person1:
age: 40
has_marketplace_health_coverage_at_interview: true
is_medicaid_eligible: false
is_chip_eligible: false
is_basic_health_program_eligible: false
is_aca_eshi_eligible: false
is_medicare_eligible: false
tax_units:
tax_unit:
members: [person1]
aca_magi_fraction: 5
slcsp: 10_000
selected_marketplace_plan_benchmark_ratio: 0.8
simulated_aca_take_up_if_eligible: false
output:
pays_aca_premium: [true]
takes_up_aca_if_eligible: true
is_aca_ptc_eligible: [false]
selected_marketplace_plan_premium_proxy: 8_000
used_aca_ptc: 0
marketplace_net_premium: 8_000
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
- name: Case 1, default simulated Marketplace take-up preserves existing ACA take-up behavior.
period: 2026
output:
simulated_aca_take_up_if_eligible: true
takes_up_aca_if_eligible: true

- name: Case 2, reported Marketplace coverage triggers take-up when simulated take-up is disabled.
period: 2026
input:
people:
person1:
has_marketplace_health_coverage_at_interview: true
tax_units:
tax_unit:
members: [person1]
simulated_aca_take_up_if_eligible: false
output:
takes_up_aca_if_eligible: true

- name: Case 3, no reported Marketplace coverage means no take-up when simulated take-up is disabled.
period: 2026
input:
people:
person1:
has_marketplace_health_coverage_at_interview: false
tax_units:
tax_unit:
members: [person1]
simulated_aca_take_up_if_eligible: false
output:
takes_up_aca_if_eligible: false

- name: Case 4, reported Marketplace coverage for one member triggers tax-unit take-up.
period: 2026
input:
people:
person1:
has_marketplace_health_coverage_at_interview: false
person2:
has_marketplace_health_coverage_at_interview: true
tax_units:
tax_unit:
members: [person1, person2]
simulated_aca_take_up_if_eligible: false
output:
takes_up_aca_if_eligible: true
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,9 @@ class selected_marketplace_plan_benchmark_ratio(Variable):
unit = "/1"
definition_period = YEAR
default_value = 1.0
documentation = (
"Ratio of the selected Marketplace plan gross premium to the second "
"lowest cost silver plan benchmark premium. This is an explicit "
"user- or data-supplied input; when absent, the model assumes the "
"selected plan premium equals the benchmark premium."
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from policyengine_us.model_api import *


class simulated_aca_take_up_if_eligible(Variable):
value_type = bool
entity = TaxUnit
label = "Whether a tax unit is simulated to take up ACA if eligible"
definition_period = YEAR
default_value = True
documentation = (
"Reform-responsive Marketplace take-up switch for tax units without "
"reported Marketplace coverage at interview. Reported Marketplace "
"coverage is handled in takes_up_aca_if_eligible."
)
14 changes: 14 additions & 0 deletions policyengine_us/variables/gov/aca/takes_up_aca_if_eligible.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,17 @@ class takes_up_aca_if_eligible(Variable):
label = "Whether an eligible tax unit takes up ACA"
definition_period = YEAR
default_value = True
documentation = (
"Whether the tax unit takes up Marketplace coverage when otherwise "
"eligible. Reported Marketplace coverage at interview is treated as "
"observed take-up; otherwise take-up follows the simulated take-up "
"switch."
)

def formula(tax_unit, period, parameters):
person = tax_unit.members
reported_marketplace_coverage = tax_unit.any(
person("has_marketplace_health_coverage_at_interview", period)
)
simulated_take_up = tax_unit("simulated_aca_take_up_if_eligible", period)
return reported_marketplace_coverage | simulated_take_up
Loading