Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement New Payroll Tax Proposal from Rep. Larson #2222

Merged
merged 8 commits into from Feb 8, 2019

Conversation

andersonfrailey
Copy link
Collaborator

@andersonfrailey andersonfrailey commented Feb 6, 2019

Connecticut Rep John Larson recently introduced "The Social Security 2100 Act", details for which can be found here. This PR implements the part of the proposal that would introduce a donut hole in payroll tax liability. The proposal specifically states:

Have millionaires and billionaires pay the same rate as everyone else – Presently, payroll taxes are not collected on wages over $132,900. This legislation would apply the payroll tax to wages above $400,000. This provision would only affect the top 0.4% of wage earners. [Sec. 201, 202]

According to the bill text, this would actually apply to both wages and self-employment income:

Sec. 201. Determination of wages and self-employment income above contribution and benefit base after 2019.
Sec. 202. Inclusion of earnings over $400,000 in Social Security benefit formula.

Talking over the implementation with @jdebacker, we determined that this new earnings threshold would not be indexed to inflation so the donut hole will close over time. This also seems to be supported by the bill text:

14 ‘‘except that this subparagraph shall apply only to
15 calendar years for which the contribution and ben-
16 efit base (as so determined) is less than $400,000,

This pull request also includes a JSON reform file that characterizes the payroll and income tax aspects of the Larson proposal.

@codecov
Copy link

codecov bot commented Feb 6, 2019

Codecov Report

Merging #2222 into master will not change coverage.
The diff coverage is n/a.

Impacted file tree graph

@@          Coverage Diff           @@
##           master   #2222   +/-   ##
======================================
  Coverage     100%    100%           
======================================
  Files          12      12           
  Lines        2981    2981           
======================================
  Hits         2981    2981

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 8d4d043...a497b31. Read the comment docs.

@martinholmer
Copy link
Collaborator

@andersonfrailey said in PR #2222:

I put a WIP label on this PR because I might slightly edit how self-employment income is added into the new calculations. It might be the case that only a fraction of self-employment income would be applied to meeting this threshold. I'll have an answer on that this afternoon.

Once you nail that down, why not add a JSON reform file for this payroll tax reform in the taxcalc/reforms directory?

@martinholmer martinholmer changed the title WIP: Implement New Payroll Tax Proposal from Rep. Larson Implement New Payroll Tax Proposal from Rep. Larson Feb 6, 2019
@andersonfrailey
Copy link
Collaborator Author

@martinholmer, latest commit finishes the implementation and adds a JSON file. I'm having some issues creating the corresponding Larson2019.out file though. As you can see there are a lot of blank spaces. I created the file by following along the process of testing reform outputs in test_reform_json_and_output. I'll work on it a bit more and push changes when I get it right.

@martinholmer
Copy link
Collaborator

@andersonfrailey, Can you explain in words what this code is doing?

screen shot 2019-02-06 at 6 12 46 pm

@martinholmer
Copy link
Collaborator

@andersonfrailey said:

I'm having some issues creating the corresponding Larson2019.out file though.

Wait to do this after PR #2223 is merged into the master branch and you merge those changes into your larsonproposal branch.

@andersonfrailey
Copy link
Collaborator Author

Wait to do this after PR #2223 is merged into the master branch and you merge those changes into your larsonproposal branch.

Sounds good.

As for what the code is doing:

sey_frac = 1.0 - 0.5 * FICA_ss_trt

First it's finding the portion of self-employment income that is eligible to be taxed. My understanding is that you can reduce your taxable self-employment income by half, so I followed the logic that was used a few lines up. I left out _FICA_mc_trt because the proposal only mentions Social Security payroll taxes.

was_plus_sey_p = txearn_was_p + (sey_p * sey_frac)
was_plus_sey_s = txearn_was_s + (sey_s * sey_frac)

Here we find total wages and self-employment income eligible to be taxed for the primary and secondary tax payer.

additional_ss_income_p = max(0., was_plus_sey_p - SS_Earnings_thd)
additional_ss_income_s = max(0., was_plus_sey_s - SS_Earnings_thd)
additional_payrolltax = (additional_ss_income_p * FICA_ss_trt +
  	                 additional_ss_income_s * FICA_ss_trt)

Finally, we calculate the additional payroll taxes owed for the primary and secondary payer. The default value for SS_Earnings_thd is 9e99 so unless a reform is introduced that lowers the threshold to a more reasonable level, the additional payroll tax will always be zero.

@martinholmer
Copy link
Collaborator

@andersonfrailey, Thanks for the explanation. On further review, it seems to me (but I could be wrong) that there are a couple of problems with the proposed code changes:

  1. The definition of the two was_plus_sey_? variables doesn't seem correct. Here is what you have now:
    was_plus_sey_p = txearn_was_p + (sey_p * sey_frac)
    was_plus_sey_s = txearn_was_s + (sey_s * sey_frac)

But the txearn_was_? variables are capped at the maximum taxable earnings level, SS_Earings_c. Thats not what the proposal says, does it?

  1. Under current law, self-employment losses (negative sey_?) are not allowed to offset positive wage and salary income, but the code fragment in item 1 does allow that. I doubt if that is in Larson's proposal. Look at the existing code to see how current-law policy handles negative self-employment income.

@andersonfrailey
Copy link
Collaborator Author

@martinholmer said:

But the txearn_was_? variables are capped at the maximum taxable earnings level, SS_Earings_c. Thats not what the proposal says, does it?

  1. Under current law, self-employment losses (negative sey_?) are not allowed to offset positive wage and salary income, but the code fragment in item 1 does allow that. I doubt if that is in Larson's proposal. Look at the existing code to see how current-law policy handles negative self-employment income.

Ah, good catch on both. You're correct. I'll update them both shortly.

@martinholmer martinholmer removed the WIP label Feb 7, 2019
@martinholmer
Copy link
Collaborator

@andersonfrailey, PR #2222 look good to me after a quick review. Let's "sleep on it" and if neither of us have any concerns I can merge this tomorrow morning.

@andersonfrailey
Copy link
Collaborator Author

@martinholmer sounds good to me!

@martinholmer martinholmer added ready and removed ready labels Feb 7, 2019
@martinholmer
Copy link
Collaborator

@andersonfrailey, Thanks for making it possible to simulate the payroll tax side of the Larson reform.

Just wondering how they plan to collect the tax on earnings above $400,000: employer withholding or as part of the income tax. Did you happen to notice that detail when reading the legislative proposal?

@martinholmer martinholmer merged commit dfb0fc3 into PSLmodels:master Feb 8, 2019
@andersonfrailey
Copy link
Collaborator Author

@martinholmer

Just wondering how they plan to collect the tax on earnings above $400,000: employer withholding or as part of the income tax. Did you happen to notice that detail when reading the legislative proposal?

I haven't seen any detail on how they would collect the tax on earnings above $400,000. I would assume employer withholdings, but I have nothing concrete to back that up.

@andersonfrailey andersonfrailey deleted the larsonproposal branch February 11, 2019 13:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants