@kreiseck/kasseneck-api 1.5.0 → 1.6.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.
Files changed (90) hide show
  1. package/CHANGELOG.md +124 -0
  2. package/README.md +181 -27
  3. package/dist/cjs/client/aufrufe.d.ts +58 -4
  4. package/dist/cjs/client/aufrufe.js +185 -1
  5. package/dist/cjs/client/errors.d.ts +32 -19
  6. package/dist/cjs/client/errors.js +28 -17
  7. package/dist/cjs/client/index.d.ts +2 -2
  8. package/dist/cjs/client/index.js +2 -1
  9. package/dist/cjs/client/transport.d.ts +27 -1
  10. package/dist/cjs/client/transport.js +25 -27
  11. package/dist/cjs/index.d.ts +1 -1
  12. package/dist/cjs/index.js +3 -2
  13. package/dist/cjs/inventory/api.d.ts +10 -2
  14. package/dist/cjs/inventory/api.js +8 -1
  15. package/dist/cjs/inventory/endpunkte.d.ts +2 -1
  16. package/dist/cjs/inventory/endpunkte.js +2 -1
  17. package/dist/cjs/inventory/index.d.ts +5 -3
  18. package/dist/cjs/inventory/index.js +15 -3
  19. package/dist/cjs/inventory/lesen.d.ts +7 -1
  20. package/dist/cjs/inventory/lesen.js +75 -0
  21. package/dist/cjs/inventory/schreiben.d.ts +26 -1
  22. package/dist/cjs/inventory/schreiben.js +24 -10
  23. package/dist/cjs/inventory/typen.d.ts +156 -2
  24. package/dist/cjs/inventory/varianten.d.ts +67 -0
  25. package/dist/cjs/inventory/varianten.js +150 -0
  26. package/dist/cjs/inventory/vertrag.d.ts +40 -5
  27. package/dist/cjs/inventory/vertrag.js +51 -3
  28. package/dist/cjs/inventory/webhook.d.ts +5 -2
  29. package/dist/cjs/inventory/webhook.js +8 -2
  30. package/dist/cjs/invoice/endpunkte.d.ts +6 -0
  31. package/dist/cjs/invoice/endpunkte.js +13 -2
  32. package/dist/cjs/pos/texte.d.ts +11 -6
  33. package/dist/cjs/pos/texte.js +11 -6
  34. package/dist/cjs/stored/vokabular.d.ts +1 -1
  35. package/dist/cjs/stored/vokabular.js +1 -1
  36. package/dist/cjs/version.d.ts +1 -1
  37. package/dist/cjs/version.js +1 -1
  38. package/dist/esm/client/aufrufe.d.ts +58 -4
  39. package/dist/esm/client/aufrufe.js +183 -0
  40. package/dist/esm/client/errors.d.ts +32 -19
  41. package/dist/esm/client/errors.js +28 -17
  42. package/dist/esm/client/index.d.ts +2 -2
  43. package/dist/esm/client/index.js +1 -1
  44. package/dist/esm/client/transport.d.ts +27 -1
  45. package/dist/esm/client/transport.js +26 -28
  46. package/dist/esm/index.d.ts +1 -1
  47. package/dist/esm/index.js +1 -1
  48. package/dist/esm/inventory/api.d.ts +10 -2
  49. package/dist/esm/inventory/api.js +8 -1
  50. package/dist/esm/inventory/endpunkte.d.ts +2 -1
  51. package/dist/esm/inventory/endpunkte.js +2 -1
  52. package/dist/esm/inventory/index.d.ts +5 -3
  53. package/dist/esm/inventory/index.js +4 -2
  54. package/dist/esm/inventory/lesen.d.ts +7 -1
  55. package/dist/esm/inventory/lesen.js +74 -0
  56. package/dist/esm/inventory/schreiben.d.ts +26 -1
  57. package/dist/esm/inventory/schreiben.js +19 -11
  58. package/dist/esm/inventory/typen.d.ts +156 -2
  59. package/dist/esm/inventory/varianten.d.ts +67 -0
  60. package/dist/esm/inventory/varianten.js +142 -0
  61. package/dist/esm/inventory/vertrag.d.ts +40 -5
  62. package/dist/esm/inventory/vertrag.js +50 -2
  63. package/dist/esm/inventory/webhook.d.ts +5 -2
  64. package/dist/esm/inventory/webhook.js +9 -3
  65. package/dist/esm/invoice/endpunkte.d.ts +6 -0
  66. package/dist/esm/invoice/endpunkte.js +13 -2
  67. package/dist/esm/pos/texte.d.ts +11 -6
  68. package/dist/esm/pos/texte.js +11 -6
  69. package/dist/esm/stored/vokabular.d.ts +1 -1
  70. package/dist/esm/stored/vokabular.js +1 -1
  71. package/dist/esm/version.d.ts +1 -1
  72. package/dist/esm/version.js +1 -1
  73. package/fixtures/hobex-hps-codes.json +1 -1
  74. package/fixtures/invoice-api.schema.json +1 -1
  75. package/fixtures/invoice-texts.json +1 -1
  76. package/fixtures/pos-texts.json +1 -1
  77. package/fixtures/surface.json +85 -6
  78. package/fixtures/v3/antworten/belege.json +1 -1
  79. package/fixtures/v3/antworten/belegmail.json +1 -1
  80. package/fixtures/v3/antworten/kasse-belege.json +1 -1
  81. package/fixtures/v3/antworten/kasse.json +2 -2
  82. package/fixtures/v3/antworten/lager.json +2396 -4
  83. package/fixtures/v3/antworten/rechnungen.json +1 -1
  84. package/fixtures/v3/antworten/storno.json +1 -1
  85. package/fixtures/v3/stored/belege.json +1 -1
  86. package/fixtures/v3/stored/kasse.json +2 -2
  87. package/fixtures/v3/stored/rechnungen.json +1 -1
  88. package/fixtures/v3/v3-vokabular.json +151 -6
  89. package/fixtures/v3/zahlbetrag-faelle.json +1 -1
  90. package/package.json +1 -1
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Variantengruppen der Lager-API (Backend Stufe 5c): Gruppe anlegen (mit
3
+ * Matrix oder genannten Varianten), aendern oder stilllegen, eine Variante
4
+ * ergaenzen, Gruppen lesen.
5
+ *
6
+ * Eine Variante ist ein gewoehnlicher Artikel mit `variantGroupId` und
7
+ * `variantAttributes`; gelesen, gebucht und reserviert wird sie wie jeder
8
+ * Artikel. Die Gruppenantworten tragen nur die Kennungen der Varianten, die
9
+ * Artikel selbst liefert `listArticles({ variantGroupId })`.
10
+ *
11
+ * Wie in `schreiben.ts` geht die Anfrage flach hinaus, genau mit den Feldern,
12
+ * die der Aufrufer nennt (`undefined` faellt weg, `null` bleibt).
13
+ *
14
+ * **Vor dem Senden geprueft wird nur, was ohne Netz sicher falsch ist:**
15
+ * - `idempotencyKey` fehlt, ist leer oder laenger als 120 Zeichen (die drei
16
+ * schreibenden Aufrufe);
17
+ * - `variantGroupId` fehlt oder ist leer;
18
+ * - `createMatrix: true` zusammen mit `variants` (schliessen sich aus);
19
+ * - `variants` ist keine Liste, ein Eintrag kein Objekt, `variantAttributes`
20
+ * einer Variante fehlt oder ist kein Objekt;
21
+ * - ein Preis, eine Menge oder ein Einkaufspreis (auch in `defaults`) ist
22
+ * keine Ganzzahl;
23
+ * - eine Aenderung nennt kein Feld, `active` ist nicht `false` oder steht
24
+ * nicht allein, `addAttributeValues` ist kein Objekt.
25
+ * Die Grenzen (Merkmale, Werte, Matrix, aktive Varianten) prueft der Server:
26
+ * er darf sie anheben, ohne dass diese Paketversion dann falsch abweist.
27
+ *
28
+ * **Wiederholen** wie bei jedem Schreiben: nach `outcome: 'unknown'` denselben
29
+ * Aufruf mit **demselben** `idempotencyKey`; er wirkt genau einmal und liefert
30
+ * die gespeicherte Antwort. Ein neuer Schluessel legte die Gruppe ein zweites
31
+ * Mal an. Ein abgebrochenes Stilllegen vollendet jede Wiederholung von
32
+ * `updateVariantGroup({ active: false })`, auch mit neuem Schluessel.
33
+ */
34
+ import type { InternerTransport } from '../client/aufrufe.js';
35
+ import type { AddVariantRequest, Article, CreateVariantGroupRequest, UpdateVariantGroupRequest, VariantGroup, VariantGroupListQuery, VariantGroupPage } from './typen.js';
36
+ /**
37
+ * Legt eine Variantengruppe an: mit `createMatrix: true` alle Kombinationen der
38
+ * Werte (hoechstens 100), sonst die genannten `variants[]` (hoechstens 100),
39
+ * ohne beides nur die Gruppe. Jede Variante entsteht als Artikel mit den
40
+ * Feldern wie bei `createArticle`; was sie nicht nennt, fuellen die Vorgaben.
41
+ * Antwort: die Gruppe mit `variants[]` (Kennung und Merkmale je Variante).
42
+ *
43
+ * Braucht die Anlage mehr Schreibvorgaenge, als in einen Vorgang passen,
44
+ * kommt `too_many_positions` mit `field` (`variants` bzw. `createMatrix`) und
45
+ * nichts ist geschrieben: weniger Varianten senden, den Rest per [addVariant].
46
+ */
47
+ export declare function createVariantGroup(transport: InternerTransport, request: CreateVariantGroupRequest): Promise<VariantGroup>;
48
+ /**
49
+ * Aendert eine aktive Gruppe (Name, Vorgaben, neue Werte) oder legt sie mit
50
+ * `active: false` still: die Gruppe und alle ihre Varianten, endgueltig. Die
51
+ * Antwort kommt erst, wenn alle Varianten stillgelegt sind. Bestehende
52
+ * Varianten aendern Name und Vorgaben nicht (dafuer `updateArticle`).
53
+ */
54
+ export declare function updateVariantGroup(transport: InternerTransport, request: UpdateVariantGroupRequest): Promise<VariantGroup>;
55
+ /**
56
+ * Legt eine Variante in einer aktiven Gruppe an. Antwort: der Artikel wie
57
+ * `createArticle`. Gibt es die Kombination schon, kommt
58
+ * `variant_already_exists` mit `articleId` der bestehenden Variante; nach dem
59
+ * Stilllegen einer Variante ist ihre Kombination wieder frei.
60
+ */
61
+ export declare function addVariant(transport: InternerTransport, request: AddVariantRequest): Promise<Article>;
62
+ /** Eine Variantengruppe mit ihren aktiven Varianten (eingefroren, wenn stillgelegt). */
63
+ export declare function getVariantGroup(transport: InternerTransport, variantGroupId: string): Promise<VariantGroup>;
64
+ /** Variantengruppen nach `updatedAt` aufsteigend; Filter `active` und `updatedSince` (inklusive). */
65
+ export declare function listVariantGroups(transport: InternerTransport, query?: VariantGroupListQuery): Promise<VariantGroupPage>;
66
+ /** Alle Variantengruppen der Abfrage, Seite fuer Seite ueber `nextCursor`. */
67
+ export declare function iterateVariantGroups(transport: InternerTransport, query?: VariantGroupListQuery): AsyncGenerator<VariantGroup, void, undefined>;
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ /**
3
+ * Variantengruppen der Lager-API (Backend Stufe 5c): Gruppe anlegen (mit
4
+ * Matrix oder genannten Varianten), aendern oder stilllegen, eine Variante
5
+ * ergaenzen, Gruppen lesen.
6
+ *
7
+ * Eine Variante ist ein gewoehnlicher Artikel mit `variantGroupId` und
8
+ * `variantAttributes`; gelesen, gebucht und reserviert wird sie wie jeder
9
+ * Artikel. Die Gruppenantworten tragen nur die Kennungen der Varianten, die
10
+ * Artikel selbst liefert `listArticles({ variantGroupId })`.
11
+ *
12
+ * Wie in `schreiben.ts` geht die Anfrage flach hinaus, genau mit den Feldern,
13
+ * die der Aufrufer nennt (`undefined` faellt weg, `null` bleibt).
14
+ *
15
+ * **Vor dem Senden geprueft wird nur, was ohne Netz sicher falsch ist:**
16
+ * - `idempotencyKey` fehlt, ist leer oder laenger als 120 Zeichen (die drei
17
+ * schreibenden Aufrufe);
18
+ * - `variantGroupId` fehlt oder ist leer;
19
+ * - `createMatrix: true` zusammen mit `variants` (schliessen sich aus);
20
+ * - `variants` ist keine Liste, ein Eintrag kein Objekt, `variantAttributes`
21
+ * einer Variante fehlt oder ist kein Objekt;
22
+ * - ein Preis, eine Menge oder ein Einkaufspreis (auch in `defaults`) ist
23
+ * keine Ganzzahl;
24
+ * - eine Aenderung nennt kein Feld, `active` ist nicht `false` oder steht
25
+ * nicht allein, `addAttributeValues` ist kein Objekt.
26
+ * Die Grenzen (Merkmale, Werte, Matrix, aktive Varianten) prueft der Server:
27
+ * er darf sie anheben, ohne dass diese Paketversion dann falsch abweist.
28
+ *
29
+ * **Wiederholen** wie bei jedem Schreiben: nach `outcome: 'unknown'` denselben
30
+ * Aufruf mit **demselben** `idempotencyKey`; er wirkt genau einmal und liefert
31
+ * die gespeicherte Antwort. Ein neuer Schluessel legte die Gruppe ein zweites
32
+ * Mal an. Ein abgebrochenes Stilllegen vollendet jede Wiederholung von
33
+ * `updateVariantGroup({ active: false })`, auch mit neuem Schluessel.
34
+ */
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.createVariantGroup = createVariantGroup;
37
+ exports.updateVariantGroup = updateVariantGroup;
38
+ exports.addVariant = addVariant;
39
+ exports.getVariantGroup = getVariantGroup;
40
+ exports.listVariantGroups = listVariantGroups;
41
+ exports.iterateVariantGroups = iterateVariantGroups;
42
+ const endpunkte_js_1 = require("./endpunkte.js");
43
+ const lesen_js_1 = require("./lesen.js");
44
+ const schreiben_js_1 = require("./schreiben.js");
45
+ const istObjekt = (w) => w !== null && typeof w === 'object' && !Array.isArray(w);
46
+ /** Vorgaben: nur der Preis ist eine Zahl mit Skala (Cent); `null` leert bzw. heisst „nicht angegeben“. */
47
+ function vorgabenZahlen(name, w) {
48
+ if (w === undefined || w === null)
49
+ return;
50
+ if (!istObjekt(w))
51
+ throw (0, endpunkte_js_1.anfragefehler)(name, 'defaults muss ein Objekt oder null sein');
52
+ (0, schreiben_js_1.ganz)(name, 'defaults.unitPriceCents', w.unitPriceCents, { leerbar: true });
53
+ }
54
+ /** Eine Variante der Anfrage: Merkmale als Objekt, Zahlen ganzzahlig. */
55
+ function variante(name, w, praefix) {
56
+ const stelle = praefix ? praefix.slice(0, -1) : 'Anfrage';
57
+ if (!istObjekt(w))
58
+ throw (0, endpunkte_js_1.anfragefehler)(name, `${stelle} muss ein Objekt sein`);
59
+ if (!istObjekt(w.variantAttributes)) {
60
+ throw (0, endpunkte_js_1.anfragefehler)(name, `${praefix}variantAttributes fehlt oder ist kein Objekt { merkmal: wert }`);
61
+ }
62
+ (0, schreiben_js_1.artikelZahlen)(name, w, praefix);
63
+ }
64
+ const gruppeAus = (name, daten) => (0, lesen_js_1.variantengruppe)({ name, pfad: 'variantGroup' }, (0, lesen_js_1.objekt)(daten)?.variantGroup);
65
+ /**
66
+ * Legt eine Variantengruppe an: mit `createMatrix: true` alle Kombinationen der
67
+ * Werte (hoechstens 100), sonst die genannten `variants[]` (hoechstens 100),
68
+ * ohne beides nur die Gruppe. Jede Variante entsteht als Artikel mit den
69
+ * Feldern wie bei `createArticle`; was sie nicht nennt, fuellen die Vorgaben.
70
+ * Antwort: die Gruppe mit `variants[]` (Kennung und Merkmale je Variante).
71
+ *
72
+ * Braucht die Anlage mehr Schreibvorgaenge, als in einen Vorgang passen,
73
+ * kommt `too_many_positions` mit `field` (`variants` bzw. `createMatrix`) und
74
+ * nichts ist geschrieben: weniger Varianten senden, den Rest per [addVariant].
75
+ */
76
+ async function createVariantGroup(transport, request) {
77
+ const name = 'createVariantGroup';
78
+ const p = (0, schreiben_js_1.anfrage)(name, request);
79
+ (0, schreiben_js_1.schluessel)(name, p, { pflicht: true });
80
+ if (p.createMatrix === true && p.variants !== null && p.variants !== undefined) {
81
+ throw (0, endpunkte_js_1.anfragefehler)(name, 'createMatrix und variants schliessen sich aus: entweder alle Kombinationen oder die genannten Varianten');
82
+ }
83
+ vorgabenZahlen(name, p.defaults);
84
+ if (p.variants !== null && p.variants !== undefined) {
85
+ if (!Array.isArray(p.variants))
86
+ throw (0, endpunkte_js_1.anfragefehler)(name, 'variants muss eine Liste sein');
87
+ p.variants.forEach((x, i) => variante(name, x, `variants[${i}].`));
88
+ }
89
+ return gruppeAus(name, await transport(name, p));
90
+ }
91
+ /**
92
+ * Aendert eine aktive Gruppe (Name, Vorgaben, neue Werte) oder legt sie mit
93
+ * `active: false` still: die Gruppe und alle ihre Varianten, endgueltig. Die
94
+ * Antwort kommt erst, wenn alle Varianten stillgelegt sind. Bestehende
95
+ * Varianten aendern Name und Vorgaben nicht (dafuer `updateArticle`).
96
+ */
97
+ async function updateVariantGroup(transport, request) {
98
+ const name = 'updateVariantGroup';
99
+ const p = (0, schreiben_js_1.anfrage)(name, request);
100
+ (0, schreiben_js_1.schluessel)(name, p, { pflicht: true });
101
+ (0, endpunkte_js_1.kennung)(name, 'variantGroupId', p.variantGroupId);
102
+ const aenderungen = ['name', 'defaults', 'addAttributeValues'].filter((k) => p[k] !== undefined);
103
+ if (p.active !== undefined) {
104
+ if (p.active !== false)
105
+ throw (0, endpunkte_js_1.anfragefehler)(name, 'active kennt nur false (stilllegen); eine stillgelegte Gruppe bleibt stillgelegt');
106
+ if (aenderungen.length)
107
+ throw (0, endpunkte_js_1.anfragefehler)(name, 'active: false steht allein, ohne weitere Aenderung');
108
+ }
109
+ else if (!aenderungen.length) {
110
+ throw (0, endpunkte_js_1.anfragefehler)(name, 'die Aenderung nennt kein Feld');
111
+ }
112
+ vorgabenZahlen(name, p.defaults);
113
+ if (p.addAttributeValues !== undefined && !istObjekt(p.addAttributeValues)) {
114
+ throw (0, endpunkte_js_1.anfragefehler)(name, 'addAttributeValues muss ein Objekt { merkmal: [werte] } sein');
115
+ }
116
+ return gruppeAus(name, await transport(name, p));
117
+ }
118
+ /**
119
+ * Legt eine Variante in einer aktiven Gruppe an. Antwort: der Artikel wie
120
+ * `createArticle`. Gibt es die Kombination schon, kommt
121
+ * `variant_already_exists` mit `articleId` der bestehenden Variante; nach dem
122
+ * Stilllegen einer Variante ist ihre Kombination wieder frei.
123
+ */
124
+ async function addVariant(transport, request) {
125
+ const name = 'addVariant';
126
+ const p = (0, schreiben_js_1.anfrage)(name, request);
127
+ (0, schreiben_js_1.schluessel)(name, p, { pflicht: true });
128
+ (0, endpunkte_js_1.kennung)(name, 'variantGroupId', p.variantGroupId);
129
+ variante(name, p, '');
130
+ return (0, schreiben_js_1.artikelAus)(name, await transport(name, p));
131
+ }
132
+ /** Eine Variantengruppe mit ihren aktiven Varianten (eingefroren, wenn stillgelegt). */
133
+ async function getVariantGroup(transport, variantGroupId) {
134
+ const name = 'getVariantGroup';
135
+ return gruppeAus(name, await transport(name, { variantGroupId: (0, endpunkte_js_1.kennung)(name, 'variantGroupId', variantGroupId) }));
136
+ }
137
+ /** Variantengruppen nach `updatedAt` aufsteigend; Filter `active` und `updatedSince` (inklusive). */
138
+ async function listVariantGroups(transport, query) {
139
+ const name = 'listVariantGroups';
140
+ const daten = await transport(name, (0, endpunkte_js_1.abfrage)(name, query));
141
+ return { variantGroups: (0, lesen_js_1.liste)(name, daten, 'variantGroups', lesen_js_1.variantengruppe), nextCursor: (0, lesen_js_1.naechsterCursor)(name, daten) };
142
+ }
143
+ /** Alle Variantengruppen der Abfrage, Seite fuer Seite ueber `nextCursor`. */
144
+ function iterateVariantGroups(transport, query) {
145
+ const { cursor, ...rest } = query ?? {};
146
+ return (0, endpunkte_js_1.seitenweise)('listVariantGroups', cursor, async (c) => {
147
+ const s = await listVariantGroups(transport, { ...rest, cursor: c });
148
+ return { eintraege: s.variantGroups, nextCursor: s.nextCursor };
149
+ });
150
+ }
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Der Vertrag der Lager-API (Backend Stufe 5a lesen, 5b schreiben und
3
- * reservieren) als Daten: Endpunkte, Wertkataloge, Ereignisse, Fehler- und
3
+ * reservieren, 5c Varianten) als Daten: Endpunkte, Wertkataloge, Ereignisse, Fehler- und
4
4
  * Hinweiscodes, englisch wie am Draht `/v3`.
