-
-
Notifications
You must be signed in to change notification settings - Fork 132
Description
Payroll tax revenue is computed in aggregates.revenue as:
payroll_tax_revenue = (
p.frac_tax_payroll[: p.T] * iit_payroll_tax_revenue
)This implicitly assumes one is using personal income tax functions that include both payroll and income taxes and that the users is separating these revenues in proportion to a series they input in the parameter frac_tax_payroll (which they may have found from a microsimulation model of payroll and income taxes).
The issue is that this calculation will be incorrect when a user includes payroll taxes via tau_payroll (and excludes them from the tax functions represented in etr_params, mtrx_params, and mtry_y params.
I think the solution is to create a payroll tax revenue function for this calculation. This function will then have a flag to determine how the user treated payroll taxes in the model. e.g., something like:
def payroll_tax_revenue(args...):
if np.any(tau_payroll != 0):
payroll_tax_revenue = p.tau_payroll[:T] * w[:T] * L[:T]
else:
payroll_tax_revenue = (
p.frac_tax_payroll[: p.T] * iit_payroll_tax_revenue
)