From d3c13cf87c9353ab25f43987bfe2133d4d18d48a Mon Sep 17 00:00:00 2001 From: Cody Kallen Date: Wed, 10 Jan 2018 15:59:29 -0500 Subject: [PATCH 1/4] Modify pass-through exclusion calculation --- docs/index.html | 2 +- taxcalc/current_law_policy.json | 58 ++++++++++++++++++++++-- taxcalc/functions.py | 20 ++++---- taxcalc/reforms/TCJA_Reconciliation.json | 10 +++- taxcalc/reforms/TCJA_Senate.json | 6 +-- taxcalc/reforms/TCJA_Senate_111417.json | 6 +-- taxcalc/reforms/TCJA_Senate_120117.json | 4 +- 7 files changed, 84 insertions(+), 22 deletions(-) diff --git a/docs/index.html b/docs/index.html index a6d54bcc5..167f62ed0 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1029,7 +1029,7 @@

Personal Income

Personal Income — Regular: Non-AMT, Non-Pass-Through
tc Name: _II_rt1
TB Name: Personal income (regular/non-AMT/non-pass-through) tax rate 1
Description: The lowest tax rate, applied to the portion of taxable income below tax bracket 1.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.1
2014: 0.1
2015: 0.1
2016: 0.1
2017: 0.1
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Regular: Non-AMT, Non-Pass-Through
tc Name: _II_brk1
TB Name: Personal income (regular/non-AMT/non-pass-through) tax bracket (upper threshold) 1
Description: Taxable income below this threshold is taxed at tax rate 1.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [8925.0, 17850.0, 8925.0, 12750.0, 17850.0]
2014: [9075.0, 18150.0, 9075.0, 12950.0, 18150.0]
2015: [9225.0, 18450.0, 9225.0, 13150.0, 18450.0]
2016: [9275.0, 18550.0, 9275.0, 13250.0, 18550.0]
2017: [9325.0, 18650.0, 9325.0, 13350.0, 18650.0]
Valid Range: min = 0 and max = _II_brk2
Out-of-Range Action: stop

Personal Income — Regular: Non-AMT, Non-Pass-Through
tc Name: _II_rt2
TB Name: Personal income (regular/non-AMT/non-pass-through) tax rate 2
Description: The second lowest tax rate, applied to the portion of taxable income below tax bracket 2 and above tax bracket 1.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.15
2014: 0.15
2015: 0.15
2016: 0.15
2017: 0.15
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Regular: Non-AMT, Non-Pass-Through
tc Name: _II_brk2
TB Name: Personal income (regular/non-AMT/non-pass-through) tax bracket (upper threshold) 2
Description: Income below this threshold and above tax bracket 1 is taxed at tax rate 2.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [36250.0, 72500.0, 36250.0, 48600.0, 72500.0]
2014: [36900.0, 73800.0, 36900.0, 49400.0, 73800.0]
2015: [37450.0, 74900.0, 37450.0, 50200.0, 74900.0]
2016: [37650.0, 75300.0, 37650.0, 50400.0, 75300.0]
2017: [37950.0, 75900.0, 37950.0, 50800.0, 75900.0]
Valid Range: min = _II_brk1 and max = _II_brk3
Out-of-Range Action: stop

Personal Income — Regular: Non-AMT, Non-Pass-Through
tc Name: _II_rt3
TB Name: Personal income (regular/non-AMT/non-pass-through) tax rate 3
Description: The third lowest tax rate, applied to the portion of taxable income below tax bracket 3 and above tax bracket 2.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.25
2014: 0.25
2015: 0.25
2016: 0.25
2017: 0.25
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Regular: Non-AMT, Non-Pass-Through
tc Name: _II_brk3
TB Name: Personal income (regular/non-AMT/non-pass-through) tax bracket (upper threshold) 3
Description: Income below this threshold and above tax bracket 2 is taxed at tax rate 3.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [87850.0, 146400.0, 73200.0, 125450.0, 146400.0]
2014: [89350.0, 148850.0, 74425.0, 127550.0, 148850.0]
2015: [90750.0, 151200.0, 75600.0, 129600.0, 151200.0]
2016: [91150.0, 151900.0, 75950.0, 130150.0, 151900.0]
2017: [91900.0, 153100.0, 76550.0, 131200.0, 153100.0]
Valid Range: min = _II_brk2 and max = _II_brk4
Out-of-Range Action: stop

Personal Income — Regular: Non-AMT, Non-Pass-Through
tc Name: _II_rt4
TB Name: Personal income (regular/non-AMT/non-pass-through) tax rate 4
Description: The tax rate applied to the portion of taxable income below tax bracket 4 and above tax bracket 3.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.28
2014: 0.28
2015: 0.28
2016: 0.28
2017: 0.28
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Regular: Non-AMT, Non-Pass-Through
tc Name: _II_brk4
TB Name: Personal income (regular/non-AMT/non-pass-through) tax bracket (upper threshold) 4
Description: Income below this threshold and above tax bracket 3 is taxed at tax rate 4.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [183250.0, 223050.0, 111525, 203150.0, 223050.0]
2014: [186350.0, 226850.0, 113425, 206600.0, 226850.0]
2015: [189300.0, 230450.0, 115225, 209850.0, 230450.0]
2016: [190150.0, 231450.0, 115725, 210800.0, 231450.0]
2017: [191650.0, 233350.0, 116675, 212500.0, 233350.0]
Valid Range: min = _II_brk3 and max = _II_brk5
Out-of-Range Action: stop

Personal Income — Regular: Non-AMT, Non-Pass-Through
tc Name: _II_rt5
TB Name: Personal income (regular/non-AMT/non-pass-through) tax rate 5
Description: The third highest tax rate, applied to the portion of taxable income below tax bracket 5 and above tax bracket 4.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.33
2014: 0.33
2015: 0.33
2016: 0.33
2017: 0.33
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Regular: Non-AMT, Non-Pass-Through
tc Name: _II_brk5
TB Name: Personal income (regular/non-AMT/non-pass-through) tax bracket (upper threshold) 5
Description: Income below this threshold and above tax bracket 4 is taxed at tax rate 5.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [398350.0, 398350.0, 199175.0, 398350.0, 398350.0]
2014: [405100.0, 405100.0, 202550.0, 405100.0, 405100.0]
2015: [411500.0, 411500.0, 205750.0, 411500.0, 411500.0]
2016: [413350.0, 413350.0, 206675.0, 413350.0, 413350.0]
2017: [416700.0, 416700.0, 208350.0, 416700.0, 416700.0]
Valid Range: min = _II_brk4 and max = _II_brk6
Out-of-Range Action: stop