5
5
  *
6
6
  * Quelle ist der Vertrags-Export des Backends (`fixtures/v3/v3-vokabular.json`):
@@ -11,8 +11,8 @@
11
11
  * und `warningCodes.inventory`. `test/inventory.test.ts` haelt jede Liste
12
12
  * deckungsgleich mit dieser Datei; nichts hier wird geraten.
13
13
  */
14
- /** Die 27 Endpunkte (14 aus 5a, 13 aus 5b), in der Reihenfolge von `endpoints.public`. */
15
- export declare const INVENTORY_ENDPOINTS: readonly ["getArticle", "listArticles", "lookupArticleByCode", "listLocations", "getStock", "listStock", "listStockMovements", "createWebhook", "updateWebhook", "deleteWebhook", "listWebhooks", "sendWebhookTest", "rotateWebhookSecret", "listWebhookDeliveries", "createArticle", "updateArticle", "deactivateArticle", "receiveGoods", "transferStock", "recordStockLoss", "changeStockCondition", "reverseStockMovement", "createReservation", "extendReservation", "releaseReservation", "getReservation", "listReservations"];
14
+ /** Die 32 Endpunkte (14 aus 5a, 13 aus 5b, 5 aus 5c), in der Reihenfolge von `endpoints.public`. */
15
+ export declare const INVENTORY_ENDPOINTS: readonly ["getArticle", "listArticles", "lookupArticleByCode", "listLocations", "getStock", "listStock", "listStockMovements", "createWebhook", "updateWebhook", "deleteWebhook", "listWebhooks", "sendWebhookTest", "rotateWebhookSecret", "listWebhookDeliveries", "createArticle", "updateArticle", "deactivateArticle", "receiveGoods", "transferStock", "recordStockLoss", "changeStockCondition", "reverseStockMovement", "createReservation", "extendReservation", "releaseReservation", "getReservation", "listReservations", "createVariantGroup", "updateVariantGroup", "getVariantGroup", "listVariantGroups", "addVariant"];
16
16
  export type InventoryEndpoint = (typeof INVENTORY_ENDPOINTS)[number];
