@design.estate/dees-document 3.1.2 → 3.3.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_bundle/bundle.js +528 -334
- package/dist_bundle/bundle.js.map +1 -1
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts_shared/demoletter.js +2 -2
- package/dist_ts_shared/index.d.ts +3 -0
- package/dist_ts_shared/index.js +4 -1
- package/dist_ts_shared/paymentcode.d.ts +43 -0
- package/dist_ts_shared/paymentcode.js +85 -0
- package/dist_ts_shared/paymentreminder.d.ts +28 -0
- package/dist_ts_shared/paymentreminder.js +33 -0
- package/dist_ts_shared/translation.d.ts +49 -0
- package/dist_ts_shared/translation.js +97 -3
- package/dist_ts_shared/unitnames.d.ts +44 -0
- package/dist_ts_shared/unitnames.js +103 -0
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/contentinvoice.d.ts +89 -1
- package/dist_ts_web/elements/contentinvoice.js +580 -44
- package/dist_ts_web/elements/letterheader.d.ts +2 -0
- package/dist_ts_web/elements/letterheader.js +20 -1
- package/dist_ts_web/elements/paymentcode.d.ts +2 -0
- package/dist_ts_web/elements/paymentcode.js +23 -19
- package/package.json +5 -5
- package/readme.md +115 -4
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/contentinvoice.ts +713 -49
- package/ts_web/elements/letterheader.ts +28 -0
- package/ts_web/elements/paymentcode.ts +27 -26
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@design.estate/dees-document',
|
|
6
|
-
version: '3.
|
|
6
|
+
version: '3.3.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=
|
|
@@ -60,7 +60,7 @@ export const demoLetter = {
|
|
|
60
60
|
date: Date.now(),
|
|
61
61
|
incidenceId: "LL-INV-48765",
|
|
62
62
|
subject: "LL-INV-48765",
|
|
63
|
-
reverseCharge:
|
|
63
|
+
reverseCharge: false,
|
|
64
64
|
dueInDays: 30,
|
|
65
65
|
from: fromContact,
|
|
66
66
|
to: toContact,
|
|
@@ -321,4 +321,4 @@ export const demoDocumentSettings = {
|
|
|
321
321
|
enableDefaultFooter: true,
|
|
322
322
|
languageCode: "DE",
|
|
323
323
|
};
|
|
324
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
324
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVtb2xldHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX3NoYXJlZC9kZW1vbGV0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxVQUFVLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQsTUFBTSxXQUFXLEdBQXNDO0lBQ3JELElBQUksRUFBRSxzQkFBc0I7SUFDNUIsSUFBSSxFQUFFLFNBQVM7SUFDZixNQUFNLEVBQUUsUUFBUTtJQUNoQixXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtJQUM3QyxXQUFXLEVBQUUsMkJBQTJCO0lBQ3hDLE9BQU8sRUFBRTtRQUNQLFVBQVUsRUFBRSxnQkFBZ0I7UUFDNUIsV0FBVyxFQUFFLEdBQUc7UUFDaEIsSUFBSSxFQUFFLFFBQVE7UUFDZCxPQUFPLEVBQUUsU0FBUztRQUNsQixVQUFVLEVBQUUsT0FBTztLQUNwQjtJQUNELGNBQWMsRUFBRTtRQUNkLEdBQUcsRUFBRSxVQUFVO1FBQ2YsSUFBSSxFQUFFLGtCQUFrQjtLQUN6QjtJQUNELEtBQUssRUFBRSx1QkFBdUI7SUFDOUIsS0FBSyxFQUFFLGlCQUFpQjtJQUN4QixHQUFHLEVBQUUsaUJBQWlCO0lBQ3RCLG1CQUFtQixFQUFFO1FBQ25CLGNBQWMsRUFBRSxjQUFjO1FBQzlCLGdCQUFnQixFQUFFLG9CQUFvQjtRQUN0QyxLQUFLLEVBQUUsWUFBWTtLQUNwQjtDQUNGLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBc0M7SUFDbkQsSUFBSSxFQUFFLGlCQUFpQjtJQUN2QixJQUFJLEVBQUUsU0FBUztJQUNmLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLFdBQVcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxF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
|
package/dist_ts_shared/index.js
CHANGED
|
@@ -10,4 +10,7 @@ import * as translation from "./translation.js";
|
|
|
10
10
|
export { translation };
|
|
11
11
|
export * from "./accountingdoc.js";
|
|
12
12
|
export * from "./demoletter.js";
|
|
13
|
-
|
|
13
|
+
export * from "./paymentcode.js";
|
|
14
|
+
export * from "./paymentreminder.js";
|
|
15
|
+
export * from "./unitnames.js";
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zaGFyZWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLGdCQUFnQjtBQUN2QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZTtBQUN0RCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYTtBQUVqRCxNQUFNLFVBQVUsTUFBTSxDQUFDLEtBQWE7SUFDbEMsT0FBTyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxPQUFPLEtBQUssVUFBVSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUV0QixPQUFPLEtBQUssV0FBVyxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUV2QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsZ0JBQWdCLENBQUMifQ==
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The content of a SEPA credit transfer QR code (EPC QR code, "GiroCode"), as
|
|
3
|
+
* the European Payments Council defines it in EPC069-12. Banking apps read it
|
|
4
|
+
* line by line:
|
|
5
|
+
*
|
|
6
|
+
* 1 service tag `BCD` 7 IBAN of the beneficiary
|
|
7
|
+
* 2 version 8 amount, `EUR` and at most two decimals
|
|
8
|
+
* 3 character set (1 UTF-8) 9 purpose code (empty)
|
|
9
|
+
* 4 identification `SCT` 10 structured creditor reference (empty)
|
|
10
|
+
* 5 BIC 11 unstructured remittance information
|
|
11
|
+
* 6 beneficiary name
|
|
12
|
+
*
|
|
13
|
+
* The document number goes into line 11, the free-text remittance: line 10 only
|
|
14
|
+
* takes an ISO 11649 creditor reference (`RF…`), which a document number is not.
|
|
15
|
+
*
|
|
16
|
+
* Lines are separated by a line feed, and nothing follows the last filled line.
|
|
17
|
+
* A line break inside the name or the remittance information becomes a space.
|
|
18
|
+
* The whole content is at most 331 bytes of UTF-8.
|
|
19
|
+
*/
|
|
20
|
+
export interface IEpcQrPaymentData {
|
|
21
|
+
/** BIC of the beneficiary's bank; version 002 of the code leaves it optional. */
|
|
22
|
+
bic?: string;
|
|
23
|
+
/** Beneficiary name, at most 70 characters in the code. */
|
|
24
|
+
name: string;
|
|
25
|
+
iban: string;
|
|
26
|
+
currency: string;
|
|
27
|
+
amount: number;
|
|
28
|
+
/** What the payer's bank transfers as remittance information, at most 140 characters. */
|
|
29
|
+
remittanceInformation: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Builds the EPC QR code content, or returns null when no valid code exists
|
|
33
|
+
* for the payment: the EPC QR code transfers euros only, an amount from 0.01
|
|
34
|
+
* to 999,999,999.99, to a beneficiary with a name and an IBAN.
|
|
35
|
+
*
|
|
36
|
+
* The name is cut to 70 characters and the remittance information to 140
|
|
37
|
+
* (Unicode code points), at whole grapheme clusters. When the content would
|
|
38
|
+
* still exceed 331 bytes, which only text of multi-byte characters reaches, the
|
|
39
|
+
* remittance information is cut further at whole grapheme clusters. The name is
|
|
40
|
+
* not cut further: when the other lines alone leave no room for any of the
|
|
41
|
+
* remittance information, or exceed 331 bytes themselves, the result is null.
|
|
42
|
+
*/
|
|
43
|
+
export declare const buildEpcQrPayload: (paymentArg: IEpcQrPaymentData) => string | null;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/** The largest amount an EPC QR code can carry. */
|
|
2
|
+
const EPC_MAX_AMOUNT = 999999999.99;
|
|
3
|
+
/** The largest EPC QR code content, in bytes. */
|
|
4
|
+
const EPC_MAX_PAYLOAD_BYTES = 331;
|
|
5
|
+
const EPC_MAX_NAME_CHARACTERS = 70;
|
|
6
|
+
const EPC_MAX_REMITTANCE_CHARACTERS = 140;
|
|
7
|
+
/** Every line break Unicode knows, in runs. */
|
|
8
|
+
const LINE_BREAKS = /[\r\n\v\f\u0085\u2028\u2029]+/g;
|
|
9
|
+
const utf8Encoder = new TextEncoder();
|
|
10
|
+
const graphemeSegmenter = new Intl.Segmenter(undefined, { granularity: "grapheme" });
|
|
11
|
+
const utf8Length = (textArg) => utf8Encoder.encode(textArg).length;
|
|
12
|
+
/** One line of free text: line breaks become spaces, surrounding space is dropped. */
|
|
13
|
+
const toSingleLine = (textArg) => textArg.replace(LINE_BREAKS, " ").trim();
|
|
14
|
+
/**
|
|
15
|
+
* The longest start of the text, in whole grapheme clusters, that has at most
|
|
16
|
+
* `maxCharactersArg` characters (Unicode code points) and `maxBytesArg` bytes of
|
|
17
|
+
* UTF-8. A cluster that would cross either limit is left out whole.
|
|
18
|
+
*/
|
|
19
|
+
const truncateToGraphemes = (textArg, maxCharactersArg, maxBytesArg) => {
|
|
20
|
+
let result = "";
|
|
21
|
+
let characters = 0;
|
|
22
|
+
let bytes = 0;
|
|
23
|
+
for (const { segment } of graphemeSegmenter.segment(textArg)) {
|
|
24
|
+
const segmentCharacters = [...segment].length;
|
|
25
|
+
const segmentBytes = utf8Length(segment);
|
|
26
|
+
if (characters + segmentCharacters > maxCharactersArg || bytes + segmentBytes > maxBytesArg) {
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
result += segment;
|
|
30
|
+
characters += segmentCharacters;
|
|
31
|
+
bytes += segmentBytes;
|
|
32
|
+
}
|
|
33
|
+
return result.trimEnd();
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Builds the EPC QR code content, or returns null when no valid code exists
|
|
37
|
+
* for the payment: the EPC QR code transfers euros only, an amount from 0.01
|
|
38
|
+
* to 999,999,999.99, to a beneficiary with a name and an IBAN.
|
|
39
|
+
*
|
|
40
|
+
* The name is cut to 70 characters and the remittance information to 140
|
|
41
|
+
* (Unicode code points), at whole grapheme clusters. When the content would
|
|
42
|
+
* still exceed 331 bytes, which only text of multi-byte characters reaches, the
|
|
43
|
+
* remittance information is cut further at whole grapheme clusters. The name is
|
|
44
|
+
* not cut further: when the other lines alone leave no room for any of the
|
|
45
|
+
* remittance information, or exceed 331 bytes themselves, the result is null.
|
|
46
|
+
*/
|
|
47
|
+
export const buildEpcQrPayload = (paymentArg) => {
|
|
48
|
+
const iban = paymentArg.iban?.replace(/\s+/g, "").toUpperCase() ?? "";
|
|
49
|
+
const name = truncateToGraphemes(toSingleLine(paymentArg.name ?? ""), EPC_MAX_NAME_CHARACTERS, EPC_MAX_PAYLOAD_BYTES);
|
|
50
|
+
const bic = paymentArg.bic?.replace(/\s+/g, "").toUpperCase() ?? "";
|
|
51
|
+
const amount = Math.round(paymentArg.amount * 100) / 100;
|
|
52
|
+
if (paymentArg.currency !== "EUR" ||
|
|
53
|
+
!Number.isFinite(amount) ||
|
|
54
|
+
amount < 0.01 ||
|
|
55
|
+
amount > EPC_MAX_AMOUNT ||
|
|
56
|
+
iban.length === 0 ||
|
|
57
|
+
name.length === 0) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
const leadingLines = [
|
|
61
|
+
"BCD",
|
|
62
|
+
bic.length > 0 ? "001" : "002",
|
|
63
|
+
"1",
|
|
64
|
+
"SCT",
|
|
65
|
+
bic,
|
|
66
|
+
name,
|
|
67
|
+
iban,
|
|
68
|
+
`EUR${amount.toFixed(2)}`,
|
|
69
|
+
"",
|
|
70
|
+
"",
|
|
71
|
+
];
|
|
72
|
+
// the remittance line and its separator get the bytes the other lines leave
|
|
73
|
+
const remittanceText = toSingleLine(paymentArg.remittanceInformation ?? "");
|
|
74
|
+
const remittance = truncateToGraphemes(remittanceText, EPC_MAX_REMITTANCE_CHARACTERS, Math.max(0, EPC_MAX_PAYLOAD_BYTES - utf8Length(leadingLines.join("\n")) - 1));
|
|
75
|
+
if (remittanceText.length > 0 && remittance.length === 0) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
const lines = [...leadingLines, remittance];
|
|
79
|
+
while (lines[lines.length - 1] === "") {
|
|
80
|
+
lines.pop();
|
|
81
|
+
}
|
|
82
|
+
const payload = lines.join("\n");
|
|
83
|
+
return utf8Length(payload) <= EPC_MAX_PAYLOAD_BYTES ? payload : null;
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudGNvZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zaGFyZWQvcGF5bWVudGNvZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBLG1EQUFtRDtBQUNuRCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUM7QUFFcEMsaURBQWlEO0FBQ2pELE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBRWxDLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0FBQ25DLE1BQU0sNkJBQTZCLEdBQUcsR0FBRyxDQUFDO0FBRTFDLCtDQUErQztBQUMvQyxNQUFNLFdBQVcsR0FBRyxnQ0FBZ0MsQ0FBQztBQUVyRCxNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ3RDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBRXJGLE1BQU0sVUFBVSxHQUFHLENBQUMsT0FBZSxFQUFVLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUVuRixzRkFBc0Y7QUFDdEYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFlLEVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBRTNGOzs7O0dBSUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLENBQzFCLE9BQWUsRUFDZixnQkFBd0IsRUFDeEIsV0FBbUIsRUFDWCxFQUFFO0lBQ1YsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNuQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDZCxLQUFLLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxD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
|
|
@@ -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=
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The words UStG requires on a reverse-charge invoice: § 14a Abs. 5 for a
|
|
3
|
+
* domestic supply whose recipient owes the tax under § 13b, § 14a Abs. 1 for a
|
|
4
|
+
* supply in another member state whose recipient owes the tax there, such as a
|
|
5
|
+
* business-to-business service under Art. 196 of the VAT Directive. A document
|
|
6
|
+
* prints them in every language; the translations below add a line in the
|
|
7
|
+
* document's own language where it is not German.
|
|
8
|
+
*/
|
|
9
|
+
export declare const REVERSE_CHARGE_STATUTORY_PHRASE_DE = "Steuerschuldnerschaft des Leistungsempf\u00E4ngers";
|
|
1
10
|
export declare const EN_translations: {
|
|
2
11
|
address: string;
|
|
3
12
|
"bank.accountHolder": string;
|
|
@@ -5,7 +14,35 @@ export declare const EN_translations: {
|
|
|
5
14
|
"bank.iban": string;
|
|
6
15
|
"bank.institution": string;
|
|
7
16
|
"bankConnection@@title": string;
|
|
17
|
+
"charge.amount": string;
|
|
18
|
+
"charge.description": string;
|
|
19
|
+
"charge.lumpSumOffset": string;
|
|
20
|
+
"claim.correctedInvoice": string;
|
|
21
|
+
"claim.debitnote": string;
|
|
22
|
+
"claim.document": string;
|
|
23
|
+
"claim.dueDate": string;
|
|
24
|
+
"claim.invoice": string;
|
|
25
|
+
"claim.issueDate": string;
|
|
26
|
+
"claim.outstanding": string;
|
|
27
|
+
"claim.totalGross": string;
|
|
8
28
|
"contact@@title": string;
|
|
29
|
+
"correctedInvoice.corrections": string;
|
|
30
|
+
"correctedInvoice.defect.incorrect": string;
|
|
31
|
+
"correctedInvoice.defect.missing": string;
|
|
32
|
+
"correctedInvoice.detail.invoiceNumber": string;
|
|
33
|
+
"correctedInvoice.detail.issueDate": string;
|
|
34
|
+
"correctedInvoice.detail.netAmount": string;
|
|
35
|
+
"correctedInvoice.detail.parties": string;
|
|
36
|
+
"correctedInvoice.detail.retentionNote": string;
|
|
37
|
+
"correctedInvoice.detail.specialCaseDetail": string;
|
|
38
|
+
"correctedInvoice.detail.supplierTaxNumber": string;
|
|
39
|
+
"correctedInvoice.detail.supplyDate": string;
|
|
40
|
+
"correctedInvoice.detail.supplyDescription": string;
|
|
41
|
+
"correctedInvoice.detail.tax": string;
|
|
42
|
+
"correctedInvoice.number": string;
|
|
43
|
+
"correctedInvoice.reference": string;
|
|
44
|
+
"correctedInvoice.referenceDate": string;
|
|
45
|
+
"correctedInvoice.title": string;
|
|
9
46
|
"creditnote.number": string;
|
|
10
47
|
"creditnote@@introStatement": string;
|
|
11
48
|
"customer.number": string;
|
|
@@ -16,6 +53,10 @@ export declare const EN_translations: {
|
|
|
16
53
|
"empty.number.customer": string;
|
|
17
54
|
empty: string;
|
|
18
55
|
fax: string;
|
|
56
|
+
"interest.baseRate": string;
|
|
57
|
+
"interest.perYear": string;
|
|
58
|
+
"interest.plus": string;
|
|
59
|
+
"interest.points": string;
|
|
19
60
|
introStatement: string;
|
|
20
61
|
"invoice.number": string;
|
|
21
62
|
invoice: string;
|
|
@@ -30,6 +71,14 @@ export declare const EN_translations: {
|
|
|
30
71
|
"payment.qr.description": string;
|
|
31
72
|
"payment.terms": string;
|
|
32
73
|
"payment.terms.direct": string;
|
|
74
|
+
"paymentReminder.deadline": string;
|
|
75
|
+
"paymentReminder.deadline.text": string;
|
|
76
|
+
"paymentReminder.level": string;
|
|
77
|
+
"paymentReminder.number": string;
|
|
78
|
+
"paymentReminder.sum.charges": string;
|
|
79
|
+
"paymentReminder.sum.claims": string;
|
|
80
|
+
"paymentReminder.sum.payable": string;
|
|
81
|
+
"paymentReminder@@introStatement": string;
|
|
33
82
|
"periodOfPerformance.day": string;
|
|
34
83
|
"periodOfPerformance.range": string;
|
|
35
84
|
phone: string;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The words UStG requires on a reverse-charge invoice: § 14a Abs. 5 for a
|
|
3
|
+
* domestic supply whose recipient owes the tax under § 13b, § 14a Abs. 1 for a
|
|
4
|
+
* supply in another member state whose recipient owes the tax there, such as a
|
|
5
|
+
* business-to-business service under Art. 196 of the VAT Directive. A document
|
|
6
|
+
* prints them in every language; the translations below add a line in the
|
|
7
|
+
* document's own language where it is not German.
|
|
8
|
+
*/
|
|
9
|
+
export const REVERSE_CHARGE_STATUTORY_PHRASE_DE = "Steuerschuldnerschaft des Leistungsempfängers";
|
|
1
10
|
// Define English translations without enforcing TTranslationImplementation yet
|
|
2
11
|
export const EN_translations = {
|
|
3
12
|
address: "Address",
|
|
@@ -6,7 +15,36 @@ export const EN_translations = {
|
|
|
6
15
|
"bank.iban": "iban",
|
|
7
16
|
"bank.institution": "institution",
|
|
8
17
|
"bankConnection@@title": "Bank Connection",
|
|
18
|
+
"charge.amount": "Amount",
|
|
19
|
+
"charge.description": "Interest and costs",
|
|
20
|
+
"charge.lumpSumOffset": "Credited default lump sum",
|
|
21
|
+
"claim.correctedInvoice": "Corrected invoice",
|
|
22
|
+
"claim.debitnote": "Debit note",
|
|
23
|
+
"claim.document": "Document",
|
|
24
|
+
"claim.dueDate": "Due date",
|
|
25
|
+
"claim.invoice": "Invoice",
|
|
26
|
+
"claim.issueDate": "Date",
|
|
27
|
+
"claim.outstanding": "Outstanding",
|
|
28
|
+
"claim.totalGross": "Gross total",
|
|
9
29
|
"contact@@title": "Contact Info",
|
|
30
|
+
"correctedInvoice.corrections": "Corrected details",
|
|
31
|
+
"correctedInvoice.defect.incorrect": "corrected",
|
|
32
|
+
"correctedInvoice.defect.missing": "supplied",
|
|
33
|
+
"correctedInvoice.detail.invoiceNumber": "Invoice number",
|
|
34
|
+
"correctedInvoice.detail.issueDate": "Issue date",
|
|
35
|
+
"correctedInvoice.detail.netAmount": "Consideration broken down by tax rate and exemption, and any reduction agreed in advance",
|
|
36
|
+
"correctedInvoice.detail.parties": "Full name and address of the supplier and of the recipient",
|
|
37
|
+
"correctedInvoice.detail.retentionNote": "Note on the recipient's duty to keep the invoice",
|
|
38
|
+
"correctedInvoice.detail.specialCaseDetail": "Detail required by § 14a UStG",
|
|
39
|
+
"correctedInvoice.detail.supplierTaxNumber": "Supplier's tax number or VAT identification number",
|
|
40
|
+
"correctedInvoice.detail.supplyDate": "Date of the supply, or of the payment received before it",
|
|
41
|
+
"correctedInvoice.detail.supplyDescription": "Quantity and kind of the goods, or extent and kind of the service",
|
|
42
|
+
"correctedInvoice.detail.tax": "Tax rate and tax amount, or the note on an exemption",
|
|
43
|
+
"correctedInvoice.number": "Corrected invoice number",
|
|
44
|
+
"correctedInvoice.reference": "for invoice no.",
|
|
45
|
+
"correctedInvoice.referenceDate": "of",
|
|
46
|
+
// UNTDID 1001 code 384
|
|
47
|
+
"correctedInvoice.title": "Corrected invoice",
|
|
10
48
|
"creditnote.number": "Credit note number",
|
|
11
49
|
"creditnote@@introStatement": "We hereby credit the following products and services",
|
|
12
50
|
"customer.number": "Your Customer ID",
|
|
@@ -17,6 +55,10 @@ export const EN_translations = {
|
|
|
17
55
|
"empty.number.customer": "not registered",
|
|
18
56
|
empty: "not provided",
|
|
19
57
|
fax: "Fax",
|
|
58
|
+
"interest.baseRate": "base rate",
|
|
59
|
+
"interest.perYear": "a year",
|
|
60
|
+
"interest.plus": "plus",
|
|
61
|
+
"interest.points": "percentage points",
|
|
20
62
|
introStatement: "We hereby invoice the following products and services",
|
|
21
63
|
"invoice.number": "Invoice number",
|
|
22
64
|
invoice: "Invoice",
|
|
@@ -31,6 +73,14 @@ export const EN_translations = {
|
|
|
31
73
|
"payment.qr.description": "Scan the QR code with you banking app",
|
|
32
74
|
"payment.terms": "Payment Terms",
|
|
33
75
|
"payment.terms.direct": "Without deduction until",
|
|
76
|
+
"paymentReminder.deadline": "Payment deadline",
|
|
77
|
+
"paymentReminder.deadline.text": "Please pay the total payable by",
|
|
78
|
+
"paymentReminder.level": "Reminder level",
|
|
79
|
+
"paymentReminder.number": "Reminder number",
|
|
80
|
+
"paymentReminder.sum.charges": "Interest and costs",
|
|
81
|
+
"paymentReminder.sum.claims": "Outstanding claims",
|
|
82
|
+
"paymentReminder.sum.payable": "Total payable",
|
|
83
|
+
"paymentReminder@@introStatement": "The following claims are still outstanding",
|
|
34
84
|
"periodOfPerformance.day": "Delivery Date",
|
|
35
85
|
"periodOfPerformance.range": "Delivery Period",
|
|
36
86
|
phone: "Phone",
|
|
@@ -51,7 +101,8 @@ export const EN_translations = {
|
|
|
51
101
|
totalGross: "Total gross",
|
|
52
102
|
"unit.type": "Unit Type",
|
|
53
103
|
"vat.position": "on item positions",
|
|
54
|
-
|
|
104
|
+
// the words of Art. 226 Nr. 11a of the VAT Directive in its English version
|
|
105
|
+
"vat.reverseCharge.note": "Reverse charge",
|
|
55
106
|
"vat.short": "VAT",
|
|
56
107
|
"vat.yourId": "Your vat id on file",
|
|
57
108
|
vat: "Valued Added Tax",
|
|
@@ -64,7 +115,37 @@ export const DE_translations = {
|
|
|
64
115
|
"bank.iban": "IBAN",
|
|
65
116
|
"bank.institution": "Bankinstitut",
|
|
66
117
|
"bankConnection@@title": "Bankverbindung",
|
|
118
|
+
"charge.amount": "Betrag",
|
|
119
|
+
"charge.description": "Zinsen und Kosten",
|
|
120
|
+
"charge.lumpSumOffset": "Angerechnete Verzugspauschale",
|
|
121
|
+
"claim.correctedInvoice": "Rechnungsberichtigung",
|
|
122
|
+
"claim.debitnote": "Belastungsanzeige",
|
|
123
|
+
"claim.document": "Beleg",
|
|
124
|
+
"claim.dueDate": "Fällig am",
|
|
125
|
+
"claim.invoice": "Rechnung",
|
|
126
|
+
"claim.issueDate": "Datum",
|
|
127
|
+
"claim.outstanding": "Offen",
|
|
128
|
+
"claim.totalGross": "Bruttobetrag",
|
|
67
129
|
"contact@@title": "Kontaktinformationen",
|
|
130
|
+
"correctedInvoice.corrections": "Berichtigte Angaben",
|
|
131
|
+
"correctedInvoice.defect.incorrect": "berichtigt",
|
|
132
|
+
"correctedInvoice.defect.missing": "ergänzt",
|
|
133
|
+
// the details of § 14 Abs. 4 Satz 1 Nr. 1 bis 9 UStG, and § 14a UStG
|
|
134
|
+
"correctedInvoice.detail.invoiceNumber": "Rechnungsnummer",
|
|
135
|
+
"correctedInvoice.detail.issueDate": "Ausstellungsdatum",
|
|
136
|
+
"correctedInvoice.detail.netAmount": "Nach Steuersätzen und Steuerbefreiungen aufgeschlüsseltes Entgelt und im Voraus vereinbarte Minderungen",
|
|
137
|
+
"correctedInvoice.detail.parties": "Vollständiger Name und vollständige Anschrift des leistenden Unternehmers und des Leistungsempfängers",
|
|
138
|
+
"correctedInvoice.detail.retentionNote": "Hinweis auf die Aufbewahrungspflicht des Leistungsempfängers",
|
|
139
|
+
"correctedInvoice.detail.specialCaseDetail": "Angabe nach § 14a UStG",
|
|
140
|
+
"correctedInvoice.detail.supplierTaxNumber": "Steuernummer oder USt-IdNr. des leistenden Unternehmers",
|
|
141
|
+
"correctedInvoice.detail.supplyDate": "Zeitpunkt der Lieferung oder sonstigen Leistung oder der Vereinnahmung des Entgelts",
|
|
142
|
+
"correctedInvoice.detail.supplyDescription": "Menge und Art der gelieferten Gegenstände oder Umfang und Art der sonstigen Leistung",
|
|
143
|
+
"correctedInvoice.detail.tax": "Steuersatz und Steuerbetrag oder Hinweis auf die Steuerbefreiung",
|
|
144
|
+
"correctedInvoice.number": "Rechnungsberichtigung Nr.",
|
|
145
|
+
"correctedInvoice.reference": "zur Rechnung Nr.",
|
|
146
|
+
"correctedInvoice.referenceDate": "vom",
|
|
147
|
+
// § 31 Abs. 5 UStDV, Abschnitt 14.11 UStAE ("Berichtigung von Rechnungen")
|
|
148
|
+
"correctedInvoice.title": "Rechnungsberichtigung",
|
|
68
149
|
"creditnote.number": "Rechnungskorrektur-Nr.",
|
|
69
150
|
"creditnote@@introStatement": "Wir schreiben Ihnen hiermit folgende Produkte und Dienstleistungen gut",
|
|
70
151
|
"customer.number": "Ihre Kundennummer",
|
|
@@ -75,6 +156,10 @@ export const DE_translations = {
|
|
|
75
156
|
"empty.number.customer": "nicht registriert",
|
|
76
157
|
empty: "nicht angegeben",
|
|
77
158
|
fax: "Fax",
|
|
159
|
+
"interest.baseRate": "Basiszinssatz",
|
|
160
|
+
"interest.perYear": "p. a.",
|
|
161
|
+
"interest.plus": "zzgl.",
|
|
162
|
+
"interest.points": "Prozentpunkte",
|
|
78
163
|
introStatement: "Wir stellen Ihnen hiermit folgende Produkte und Dienstleistungen in Rechnung",
|
|
79
164
|
"invoice.number": "Rechnungsnr.",
|
|
80
165
|
invoice: "Rechnung",
|
|
@@ -89,6 +174,14 @@ export const DE_translations = {
|
|
|
89
174
|
"payment.qr.description": "Den QR-Code einfach mit der Banking-App einscannen",
|
|
90
175
|
"payment.terms": "Zahlungsbedingungen",
|
|
91
176
|
"payment.terms.direct": "Ohne Abzug bis zum",
|
|
177
|
+
"paymentReminder.deadline": "Zahlungsfrist",
|
|
178
|
+
"paymentReminder.deadline.text": "Bitte zahlen Sie den Gesamtbetrag bis zum",
|
|
179
|
+
"paymentReminder.level": "Mahnstufe",
|
|
180
|
+
"paymentReminder.number": "Mahnungsnr.",
|
|
181
|
+
"paymentReminder.sum.charges": "Zinsen und Kosten",
|
|
182
|
+
"paymentReminder.sum.claims": "Offene Forderungen",
|
|
183
|
+
"paymentReminder.sum.payable": "Zu zahlender Gesamtbetrag",
|
|
184
|
+
"paymentReminder@@introStatement": "Folgende Forderungen sind noch offen",
|
|
92
185
|
"periodOfPerformance.day": "Lieferdatum",
|
|
93
186
|
"periodOfPerformance.range": "Lieferzeitraum",
|
|
94
187
|
phone: "Telefon",
|
|
@@ -110,7 +203,8 @@ export const DE_translations = {
|
|
|
110
203
|
totalGross: "Gesamtbetrag brutto",
|
|
111
204
|
"unit.type": "Einheit",
|
|
112
205
|
"vat.position": "auf Positionen",
|
|
113
|
-
|
|
206
|
+
// § 14a Abs. 1 und 5 UStG
|
|
207
|
+
"vat.reverseCharge.note": REVERSE_CHARGE_STATUTORY_PHRASE_DE,
|
|
114
208
|
"vat.short": "MwSt.",
|
|
115
209
|
"vat.yourId": "Ihre hinterlegte USt-Id",
|
|
116
210
|
vat: "Umsatzsteuer",
|
|
@@ -151,4 +245,4 @@ export const translate = (languageCode, key) => {
|
|
|
151
245
|
// an unknown key renders as itself, so a missing translation is visible instead of empty
|
|
152
246
|
return found ?? key;
|
|
153
247
|
};
|
|
154
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zaGFyZWQvdHJhbnNsYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUM3QywrQ0FBK0MsQ0FBQztBQUVsRCwrRUFBK0U7QUFDL0UsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLG9CQUFvQixFQUFFLGFBQWE7SUFDbkMsVUFBVSxFQUFFLEtBQUs7SUFDakIsV0FBVyxFQUFFLE1BQU07SUFDbkIsa0JBQWtCLEVBQUUsYUFBYTtJQUNqQyx1QkFBdUIsRUFBRSxpQkFBaUI7SUFDMUMsZUFBZSxFQUFFLFFBQVE7SUFDekIsb0JBQW9CLEVBQUUsb0JBQW9CO0lBQzFDLHNCQUFzQixFQUFFLDJCQUEyQjtJQUNuRCx3QkFBd0IsRUFBRSxtQkFBbUI7SUFDN0MsaUJBQWlCLEVBQUUsWUFBWTtJQUMvQixnQkFBZ0IsRUFBRSxVQUFVO0lBQzVCLGVBQWUsRUFBRSxVQUFVO0lBQzNCLGVBQWUsRUFBRSxTQUFTO0lBQzFCLGlCQUFpQixFQUFFLE1BQU07SUFDekIsbUJBQW1CLEVBQUUsYUFBYTtJQUNsQyxrQkFBa0IsRUFBRSxhQUFhO0lBQ2pDLGdCQUFnQixFQUFFLGNBQWM7SUFDaEMsOEJBQThCLEVBQUUsbUJBQW1CO0lBQ25ELG1DQUFtQyxFQUFFLFdBQVc7SUFDaEQsaUNBQWlDLEVBQUUsVUFBVTtJQUM3Qyx1Q0FBdUMsRUFBRSxnQkFBZ0I7SUFDekQsbUNBQW1DLEVBQUUsWUFBWTtJQUNqRCxtQ0FBbUMsRUFDakMsMEZBQTBGO0lBQzVGLGlDQUFpQyxFQUMvQiw0REFBNEQ7SUFDOUQsdUNBQXVDLEVBQ3JDLGtEQUFrRDtJQUNwRCwyQ0FBMkMsRUFBRSwrQkFBK0I7SUFDNUUsMkNBQTJDLEVBQ3pDLG9EQUFvRDtJQUN0RCxvQ0FBb0MsRUFDbEMs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
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { LanguageCode } from "./translation.js";
|
|
2
|
+
/**
|
|
3
|
+
* The names of units of measure, printed in place of their codes.
|
|
4
|
+
*
|
|
5
|
+
* An EN 16931 invoice line carries its unit as a code of UN/ECE Recommendation
|
|
6
|
+
* 20, or of Recommendation 21 with the prefix "X" (BT-130, business rule
|
|
7
|
+
* BR-CL-23), and a printed invoice has to state the quantity in a unit its
|
|
8
|
+
* reader understands (§ 14 Abs. 4 Satz 1 Nr. 5 UStG). The table names the codes
|
|
9
|
+
* a small business commonly invoices in. Each English name is the
|
|
10
|
+
* Recommendation's own name, in the plural where the quantity asks for it; the
|
|
11
|
+
* German name is the customary German name of the same unit. "C62", whose
|
|
12
|
+
* Recommendation 20 name is "one", is named by its synonym "unit".
|
|
13
|
+
*
|
|
14
|
+
* A code the table does not hold, and a unit given as a word rather than a
|
|
15
|
+
* code, print as they are.
|
|
16
|
+
*/
|
|
17
|
+
/** A unit's name for a quantity of one and for any other quantity. */
|
|
18
|
+
export interface IUnitName {
|
|
19
|
+
one: string;
|
|
20
|
+
other: string;
|
|
21
|
+
}
|
|
22
|
+
/** The unit names of one language and the locale whose plural rules they follow. */
|
|
23
|
+
export interface IUnitNameTable {
|
|
24
|
+
/** BCP 47 locale that decides between the singular and the plural */
|
|
25
|
+
locale: string;
|
|
26
|
+
/** names by Recommendation 20 code, or Recommendation 21 code with the prefix "X" */
|
|
27
|
+
names: Record<string, IUnitName>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The decimals a quantity carries: those of its shortest representation, the
|
|
31
|
+
* one `String()` gives, so 12.5 has one and 1.0000001 has seven. NaN and
|
|
32
|
+
* Infinity have none. Capped at 100, the most `Intl` formats.
|
|
33
|
+
*/
|
|
34
|
+
export declare const quantityFractionDigits: (quantity: number) => number;
|
|
35
|
+
/** Unit names by document language code, keyed like `translation.languageCodeMap`. */
|
|
36
|
+
export declare const unitNameTables: Record<string, IUnitNameTable>;
|
|
37
|
+
/**
|
|
38
|
+
* The unit of a position as the document prints it: the name of a known code in
|
|
39
|
+
* the document's language, in the singular or plural the quantity asks for, and
|
|
40
|
+
* anything else as it is. The plural rules see every decimal the quantity
|
|
41
|
+
* carries, so 1.0001 hours are "hours", not "hour". A language without its own names takes the English
|
|
42
|
+
* ones, as `translation.translate()` does for every other word.
|
|
43
|
+
*/
|
|
44
|
+
export declare const unitName: (languageCode: LanguageCode | undefined, unitType: string, quantity: number) => string;
|