Personal Income — Regular: Non-AMT, Non-Pass-Through
tc Name: _II_rt6
TB Name: Personal income (regular/non-AMT/non-pass-through) tax rate 6
Description: The second higher tax rate, applied to the portion of taxable income below tax bracket 6 and above tax bracket 5.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.35
2014: 0.35
2015: 0.35
2016: 0.35
2017: 0.35
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Regular: Non-AMT, Non-Pass-Through
tc Name: _II_brk6
TB Name: Personal income (regular/non-AMT/non-pass-through) tax bracket 6
Description: Income below this threshold and above tax bracket 5 is taxed at tax rate 6.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [400000.0, 450000.0, 225000.0, 425000.0, 450000.0]
2014: [406750.0, 457600.0, 228800.0, 432200.0, 457600.0]
2015: [413200.0, 464850.0, 232425.0, 439000.0, 464850.0]
2016: [415050.0, 466950.0, 233475.0, 441000.0, 466950.0]
2017: [418400.0, 470700.0, 235350.0, 444550.0, 470700.0]
Valid Range: min = _II_brk5 and max = _II_brk7
Out-of-Range Action: stop

Personal Income — Regular: Non-AMT, Non-Pass-Through
tc Name: _II_rt7
TB Name: Personal income (regular/non-AMT/non-pass-through) tax rate 7
Description: The tax rate applied to the portion of taxable income below tax bracket 7 and above tax bracket 6.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.396
2014: 0.396
2015: 0.396
2016: 0.396
2017: 0.396
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Regular: Non-AMT, Non-Pass-Through
tc Name: _II_brk7
TB Name: Personal income (regular/non-AMT/non-pass-through) tax bracket 7
Description: Income below this threshold and above tax bracket 6 is taxed at tax rate 7; income above this threshold is taxed at tax rate 8. Default value is essentially infinity.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [9e+99, 9e+99, 9e+99, 9e+99, 9e+99]
2014: [9e+99, 9e+99, 9e+99, 9e+99, 9e+99]
2015: [9e+99, 9e+99, 9e+99, 9e+99, 9e+99]
2016: [9e+99, 9e+99, 9e+99, 9e+99, 9e+99]
2017: [9e+99, 9e+99, 9e+99, 9e+99, 9e+99]
Valid Range: min = _II_brk6 and max = 9e+99
Out-of-Range Action: stop

Personal Income — Regular: Non-AMT, Non-Pass-Through
tc Name: _II_rt8
TB Name: Personal income (regular/non-AMT/non-pass-through) tax rate 8
Description: The tax rate applied to the portion of taxable income above tax bracket 7.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 1.0
2014: 1.0
2015: 1.0
2016: 1.0
2017: 1.0
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

-

Personal Income — Pass-Through
tc Name: _PT_rt1
TB Name: Pass-through income tax rate 1
Description: The lowest tax rate, applied to the portion of income from sole proprietorships, partnerships and S corporations below tax bracket 1.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.1
2014: 0.1
2015: 0.1
2016: 0.1
2017: 0.1
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_brk1
TB Name: Pass-through income tax bracket (upper threshold) 1
Description: Income from sole proprietorships, partnerships and S corporations below this threshold is taxed at tax rate 1.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [8925.0, 17850.0, 8925.0, 12750.0, 17850.0]
2014: [9075.0, 18150.0, 9075.0, 12950.0, 18150.0]
2015: [9225.0, 18450.0, 9225.0, 13150.0, 18450.0]
2016: [9275.0, 18550.0, 9275.0, 13250.0, 18550.0]
2017: [9325.0, 18650.0, 9325.0, 13350.0, 18650.0]
Valid Range: min = 0 and max = _PT_brk2
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_rt2
TB Name: Pass-through income tax rate 2
Description: The second lowest tax rate, applied to the portion of income from sole proprietorships, partnerships and S corporations below tax bracket 2 and above tax bracket 1.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.15
2014: 0.15
2015: 0.15
2016: 0.15
2017: 0.15
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_brk2
TB Name: Pass-through income tax bracket (upper threshold) 2
Description: Income from sole proprietorships, partnerships and S corporations below this threshold and above tax bracket 1 is taxed at tax rate 2.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [36250.0, 72500.0, 36250.0, 48600.0, 72500.0]
2014: [36900.0, 73800.0, 36900.0, 49400.0, 73800.0]
2015: [37450.0, 74900.0, 37450.0, 50200.0, 74900.0]
2016: [37650.0, 75300.0, 37650.0, 50400.0, 75300.0]
2017: [37950.0, 75900.0, 37950.0, 50800.0, 75900.0]
Valid Range: min = _PT_brk1 and max = _PT_brk3
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_rt3
TB Name: Pass-through income tax rate 3
Description: The third lowest tax rate, applied to the portion of income from sole proprietorships, partnerships and S corporations below tax bracket 3 and above tax bracket 2.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.25
2014: 0.25
2015: 0.25
2016: 0.25
2017: 0.25
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_brk3
TB Name: Pass-through income tax bracket (upper threshold) 3
Description: Income from sole proprietorships, partnerships and S corporations below this threshold and above tax bracket 2 is taxed at tax rate 3.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [87850.0, 146400.0, 73200.0, 125450.0, 146400.0]
2014: [89350.0, 148850.0, 74425.0, 127550.0, 148850.0]
2015: [90750.0, 151200.0, 75600.0, 129600.0, 151200.0]
2016: [91150.0, 151900.0, 75950.0, 130150.0, 151900.0]
2017: [91900.0, 153100.0, 76550.0, 131200.0, 153100.0]
Valid Range: min = _PT_brk2 and max = _PT_brk4
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_rt4
TB Name: Pass-through income tax rate 4
Description: The tax rate applied to the portion of income from sole proprietorships, partnerships and S corporations below tax bracket 4 and above tax bracket 3.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.28
2014: 0.28
2015: 0.28
2016: 0.28
2017: 0.28
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_brk4
TB Name: Pass-through income tax bracket (upper threshold) 4
Description: Income from sole proprietorships, partnerships and S corporations below this threshold and above tax bracket 3 is taxed at tax rate 4.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [183250.0, 223050.0, 111525.0, 203150.0, 223050.0]
2014: [186350.0, 226850.0, 113425.0, 206600.0, 226850.0]
2015: [189300.0, 230450.0, 115225.0, 209850.0, 230450.0]
2016: [190150.0, 231450.0, 115725.0, 210800.0, 231450.0]
2017: [191650.0, 233350.0, 116675.0, 212500.0, 233350.0]
Valid Range: min = _PT_brk3 and max = _PT_brk5
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_rt5
TB Name: Pass-through income tax rate 5
Description: The third highest tax rate, applied to the portion of income from sole proprietorships, partnerships and S corporations below tax bracket 5 and above tax bracket 4.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.33
2014: 0.33
2015: 0.33
2016: 0.33
2017: 0.33
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_brk5
TB Name: Pass-through income tax bracket (upper threshold) 5
Description: Income from sole proprietorships, partnerships and S corporations below this threshold and above tax bracket 4 is taxed at tax rate 5.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [398350.0, 398350.0, 199175.0, 398350.0, 398350.0]
2014: [405100.0, 405100.0, 202550.0, 405100.0, 405100.0]
2015: [411500.0, 411500.0, 205750.0, 411500.0, 411500.0]
2016: [413350.0, 413350.0, 206675.0, 413350.0, 413350.0]
2017: [416700.0, 416700.0, 208350.0, 416700.0, 416700.0]
Valid Range: min = _PT_brk4 and max = _PT_brk6
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_rt6
TB Name: Pass-through income tax rate 6
Description: The second higher tax rate, applied to the portion of income from sole proprietorships, partnerships and S corporations below tax bracket 6 and above tax bracket 5.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.35
2014: 0.35
2015: 0.35
2016: 0.35
2017: 0.35
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_brk6
TB Name: Pass-through income tax bracket (upper threshold) 6
Description: Income from sole proprietorships, partnerships and S corporations below this threshold and above tax bracket 5 is taxed at tax rate 6.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [400000.0, 450000.0, 225000.0, 425000.0, 450000.0]
2014: [406750.0, 457600.0, 228800.0, 432200.0, 457600.0]
2015: [413200.0, 464850.0, 232425.0, 439000.0, 464850.0]
2016: [415050.0, 466950.0, 233475.0, 441000.0, 466950.0]
2017: [418400.0, 470700.0, 235350.0, 444550.0, 470700.0]
Valid Range: min = _PT_brk5 and max = _PT_brk7
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_rt7
TB Name: Pass-through income tax rate 7
Description: The highest tax rate, applied to the portion of income from sole proprietorships, partnerships and S corporations below tax bracket 7 and above tax bracket 6.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.396
2014: 0.396
2015: 0.396
2016: 0.396
2017: 0.396
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_brk7
TB Name: Extra pass-through income tax bracket
Description: Income from sole proprietorships, partnerships and S corporations below this threshold and above tax bracket 6 is taxed at tax rate 7. Default value is essentially infinity.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [9e+99, 9e+99, 9e+99, 9e+99, 9e+99]
2014: [9e+99, 9e+99, 9e+99, 9e+99, 9e+99]
2015: [9e+99, 9e+99, 9e+99, 9e+99, 9e+99]
2016: [9e+99, 9e+99, 9e+99, 9e+99, 9e+99]
2017: [9e+99, 9e+99, 9e+99, 9e+99, 9e+99]
Valid Range: min = _PT_brk6 and max = 9e+99
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_rt8
TB Name: Extra pass-through income tax rate
Description: The extra tax rate, applied to the portion of income from sole proprietorships, partnerships and S corporations above the tax bracket 7.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 1.0
2014: 1.0
2015: 1.0
2016: 1.0
2017: 1.0
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_EligibleRate_active
TB Name: Share of active business income eligible for PT rate schedule
Description: Eligibility rate of active business income for separate pass-through rates.
Notes: Active business income defined as e00900 + e26270
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 1.0
2014: 1.0
2015: 1.0
2016: 1.0
2017: 1.0
Valid Range: min = 0.0 and max = 1.0
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_EligibleRate_passive
TB Name: Share of passive business income eligible for PT rate schedule
Description: Eligibility rate of passive business income for separate pass-through rates.
Notes: Passive business income defined as e02000 - e26270
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.0
2014: 0.0
2015: 0.0
2016: 0.0
2017: 0.0
Valid Range: min = 0.0 and max = 1.0
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_wages_active_income
TB Name: Wages included in (positive) active business income eligible for PT rates
Description: Whether active business income eligibility base for PT schedule for includes wages.
Notes: Only applies if active business income is positive
Inflation Indexed: False     Integer Value: True     Boolean Value: True
Known Values:
2013: False
2014: False
2015: False
2016: False
2017: False
Valid Range: min = False and max = True
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_top_stacking
TB Name: PT taxable income stacked on top of regular taxable income
Description: Whether taxable income eligible for PT rate schedule is stacked on top of regular taxable income.
Inflation Indexed: False     Integer Value: True     Boolean Value: True
Known Values:
2013: True
2014: True
2015: True
2016: True
2017: True
Valid Range: min = False and max = True
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_exclusion_rt
TB Name: Pass-through income exclusion rate
Description: Fraction of qualified business income excluded from taxable income.
Notes: Applies to e00900 + e26270
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.0
2014: 0.0
2015: 0.0
2016: 0.0
2017: 0.0
Valid Range: min = 0.0 and max = 1.0
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_exclusion_wage_limit
TB Name: Limit on pass-through income exclusion
Description: If taxpayer has partnership/ S corporation income, the amount of business income excluded from taxable income may not exceed this fraction of wages.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 9e+99
2014: 9e+99
2015: 9e+99
2016: 9e+99
2017: 9e+99
Valid Range: min = 0.0 and max = 9e+99
Out-of-Range Action: stop

+

Personal Income — Pass-Through
tc Name: _PT_rt1
TB Name: Pass-through income tax rate 1
Description: The lowest tax rate, applied to the portion of income from sole proprietorships, partnerships and S corporations below tax bracket 1.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.1
2014: 0.1
2015: 0.1
2016: 0.1
2017: 0.1
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_brk1
TB Name: Pass-through income tax bracket (upper threshold) 1
Description: Income from sole proprietorships, partnerships and S corporations below this threshold is taxed at tax rate 1.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [8925.0, 17850.0, 8925.0, 12750.0, 17850.0]
2014: [9075.0, 18150.0, 9075.0, 12950.0, 18150.0]
2015: [9225.0, 18450.0, 9225.0, 13150.0, 18450.0]
2016: [9275.0, 18550.0, 9275.0, 13250.0, 18550.0]
2017: [9325.0, 18650.0, 9325.0, 13350.0, 18650.0]
Valid Range: min = 0 and max = _PT_brk2
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_rt2
TB Name: Pass-through income tax rate 2
Description: The second lowest tax rate, applied to the portion of income from sole proprietorships, partnerships and S corporations below tax bracket 2 and above tax bracket 1.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.15
2014: 0.15
2015: 0.15
2016: 0.15
2017: 0.15
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_brk2
TB Name: Pass-through income tax bracket (upper threshold) 2
Description: Income from sole proprietorships, partnerships and S corporations below this threshold and above tax bracket 1 is taxed at tax rate 2.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [36250.0, 72500.0, 36250.0, 48600.0, 72500.0]
2014: [36900.0, 73800.0, 36900.0, 49400.0, 73800.0]
2015: [37450.0, 74900.0, 37450.0, 50200.0, 74900.0]
2016: [37650.0, 75300.0, 37650.0, 50400.0, 75300.0]
2017: [37950.0, 75900.0, 37950.0, 50800.0, 75900.0]
Valid Range: min = _PT_brk1 and max = _PT_brk3
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_rt3
TB Name: Pass-through income tax rate 3
Description: The third lowest tax rate, applied to the portion of income from sole proprietorships, partnerships and S corporations below tax bracket 3 and above tax bracket 2.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.25
2014: 0.25
2015: 0.25
2016: 0.25
2017: 0.25
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_brk3
TB Name: Pass-through income tax bracket (upper threshold) 3
Description: Income from sole proprietorships, partnerships and S corporations below this threshold and above tax bracket 2 is taxed at tax rate 3.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [87850.0, 146400.0, 73200.0, 125450.0, 146400.0]
2014: [89350.0, 148850.0, 74425.0, 127550.0, 148850.0]
2015: [90750.0, 151200.0, 75600.0, 129600.0, 151200.0]
2016: [91150.0, 151900.0, 75950.0, 130150.0, 151900.0]
2017: [91900.0, 153100.0, 76550.0, 131200.0, 153100.0]
Valid Range: min = _PT_brk2 and max = _PT_brk4
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_rt4
TB Name: Pass-through income tax rate 4
Description: The tax rate applied to the portion of income from sole proprietorships, partnerships and S corporations below tax bracket 4 and above tax bracket 3.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.28
2014: 0.28
2015: 0.28
2016: 0.28
2017: 0.28
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_brk4
TB Name: Pass-through income tax bracket (upper threshold) 4
Description: Income from sole proprietorships, partnerships and S corporations below this threshold and above tax bracket 3 is taxed at tax rate 4.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [183250.0, 223050.0, 111525.0, 203150.0, 223050.0]
2014: [186350.0, 226850.0, 113425.0, 206600.0, 226850.0]
2015: [189300.0, 230450.0, 115225.0, 209850.0, 230450.0]
2016: [190150.0, 231450.0, 115725.0, 210800.0, 231450.0]
2017: [191650.0, 233350.0, 116675.0, 212500.0, 233350.0]
Valid Range: min = _PT_brk3 and max = _PT_brk5
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_rt5
TB Name: Pass-through income tax rate 5
Description: The third highest tax rate, applied to the portion of income from sole proprietorships, partnerships and S corporations below tax bracket 5 and above tax bracket 4.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.33
2014: 0.33
2015: 0.33
2016: 0.33
2017: 0.33
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_brk5
TB Name: Pass-through income tax bracket (upper threshold) 5
Description: Income from sole proprietorships, partnerships and S corporations below this threshold and above tax bracket 4 is taxed at tax rate 5.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [398350.0, 398350.0, 199175.0, 398350.0, 398350.0]
2014: [405100.0, 405100.0, 202550.0, 405100.0, 405100.0]
2015: [411500.0, 411500.0, 205750.0, 411500.0, 411500.0]
2016: [413350.0, 413350.0, 206675.0, 413350.0, 413350.0]
2017: [416700.0, 416700.0, 208350.0, 416700.0, 416700.0]
Valid Range: min = _PT_brk4 and max = _PT_brk6
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_rt6
TB Name: Pass-through income tax rate 6
Description: The second higher tax rate, applied to the portion of income from sole proprietorships, partnerships and S corporations below tax bracket 6 and above tax bracket 5.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.35
2014: 0.35
2015: 0.35
2016: 0.35
2017: 0.35
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_brk6
TB Name: Pass-through income tax bracket (upper threshold) 6
Description: Income from sole proprietorships, partnerships and S corporations below this threshold and above tax bracket 5 is taxed at tax rate 6.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [400000.0, 450000.0, 225000.0, 425000.0, 450000.0]
2014: [406750.0, 457600.0, 228800.0, 432200.0, 457600.0]
2015: [413200.0, 464850.0, 232425.0, 439000.0, 464850.0]
2016: [415050.0, 466950.0, 233475.0, 441000.0, 466950.0]
2017: [418400.0, 470700.0, 235350.0, 444550.0, 470700.0]
Valid Range: min = _PT_brk5 and max = _PT_brk7
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_rt7
TB Name: Pass-through income tax rate 7
Description: The highest tax rate, applied to the portion of income from sole proprietorships, partnerships and S corporations below tax bracket 7 and above tax bracket 6.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.396
2014: 0.396
2015: 0.396
2016: 0.396
2017: 0.396
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_brk7
TB Name: Extra pass-through income tax bracket
Description: Income from sole proprietorships, partnerships and S corporations below this threshold and above tax bracket 6 is taxed at tax rate 7. Default value is essentially infinity.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [9e+99, 9e+99, 9e+99, 9e+99, 9e+99]
2014: [9e+99, 9e+99, 9e+99, 9e+99, 9e+99]
2015: [9e+99, 9e+99, 9e+99, 9e+99, 9e+99]
2016: [9e+99, 9e+99, 9e+99, 9e+99, 9e+99]
2017: [9e+99, 9e+99, 9e+99, 9e+99, 9e+99]
Valid Range: min = _PT_brk6 and max = 9e+99
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_rt8
TB Name: Extra pass-through income tax rate
Description: The extra tax rate, applied to the portion of income from sole proprietorships, partnerships and S corporations above the tax bracket 7.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 1.0
2014: 1.0
2015: 1.0
2016: 1.0
2017: 1.0
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_EligibleRate_active
TB Name: Share of active business income eligible for PT rate schedule
Description: Eligibility rate of active business income for separate pass-through rates.
Notes: Active business income defined as e00900 + e26270
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 1.0
2014: 1.0
2015: 1.0
2016: 1.0
2017: 1.0
Valid Range: min = 0.0 and max = 1.0
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_EligibleRate_passive
TB Name: Share of passive business income eligible for PT rate schedule
Description: Eligibility rate of passive business income for separate pass-through rates.
Notes: Passive business income defined as e02000 - e26270
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.0
2014: 0.0
2015: 0.0
2016: 0.0
2017: 0.0
Valid Range: min = 0.0 and max = 1.0
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_wages_active_income
TB Name: Wages included in (positive) active business income eligible for PT rates
Description: Whether active business income eligibility base for PT schedule for includes wages.
Notes: Only applies if active business income is positive
Inflation Indexed: False     Integer Value: True     Boolean Value: True
Known Values:
2013: False
2014: False
2015: False
2016: False
2017: False
Valid Range: min = False and max = True
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_top_stacking
TB Name: PT taxable income stacked on top of regular taxable income
Description: Whether taxable income eligible for PT rate schedule is stacked on top of regular taxable income.
Inflation Indexed: False     Integer Value: True     Boolean Value: True
Known Values:
2013: True
2014: True
2015: True
2016: True
2017: True
Valid Range: min = False and max = True
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_excl_rt
TB Name: Pass-through income exclusion rate
Description: Fraction of qualified business income excluded from taxable income.
Notes: Applies to e00900 + e26270
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.0
2014: 0.0
2015: 0.0
2016: 0.0
2017: 0.0
Valid Range: min = 0.0 and max = 1.0
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_excl_wagelim_rt
TB Name: Wage limit rate on pass-through income exclusion
Description: If taxpayer has partnership/ S corporation income, the amount of business income excluded from taxable income may not exceed this fraction of wages.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 9e+99
2014: 9e+99
2015: 9e+99
2016: 9e+99
2017: 9e+99
Valid Range: min = 0.0 and max = 9e+99
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_excl_wagelim_thd
TB Name: Phase-in threshold of wage limit on pass-through income exclusion
Description: If taxpayer has partnership/ S corporation income, the amount of business income excluded from taxable income is limited by wages if taxable income exceeds this threshold.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [0.0, 0.0, 0.0, 0.0, 0.0]
2014: [0.0, 0.0, 0.0, 0.0, 0.0]
2015: [0.0, 0.0, 0.0, 0.0, 0.0]
2016: [0.0, 0.0, 0.0, 0.0, 0.0]
2017: [0.0, 0.0, 0.0, 0.0, 0.0]
Valid Range: min = 0.0 and max = 9e+99
Out-of-Range Action: stop