17
17
  /** Art eines Standorts (Katalog `STANDORT_TYP`). */
18
18
  export declare const LOCATION_TYPES: readonly ["warehouse", "store", "vehicle", "other"];
@@ -52,8 +52,12 @@ export type WebhookDeliveryStatus = (typeof WEBHOOK_DELIVERY_STATUSES)[number];
52
52
  * wie `getReservation`, mit dem Status danach: `reservation.released` und
53
53
  * `reservation.redeemed` kommen bei jeder wirksamen Freigabe bzw. Einloesung,
54
54
  * auch einer teilweisen (dann bleibt der Status `active`).
55
+ * `variant_group.created` und `variant_group.updated` (seit 1.6.0) tragen die
56
+ * Variantengruppe wie `getVariantGroup`; `updated` kommt nur bei einer aussen
57
+ * sichtbaren Aenderung (neuer Wert, neue oder stillgelegte Variante, Name,
58
+ * Vorgaben, Stilllegen der Gruppe).
55
59
  */
56
- export declare const INVENTORY_WEBHOOK_EVENTS: readonly ["stock.changed", "stock.below_minimum", "article.created", "article.updated", "article.deactivated", "reservation.expired", "reservation.released", "reservation.redeemed"];
60
+ export declare const INVENTORY_WEBHOOK_EVENTS: readonly ["stock.changed", "stock.below_minimum", "article.created", "article.updated", "article.deactivated", "reservation.expired", "reservation.released", "reservation.redeemed", "variant_group.created", "variant_group.updated"];
57
61
  export type InventoryWebhookEventType = (typeof INVENTORY_WEBHOOK_EVENTS)[number];
