@design.estate/dees-document 3.2.0 → 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.
@@ -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.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=
@@ -8,3 +8,5 @@ export { translation };
8
8
  export * from "./accountingdoc.js";
9
9
  export * from "./demoletter.js";
10
10
  export * from "./paymentcode.js";
11
+ export * from "./paymentreminder.js";
12
+ export * from "./unitnames.js";
@@ -11,4 +11,6 @@ export { translation };
11
11
  export * from "./accountingdoc.js";
12
12
  export * from "./demoletter.js";
13
13
  export * from "./paymentcode.js";
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zaGFyZWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLGdCQUFnQjtBQUN2QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZTtBQUN0RCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYTtBQUVqRCxNQUFNLFVBQVUsTUFBTSxDQUFDLEtBQWE7SUFDbEMsT0FBTyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxPQUFPLEtBQUssVUFBVSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUV0QixPQUFPLEtBQUssV0FBVyxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUV2QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxrQkFBa0IsQ0FBQyJ9
14
+ export * from "./paymentreminder.js";
15
+ export * from "./unitnames.js";
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zaGFyZWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLGdCQUFnQjtBQUN2QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZTtBQUN0RCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYTtBQUVqRCxNQUFNLFVBQVUsTUFBTSxDQUFDLEtBQWE7SUFDbEMsT0FBTyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxPQUFPLEtBQUssVUFBVSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUV0QixPQUFPLEtBQUssV0FBVyxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUV2QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsZ0JBQWdCLENBQUMifQ==
@@ -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=
@@ -14,7 +14,35 @@ export declare const EN_translations: {
14
14
  "bank.iban": string;
15
15
  "bank.institution": string;
16
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;
17
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;
18
46
  "creditnote.number": string;
19
47
  "creditnote@@introStatement": string;
20
48
  "customer.number": string;
@@ -25,6 +53,10 @@ export declare const EN_translations: {
25
53
  "empty.number.customer": string;
26
54
  empty: string;
27
55
  fax: string;
56
+ "interest.baseRate": string;
57
+ "interest.perYear": string;
58
+ "interest.plus": string;
59
+ "interest.points": string;
28
60
  introStatement: string;
29
61
  "invoice.number": string;
30
62
  invoice: string;
@@ -39,6 +71,14 @@ export declare const EN_translations: {
39
71
  "payment.qr.description": string;
40
72
  "payment.terms": string;
41
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;
42
82
  "periodOfPerformance.day": string;
43
83
  "periodOfPerformance.range": string;
44
84
  phone: string;
@@ -15,7 +15,36 @@ export const EN_translations = {
15
15
  "bank.iban": "iban",
16
16
  "bank.institution": "institution",
17
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",
18
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",
19
48
  "creditnote.number": "Credit note number",
20
49
  "creditnote@@introStatement": "We hereby credit the following products and services",
21
50
  "customer.number": "Your Customer ID",
@@ -26,6 +55,10 @@ export const EN_translations = {
26
55
  "empty.number.customer": "not registered",
27
56
  empty: "not provided",
28
57
  fax: "Fax",
58
+ "interest.baseRate": "base rate",
59
+ "interest.perYear": "a year",
60
+ "interest.plus": "plus",
61
+ "interest.points": "percentage points",
29
62
  introStatement: "We hereby invoice the following products and services",
30
63
  "invoice.number": "Invoice number",
31
64
  invoice: "Invoice",
@@ -40,6 +73,14 @@ export const EN_translations = {
40
73
  "payment.qr.description": "Scan the QR code with you banking app",
41
74
  "payment.terms": "Payment Terms",
42
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",
43
84
  "periodOfPerformance.day": "Delivery Date",
44
85
  "periodOfPerformance.range": "Delivery Period",
45
86
  phone: "Phone",
@@ -74,7 +115,37 @@ export const DE_translations = {
74
115
  "bank.iban": "IBAN",
75
116
  "bank.institution": "Bankinstitut",
76
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",
77
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",
78
149
  "creditnote.number": "Rechnungskorrektur-Nr.",
79
150
  "creditnote@@introStatement": "Wir schreiben Ihnen hiermit folgende Produkte und Dienstleistungen gut",
80
151
  "customer.number": "Ihre Kundennummer",
@@ -85,6 +156,10 @@ export const DE_translations = {
85
156
  "empty.number.customer": "nicht registriert",
86
157
  empty: "nicht angegeben",
87
158
  fax: "Fax",
159
+ "interest.baseRate": "Basiszinssatz",
160
+ "interest.perYear": "p. a.",
161
+ "interest.plus": "zzgl.",
162
+ "interest.points": "Prozentpunkte",
88
163
  introStatement: "Wir stellen Ihnen hiermit folgende Produkte und Dienstleistungen in Rechnung",
89
164
  "invoice.number": "Rechnungsnr.",
90
165
  invoice: "Rechnung",
@@ -99,6 +174,14 @@ export const DE_translations = {
99
174
  "payment.qr.description": "Den QR-Code einfach mit der Banking-App einscannen",
100
175
  "payment.terms": "Zahlungsbedingungen",
101
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",
102
185
  "periodOfPerformance.day": "Lieferdatum",
103
186
  "periodOfPerformance.range": "Lieferzeitraum",
104
187
  phone: "Telefon",
@@ -162,4 +245,4 @@ export const translate = (languageCode, key) => {
162
245
  // an unknown key renders as itself, so a missing translation is visible instead of empty
163
246
  return found ?? key;
164
247
  };
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zaGFyZWQvdHJhbnNsYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUM3QywrQ0FBK0MsQ0FBQztBQUVsRCwrRUFBK0U7QUFDL0UsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLG9CQUFvQixFQUFFLGFBQWE7SUFDbkMsVUFBVSxFQUFFLEtBQUs7SUFDakIsV0FBVyxFQUFFLE1BQU07SUFDbkIsa0JBQWtCLEVBQUUsYUFBYTtJQUNqQyx1QkFBdUIsRUFBRSxpQkFBaUI7SUFDMUMsZ0JBQWdCLEVBQUUsY0FBYztJQUNoQyxtQkFBbUIsRUFBRSxvQkFBb0I7SUFDekMsNEJBQTRCLEVBQzFCLHNEQUFzRDtJQUN4RCxpQkFBaUIsRUFBRSxrQkFBa0I7SUFDckMsa0JBQWtCLEVBQUUsbUJBQW1CO0lBQ3ZDLDJCQUEyQixFQUN6QixtRUFBbUU7SUFDckUsV0FBVyxFQUFFLGFBQWE7SUFDMUIsWUFBWSxFQUFFLGtCQUFrQjtJQUNoQyx1QkFBdUIsRUFBRSxnQkFBZ0I7SUFDekMsS0FBSyxFQUFFLGNBQWM7SUFDckIsR0FBRyxFQUFFLEtBQUs7SUFDVixjQUFjLEVBQUUsdURBQXVEO0lBQ3ZFLGdCQUFnQixFQUFFLGdCQUFnQjtJQUNsQyxPQUFPLEVBQUUsU0FBUztJQUNsQixlQUFlLEVBQUUsTUFBTTtJQUN2QixJQUFJLEVBQUUsTUFBTTtJQUNaLGdCQUFnQixFQUFFLE9BQU87SUFDekIsbUJBQW1CLEVBQUUsbUJBQW1CO0lBQ3hDLFlBQVksRUFBRSwwQ0FBMEM7SUFDeEQsSUFBSSxFQUFFLE1BQU07SUFDWixNQUFNLEVBQUUsSUFBSTtJQUNaLFlBQVksRUFBRSxpQkFBaUI7SUFDL0Isd0JBQXdCLEVBQUUsdUNBQXVDO0lBQ2pFLGVBQWUsRUFB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
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;
@@ -0,0 +1,103 @@
1
+ const EN_unitNames = {
2
+ locale: "en",
3
+ names: {
4
+ // counts
5
+ C62: { one: "unit", other: "units" },
6
+ H87: { one: "piece", other: "pieces" },
7
+ XPP: { one: "piece", other: "pieces" },
8
+ PR: { one: "pair", other: "pairs" },
9
+ E48: { one: "service unit", other: "service units" },
10
+ LS: { one: "lump sum", other: "lump sums" },
11
+ // time
12
+ MIN: { one: "minute", other: "minutes" },
13
+ HUR: { one: "hour", other: "hours" },
14
+ DAY: { one: "day", other: "days" },
15
+ WEE: { one: "week", other: "weeks" },
16
+ MON: { one: "month", other: "months" },
17
+ ANN: { one: "year", other: "years" },
18
+ // mass
19
+ GRM: { one: "gram", other: "grams" },
20
+ KGM: { one: "kilogram", other: "kilograms" },
21
+ TNE: { one: "tonne", other: "tonnes" },
22
+ // length, area, volume
23
+ MTR: { one: "metre", other: "metres" },
24
+ KMT: { one: "kilometre", other: "kilometres" },
25
+ MTK: { one: "square metre", other: "square metres" },
26
+ MTQ: { one: "cubic metre", other: "cubic metres" },
27
+ LTR: { one: "litre", other: "litres" },
28
+ // energy
29
+ KWH: { one: "kilowatt hour", other: "kilowatt hours" },
30
+ },
31
+ };
32
+ const DE_unitNames = {
33
+ locale: "de",
34
+ names: {
35
+ // counts
36
+ C62: { one: "Einheit", other: "Einheiten" },
37
+ H87: { one: "Stück", other: "Stück" },
38
+ XPP: { one: "Stück", other: "Stück" },
39
+ PR: { one: "Paar", other: "Paar" },
40
+ E48: { one: "Leistungseinheit", other: "Leistungseinheiten" },
41
+ LS: { one: "Pauschale", other: "Pauschalen" },
42
+ // time
43
+ MIN: { one: "Minute", other: "Minuten" },
44
+ HUR: { one: "Stunde", other: "Stunden" },
45
+ DAY: { one: "Tag", other: "Tage" },
46
+ WEE: { one: "Woche", other: "Wochen" },
47
+ MON: { one: "Monat", other: "Monate" },
48
+ ANN: { one: "Jahr", other: "Jahre" },
49
+ // mass
50
+ GRM: { one: "Gramm", other: "Gramm" },
51
+ KGM: { one: "Kilogramm", other: "Kilogramm" },
52
+ TNE: { one: "Tonne", other: "Tonnen" },
53
+ // length, area, volume
54
+ MTR: { one: "Meter", other: "Meter" },
55
+ KMT: { one: "Kilometer", other: "Kilometer" },
56
+ MTK: { one: "Quadratmeter", other: "Quadratmeter" },
57
+ MTQ: { one: "Kubikmeter", other: "Kubikmeter" },
58
+ LTR: { one: "Liter", other: "Liter" },
59
+ // energy
60
+ KWH: { one: "Kilowattstunde", other: "Kilowattstunden" },
61
+ },
62
+ };
63
+ /**
64
+ * The decimals a quantity carries: those of its shortest representation, the
65
+ * one `String()` gives, so 12.5 has one and 1.0000001 has seven. NaN and
66
+ * Infinity have none. Capped at 100, the most `Intl` formats.
67
+ */
68
+ export const quantityFractionDigits = (quantity) => {
69
+ const digits = /^(\d+)(?:\.(\d+))?(?:e([+-]\d+))?$/.exec(String(Math.abs(quantity)));
70
+ if (!digits) {
71
+ return 0;
72
+ }
73
+ return Math.min(100, Math.max(0, (digits[2] ?? "").length - Number(digits[3] ?? 0)));
74
+ };
75
+ /** Unit names by document language code, keyed like `translation.languageCodeMap`. */
76
+ export const unitNameTables = {
77
+ EN: EN_unitNames,
78
+ DE: DE_unitNames,
79
+ };
80
+ /**
81
+ * The unit of a position as the document prints it: the name of a known code in
82
+ * the document's language, in the singular or plural the quantity asks for, and
83
+ * anything else as it is. The plural rules see every decimal the quantity
84
+ * carries, so 1.0001 hours are "hours", not "hour". A language without its own names takes the English
85
+ * ones, as `translation.translate()` does for every other word.
86
+ */
87
+ export const unitName = (languageCode, unitType, quantity) => {
88
+ const table = (languageCode && unitNameTables[languageCode]) || EN_unitNames;
89
+ const name = Object.hasOwn(table.names, unitType)
90
+ ? table.names[unitType]
91
+ : undefined;
92
+ if (!name) {
93
+ return unitType;
94
+ }
95
+ const fractionDigits = quantityFractionDigits(quantity);
96
+ return new Intl.PluralRules(table.locale, {
97
+ minimumFractionDigits: fractionDigits,
98
+ maximumFractionDigits: fractionDigits,
99
+ }).select(quantity) === "one"
100
+ ? name.one
101
+ : name.other;
102
+ };
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdG5hbWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfc2hhcmVkL3VuaXRuYW1lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQ0EsTUFBTSxZQUFZLEdBQW1CO0lBQ25DLE1BQU0sRUFBRSxJQUFJO0lBQ1osS0FBSyxFQUFFO1FBQ0wsU0FBUztRQUNULEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtRQUNwQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7UUFDdEMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO1FBQ3RDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtRQUNuQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUU7UUFDcEQsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO1FBQzNDLE9BQU87UUFDUCxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7UUFDeEMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO1FBQ3BDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtRQUNsQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7UUFDcEMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO1FBQ3RDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVB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
@@ -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.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsOEJBQThCO0lBQ3BDLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFdBQVcsRUFBRSx1TEFBdUw7Q0FDck0sQ0FBQSJ9
@@ -19,6 +19,10 @@ export declare class DeContentInvoice extends DeesElement {
19
19
  * gates the number row and the period row of the letterhead.
20
20
  */
21
21
  private get accountingDoc();
22
+ /** The payment reminder this content prints, or null. */
23
+ private get paymentReminder();
24
+ /** The currency of the letter's amounts: an accounting document's or a reminder's. */
25
+ private get currency();
22
26
  /**
23
27
  * The document builds this element for every letter; one that is no
24
28
  * accounting document, and one of a type this version does not know, keep
@@ -35,6 +39,18 @@ export declare class DeContentInvoice extends DeesElement {
35
39
  * an unknown or missing currency falls back to a plain decimal number.
36
40
  */
37
41
  protected formatPrice(value: number): string;
42
+ /**
43
+ * Formats a quantity in the document's language with every decimal it
44
+ * carries: 12.5 prints as "12,5" in German and "12.5" in English, and no
45
+ * stated quantity is rounded. The decimals are those of the shortest
46
+ * representation of the number, the one `String()` gives, as the unit name
47
+ * counts them for its singular or plural.
48
+ */
49
+ protected formatQuantity(quantityArg: number): string;
50
+ /** Formats a rate in percent, with as many decimals as it states, up to four. */
51
+ protected formatPercent(percentArg: number): string;
52
+ /** Formats a day in the document's language and date style. */
53
+ protected formatDay(timestampArg: number): string;
38
54
  getTotalNet: () => number;
39
55
  getTotalGross: () => number;
40
56
  getVatGroups: () => {
@@ -58,7 +74,10 @@ export declare class DeContentInvoice extends DeesElement {
58
74
  * Apply pre-computed pagination offsets for thumbnail rendering
59
75
  */
60
76
  private applyOffsetTrimming;
61
- /** The due date, which only an accounting document has: it counts from its date. */
77
+ /**
78
+ * The due date, which only an accounting document and a payment reminder
79
+ * have: it counts `dueInDays` from the letter's date.
80
+ */
62
81
  private renderPaymentTerms;
63
82
  /**
64
83
  * The QR pay box. It is printed only when the payment has a valid EPC QR
@@ -77,6 +96,14 @@ export declare class DeContentInvoice extends DeesElement {
77
96
  * Directive (2006/112/EC).
78
97
  */
79
98
  private renderReverseChargeNote;
99
+ /**
100
+ * What makes a corrected invoice a correction (§ 31 Abs. 5 UStDV): its
101
+ * title, the invoice it corrects by number and issue date when the document
102
+ * states them ("spezifisch und eindeutig", Satz 2), and the details it
103
+ * supplies or corrects, in words. A received corrected invoice may name
104
+ * neither; then only the title is printed, and no reference is made up.
105
+ */
106
+ private renderCorrection;
80
107
  /** The earlier documents a correction answers, by number and, when known, by date. */
81
108
  private renderRelatedDocuments;
82
109
  /**
@@ -86,6 +113,51 @@ export declare class DeContentInvoice extends DeesElement {
86
113
  * paragraph in one piece could be taller than a page and would never fit.
87
114
  */
88
115
  private renderNotes;
116
+ /**
117
+ * The document a reminder claims, as the claims table and the charges name
118
+ * it: its kind and its number.
119
+ */
120
+ private claimLabel;
121
+ /**
122
+ * The ground of the claim: every reminded document with its number, its
123
+ * date, the date it fell due when it stated one, its gross total and what is
124
+ * still open on it.
125
+ */
126
+ private renderReminderClaims;
127
+ /**
128
+ * What a charge rests on, as the reminder states it: default interest its
129
+ * computation (principal, rate a year with the base rate and the surcharge
130
+ * points of § 288 Abs. 1 or 2 BGB, first and last day), the default lump sum
131
+ * its provision, and every charge the claim it accrues on. A cost with lump
132
+ * sums credited against it lists them (§ 288 Abs. 5 Satz 3 BGB); its amount
133
+ * is already the cost less them.
134
+ */
135
+ private renderChargeBasis;
136
+ /** One row per charge: its description, what it rests on, and its amount. */
137
+ private renderReminderCharges;
138
+ /** The sums of a reminder: the open claims, the charges and the total payable, without VAT. */
139
+ private renderReminderSums;
140
+ /**
141
+ * A payment reminder: the issuer's intro or the standard one, the reminded
142
+ * documents, the charges, the sums, the notes, the new payment deadline and
143
+ * the QR pay box for the total payable with the reminder's number.
144
+ */
145
+ private renderPaymentReminder;
89
146
  private renderReferencedContract;
90
147
  attachInvoiceDom(): Promise<void>;
148
+ /**
149
+ * Sizes the columns of a table to their widest cell. Every row is a grid of
150
+ * its own, so the rows only line up when a column has one width for all of
151
+ * them; each page renders every row before it is trimmed, so every page
152
+ * measures the same widths.
153
+ *
154
+ * A column is never narrower than its minimum. The widths the columns ask
155
+ * for beyond their minimums are granted out of the row's width less its
156
+ * fixed columns and the minimum of its flexible column (the description),
157
+ * in equal shares, so the table always fits the page. A cell whose text is
158
+ * still wider than its column, such as an amount beyond hundreds of
159
+ * billions, is set in a smaller font, down to 8 px, and wraps inside its
160
+ * column once that is not enough, so it never runs into its neighbour.
161
+ */
162
+ private fitColumns;
91
163
  }