Add the fed2020 overlay.
[ustaxlib.git] / src / fed2020 / TaxReturn.ts
1 // Copyright 2020 Blue Static <https://www.bluestatic.org>
2 // This program is free software licensed under the GNU General Public License,
3 // version 3.0. The full text of the license can be found in LICENSE.txt.
4 // SPDX-License-Identifier: GPL-3.0-only
5
6 import { default as TaxReturn2019, Constants as Constants2019 } from '../fed2019/TaxReturn';
7
8 import { FilingStatus } from '.';
9
10 // The values are from RP-19-44: https://www.irs.gov/pub/irs-drop/rp-19-44.pdf.
11 //
12 // The double Object.assign is to work around
13 // https://github.com/microsoft/TypeScript/issues/38516. Using the spread
14 // operator directly into an object literal results in "error TS4029: Public
15 // property 'constants' of exported class has or is using name 'FilingStatus'
16 // from external module "ustaxlib/src/fed2019/TaxReturn" but cannot be named".
17 export const Constants = Object.assign(Object.assign({}, Constants2019, {
18 taxBrackets: {
19 [FilingStatus.MarriedFilingJoint]: [
20 [ 19750, 0.10, 0 ],
21 [ 80250, 0.12, 1975 ],
22 [ 171050, 0.22, 9235 ],
23 [ 326600, 0.24, 29211 ],
24 [ 414700, 0.32, 66543 ],
25 [ 622050, 0.35, 94735 ],
26 [ Infinity, 0.37, 167307.50 ]
27 ],
28 [FilingStatus.Single]: [
29 [ 9875, 0.10, 0 ],
30 [ 40125, 0.12, 987.50 ],
31 [ 85525, 0.22, 4617.50 ],
32 [ 163300, 0.24, 14605.50 ],
33 [ 207350, 0.32, 33271.50 ],
34 [ 518400, 0.35, 47367.50 ],
35 [ Infinity, 0.37, 156235 ]
36 ],
37 [FilingStatus.MarriedFilingSeparate]: [
38 [ 9875, 0.10, 0 ],
39 [ 40125, 0.12, 987.50 ],
40 [ 85525, 0.22, 4617.50 ],
41 [ 163300, 0.24, 14605.50 ],
42 [ 207350, 0.32, 33271.50 ],
43 [ 311025, 0.35, 47367.50 ],
44 [ Infinity, 0.37, 83653.75 ]
45 ],
46 },
47
48 standardDeduction: {
49 [FilingStatus.MarriedFilingJoint]: 24800,
50 [FilingStatus.Single]: 12400,
51 [FilingStatus.MarriedFilingSeparate]: 12400,
52 },
53
54 capitalGains: {
55 rate0MaxIncome: {
56 [FilingStatus.MarriedFilingJoint]: 80000,
57 [FilingStatus.Single]: 40000,
58 [FilingStatus.MarriedFilingSeparate]: 40000,
59 },
60 rate15MaxIncome: {
61 [FilingStatus.MarriedFilingJoint]: 496600,
62 [FilingStatus.MarriedFilingSeparate]: 441450,
63 [FilingStatus.Single]: 441450,
64 },
65 },
66
67 qualifiedBusinessIncomeDeductionThreshold: {
68 [FilingStatus.MarriedFilingJoint]: 326600,
69 [FilingStatus.MarriedFilingSeparate]: 163300,
70 [FilingStatus.Single]: 163300,
71 },
72
73 amt: {
74 exemption: {
75 [FilingStatus.MarriedFilingJoint]: 113400,
76 [FilingStatus.Single]: 72900,
77 [FilingStatus.MarriedFilingSeparate]: 56700,
78 },
79 phaseout: {
80 [FilingStatus.MarriedFilingJoint]: 1036800,
81 [FilingStatus.Single]: 518400,
82 [FilingStatus.MarriedFilingSeparate]: 518400,
83 },
84 limitForRate28Percent: {
85 [FilingStatus.MarriedFilingJoint]: 197900,
86 [FilingStatus.Single]: 197900,
87 [FilingStatus.MarriedFilingSeparate]: 98950,
88 },
89 },
90
91 prevYearStandardDeduction: Constants2019.standardDeduction,
92 }));
93
94 export default class TaxReturn extends TaxReturn2019 {
95 readonly constants = Constants;
96
97 get year() { return 2020; }
98 }