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
6 import { TaxReturn as BaseTaxReturn } from '../core';
8 import Form1040, { FilingStatus } from './Form1040';
10 export const Constants = {
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]: [
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 ]
25 [FilingStatus.Single]: [
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 ]
34 [FilingStatus.MarriedFilingSeparate]: [
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 ]
46 [FilingStatus.MarriedFilingJoint]: 24400,
47 [FilingStatus.Single]: 12200,
48 [FilingStatus.MarriedFilingSeparate]: 12200,
54 [FilingStatus.MarriedFilingJoint]: 250000,
55 [FilingStatus.MarriedFilingSeparate]: 125000,
56 [FilingStatus.Single]: 200000,
61 withholdingRate: 0.0145,
62 additionalWithholdingRate: 0.009,
63 additionalWithholdingLimit: {
64 [FilingStatus.Single]: 200000,
65 [FilingStatus.MarriedFilingJoint]: 250000,
66 [FilingStatus.MarriedFilingSeparate]: 125000,
72 [FilingStatus.MarriedFilingJoint]: 78750,
73 [FilingStatus.Single]: 39375,
74 [FilingStatus.MarriedFilingSeparate]: 39375,
77 [FilingStatus.MarriedFilingJoint]: 488850,
78 [FilingStatus.MarriedFilingSeparate]: 244425,
79 [FilingStatus.Single]: 434550,
84 [FilingStatus.MarriedFilingJoint]: -3000,
85 [FilingStatus.MarriedFilingSeparate]: -1500,
86 [FilingStatus.Single]: -3000,
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,
95 foreignTaxCreditWithoutForm1116Limit: {
96 [FilingStatus.MarriedFilingJoint]: 600,
97 [FilingStatus.MarriedFilingSeparate]: 300,
98 [FilingStatus.Single]: 300,
102 [FilingStatus.MarriedFilingJoint]: 10000,
103 [FilingStatus.Single]: 10000,
104 [FilingStatus.MarriedFilingSeparate]: 5000,
107 medicalDeductionLimitationPercent: 0.075,
109 prevYearStandardDeduction: {
110 [FilingStatus.MarriedFilingJoint]: 24000,
111 [FilingStatus.Single]: 12000,
112 [FilingStatus.MarriedFilingSeparate]: 12000,
117 [FilingStatus.MarriedFilingJoint]: 111700,
118 [FilingStatus.Single]: 71700,
119 [FilingStatus.MarriedFilingSeparate]: 55850,
122 [FilingStatus.MarriedFilingJoint]: 1020600,
123 [FilingStatus.Single]: 510300,
124 [FilingStatus.MarriedFilingSeparate]: 510300,
126 limitForRate28Percent: {
127 [FilingStatus.MarriedFilingJoint]: 194800,
128 [FilingStatus.Single]: 194800,
129 [FilingStatus.MarriedFilingSeparate]: 97400,
133 mortgatgeInterestDeduction: {
135 [FilingStatus.MarriedFilingJoint]: 750_000,
136 [FilingStatus.Single]: 750_000,
137 [FilingStatus.MarriedFilingSeparate]: 375_000,
142 export default class TaxReturn extends BaseTaxReturn {
143 readonly constants = Constants;
145 get year() { return 2019; }
147 get includeJointPersonForms() {
148 return this.getForm(Form1040).filingStatus == FilingStatus.MarriedFilingJoint;