58
62
  /**
59
63
  * Die Felder der Huelle jeder Zustellung, in der Reihenfolge am Draht. Statt
@@ -81,8 +85,21 @@ export declare const INVENTORY_LIST_LIMIT_MAX = 200;
81
85
  * [inventoryShortfalls]), `code_taken` und `external_id_taken` (mit `field` und
82
86
  * `articleId` des Artikels, dem der Code gehoert), `stock_kind_locked`,
83
87
  * `reservation_not_found`, `reservation_not_active` …
88
+ *
89
+ * Seit 1.6.0 dahinter die Codes der Variantengruppen: `variant_group_not_found`
90
+ * (unbekannte Kennung), `variant_already_exists` (die Kombination gibt es in der
91
+ * Gruppe schon, dann mit `articleId` der bestehenden Variante, oder sie steht
92
+ * zweimal in `variants[]`; jeweils mit `field`),
93
+ * `invalid_variant_attributes` (ein Merkmal fehlt, ist unbekannt oder sein Wert
94
+ * steht nicht in der Werteliste; `field` und `errors[]`),
95
+ * `variant_group_inactive` (stillgelegte Gruppe: kein `addVariant`, keine
96
+ * Aenderung ausser erneutem Stilllegen) und `variant_limit` (mehr als
97
+ * [VARIANT_GROUP_ACTIVE_MAX] aktive Varianten je Gruppe). Wiederverwendet:
98
+ * `too_many_positions` traegt bei Varianten `field` (`variants`,
99
+ * `createMatrix` bzw. `externalIds` bei `addVariant`): die Anfrage braeuchte
100
+ * mehr Schreibvorgaenge, als in einen Vorgang passen; geschrieben wurde nichts.
84
101
  */
