From c2c54576ef2058704edb80203b9c5b6238c92590 Mon Sep 17 00:00:00 2001 From: juaristi22 Date: Wed, 11 Mar 2026 16:23:45 +0530 Subject: [PATCH] Gate aca_ptc on tax_unit_is_filer to fix 5x overestimate in microsimulation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Non-filers cannot claim the ACA Premium Tax Credit (26 USC § 36B requires filing Form 8962). Previously, aca_ptc computed nonzero values for non-filing tax units, inflating aggregate PTC in calibrated datasets. Closes #7748 Co-Authored-By: Claude Opus 4.6 --- changelog.d/fix-aca-ptc-non-filers.fixed.md | 1 + .../policy/baseline/gov/aca/ptc/aca_ptc.yaml | 16 ++++++++++++++++ policyengine_us/variables/gov/aca/ptc/aca_ptc.py | 5 ++++- 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 changelog.d/fix-aca-ptc-non-filers.fixed.md diff --git a/changelog.d/fix-aca-ptc-non-filers.fixed.md b/changelog.d/fix-aca-ptc-non-filers.fixed.md new file mode 100644 index 00000000000..bd990b64b97 --- /dev/null +++ b/changelog.d/fix-aca-ptc-non-filers.fixed.md @@ -0,0 +1 @@ +Gate aca_ptc on tax_unit_is_filer to prevent non-filers from receiving PTC. diff --git a/policyengine_us/tests/policy/baseline/gov/aca/ptc/aca_ptc.yaml b/policyengine_us/tests/policy/baseline/gov/aca/ptc/aca_ptc.yaml index 450f10c0686..cf227a5201a 100644 --- a/policyengine_us/tests/policy/baseline/gov/aca/ptc/aca_ptc.yaml +++ b/policyengine_us/tests/policy/baseline/gov/aca/ptc/aca_ptc.yaml @@ -17,6 +17,7 @@ slcsp: 1_200 aca_magi: 25_000 aca_required_contribution_percentage: 0.04 + tax_unit_is_filer: true output: aca_ptc: 200 # 1200 - 0.04 * 25000 = 200 @@ -28,6 +29,7 @@ slcsp: 1_200 aca_magi: 25_000 aca_required_contribution_percentage: 0.05 + tax_unit_is_filer: true output: aca_ptc: 0 # 1200 - 0.05 * 25000 = -50, floored to 0 @@ -39,5 +41,19 @@ slcsp: 1_200 aca_magi: 25_000 aca_required_contribution_percentage: 0.04 + tax_unit_is_filer: true output: aca_ptc: 0 + +- name: ACA PTC zero for non-filers + absolute_error_margin: 0.01 + period: 2025 + input: + is_aca_ptc_eligible: true + slcsp: 1_200 + aca_magi: 25_000 + aca_required_contribution_percentage: 0.04 + takes_up_aca_if_eligible: true + tax_unit_is_filer: false + output: + aca_ptc: 0 # Non-filers cannot claim PTC per 26 USC § 36B diff --git a/policyengine_us/variables/gov/aca/ptc/aca_ptc.py b/policyengine_us/variables/gov/aca/ptc/aca_ptc.py index 6bce52018e6..85399f5818d 100644 --- a/policyengine_us/variables/gov/aca/ptc/aca_ptc.py +++ b/policyengine_us/variables/gov/aca/ptc/aca_ptc.py @@ -18,6 +18,9 @@ def formula_2024(tax_unit, period, parameters): income = tax_unit("aca_magi", period) applicable_figure = tax_unit("aca_required_contribution_percentage", period) takes_up_aca_if_eligible = tax_unit("takes_up_aca_if_eligible", period) + is_filer = tax_unit("tax_unit_is_filer", period) return ( - max_(0, plan_cost - income * applicable_figure) * takes_up_aca_if_eligible + max_(0, plan_cost - income * applicable_figure) + * takes_up_aca_if_eligible + * is_filer )