Skip to content
Closed
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/ma-state-supplement-circuit-breaker.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Zero the imputed Massachusetts SSI state supplement so it does not inflate the Senior Circuit Breaker total income, matching TAXSIM (which does not model it).
11 changes: 11 additions & 0 deletions policyengine_taxsim/core/input_mapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,17 @@ def form_household_situation(year, state, taxsim_vars):
"commodity_supplemental_food_program"
] = {str(year): 0}

# Explicitly set the Massachusetts SSI state supplement to 0 so PolicyEngine
# does not impute it. TAXSIM does not model it, and Massachusetts counts cash
# public assistance (including SSI) in the Senior Circuit Breaker "total
# income" (MGL c.62 s.6(k)), so an imputed supplement understates the credit.
# See PolicyEngine/policyengine-taxsim#1031.
if state.upper() == "MA":
for person_name in household_situation["people"]:
household_situation["people"][person_name]["ma_state_supplement"] = {
str(year): 0
}

# Explicitly set imputed medical expenses to 0 for all people. TAXSIM has no
# medical-expense input, so PE's imputed Medicare Part B premiums would
# otherwise flow through the federal itemized medical deduction into state
Expand Down
4 changes: 4 additions & 0 deletions policyengine_taxsim/runners/policyengine_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ def _initialize_dataset_structure(self) -> dict:
"ak_energy_relief",
"ak_permanent_fund_dividend",
"ssi", # SSI should be 0 to match TAXSIM (which doesn't model SSI)
"ma_state_supplement", # MA SSI state supplement should be 0 to match TAXSIM (which doesn't model it); it feeds the MA Senior Circuit Breaker income
"wic", # WIC should be 0 to match TAXSIM (which doesn't model WIC)
"snap", # SNAP should be 0 to match TAXSIM (which doesn't model SNAP)
"tanf", # TANF should be 0 to match TAXSIM (which doesn't model TANF)
Expand Down Expand Up @@ -829,6 +830,9 @@ def generate(self) -> None:
data["ssi"][year_int] = np.zeros(
total_people_for_year
) # Set SSI to 0 to match TAXSIM (which doesn't model SSI)
data["ma_state_supplement"][year_int] = np.zeros(
total_people_for_year
) # Set MA SSI state supplement to 0 to match TAXSIM; it feeds the MA Senior Circuit Breaker total income (MGL c.62 s.6(k)). See issue #1031.
data["wic"][year_int] = np.zeros(
total_people_for_year
) # Set WIC to 0 to match TAXSIM (which doesn't model WIC)
Expand Down
Loading