Personal Income — Pass-Through
tc Name: _PT_excl_wagelim_prt
TB Name: Phase-in rate of wage limit on pass-through income exclusion
Description: If taxpayer has partnership/ S corporation income, the wage limitation on the amount of business income excluded from taxable income is phased in at this rate.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [1.0, 1.0, 1.0, 1.0, 1.0]
2014: [1.0, 1.0, 1.0, 1.0, 1.0]
2015: [1.0, 1.0, 1.0, 1.0, 1.0]
2016: [1.0, 1.0, 1.0, 1.0, 1.0]
2017: [1.0, 1.0, 1.0, 1.0, 1.0]
Valid Range: min = 0.0 and max = 1.0
Out-of-Range Action: stop

Personal Income — Alternative Minimum Tax
tc Name: _AMT_em
TB Name: AMT exemption amount
Description: The amount of AMT taxable income exempted from AMT.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [51900.0, 80800.0, 40400.0, 51900.0, 80800.0]
2014: [52800.0, 82100.0, 41050.0, 52800.0, 82100.0]
2015: [53600.0, 83400.0, 41700.0, 53600.0, 83400.0]
2016: [53900.0, 83800.0, 41900.0, 53900.0, 83800.0]
2017: [54300.0, 84500.0, 42250.0, 54300.0, 84500.0]
Valid Range: min = 0 and max = 9e+99
Out-of-Range Action: stop

Personal Income — Alternative Minimum Tax
tc Name: _AMT_prt
TB Name: AMT exemption phaseout rate
Description: AMT exemption will decrease at this rate for each dollar of AMT taxable income exceeding AMT phaseout start.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.25
2014: 0.25
2015: 0.25
2016: 0.25
2017: 0.25
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Alternative Minimum Tax
tc Name: _AMT_em_ps
TB Name: AMT exemption phaseout start
Description: AMT exemption starts to decrease when AMT taxable income goes beyond this threshold.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
   for: [single, joint, separate, headhousehold, widow]
2013: [115400.0, 153900.0, 76950.0, 115400.0, 153900.0]
2014: [117300.0, 156500.0, 78250.0, 117300.0, 156500.0]
2015: [119200.0, 158900.0, 79450.0, 119200.0, 158900.0]
2016: [119700.0, 159700.0, 79850.0, 119700.0, 159700.0]
2017: [120700.0, 160900.0, 80450.0, 120700.0, 160900.0]
Valid Range: min = 0 and max = 9e+99
Out-of-Range Action: stop

