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