@fin.cx/einvoice 8.3.1 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/einvoice.d.ts +14 -0
- package/dist_ts/einvoice.js +17 -1
- package/dist_ts/formats/cii/cii.encoder.js +5 -1
- package/dist_ts/formats/cii/facturx/facturx.decoder.js +5 -1
- package/dist_ts/formats/cii/facturx/facturx.encoder.js +7 -2
- package/dist_ts/formats/cii/zugferd/zugferd.decoder.js +5 -1
- package/dist_ts/formats/cii/zugferd/zugferd.encoder.js +7 -2
- package/dist_ts/formats/cii/zugferd/zugferd.v1.decoder.js +5 -1
- package/dist_ts/formats/semantic/semantic.adapter.js +10 -3
- package/dist_ts/formats/semantic/semantic.validator.js +17 -2
- package/dist_ts/formats/ubl/generic/ubl.encoder.js +12 -3
- package/dist_ts/formats/ubl/ubl.encoder.js +5 -1
- package/dist_ts/formats/ubl/xrechnung/xrechnung.decoder.js +5 -1
- package/dist_ts/formats/utils/document.totals.d.ts +1 -3
- package/dist_ts/formats/utils/document.totals.js +1 -2
- package/dist_ts/formats/utils/paid.amount.d.ts +44 -0
- package/dist_ts/formats/utils/paid.amount.js +124 -0
- package/dist_ts/formats/utils/preceding.invoice.d.ts +12 -2
- package/dist_ts/formats/utils/preceding.invoice.js +22 -3
- package/dist_ts/formats/validation/en16931.business-rules.validator.js +20 -18
- package/dist_ts/interfaces/common.d.ts +1 -0
- package/dist_ts/interfaces/en16931-metadata.d.ts +0 -1
- package/package.json +2 -2
- package/readme.md +36 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/einvoice.ts +18 -0
- package/ts/formats/cii/cii.encoder.ts +4 -0
- package/ts/formats/cii/facturx/facturx.decoder.ts +5 -0
- package/ts/formats/cii/facturx/facturx.encoder.ts +6 -1
- package/ts/formats/cii/zugferd/zugferd.decoder.ts +5 -0
- package/ts/formats/cii/zugferd/zugferd.encoder.ts +6 -1
- package/ts/formats/cii/zugferd/zugferd.v1.decoder.ts +10 -0
- package/ts/formats/semantic/semantic.adapter.ts +9 -2
- package/ts/formats/semantic/semantic.validator.ts +17 -1
- package/ts/formats/ubl/generic/ubl.encoder.ts +12 -2
- package/ts/formats/ubl/ubl.encoder.ts +4 -0
- package/ts/formats/ubl/xrechnung/xrechnung.decoder.ts +5 -0
- package/ts/formats/utils/document.totals.ts +1 -4
- package/ts/formats/utils/paid.amount.ts +160 -0
- package/ts/formats/utils/preceding.invoice.ts +23 -2
- package/ts/formats/validation/en16931.business-rules.validator.ts +27 -25
- package/ts/interfaces/common.ts +1 -0
- package/ts/interfaces/en16931-metadata.ts +0 -1
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { EInvoiceFormatError, EInvoiceParsingError } from '../../errors.js';
|
|
2
|
+
import { Decimal } from './decimal.js';
|
|
3
|
+
import { toPlainDecimalString } from './number.text.js';
|
|
4
|
+
/** Carries a payment problem out of the computation */
|
|
5
|
+
class PaymentProblemSignal extends Error {
|
|
6
|
+
problem;
|
|
7
|
+
constructor(problem) {
|
|
8
|
+
super(problem.message);
|
|
9
|
+
this.problem = problem;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const refuse = (field, message, ruleId = 'PAID-AMOUNT') => {
|
|
13
|
+
throw new PaymentProblemSignal({ ruleId, field, message });
|
|
14
|
+
};
|
|
15
|
+
/** An amount as the document states it, at its full precision; a value that is no finite number is refused */
|
|
16
|
+
const statedDecimal = (value, field) => {
|
|
17
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
18
|
+
return refuse(field, `${field} is no finite number: ${String(value)}`);
|
|
19
|
+
}
|
|
20
|
+
return new Decimal(toPlainDecimalString(value));
|
|
21
|
+
};
|
|
22
|
+
/** The number of decimals of a stated amount */
|
|
23
|
+
const decimalsOf = (value) => (toPlainDecimalString(value).split('.')[1] ?? '').length;
|
|
24
|
+
/** The document types that can be a final invoice (Endrechnung) and deduct advance payments */
|
|
25
|
+
const finalInvoiceTypes = ['invoice', 'corrected-invoice', 'self-billed-invoice'];
|
|
26
|
+
/**
|
|
27
|
+
* The paid amount and the amount due of a document, as an encoder writes them.
|
|
28
|
+
* - When the document lists `advancePayments`, its `paidAmount` equals their
|
|
29
|
+
* gross sum, the `net` plus the `vat` of every group of every payment, to
|
|
30
|
+
* the last decimal (the rule `@tsclass/tsclass` sets). A document that
|
|
31
|
+
* breaks it, or lists advance payments without a paid amount, is refused;
|
|
32
|
+
* neither value is recomputed from the other.
|
|
33
|
+
* - The paid amount (BT-113) has at most the currency's decimals, two at most
|
|
34
|
+
* (BR-DEC-16); one with more is refused, not rounded.
|
|
35
|
+
* - A paid amount of zero is nothing paid, as an absent one: BT-113 is not
|
|
36
|
+
* written and BT-115 is BT-112.
|
|
37
|
+
* @param accountingDoc The document
|
|
38
|
+
* @param totals Its totals (`computeDocumentTotals`)
|
|
39
|
+
*/
|
|
40
|
+
const computePaymentTotals = (accountingDoc, totals) => {
|
|
41
|
+
const advancePayments = accountingDoc.advancePayments ?? [];
|
|
42
|
+
if (advancePayments.length > 0 && !finalInvoiceTypes.includes(accountingDoc.accountingDocType)) {
|
|
43
|
+
refuse('advancePayments', `advancePayments: a ${accountingDoc.accountingDocType} deducts no advance payments; only an invoice, a corrected invoice or a self-billed invoice is a final invoice (§ 14 Abs. 5 Satz 2 UStG)`);
|
|
44
|
+
}
|
|
45
|
+
const statedPaid = accountingDoc.paidAmount;
|
|
46
|
+
if (advancePayments.length > 0) {
|
|
47
|
+
const grossSum = Decimal.sum(advancePayments.flatMap((payment, paymentIndex) => payment.vatGroups.flatMap((group, groupIndex) => [
|
|
48
|
+
statedDecimal(group.net, `advancePayments[${paymentIndex}].vatGroups[${groupIndex}].net`),
|
|
49
|
+
statedDecimal(group.vat, `advancePayments[${paymentIndex}].vatGroups[${groupIndex}].vat`),
|
|
50
|
+
])));
|
|
51
|
+
if (statedPaid === undefined || !statedDecimal(statedPaid, 'paidAmount').equals(grossSum)) {
|
|
52
|
+
refuse('paidAmount', `paidAmount (${statedPaid === undefined ? 'absent' : toPlainDecimalString(statedPaid)}) does not equal the gross sum of the advancePayments (${grossSum.toString()}), the net plus the vat of every group of every payment; neither value is recomputed from the other`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (statedPaid === undefined) {
|
|
56
|
+
return { duePayable: totals.grandTotal };
|
|
57
|
+
}
|
|
58
|
+
const paid = statedDecimal(statedPaid, 'paidAmount');
|
|
59
|
+
if (decimalsOf(statedPaid) > totals.minorUnits) {
|
|
60
|
+
refuse('paidAmount', `paidAmount: the paid amount (BT-113) has at most ${totals.minorUnits} decimals, it is ${toPlainDecimalString(statedPaid)}`, 'BR-DEC-16');
|
|
61
|
+
}
|
|
62
|
+
if (paid.isZero()) {
|
|
63
|
+
return { duePayable: totals.grandTotal };
|
|
64
|
+
}
|
|
65
|
+
return { paidAmount: paid, duePayable: totals.grandTotal.subtract(paid) };
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* The paid amount and the amount due as an encoder writes them (see
|
|
69
|
+
* `computePaymentTotals` above for the rules); a document that breaks one is
|
|
70
|
+
* refused with an `EInvoiceFormatError` naming the field.
|
|
71
|
+
* @param accountingDoc The document
|
|
72
|
+
* @param totals Its totals (`computeDocumentTotals`)
|
|
73
|
+
*/
|
|
74
|
+
export const getPaymentTotals = (accountingDoc, totals) => {
|
|
75
|
+
try {
|
|
76
|
+
return computePaymentTotals(accountingDoc, totals);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (error instanceof PaymentProblemSignal) {
|
|
80
|
+
throw new EInvoiceFormatError(`${error.problem.ruleId}: ${error.problem.message}`, {
|
|
81
|
+
unsupportedFeatures: [error.problem.field],
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* What keeps a document's paid amount from being written, for a validator to
|
|
89
|
+
* report instead of throwing; undefined when there is nothing
|
|
90
|
+
* @param accountingDoc The document
|
|
91
|
+
* @param totals Its totals (`computeDocumentTotals`)
|
|
92
|
+
*/
|
|
93
|
+
export const findPaymentProblem = (accountingDoc, totals) => {
|
|
94
|
+
try {
|
|
95
|
+
computePaymentTotals(accountingDoc, totals);
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
if (error instanceof PaymentProblemSignal) {
|
|
100
|
+
return error.problem;
|
|
101
|
+
}
|
|
102
|
+
throw error;
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* The paid amount (BT-113) a decoder reads: the number the document states,
|
|
107
|
+
* or undefined when it states none or zero (a stated zero is nothing paid, as
|
|
108
|
+
* an absent one). A paid amount that is no number is refused, since the amount
|
|
109
|
+
* due depends on it.
|
|
110
|
+
* @param text The text of the paid amount element, '' when absent
|
|
111
|
+
* @param format The format being read
|
|
112
|
+
*/
|
|
113
|
+
export const readPaidAmount = (text, format) => {
|
|
114
|
+
const trimmed = text.trim();
|
|
115
|
+
if (!trimmed) {
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
const value = Number(trimmed);
|
|
119
|
+
if (!/^[+-]?(\d+\.?\d*|\.\d+)$/.test(trimmed) || !Number.isFinite(value)) {
|
|
120
|
+
throw new EInvoiceParsingError(`The paid amount (BT-113) is no decimal number: ${trimmed}`, { format });
|
|
121
|
+
}
|
|
122
|
+
return value === 0 ? undefined : value;
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFpZC5hbW91bnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3JtYXRzL3V0aWxzL3BhaWQuYW1vdW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFrQnhELHVEQUF1RDtBQUN2RCxNQUFNLG9CQUFxQixTQUFRLEtBQUs7SUFDVjtJQUE1QixZQUE0QixPQUF3QjtRQUNsRCxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBREcsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7SUFFcEQsQ0FBQztDQUNGO0FBRUQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFhLEVBQUUsT0FBZSxFQUFFLE1BQU0sR0FBRyxhQUFhLEVBQVMsRUFBRTtJQUMvRSxNQUFNLElBQUksb0JBQW9CLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDN0QsQ0FBQyxDQUFDO0FBRUYsOEdBQThHO0FBQzlHLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBYyxFQUFFLEtBQWEsRUFBVyxFQUFFO0lBQy9ELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pELE9BQU8sTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLEtBQUsseUJBQXlCLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUNELE9BQU8sSUFBSSxPQUFPLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDLENBQUM7QUFFRixnREFB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
|
|
@@ -9,7 +9,13 @@ export type TPrecedingInvoiceReference = TCorrectedInvoiceReference;
|
|
|
9
9
|
* taken only from what the document states:
|
|
10
10
|
* - a corrected invoice: the invoice it corrects (`correctedInvoice`);
|
|
11
11
|
* - a corrected invoice or a credit note: every related document with the
|
|
12
|
-
* relation `'corrects'
|
|
12
|
+
* relation `'corrects'`;
|
|
13
|
+
* - a document that can be a final invoice (an invoice, a corrected invoice or
|
|
14
|
+
* a self-billed invoice): the advance invoice of every advance payment that
|
|
15
|
+
* states one (`advancePayments[].invoice`), after the references above. The
|
|
16
|
+
* amounts are the paid amount (BT-113); the deduction per rate that § 14
|
|
17
|
+
* Abs. 5 Satz 2 UStG asks of a final invoice has no element in EN 16931
|
|
18
|
+
* (BMF letter of 15 October 2024, Rn. 48).
|
|
13
19
|
* Other documents and other relations write none.
|
|
14
20
|
*/
|
|
15
21
|
export declare const getPrecedingInvoiceReferences: (accountingDoc: TAccountingDoc) => TPrecedingInvoiceReference[];
|
|
@@ -18,7 +24,11 @@ export declare const getPrecedingInvoiceReferences: (accountingDoc: TAccountingD
|
|
|
18
24
|
* inverse of {@link getPrecedingInvoiceReferences}: on a corrected invoice the
|
|
19
25
|
* first reference is the invoice it corrects and further ones are related
|
|
20
26
|
* documents it corrects; on a credit note every reference is a related
|
|
21
|
-
* document it corrects. Other documents keep no reference, as before.
|
|
27
|
+
* document it corrects. Other documents keep no reference, as before. The
|
|
28
|
+
* XML does not tell an advance invoice from a corrected one, so a corrected
|
|
29
|
+
* invoice's advance invoices read back as related documents it corrects, and
|
|
30
|
+
* an invoice's advance invoices are not read: `advancePayments` needs the net
|
|
31
|
+
* and the tax per rate of every payment, which the XML does not carry.
|
|
22
32
|
*/
|
|
23
33
|
export declare const getPrecedingInvoiceFields: (accountingDocType: TAccountingDocType, references: TPrecedingInvoiceReference[]) => {
|
|
24
34
|
correctedInvoice?: TCorrectedInvoiceReference;
|
|
@@ -3,7 +3,13 @@
|
|
|
3
3
|
* taken only from what the document states:
|
|
4
4
|
* - a corrected invoice: the invoice it corrects (`correctedInvoice`);
|
|
5
5
|
* - a corrected invoice or a credit note: every related document with the
|
|
6
|
-
* relation `'corrects'
|
|
6
|
+
* relation `'corrects'`;
|
|
7
|
+
* - a document that can be a final invoice (an invoice, a corrected invoice or
|
|
8
|
+
* a self-billed invoice): the advance invoice of every advance payment that
|
|
9
|
+
* states one (`advancePayments[].invoice`), after the references above. The
|
|
10
|
+
* amounts are the paid amount (BT-113); the deduction per rate that § 14
|
|
11
|
+
* Abs. 5 Satz 2 UStG asks of a final invoice has no element in EN 16931
|
|
12
|
+
* (BMF letter of 15 October 2024, Rn. 48).
|
|
7
13
|
* Other documents and other relations write none.
|
|
8
14
|
*/
|
|
9
15
|
export const getPrecedingInvoiceReferences = (accountingDoc) => {
|
|
@@ -21,6 +27,15 @@ export const getPrecedingInvoiceReferences = (accountingDoc) => {
|
|
|
21
27
|
}
|
|
22
28
|
}
|
|
23
29
|
}
|
|
30
|
+
if ('advancePayments' in accountingDoc) {
|
|
31
|
+
for (const advancePayment of accountingDoc.advancePayments ?? []) {
|
|
32
|
+
if (advancePayment.invoice) {
|
|
33
|
+
references.push(advancePayment.invoice.issueDate === undefined
|
|
34
|
+
? { documentId: advancePayment.invoice.documentId }
|
|
35
|
+
: { documentId: advancePayment.invoice.documentId, issueDate: advancePayment.invoice.issueDate });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
24
39
|
return references;
|
|
25
40
|
};
|
|
26
41
|
/**
|
|
@@ -28,7 +43,11 @@ export const getPrecedingInvoiceReferences = (accountingDoc) => {
|
|
|
28
43
|
* inverse of {@link getPrecedingInvoiceReferences}: on a corrected invoice the
|
|
29
44
|
* first reference is the invoice it corrects and further ones are related
|
|
30
45
|
* documents it corrects; on a credit note every reference is a related
|
|
31
|
-
* document it corrects. Other documents keep no reference, as before.
|
|
46
|
+
* document it corrects. Other documents keep no reference, as before. The
|
|
47
|
+
* XML does not tell an advance invoice from a corrected one, so a corrected
|
|
48
|
+
* invoice's advance invoices read back as related documents it corrects, and
|
|
49
|
+
* an invoice's advance invoices are not read: `advancePayments` needs the net
|
|
50
|
+
* and the tax per rate of every payment, which the XML does not carry.
|
|
32
51
|
*/
|
|
33
52
|
export const getPrecedingInvoiceFields = (accountingDocType, references) => {
|
|
34
53
|
const asRelated = (reference) => ({
|
|
@@ -49,4 +68,4 @@ export const getPrecedingInvoiceFields = (accountingDocType, references) => {
|
|
|
49
68
|
}
|
|
50
69
|
return {};
|
|
51
70
|
};
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlY2VkaW5nLmludm9pY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3JtYXRzL3V0aWxzL3ByZWNlZGluZy5pbnZvaWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxDQUMzQyxhQUE2QixFQUNDLEVBQUU7SUFDaEMsTUFBTSxVQUFVLEdBQWlDLEVBQUUsQ0FBQztJQUNwRCxJQUFJLGFBQWEsQ0FBQyxpQkFBaUIsS0FBSyxtQkFBbUIsSUFBSSxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5RixVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFDRCxJQUNFLGFBQWEsQ0FBQyxpQkFBaUIsS0FBSyxtQkFBbUI7UUFDdkQsYUFBYSxDQUFDLGlCQUFpQixLQUFLLFlBQVksRUFDaEQsQ0FBQztRQUNELEtBQUssTUFBTSxlQUFlLElBQUksYUFBYSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ25FLElBQUksZUFBZSxDQUFDLFlBQVksS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDaEQsVUFBVSxDQUFDLElBQUksQ0FDYixlQUFlLENBQUMsU0FBUyxLQUFLLFNBQVM7b0JBQ3JDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxlQUFlLENBQUMsVUFBVSxFQUFFO29CQUM1QyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRSxDQUNyRixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxpQkFBaUIsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUN2QyxLQUFLLE1BQU0sY0FBYyxJQUFJLGFBQWEsQ0FBQyxlQUFlLElBQUksRUFBRSxFQUFFLENBQUM7WUFDakUsSUFBSSxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzNCLFVBQVUsQ0FBQyxJQUFJLENBQ2IsY0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEtBQUssU0FBUztvQkFDNUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO29CQUNuRCxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQ25HLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FDdkMsaUJBQXFDLEVBQ3JDLFVBQXdDLEVBQ2tELEVBQUU7SUFDNUYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxTQUFxQyxFQUFvQixFQUFFLENBQUMsQ0FBQztRQUM5RSxZQUFZLEVBQUUsVUFBVTtRQUN4QixHQUFHLFNBQVM7S0FDYixDQUFDLENBQUM7SUFDSCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsSUFBSSxpQkFBaUIsS0FBSyxtQkFBbUIsRUFBRSxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQzVELE9BQU8saUJBQWlCLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDbkMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUU7WUFDdEIsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7SUFDL0UsQ0FBQztJQUNELElBQUksaUJBQWlCLEtBQUssWUFBWSxFQUFFLENBQUM7UUFDdkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDLENBQUMifQ==
|
|
@@ -179,23 +179,25 @@ export class EN16931BusinessRulesValidator {
|
|
|
179
179
|
if (!isGrossEqual) {
|
|
180
180
|
this.addError('BR-CO-15', `Gross total (${useDecimal ? declaredGrossTotal.toFixed(2) : declaredGrossTotal.toFixed(2)}) does not match calculation (${useDecimal ? expectedGrossTotal.toFixed(2) : expectedGrossTotal.toFixed(2)})`, 'totalGross', useDecimal ? declaredGrossTotal.toNumber() : declaredGrossTotal, useDecimal ? expectedGrossTotal.toNumber() : expectedGrossTotal);
|
|
181
181
|
}
|
|
182
|
-
// BR-CO-16: Amount due for payment = Invoice total with VAT - Paid amount
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
const
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
182
|
+
// BR-CO-16: Amount due for payment = Invoice total with VAT - Paid amount. The envelope's
|
|
183
|
+
// paid amount (BT-113) is the one the encoders write; the amount due (BT-115) is compared when
|
|
184
|
+
// a declared one is at hand (`metadata.amountDue`), since the envelope derives it otherwise
|
|
185
|
+
const paidAmountValue = invoice.paidAmount ?? 0;
|
|
186
|
+
const declaredDueValue = invoice.metadata?.amountDue;
|
|
187
|
+
if (declaredDueValue !== undefined) {
|
|
188
|
+
const paidAmount = useDecimal ? new Decimal(paidAmountValue) : paidAmountValue;
|
|
189
|
+
const expectedDueAmount = useDecimal
|
|
190
|
+
? expectedGrossTotal.subtract(paidAmount)
|
|
191
|
+
: expectedGrossTotal - paidAmount;
|
|
192
|
+
const declaredDueAmount = useDecimal ? new Decimal(declaredDueValue) : declaredDueValue;
|
|
193
|
+
const isDueEqual = useDecimal
|
|
194
|
+
? this.decimalCalculator.areEqual(expectedDueAmount, declaredDueAmount)
|
|
195
|
+
: this.currencyCalculator
|
|
196
|
+
? this.currencyCalculator.areEqual(expectedDueAmount, declaredDueAmount)
|
|
197
|
+
: Math.abs(expectedDueAmount - declaredDueAmount) < 0.01;
|
|
198
|
+
if (!isDueEqual) {
|
|
199
|
+
this.addError('BR-CO-16', `Amount due (${useDecimal ? declaredDueAmount.toFixed(2) : declaredDueAmount.toFixed(2)}) does not match calculation (${useDecimal ? expectedDueAmount.toFixed(2) : expectedDueAmount.toFixed(2)})`, 'amountDue', useDecimal ? declaredDueAmount.toNumber() : declaredDueAmount, useDecimal ? expectedDueAmount.toNumber() : expectedDueAmount);
|
|
200
|
+
}
|
|
199
201
|
}
|
|
200
202
|
}
|
|
201
203
|
/**
|
|
@@ -450,4 +452,4 @@ export class EN16931BusinessRulesValidator {
|
|
|
450
452
|
});
|
|
451
453
|
}
|
|
452
454
|
}
|
|
453
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW4xNjkzMS5idXNpbmVzcy1ydWxlcy52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3JtYXRzL3ZhbGlkYXRpb24vZW4xNjkzMS5idXNpbmVzcy1ydWxlcy52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUc1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLHNCQUFzQixHQUN2QixNQUFNLDZCQUE2QixDQUFDO0FBR3JDOzs7R0FHRztBQUNILE1BQU0sT0FBTyw2QkFBNkI7SUFDaEMsT0FBTyxHQUF1QixFQUFFLENBQUM7SUFDakMsa0JBQWtCLENBQXNCO0lBQ3hDLGlCQUFpQixDQUE2QjtJQUV0RDs7T0FFRztJQUNJLFFBQVEsQ0FBQyxPQUFpQixFQUFFLFVBQTZCLEVBQUU7UUFDaEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFFbEIsMkRBQTJEO1FBQzNELElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuRSxpRkFBaUY7WUFDakYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVwQyx3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
|
|
455
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW4xNjkzMS5idXNpbmVzcy1ydWxlcy52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3JtYXRzL3ZhbGlkYXRpb24vZW4xNjkzMS5idXNpbmVzcy1ydWxlcy52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUc1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLHNCQUFzQixHQUN2QixNQUFNLDZCQUE2QixDQUFDO0FBR3JDOzs7R0FHRztBQUNILE1BQU0sT0FBTyw2QkFBNkI7SUFDaEMsT0FBTyxHQUF1QixFQUFFLENBQUM7SUFDakMsa0JBQWtCLENBQXNCO0lBQ3hDLGlCQUFpQixDQUE2QjtJQUV0RDs7T0FFRztJQUNJLFFBQVEsQ0FBQyxPQUFpQixFQUFFLFVBQTZCLEVBQUU7UUFDaEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFFbEIsMkRBQTJEO1FBQzNELElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuRSxpRkFBaUY7WUFDakYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVwQyx3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
|
|
@@ -78,6 +78,7 @@ export type { TCorrectedInvoice } from '@tsclass/tsclass/dist_ts/finance/index.j
|
|
|
78
78
|
export type { TCorrectedInvoiceReference } from '@tsclass/tsclass/dist_ts/finance/index.js';
|
|
79
79
|
export type { TInvoiceCorrection } from '@tsclass/tsclass/dist_ts/finance/index.js';
|
|
80
80
|
export type { TRelatedDocument } from '@tsclass/tsclass/dist_ts/finance/index.js';
|
|
81
|
+
export type { TAdvancePayment } from '@tsclass/tsclass/dist_ts/finance/index.js';
|
|
81
82
|
export type { TCreditNote } from '@tsclass/tsclass/dist_ts/finance/index.js';
|
|
82
83
|
export type { TDebitNote } from '@tsclass/tsclass/dist_ts/finance/index.js';
|
|
83
84
|
export type { TSelfBilledInvoice } from '@tsclass/tsclass/dist_ts/finance/index.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fin.cx/einvoice",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "9.0.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "A TypeScript module for creating, manipulating, and embedding XML data within PDF files specifically tailored for electronic invoice (einvoice) packages.",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
],
|
|
68
68
|
"scripts": {
|
|
69
69
|
"test": "pnpm run test:unit",
|
|
70
|
-
"test:unit": "tstest test/test.cii-xrechnung.node.ts --verbose --logfile --timeout 60 && tstest test/test.einvoice.ts --verbose --logfile --timeout 60 && tstest test/test.decimal.ts --verbose --logfile --timeout 60 && tstest test/test.decimal-currency-calculator.ts --verbose --logfile --timeout 60 && tstest test/test.currency-utils.ts --verbose --logfile --timeout 60 && tstest test/test.en16931-validators.ts --verbose --logfile --timeout 60 && tstest test/test.schematron-validator.ts --verbose --logfile --timeout 60 && tstest test/test.xrechnung-creditnote.node.ts --verbose --logfile --timeout 60 && tstest test/test.accountingdoc-types.node.ts --verbose --logfile --timeout 60 && tstest test/test.corrected-invoice.node.ts --verbose --logfile --timeout 60 && tstest test/test.xrechnung-3-due-date.node.ts --verbose --logfile --timeout 60 && tstest test/test.calendar-dates.node.ts --verbose --logfile --timeout 60 && tstest test/test.document-totals.node.ts --verbose --logfile --timeout 60 && tstest test/test.reverse-charge.node.ts --verbose --logfile --timeout 60 && tstest test/test.cii-schema-order.node.ts --verbose --logfile --timeout 60 && tstest test/test.tax-number.node.ts --verbose --logfile --timeout 60 && tstest test/test.country-codes.node.ts --verbose --logfile --timeout 60 && tstest test/test.en16931-unitcodes.node.ts --verbose --logfile --timeout 60 && tstest test/test.en16931-lineunit.node.ts --verbose --logfile --timeout 60",
|
|
70
|
+
"test:unit": "tstest test/test.cii-xrechnung.node.ts --verbose --logfile --timeout 60 && tstest test/test.einvoice.ts --verbose --logfile --timeout 60 && tstest test/test.decimal.ts --verbose --logfile --timeout 60 && tstest test/test.decimal-currency-calculator.ts --verbose --logfile --timeout 60 && tstest test/test.currency-utils.ts --verbose --logfile --timeout 60 && tstest test/test.en16931-validators.ts --verbose --logfile --timeout 60 && tstest test/test.schematron-validator.ts --verbose --logfile --timeout 60 && tstest test/test.xrechnung-creditnote.node.ts --verbose --logfile --timeout 60 && tstest test/test.accountingdoc-types.node.ts --verbose --logfile --timeout 60 && tstest test/test.corrected-invoice.node.ts --verbose --logfile --timeout 60 && tstest test/test.xrechnung-3-due-date.node.ts --verbose --logfile --timeout 60 && tstest test/test.calendar-dates.node.ts --verbose --logfile --timeout 60 && tstest test/test.document-totals.node.ts --verbose --logfile --timeout 60 && tstest test/test.reverse-charge.node.ts --verbose --logfile --timeout 60 && tstest test/test.cii-schema-order.node.ts --verbose --logfile --timeout 60 && tstest test/test.tax-number.node.ts --verbose --logfile --timeout 60 && tstest test/test.country-codes.node.ts --verbose --logfile --timeout 60 && tstest test/test.paid-amount.node.ts --verbose --logfile --timeout 60 && tstest test/test.en16931-unitcodes.node.ts --verbose --logfile --timeout 60 && tstest test/test.en16931-lineunit.node.ts --verbose --logfile --timeout 60",
|
|
71
71
|
"test:format": "tstest test/test.format-detection.ts --verbose --logfile --timeout 60",
|
|
72
72
|
"test:corpus": "tstest test/suite/einvoice_corpus-validation/ --verbose --logfile --timeout 60",
|
|
73
73
|
"test:performance": "NODE_OPTIONS=--expose-gc tstest test/suite/einvoice_performance/ --verbose --logfile --timeout 60",
|
package/readme.md
CHANGED
|
@@ -375,6 +375,42 @@ The envelope states reverse charge for the whole document; an item has no VAT
|
|
|
375
375
|
category of its own. A document mixing reverse charge lines with standard rated
|
|
376
376
|
ones cannot be expressed until `@tsclass/tsclass` gives items a category.
|
|
377
377
|
|
|
378
|
+
## Paid amount and advance payments
|
|
379
|
+
|
|
380
|
+
`paidAmount` is the gross sum received before the document was issued, the
|
|
381
|
+
paid amount (BT-113). Every format writes it (`cbc:PrepaidAmount`,
|
|
382
|
+
`ram:TotalPrepaidAmount`) and the amount due for payment (BT-115) as the gross
|
|
383
|
+
total less it (BR-CO-16), zero when paid in full and negative when more was
|
|
384
|
+
paid; a paid amount of zero is nothing paid and is not written. The decoders
|
|
385
|
+
read it back. A paid amount with more decimals than the currency has (two at
|
|
386
|
+
most, BR-DEC-16) is refused, not rounded.
|
|
387
|
+
|
|
388
|
+
A final invoice (an invoice, a corrected invoice or a self-billed invoice) may
|
|
389
|
+
list the `advancePayments` it deducts (`@tsclass/tsclass` 9.9.0 on).
|
|
390
|
+
`paidAmount` then equals their gross sum, the `net` plus the `vat` of every
|
|
391
|
+
group of every payment, to the last decimal; a document that breaks this, or
|
|
392
|
+
lists advance payments without a paid amount, is refused, and neither value is
|
|
393
|
+
recomputed from the other. The advance invoice of each payment that states one
|
|
394
|
+
is written as a preceding invoice reference (BG-3), after the invoice a
|
|
395
|
+
corrected invoice corrects. Another document type with advance payments is
|
|
396
|
+
refused.
|
|
397
|
+
|
|
398
|
+
The deduction a final invoice owes under § 14 Abs. 5 Satz 2 UStG, the
|
|
399
|
+
considerations received before the supply and the tax on them per rate
|
|
400
|
+
(Abschnitt 14.8 Abs. 7 UStAE), has no element in EN 16931: "Derzeit sind die
|
|
401
|
+
Anforderungen an eine Endrechnung noch nicht im strukturierten Teil einer
|
|
402
|
+
E-Rechnung darstellbar" (BMF letter of 15 October 2024, Rn. 48). The encoders
|
|
403
|
+
write the paid amount and the references and add no text of their own. The
|
|
404
|
+
issuer either adds the deduction as an annex (Abschnitt 14.8 Abs. 8 Nr. 2
|
|
405
|
+
UStAE), which Rn. 48 accepts as an unstructured file in an e-invoice issued
|
|
406
|
+
until 31 December 2027 and which `@design.estate/dees-document` 3.4 prints, or
|
|
407
|
+
issues an invoice over the remaining consideration only (Restrechnung,
|
|
408
|
+
Abschnitt 14.8 Abs. 11 UStAE), which Rn. 48 recommends. Reading an e-invoice
|
|
409
|
+
back yields its paid amount but no `advancePayments`: the XML does not carry the
|
|
410
|
+
net and the tax of every payment. A corrected invoice's advance invoices read
|
|
411
|
+
back as related documents it corrects, since BG-3 does not tell them apart,
|
|
412
|
+
and an invoice's are not read.
|
|
413
|
+
|
|
378
414
|
## Calendar dates
|
|
379
415
|
|
|
380
416
|
A calendar date of the invoice (issue date, due date, delivery date, invoicing
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@fin.cx/einvoice',
|
|
6
|
-
version: '
|
|
6
|
+
version: '9.0.0',
|
|
7
7
|
description: 'A TypeScript module for creating, manipulating, and embedding XML data within PDF files specifically tailored for electronic invoice (einvoice) packages.'
|
|
8
8
|
}
|
package/ts/einvoice.ts
CHANGED
|
@@ -168,6 +168,22 @@ export class EInvoice implements TAccountingDocEnvelope<TAccountingDocType, {}>
|
|
|
168
168
|
* written to the XML; an issuer states them as a note in `notes`.
|
|
169
169
|
*/
|
|
170
170
|
public corrections?: finance.TCorrectedInvoice['corrections'];
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* The gross sum received before the document was issued, the paid amount
|
|
174
|
+
* (BT-113); the amount due (BT-115) is the gross total less it. Absent or
|
|
175
|
+
* zero: nothing was paid.
|
|
176
|
+
*/
|
|
177
|
+
public paidAmount?: number;
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* On a final invoice (an invoice, a corrected invoice or a self-billed
|
|
181
|
+
* invoice): the advance payments it deducts; `paidAmount` equals their gross
|
|
182
|
+
* sum. Their advance invoices are written as preceding invoice references
|
|
183
|
+
* (BG-3); the deduction per rate has no element in EN 16931, and a document
|
|
184
|
+
* read from XML has none.
|
|
185
|
+
*/
|
|
186
|
+
public advancePayments?: finance.TInvoice['advancePayments'];
|
|
171
187
|
public printResult?: {
|
|
172
188
|
pdfBufferString: string;
|
|
173
189
|
totalNet: number;
|
|
@@ -465,6 +481,8 @@ export class EInvoice implements TAccountingDocEnvelope<TAccountingDocType, {}>
|
|
|
465
481
|
relatedDocuments: this.relatedDocuments,
|
|
466
482
|
correctedInvoice: this.correctedInvoice,
|
|
467
483
|
corrections: this.corrections,
|
|
484
|
+
paidAmount: this.paidAmount,
|
|
485
|
+
advancePayments: this.advancePayments,
|
|
468
486
|
printResult: this.printResult
|
|
469
487
|
};
|
|
470
488
|
|
|
@@ -4,6 +4,8 @@ import { EInvoiceFormatError } from '../../errors.js';
|
|
|
4
4
|
import { getPrecedingInvoiceReferences } from '../utils/preceding.invoice.js';
|
|
5
5
|
import { getWritableDate } from '../utils/date.value.js';
|
|
6
6
|
import { assertVatCategoryWritable } from '../utils/vat.category.js';
|
|
7
|
+
import { computeDocumentTotals } from '../utils/document.totals.js';
|
|
8
|
+
import { getPaymentTotals } from '../utils/paid.amount.js';
|
|
7
9
|
import { CII_CHILD_SEQUENCES, CII_NAMESPACES, CIIProfile } from './cii.types.js';
|
|
8
10
|
|
|
9
11
|
/**
|
|
@@ -28,6 +30,8 @@ export abstract class CIIBaseEncoder extends BaseEncoder {
|
|
|
28
30
|
public async encode(invoice: TAccountingDoc): Promise<string> {
|
|
29
31
|
// a reverse charge document that lacks what EN 16931 requires of one is refused (BR-AE-02, BR-AE-05)
|
|
30
32
|
assertVatCategoryWritable(invoice, 'cii');
|
|
33
|
+
// a paid amount the advance payments do not add up to, or with more decimals than the currency has, is refused
|
|
34
|
+
getPaymentTotals(invoice, computeDocumentTotals(invoice));
|
|
31
35
|
// MINIMUM has no preceding invoice reference (BG-3): a reference the document states cannot be written there
|
|
32
36
|
if (this.profile === CIIProfile.MINIMUM && getPrecedingInvoiceReferences(invoice).length > 0) {
|
|
33
37
|
throw new EInvoiceFormatError(
|
|
@@ -9,6 +9,7 @@ import { FACTURX_PROFILE_IDS } from './facturx.types.js';
|
|
|
9
9
|
import { business, finance, general } from '../../../plugins.js';
|
|
10
10
|
import { EN16931Validator } from '../../validation/en16931.validator.js';
|
|
11
11
|
import { getPrecedingInvoiceFields } from '../../utils/preceding.invoice.js';
|
|
12
|
+
import { readPaidAmount } from '../../utils/paid.amount.js';
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* Decoder for Factur-X invoice format
|
|
@@ -97,6 +98,8 @@ export class FacturXDecoder extends CIIBaseDecoder {
|
|
|
97
98
|
// Reverse charge: every line has the VAT category AE
|
|
98
99
|
const reverseCharge = this.isReverseChargeDocument();
|
|
99
100
|
|
|
101
|
+
const paidAmount = readPaidAmount(this.getText('//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount'), 'facturx');
|
|
102
|
+
|
|
100
103
|
// Create the common invoice data
|
|
101
104
|
const invoiceData = {
|
|
102
105
|
type: 'accounting-doc' as const,
|
|
@@ -125,6 +128,8 @@ export class FacturXDecoder extends CIIBaseDecoder {
|
|
|
125
128
|
...(deliveryDate === undefined ? {} : { deliveryDate }),
|
|
126
129
|
objectActions: [],
|
|
127
130
|
...getPrecedingInvoiceFields(accountingDocType, this.extractPrecedingInvoiceReferences()),
|
|
131
|
+
// the paid amount (BT-113); the amount due (BT-115) follows from it and the totals
|
|
132
|
+
...(paidAmount === undefined ? {} : { paidAmount }),
|
|
128
133
|
};
|
|
129
134
|
|
|
130
135
|
// Validate mandatory EN16931 fields unless validation is skipped
|
|
@@ -4,6 +4,7 @@ import { FACTURX_PROFILE_IDS } from './facturx.types.js';
|
|
|
4
4
|
import { DOMParser, XMLSerializer } from '../../../plugins.js';
|
|
5
5
|
import { getDocumentTypeCode } from '../../utils/document.typecode.js';
|
|
6
6
|
import { computeDocumentTotals } from '../../utils/document.totals.js';
|
|
7
|
+
import { getPaymentTotals } from '../../utils/paid.amount.js';
|
|
7
8
|
import { toPlainDecimalString } from '../../utils/number.text.js';
|
|
8
9
|
import { resolveCountryCode } from '../../utils/country.code.js';
|
|
9
10
|
import { getWritableDate, getWritableDueDate } from '../../utils/date.value.js';
|
|
@@ -394,7 +395,11 @@ export class FacturXEncoder extends CIIBaseEncoder {
|
|
|
394
395
|
appendAmount('ram:TaxBasisTotalAmount', totals.taxBasisTotal); // BT-109
|
|
395
396
|
appendAmount('ram:TaxTotalAmount', totals.taxTotal, true); // BT-110
|
|
396
397
|
appendAmount('ram:GrandTotalAmount', totals.grandTotal); // BT-112
|
|
397
|
-
|
|
398
|
+
const payment = getPaymentTotals(invoice, totals);
|
|
399
|
+
if (payment.paidAmount) {
|
|
400
|
+
appendAmount('ram:TotalPrepaidAmount', payment.paidAmount); // BT-113
|
|
401
|
+
}
|
|
402
|
+
appendAmount('ram:DuePayableAmount', payment.duePayable); // BT-115
|
|
398
403
|
|
|
399
404
|
settlementElement.appendChild(monetarySummationElement);
|
|
400
405
|
}
|
|
@@ -8,6 +8,7 @@ import type {
|
|
|
8
8
|
import { business, finance } from '../../../plugins.js';
|
|
9
9
|
import { EN16931Validator } from '../../validation/en16931.validator.js';
|
|
10
10
|
import { getPrecedingInvoiceFields } from '../../utils/preceding.invoice.js';
|
|
11
|
+
import { readPaidAmount } from '../../utils/paid.amount.js';
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* Decoder for ZUGFeRD invoice format
|
|
@@ -87,6 +88,8 @@ export class ZUGFeRDDecoder extends CIIBaseDecoder {
|
|
|
87
88
|
// Reverse charge: every line has the VAT category AE
|
|
88
89
|
const reverseCharge = this.isReverseChargeDocument();
|
|
89
90
|
|
|
91
|
+
const paidAmount = readPaidAmount(this.getText('//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TotalPrepaidAmount'), 'zugferd');
|
|
92
|
+
|
|
90
93
|
// Create the common invoice data
|
|
91
94
|
const invoiceData = {
|
|
92
95
|
type: 'accounting-doc' as const,
|
|
@@ -115,6 +118,8 @@ export class ZUGFeRDDecoder extends CIIBaseDecoder {
|
|
|
115
118
|
...(deliveryDate === undefined ? {} : { deliveryDate }),
|
|
116
119
|
objectActions: [],
|
|
117
120
|
...getPrecedingInvoiceFields(accountingDocType, this.extractPrecedingInvoiceReferences()),
|
|
121
|
+
// the paid amount (BT-113); the amount due (BT-115) follows from it and the totals
|
|
122
|
+
...(paidAmount === undefined ? {} : { paidAmount }),
|
|
118
123
|
};
|
|
119
124
|
|
|
120
125
|
// Validate mandatory EN16931 fields unless validation is skipped
|