@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.
@@ -204,6 +204,18 @@ let DeDocument = (() => {
204
204
  cleanupStore = [];
205
205
  paginationInfo = [];
206
206
  async renderDocument() {
207
+ // a document whose advance payments do not add up to its paid amount is
208
+ // refused: no page of it, and none of the letter before it, stays on screen
209
+ try {
210
+ plugins.shared.assertPaidAmountMatchesAdvancePayments(this.letterData);
211
+ }
212
+ catch (error) {
213
+ this.latestDocumentSettings = this.documentSettings;
214
+ this.latestRenderedLetterData = this.letterData;
215
+ this.paginationInfo = [];
216
+ this.shadowRoot?.querySelector(".documentContainer")?.replaceChildren();
217
+ throw error;
218
+ }
207
219
  this.latestDocumentSettings = this.documentSettings;
208
220
  this.latestRenderedLetterData = this.letterData;
209
221
  this.paginationInfo = [];
@@ -371,4 +383,4 @@ let DeDocument = (() => {
371
383
  return DeDocument = _classThis;
372
384
  })();
373
385
  export { DeDocument };
374
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvZG9jdW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsUUFBUSxFQUNSLElBQUksRUFDSixhQUFhLEVBRWIsR0FBRyxFQUNILFFBQVEsR0FDVCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUNsQztJQUNFLGtCQUFrQixFQUFFLElBQUk7SUFDeEIsbUJBQW1CLEVBQUUsSUFBSTtJQUN6QixtQkFBbUIsRUFBRSxJQUFJO0lBQ3pCLGVBQWUsRUFBRSxJQUFJO0lBQ3JCLCtCQUErQixFQUFFLElBQUk7SUFDckMsWUFBWSxFQUFFLElBQUk7SUFDbEIsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QixTQUFTLEVBQUUsT0FBTztDQUNuQixDQUFDO0FBRUosT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7SUFlakMsVUFBVTs0QkFEdEIsYUFBYSxDQUFDLHVCQUF1QixDQUFDOzs7O3NCQUNQLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBQW5CLFNBQVEsV0FBVzs7OztrQ0FHeEMsUUFBUSxDQUFDO29CQUNSLElBQUksRUFBRSxNQUFNO29CQUNaLE9BQU8sRUFBRSxJQUFJO2lCQUNkLENBQUM7cUNBR0QsUUFBUSxDQUFDO29CQUNSLElBQUksRUFBRSxNQUFNO29CQUNaLE9BQU8sRUFBRSxJQUFJO2lCQUNkLENBQUM7c0NBR0QsUUFBUSxDQUFDO29CQUNSLElBQUksRUFB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
386
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvZG9jdW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsUUFBUSxFQUNSLElBQUksRUFDSixhQUFhLEVBRWIsR0FBRyxFQUNILFFBQVEsR0FDVCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUNsQztJQUNFLGtCQUFrQixFQUFFLElBQUk7SUFDeEIsbUJBQW1CLEVBQUUsSUFBSTtJQUN6QixtQkFBbUIsRUFBRSxJQUFJO0lBQ3pCLGVBQWUsRUFBRSxJQUFJO0lBQ3JCLCtCQUErQixFQUFFLElBQUk7SUFDckMsWUFBWSxFQUFFLElBQUk7SUFDbEIsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QixTQUFTLEVBQUUsT0FBTztDQUNuQixDQUFDO0FBRUosT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7SUFlakMsVUFBVTs0QkFEdEIsYUFBYSxDQUFDLHVCQUF1QixDQUFDOzs7O3NCQUNQLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBQW5CLFNBQVEsV0FBVzs7OztrQ0FHeEMsUUFBUSxDQUFDO29CQUNSLElBQUksRUFBRSxNQUFNO29CQUNaLE9BQU8sRUFBRSxJQUFJO2lCQUNkLENBQUM7cUNBR0QsUUFBUSxDQUFDO29CQUNSLElBQUksRUFBRSxNQUFNO29CQUNaLE9BQU8sRUFBRSxJQUFJO2lCQUNkLENBQUM7c0NBR0QsUUFBUSxDQUFDO29CQUNSLElBQUksRUFB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
@@ -22,6 +22,8 @@ export declare class DeLetterHeader extends DeesElement {
22
22
  private get accountingDoc();
23
23
  /** The number row, under the label of the document type. */
24
24
  private renderDocumentNumber;
25
+ /** A reminder's number and, when the issuer counts its reminders, its level. */
26
+ private renderPaymentReminderNumber;
25
27
  /** The period of performance row, gated like the number row. */
26
28
  private renderPeriodOfPerformance;
27
29
  render(): TemplateResult;
@@ -38,6 +38,7 @@ import { dedocumentSharedStyle } from "../style.js";
38
38
  /** The label of the document number, per accounting document type. */
39
39
  const documentNumberLabels = {
40
40
  invoice: "letterhead@@invoice.number",
41
+ "corrected-invoice": "letterhead@@correctedInvoice.number",
41
42
  creditnote: "letterhead@@creditnote.number",
42
43
  debitnote: "letterhead@@debitnote.number",
43
44
  "self-billed-invoice": "letterhead@@selfBilledInvoice.number",
@@ -167,6 +168,9 @@ let DeLetterHeader = (() => {
167
168
  }
168
169
  /** The number row, under the label of the document type. */
169
170
  renderDocumentNumber() {
171
+ if (plugins.shared.isPaymentReminder(this.letterData)) {
172
+ return this.renderPaymentReminderNumber(this.letterData);
173
+ }
170
174
  const accountingDoc = this.accountingDoc;
171
175
  if (!accountingDoc?.id)
172
176
  return null;
@@ -178,6 +182,21 @@ let DeLetterHeader = (() => {
178
182
  </div>
179
183
  ${accountingDoc.id}`;
180
184
  }
185
+ /** A reminder's number and, when the issuer counts its reminders, its level. */
186
+ renderPaymentReminderNumber(reminderArg) {
187
+ return html `${reminderArg.id
188
+ ? html `<div class="label">
189
+ ${plugins.shared.translation.translate(this.documentSettings.languageCode, "letterhead@@paymentReminder.number")}
190
+ </div>
191
+ ${reminderArg.id}`
192
+ : null}
193
+ ${reminderArg.reminderLevel !== undefined
194
+ ? html `<div class="label">
195
+ ${plugins.shared.translation.translate(this.documentSettings.languageCode, "letterhead@@paymentReminder.level")}
196
+ </div>
197
+ ${reminderArg.reminderLevel}`
198
+ : null}`;
199
+ }
181
200
  /** The period of performance row, gated like the number row. */
182
201
  renderPeriodOfPerformance() {
183
202
  const periodOfPerformance = this.accountingDoc?.periodOfPerformance;
@@ -254,4 +273,4 @@ let DeLetterHeader = (() => {
254
273
  return DeLetterHeader = _classThis;
255
274
  })();
256
275
  export { DeLetterHeader };
257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV0dGVyaGVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViL2VsZW1lbnRzL2xldHRlcmhlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxRQUFRLEVBQ1IsSUFBSSxFQUNKLGFBQWEsRUFFYixHQUFHLEVBQ0gsU0FBUyxFQUNULFFBQVEsR0FDVCxNQUFNLDZCQUE2QixDQUFDO0FBRXJDLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQVFwRCxzRUFBc0U7QUFDdEUsTUFBTSxvQkFBb0IsR0FHdEI7SUFDRixPQUFPLEVBQUUsNEJBQTRCO0lBQ3JDLFVBQVUsRUFBRSwrQkFBK0I7SUFDM0MsU0FBUyxFQUFFLDhCQUE4QjtJQUN6QyxxQkFBcUIsRUFBRSxzQ0FBc0M7Q0FDOUQsQ0FBQztJQUdXLGNBQWM7NEJBRDFCLGFBQWEsQ0FBQyx5QkFBeUIsQ0FBQzs7OztzQkFDTCxXQUFXOzs7Ozs7Ozs7Ozs7OzhCQUFuQixTQUFRLFdBQVc7Ozs7c0NBUTVDLFFBQVEsQ0FBQztvQkFDUixJQUFJLEVBQUUsTUFBTTtvQkFDWixPQUFPLEVBQUUsSUFBSTtpQkFDZCxDQUFDO3NDQUdELFFBQVEsQ0FBQztvQkFDUixJQUFJLEVBQUUsTUFBTTtvQkFDWixPQUFPLEVBQUUsSUFBSTtpQkFDZCxDQUFDOzJDQUdELFFBQVEsQ0FBQztvQkFDUixJQUFJLEVBQUUsTUFBTTtvQkFDWixPQUFPLEVBQUUsSUFBSTtpQkFDZCxDQUFDOzRDQUdELFFBQVEsQ0FBQztvQkFDUixJQUFJLEVBQUUsTUFBTTtvQkFDWixPQUFPLEVBQUUsSUFBSTtpQkFDZCxDQUFDO1lBakJGLG1MQUFTLFVBQVUsNkJBQVYsVUFBVSwrRkFBb0M7WUFNdkQsbUxBQVMsVUFBVSw2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
276
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV0dGVyaGVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViL2VsZW1lbnRzL2xldHRlcmhlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxRQUFRLEVBQ1IsSUFBSSxFQUNKLGFBQWEsRUFFYixHQUFHLEVBQ0gsU0FBUyxFQUNULFFBQVEsR0FDVCxNQUFNLDZCQUE2QixDQUFDO0FBRXJDLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQVFwRCxzRUFBc0U7QUFDdEUsTUFBTSxvQkFBb0IsR0FHdEI7SUFDRixPQUFPLEVBQUUsNEJBQTRCO0lBQ3JDLG1CQUFtQixFQUFFLHFDQUFxQztJQUMxRCxVQUFVLEVBQUUsK0JBQStCO0lBQzNDLFNBQVMsRUFBRSw4QkFBOEI7SUFDekMscUJBQXFCLEVBQUUsc0NBQXNDO0NBQzlELENBQUM7SUFHVyxjQUFjOzRCQUQxQixhQUFhLENBQUMseUJBQXlCLENBQUM7Ozs7c0JBQ0wsV0FBVzs7Ozs7Ozs7Ozs7Ozs4QkFBbkIsU0FBUSxXQUFXOzs7O3NDQVE1QyxRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLE1BQU07b0JBQ1osT0FBTyxFQUFFLElBQUk7aUJBQ2QsQ0FBQztzQ0FHRCxRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLE1BQU07b0JBQ1osT0FBTyxFQUFFLElBQUk7aUJBQ2QsQ0FBQzsyQ0FHRCxRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLE1BQU07b0JBQ1osT0FBTyxFQUFFLElBQUk7aUJBQ2QsQ0FBQzs0Q0FHRCxRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLE1BQU07b0JBQ1osT0FBTyxFQUFFLElBQUk7aUJBQ2QsQ0FBQztZQWpCRixtTEFBUyxVQUFVLDZCQUFWLFVBQVUs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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@design.estate/dees-document",
3
- "version": "3.2.0",
3
+ "version": "3.4.0",
4
4
  "private": false,
5
5
  "description": "A sophisticated framework for dynamically generating and rendering business documents like invoices with modern web technologies, featuring PDF creation, templating, and automation.",
6
6
  "main": "dist_ts_web/index.js",
@@ -25,7 +25,7 @@
25
25
  "@push.rocks/smartpath": "^6.0.0",
26
26
  "@push.rocks/smartpdf": "^5.0.2",
27
27
  "@push.rocks/smarttime": "^4.2.3",
28
- "@tsclass/tsclass": "^9.6.0",
28
+ "@tsclass/tsclass": "^9.10.0",
29
29
  "@types/qrcode": "^1.5.6",
30
30
  "qrcode": "^1.5.4"
31
31
  },
package/readme.md CHANGED
@@ -99,7 +99,7 @@ const invoice: finance.TInvoice = {
99
99
  name: 'Web Development Services',
100
100
  unitQuantity: 40,
101
101
  unitNetPrice: 95,
102
- unitType: 'hours',
102
+ unitType: 'HUR', // UN/ECE Recommendation 20: hour
103
103
  vatPercentage: 19,
104
104
  position: 1,
105
105
  },
@@ -107,7 +107,7 @@ const invoice: finance.TInvoice = {
107
107
  name: 'Hosting (Annual)',
108
108
  unitQuantity: 1,
109
109
  unitNetPrice: 299,
110
- unitType: 'item',
110
+ unitType: 'ANN', // UN/ECE Recommendation 20: year
111
111
  vatPercentage: 19,
112
112
  position: 2,
113
113
  },
@@ -222,7 +222,7 @@ import { PdfService } from '@design.estate/dees-document/node';
222
222
  import '@design.estate/dees-document/web';
223
223
 
224
224
  // Shared utilities and types
225
- import { isAccountingDoc, translation, interfaces } from '@design.estate/dees-document/shared';
225
+ import { isAccountingDoc, isPaymentReminder, translation, unitName, interfaces } from '@design.estate/dees-document/shared';
226
226
 
227
227
  // TypeScript interfaces
228
228
  import type { IDocumentSettings } from '@design.estate/dees-document/interfaces';
@@ -251,13 +251,14 @@ The framework includes these web components:
251
251
  | `accountingDocType` | Intro sentence | Payment terms and QR pay box | `relatedDocuments` |
252
252
  |---------------------|----------------|------------------------------|--------------------|
253
253
  | `invoice` | invoices the positions | printed | not printed |
254
+ | `corrected-invoice` | invoices the positions, after the correction block | printed | not printed: the corrected invoice is named in the correction block |
254
255
  | `creditnote` | credits the positions | omitted: the recipient owes nothing | printed |
255
256
  | `debitnote` | charges the positions additionally | printed | printed |
256
257
  | `self-billed-invoice` | settles what the recipient supplied | omitted: the issuer is the payer | not printed |
257
258
 
258
259
  ### Handing an accounting document over
259
260
 
260
- Every accounting document is a letter: from `@tsclass/tsclass` 9.6.0 on, `business.TLetter` is a simple letter or any `finance.TAccountingDoc`. A credit note therefore goes straight into `PdfService.createPdfFromLetterObject()`, into `<dedocument-dedocument>` and into `<dedocument-viewer>` — no cast on the way in. A credit note names the document it corrects, so fill `relatedDocuments` with the number and, when known, the issue date of that document:
261
+ Every accounting document is a letter: from `@tsclass/tsclass` 9.6.0 on, `business.TLetter` is a simple letter or any `finance.TAccountingDoc`, and from 9.7.0 on a payment reminder as well (see [Payment Reminders](#payment-reminders)). A credit note therefore goes straight into `PdfService.createPdfFromLetterObject()`, into `<dedocument-dedocument>` and into `<dedocument-viewer>` — no cast on the way in. A credit note names the document it corrects, so fill `relatedDocuments` with the number and, when known, the issue date of that document:
261
262
 
262
263
  ```typescript
263
264
  import { PdfService } from '@design.estate/dees-document';
@@ -305,6 +306,29 @@ if (isAccountingDoc(letter)) {
305
306
 
306
307
  A letter that is no accounting document prints neither a number, nor a period of performance, nor payment terms and the QR pay box. It is still laid out as an invoice: the invoice intro sentence and an empty positions table with zero sums are printed. Rendering simple-letter content is not supported by this version.
307
308
 
309
+ ### Corrected invoices
310
+
311
+ An invoice that lacked a mandatory detail or stated one incorrectly is corrected by a document that refers to it specifically and unambiguously (§ 31 Abs. 5 UStDV). `finance.TCorrectedInvoice` (`accountingDocType: 'corrected-invoice'`, from `@tsclass/tsclass` 9.8.0 on; UNTDID 1001 code 384) is that document, and it prints as a complete invoice: every position, the totals, the payment terms and the QR pay box. The letterhead labels its number "Rechnungsberichtigung Nr." / "Corrected invoice number", and above the positions it prints:
312
+
313
+ - the title with the reference: "Rechnungsberichtigung zur Rechnung Nr. RE-2025-0042 vom 10.01.25" / "Corrected invoice for invoice no. RE-2025-0042 of 1/10/25", from `correctedInvoice.documentId` and `correctedInvoice.issueDate`;
314
+ - "Berichtigte Angaben:" / "Corrected details:" and one line per entry of `corrections`: the detail of § 14 Abs. 4 Satz 1 Nr. 1 to 9 UStG (or § 14a UStG) in words, and whether it was supplied ("ergänzt", `defect: 'missing'`) or corrected ("berichtigt", `defect: 'incorrect'`).
315
+
316
+ A corrected invoice you issue states both. A received one may state neither, or the number without the date; then only the title, or the title with the number, is printed, and no reference is made up.
317
+
318
+ ```typescript
319
+ const correctedInvoice: finance.TCorrectedInvoice = {
320
+ ...invoice, // a complete invoice with its own number
321
+ accountingDocType: 'corrected-invoice',
322
+ accountingDocId: 'RE-2025-0043',
323
+ id: 'RE-2025-0043',
324
+ correctedInvoice: { documentId: 'RE-2025-0042', issueDate },
325
+ corrections: [
326
+ { detail: 'supplier-tax-number', defect: 'missing' },
327
+ { detail: 'tax', defect: 'incorrect' },
328
+ ],
329
+ };
330
+ ```
331
+
308
332
  ### Notes
309
333
 
310
334
  Every accounting document type prints `notes` below the totals and above the payment terms: each non-empty note as its own paragraph, in array order. A note is plain text. Its line breaks are kept, markup is printed as typed, and empty or whitespace-only notes are skipped. A long note flows across pages like the positions do.
@@ -319,14 +343,102 @@ const invoice = {
319
343
  };
320
344
  ```
321
345
 
346
+ ### Units
347
+
348
+ A position's `unitType` is the unit code of EN 16931 (BT-130): a code of UN/ECE Recommendation 20, or of Recommendation 21 with the prefix `X` (business rule BR-CL-23). An invoice states the quantity and the unit in words its reader understands (§ 14 Abs. 4 Satz 1 Nr. 5 UStG), so the positions print the unit's name in the document's language instead of the code, in the singular for a quantity of one and in the plural for any other quantity:
349
+
350
+ | Code | English | German |
351
+ |------|---------|--------|
352
+ | `C62` | unit / units | Einheit / Einheiten |
353
+ | `H87`, `XPP` | piece / pieces | Stück |
354
+ | `PR` | pair / pairs | Paar |
355
+ | `E48` | service unit / service units | Leistungseinheit / Leistungseinheiten |
356
+ | `LS` | lump sum / lump sums | Pauschale / Pauschalen |
357
+ | `MIN` | minute / minutes | Minute / Minuten |
358
+ | `HUR` | hour / hours | Stunde / Stunden |
359
+ | `DAY` | day / days | Tag / Tage |
360
+ | `WEE` | week / weeks | Woche / Wochen |
361
+ | `MON` | month / months | Monat / Monate |
362
+ | `ANN` | year / years | Jahr / Jahre |
363
+ | `GRM` | gram / grams | Gramm |
364
+ | `KGM` | kilogram / kilograms | Kilogramm |
365
+ | `TNE` | tonne / tonnes | Tonne / Tonnen |
366
+ | `MTR` | metre / metres | Meter |
367
+ | `KMT` | kilometre / kilometres | Kilometer |
368
+ | `MTK` | square metre / square metres | Quadratmeter |
369
+ | `MTQ` | cubic metre / cubic metres | Kubikmeter |
370
+ | `LTR` | litre / litres | Liter |
371
+ | `KWH` | kilowatt hour / kilowatt hours | Kilowattstunde / Kilowattstunden |
372
+
373
+ The English names are those of the Recommendations; `C62`, whose Recommendation 20 name is "one", takes its synonym "unit". A language without names of its own prints the English ones, as it does every other word. A code the table does not name prints as the code, and a unit given as a word, as documents written before the codes carry it (`'hours'`), prints as it is. The unit column is as wide as its widest name. `unitName()` on `@design.estate/dees-document/shared` returns what a position prints:
374
+
375
+ ```typescript
376
+ import { unitName } from '@design.estate/dees-document/shared';
377
+
378
+ unitName('DE', 'HUR', 2.5); // "Stunden"
379
+ unitName('EN', 'HUR', 1); // "hour"
380
+ unitName('DE', 'SET', 2); // "SET" — a valid code without a name here
381
+ unitName('DE', 'hours', 2); // "hours" — a word is printed as it is
382
+ ```
383
+
322
384
  ### Tax statements
323
385
 
324
386
  - **Reverse charge**: a document with `reverseCharge: true` prints "Steuerschuldnerschaft des Leistungsempfängers" in every language: the words § 14a Abs. 5 UStG requires for a domestic supply whose recipient owes the tax under § 13b UStG, and § 14a Abs. 1 UStG for a supply in another member state whose recipient owes the tax there, such as a business-to-business service under Art. 196 of the VAT Directive (2006/112/EC). A document in English adds the line "Reverse charge", the words of Art. 226 Nr. 11a of the VAT Directive.
325
387
  - **Exemption reference** (§ 14 Abs. 4 Nr. 8 UStG): pass it as a note, for example `'Steuerfreie innergemeinschaftliche Lieferung nach § 4 Nr. 1 Buchst. b i. V. m. § 6a UStG.'`; it prints below the totals like every note. Do not set `reverseCharge` for a tax-exempt intra-Community supply of goods (§ 4 Nr. 1 Buchst. b, § 6a UStG): it is exempt, not reverse charge, so it takes the exemption reference as a note instead.
326
388
 
389
+ ### Paid amounts and advance payments
390
+
391
+ A document with a `paidAmount` other than zero (EN 16931 BT-113, from `@tsclass/tsclass` 9.9.0 on) prints below the gross total "Bereits gezahlt" / "Paid in advance" with that amount, and "Zu zahlen" / "Amount due" with the gross total less it (BT-115). The payment terms then name the amount due ("Zu zahlen: 238,00 € ohne Abzug bis zum …" / "Amount due: €238.00 without deduction until …"), and the QR pay box asks for it. When nothing is due, the document prints neither payment terms nor a QR pay box but "Es ist nichts zu zahlen: Der Gesamtbetrag ist bezahlt." / "Nothing is due: the total has been paid."; when more was paid than the total, the last sum is "Guthaben" / "Credit balance" and the sentence names it. A credit note and a self-billed invoice print the sums and ask for nothing, as before.
392
+
393
+ A final invoice (`invoice`, `corrected-invoice` or `self-billed-invoice`) that lists `advancePayments` deducts them as Abschnitt 14.8 Abs. 7 Satz 3 UStAE allows: the gross total received is deducted as the paid amount, and the tax it contains is stated per rate ("darin enthaltene USt 19%" / "of which VAT 19%"), added up from the `vat` of every group of every payment. Below the sums, one line per payment names the advance invoice by number and date and the day the payment was received, as far as the payment states them ("Anzahlung zur Rechnung Nr. AR-2025-0001 vom 01.02.25, eingegangen am 05.02.25").
394
+
395
+ `paidAmount` has to equal the gross sum of the advance payments, the `net` plus the `vat` of every group of every payment, to the last decimal; the sums are added in exact decimals. A document that breaks this is refused, not recomputed: `PdfService.createPdfFromLetterObject()` rejects and `dedocument-dedocument` renders nothing. `assertPaidAmountMatchesAdvancePayments()` and `getPaidAmountSummary()` on `@design.estate/dees-document/shared` run the check and return what is printed.
396
+
397
+ A final invoice after advance invoices that stated tax has to list those payments in `advancePayments`: with only a `paidAmount`, the document deducts the amount but states no tax on it, and the tax the advance invoices stated would be owed again (§ 14c Abs. 1 UStG; Abschnitt 14.8 Abs. 10 UStAE). The renderer cannot tell this case; the application that builds the document has to.
398
+
327
399
  ### QR pay box
328
400
 
329
- A document that asks for payment prints a SEPA credit transfer QR code (EPC QR code, EPC069-12) for its gross total to the sender's IBAN, with the document number as the remittance information (the free-text field, not the creditor-reference field, which only takes an `RF` reference). The code carries euros only, so the box is omitted for another currency, for a total below 0.01 or above 999,999,999.99, and when the sender has no IBAN. Without a BIC the code uses version 002, which makes the BIC optional. Nothing follows the last filled line, and a line break inside the name or the remittance information becomes a space. The name is cut to the code's 70 characters and the remittance information to 140, at whole grapheme clusters. The code holds at most 331 bytes: text of multi-byte characters that would exceed them cuts the remittance information further; when no remittance information would be left, or the other lines alone exceed 331 bytes, no code is built and the box is omitted. `buildEpcQrPayload()` on `@design.estate/dees-document/shared` returns the code's content, or `null` when no valid code exists.
401
+ A document that asks for payment prints a SEPA credit transfer QR code (EPC QR code, EPC069-12) for its gross total, or for its amount due when it states a paid amount, to the sender's IBAN, with the document number as the remittance information (the free-text field, not the creditor-reference field, which only takes an `RF` reference). The code carries euros only, so the box is omitted for another currency, for a total below 0.01 or above 999,999,999.99, and when the sender has no IBAN. Without a BIC the code uses version 002, which makes the BIC optional. Nothing follows the last filled line, and a line break inside the name or the remittance information becomes a space. The name is cut to the code's 70 characters and the remittance information to 140, at whole grapheme clusters. The code holds at most 331 bytes: text of multi-byte characters that would exceed them cuts the remittance information further; when no remittance information would be left, or the other lines alone exceed 331 bytes, no code is built and the box is omitted. `buildEpcQrPayload()` on `@design.estate/dees-document/shared` returns the code's content, or `null` when no valid code exists.
402
+
403
+ ## Payment Reminders
404
+
405
+ A payment reminder (`finance.TPaymentReminder`, letter type `'payment-reminder'`, from `@tsclass/tsclass` 9.7.0 on) is a letter like any other, so it goes into `PdfService.createPdfFromLetterObject()`, `<dedocument-dedocument>` and `<dedocument-viewer>` as it is. It is no accounting document: it has no positions and no VAT. It prints what its data states and computes nothing beyond the sums and the deadline:
406
+
407
+ - **Letterhead**: the reminder number (`id`) and, when set, the reminder level (`reminderLevel`).
408
+ - **Intro**: `topText` when the reminder has one, otherwise a standard sentence.
409
+ - **Ground of the claim**: one row per claim with the kind (invoice, corrected invoice or debit note) and number of the reminded document, its issue date, its due date when it stated one, its gross total and the amount still open.
410
+ - **Charges**, when there are any: each with its `description` and amount and what it rests on. Default interest prints its computation as stated: principal, rate a year, base rate plus the surcharge points with the provision (§ 288 Abs. 1 or Abs. 2 BGB), and the first and last day. The default lump sum prints § 288 Abs. 5 BGB. Every charge that accrues on a claim names it; interest and the lump sum always do. A cost with lump sums credited against it lists them (§ 288 Abs. 5 Satz 3 BGB); its amount is already the cost less them.
411
+ - **Sums**: the open claims, the charges, and the total payable, their sum, added in cents. There are no VAT rows: the charges are damages, not consideration for a supply.
412
+ - **Notes**, then the **payment deadline**, `dueInDays` after the reminder's date.
413
+ - **QR pay box** for the total payable, with the reminder number as the remittance information, under the same conditions as on an invoice.
414
+
415
+ ```typescript
416
+ import { PdfService } from '@design.estate/dees-document';
417
+ import type { finance } from '@tsclass/tsclass';
418
+
419
+ const reminder: finance.TPaymentReminder = {
420
+ ...letterEnvelope, // type 'payment-reminder', id, date, from, to, subject, ...
421
+ type: 'payment-reminder',
422
+ id: 'MA-2025-0007',
423
+ reminderLevel: 2,
424
+ claims: [
425
+ { documentType: 'invoice', documentId: 'RE-2025-0042', issueDate, dueDate, totalGross: 1190, outstandingAmount: 1190 },
426
+ ],
427
+ charges: [
428
+ { chargeType: 'default-lump-sum', description: 'Verzugspauschale', claimDocumentId: 'RE-2025-0042', amount: 40 },
429
+ ],
430
+ dueInDays: 14,
431
+ currency: 'EUR',
432
+ notes: [],
433
+ };
434
+
435
+ const pdfResult = await pdfService.createPdfFromLetterObject({
436
+ letterData: reminder,
437
+ documentSettings: { languageCode: 'DE' },
438
+ });
439
+ ```
440
+
441
+ `isPaymentReminder()` and `getPaymentReminderTotals()` on `@design.estate/dees-document/shared` answer whether a letter is a reminder and return the sums it prints. When the reminder was sent and when it reached the debtor are not printed; the issuing application records them.
330
442
 
331
443
  ## Draft vs Final Documents
332
444
 
@@ -3,6 +3,6 @@
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
  }
@@ -42,11 +42,15 @@ export class PdfService {
42
42
 
43
43
  /**
44
44
  * creates an letter
45
+ *
46
+ * An accounting document whose advance payments do not add up to its paid
47
+ * amount is refused before anything is rendered: this rejects.
45
48
  */
46
49
  public async createPdfFromLetterObject(optionsArg: {
47
50
  letterData: plugins.tsclass.business.TLetter;
48
51
  documentSettings: plugins.shared.interfaces.IDocumentSettings;
49
52
  }): Promise<plugins.smartpdf.IPdf> {
53
+ plugins.shared.assertPaidAmountMatchesAdvancePayments(optionsArg.letterData);
50
54
  const html = `
51
55
  <script type="module">
52
56
  ${await helpers.getBundleAsString()}
@@ -3,6 +3,6 @@
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
  }