Remove the need to self-reference Form['lines'] in Form subclasses.
[ustaxlib.git] / src / fed2019 / Form1099B.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 { Form, Person, TaxReturn } from '../core';
7 import { InputLine } from '../core/Line';
8
9 export interface Form1099BRow {
10 description: string;
11 dateAcquired?: string;
12 dateSold?: string;
13 proceeds: number;
14 costBasis: number;
15 accruedMarketDiscount?: number;
16 washSaleLossDisallowed?: number;
17 fedIncomeTax?: number;
18
19 adjustments?: number; // Not reported on 1099-B, but entered as part of Form8994.
20 };
21
22 export interface Form1099BInput {
23 payer: string;
24 payee: Person;
25
26 shortTermBasisReported?: Form1099BRow[]; // Box A checked.
27 shortTermBasisUnreported?: Form1099BRow[]; // Box B checked.
28
29 longTermBasisReported?: Form1099BRow[]; // Box D checked.
30 longTermBasisUnreported?: Form1099BRow[]; // Box E checked.
31
32 // For unreported securities, create your own 1099-B.
33 shortTermUnreported?: Form1099BRow[]; // Box C checked.
34 longTermUnreported?: Form1099BRow[]; // Box F checked.
35 };
36
37 class Input<T extends keyof Form1099BInput> extends InputLine<Form1099BInput, T> {};
38
39 export default class Form1099B extends Form<Form1099BInput> {
40 readonly name = '1099-B';
41
42 readonly supportsMultipleCopies = true;
43
44 person() { return this.getInput('payee'); }
45
46 readonly lines = {
47 'payer': new Input('payer'),
48 'recipient': new Input('payee'),
49 'shortTermBasisReported': new Input('shortTermBasisReported'),
50 'shortTermBasisUnreported': new Input('shortTermBasisUnreported'),
51 'longTermBasisReported': new Input('longTermBasisReported'),
52 'longTermBasisUnreported': new Input('longTermBasisUnreported'),
53 'shortTermUnreported': new Input('shortTermUnreported'),
54 'longTermUnreported': new Input('longTermUnreported'),
55 };
56 };