85
- export declare const INVENTORY_ERROR_CODES: readonly ["validation", "invalid_cursor", "article_not_found", "webhook_not_found", "webhook_limit", "invalid_webhook_url", "event_not_subscribed", "webhook_inactive", "inventory_api_not_enabled", "module_inactive", "rate_limited", "server_error", "idempotency_key_required", "idempotency_conflict", "location_not_found", "location_inactive", "invalid_location", "invalid_locations", "invalid_transfer", "operation_not_found", "already_reversed", "reversal_not_possible", "reversal_not_supported", "exceeds_stock", "no_positions", "too_many_positions", "invalid_step", "invalid_quantity", "invalid_amount", "invalid_price", "negative_value", "invalid_reason", "note_required", "withdrawal_type_required", "invalid_method", "invalid_stock_kind", "invalid_minimum", "invalid_dimensions", "weight_missing", "invalid_landed_cost", "invalid_distribution", "landed_costs_mismatch", "return_totals_mismatch", "lot_not_found", "invalid_serial", "serial_required", "serial_not_allowed", "serial_already_exists", "serial_not_in_stock", "code_taken", "external_id_taken", "group_not_found", "revenue_group_not_found", "stock_kind_locked", "article_inactive", "invalid_position", "invalid_condition", "reason_required", "insufficient_available", "reservation_not_found", "reservation_not_active"];
102
+ export declare const INVENTORY_ERROR_CODES: readonly ["validation", "invalid_cursor", "article_not_found", "webhook_not_found", "webhook_limit", "invalid_webhook_url", "event_not_subscribed", "webhook_inactive", "inventory_api_not_enabled", "module_inactive", "rate_limited", "server_error", "idempotency_key_required", "idempotency_conflict", "location_not_found", "location_inactive", "invalid_location", "invalid_locations", "invalid_transfer", "operation_not_found", "already_reversed", "reversal_not_possible", "reversal_not_supported", "exceeds_stock", "no_positions", "too_many_positions", "invalid_step", "invalid_quantity", "invalid_amount", "invalid_price", "negative_value", "invalid_reason", "note_required", "withdrawal_type_required", "invalid_method", "invalid_stock_kind", "invalid_minimum", "invalid_dimensions", "weight_missing", "invalid_landed_cost", "invalid_distribution", "landed_costs_mismatch", "return_totals_mismatch", "lot_not_found", "invalid_serial", "serial_required", "serial_not_allowed", "serial_already_exists", "serial_not_in_stock", "code_taken", "external_id_taken", "group_not_found", "revenue_group_not_found", "stock_kind_locked", "article_inactive", "invalid_position", "invalid_condition", "reason_required", "insufficient_available", "reservation_not_found", "reservation_not_active", "variant_group_not_found", "variant_already_exists", "invalid_variant_attributes", "variant_group_inactive", "variant_limit"];
86
103
  export type InventoryErrorCode = (typeof INVENTORY_ERROR_CODES)[number];
87
104
  /**
88
105
  * Codes, die Anmeldung und Rand auf jedem Lager-Aufruf erzeugen koennen,
@@ -134,3 +151,21 @@ export declare const INVENTORY_IDEMPOTENCY_KEY_MAX = 120;
134
151
  /** Kuerzeste und laengste Haltedauer einer Reservierung in Minuten (`expiresInMinutes`, 30 Tage). */
135
152
  export declare const RESERVATION_MINUTES_MIN = 5;
136
153
  export declare const RESERVATION_MINUTES_MAX = 43200;
154
+ /**
155
+ * Grenzen einer Variantengruppe, wie das Backend sie prueft. Das Paket prueft
156
+ * sie **nicht** vor dem Senden: der Server darf sie anheben, ohne dass eine
157
+ * aeltere Paketversion dann faelschlich abweist. Wer darueber liegt, bekommt
158
+ * `validation` (Merkmale, Werte, Matrix, `variants[]`) bzw. `variant_limit`.
159
+ *
160
+ * - [VARIANT_ATTRIBUTES_MAX] Merkmale je Gruppe (Schluessel `^[a-z0-9_]{1,32}$`,
161
+ * eindeutig; `__…__` ist reserviert),
162
+ * - [VARIANT_VALUES_MAX] Werte je Merkmal (je 1–30 Zeichen, eindeutig ohne
163
+ * Gross/Klein),
164
+ * - [VARIANT_MATRIX_MAX] Kombinationen bei `createMatrix: true` und hoechstens
165
+ * so viele Eintraege in `variants[]` je Anfrage,
166
+ * - [VARIANT_GROUP_ACTIVE_MAX] aktive Varianten je Gruppe.
167
+ */
168
+ export declare const VARIANT_ATTRIBUTES_MAX = 3;
169
+ export declare const VARIANT_VALUES_MAX = 30;
170
+ export declare const VARIANT_MATRIX_MAX = 100;
171
+ export declare const VARIANT_GROUP_ACTIVE_MAX = 250;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Der Vertrag der Lager-API (Backend Stufe 5a lesen, 5b schreiben und
4
- * reservieren) als Daten: Endpunkte, Wertkataloge, Ereignisse, Fehler- und
4
+ * reservieren, 5c Varianten) als Daten: Endpunkte, Wertkataloge, Ereignisse, Fehler- und
5
5
  * Hinweiscodes, englisch wie am Draht `/v3`.
6
6
  *
7
7
  * Quelle ist der Vertrags-Export des Backends (`fixtures/v3/v3-vokabular.json`):
@@ -13,8 +13,8 @@
13
13
  * deckungsgleich mit dieser Datei; nichts hier wird geraten.
