1 import Form from '../Form';
2 import Person from '../Person';
3 import TaxReturn from '../TaxReturn';
4 import { InputLine } from '../Line';
12 export interface SpecialProceeds {
13 collectibles?: boolean;
17 export interface IRSReporting {
18 grossProceeds?: boolean;
19 netProceeds?: boolean;
22 export interface Form1099BInput {
26 dateAcquired?: string;
30 accruedMarketDiscount?: number;
31 washSaleLossDisallowed?: number;
33 specialProceeds?: SpecialProceeds;
34 fedIncomeTax?: number;
35 nonCoveredSecurity?: boolean;
36 irsReporting?: IRSReporting;
37 disallowedLoss?: boolean;
38 profitOnClosedContracts?: number;
39 unrealizedProfitOnOpenContractsCurrentTY?: number;
40 unrealizedProfitOnOpenContractsNextTY?: number;
41 aggregateProfitOnContracts?: number;
42 basisReportedToIRS?: boolean;
46 class Input<T extends keyof Form1099BInput> extends InputLine<Form1099BInput, T> {};
48 export default class Form1099B extends Form<Form1099B['_lines'], Form1099BInput> {
49 readonly name = '1099-B';
51 readonly supportsMultipleCopies = true;
53 protected readonly _lines = {
54 'payer': new Input('payer'),
55 'recipient': new Input('payee'),
56 '1a': new Input('description'),
57 '1b': new Input('dateAcquired'),
58 '1c': new Input('dateSold'),
59 '1d': new Input('proceeds'),
60 '1e': new Input('costBasis'),
61 '1f': new Input('accruedMarketDiscount'),
62 '1g': new Input('washSaleLossDisallowed'),
63 '2': new Input('gainType'),
64 '3': new Input('specialProceeds'),
65 '4': new Input('fedIncomeTax'),
66 '5': new Input('nonCoveredSecurity'),
67 '6': new Input('irsReporting'),
68 '7': new Input('disallowedLoss'),
69 '8': new Input('profitOnClosedContracts'),
70 '9': new Input('unrealizedProfitOnOpenContractsCurrentTY'),
71 '10': new Input('unrealizedProfitOnOpenContractsNextTY'),
72 '11': new Input('aggregateProfitOnContracts'),
73 '12': new Input('basisReportedToIRS'),
74 '13': new Input('bartering')