Add support for Form 1098 and the mortgage interest deduction to Schedule A.
[ustaxlib.git] / src / fed2019 / 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 { TaxReturn as BaseTaxReturn } from '../core';
7
8 import Form1040, { FilingStatus } from './Form1040';
9
10 export const Constants = {
11 taxBrackets: {
12 // From https://www.irs.gov/pub/irs-drop/rp-18-57.pdf, Section 3.01 and
13 // https://www.irs.gov/pub/irs-pdf/p17.pdf, 2019 Tax Rate Schedules (p254).
14 // Format is: [ limit-of-taxable-income, marginal-rate, base-tax ]
15 // If Income is over Row[0], pay Row[2] + (Row[1] * (Income - PreviousRow[0]))
16 [FilingStatus.MarriedFilingJoint]: [
17 [ 19400, 0.10, 0 ],
18 [ 78950, 0.12, 1940 ],
19 [ 168400, 0.22, 9086 ],
20 [ 321450, 0.24, 28765 ],
21 [ 408200, 0.32, 65497 ],
22 [ 612350, 0.35, 93257 ],
23 [ Infinity, 0.37, 164709.50 ]
24 ],
25 [FilingStatus.Single]: [
26 [ 9700, 0.10, 0 ],
27 [ 39475, 0.12, 970 ],
28 [ 84200, 0.22, 4543 ],
29 [ 160725, 0.24, 14382.50 ],
30 [ 204100, 0.32, 32748.50 ],
31 [ 510300, 0.35, 46628.50 ],
32 [ Infinity, 0.37, 153798.50 ]
33 ],
34 [FilingStatus.MarriedFilingSeparate]: [
35 [ 9700, 0.10, 0 ],
36 [ 39475, 0.12, 970 ],
37 [ 84200, 0.22, 4543 ],
38 [ 160725, 0.24, 14382.50 ],
39 [ 204100, 0.32, 32748.50 ],
40 [ 306175, 0.35, 46628.50 ],
41 [ Infinity, 0.37, 82354.75 ]
42 ]
43 },
44
45 standardDeduction: {
46 [FilingStatus.MarriedFilingJoint]: 24400,
47 [FilingStatus.Single]: 12200,
48 [FilingStatus.MarriedFilingSeparate]: 12200,
49 },
50
51 niit: {
52 rate: 0.038,
53 limit: {
54 [FilingStatus.MarriedFilingJoint]: 250000,
55 [FilingStatus.MarriedFilingSeparate]: 125000,
56 [FilingStatus.Single]: 200000,
57 },
58 },
59
60 medicare: {
61 withholdingRate: 0.0145,
62 additionalWithholdingRate: 0.009,
63 additionalWithholdingLimit: {
64 [FilingStatus.Single]: 200000,
65 [FilingStatus.MarriedFilingJoint]: 250000,
66 [FilingStatus.MarriedFilingSeparate]: 125000,
67 },
68 },
69
70 capitalGains: {
71 rate0MaxIncome: {
72 [FilingStatus.MarriedFilingJoint]: 78750,
73 [FilingStatus.Single]: 39375,
74 [FilingStatus.MarriedFilingSeparate]: 39375,
75 },
76 rate15MaxIncome: {
77 [FilingStatus.MarriedFilingJoint]: 488850,
78 [FilingStatus.MarriedFilingSeparate]: 244425,
79 [FilingStatus.Single]: 434550,
80 },
81 },
82
83 capitalLossLimit: {
84 [FilingStatus.MarriedFilingJoint]: -3000,
85 [FilingStatus.MarriedFilingSeparate]: -1500,
86 [FilingStatus.Single]: -3000,
87 },
88
89 qualifiedBusinessIncomeDeductionThreshold: {
90 [FilingStatus.MarriedFilingJoint]: 321450, // RP-18-57, Section 3.27 indicates this should be 321400, but it does not match the 24% tax bracket nor Sched D Tax Worksheet line 19.
91 [FilingStatus.MarriedFilingSeparate]: 160725,
92 [FilingStatus.Single]: 160725,
93 },
94
95 foreignTaxCreditWithoutForm1116Limit: {
96 [FilingStatus.MarriedFilingJoint]: 600,
97 [FilingStatus.MarriedFilingSeparate]: 300,
98 [FilingStatus.Single]: 300,
99 },
100
101 saltLimit: {
102 [FilingStatus.MarriedFilingJoint]: 10000,
103 [FilingStatus.Single]: 10000,
104 [FilingStatus.MarriedFilingSeparate]: 5000,
105 },
106
107 medicalDeductionLimitationPercent: 0.075,
108
109 prevYearStandardDeduction: {
110 [FilingStatus.MarriedFilingJoint]: 24000,
111 [FilingStatus.Single]: 12000,
112 [FilingStatus.MarriedFilingSeparate]: 12000,
113 },
114
115 amt: {
116 exemption: {
117 [FilingStatus.MarriedFilingJoint]: 111700,
118 [FilingStatus.Single]: 71700,
119 [FilingStatus.MarriedFilingSeparate]: 55850,
120 },
121 phaseout: {
122 [FilingStatus.MarriedFilingJoint]: 1020600,
123 [FilingStatus.Single]: 510300,
124 [FilingStatus.MarriedFilingSeparate]: 510300,
125 },
126 limitForRate28Percent: {
127 [FilingStatus.MarriedFilingJoint]: 194800,
128 [FilingStatus.Single]: 194800,
129 [FilingStatus.MarriedFilingSeparate]: 97400,
130 },
131 },
132
133 mortgatgeInterestDeduction: {
134 limit: {
135 [FilingStatus.MarriedFilingJoint]: 750_000,
136 [FilingStatus.Single]: 750_000,
137 [FilingStatus.MarriedFilingSeparate]: 375_000,
138 },
139 },
140 };
141
142 export default class TaxReturn extends BaseTaxReturn {
143 readonly constants = Constants;
144
145 get year() { return 2019; }
146
147 get includeJointPersonForms() {
148 return this.getForm(Form1040).filingStatus == FilingStatus.MarriedFilingJoint;
149 }
150 };