Recipe3: Comparison of Different Payroll Tax Reforms#

This Receipe is to compare the difference between the payroll tax reforms implemented upon the employer side and the employee side. The payroll tax reform implemented upon the employer side will come with an offset, while the reform on employee side will not come with offset. The hypothesis is that the employee side reform will generate more revenue.

import taxcalcpayroll as tcp
from taxcalcpayroll.payrolloffset import employer_payroll_offset

import pandas as pd
import numpy as np

reform 1: rise 1% employer side FICA social security, from 2025#

reform 2: rise 1% employee side FICA social security, from 2025#

baseline policy

# setup some tool list to help printing result
dtable1 = pd.DataFrame([])
dtable2 = pd.DataFrame([])

year_list = []
cur_list = []
reform_list = []
offset_list = []
base_ref_diff = []
ref_offset_diff = []
base_offset_diff = []

cur_sum = 0
reform_sum = 0
offset_sum = 0
base_ref_sum = 0
ref_offset_sum = 0
base_offset_sum = 0

reform_list2 = []
offset_list2 = []
base_ref_diff2 = []
ref_offset_diff2 = []
base_offset_diff2 = []

reform_sum2 = 0
offset_sum2 = 0
base_ref_sum2 = 0
ref_offset_sum2 = 0
base_offset_sum2 = 0
recs = tcp.Records(data = 'puf.csv')
pol = tcp.Policy()
calc0 = tcp.Calculator(policy = pol, records = recs)

reform 1: to rise 1% employer side FICA social security

recs = tcp.Records(data = 'puf.csv')
pol1 = tcp.Policy()
reform1 = {'FICA_ss_trt_employer': {"2025": 0.072}}
pol1.implement_reform(reform1, print_warnings=True, raise_errors=True)
calc1 = tcp.Calculator(policy = pol1, records = recs)

reform 2: to rise 1% employee side FICA social security

recs = tcp.Records(data = 'puf.csv')
pol2 = tcp.Policy()
reform2 = {'FICA_ss_trt_employee': {"2025": 0.072}}
pol2.implement_reform(reform2, print_warnings=True, raise_errors=True)
calc2 = tcp.Calculator(policy = pol2, records = recs)

Calculated total tax revenue for the future years#

for year in range(2024, 2034):   
    print("year: ", year)
    year_list.append(year)
    calc0.advance_to_year(year)
    calc0.calc_all()
    itax_rev0 = calc0.weighted_total('combined')
    itax_rev0 = (itax_rev0/10**9).round(2)
    cur_list.append(itax_rev0)
    cur_sum += itax_rev0
    print("current law combined tax revenue: $", itax_rev0, "Billions")
    print(" ")
    
    print("reform 1 to rise 1% employer side FICA social security ")
    calc1.advance_to_year(year)
    calc1.calc_all()
    itax_rev1 = calc1.weighted_total('combined')
    itax_rev1 = (itax_rev1/10**9).round(2)
    print("reformed law combined tax revenue: $", itax_rev1, "Billions")
    offset_df = employer_payroll_offset(reform1, calc0, pol, recs, dump=False)
    itax_revbr = (offset_df['combined'] * offset_df['s006']).sum()
    itax_revbr = (itax_revbr/10**9).round(2)
    print("offset combined tax revenue: ", itax_revbr, "Billions")
    print(" ")
    reform_list.append(itax_rev1)
    br_diff = itax_rev1 - itax_rev0
    base_ref_diff.append(br_diff)
    reform_sum += itax_rev1
    base_ref_sum += br_diff
    
    offset_list.append(itax_revbr)
    ro_diff = itax_revbr - itax_rev1
    ref_offset_diff.append(ro_diff)
    bo_diff = itax_revbr - itax_rev0
    base_offset_diff.append(bo_diff)
    offset_sum += itax_revbr
    ref_offset_sum += ro_diff
    base_offset_sum += bo_diff
    
    
    
    print("reform 2 to rise 1% employee side FICA social security ")
    calc2.advance_to_year(year)
    calc2.calc_all()
    itax_rev2 = calc2.weighted_total('combined')
    itax_rev2 = (itax_rev2/10**9).round(2)
    print("reformed law combined tax revenue: $", itax_rev2, "Billions")
    offset_df2 = employer_payroll_offset(reform2, calc0, pol, recs, dump=False)
    itax_revbr2 = (offset_df2['combined'] * offset_df2['s006']).sum()
    itax_revbr2 = (itax_revbr2/10**9).round(2)
    print("offset combined tax revenue: ", itax_revbr2, "Billions")
    print(" ")
    reform_list2.append(itax_rev2)
    br_diff2 = itax_rev2 - itax_rev0
    base_ref_diff2.append(br_diff2)
    reform_sum2 += itax_rev2
    base_ref_sum2 += br_diff2
    
    offset_list2.append(itax_revbr2)
    ro_diff2 = itax_revbr2 - itax_rev2
    ref_offset_diff2.append(ro_diff2)
    bo_diff2 = itax_revbr2 - itax_rev0
    base_offset_diff2.append(bo_diff2)
    offset_sum2 += itax_revbr2
    ref_offset_sum2 += ro_diff2
    base_offset_sum2 += bo_diff2
    
    
    