14
14
  */
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.RESERVATION_MINUTES_MAX = exports.RESERVATION_MINUTES_MIN = exports.INVENTORY_IDEMPOTENCY_KEY_MAX = exports.RESERVATION_STATUSES = exports.LANDED_COST_ALLOCATIONS = exports.LANDED_COST_TYPES = exports.WITHDRAWAL_TYPES = exports.STOCK_LOSS_REASONS = exports.STOCK_KINDS = exports.INVENTORY_WARNING_CODES = exports.INVENTORY_REQUEST_ERROR_CODES = exports.INVENTORY_ERROR_CODES = exports.INVENTORY_LIST_LIMIT_MAX = exports.INVENTORY_WEBHOOK_LIMIT = exports.INVENTORY_WEBHOOK_ENVELOPE_FIELDS = exports.INVENTORY_WEBHOOK_EVENTS = exports.WEBHOOK_DELIVERY_STATUSES = exports.STOCK_CHANGE_CAUSES = exports.STOCK_CONDITIONS = exports.STOCK_MOVEMENT_SOURCES = exports.STOCK_MOVEMENT_TYPES = exports.LOCATION_TYPES = exports.INVENTORY_ENDPOINTS = void 0;
17
- /** Die 27 Endpunkte (14 aus 5a, 13 aus 5b), in der Reihenfolge von `endpoints.public`. */
16
+ exports.VARIANT_GROUP_ACTIVE_MAX = exports.VARIANT_MATRIX_MAX = exports.VARIANT_VALUES_MAX = exports.VARIANT_ATTRIBUTES_MAX = exports.RESERVATION_MINUTES_MAX = exports.RESERVATION_MINUTES_MIN = exports.INVENTORY_IDEMPOTENCY_KEY_MAX = exports.RESERVATION_STATUSES = exports.LANDED_COST_ALLOCATIONS = exports.LANDED_COST_TYPES = exports.WITHDRAWAL_TYPES = exports.STOCK_LOSS_REASONS = exports.STOCK_KINDS = exports.INVENTORY_WARNING_CODES = exports.INVENTORY_REQUEST_ERROR_CODES = exports.INVENTORY_ERROR_CODES = exports.INVENTORY_LIST_LIMIT_MAX = exports.INVENTORY_WEBHOOK_LIMIT = exports.INVENTORY_WEBHOOK_ENVELOPE_FIELDS = exports.INVENTORY_WEBHOOK_EVENTS = exports.WEBHOOK_DELIVERY_STATUSES = exports.STOCK_CHANGE_CAUSES = exports.STOCK_CONDITIONS = exports.STOCK_MOVEMENT_SOURCES = exports.STOCK_MOVEMENT_TYPES = exports.LOCATION_TYPES = exports.INVENTORY_ENDPOINTS = void 0;
17
+ /** Die 32 Endpunkte (14 aus 5a, 13 aus 5b, 5 aus 5c), in der Reihenfolge von `endpoints.public`. */
18
18
  exports.INVENTORY_ENDPOINTS = [
19
19
  'getArticle',
20
20
  'listArticles',
@@ -43,6 +43,11 @@ exports.INVENTORY_ENDPOINTS = [
43
43
  'releaseReservation',
44
44
  'getReservation',
45
45
  'listReservations',
46
+ 'createVariantGroup',
47
+ 'updateVariantGroup',
48
+ 'getVariantGroup',
49
+ 'listVariantGroups',
50
+ 'addVariant',
46
51
  ];
47
52
  /** Art eines Standorts (Katalog `STANDORT_TYP`). */
48
53
  exports.LOCATION_TYPES = ['warehouse', 'store', 'vehicle', 'other'];
@@ -116,6 +121,10 @@ exports.WEBHOOK_DELIVERY_STATUSES = ['delivered', 'pending', 'failed', 'dropped'
116
121
  * wie `getReservation`, mit dem Status danach: `reservation.released` und
117
122
  * `reservation.redeemed` kommen bei jeder wirksamen Freigabe bzw. Einloesung,
118
123
  * auch einer teilweisen (dann bleibt der Status `active`).
124
+ * `variant_group.created` und `variant_group.updated` (seit 1.6.0) tragen die
125
+ * Variantengruppe wie `getVariantGroup`; `updated` kommt nur bei einer aussen
126
+ * sichtbaren Aenderung (neuer Wert, neue oder stillgelegte Variante, Name,
127
+ * Vorgaben, Stilllegen der Gruppe).
119
128
  */
120
129
  exports.INVENTORY_WEBHOOK_EVENTS = [
121
130
  'stock.changed',
@@ -126,6 +135,8 @@ exports.INVENTORY_WEBHOOK_EVENTS = [
126
135
  'reservation.expired',
127
136
  'reservation.released',
128
137
  'reservation.redeemed',
138
+ 'variant_group.created',
139
+ 'variant_group.updated',
129
140
  ];
130
141
  /**
131
142
  * Die Felder der Huelle jeder Zustellung, in der Reihenfolge am Draht. Statt
@@ -153,6 +164,19 @@ exports.INVENTORY_LIST_LIMIT_MAX = 200;
153
164
  * [inventoryShortfalls]), `code_taken` und `external_id_taken` (mit `field` und
154
165
  * `articleId` des Artikels, dem der Code gehoert), `stock_kind_locked`,
155
166
  * `reservation_not_found`, `reservation_not_active` …
167
+ *
168
+ * Seit 1.6.0 dahinter die Codes der Variantengruppen: `variant_group_not_found`
169
+ * (unbekannte Kennung), `variant_already_exists` (die Kombination gibt es in der
170
+ * Gruppe schon, dann mit `articleId` der bestehenden Variante, oder sie steht
171
+ * zweimal in `variants[]`; jeweils mit `field`),
172
+ * `invalid_variant_attributes` (ein Merkmal fehlt, ist unbekannt oder sein Wert
173
+ * steht nicht in der Werteliste; `field` und `errors[]`),
174
+ * `variant_group_inactive` (stillgelegte Gruppe: kein `addVariant`, keine
175
+ * Aenderung ausser erneutem Stilllegen) und `variant_limit` (mehr als
176
+ * [VARIANT_GROUP_ACTIVE_MAX] aktive Varianten je Gruppe). Wiederverwendet:
177
+ * `too_many_positions` traegt bei Varianten `field` (`variants`,
178
+ * `createMatrix` bzw. `externalIds` bei `addVariant`): die Anfrage braeuchte
179
+ * mehr Schreibvorgaenge, als in einen Vorgang passen; geschrieben wurde nichts.
156
180
  */
157
181
  exports.INVENTORY_ERROR_CODES = [
158
182
  'validation',
@@ -216,6 +240,11 @@ exports.INVENTORY_ERROR_CODES = [
216
240
  'insufficient_available',
217
241
  'reservation_not_found',
218
242
  'reservation_not_active',
243
+ 'variant_group_not_found',
244
+ 'variant_already_exists',
245
+ 'invalid_variant_attributes',
246
+ 'variant_group_inactive',
247
+ 'variant_limit',
219
248
  ];
220
249
  /**
221
250
  * Codes, die Anmeldung und Rand auf jedem Lager-Aufruf erzeugen koennen,
@@ -289,3 +318,22 @@ exports.INVENTORY_IDEMPOTENCY_KEY_MAX = 120;
289
318
  /** Kuerzeste und laengste Haltedauer einer Reservierung in Minuten (`expiresInMinutes`, 30 Tage). */
290
319
  exports.RESERVATION_MINUTES_MIN = 5;
291
320
  exports.RESERVATION_MINUTES_MAX = 43_200;
321
+ // ---- Varianten (Backend Stufe 5c, seit 1.6.0) -----------------------------------
322
+ /**
323
+ * Grenzen einer Variantengruppe, wie das Backend sie prueft. Das Paket prueft
324
+ * sie **nicht** vor dem Senden: der Server darf sie anheben, ohne dass eine
325
+ * aeltere Paketversion dann faelschlich abweist. Wer darueber liegt, bekommt
326
+ * `validation` (Merkmale, Werte, Matrix, `variants[]`) bzw. `variant_limit`.
327
+ *
328
+ * - [VARIANT_ATTRIBUTES_MAX] Merkmale je Gruppe (Schluessel `^[a-z0-9_]{1,32}$`,
329
+ * eindeutig; `__…__` ist reserviert),
330
+ * - [VARIANT_VALUES_MAX] Werte je Merkmal (je 1–30 Zeichen, eindeutig ohne
331
+ * Gross/Klein),
332
+ * - [VARIANT_MATRIX_MAX] Kombinationen bei `createMatrix: true` und hoechstens
333
+ * so viele Eintraege in `variants[]` je Anfrage,
334
+ * - [VARIANT_GROUP_ACTIVE_MAX] aktive Varianten je Gruppe.
335
+ */
336
+ exports.VARIANT_ATTRIBUTES_MAX = 3;
337
+ exports.VARIANT_VALUES_MAX = 30;
338
+ exports.VARIANT_MATRIX_MAX = 100;
339
+ exports.VARIANT_GROUP_ACTIVE_MAX = 250;
@@ -39,10 +39,13 @@ export declare function verifyInventoryWebhookSignature(secret: string | readonl
39
39
  * Liest eine Zustellung als typisiertes Ereignis. Vorher die Signatur pruefen
40
40
  * ([verifyInventoryWebhookSignature]).
41
41
  *
42
- * - Ein Ereignis, das diese Paketversion nicht kennt (etwa `variant_group.*`
43
- * einer spaeteren Stufe), ergibt `null`: mit 2xx antworten und uebergehen.
42
+ * - Ein Ereignis, das diese Paketversion nicht kennt (eines einer spaeteren
43
+ * Stufe), ergibt `null`: mit 2xx antworten und uebergehen.
44
44
  * - `reservation.expired|released|redeemed` tragen die Reservierung wie
45
45
  * `getReservation`, mit dem Status nach dem Vorgang (seit 1.5.0).
46
+ * - `variant_group.created|updated` tragen die Gruppe wie `getVariantGroup`
47
+ * (seit 1.6.0). Zwei Zustellungen koennen sich ueberholen: den Stand nur
48
+ * uebernehmen, wenn `data.updatedAt` neuer ist als der gespeicherte.
46
49
  * - Ein Rumpf, der keine Huelle ist, oder eine Bruchzahl in einer Menge wirft
47
50
  * `KasseneckValidationError` (`scope: 'response'`).
48
51
  *
@@ -65,10 +65,13 @@ function kaputt(grund) {
65
65
  * Liest eine Zustellung als typisiertes Ereignis. Vorher die Signatur pruefen
66
66
  * ([verifyInventoryWebhookSignature]).
67
67
  *
68
- * - Ein Ereignis, das diese Paketversion nicht kennt (etwa `variant_group.*`
69
- * einer spaeteren Stufe), ergibt `null`: mit 2xx antworten und uebergehen.
68
+ * - Ein Ereignis, das diese Paketversion nicht kennt (eines einer spaeteren
69
+ * Stufe), ergibt `null`: mit 2xx antworten und uebergehen.
70
70
  * - `reservation.expired|released|redeemed` tragen die Reservierung wie
71
71
  * `getReservation`, mit dem Status nach dem Vorgang (seit 1.5.0).
72
+ * - `variant_group.created|updated` tragen die Gruppe wie `getVariantGroup`
73
+ * (seit 1.6.0). Zwei Zustellungen koennen sich ueberholen: den Stand nur
74
+ * uebernehmen, wenn `data.updatedAt` neuer ist als der gespeicherte.
72
75
  * - Ein Rumpf, der keine Huelle ist, oder eine Bruchzahl in einer Menge wirft
73
76
  * `KasseneckValidationError` (`scope: 'response'`).
74
77
  *
@@ -110,6 +113,9 @@ function parseInventoryWebhookEvent(rawBody) {
110
113
  case 'reservation.released':
111
114
  case 'reservation.redeemed':
112
115
  return { ...huelle, type: huelle.type, data: (0, lesen_js_1.reservierung)(ort, data) };
116
+ case 'variant_group.created':
117
+ case 'variant_group.updated':
118
+ return { ...huelle, type: huelle.type, data: (0, lesen_js_1.variantengruppe)(ort, data) };
113
119
  default:
114
120
  return { ...huelle, type: huelle.type, data: (0, lesen_js_1.artikel)(ort, data) };
115
121
  }
@@ -12,6 +12,12 @@
12
12
  * **Nicht automatisch wiederholen.** Wer nach einem Zeitlimit erneut
13
13
  * ausstellt, tut das mit **demselben** `idempotencyKey`: dann kommt die schon
14
14
  * ausgestellte Rechnung zurueck (`replayed: true`) statt einer zweiten.
15
+ * Jeder Aufruf mit Wirkung (ausstellen, stornieren, gutschreiben, Zahlung
16
+ * nachtragen, Kunde anlegen oder aendern) meldet nach Zeitlimit, Netzfehler,
17
+ * HTTP 5xx oder unlesbarer Antwort `outcome: 'unknown'`: er kann gewirkt
18
+ * haben. Mit Schluessel denselben Schluessel erneut senden, ohne Schluessel
19
+ * (`updateCustomer`, `createCustomer` ohne) erst nachlesen. Lesen und der
20
+ * Probelauf (`previewInvoice`) bleiben `'rejected'`.
15
21
  *
16
22
  * Nach dem Senden wird nichts hart gecastet: fehlt ein zugesagtes Feld, wirft
17
23
  * der Aufruf `KasseneckValidationError` mit `scope:'response'`.
@@ -13,6 +13,12 @@
13
13
  * **Nicht automatisch wiederholen.** Wer nach einem Zeitlimit erneut
14
14
  * ausstellt, tut das mit **demselben** `idempotencyKey`: dann kommt die schon
15
15
  * ausgestellte Rechnung zurueck (`replayed: true`) statt einer zweiten.
16
+ * Jeder Aufruf mit Wirkung (ausstellen, stornieren, gutschreiben, Zahlung
17
+ * nachtragen, Kunde anlegen oder aendern) meldet nach Zeitlimit, Netzfehler,
18
+ * HTTP 5xx oder unlesbarer Antwort `outcome: 'unknown'`: er kann gewirkt
19
+ * haben. Mit Schluessel denselben Schluessel erneut senden, ohne Schluessel
20
+ * (`updateCustomer`, `createCustomer` ohne) erst nachlesen. Lesen und der
21
+ * Probelauf (`previewInvoice`) bleiben `'rejected'`.
16
22
  *
17
23
  * Nach dem Senden wird nichts hart gecastet: fehlt ein zugesagtes Feld, wirft
18
24
  * der Aufruf `KasseneckValidationError` mit `scope:'response'`.
@@ -110,7 +116,10 @@ async function searchCustomers(transport, search) {
110
116
  }
111
117
  // ---- Rechnungen -------------------------------------------------------------
112
118
  async function issueInvoice(transport, request) {
113
- const daten = await transport('issueInvoice', nutzlast(request));
119
+ const params = nutzlast(request);
120
+ // Ohne Typen kann `dryRun: true` hier ankommen: dann ist es ein Probelauf
121
+ // ohne Wirkung (sonst: `previewInvoice`).
122
+ const daten = await transport('issueInvoice', params, undefined, undefined, { hasEffect: params['dryRun'] !== true });
114
123
  const ergebnis = {
115
124
  invoice: pflichtObjekt('issueInvoice', daten, 'invoice'),
116
125
  replayed: objekt(daten)['replayed'] === true,
@@ -131,7 +140,9 @@ async function issueInvoice(transport, request) {
131
140
  * Probelauf und Ausstellen kann sich der Kunde oder das Konto aendern.
132
141
  */
133
142
  async function previewInvoice(transport, request) {
134
- const daten = await transport('issueInvoice', { ...nutzlast(request), dryRun: true });
143
+ // Ein Probelauf schreibt nichts: nach einem Zeitlimit bleibt er `rejected`,
144
+ // obwohl `issueInvoice` sonst Wirkung hat.
145
+ const daten = await transport('issueInvoice', { ...nutzlast(request), dryRun: true }, undefined, undefined, { hasEffect: false });
135
146
  const ergebnis = { preview: pflichtObjekt('issueInvoice', daten, 'preview') };
136
147
  const notice = hinweise(daten);
137
148
  if (notice)
@@ -661,12 +661,17 @@ export interface ErrorRuleDetail {
661
661
  export declare function findErrorRule(kind: ErrorKind, detail?: ErrorRuleDetail): ErrorRule;
662
662
  /**
663
663
  * Kassen-Aufrufe mit Wirkung, die sich nach einem Netzfehler nicht gefahrlos
664
- * wiederholen lassen: die sechs, deren Ausgang das Paket selbst als unklar
665
- * fuehrt (Beleg, auch Null- und Startbeleg ueber `createReceipt`, Storno,
666
- * FinanzOnline, die drei Geldwege), dazu der Druckjob (zweiter Bon) und die
667
- * Belegmail (zweite Mail). Ob die Anfrage vor dem Abriss schon draussen war,
668
- * sieht das Paket nicht (fetch wirft in beiden Faellen gleich); darum gilt
669
- * hier immer der vorsichtige Satz.
664
+ * wiederholen lassen: Beleg (auch Null- und Startbeleg ueber
665
+ * `createReceipt`), Storno, FinanzOnline, die drei Geldwege, der Druckjob
666
+ * (zweiter Bon) und die Belegmail (zweite Mail). Ob die Anfrage vor dem
667
+ * Abriss schon draussen war, sieht das Paket nicht (fetch wirft in beiden
668
+ * Faellen gleich); darum gilt hier immer der vorsichtige Satz, auch fuer
669
+ * einen Fehler, der vor dem Senden entstand.
670
+ *
671
+ * Seit 1.5.1 fuehrt der Transport jeden Aufruf mit Wirkung als unklar
672
+ * (`UNKNOWN_OUTCOME_CALLS`, eine Obermenge dieser Liste), und
673
+ * [messageOutcome] folgt zuerst ihm. Die Liste bleibt als Vertrag der
674
+ * Kassentexte (`callsWithEffect` in `fixtures/pos-texts.json`) unveraendert.
670
675
  */
671
676
  export declare const CALLS_WITH_EFFECT: readonly ["createReceipt", "cancelReceipt", "financeWebService", "hobexPayApi", "hobexRefundApi", "stripeCaptureIntent", "createPrintJob", "sendReceiptEmail"];
672
677
  /**
@@ -378,12 +378,17 @@ function findErrorRule(kind, detail = {}) {
378
378
  }
379
379
  /**
380
380
  * Kassen-Aufrufe mit Wirkung, die sich nach einem Netzfehler nicht gefahrlos
381
- * wiederholen lassen: die sechs, deren Ausgang das Paket selbst als unklar
382
- * fuehrt (Beleg, auch Null- und Startbeleg ueber `createReceipt`, Storno,
383
- * FinanzOnline, die drei Geldwege), dazu der Druckjob (zweiter Bon) und die
384
- * Belegmail (zweite Mail). Ob die Anfrage vor dem Abriss schon draussen war,
385
- * sieht das Paket nicht (fetch wirft in beiden Faellen gleich); darum gilt
386
- * hier immer der vorsichtige Satz.
381
+ * wiederholen lassen: Beleg (auch Null- und Startbeleg ueber
382
+ * `createReceipt`), Storno, FinanzOnline, die drei Geldwege, der Druckjob
383
+ * (zweiter Bon) und die Belegmail (zweite Mail). Ob die Anfrage vor dem
384
+ * Abriss schon draussen war, sieht das Paket nicht (fetch wirft in beiden
385
+ * Faellen gleich); darum gilt hier immer der vorsichtige Satz, auch fuer
386
+ * einen Fehler, der vor dem Senden entstand.
387
+ *
388
+ * Seit 1.5.1 fuehrt der Transport jeden Aufruf mit Wirkung als unklar
389
+ * (`UNKNOWN_OUTCOME_CALLS`, eine Obermenge dieser Liste), und
390
+ * [messageOutcome] folgt zuerst ihm. Die Liste bleibt als Vertrag der
391
+ * Kassentexte (`callsWithEffect` in `fixtures/pos-texts.json`) unveraendert.
387
392
  */
388
393
  exports.CALLS_WITH_EFFECT = Object.freeze([
389
394
  'createReceipt',
@@ -1,5 +1,5 @@
1
1
  /** Fingerabdruck des Vertrags-Exports, aus dem diese Datei stammt (`_quelle.sha256`). */
2
- export declare const VOKABULAR_QUELLE = "d351a778c02888291e325068f96156ad1346859f6ff97bae27f91089e9619e8c";
2
+ export declare const VOKABULAR_QUELLE = "6e6eae018f1e84116d3942cbfd35bc2d5d6f5c5e5551823c7ed88f15ed407744";
3
3
  /** Schema-Notation des Vertrags: Blatt 'aussen': 'innen', Objekt { __: 'innen', ... }, Liste [ { __: 'innen', ... } ]. */
4
4
  export type SchemaEintrag = string | SchemaObjekt | readonly [SchemaObjekt];
5
5
  export interface SchemaObjekt {
@@ -4,7 +4,7 @@
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.KATALOGE = exports.ARTIKEL_FELDER = exports.SCHEMAS = exports.VOKABULAR_QUELLE = void 0;
6
6
  /** Fingerabdruck des Vertrags-Exports, aus dem diese Datei stammt (`_quelle.sha256`). */
7
- exports.VOKABULAR_QUELLE = "d351a778c02888291e325068f96156ad1346859f6ff97bae27f91089e9619e8c";
7
+ exports.VOKABULAR_QUELLE = "6e6eae018f1e84116d3942cbfd35bc2d5d6f5c5e5551823c7ed88f15ed407744";
8
8
  /** Schema je Endpunkt (aussen -> innen) und Wertverweise auf die Kataloge. */
9
9
  exports.SCHEMAS = {
10
10
  "getReceipt": {
@@ -4,4 +4,4 @@
4
4
  * Client-Version, Nachtrag §6). Ein Test haelt sie gleich mit `package.json`;
5
5
  * beim Anheben der Version beide Stellen aendern.
6
6
  */
7
- export declare const PACKAGE_VERSION = "1.5.0";
7
+ export declare const PACKAGE_VERSION = "1.6.0";
@@ -7,4 +7,4 @@ exports.PACKAGE_VERSION = void 0;
7
7
  * Client-Version, Nachtrag §6). Ein Test haelt sie gleich mit `package.json`;
8
8
  * beim Anheben der Version beide Stellen aendern.
9
9
  */
10
- exports.PACKAGE_VERSION = '1.5.0';
10
+ exports.PACKAGE_VERSION = '1.6.0';