From b0df64d6bb479e308841552573987b87718a5d6d Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Mon, 23 Feb 2026 10:16:31 -0500 Subject: [PATCH] Fix fiitax to include Additional Medicare Tax MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The code at lines 1099-1108 intended to add additional_medicare_tax to fiitax, but the else branch was dead code — fiitax was always already in columns from the income_tax mapping, so the pass branch ran instead. Now additional_medicare_tax is always computed and added to fiitax, matching TAXSIM's treatment (which includes it per IRS Form 1040 Schedule 2, Line 23). Co-Authored-By: Claude Opus 4.6 --- .../fix-addl-medicare-tax-in-fiitax.fixed.md | 1 + policyengine_taxsim/runners/policyengine_runner.py | 14 ++++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 changelog.d/fix-addl-medicare-tax-in-fiitax.fixed.md diff --git a/changelog.d/fix-addl-medicare-tax-in-fiitax.fixed.md b/changelog.d/fix-addl-medicare-tax-in-fiitax.fixed.md new file mode 100644 index 0000000..7d4ae98 --- /dev/null +++ b/changelog.d/fix-addl-medicare-tax-in-fiitax.fixed.md @@ -0,0 +1 @@ +Include Additional Medicare Tax (0.9% on wages above $200K/$250K) in fiitax output to match TAXSIM's treatment. diff --git a/policyengine_taxsim/runners/policyengine_runner.py b/policyengine_taxsim/runners/policyengine_runner.py index d18b116..0e5fb76 100644 --- a/policyengine_taxsim/runners/policyengine_runner.py +++ b/policyengine_taxsim/runners/policyengine_runner.py @@ -1097,14 +1097,20 @@ def _extract_vectorized_results( ) from e # Apply fiitax special calculation (income_tax + additional_medicare_tax) + # TAXSIM includes Additional Medicare Tax (0.9% on wages above + # $200K/$250K) in fiitax. PE's income_tax does not include it, + # so we add it here. + addl_med = self._calc_tax_unit( + sim, "additional_medicare_tax", year_str + ) if "fiitax" in columns: - pass # Already computed above + columns["fiitax"] = np.round( + columns["fiitax"] + addl_med, 2 + ) else: fiitax_arr = self._calc_tax_unit( sim, "income_tax", year_str - ) + self._calc_tax_unit( - sim, "additional_medicare_tax", year_str - ) + ) + addl_med columns["fiitax"] = np.round(fiitax_arr, 2) # Apply idtl filtering: mask out columns not requested by each row's idtl