diff --git a/docs/guide/policy_params.md b/docs/guide/policy_params.md index e895debee..0598222f5 100644 --- a/docs/guide/policy_params.md +++ b/docs/guide/policy_params.md @@ -80,75 +80,106 @@ _Out-of-Range Action:_ error ### Medicare FICA -#### `FICA_mc_trt` -_Description:_ Medicare FICA rate, including both employer and employee. -_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True -_Can Be Inflation Indexed:_ False _Is Inflation Indexed:_ False -_Value Type:_ float -_Known Values:_ -2013: 0.029 -2014: 0.029 -2015: 0.029 -2016: 0.029 -2017: 0.029 -2018: 0.029 -2019: 0.029 -_Valid Range:_ min = 0 and max = 1 -_Out-of-Range Action:_ error - +#### `FICA_mc_trt_employer` +_Description:_ Employer side Medicare FICA rate. +_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True +_Can Be Inflation Indexed:_ False _Is Inflation Indexed:_ False +_Value Type:_ float +_Known Values:_ +2013: 0.0145 +2014: 0.0145 +2015: 0.0145 +2016: 0.0145 +2017: 0.0145 +2018: 0.0145 +2019: 0.0145 +_Valid Range:_ min = 0 and max = 1 +_Out-of-Range Action:_ error + +#### `FICA_mc_trt_employee` +_Description:_ Employee side Medicare FICA rate. +_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True +_Can Be Inflation Indexed:_ False _Is Inflation Indexed:_ False +_Value Type:_ float +_Known Values:_ +2013: 0.0145 +2014: 0.0145 +2015: 0.0145 +2016: 0.0145 +2017: 0.0145 +2018: 0.0145 +2019: 0.0145 +_Valid Range:_ min = 0 and max = 1 +_Out-of-Range Action:_ error ### Social Security FICA -#### `FICA_ss_trt` -_Description:_ Social Security FICA rate, including both employer and employee. -_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True -_Can Be Inflation Indexed:_ False _Is Inflation Indexed:_ False -_Value Type:_ float -_Known Values:_ -2013: 0.124 -2014: 0.124 -2015: 0.124 -2016: 0.124 -2017: 0.124 -2018: 0.124 -2019: 0.124 -_Valid Range:_ min = 0 and max = 1 -_Out-of-Range Action:_ error - - -#### `SS_Earnings_c` -_Description:_ Individual earnings below this amount are subjected to Social Security (OASDI) payroll tax. -_Notes:_ This parameter is indexed by the rate of growth in average wages, not by the price inflation rate. -_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True -_Can Be Inflation Indexed:_ True _Is Inflation Indexed:_ True -_Value Type:_ float -_Known Values:_ -2013: 113700.0 -2014: 117000.0 -2015: 118500.0 -2016: 118500.0 -2017: 127200.0 -2018: 128400.0 -2019: 132900.0 -_Valid Range:_ min = 0 and max = 9e+99 -_Out-of-Range Action:_ error - - -#### `SS_Earnings_thd` -_Description:_ Individual earnings above this threshold are subjected to Social Security (OASDI) payroll tax, in addition to earnings below the maximum taxable earnings threshold. -_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True -_Can Be Inflation Indexed:_ True _Is Inflation Indexed:_ False -_Value Type:_ float -_Known Values:_ -2013: 9e+99 -2014: 9e+99 -2015: 9e+99 -2016: 9e+99 -2017: 9e+99 -2018: 9e+99 -2019: 9e+99 -_Valid Range:_ min = 0 and max = 9e+99 -_Out-of-Range Action:_ error +#### `FICA_ss_trt_employer` +_Description:_ Employer side Social Security FICA rate. +_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True +_Can Be Inflation Indexed:_ False _Is Inflation Indexed:_ False +_Value Type:_ float +_Known Values:_ +2013: 0.062 +2014: 0.062 +2015: 0.062 +2016: 0.062 +2017: 0.062 +2018: 0.062 +2019: 0.062 +_Valid Range:_ min = 0 and max = 1 +_Out-of-Range Action:_ error + +#### `FICA_ss_trt_employee` +_Description:_ Employee side Social Security FICA rate. +_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True +_Can Be Inflation Indexed:_ False _Is Inflation Indexed:_ False +_Value Type:_ float +_Known Values:_ +2013: 0.062 +2014: 0.062 +2015: 0.062 +2016: 0.062 +2017: 0.062 +2018: 0.062 +2019: 0.062 +_Valid Range:_ min = 0 and max = 1 +_Out-of-Range Action:_ error + + +#### `SS_Earnings_c` +_Description:_ Individual earnings below this amount are subjected to Social Security (OASDI) payroll tax. +_Notes:_ This parameter is indexed by the rate of growth in average wages, not by the price inflation rate. +_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True +_Can Be Inflation Indexed:_ True _Is Inflation Indexed:_ True +_Value Type:_ float +_Known Values:_ +2013: 113700.0 +2014: 117000.0 +2015: 118500.0 +2016: 118500.0 +2017: 127200.0 +2018: 128400.0 +2019: 132900.0 +_Valid Range:_ min = 0 and max = 9e+99 +_Out-of-Range Action:_ error + + +#### `SS_Earnings_thd` +_Description:_ Individual earnings above this threshold are subjected to Social Security (OASDI) payroll tax, in addition to earnings below the maximum taxable earnings threshold. +_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True +_Can Be Inflation Indexed:_ True _Is Inflation Indexed:_ False +_Value Type:_ float +_Known Values:_ +2013: 9e+99 +2014: 9e+99 +2015: 9e+99 +2016: 9e+99 +2017: 9e+99 +2018: 9e+99 +2019: 9e+99 +_Valid Range:_ min = 0 and max = 9e+99 +_Out-of-Range Action:_ error ## Social Security Taxability @@ -703,125 +734,125 @@ _Out-of-Range Action:_ error ### Child And Dependent Care -#### `CDCC_c` -_Description:_ The maximum amount of expenses allowed for each qualifying dependent. -_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True -_Can Be Inflation Indexed:_ True _Is Inflation Indexed:_ False -_Value Type:_ float -_Known Values:_ -2013: 3000.0 -2014: 3000.0 -2015: 3000.0 -2016: 3000.0 -2017: 3000.0 -2018: 3000.0 -2019: 3000.0 -_Valid Range:_ min = 0 and max = 9e+99 -_Out-of-Range Action:_ error - - -#### `CDCC_ps` -_Description:_ For taxpayers with AGI over this amount, the rate of the credit is reduced by one percentage point each $2,000 of AGI over this amount. -_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True -_Can Be Inflation Indexed:_ True _Is Inflation Indexed:_ False -_Value Type:_ float -_Known Values:_ -2013: 15000.0 -2014: 15000.0 -2015: 15000.0 -2016: 15000.0 -2017: 15000.0 -2018: 15000.0 -2019: 15000.0 -_Valid Range:_ min = 0 and max = 9e+99 -_Out-of-Range Action:_ error - - -#### `CDCC_ps2` -_Description:_ For taxpayers with AGI over this amount, the rate of the credit is reduced by one percentage point each $2,000 of AGI over this amount. -_Notes:_ For 2021, the American Rescue Plan Act set this to $400,000. In other years, this phase-out does not apply. -_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True -_Can Be Inflation Indexed:_ True _Is Inflation Indexed:_ False -_Value Type:_ float -_Known Values:_ -2013: 9e+99 -2014: 9e+99 -2015: 9e+99 -2016: 9e+99 -2017: 9e+99 -2018: 9e+99 -2019: 9e+99 -_Valid Range:_ min = 0 and max = 9e+99 -_Out-of-Range Action:_ error - - -#### `CDCC_crt` -_Description:_ The maximum percentage rate for the CDCC; this percentage rate decreases as AGI rises above the CDCC_ps level. -_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True -_Can Be Inflation Indexed:_ False _Is Inflation Indexed:_ False -_Value Type:_ float -_Known Values:_ -2013: 35.0 -2014: 35.0 -2015: 35.0 -2016: 35.0 -2017: 35.0 -2018: 35.0 -2019: 35.0 -_Valid Range:_ min = 0 and max = 100 -_Out-of-Range Action:_ error - - -#### `CDCC_frt` -_Description:_ The minimum percentage rate for the first AGI phaseout of the CDCC. -_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True -_Can Be Inflation Indexed:_ False _Is Inflation Indexed:_ False -_Value Type:_ float -_Known Values:_ -2013: 20.0 -2014: 20.0 -2015: 20.0 -2016: 20.0 -2017: 20.0 -2018: 20.0 -2019: 20.0 -_Valid Range:_ min = 0 and max = 100 -_Out-of-Range Action:_ error - - -#### `CDCC_prt` -_Description:_ The CDCC credit rate is reduced by this many percentage points for each dollary of AGI over the phase-out thresholds. -_Notes:_ In the law, the credit rate is reduced by 1 percentage point for every $2,000 of AGI over the limit. -_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True -_Can Be Inflation Indexed:_ False _Is Inflation Indexed:_ False -_Value Type:_ float -_Known Values:_ -2013: 0.0005 -2014: 0.0005 -2015: 0.0005 -2016: 0.0005 -2017: 0.0005 -2018: 0.0005 -2019: 0.0005 -_Valid Range:_ min = 0 and max = 1 -_Out-of-Range Action:_ error - - -#### `CDCC_refundable` -_Description:_ If true, the CDCC is fully refundable. -_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True -_Can Be Inflation Indexed:_ False _Is Inflation Indexed:_ False -_Value Type:_ bool -_Known Values:_ -2013: False -2014: False -2015: False -2016: False -2017: False -2018: False -2019: False -_Valid Range:_ min = False and max = True -_Out-of-Range Action:_ error +#### `CDCC_c` +_Description:_ The maximum amount of expenses allowed for each qualifying dependent. +_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True +_Can Be Inflation Indexed:_ True _Is Inflation Indexed:_ False +_Value Type:_ float +_Known Values:_ +2013: 3000.0 +2014: 3000.0 +2015: 3000.0 +2016: 3000.0 +2017: 3000.0 +2018: 3000.0 +2019: 3000.0 +_Valid Range:_ min = 0 and max = 9e+99 +_Out-of-Range Action:_ error + + +#### `CDCC_ps` +_Description:_ For taxpayers with AGI over this amount, the rate of the credit is reduced by one percentage point each $2,000 of AGI over this amount. +_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True +_Can Be Inflation Indexed:_ True _Is Inflation Indexed:_ False +_Value Type:_ float +_Known Values:_ +2013: 15000.0 +2014: 15000.0 +2015: 15000.0 +2016: 15000.0 +2017: 15000.0 +2018: 15000.0 +2019: 15000.0 +_Valid Range:_ min = 0 and max = 9e+99 +_Out-of-Range Action:_ error + + +#### `CDCC_ps2` +_Description:_ For taxpayers with AGI over this amount, the rate of the credit is reduced by one percentage point each $2,000 of AGI over this amount. +_Notes:_ For 2021, the American Rescue Plan Act set this to $400,000. In other years, this phase-out does not apply. +_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True +_Can Be Inflation Indexed:_ True _Is Inflation Indexed:_ False +_Value Type:_ float +_Known Values:_ +2013: 9e+99 +2014: 9e+99 +2015: 9e+99 +2016: 9e+99 +2017: 9e+99 +2018: 9e+99 +2019: 9e+99 +_Valid Range:_ min = 0 and max = 9e+99 +_Out-of-Range Action:_ error + + +#### `CDCC_crt` +_Description:_ The maximum rate for the CDCC; this rate decreases as AGI rises above the CDCC_ps level. +_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True +_Can Be Inflation Indexed:_ False _Is Inflation Indexed:_ False +_Value Type:_ float +_Known Values:_ +2013: 0.35 +2014: 0.35 +2015: 0.35 +2016: 0.35 +2017: 0.35 +2018: 0.35 +2019: 0.35 +_Valid Range:_ min = 0 and max = 1 +_Out-of-Range Action:_ error + + +#### `CDCC_frt` +_Description:_ The minimum rate for the first AGI phaseout of the CDCC. +_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True +_Can Be Inflation Indexed:_ False _Is Inflation Indexed:_ False +_Value Type:_ float +_Known Values:_ +2013: 0.20 +2014: 0.20 +2015: 0.20 +2016: 0.20 +2017: 0.20 +2018: 0.20 +2019: 0.20 +_Valid Range:_ min = 0 and max = 1 +_Out-of-Range Action:_ error + + +#### `CDCC_prt` +_Description:_ The CDCC credit rate is reduced by this many percentage points for each dollar of AGI over the phase-out thresholds. +_Notes:_ In the law, the credit rate is reduced by 1 percentage point for every $2,000 of AGI over the limit. +_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True +_Can Be Inflation Indexed:_ False _Is Inflation Indexed:_ False +_Value Type:_ float +_Known Values:_ +2013: 0.0005 +2014: 0.0005 +2015: 0.0005 +2016: 0.0005 +2017: 0.0005 +2018: 0.0005 +2019: 0.0005 +_Valid Range:_ min = 0 and max = 1 +_Out-of-Range Action:_ error + + +#### `CDCC_refundable` +_Description:_ If true, the CDCC is fully refundable. +_Has An Effect When Using:_ _PUF data:_ True _CPS data:_ True +_Can Be Inflation Indexed:_ False _Is Inflation Indexed:_ False +_Value Type:_ bool +_Known Values:_ +2013: False +2014: False +2015: False +2016: False +2017: False +2018: False +2019: False +_Valid Range:_ min = False and max = True +_Out-of-Range Action:_ error ### Misc. Credit Limits diff --git a/taxcalc/calcfunctions.py b/taxcalc/calcfunctions.py index d1aa5ff0a..131cde2cd 100644 --- a/taxcalc/calcfunctions.py +++ b/taxcalc/calcfunctions.py @@ -100,8 +100,9 @@ def BenefitPrograms(calc): @iterate_jit(nopython=True) def EI_PayrollTax(SS_Earnings_c, e00200p, e00200s, pencon_p, pencon_s, - FICA_ss_trt, FICA_mc_trt, ALD_SelfEmploymentTax_hc, - SS_Earnings_thd, SECA_Earnings_thd, + FICA_ss_trt_employer, FICA_ss_trt_employee, + FICA_mc_trt_employer, FICA_mc_trt_employee, + ALD_SelfEmploymentTax_hc, SS_Earnings_thd, SECA_Earnings_thd, e00900p, e00900s, e02100p, e02100s, k1bx14p, k1bx14s, payrolltax, ptax_was, setax, c03260, ptax_oasdi, sey, earned, earned_p, earned_s, @@ -123,10 +124,14 @@ def EI_PayrollTax(SS_Earnings_c, e00200p, e00200s, pencon_p, pencon_s, Contributions to defined-contribution pension plans for taxpayer pencon_s: float Contributions to defined-contribution pension plans for spouse - FICA_ss_trt: float - Social security payroll tax rate, including both employer and employee - FICA_mc_trt: float - Medicare payroll tax rate, including both employer and employee + FICA_ss_trt_employer: float + Employer side social security payroll tax rate + FICA_ss_trt_employee: float + Employee side social security payroll tax rate + FICA_mc_trt_employer: float + Employer side medicare payroll tax rate + FICA_mc_trt_employee: float + Employee side medicare payroll tax rate ALD_SelfEmploymentTax_hc: float Adjustment for self-employment tax haircut If greater than zero, reduces the employer equivalent portion of self-employment adjustment @@ -218,22 +223,22 @@ def EI_PayrollTax(SS_Earnings_c, e00200p, e00200s, pencon_p, pencon_s, txearn_was_s = min(SS_Earnings_c, gross_was_s) # compute OASDI and HI payroll taxes on wage-and-salary income, FICA - ptax_ss_was_p = FICA_ss_trt * txearn_was_p - ptax_ss_was_s = FICA_ss_trt * txearn_was_s - ptax_mc_was_p = FICA_mc_trt * gross_was_p - ptax_mc_was_s = FICA_mc_trt * gross_was_s + ptax_ss_was_p = (FICA_ss_trt_employer + FICA_ss_trt_employee) * txearn_was_p + ptax_ss_was_s = (FICA_ss_trt_employer + FICA_ss_trt_employee) * txearn_was_s + ptax_mc_was_p = (FICA_mc_trt_employer + FICA_mc_trt_employee) * gross_was_p + ptax_mc_was_s = (FICA_mc_trt_employer + FICA_mc_trt_employee) * gross_was_s ptax_was = ptax_ss_was_p + ptax_ss_was_s + ptax_mc_was_p + ptax_mc_was_s # compute taxable self-employment income for OASDI SECA - sey_frac = 1.0 - 0.5 * (FICA_ss_trt + FICA_mc_trt) + sey_frac = 1.0 - 0.5 * (FICA_ss_trt_employer + FICA_ss_trt_employee + FICA_mc_trt_employer + FICA_mc_trt_employee) txearn_sey_p = min(max(0., sey_p * sey_frac), SS_Earnings_c - txearn_was_p) txearn_sey_s = min(max(0., sey_s * sey_frac), SS_Earnings_c - txearn_was_s) # compute self-employment tax on taxable self-employment income, SECA - setax_ss_p = FICA_ss_trt * txearn_sey_p - setax_ss_s = FICA_ss_trt * txearn_sey_s - setax_mc_p = FICA_mc_trt * max(0., sey_p * sey_frac) - setax_mc_s = FICA_mc_trt * max(0., sey_s * sey_frac) + setax_ss_p = (FICA_ss_trt_employer + FICA_ss_trt_employee) * txearn_sey_p + setax_ss_s = (FICA_ss_trt_employer + FICA_ss_trt_employee) * txearn_sey_s + setax_mc_p = (FICA_mc_trt_employer + FICA_mc_trt_employee) * max(0., sey_p * sey_frac) + setax_mc_s = (FICA_mc_trt_employer + FICA_mc_trt_employee) * max(0., sey_s * sey_frac) setax_p = setax_ss_p + setax_mc_p setax_s = setax_ss_s + setax_mc_s setax = setax_p + setax_s @@ -246,13 +251,13 @@ def EI_PayrollTax(SS_Earnings_c, e00200p, e00200s, pencon_p, pencon_s, # compute extra OASDI payroll taxes on the portion of the sum # of wage-and-salary income and taxable self employment income # that exceeds SS_Earnings_thd - sey_frac = 1.0 - 0.5 * FICA_ss_trt + sey_frac = 1.0 - 0.5 * (FICA_ss_trt_employer + FICA_ss_trt_employee) was_plus_sey_p = gross_was_p + max(0., sey_p * sey_frac) was_plus_sey_s = gross_was_s + max(0., sey_s * sey_frac) extra_ss_income_p = max(0., was_plus_sey_p - SS_Earnings_thd) extra_ss_income_s = max(0., was_plus_sey_s - SS_Earnings_thd) - extra_payrolltax = (extra_ss_income_p * FICA_ss_trt + - extra_ss_income_s * FICA_ss_trt) + extra_payrolltax = (extra_ss_income_p * (FICA_ss_trt_employer + FICA_ss_trt_employee) + + extra_ss_income_s * (FICA_ss_trt_employer + FICA_ss_trt_employee)) # compute part of total payroll taxes for filing unit # (the ptax_amc part of total payroll taxes for the filing unit is @@ -1080,7 +1085,8 @@ def ItemDed(e17500_capped, e18400_capped, e18500_capped, e19200_capped, @iterate_jit(nopython=True) def AdditionalMedicareTax(e00200, MARS, AMEDT_ec, sey, AMEDT_rt, - FICA_mc_trt, FICA_ss_trt, + FICA_mc_trt_employer, FICA_mc_trt_employee, + FICA_ss_trt_employer, FICA_ss_trt_employee, ptax_amc, payrolltax): """ Computes Additional Medicare Tax (Form 8959) included in payroll taxes. @@ -1093,10 +1099,14 @@ def AdditionalMedicareTax(e00200, MARS, Additional Medicare Tax earnings exclusion AMEDT_rt: float Additional Medicare Tax rate - FICA_ss_trt: float - FICA Social Security tax rate - FICA_mc_trt: float - FICA Medicare tax rate + FICA_ss_trt_employer: float + Employer side FICA Social Security tax rate + FICA_ss_trt_employee: float + Employee side FICA Social Security tax rate + FICA_mc_trt_employer: float + Employer side FICA Medicare tax rate + FICA_mc_trt_employee: float + Employee side FICA Medicare tax rate e00200: float Wages and salaries sey: float @@ -1113,7 +1123,7 @@ def AdditionalMedicareTax(e00200, MARS, payrolltax: float payroll tax augmented by Additional Medicare Tax """ - line8 = max(0., sey) * (1. - 0.5 * (FICA_mc_trt + FICA_ss_trt)) + line8 = max(0., sey) * (1. - 0.5 * (FICA_mc_trt_employer + FICA_mc_trt_employee + FICA_ss_trt_employer + FICA_ss_trt_employee)) line11 = max(0., AMEDT_ec[MARS - 1] - e00200) ptax_amc = AMEDT_rt * (max(0., e00200 - AMEDT_ec[MARS - 1]) + max(0., line8 - line11)) @@ -2149,15 +2159,23 @@ def F2441(MARS, earned_p, earned_s, f2441, CDCC_c, e32800, c00100: float Adjusted Gross Income (AGI) CDCC_ps: float - Child/dependent care credit phaseout start + Child/dependent care credit first phaseout start + CDCC_ps2: float + Child/dependent care credit second phaseout start CDCC_crt: float - Child/dependent care credit phaseout percentage rate ceiling + Child/dependent care credit phaseout rate ceiling + CDCC_frt: float + Child/dependent care credit phaseout rate floor + CDCC_prt: float + Child/dependent care credit phaseout rate c05800: float Total (regular + AMT) income tax liability before credits e07300: float Foreign tax credit from Form 1116 c07180: float Credit for child and dependent care expenses from Form 2441 + CDCC_refund: bool + Indicator for whether CDCC is refundable Returns ------- @@ -2189,7 +2207,8 @@ def F2441(MARS, earned_p, earned_s, f2441, CDCC_c, e32800, if c00100 > CDCC_ps2: crate = max(0., CDCC_frt - max(((c00100 - CDCC_ps2) * CDCC_prt), 0.)) - c33200 = c33000 * 0.01 * crate + + c33200 = c33000 * crate # credit is limited by tax liability if not refundable if CDCC_refundable: c07180 = 0. diff --git a/taxcalc/calculator.py b/taxcalc/calculator.py index 092e15e28..af2abbd84 100644 --- a/taxcalc/calculator.py +++ b/taxcalc/calculator.py @@ -694,9 +694,11 @@ def mtr(self, variable_str='e00200p', variable >= self.policy_param('SS_Earnings_thd') ) adj = np.where(oasdi_taxed, - 0.5 * (self.policy_param('FICA_ss_trt') + - self.policy_param('FICA_mc_trt')), - 0.5 * self.policy_param('FICA_mc_trt')) + 0.5 * (self.policy_param('FICA_ss_trt_employer') + + self.policy_param('FICA_ss_trt_employee') + + self.policy_param('FICA_mc_trt_employer') + + self.policy_param('FICA_mc_trt_employee')), + 0.5 * (self.policy_param('FICA_mc_trt_employer') + self.policy_param('FICA_mc_trt_employee'))) else: adj = 0.0 # compute marginal tax rates diff --git a/taxcalc/parameters.py b/taxcalc/parameters.py index 13424566b..8ebbf04cb 100644 --- a/taxcalc/parameters.py +++ b/taxcalc/parameters.py @@ -61,7 +61,7 @@ class Parameters(pt.Parameters): print(name, value) # parameter_indexing_CPI_offset [0.] - # FICA_ss_trt [0.124] + # FICA_ss_trt_employer [0.062] # SS_Earnings_c [113700.] Check out the ParamTools diff --git a/taxcalc/policy_current_law.json b/taxcalc/policy_current_law.json index c99a152e3..a36d46ccb 100644 --- a/taxcalc/policy_current_law.json +++ b/taxcalc/policy_current_law.json @@ -117,9 +117,9 @@ "cps": true } }, - "FICA_ss_trt": { - "title": "Social Security payroll tax rate", - "description": "Social Security FICA rate, including both employer and employee.", + "FICA_ss_trt_employer": { + "title": "Employer side Social Security payroll tax rate", + "description": "Employer side Social Security FICA rate, including both employer and employee.", "notes": "", "section_1": "Payroll Taxes", "section_2": "Social Security FICA", @@ -129,13 +129,39 @@ "value": [ { "year": 2013, - "value": 0.124 + "value": 0.062 } ], "validators": { "range": { "min": 0, - "max": 1 + "max": 0.5 + } + }, + "compatible_data": { + "puf": true, + "cps": true + } + }, + "FICA_ss_trt_employee": { + "title": "Employee side Social Security payroll tax rate", + "description": "Employee side Social Security FICA rate, including both employer and employee.", + "notes": "", + "section_1": "Payroll Taxes", + "section_2": "Social Security FICA", + "indexable": false, + "indexed": false, + "type": "float", + "value": [ + { + "year": 2013, + "value": 0.062 + } + ], + "validators": { + "range": { + "min": 0, + "max": 0.5 } }, "compatible_data": { @@ -257,9 +283,9 @@ "cps": true } }, - "FICA_mc_trt": { - "title": "Medicare payroll tax rate", - "description": "Medicare FICA rate, including both employer and employee.", + "FICA_mc_trt_employer": { + "title": "Employer side Medicare payroll tax rate", + "description": "Employer side Medicare FICA rate, including both employer and employee.", "notes": "", "section_1": "Payroll Taxes", "section_2": "Medicare FICA", @@ -269,13 +295,39 @@ "value": [ { "year": 2013, - "value": 0.029 + "value": 0.0145 } ], "validators": { "range": { "min": 0, - "max": 1 + "max": 0.5 + } + }, + "compatible_data": { + "puf": true, + "cps": true + } + }, + "FICA_mc_trt_employee": { + "title": "Employee side Medicare payroll tax rate", + "description": "Employee side Medicare FICA rate, including both employer and employee.", + "notes": "", + "section_1": "Payroll Taxes", + "section_2": "Medicare FICA", + "indexable": false, + "indexed": false, + "type": "float", + "value": [ + { + "year": 2013, + "value": 0.0145 + } + ], + "validators": { + "range": { + "min": 0, + "max": 0.5 } }, "compatible_data": { @@ -16350,8 +16402,8 @@ } }, "CDCC_crt": { - "title": "Child & dependent care credit phaseout percentage rate ceiling", - "description": "The maximum percentage rate for the CDCC; this percentage rate decreases as AGI rises above the CDCC_ps level.", + "title": "Child & dependent care credit phaseout rate ceiling", + "description": "The maximum rate for the CDCC; this rate decreases as AGI rises above the CDCC_ps level.", "notes": "", "section_1": "Nonrefundable Credits", "section_2": "Child And Dependent Care", @@ -16361,21 +16413,21 @@ "value": [ { "year": 2013, - "value": 35.0 + "value": 0.350 }, { "year": 2021, - "value": 50.0 + "value": 0.500 }, { "year": 2022, - "value": 35.0 + "value": 0.350 } ], "validators": { "range": { "min": 0, - "max": 100 + "max": 1 } }, "compatible_data": { @@ -16384,8 +16436,8 @@ } }, "CDCC_frt": { - "title": "Child & dependent care credit phaseout percentage rate floor", - "description": "The minimum percentage rate for the first AGI phaseout of the CDCC.", + "title": "Child & dependent care credit phaseout rate floor", + "description": "The minimum rate for the first AGI phaseout of the CDCC.", "notes": "", "section_1": "Nonrefundable Credits", "section_2": "Child And Dependent Care", @@ -16395,13 +16447,13 @@ "value": [ { "year": 2013, - "value": 20.0 + "value": 0.200 } ], "validators": { "range": { "min": 0, - "max": 100 + "max": 1 } }, "compatible_data": { @@ -16410,9 +16462,9 @@ } }, "CDCC_prt": { - "title": "Child & dependent care credit phaseout percentage rate", - "description": "The CDCC credit rate is reduced by this many percentage points for each dollary of AGI over the phase-out thresholds.", - "notes": "In the law, the credit rate is reduced by 1 percentage point for every $2,000 of AGI over the limit.", + "title": "Child & dependent care credit phaseout rate", + "description": "The CDCC credit rate is reduced by this many percentage points for each dollar of AGI over the phase-out thresholds.", + "notes": "In the law, the credit rate is reduced by 1 percentage point for every $2,000 of AGI over the limit. 0.01 / 2000 = 0.000005", "section_1": "Nonrefundable Credits", "section_2": "Child And Dependent Care", "indexable": false, @@ -16421,7 +16473,7 @@ "value": [ { "year": 2013, - "value": 0.0005 + "value": 5e-06 } ], "validators": { diff --git a/taxcalc/reforms/ARPA.json b/taxcalc/reforms/ARPA.json index 055e94c54..123d9a3eb 100644 --- a/taxcalc/reforms/ARPA.json +++ b/taxcalc/reforms/ARPA.json @@ -61,8 +61,8 @@ "2022": 15000}, "CDCC_ps2": {"2021": 400000, "2022": 9e+99}, - "CDCC_crt": {"2021": 50.0, - "2022": 35.0}, + "CDCC_crt": {"2021": 0.5, + "2022": 0.35}, "CDCC_refundable": {"2021": true, "2022": false}, "ALD_BusinessLosses_c": {"2026": [283535.22, 567070.42, 283535.22, 283535.22, 567070.42], diff --git a/taxcalc/reforms/Larson2019.json b/taxcalc/reforms/Larson2019.json index 7fb5f9520..e984c6337 100644 --- a/taxcalc/reforms/Larson2019.json +++ b/taxcalc/reforms/Larson2019.json @@ -10,18 +10,27 @@ // Reform_Parameter_Map: // - 1: SS_thd50, SS_thd85 // - 2: SS_Earnings_thd -// - 3: FICA_ss_trt +// - 3: FICA_ss_trt_employer, FICA_ss_trt_employee { "SS_thd50": {"2019": [50000, 100000, 50000, 50000, 50000]}, "SS_thd85": {"2019": [50000, 100000, 50000, 50000, 50000]}, "SS_Earnings_thd": {"2019": 400000}, - "FICA_ss_trt": {"2020": 0.125, - "2021": 0.126, - "2022": 0.127, - "2023": 0.128, - "2024": 0.129, - "2025": 0.130, - "2026": 0.131, - "2027": 0.132, - "2028": 0.133} + "FICA_ss_trt_employer": {"2020": 0.0625, + "2021": 0.063, + "2022": 0.0635, + "2023": 0.064, + "2024": 0.0645, + "2025": 0.065, + "2026": 0.0655, + "2027": 0.066, + "2028": 0.0665}, + "FICA_ss_trt_employee": {"2020": 0.0625, + "2021": 0.063, + "2022": 0.0635, + "2023": 0.064, + "2024": 0.0645, + "2025": 0.065, + "2026": 0.0655, + "2027": 0.066, + "2028": 0.0665} } diff --git a/taxcalc/reforms/ptaxes0.json b/taxcalc/reforms/ptaxes0.json index c063b5812..5581d7273 100644 --- a/taxcalc/reforms/ptaxes0.json +++ b/taxcalc/reforms/ptaxes0.json @@ -1,6 +1,6 @@ // Raise OASDI ("social security") and HI ("Medicare") payroll tax rates -// : current law OASDI (employee+employer) rate is 0.124 -// : current law HI (employee+employer) rate is 0.029 +// : current law OASDI (employee+employer) rate is 0.124, with 0.062 on employer and employee side +// : current law HI (employee+employer) rate is 0.029, with 0.0145 on employer and employee side // Reform_Baseline: 2017_law.json // Reform_Description: // - raise OASDI payroll tax rate in 2018 and 2020 (1) diff --git a/taxcalc/tests/reforms.json b/taxcalc/tests/reforms.json index 2c1e5f8cf..6e6580849 100644 --- a/taxcalc/tests/reforms.json +++ b/taxcalc/tests/reforms.json @@ -2,8 +2,9 @@ "1": { "baseline": "2017_law.json", "start_year": 2015, - "value": {"FICA_ss_trt": 0.134}, - "name": "Increase OASDI payroll tax rate by 1 pts", + "value": {"FICA_ss_trt_employer": 0.067, + "FICA_ss_trt_employee": 0.067}, + "name": "Increase OASDI payroll tax rate by 1 pts, split evenly on employer and employee sides", "output_type": "payrolltax", "compare_with": {} }, @@ -20,7 +21,8 @@ "3": { "baseline": "2017_law.json", "start_year": 2015, - "value": {"FICA_mc_trt": 0.039}, + "value": {"FICA_mc_trt_employer": 0.0195, + "FICA_mc_trt_employee": 0.0195}, "name": "Increase HI payroll tax rate by 1 pts", "output_type": "payrolltax", "compare_with": {"Budget Options": [73, 77, 82, 87]} diff --git a/taxcalc/tests/test_calcfunctions.py b/taxcalc/tests/test_calcfunctions.py index bcf49e869..f564be8cf 100644 --- a/taxcalc/tests/test_calcfunctions.py +++ b/taxcalc/tests/test_calcfunctions.py @@ -223,22 +223,22 @@ def test_StdDed(test_tuple, expected_value, skip_jit): assert np.allclose(test_value, expected_value) -tuple1 = (120000, 10000, 15000, 100, 2000, 0.12, 0.03, 0, 99999999999, - 400, 0, 0, 0, 0, 0, 0, None, None, None, None, None, None, +tuple1 = (120000, 10000, 15000, 100, 2000, 0.06, 0.06, 0.015, 0.015, 0, 99999999999, + 400, 0, 0, 0, 0, 0, 0, None, None, None, None, None, None, None, None, None, None, None) -tuple2 = (120000, 10000, 15000, 100, 2000, 0.12, 0.03, 0, 99999999999, +tuple2 = (120000, 10000, 15000, 100, 2000, 0.06, 0.06, 0.015, 0.015, 0, 99999999999, 400, 2000, 0, 10000, 0, 0, 3000, None, None, None, None, None, None, None, None, None, None, None) -tuple3 = (120000, 150000, 15000, 100, 2000, 0.12, 0.03, 0, 99999999999, +tuple3 = (120000, 150000, 15000, 100, 2000, 0.06, 0.06, 0.015, 0.015, 0, 99999999999, 400, 2000, 0, 10000, 0, 0, 3000, None, None, None, None, None, None, None, None, None, None, None) -tuple4 = (120000, 500000, 15000, 100, 2000, 0.12, 0.03, 0, 400000, +tuple4 = (120000, 500000, 15000, 100, 2000, 0.06, 0.06, 0.015, 0.015, 0, 400000, 400, 2000, 0, 10000, 0, 0, 3000, None, None, None, None, None, None, None, None, None, None, None) -tuple5 = (120000, 10000, 15000, 100, 2000, 0.12, 0.03, 0, 99999999999, +tuple5 = (120000, 10000, 15000, 100, 2000, 0.06, 0.06, 0.015, 0.015, 0, 99999999999, 400, 300, 0, 0, 0, 0, 0, None, None, None, None, None, None, None, None, None, None, None) -tuple6 = (120000, 10000, 15000, 100, 2000, 0.12, 0.03, 0, 99999999999, +tuple6 = (120000, 10000, 15000, 100, 2000, 0.06, 0.06, 0.015, 0.015, 0, 99999999999, 400, 0, 0, 0, 0, -40000, 0, None, None, None, None, None, None, None, None, None, None, None) expected1 = (0, 4065, 4065, 0, 0, 3252, 25000, 10000, 15000, 10100, diff --git a/taxcalc/tests/test_policy.py b/taxcalc/tests/test_policy.py index 110c27407..5751321df 100644 --- a/taxcalc/tests/test_policy.py +++ b/taxcalc/tests/test_policy.py @@ -72,14 +72,22 @@ def test_json_reform_url(): reform_str = """ { // raise FICA payroll tax rate in 2018 and 2020 - "FICA_ss_trt": { - "2018": 0.130, - "2020": 0.140 + "FICA_ss_trt_employer": { + "2018": 0.065, + "2020": 0.070 + }, + "FICA_ss_trt_employee": { + "2018": 0.065, + "2020": 0.070 }, // raise Medicare payroll tax rate in 2019 and 2021 - "FICA_mc_trt": { - "2019": 0.030, - "2021": 0.032 + "FICA_mc_trt_employer": { + "2019": 0.015, + "2021": 0.016 + }, + "FICA_mc_trt_employee": { + "2019": 0.015, + "2021": 0.016 } } """