@design.estate/dees-document 3.2.0 → 3.4.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.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-document',
6
- version: '3.2.0',
6
+ version: '3.4.0',
7
7
  description: 'A sophisticated framework for dynamically generating and rendering business documents like invoices with modern web technologies, featuring PDF creation, templating, and automation.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSw4QkFBOEI7SUFDcEMsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLHVMQUF1TDtDQUNyTSxDQUFBIn0=
@@ -19,6 +19,9 @@ export declare class PdfService {
19
19
  stop(): Promise<void>;
20
20
  /**
21
21
  * creates an letter
22
+ *
23
+ * An accounting document whose advance payments do not add up to its paid
24
+ * amount is refused before anything is rendered: this rejects.
22
25
  */
23
26
  createPdfFromLetterObject(optionsArg: {
24
27
  letterData: plugins.tsclass.business.TLetter;
@@ -31,8 +31,12 @@ export class PdfService {
31
31
  }
32
32
  /**
33
33
  * creates an letter
34
+ *
35
+ * An accounting document whose advance payments do not add up to its paid
36
+ * amount is refused before anything is rendered: this rejects.
34
37
  */
35
38
  async createPdfFromLetterObject(optionsArg) {
39
+ plugins.shared.assertPaidAmountMatchesAdvancePayments(optionsArg.letterData);
36
40
  const html = `
37
41
  <script type="module">
38
42
  ${await helpers.getBundleAsString()}
@@ -44,4 +48,4 @@ export class PdfService {
44
48
  return pdfResult;
45
49
  }
46
50
  }
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wZGZzZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5wZGZzZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBSXhDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFDckIsU0FBUztJQUNGLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUNoQyxVQUF5QztRQUV6QyxNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxNQUFNLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsV0FBVztJQUNYLE9BQU8sQ0FBZ0M7SUFFaEMsZ0JBQWdCLENBQTZCO0lBRXBELFlBQVksVUFBeUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLEtBQUs7UUFDaEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4RCxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsSUFBSTtRQUNmLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxVQUd0QztRQUNDLE1BQU0sSUFBSSxHQUFHOztVQUVQLE1BQU0sT0FBTyxDQUFDLGlCQUFpQixFQUFFOzsyREFFZ0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQ3BGLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FDNUIsaUJBQWlCLE9BQU8sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUNuRCxVQUFVLENBQUMsVUFBVSxDQUN0QjtLQUNBLENBQUM7UUFDRixxQkFBcUI7UUFDckIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsMkJBQTJCLENBQ3ZFLElBQUksQ0FDTCxDQUFDO1FBQ0YsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGIn0=
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wZGZzZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5wZGZzZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBSXhDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFDckIsU0FBUztJQUNGLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUNoQyxVQUF5QztRQUV6QyxNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxNQUFNLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsV0FBVztJQUNYLE9BQU8sQ0FBZ0M7SUFFaEMsZ0JBQWdCLENBQTZCO0lBRXBELFlBQVksVUFBeUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLEtBQUs7UUFDaEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4RCxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsSUFBSTtRQUNmLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxVQUd0QztRQUNDLE9BQU8sQ0FBQyxNQUFNLENBQUMsc0NBQXNDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sSUFBSSxHQUFHOztVQUVQLE1BQU0sT0FBTyxDQUFDLGlCQUFpQixFQUFFOzsyREFFZ0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQ3BGLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FDNUIsaUJBQWlCLE9BQU8sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUNuRCxVQUFVLENBQUMsVUFBVSxDQUN0QjtLQUNBLENBQUM7UUFDRixxQkFBcUI7UUFDckIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsMkJBQTJCLENBQ3ZFLElBQUksQ0FDTCxDQUFDO1FBQ0YsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGIn0=
@@ -7,4 +7,7 @@ import * as translation from "./translation.js";
7
7
  export { translation };
8
8
  export * from "./accountingdoc.js";
9
9
  export * from "./demoletter.js";
10
+ export * from "./paidamount.js";
10
11
  export * from "./paymentcode.js";
12
+ export * from "./paymentreminder.js";
13
+ export * from "./unitnames.js";
@@ -10,5 +10,8 @@ import * as translation from "./translation.js";
10
10
  export { translation };
11
11
  export * from "./accountingdoc.js";
12
12
  export * from "./demoletter.js";
13
+ export * from "./paidamount.js";
13
14
  export * from "./paymentcode.js";
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zaGFyZWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLGdCQUFnQjtBQUN2QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZTtBQUN0RCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYTtBQUVqRCxNQUFNLFVBQVUsTUFBTSxDQUFDLEtBQWE7SUFDbEMsT0FBTyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxPQUFPLEtBQUssVUFBVSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUV0QixPQUFPLEtBQUssV0FBVyxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUV2QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxrQkFBa0IsQ0FBQyJ9
15
+ export * from "./paymentreminder.js";
16
+ export * from "./unitnames.js";
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zaGFyZWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLGdCQUFnQjtBQUN2QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZTtBQUN0RCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYTtBQUVqRCxNQUFNLFVBQVUsTUFBTSxDQUFDLEtBQWE7SUFDbEMsT0FBTyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxPQUFPLEtBQUssVUFBVSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUV0QixPQUFPLEtBQUssV0FBVyxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUV2QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxnQkFBZ0IsQ0FBQyJ9
@@ -0,0 +1,42 @@
1
+ import * as plugins from "./plugins.js";
2
+ /**
3
+ * Checks the one rule tsclass sets between the paid amount and the advance
4
+ * payments: when a document lists `advancePayments`, its `paidAmount` equals
5
+ * their gross sum, the `net` plus the `vat` of every group of every payment,
6
+ * to the last decimal. A document that breaks it would print a deduction that
7
+ * does not add up to what it says was paid, so it is refused: this throws, and
8
+ * neither value is recomputed from the other. A letter that is no accounting
9
+ * document, none at all, and a document without advance payments, pass.
10
+ */
11
+ export declare const assertPaidAmountMatchesAdvancePayments: (letterArg: plugins.tsclass.business.TLetter | null | undefined) => void;
12
+ /** The tax the advance payments contain at one rate. */
13
+ export interface IAdvancePaymentTax {
14
+ /** the VAT rate in percent */
15
+ percentage: number;
16
+ /** the sum of the `vat` of every advance payment's group at this rate */
17
+ vat: number;
18
+ }
19
+ /** What a document says was paid before it was issued, and what remains. */
20
+ export interface IPaidAmountSummary {
21
+ /** the gross sum received before the document was issued (EN 16931 BT-113), as stated */
22
+ paidAmount: number;
23
+ /**
24
+ * The gross total as printed less the paid amount (BT-115); zero when
25
+ * everything is paid and negative when more was paid than the total.
26
+ */
27
+ amountDue: number;
28
+ /** the advance payments the document deducts, in the order it lists them; empty when it lists none */
29
+ advancePayments: plugins.tsclass.finance.TAdvancePayment[];
30
+ /** the tax the advance payments contain, per rate, the highest rate first; empty without advance payments */
31
+ advancePaymentTaxes: IAdvancePaymentTax[];
32
+ }
33
+ /**
34
+ * The paid amount of an accounting document and the amount due, or null when
35
+ * the document states no paid amount or a paid amount of zero.
36
+ *
37
+ * The amount due is the gross total, rounded to the currency's decimals as
38
+ * the document prints it, less the paid amount as stated, computed in exact
39
+ * decimals. The advance payments are checked against the paid amount first
40
+ * (`assertPaidAmountMatchesAdvancePayments`); a mismatch throws.
41
+ */
42
+ export declare const getPaidAmountSummary: (docArg: plugins.tsclass.finance.TAccountingDoc, totalGrossArg: number) => IPaidAmountSummary | null;
@@ -0,0 +1,141 @@
1
+ import * as plugins from "./plugins.js";
2
+ import { isAccountingDoc } from "./accountingdoc.js";
3
+ const DECIMAL_PATTERN = /^(-?)(\d+)(?:\.(\d+))?(?:e([+-]\d+))?$/;
4
+ /** The decimal a text of digits, an optional fraction and an optional exponent states. */
5
+ const parseDecimal = (textArg) => {
6
+ const parts = DECIMAL_PATTERN.exec(textArg);
7
+ if (!parts) {
8
+ throw new Error(`"${textArg}" is no decimal number`);
9
+ }
10
+ const [, sign, integerDigits, fractionDigits = "", exponentText = "0"] = parts;
11
+ const exponent = Number(exponentText);
12
+ let digits = integerDigits + fractionDigits;
13
+ let scale = fractionDigits.length - exponent;
14
+ if (scale < 0) {
15
+ digits += "0".repeat(-scale);
16
+ scale = 0;
17
+ }
18
+ const units = BigInt(digits);
19
+ return { units: sign === "-" ? -units : units, scale };
20
+ };
21
+ /**
22
+ * The decimal an amount states: its shortest representation, the one
23
+ * `String()` gives, so 1000.1 is exactly 1000.1 and nothing is rounded.
24
+ */
25
+ const statedDecimal = (valueArg, nameArg) => {
26
+ if (!Number.isFinite(valueArg)) {
27
+ throw new Error(`${nameArg} is no finite number`);
28
+ }
29
+ return parseDecimal(String(valueArg));
30
+ };
31
+ /**
32
+ * The decimal of a computed amount as the document prints it: rounded to the
33
+ * currency's decimals on its exact value, as `Intl.NumberFormat` rounds it.
34
+ * From 10^21 on a double is a whole number and `toFixed()` gives an exponent,
35
+ * so the shortest representation is exact there.
36
+ */
37
+ const printedDecimal = (valueArg, fractionDigitsArg) => parseDecimal(Math.abs(valueArg) < 1e21 ? valueArg.toFixed(fractionDigitsArg) : String(valueArg));
38
+ const rescale = (decimalArg, scaleArg) => decimalArg.units * 10n ** BigInt(scaleArg - decimalArg.scale);
39
+ const addDecimals = (...decimalsArg) => {
40
+ const scale = Math.max(0, ...decimalsArg.map((decimalArg) => decimalArg.scale));
41
+ return {
42
+ units: decimalsArg.reduce((sumArg, decimalArg) => sumArg + rescale(decimalArg, scale), 0n),
43
+ scale,
44
+ };
45
+ };
46
+ const negateDecimal = (decimalArg) => ({
47
+ units: -decimalArg.units,
48
+ scale: decimalArg.scale,
49
+ });
50
+ const decimalsEqual = (aArg, bArg) => {
51
+ const scale = Math.max(aArg.scale, bArg.scale);
52
+ return rescale(aArg, scale) === rescale(bArg, scale);
53
+ };
54
+ /** A decimal as a number, for formatting; the text round trip keeps it as close as a double can. */
55
+ const decimalToNumber = (decimalArg) => {
56
+ const negative = decimalArg.units < 0n;
57
+ const digits = (negative ? -decimalArg.units : decimalArg.units)
58
+ .toString()
59
+ .padStart(decimalArg.scale + 1, "0");
60
+ const integerDigits = digits.slice(0, digits.length - decimalArg.scale);
61
+ const fractionDigits = digits.slice(digits.length - decimalArg.scale);
62
+ return Number(`${negative ? "-" : ""}${integerDigits}${fractionDigits ? `.${fractionDigits}` : ""}`);
63
+ };
64
+ /**
65
+ * The decimals a currency's amounts are printed with: 2 for the euro, 0 for
66
+ * the yen, 3 for the Bahraini dinar. An unknown code gets 2, as the content
67
+ * prints an amount in a currency `Intl.NumberFormat` does not take.
68
+ */
69
+ const currencyFractionDigits = (currencyArg) => {
70
+ try {
71
+ return (new Intl.NumberFormat("en-US", { style: "currency", currency: currencyArg }).resolvedOptions()
72
+ .maximumFractionDigits ?? 2);
73
+ }
74
+ catch {
75
+ return 2;
76
+ }
77
+ };
78
+ /** The advance payments a document lists; only a document that can be a final invoice has them. */
79
+ const advancePaymentsOf = (docArg) => "advancePayments" in docArg ? docArg.advancePayments ?? [] : [];
80
+ /** The gross sum of advance payments: the `net` plus the `vat` of every group of every payment. */
81
+ const advancePaymentsGross = (advancePaymentsArg) => addDecimals(...advancePaymentsArg.flatMap((paymentArg, paymentIndexArg) => paymentArg.vatGroups.flatMap((groupArg, groupIndexArg) => [
82
+ statedDecimal(groupArg.net, `advancePayments[${paymentIndexArg}].vatGroups[${groupIndexArg}].net`),
83
+ statedDecimal(groupArg.vat, `advancePayments[${paymentIndexArg}].vatGroups[${groupIndexArg}].vat`),
84
+ ])));
85
+ /**
86
+ * Checks the one rule tsclass sets between the paid amount and the advance
87
+ * payments: when a document lists `advancePayments`, its `paidAmount` equals
88
+ * their gross sum, the `net` plus the `vat` of every group of every payment,
89
+ * to the last decimal. A document that breaks it would print a deduction that
90
+ * does not add up to what it says was paid, so it is refused: this throws, and
91
+ * neither value is recomputed from the other. A letter that is no accounting
92
+ * document, none at all, and a document without advance payments, pass.
93
+ */
94
+ export const assertPaidAmountMatchesAdvancePayments = (letterArg) => {
95
+ if (!isAccountingDoc(letterArg)) {
96
+ return;
97
+ }
98
+ const advancePayments = advancePaymentsOf(letterArg);
99
+ if (advancePayments.length === 0) {
100
+ return;
101
+ }
102
+ const grossSum = advancePaymentsGross(advancePayments);
103
+ const paidAmount = letterArg.paidAmount;
104
+ if (paidAmount === undefined || !decimalsEqual(statedDecimal(paidAmount, "paidAmount"), grossSum)) {
105
+ throw new Error(`Accounting document ${letterArg.id}: paidAmount (${paidAmount ?? "absent"}) does not ` +
106
+ `equal the gross sum of its advancePayments (${decimalToNumber(grossSum)}), the net plus ` +
107
+ `the vat of every group of every payment. The document is not printed.`);
108
+ }
109
+ };
110
+ /**
111
+ * The paid amount of an accounting document and the amount due, or null when
112
+ * the document states no paid amount or a paid amount of zero.
113
+ *
114
+ * The amount due is the gross total, rounded to the currency's decimals as
115
+ * the document prints it, less the paid amount as stated, computed in exact
116
+ * decimals. The advance payments are checked against the paid amount first
117
+ * (`assertPaidAmountMatchesAdvancePayments`); a mismatch throws.
118
+ */
119
+ export const getPaidAmountSummary = (docArg, totalGrossArg) => {
120
+ assertPaidAmountMatchesAdvancePayments(docArg);
121
+ const paidAmount = docArg.paidAmount;
122
+ if (paidAmount === undefined || paidAmount === 0) {
123
+ return null;
124
+ }
125
+ const advancePayments = advancePaymentsOf(docArg);
126
+ const taxesByRate = new Map();
127
+ advancePayments.forEach((paymentArg, paymentIndexArg) => paymentArg.vatGroups.forEach((groupArg, groupIndexArg) => {
128
+ const vat = statedDecimal(groupArg.vat, `advancePayments[${paymentIndexArg}].vatGroups[${groupIndexArg}].vat`);
129
+ const sum = taxesByRate.get(groupArg.percentage);
130
+ taxesByRate.set(groupArg.percentage, sum ? addDecimals(sum, vat) : vat);
131
+ }));
132
+ return {
133
+ paidAmount,
134
+ amountDue: decimalToNumber(addDecimals(printedDecimal(totalGrossArg, currencyFractionDigits(docArg.currency)), negateDecimal(statedDecimal(paidAmount, "paidAmount")))),
135
+ advancePayments,
136
+ advancePaymentTaxes: [...taxesByRate.entries()]
137
+ .map(([percentage, vat]) => ({ percentage, vat: decimalToNumber(vat) }))
138
+ .sort((aArg, bArg) => bArg.percentage - aArg.percentage),
139
+ };
140
+ };
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFpZGFtb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX3NoYXJlZC9wYWlkYW1vdW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQVdyRCxNQUFNLGVBQWUsR0FBRyx3Q0FBd0MsQ0FBQztBQUVqRSwwRkFBMEY7QUFDMUYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFlLEVBQWtCLEVBQUU7SUFDdkQsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFDRCxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLGNBQWMsR0FBRyxFQUFFLEVBQUUsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUMvRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdEMsSUFBSSxNQUFNLEdBQUcsYUFBYSxHQUFHLGNBQWMsQ0FBQztJQUM1QyxJQUFJLEtBQUssR0FBRyxjQUFjLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztJQUM3QyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtB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SyxTQUFTLElBQUksVUFBVSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE1BQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUEwQixDQUFDO0lBQ3RELGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FDdEQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLEVBQUU7UUFDdkQsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUN2QixRQUFRLENBQUMsR0FBRyxFQUNaLG1CQUFtQixlQUFlLGVBQWUsYUFBYSxPQUFPLENBQ3RFLENBQUM7UUFDRixNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRCxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRSxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0YsT0FBTztRQUNMLFVBQVU7UUFDVixTQUFTLEVBQUUsZUFBZSxDQUN4QixXQUFXLENBQ1QsY0FBYyxDQUFDLGFBQWEsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDdEUsYUFBYSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FDdkQsQ0FDRjtRQUNELGVBQWU7UUFDZixtQkFBbUIsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQzVDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3ZFLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztLQUMzRCxDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
@@ -0,0 +1,28 @@
1
+ import * as plugins from "./plugins.js";
2
+ /**
3
+ * Whether a letter is a payment reminder. tsclass discriminates a letter on
4
+ * `type`; a reminder is no accounting document: it carries no positions and no
5
+ * VAT, and asks for the outstanding amounts of earlier documents plus charges.
6
+ */
7
+ export declare const isPaymentReminder: (letterArg: plugins.tsclass.business.TLetter | null | undefined) => letterArg is plugins.tsclass.finance.TPaymentReminder;
8
+ /** The sums a reminder prints, added up from the amounts it states. */
9
+ export interface IPaymentReminderTotals {
10
+ /** the outstanding amounts of every claim */
11
+ claimsOutstanding: number;
12
+ /** the amounts of every charge */
13
+ charges: number;
14
+ /** what the reminder asks to be paid: the claims plus the charges */
15
+ payable: number;
16
+ }
17
+ /**
18
+ * The sums of a reminder. tsclass defines what a reminder asks to be paid as
19
+ * the outstanding amount of every claim plus the amount of every charge; the
20
+ * amounts are added in cents and taken as the reminder states them.
21
+ */
22
+ export declare const getPaymentReminderTotals: (reminderArg: plugins.tsclass.finance.TPaymentReminder) => IPaymentReminderTotals;
23
+ /** The provision a default interest charge rests on, as the reminder prints it. */
24
+ export declare const defaultInterestCitations: Record<plugins.tsclass.finance.TPaymentReminderDefaultInterest["legalBasis"], string>;
25
+ /** The provision of the default lump sum. */
26
+ export declare const DEFAULT_LUMP_SUM_CITATION = "\u00A7 288 Abs. 5 BGB";
27
+ /** The provision that credits the default lump sum against a cost of legal pursuit. */
28
+ export declare const LUMP_SUM_OFFSET_CITATION = "\u00A7 288 Abs. 5 Satz 3 BGB";
@@ -0,0 +1,33 @@
1
+ import * as plugins from "./plugins.js";
2
+ /**
3
+ * Whether a letter is a payment reminder. tsclass discriminates a letter on
4
+ * `type`; a reminder is no accounting document: it carries no positions and no
5
+ * VAT, and asks for the outstanding amounts of earlier documents plus charges.
6
+ */
7
+ export const isPaymentReminder = (letterArg) => letterArg?.type === "payment-reminder";
8
+ /** An amount in cents, so sums of amounts in a currency's minor unit stay exact. */
9
+ const toCents = (amountArg) => Math.round(amountArg * 100);
10
+ /**
11
+ * The sums of a reminder. tsclass defines what a reminder asks to be paid as
12
+ * the outstanding amount of every claim plus the amount of every charge; the
13
+ * amounts are added in cents and taken as the reminder states them.
14
+ */
15
+ export const getPaymentReminderTotals = (reminderArg) => {
16
+ const claimsCents = reminderArg.claims.reduce((sumArg, claimArg) => sumArg + toCents(claimArg.outstandingAmount), 0);
17
+ const chargesCents = reminderArg.charges.reduce((sumArg, chargeArg) => sumArg + toCents(chargeArg.amount), 0);
18
+ return {
19
+ claimsOutstanding: claimsCents / 100,
20
+ charges: chargesCents / 100,
21
+ payable: (claimsCents + chargesCents) / 100,
22
+ };
23
+ };
24
+ /** The provision a default interest charge rests on, as the reminder prints it. */
25
+ export const defaultInterestCitations = {
26
+ "bgb-288-1": "§ 288 Abs. 1 BGB",
27
+ "bgb-288-2": "§ 288 Abs. 2 BGB",
28
+ };
29
+ /** The provision of the default lump sum. */
30
+ export const DEFAULT_LUMP_SUM_CITATION = "§ 288 Abs. 5 BGB";
31
+ /** The provision that credits the default lump sum against a cost of legal pursuit. */
32
+ export const LUMP_SUM_OFFSET_CITATION = "§ 288 Abs. 5 Satz 3 BGB";
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudHJlbWluZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfc2hhcmVkL3BheW1lbnRyZW1pbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4Qzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FDL0IsU0FBOEQsRUFDUCxFQUFFLENBQ3pELFNBQVMsRUFBRSxJQUFJLEtBQUssa0JBQWtCLENBQUM7QUFFekMsb0ZBQW9GO0FBQ3BGLE1BQU0sT0FBTyxHQUFHLENBQUMsU0FBaUIsRUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFZM0U7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQ3RDLFdBQXFELEVBQzdCLEVBQUU7SUFDMUIsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQzNDLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFDbEUsQ0FBQyxDQUNGLENBQUM7SUFDRixNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDN0MsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFDekQsQ0FBQyxDQUNGLENBQUM7SUFDRixPQUFPO1FBQ0wsaUJBQWlCLEVBQUUsV0FBVyxHQUFHLEdBQUc7UUFDcEMsT0FBTyxFQUFFLFlBQVksR0FBRyxHQUFHO1FBQzNCLE9BQU8sRUFBRSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsR0FBRyxHQUFHO0tBQzVDLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixtRkFBbUY7QUFDbkYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBR2pDO0lBQ0YsV0FBVyxFQUFFLGtCQUFrQjtJQUMvQixXQUFXLEVBQUUsa0JBQWtCO0NBQ2hDLENBQUM7QUFFRiw2Q0FBNkM7QUFDN0MsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsa0JBQWtCLENBQUM7QUFFNUQsdUZBQXVGO0FBQ3ZGLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLHlCQUF5QixDQUFDIn0=
@@ -9,12 +9,45 @@
9
9
  export declare const REVERSE_CHARGE_STATUTORY_PHRASE_DE = "Steuerschuldnerschaft des Leistungsempf\u00E4ngers";
10
10
  export declare const EN_translations: {
11
11
  address: string;
12
+ "advancePayment.invoice": string;
13
+ "advancePayment.invoiceDate": string;
14
+ "advancePayment.received": string;
15
+ "advancePayment.title": string;
16
+ "advancePayment.vat": string;
12
17
  "bank.accountHolder": string;
13
18
  "bank.bic": string;
14
19
  "bank.iban": string;
15
20
  "bank.institution": string;
16
21
  "bankConnection@@title": string;
22
+ "charge.amount": string;
23
+ "charge.description": string;
24
+ "charge.lumpSumOffset": string;
25
+ "claim.correctedInvoice": string;
26
+ "claim.debitnote": string;
27
+ "claim.document": string;
28
+ "claim.dueDate": string;
29
+ "claim.invoice": string;
30
+ "claim.issueDate": string;
31
+ "claim.outstanding": string;
32
+ "claim.totalGross": string;
17
33
  "contact@@title": string;
34
+ "correctedInvoice.corrections": string;
35
+ "correctedInvoice.defect.incorrect": string;
36
+ "correctedInvoice.defect.missing": string;
37
+ "correctedInvoice.detail.invoiceNumber": string;
38
+ "correctedInvoice.detail.issueDate": string;
39
+ "correctedInvoice.detail.netAmount": string;
40
+ "correctedInvoice.detail.parties": string;
41
+ "correctedInvoice.detail.retentionNote": string;
42
+ "correctedInvoice.detail.specialCaseDetail": string;
43
+ "correctedInvoice.detail.supplierTaxNumber": string;
44
+ "correctedInvoice.detail.supplyDate": string;
45
+ "correctedInvoice.detail.supplyDescription": string;
46
+ "correctedInvoice.detail.tax": string;
47
+ "correctedInvoice.number": string;
48
+ "correctedInvoice.reference": string;
49
+ "correctedInvoice.referenceDate": string;
50
+ "correctedInvoice.title": string;
18
51
  "creditnote.number": string;
19
52
  "creditnote@@introStatement": string;
20
53
  "customer.number": string;
@@ -25,6 +58,10 @@ export declare const EN_translations: {
25
58
  "empty.number.customer": string;
26
59
  empty: string;
27
60
  fax: string;
61
+ "interest.baseRate": string;
62
+ "interest.perYear": string;
63
+ "interest.plus": string;
64
+ "interest.points": string;
28
65
  introStatement: string;
29
66
  "invoice.number": string;
30
67
  invoice: string;
@@ -35,10 +72,24 @@ export declare const EN_translations: {
35
72
  "page.final": string;
36
73
  page: string;
37
74
  pageOf: string;
75
+ "payment.amountDue": string;
76
+ "payment.creditBalance": string;
77
+ "payment.nothingDue": string;
78
+ "payment.nothingDue.creditBalance": string;
79
+ "payment.paid": string;
38
80
  "payment.qr": string;
39
81
  "payment.qr.description": string;
40
82
  "payment.terms": string;
83
+ "payment.terms.amountDue": string;
41
84
  "payment.terms.direct": string;
85
+ "paymentReminder.deadline": string;
86
+ "paymentReminder.deadline.text": string;
87
+ "paymentReminder.level": string;
88
+ "paymentReminder.number": string;
89
+ "paymentReminder.sum.charges": string;
90
+ "paymentReminder.sum.claims": string;
91
+ "paymentReminder.sum.payable": string;
92
+ "paymentReminder@@introStatement": string;
42
93
  "periodOfPerformance.day": string;
43
94
  "periodOfPerformance.range": string;
44
95
  phone: string;
@@ -10,12 +10,46 @@ export const REVERSE_CHARGE_STATUTORY_PHRASE_DE = "Steuerschuldnerschaft des Lei
10
10
  // Define English translations without enforcing TTranslationImplementation yet
11
11
  export const EN_translations = {
12
12
  address: "Address",
13
+ "advancePayment.invoice": "on invoice no.",
14
+ "advancePayment.invoiceDate": "of",
15
+ "advancePayment.received": "received on",
16
+ "advancePayment.title": "Advance payment",
17
+ "advancePayment.vat": "of which VAT",
13
18
  "bank.accountHolder": "beneficiary",
14
19
  "bank.bic": "bic",
15
20
  "bank.iban": "iban",
16
21
  "bank.institution": "institution",
17
22
  "bankConnection@@title": "Bank Connection",
23
+ "charge.amount": "Amount",
24
+ "charge.description": "Interest and costs",
25
+ "charge.lumpSumOffset": "Credited default lump sum",
26
+ "claim.correctedInvoice": "Corrected invoice",
27
+ "claim.debitnote": "Debit note",
28
+ "claim.document": "Document",
29
+ "claim.dueDate": "Due date",
30
+ "claim.invoice": "Invoice",
31
+ "claim.issueDate": "Date",
32
+ "claim.outstanding": "Outstanding",
33
+ "claim.totalGross": "Gross total",
18
34
  "contact@@title": "Contact Info",
35
+ "correctedInvoice.corrections": "Corrected details",
36
+ "correctedInvoice.defect.incorrect": "corrected",
37
+ "correctedInvoice.defect.missing": "supplied",
38
+ "correctedInvoice.detail.invoiceNumber": "Invoice number",
39
+ "correctedInvoice.detail.issueDate": "Issue date",
40
+ "correctedInvoice.detail.netAmount": "Consideration broken down by tax rate and exemption, and any reduction agreed in advance",
41
+ "correctedInvoice.detail.parties": "Full name and address of the supplier and of the recipient",
42
+ "correctedInvoice.detail.retentionNote": "Note on the recipient's duty to keep the invoice",
43
+ "correctedInvoice.detail.specialCaseDetail": "Detail required by § 14a UStG",
44
+ "correctedInvoice.detail.supplierTaxNumber": "Supplier's tax number or VAT identification number",
45
+ "correctedInvoice.detail.supplyDate": "Date of the supply, or of the payment received before it",
46
+ "correctedInvoice.detail.supplyDescription": "Quantity and kind of the goods, or extent and kind of the service",
47
+ "correctedInvoice.detail.tax": "Tax rate and tax amount, or the note on an exemption",
48
+ "correctedInvoice.number": "Corrected invoice number",
49
+ "correctedInvoice.reference": "for invoice no.",
50
+ "correctedInvoice.referenceDate": "of",
51
+ // UNTDID 1001 code 384
52
+ "correctedInvoice.title": "Corrected invoice",
19
53
  "creditnote.number": "Credit note number",
20
54
  "creditnote@@introStatement": "We hereby credit the following products and services",
21
55
  "customer.number": "Your Customer ID",
@@ -26,6 +60,10 @@ export const EN_translations = {
26
60
  "empty.number.customer": "not registered",
27
61
  empty: "not provided",
28
62
  fax: "Fax",
63
+ "interest.baseRate": "base rate",
64
+ "interest.perYear": "a year",
65
+ "interest.plus": "plus",
66
+ "interest.points": "percentage points",
29
67
  introStatement: "We hereby invoice the following products and services",
30
68
  "invoice.number": "Invoice number",
31
69
  invoice: "Invoice",
@@ -36,10 +74,24 @@ export const EN_translations = {
36
74
  "page.final": "This is the final page of this document.",
37
75
  page: "Page",
38
76
  pageOf: "of",
77
+ "payment.amountDue": "Amount due",
78
+ "payment.creditBalance": "Credit balance",
79
+ "payment.nothingDue": "Nothing is due: the total has been paid.",
80
+ "payment.nothingDue.creditBalance": "Nothing is due. You have a credit balance of",
81
+ "payment.paid": "Paid in advance",
39
82
  "payment.qr": "Pay via QR code",
40
83
  "payment.qr.description": "Scan the QR code with you banking app",
41
84
  "payment.terms": "Payment Terms",
85
+ "payment.terms.amountDue": "without deduction until",
42
86
  "payment.terms.direct": "Without deduction until",
87
+ "paymentReminder.deadline": "Payment deadline",
88
+ "paymentReminder.deadline.text": "Please pay the total payable by",
89
+ "paymentReminder.level": "Reminder level",
90
+ "paymentReminder.number": "Reminder number",
91
+ "paymentReminder.sum.charges": "Interest and costs",
92
+ "paymentReminder.sum.claims": "Outstanding claims",
93
+ "paymentReminder.sum.payable": "Total payable",
94
+ "paymentReminder@@introStatement": "The following claims are still outstanding",
43
95
  "periodOfPerformance.day": "Delivery Date",
44
96
  "periodOfPerformance.range": "Delivery Period",
45
97
  phone: "Phone",
@@ -69,12 +121,47 @@ export const EN_translations = {
69
121
  // Define German translations
70
122
  export const DE_translations = {
71
123
  address: "Adresse",
124
+ "advancePayment.invoice": "zur Rechnung Nr.",
125
+ "advancePayment.invoiceDate": "vom",
126
+ "advancePayment.received": "eingegangen am",
127
+ "advancePayment.title": "Anzahlung",
128
+ "advancePayment.vat": "darin enthaltene USt",
72
129
  "bank.accountHolder": "Kontoinhaber",
73
130
  "bank.bic": "BIC",
74
131
  "bank.iban": "IBAN",
75
132
  "bank.institution": "Bankinstitut",
76
133
  "bankConnection@@title": "Bankverbindung",
134
+ "charge.amount": "Betrag",
135
+ "charge.description": "Zinsen und Kosten",
136
+ "charge.lumpSumOffset": "Angerechnete Verzugspauschale",
137
+ "claim.correctedInvoice": "Rechnungsberichtigung",
138
+ "claim.debitnote": "Belastungsanzeige",
139
+ "claim.document": "Beleg",
140
+ "claim.dueDate": "Fällig am",
141
+ "claim.invoice": "Rechnung",
142
+ "claim.issueDate": "Datum",
143
+ "claim.outstanding": "Offen",
144
+ "claim.totalGross": "Bruttobetrag",
77
145
  "contact@@title": "Kontaktinformationen",
146
+ "correctedInvoice.corrections": "Berichtigte Angaben",
147
+ "correctedInvoice.defect.incorrect": "berichtigt",
148
+ "correctedInvoice.defect.missing": "ergänzt",
149
+ // the details of § 14 Abs. 4 Satz 1 Nr. 1 bis 9 UStG, and § 14a UStG
150
+ "correctedInvoice.detail.invoiceNumber": "Rechnungsnummer",
151
+ "correctedInvoice.detail.issueDate": "Ausstellungsdatum",
152
+ "correctedInvoice.detail.netAmount": "Nach Steuersätzen und Steuerbefreiungen aufgeschlüsseltes Entgelt und im Voraus vereinbarte Minderungen",
153
+ "correctedInvoice.detail.parties": "Vollständiger Name und vollständige Anschrift des leistenden Unternehmers und des Leistungsempfängers",
154
+ "correctedInvoice.detail.retentionNote": "Hinweis auf die Aufbewahrungspflicht des Leistungsempfängers",
155
+ "correctedInvoice.detail.specialCaseDetail": "Angabe nach § 14a UStG",
156
+ "correctedInvoice.detail.supplierTaxNumber": "Steuernummer oder USt-IdNr. des leistenden Unternehmers",
157
+ "correctedInvoice.detail.supplyDate": "Zeitpunkt der Lieferung oder sonstigen Leistung oder der Vereinnahmung des Entgelts",
158
+ "correctedInvoice.detail.supplyDescription": "Menge und Art der gelieferten Gegenstände oder Umfang und Art der sonstigen Leistung",
159
+ "correctedInvoice.detail.tax": "Steuersatz und Steuerbetrag oder Hinweis auf die Steuerbefreiung",
160
+ "correctedInvoice.number": "Rechnungsberichtigung Nr.",
161
+ "correctedInvoice.reference": "zur Rechnung Nr.",
162
+ "correctedInvoice.referenceDate": "vom",
163
+ // § 31 Abs. 5 UStDV, Abschnitt 14.11 UStAE ("Berichtigung von Rechnungen")
164
+ "correctedInvoice.title": "Rechnungsberichtigung",
78
165
  "creditnote.number": "Rechnungskorrektur-Nr.",
79
166
  "creditnote@@introStatement": "Wir schreiben Ihnen hiermit folgende Produkte und Dienstleistungen gut",
80
167
  "customer.number": "Ihre Kundennummer",
@@ -85,6 +172,10 @@ export const DE_translations = {
85
172
  "empty.number.customer": "nicht registriert",
86
173
  empty: "nicht angegeben",
87
174
  fax: "Fax",
175
+ "interest.baseRate": "Basiszinssatz",
176
+ "interest.perYear": "p. a.",
177
+ "interest.plus": "zzgl.",
178
+ "interest.points": "Prozentpunkte",
88
179
  introStatement: "Wir stellen Ihnen hiermit folgende Produkte und Dienstleistungen in Rechnung",
89
180
  "invoice.number": "Rechnungsnr.",
90
181
  invoice: "Rechnung",
@@ -95,10 +186,24 @@ export const DE_translations = {
95
186
  "page.final": "Dies ist die letzte Seite dieses Dokuments.",
96
187
  page: "Seite",
97
188
  pageOf: "von",
189
+ "payment.amountDue": "Zu zahlen",
190
+ "payment.creditBalance": "Guthaben",
191
+ "payment.nothingDue": "Es ist nichts zu zahlen: Der Gesamtbetrag ist bezahlt.",
192
+ "payment.nothingDue.creditBalance": "Es ist nichts zu zahlen. Sie haben ein Guthaben von",
193
+ "payment.paid": "Bereits gezahlt",
98
194
  "payment.qr": "Überweisen per QR-Code",
99
195
  "payment.qr.description": "Den QR-Code einfach mit der Banking-App einscannen",
100
196
  "payment.terms": "Zahlungsbedingungen",
197
+ "payment.terms.amountDue": "ohne Abzug bis zum",
101
198
  "payment.terms.direct": "Ohne Abzug bis zum",
199
+ "paymentReminder.deadline": "Zahlungsfrist",
200
+ "paymentReminder.deadline.text": "Bitte zahlen Sie den Gesamtbetrag bis zum",
201
+ "paymentReminder.level": "Mahnstufe",
202
+ "paymentReminder.number": "Mahnungsnr.",
203
+ "paymentReminder.sum.charges": "Zinsen und Kosten",
204
+ "paymentReminder.sum.claims": "Offene Forderungen",
205
+ "paymentReminder.sum.payable": "Zu zahlender Gesamtbetrag",
206
+ "paymentReminder@@introStatement": "Folgende Forderungen sind noch offen",
102
207
  "periodOfPerformance.day": "Lieferdatum",
103
208
  "periodOfPerformance.range": "Lieferzeitraum",
104
209
  phone: "Telefon",
@@ -162,4 +267,4 @@ export const translate = (languageCode, key) => {
162
267
  // an unknown key renders as itself, so a missing translation is visible instead of empty
163
268
  return found ?? key;
164
269
  };
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zaGFyZWQvdHJhbnNsYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUM3QywrQ0FBK0MsQ0FBQztBQUVsRCwrRUFBK0U7QUFDL0UsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLG9CQUFvQixFQUFFLGFBQWE7SUFDbkMsVUFBVSxFQUFFLEtBQUs7SUFDakIsV0FBVyxFQUFFLE1BQU07SUFDbkIsa0JBQWtCLEVBQUUsYUFBYTtJQUNqQyx1QkFBdUIsRUFBRSxpQkFBaUI7SUFDMUMsZ0JBQWdCLEVBQUUsY0FBYztJQUNoQyxtQkFBbUIsRUFBRSxvQkFBb0I7SUFDekMsNEJBQTRCLEVBQzFCLHNEQUFzRDtJQUN4RCxpQkFBaUIsRUFBRSxrQkFBa0I7SUFDckMsa0JBQWtCLEVBQUUsbUJBQW1CO0lBQ3ZDLDJCQUEyQixFQUN6QixtRUFBbUU7SUFDckUsV0FBVyxFQUFFLGFBQWE7SUFDMUIsWUFBWSxFQUFFLGtCQUFrQjtJQUNoQyx1QkFBdUIsRUFBRSxnQkFBZ0I7SUFDekMsS0FBSyxFQUFFLGNBQWM7SUFDckIsR0FBRyxFQUFFLEtBQUs7SUFDVixjQUFjLEVBQUUsdURBQXVEO0lBQ3ZFLGdCQUFnQixFQUFFLGdCQUFnQjtJQUNsQyxPQUFPLEVBQUUsU0FBUztJQUNsQixlQUFlLEVBQUUsTUFBTTtJQUN2QixJQUFJLEVBQUUsTUFBTTtJQUNaLGdCQUFnQixFQUFFLE9BQU87SUFDekIsbUJBQW1CLEVBQUUsbUJBQW1CO0lBQ3hDLFlBQVksRUFBRSwwQ0FBMEM7SUFDeEQsSUFBSSxFQUFFLE1BQU07SUFDWixNQUFNLEVBQUUsSUFBSTtJQUNaLFlBQVksRUFBRSxpQkFBaUI7SUFDL0Isd0JBQXdCLEVBQUUsdUNBQXVDO0lBQ2pFLGVBQWUsRUFB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
270
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zaGFyZWQvdHJhbnNsYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUM3QywrQ0FBK0MsQ0FBQztBQUVsRCwrRUFBK0U7QUFDL0UsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLHdCQUF3QixFQUFFLGdCQUFnQjtJQUMxQyw0QkFBNEIsRUFBRSxJQUFJO0lBQ2xDLHlCQUF5QixFQUFFLGFBQWE7SUFDeEMsc0JBQXNCLEVBQUUsaUJBQWlCO0lBQ3pDLG9CQUFvQixFQUFFLGNBQWM7SUFDcEMsb0JBQW9CLEVBQUUsYUFBYTtJQUNuQyxVQUFVLEVBQUUsS0FBSztJQUNqQixXQUFXLEVBQUUsTUFBTTtJQUNuQixrQkFBa0IsRUFBRSxhQUFhO0lBQ2pDLHVCQUF1QixFQUFFLGlCQUFpQjtJQUMxQyxlQUFlLEVBQUUsUUFBUTtJQUN6QixvQkFBb0IsRUFBRSxvQkFBb0I7SUFDMUMsc0JBQXNCLEVBQUUsMkJBQTJCO0lBQ25ELHdCQUF3QixFQUFFLG1CQUFtQjtJQUM3QyxpQkFBaUIsRUFBRSxZQUFZO0lBQy9CLGdCQUFnQixFQUFFLFVBQVU7SUFDNUIsZUFBZSxFQUFFLFVBQVU7SUFDM0IsZUFBZSxFQUFFLFNBQVM7SUFDMUIsaUJBQWlCLEVBQUUsTUFBTTtJQUN6QixtQkFBbUIsRUFBRSxhQUFhO0lBQ2xDLGtCQUFrQixFQUFFLGFBQWE7SUFDakMsZ0JBQWdCLEVBQUUsY0FBYztJQUNoQyw4QkFBOEIsRUFBRSxtQkFBbUI7SUFDbkQsbUNBQW1DLEVBQUUsV0FBVztJQUNoRCxpQ0FBaUMsRUFBRSxVQUFVO0lBQzdDLHVDQUF1QyxFQUFFLGdCQUFnQjtJQUN6RCxtQ0FBbUMsRUFBRSxZQUFZO0lBQ2pELG1DQUFtQyxFQUNqQywwRkFBMEY7SUFD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