Personal Income — Alternative Minimum Tax
tc Name: _AMT_rt1
TB Name: AMT rate 1
Description: The tax rate applied to the portion of AMT taxable income below the surtax threshold, AMT bracket 1.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.26
2014: 0.26
2015: 0.26
2016: 0.26
2017: 0.26
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

Personal Income — Alternative Minimum Tax
tc Name: _AMT_brk1
TB Name: AMT bracket 1 (upper threshold)
Description: AMT taxable income below this is subject to AMT rate 1 and above it is subject to AMT rate 1 + the additional AMT rate.
Inflation Indexed: True     Integer Value: False     Boolean Value: False
Known Values:
2013: 179500.0
2014: 182500.0
2015: 185400.0
2016: 186300.0
2017: 187800.0
Valid Range: min = 0 and max = 9e+99
Out-of-Range Action: stop

Personal Income — Alternative Minimum Tax
tc Name: _AMT_rt2
TB Name: Additional AMT rate for AMT taxable income above AMT bracket 1
Description: The additional tax rate applied to the portion of AMT income above the AMT bracket 1.
Notes: This is the additional tax rate (on top of AMT rate 1) for AMT income above AMT bracket 1.
Inflation Indexed: False     Integer Value: False     Boolean Value: False
Known Values:
2013: 0.02
2014: 0.02
2015: 0.02
2016: 0.02
2017: 0.02
Valid Range: min = 0 and max = 1
Out-of-Range Action: stop