year_list.append("10 year 2024-2033")  
cur_list.append(cur_sum)

reform_list.append(reform_sum)
base_ref_diff.append(base_ref_sum)
offset_list.append(offset_sum)
ref_offset_diff.append(ref_offset_sum)
base_offset_diff.append(base_offset_sum)

reform_list2.append(reform_sum2)
base_ref_diff2.append(base_ref_sum2)
offset_list2.append(offset_sum2)
ref_offset_diff2.append(ref_offset_sum2)
base_offset_diff2.append(base_offset_sum2)
df = pd.DataFrame({'Year': year_list, 'Baseline Tototal Revenue': cur_list, 'Reform Tototal Revenue (no offset)': reform_list,
                   'Reform Tototal Revenue with offset': offset_list, "Diff: Reform - Baseline": base_ref_diff,
                   'Diff: Offset - Reform': ref_offset_diff, "Diff: Offset - Baseline": base_offset_diff
                  })
df = df.style.hide()
df2 = pd.DataFrame({'Year': year_list, 'Baseline Tototal Revenue': cur_list, 'Reform Tototal Revenue (no offset)': reform_list2,
                   'Reform Tototal Revenue with offset': offset_list2, "Diff: Reform - Baseline": base_ref_diff2,
                   'Diff: Offset - Reform': ref_offset_diff2, "Diff: Offset - Baseline": base_offset_diff2
                  })
df2 = df2.style.hide()
display(df)
Year Baseline Tototal Revenue Reform Tototal Revenue (no offset) Reform Tototal Revenue with offset Diff: Reform - Baseline Diff: Offset - Reform Diff: Offset - Baseline
2024 3757.610000 3757.610000 3757.610000 0.000000 0.000000 0.000000
2025 3952.990000 4053.780000 4023.510000 100.790000 -30.270000 70.520000
2026 4353.220000 4458.410000 4423.900000 105.190000 -34.510000 70.680000
2027 4543.830000 4653.240000 4617.230000 109.410000 -36.010000 73.400000
2028 4737.260000 4850.960000 4813.430000 113.700000 -37.530000 76.170000
2029 4935.730000 5053.900000 5014.790000 118.170000 -39.110000 79.060000
2030 5139.730000 5262.540000 5221.780000 122.810000 -40.760000 82.050000
2031 5348.200000 5475.840000 5433.370000 127.640000 -42.470000 85.170000
2032 5549.990000 5682.670000 5638.450000 132.680000 -44.220000 88.460000
2033 5781.670000 5918.520000 5872.840000 136.850000 -45.680000 91.170000
10 year 2024-2033 48100.230000 49167.470000 48816.910000 1067.240000 -350.560000 716.680000
display(df2)
Year Baseline Tototal Revenue Reform Tototal Revenue (no offset) Reform Tototal Revenue with offset Diff: Reform - Baseline Diff: Offset - Reform Diff: Offset - Baseline
2024 3757.610000 3757.610000 3757.610000 0.000000 0.000000 0.000000
2025 3952.990000 4053.780000 4053.780000 100.790000 0.000000 100.790000
2026 4353.220000 4458.410000 4458.410000 105.190000 0.000000 105.190000
2027 4543.830000 4653.240000 4653.240000 109.410000 0.000000 109.410000
2028 4737.260000 4850.960000 4850.960000 113.700000 0.000000 113.700000
2029 4935.730000 5053.900000 5053.900000 118.170000 0.000000 118.170000
2030 5139.730000 5262.540000 5262.540000 122.810000 0.000000 122.810000
2031 5348.200000 5475.840000 5475.840000 127.640000 0.000000 127.640000
2032 5549.990000 5682.670000 5682.670000 132.680000 0.000000 132.680000
2033 5781.670000 5918.520000 5918.520000 136.850000 0.000000 136.850000
10 year 2024-2033 48100.230000 49167.470000 49167.470000 1067.240000 0.000000 1067.240000