1 import TaxReturn from './TaxReturn';
3 export abstract class Line<T> {
5 private _description?: string;
7 constructor(id: string, description?: string) {
9 this._description = description;
16 get description(): string {
17 return this._description;
20 abstract value(tr: TaxReturn): T;
23 type ComputeFunc<T> = (tr: TaxReturn, l: ComputedLine<T>) => T;
25 export class ComputedLine<T> extends Line<T> {
26 private _compute: ComputeFunc<T>;
28 constructor(id: string, compute: ComputeFunc<T>, description?: string) {
29 super(id, description);
30 this._compute = compute;
33 value(tr: TaxReturn): T {
34 return this._compute(tr, this);
38 export class ReferenceLine<T> extends Line<T> {
39 private _form: string;
40 private _line: string;
42 constructor(id: string, form: string, line: string) {
43 super(id, `Reference F${form}.L${line}`);
48 value(tr: TaxReturn): T {
49 return tr.getForm(this._form).getLine(this._line).value(tr);
53 export class InputLine<T> extends Line<T> {
54 private _input: string;
56 constructor(id: string, input: string, description?: string) {
57 super(id, description);
61 value(tr: TaxReturn): T {
62 return tr.getInput<T>(this._input);