diff --git a/taxcalc/current_law_policy.json b/taxcalc/current_law_policy.json index 42ca2834f..6e9d573fb 100644 --- a/taxcalc/current_law_policy.json +++ b/taxcalc/current_law_policy.json @@ -3189,7 +3189,7 @@ "out_of_range_action": "stop" }, - "_PT_exclusion_rt": { + "_PT_excl_rt": { "long_name": "Pass-through income exclusion rate", "description": "Fraction of qualified business income excluded from taxable income.", "section_1": "Personal Income", @@ -3211,8 +3211,8 @@ "out_of_range_action": "stop" }, - "_PT_exclusion_wage_limit": { - "long_name": "Limit on pass-through income exclusion", + "_PT_excl_wagelim_rt": { + "long_name": "Wage limit rate on pass-through income exclusion", "description": "If taxpayer has partnership/ S corporation income, the amount of business income excluded from taxable income may not exceed this fraction of wages.", "section_1": "Personal Income", "section_2": "Pass-Through", @@ -3233,6 +3233,58 @@ "out_of_range_action": "stop" }, + "_PT_excl_wagelim_thd": { + "long_name": "Phase-in threshold of wage limit on pass-through income exclusion", + "description": "If taxpayer has partnership/ S corporation income, the amount of business income excluded from taxable income is limited by wages if taxable income exceeds this threshold.", + "section_1": "Personal Income", + "section_2": "Pass-Through", + "irs_ref": "", + "notes": "", + "row_var": "FLPDYR", + "row_label": ["2013", + "2014", + "2015", + "2016", + "2017"], + "start_year": 2013, + "cpi_inflated": true, + "col_var": "MARS", + "col_label": ["single", "joint", "separate", "headhousehold", "widow"], + "boolean_value": false, + "integer_value": false, + "value": [[0.0, 0.0, 0.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 0.0, 0.0]], + "range": {"min": 0.0, "max": 9e99}, + "out_of_range_minmsg": "", + "out_of_range_maxmsg": "", + "out_of_range_action": "stop" + }, + + "_PT_excl_wagelim_prt": { + "long_name": "Phase-in rate of wage limit on pass-through income exclusion", + "description": "If taxpayer has partnership/ S corporation income, the wage limitation on the amount of business income excluded from taxable income is phased in at this rate.", + "section_1": "Personal Income", + "section_2": "Pass-Through", + "irs_ref": "", + "notes": "", + "row_var": "FLPDYR", + "row_label": ["2013"], + "start_year": 2013, + "cpi_inflated": false, + "col_var": "MARS", + "col_label": ["single", "joint", "separate", "headhousehold", "widow"], + "boolean_value": false, + "integer_value": false, + "value": [[1.0, 1.0, 1.0, 1.0, 1.0]], + "range": {"min": 0.0, "max": 1.0}, + "out_of_range_minmsg": "", + "out_of_range_maxmsg": "", + "out_of_range_action": "stop" + }, + "_AMT_em": { "long_name": "AMT exemption amount", "description": "The amount of AMT taxable income exempted from AMT.", diff --git a/taxcalc/functions.py b/taxcalc/functions.py index 62f91bf31..f4a6b9bec 100644 --- a/taxcalc/functions.py +++ b/taxcalc/functions.py @@ -709,17 +709,21 @@ def StdDed(DSI, earned, STD, age_head, age_spouse, STD_Aged, STD_Dep, @iterate_jit(nopython=True) -def TaxInc(c00100, standard, c04470, c04600, c04800, - PT_exclusion_rt, PT_exclusion_wage_limit, e00900, - e26270, e00200): +def TaxInc(c00100, standard, c04470, c04600, c04800, MARS, + PT_excl_rt, PT_excl_wagelim_rt, PT_excl_wagelim_thd, + PT_excl_wagelim_prt, e00900, e26270, e00200): """ TaxInc function: ... """ - pt_exclusion = max(0., PT_exclusion_rt * (e00900 + e26270)) - if e26270 > 0.: - pt_exclusion = min(pt_exclusion, e00200 * PT_exclusion_wage_limit) - c04800 = max(0., c00100 - max(c04470, standard) - c04600 - - pt_exclusion) + pt_excl_pre = max(0., PT_excl_rt * (e00900 + e26270)) + wagelim_pre = e00200 * PT_excl_wagelim_rt + taxinc_pre = max(0., c00100 - max(c04470, standard) - c04600) + # calculate business income exclusion + excess = max(taxinc_pre - PT_excl_wagelim_thd[MARS - 1], 0.) + wagelim_rt = min(excess * PT_excl_wagelim_prt[MARS - 1], 1.) + limit = wagelim_rt * max(pt_excl_pre - wagelim_pre, 0.) + pt_excl = pt_excl_pre - limit + c04800 = max(0., taxinc_pre - pt_excl) return c04800 diff --git a/taxcalc/reforms/TCJA_Reconciliation.json b/taxcalc/reforms/TCJA_Reconciliation.json index 2f995a140..0b0fed23b 100644 --- a/taxcalc/reforms/TCJA_Reconciliation.json +++ b/taxcalc/reforms/TCJA_Reconciliation.json @@ -102,12 +102,18 @@ "_PT_brk6": {"2018": [[500000, 600000, 300000, 500000, 500000]], "2026": [[504406, 567457, 283728, 535931, 567457]]}, - "_PT_exclusion_rt": + "_PT_excl_rt": {"2018": [0.2], "2026": [0.0]}, - "_PT_exclusion_wage_limit": + "_PT_excl_wagelim_rt": {"2018": [0.5], "2026": [9e+99]}, + "_PT_excl_wagelim_thd": + {"2018": [[157500, 315000, 157500, 157500, 315000]], + "2026": [[0, 0, 0, 0, 0]]}, + "_PT_excl_wagelim_prt": + {"2018": [[0.00002, 0.00001, 0.00002, 0.00002, 0.00001]], + "2026": [[0, 0, 0, 0, 0]]}, "_STD": {"2018": [[12000, 24000, 12000, 18000, 24000]], "2026": [[7655, 15311, 7655, 11272, 15311]]}, diff --git a/taxcalc/reforms/TCJA_Senate.json b/taxcalc/reforms/TCJA_Senate.json index 4cf768d62..fe007564a 100644 --- a/taxcalc/reforms/TCJA_Senate.json +++ b/taxcalc/reforms/TCJA_Senate.json @@ -13,7 +13,7 @@ // - Adopt Chained CPI for parameter indexing (9) // Reform_Parameter_Map: // - 1: _II_rt* -// - 2: _PT_rt* +// - 2: _PT_* // - 3: _STD, _STD_Dep, _STD_Aged // - 4: _II_em // - 5: _DependentCredit_*, _CTC_c, _CTC_ps, _ACTC_Income_thd @@ -75,9 +75,9 @@ {"2018": [[200000, 390000, 195000, 200000, 390000]]}, "_PT_brk6": {"2018": [[500000, 1000000, 500000, 500000, 1000000]]}, - "_PT_exclusion_rt": + "_PT_excl_rt": {"2018": [0.174]}, - "_PT_exclusion_wage_limit": + "_PT_excl_wagelim_rt": {"2018": [0.5]}, "_STD": {"2018": [[12000, 24000, 12000, 18000, 24000]]}, diff --git a/taxcalc/reforms/TCJA_Senate_111417.json b/taxcalc/reforms/TCJA_Senate_111417.json index 348b789eb..e69a90ffc 100644 --- a/taxcalc/reforms/TCJA_Senate_111417.json +++ b/taxcalc/reforms/TCJA_Senate_111417.json @@ -13,7 +13,7 @@ // - Changes to itemized deductions (8) // Reform_Parameter_Map: // - 1: _II_rt* -// - 2: _PT_rt* +// - 2: _PT_* // - 3: _STD (can safely ignore WARNINGs about 2026+ values) // - 4: _II_em // - 5: _DependentCredit_*, _CTC_c, _CTC_ps, _ACTC_Income_thd @@ -103,10 +103,10 @@ "_PT_brk6": {"2018": [[500000, 1000000, 500000, 500000, 1000000]], "2026": [[504406, 567457, 283728, 535931, 567457]]}, - "_PT_exclusion_rt": + "_PT_excl_rt": {"2018": [0.174], "2026": [0.0]}, - "_PT_exclusion_wage_limit": + "_PT_excl_wagelim_rt": {"2018": [0.5], "2026": [9e+99]}, "_STD": diff --git a/taxcalc/reforms/TCJA_Senate_120117.json b/taxcalc/reforms/TCJA_Senate_120117.json index f4e83d823..d4538d2c6 100644 --- a/taxcalc/reforms/TCJA_Senate_120117.json +++ b/taxcalc/reforms/TCJA_Senate_120117.json @@ -101,10 +101,10 @@ "_PT_brk6": {"2018": [[500000, 1000000, 500000, 500000, 1000000]], "2026": [[504406, 567457, 283728, 535931, 567457]]}, - "_PT_exclusion_rt": + "_PT_excl_rt": {"2018": [0.23], "2026": [0.0]}, - "_PT_exclusion_wage_limit": + "_PT_excl_wagelim_rt": {"2018": [0.5], "2026": [9e+99]}, "_STD": From 75d14398992f76b459a928d626b8f01ab7fb5e77 Mon Sep 17 00:00:00 2001 From: Cody Kallen Date: Wed, 10 Jan 2018 17:23:55 -0500 Subject: [PATCH 2/4] add business loss limitation --- taxcalc/current_law_policy.json | 30 ++++++++++++++++++++++++ taxcalc/functions.py | 8 +++---- taxcalc/reforms/TCJA_Reconciliation.json | 3 +++ 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/taxcalc/current_law_policy.json b/taxcalc/current_law_policy.json index 6e9d573fb..2e7f7d067 100644 --- a/taxcalc/current_law_policy.json +++ b/taxcalc/current_law_policy.json @@ -619,6 +619,36 @@ "out_of_range_action": "stop" }, + "_ALD_BusinessLosses_c": { + "long_name": "Maximum amount of business losses deductible", + "description": "Business losses in excess of this amount may not be deducted from AGI.", + "section_1": "Above The Line Deductions", + "section_2": "Misc. Exclusions", + "irs_ref": "", + "notes": "", + "row_var": "FLPDYR", + "row_label": ["2013", + "2014", + "2015", + "2016", + "2017"], + "start_year": 2013, + "cpi_inflated": true, + "col_var": "MARS", + "col_label": ["single", "joint", "separate", "headhousehold", "widow"], + "boolean_value": false, + "integer_value": false, + "value": [[9e99, 9e99, 9e99, 9e99, 9e99], + [9e99, 9e99, 9e99, 9e99, 9e99], + [9e99, 9e99, 9e99, 9e99, 9e99], + [9e99, 9e99, 9e99, 9e99, 9e99], + [9e99, 9e99, 9e99, 9e99, 9e99]], + "range": {"min": 0.0, "max": 9e99}, + "out_of_range_minmsg": "", + "out_of_range_maxmsg": "", + "out_of_range_action": "stop" + }, + "_II_em": { "long_name": "Personal and dependent exemption amount", "description": "Subtracted from AGI in the calculation of taxable income, per taxpayer and dependent.", diff --git a/taxcalc/functions.py b/taxcalc/functions.py index f4a6b9bec..f376c9663 100644 --- a/taxcalc/functions.py +++ b/taxcalc/functions.py @@ -221,7 +221,7 @@ def ALD_InvInc_ec_base(p22250, p23250, sep, def CapGains(p23250, p22250, sep, ALD_StudentLoan_hc, ALD_InvInc_ec_rt, invinc_ec_base, ALD_InvInc_ec_base_RyanBrady, e00200, e00300, e00600, e00650, e00700, e00800, - CG_nodiff, CG_ec, CG_reinvest_ec_rt, + CG_nodiff, CG_ec, CG_reinvest_ec_rt, ALD_BusinessLosses_c, MARS, e00900, e01100, e01200, e01400, e01700, e02000, e02100, e02300, e00400, e02400, c02900, e03210, e03230, e03240, c01000, c23650, ymod, ymod1, invinc_agi_ec): @@ -249,9 +249,9 @@ def CapGains(p23250, p22250, sep, ALD_StudentLoan_hc, p22250 + ALD_InvInc_ec_rt * p23250)) invinc_agi_ec = ALD_InvInc_ec_rt * (e00300 + e00650) + CG_ec_RyanBrady # compute ymod1 variable that is included in AGI - ymod1 = (e00200 + e00700 + e00800 + e00900 + e01400 + e01700 + - invinc - invinc_agi_ec + - e02000 + e02100 + e02300) + ymod1 = (e00200 + e00700 + e00800 + e01400 + e01700 + + invinc - invinc_agi_ec + e02100 + e02300 + + max(e00900 + e02000, -ALD_BusinessLosses_c[MARS - 1])) if CG_nodiff: # apply QDIV+CG exclusion if QDIV+LTCG receive no special tax treatment qdcg_pos = max(0., e00650 + c01000) diff --git a/taxcalc/reforms/TCJA_Reconciliation.json b/taxcalc/reforms/TCJA_Reconciliation.json index 0b0fed23b..1f29111ce 100644 --- a/taxcalc/reforms/TCJA_Reconciliation.json +++ b/taxcalc/reforms/TCJA_Reconciliation.json @@ -153,6 +153,9 @@ "_ALD_Alimony_hc": {"2019": [1], "2026": [0]}, + "_ALD_BusinessLosses_c": + {"2018": [[250000, 500000, 250000, 250000, 500000]], + "2026": [[9e99, 9e99, 9e99, 9e99, 9e99]]}, "_ID_prt": {"2018": [0], "2026": [0.03]}, From 9f4cd03312e94fb8e6b65c284f50bf49279bb979 Mon Sep 17 00:00:00 2001 From: Cody Kallen Date: Thu, 11 Jan 2018 08:01:50 -0500 Subject: [PATCH 3/4] modify effect on expanded income --- taxcalc/functions.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/taxcalc/functions.py b/taxcalc/functions.py index f376c9663..e612cb816 100644 --- a/taxcalc/functions.py +++ b/taxcalc/functions.py @@ -221,7 +221,8 @@ def ALD_InvInc_ec_base(p22250, p23250, sep, def CapGains(p23250, p22250, sep, ALD_StudentLoan_hc, ALD_InvInc_ec_rt, invinc_ec_base, ALD_InvInc_ec_base_RyanBrady, e00200, e00300, e00600, e00650, e00700, e00800, - CG_nodiff, CG_ec, CG_reinvest_ec_rt, ALD_BusinessLosses_c, MARS, + CG_nodiff, CG_ec, CG_reinvest_ec_rt, + ALD_BusinessLosses_c, MARS, c02900_in_ei, e00900, e01100, e01200, e01400, e01700, e02000, e02100, e02300, e00400, e02400, c02900, e03210, e03230, e03240, c01000, c23650, ymod, ymod1, invinc_agi_ec): @@ -252,6 +253,9 @@ def CapGains(p23250, p22250, sep, ALD_StudentLoan_hc, ymod1 = (e00200 + e00700 + e00800 + e01400 + e01700 + invinc - invinc_agi_ec + e02100 + e02300 + max(e00900 + e02000, -ALD_BusinessLosses_c[MARS - 1])) + # compute loss limitation to be added onto ymod1 + loss_limit = min(e00900 + e02000 + ALD_BusinessLosses_c[MARS - 1], 0.) + c02900_in_ei = c02900_in_ei + loss_limit if CG_nodiff: # apply QDIV+CG exclusion if QDIV+LTCG receive no special tax treatment qdcg_pos = max(0., e00650 + c01000) From 27f497397437ca12adb892a3fa702c7219b24f37 Mon Sep 17 00:00:00 2001 From: Cody Kallen Date: Thu, 11 Jan 2018 11:30:39 -0500 Subject: [PATCH 4/4] correct c02900_in_ei --- taxcalc/functions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/taxcalc/functions.py b/taxcalc/functions.py index e612cb816..0da98c948 100644 --- a/taxcalc/functions.py +++ b/taxcalc/functions.py @@ -267,7 +267,7 @@ def CapGains(p23250, p22250, sep, ALD_StudentLoan_hc, ymod2 = e00400 + (0.50 * e02400) - c02900 ymod3 = (1. - ALD_StudentLoan_hc) * e03210 + e03230 + e03240 ymod = ymod1 + ymod2 + ymod3 - return (c01000, c23650, ymod, ymod1, invinc_agi_ec) + return (c01000, c23650, ymod, ymod1, invinc_agi_ec, c02900_in_ei) @iterate_jit(nopython=True)