@kreiseck/kasseneck-api 1.5.1 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +78 -0
- package/README.md +119 -3
- package/dist/cjs/client/aufrufe.d.ts +3 -3
- package/dist/cjs/client/aufrufe.js +17 -0
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/inventory/api.d.ts +10 -2
- package/dist/cjs/inventory/api.js +8 -1
- package/dist/cjs/inventory/endpunkte.d.ts +2 -1
- package/dist/cjs/inventory/endpunkte.js +2 -1
- package/dist/cjs/inventory/index.d.ts +5 -3
- package/dist/cjs/inventory/index.js +15 -3
- package/dist/cjs/inventory/lesen.d.ts +7 -1
- package/dist/cjs/inventory/lesen.js +75 -0
- package/dist/cjs/inventory/schreiben.d.ts +23 -1
- package/dist/cjs/inventory/schreiben.js +18 -9
- package/dist/cjs/inventory/typen.d.ts +156 -2
- package/dist/cjs/inventory/varianten.d.ts +67 -0
- package/dist/cjs/inventory/varianten.js +150 -0
- package/dist/cjs/inventory/vertrag.d.ts +40 -5
- package/dist/cjs/inventory/vertrag.js +51 -3
- package/dist/cjs/inventory/webhook.d.ts +5 -2
- package/dist/cjs/inventory/webhook.js +8 -2
- package/dist/cjs/models/cashregister.d.ts +21 -0
- package/dist/cjs/models/cashregister.js +20 -0
- package/dist/cjs/models/index.d.ts +1 -1
- package/dist/cjs/stored/vokabular.d.ts +1 -1
- package/dist/cjs/stored/vokabular.js +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/client/aufrufe.d.ts +3 -3
- package/dist/esm/client/aufrufe.js +17 -0
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/inventory/api.d.ts +10 -2
- package/dist/esm/inventory/api.js +8 -1
- package/dist/esm/inventory/endpunkte.d.ts +2 -1
- package/dist/esm/inventory/endpunkte.js +2 -1
- package/dist/esm/inventory/index.d.ts +5 -3
- package/dist/esm/inventory/index.js +4 -2
- package/dist/esm/inventory/lesen.d.ts +7 -1
- package/dist/esm/inventory/lesen.js +74 -0
- package/dist/esm/inventory/schreiben.d.ts +23 -1
- package/dist/esm/inventory/schreiben.js +13 -10
- package/dist/esm/inventory/typen.d.ts +156 -2
- package/dist/esm/inventory/varianten.d.ts +67 -0
- package/dist/esm/inventory/varianten.js +142 -0
- package/dist/esm/inventory/vertrag.d.ts +40 -5
- package/dist/esm/inventory/vertrag.js +50 -2
- package/dist/esm/inventory/webhook.d.ts +5 -2
- package/dist/esm/inventory/webhook.js +9 -3
- package/dist/esm/models/cashregister.d.ts +21 -0
- package/dist/esm/models/cashregister.js +20 -0
- package/dist/esm/models/index.d.ts +1 -1
- package/dist/esm/stored/vokabular.d.ts +1 -1
- package/dist/esm/stored/vokabular.js +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/fixtures/hobex-hps-codes.json +1 -1
- package/fixtures/invoice-api.schema.json +1 -1
- package/fixtures/invoice-texts.json +1 -1
- package/fixtures/pos-texts.json +1 -1
- package/fixtures/surface.json +31 -6
- package/fixtures/v3/antworten/belege.json +1 -1
- package/fixtures/v3/antworten/belegmail.json +1 -1
- package/fixtures/v3/antworten/kasse-belege.json +1 -1
- package/fixtures/v3/antworten/kasse.json +2 -2
- package/fixtures/v3/antworten/lager.json +2396 -4
- package/fixtures/v3/antworten/rechnungen.json +1 -1
- package/fixtures/v3/antworten/storno.json +1 -1
- package/fixtures/v3/stored/belege.json +1 -1
- package/fixtures/v3/stored/kasse.json +2 -2
- package/fixtures/v3/stored/rechnungen.json +1 -1
- package/fixtures/v3/v3-vokabular.json +151 -6
- package/fixtures/v3/zahlbetrag-faelle.json +1 -1
- package/package.json +1 -1
|
@@ -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
|
|
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,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,7 +11,7 @@
|
|
|
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
|
|
14
|
+
/** Die 32 Endpunkte (14 aus 5a, 13 aus 5b, 5 aus 5c), in der Reihenfolge von `endpoints.public`. */
|
|
15
15
|
export const INVENTORY_ENDPOINTS = [
|
|
16
16
|
'getArticle',
|
|
17
17
|
'listArticles',
|
|
@@ -40,6 +40,11 @@ export const INVENTORY_ENDPOINTS = [
|
|
|
40
40
|
'releaseReservation',
|
|
41
41
|
'getReservation',
|
|
42
42
|
'listReservations',
|
|
43
|
+
'createVariantGroup',
|
|
44
|
+
'updateVariantGroup',
|
|
45
|
+
'getVariantGroup',
|
|
46
|
+
'listVariantGroups',
|
|
47
|
+
'addVariant',
|
|
43
48
|
];
|
|
44
49
|
/** Art eines Standorts (Katalog `STANDORT_TYP`). */
|
|
45
50
|
export const LOCATION_TYPES = ['warehouse', 'store', 'vehicle', 'other'];
|
|
@@ -113,6 +118,10 @@ export const WEBHOOK_DELIVERY_STATUSES = ['delivered', 'pending', 'failed', 'dro
|
|
|
113
118
|
* wie `getReservation`, mit dem Status danach: `reservation.released` und
|
|
114
119
|
* `reservation.redeemed` kommen bei jeder wirksamen Freigabe bzw. Einloesung,
|
|
115
120
|
* auch einer teilweisen (dann bleibt der Status `active`).
|
|
121
|
+
* `variant_group.created` und `variant_group.updated` (seit 1.6.0) tragen die
|
|
122
|
+
* Variantengruppe wie `getVariantGroup`; `updated` kommt nur bei einer aussen
|
|
123
|
+
* sichtbaren Aenderung (neuer Wert, neue oder stillgelegte Variante, Name,
|
|
124
|
+
* Vorgaben, Stilllegen der Gruppe).
|
|
116
125
|
*/
|
|
117
126
|
export const INVENTORY_WEBHOOK_EVENTS = [
|
|
118
127
|
'stock.changed',
|
|
@@ -123,6 +132,8 @@ export const INVENTORY_WEBHOOK_EVENTS = [
|
|
|
123
132
|
'reservation.expired',
|
|
124
133
|
'reservation.released',
|
|
125
134
|
'reservation.redeemed',
|
|
135
|
+
'variant_group.created',
|
|
136
|
+
'variant_group.updated',
|
|
126
137
|
];
|
|
127
138
|
/**
|
|
128
139
|
* Die Felder der Huelle jeder Zustellung, in der Reihenfolge am Draht. Statt
|
|
@@ -150,6 +161,19 @@ export const INVENTORY_LIST_LIMIT_MAX = 200;
|
|
|
150
161
|
* [inventoryShortfalls]), `code_taken` und `external_id_taken` (mit `field` und
|
|
151
162
|
* `articleId` des Artikels, dem der Code gehoert), `stock_kind_locked`,
|
|
152
163
|
* `reservation_not_found`, `reservation_not_active` …
|
|
164
|
+
*
|
|
165
|
+
* Seit 1.6.0 dahinter die Codes der Variantengruppen: `variant_group_not_found`
|
|
166
|
+
* (unbekannte Kennung), `variant_already_exists` (die Kombination gibt es in der
|
|
167
|
+
* Gruppe schon, dann mit `articleId` der bestehenden Variante, oder sie steht
|
|
168
|
+
* zweimal in `variants[]`; jeweils mit `field`),
|
|
169
|
+
* `invalid_variant_attributes` (ein Merkmal fehlt, ist unbekannt oder sein Wert
|
|
170
|
+
* steht nicht in der Werteliste; `field` und `errors[]`),
|
|
171
|
+
* `variant_group_inactive` (stillgelegte Gruppe: kein `addVariant`, keine
|
|
172
|
+
* Aenderung ausser erneutem Stilllegen) und `variant_limit` (mehr als
|
|
173
|
+
* [VARIANT_GROUP_ACTIVE_MAX] aktive Varianten je Gruppe). Wiederverwendet:
|
|
174
|
+
* `too_many_positions` traegt bei Varianten `field` (`variants`,
|
|
175
|
+
* `createMatrix` bzw. `externalIds` bei `addVariant`): die Anfrage braeuchte
|
|
176
|
+
* mehr Schreibvorgaenge, als in einen Vorgang passen; geschrieben wurde nichts.
|
|
153
177
|
*/
|
|
154
178
|
export const INVENTORY_ERROR_CODES = [
|
|
155
179
|
'validation',
|
|
@@ -213,6 +237,11 @@ export const INVENTORY_ERROR_CODES = [
|
|
|
213
237
|
'insufficient_available',
|
|
214
238
|
'reservation_not_found',
|
|
215
239
|
'reservation_not_active',
|
|
240
|
+
'variant_group_not_found',
|
|
241
|
+
'variant_already_exists',
|
|
242
|
+
'invalid_variant_attributes',
|
|
243
|
+
'variant_group_inactive',
|
|
244
|
+
'variant_limit',
|
|
216
245
|
];
|
|
217
246
|
/**
|
|
218
247
|
* Codes, die Anmeldung und Rand auf jedem Lager-Aufruf erzeugen koennen,
|
|
@@ -286,3 +315,22 @@ export const INVENTORY_IDEMPOTENCY_KEY_MAX = 120;
|
|
|
286
315
|
/** Kuerzeste und laengste Haltedauer einer Reservierung in Minuten (`expiresInMinutes`, 30 Tage). */
|
|
287
316
|
export const RESERVATION_MINUTES_MIN = 5;
|
|
288
317
|
export const RESERVATION_MINUTES_MAX = 43_200;
|
|
318
|
+
// ---- Varianten (Backend Stufe 5c, seit 1.6.0) -----------------------------------
|
|
319
|
+
/**
|
|
320
|
+
* Grenzen einer Variantengruppe, wie das Backend sie prueft. Das Paket prueft
|
|
321
|
+
* sie **nicht** vor dem Senden: der Server darf sie anheben, ohne dass eine
|
|
322
|
+
* aeltere Paketversion dann faelschlich abweist. Wer darueber liegt, bekommt
|
|
323
|
+
* `validation` (Merkmale, Werte, Matrix, `variants[]`) bzw. `variant_limit`.
|
|
324
|
+
*
|
|
325
|
+
* - [VARIANT_ATTRIBUTES_MAX] Merkmale je Gruppe (Schluessel `^[a-z0-9_]{1,32}$`,
|
|
326
|
+
* eindeutig; `__…__` ist reserviert),
|
|
327
|
+
* - [VARIANT_VALUES_MAX] Werte je Merkmal (je 1–30 Zeichen, eindeutig ohne
|
|
328
|
+
* Gross/Klein),
|
|
329
|
+
* - [VARIANT_MATRIX_MAX] Kombinationen bei `createMatrix: true` und hoechstens
|
|
330
|
+
* so viele Eintraege in `variants[]` je Anfrage,
|
|
331
|
+
* - [VARIANT_GROUP_ACTIVE_MAX] aktive Varianten je Gruppe.
|
|
332
|
+
*/
|
|
333
|
+
export const VARIANT_ATTRIBUTES_MAX = 3;
|
|
334
|
+
export const VARIANT_VALUES_MAX = 30;
|
|
335
|
+
export const VARIANT_MATRIX_MAX = 100;
|
|
336
|
+
export const 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 (
|
|
43
|
-
*
|
|
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
|
*
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { KasseneckValidationError } from '../client/errors.js';
|
|
17
17
|
import { verifyWebhookSignature as pruefeSignatur } from '../partner/webhook-signatur.js';
|
|
18
|
-
import { artikel, bestandGeaendert, objekt, reservierung, unterMindestbestand } from './lesen.js';
|
|
18
|
+
import { artikel, bestandGeaendert, objekt, reservierung, unterMindestbestand, variantengruppe } from './lesen.js';
|
|
19
19
|
import { INVENTORY_WEBHOOK_EVENTS } from './vertrag.js';
|
|
20
20
|
export { WEBHOOK_SIGNATURE_HEADER, WEBHOOK_EVENT_HEADER, WEBHOOK_DELIVERY_HEADER, WEBHOOK_TOLERANCE_SEC, } from '../partner/webhook-signatur.js';
|
|
21
21
|
/**
|
|
@@ -56,10 +56,13 @@ function kaputt(grund) {
|
|
|
56
56
|
* Liest eine Zustellung als typisiertes Ereignis. Vorher die Signatur pruefen
|
|
57
57
|
* ([verifyInventoryWebhookSignature]).
|
|
58
58
|
*
|
|
59
|
-
* - Ein Ereignis, das diese Paketversion nicht kennt (
|
|
60
|
-
*
|
|
59
|
+
* - Ein Ereignis, das diese Paketversion nicht kennt (eines einer spaeteren
|
|
60
|
+
* Stufe), ergibt `null`: mit 2xx antworten und uebergehen.
|
|
61
61
|
* - `reservation.expired|released|redeemed` tragen die Reservierung wie
|
|
62
62
|
* `getReservation`, mit dem Status nach dem Vorgang (seit 1.5.0).
|
|
63
|
+
* - `variant_group.created|updated` tragen die Gruppe wie `getVariantGroup`
|
|
64
|
+
* (seit 1.6.0). Zwei Zustellungen koennen sich ueberholen: den Stand nur
|
|
65
|
+
* uebernehmen, wenn `data.updatedAt` neuer ist als der gespeicherte.
|
|
63
66
|
* - Ein Rumpf, der keine Huelle ist, oder eine Bruchzahl in einer Menge wirft
|
|
64
67
|
* `KasseneckValidationError` (`scope: 'response'`).
|
|
65
68
|
*
|
|
@@ -101,6 +104,9 @@ export function parseInventoryWebhookEvent(rawBody) {
|
|
|
101
104
|
case 'reservation.released':
|
|
102
105
|
case 'reservation.redeemed':
|
|
103
106
|
return { ...huelle, type: huelle.type, data: reservierung(ort, data) };
|
|
107
|
+
case 'variant_group.created':
|
|
108
|
+
case 'variant_group.updated':
|
|
109
|
+
return { ...huelle, type: huelle.type, data: variantengruppe(ort, data) };
|
|
104
110
|
default:
|
|
105
111
|
return { ...huelle, type: huelle.type, data: artikel(ort, data) };
|
|
106
112
|
}
|
|
@@ -38,8 +38,23 @@ export interface Cashregister {
|
|
|
38
38
|
signatureId?: string;
|
|
39
39
|
/** Lager-Standort der Kasse (Lager-Kern Stufe 2); fehlt = Standard-Standort des Betriebs. */
|
|
40
40
|
stockLocationId?: string;
|
|
41
|
+
/**
|
|
42
|
+
* Eigene Abmelde-Werte dieser Kasse; fehlt, wenn die Kasse keine eigenen hat
|
|
43
|
+
* (dann gelten die Werte des Betriebs).
|
|
44
|
+
*/
|
|
45
|
+
autoLogout?: CashregisterAutoLogout;
|
|
41
46
|
onboarding: CashregisterOnboarding;
|
|
42
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Automatisches Abmelden an der Kasse. Beide Felder sind einzeln optional: der
|
|
50
|
+
* Server sendet nur, was die Kasse selbst gesetzt hat.
|
|
51
|
+
*/
|
|
52
|
+
export interface CashregisterAutoLogout {
|
|
53
|
+
/** Abmeldung nach Leerlauf in Minuten; `0` = aus. */
|
|
54
|
+
autoLogoutMinutes?: 0 | 1 | 5 | 15 | 30;
|
|
55
|
+
/** Nach jedem Verkauf abmelden. */
|
|
56
|
+
logoutAfterSale?: boolean;
|
|
57
|
+
}
|
|
43
58
|
/**
|
|
44
59
|
* Stand der Inbetriebnahme (RKSV): Kasse bei FinanzOnline registriert,
|
|
45
60
|
* Startbeleg erzeugt, Startbeleg uebermittelt. Die drei Kennzeichen entscheiden
|
|
@@ -61,9 +76,15 @@ export interface CashregisterPayload {
|
|
|
61
76
|
create_time?: string | null;
|
|
62
77
|
signature_id?: string | null;
|
|
63
78
|
stockLocationId?: string | null;
|
|
79
|
+
autoLogout?: CashregisterAutoLogoutPayload | null;
|
|
64
80
|
token?: string | null;
|
|
65
81
|
onboarding?: CashregisterOnboardingPayload | null;
|
|
66
82
|
}
|
|
83
|
+
/** `autoLogout` am Draht `/v3`; die Namen sind dieselben wie am Modell. */
|
|
84
|
+
export interface CashregisterAutoLogoutPayload {
|
|
85
|
+
autoLogoutMinutes?: number | null;
|
|
86
|
+
logoutAfterSale?: boolean | null;
|
|
87
|
+
}
|
|
67
88
|
/**
|
|
68
89
|
* `onboarding` am Draht `/v3` (fixtures/v3/antworten/kasse.json): der
|
|
69
90
|
* Startbeleg heisst dort `start_receipt_*`. Die inneren Namen
|
|
@@ -14,6 +14,7 @@ export function fromCashregisterPayload(payload, id) {
|
|
|
14
14
|
...(payload.token ? { token: payload.token } : {}),
|
|
15
15
|
...(payload.signature_id ? { signatureId: payload.signature_id } : {}),
|
|
16
16
|
...(payload.stockLocationId ? { stockLocationId: payload.stockLocationId } : {}),
|
|
17
|
+
...autoLogoutFeld(payload.autoLogout),
|
|
17
18
|
onboarding: {
|
|
18
19
|
cashboxRegistered: ob.cashbox_registered === true,
|
|
19
20
|
startReceiptCreated: ob.start_receipt_created === true,
|
|
@@ -24,6 +25,25 @@ export function fromCashregisterPayload(payload, id) {
|
|
|
24
25
|
},
|
|
25
26
|
};
|
|
26
27
|
}
|
|
28
|
+
const AUTO_LOGOUT_MINUTEN = new Set([0, 1, 5, 15, 30]);
|
|
29
|
+
/**
|
|
30
|
+
* `autoLogout` gibt es nur, wenn die Nutzlast mindestens einen lesbaren Wert
|
|
31
|
+
* traegt. Eine Minutenzahl ausserhalb von 0/1/5/15/30 wird verworfen statt
|
|
32
|
+
* durchgereicht (ein neuer Server-Wert soll die Kasse nicht unlesbar machen).
|
|
33
|
+
*/
|
|
34
|
+
function autoLogoutFeld(roh) {
|
|
35
|
+
if (roh === null || roh === undefined || typeof roh !== 'object') {
|
|
36
|
+
return {};
|
|
37
|
+
}
|
|
38
|
+
const wert = {};
|
|
39
|
+
if (typeof roh.autoLogoutMinutes === 'number' && AUTO_LOGOUT_MINUTEN.has(roh.autoLogoutMinutes)) {
|
|
40
|
+
wert.autoLogoutMinutes = roh.autoLogoutMinutes;
|
|
41
|
+
}
|
|
42
|
+
if (typeof roh.logoutAfterSale === 'boolean') {
|
|
43
|
+
wert.logoutAfterSale = roh.logoutAfterSale;
|
|
44
|
+
}
|
|
45
|
+
return Object.keys(wert).length === 0 ? {} : { autoLogout: wert };
|
|
46
|
+
}
|
|
27
47
|
/**
|
|
28
48
|
* Ein Zeitfeld, das es nur gibt, wenn die Nutzlast einen lesbaren Zeitstempel
|
|
29
49
|
* traegt. `null` (der Normalfall aus `isoTs`) und unlesbarer Unsinn ergeben
|
|
@@ -7,7 +7,7 @@ export { type PaymentErrorCode, PAYMENT_ERROR_CODES, isPaymentErrorCode, payment
|
|
|
7
7
|
export { type ReceiptEmailErrorCode, type ReceiptEmailVia, RECEIPT_EMAIL_ERROR_CODES, RECEIPT_EMAIL_SEND_ERROR_CODES, type ReceiptEmailSendErrorCode, RECEIPT_EMAIL_VIAS, isReceiptEmailErrorCode, receiptEmailErrorCode, isReceiptEmailError, receiptEmailFieldErrors, type ReceiptEmailFieldError, } from './receipt-email.js';
|
|
8
8
|
export { type ReceiptErrorCode, type ReceiptFieldError, RECEIPT_ERROR_CODES, isReceiptErrorCode, receiptErrorCode, isReceiptError, receiptFieldErrors, } from './receipt-errors.js';
|
|
9
9
|
export { type ReceiptCompany, type ReceiptCompanyPayload, fromReceiptCompanyPayload, receiptCompanyTaxInfo, } from './receipt-company.js';
|
|
10
|
-
export { type Cashregister, type CashregisterOnboarding, type CashregisterPayload, type CashregisterOnboardingPayload, fromCashregisterPayload, } from './cashregister.js';
|
|
10
|
+
export { type Cashregister, type CashregisterOnboarding, type CashregisterPayload, type CashregisterOnboardingPayload, type CashregisterAutoLogout, type CashregisterAutoLogoutPayload, fromCashregisterPayload, } from './cashregister.js';
|
|
11
11
|
export { type ReceiptSummary, type ReceiptSummaryPayload, fromReceiptSummaryPayload, type ZeroKind, ZERO_KINDS, isZeroKind } from './receipt-summary.js';
|
|
12
12
|
export { type ReportMonth, reportMonthFromDate, previousReportMonth, nextReportMonth, reportMonthKey, reportMonthReadable, } from './report-month.js';
|
|
13
13
|
export { type StripeUrlSession, type StripeUrlSessionPayload, toStripeUrlSessionPayload, fromStripeUrlSessionPayload, } from './stripe-url-session.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Fingerabdruck des Vertrags-Exports, aus dem diese Datei stammt (`_quelle.sha256`). */
|
|
2
|
-
export declare const VOKABULAR_QUELLE = "
|
|
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 {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Erzeugt von scripts/stored-vokabular.mjs aus fixtures/v3/v3-vokabular.json.
|
|
2
2
|
// Nicht von Hand aendern: test/stored.test.ts vergleicht mit dem Vertrag.
|
|
3
3
|
/** Fingerabdruck des Vertrags-Exports, aus dem diese Datei stammt (`_quelle.sha256`). */
|
|
4
|
-
export const VOKABULAR_QUELLE = "
|
|
4
|
+
export const VOKABULAR_QUELLE = "6e6eae018f1e84116d3942cbfd35bc2d5d6f5c5e5551823c7ed88f15ed407744";
|
|
5
5
|
/** Schema je Endpunkt (aussen -> innen) und Wertverweise auf die Kataloge. */
|
|
6
6
|
export const SCHEMAS = {
|
|
7
7
|
"getReceipt": {
|
package/dist/esm/version.d.ts
CHANGED
package/dist/esm/version.js
CHANGED
package/fixtures/pos-texts.json
CHANGED
package/fixtures/surface.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.
|
|
2
|
+
"version": "1.7.0",
|
|
3
3
|
"baseUrls": {
|
|
4
4
|
"public": "https://api.kasseneck.at/v3",
|
|
5
5
|
"pos": "https://kasse.kasseneck.at/api/v3"
|
|
@@ -81,7 +81,12 @@
|
|
|
81
81
|
"extendReservation",
|
|
82
82
|
"releaseReservation",
|
|
83
83
|
"getReservation",
|
|
84
|
-
"listReservations"
|
|
84
|
+
"listReservations",
|
|
85
|
+
"createVariantGroup",
|
|
86
|
+
"updateVariantGroup",
|
|
87
|
+
"getVariantGroup",
|
|
88
|
+
"listVariantGroups",
|
|
89
|
+
"addVariant"
|
|
85
90
|
],
|
|
86
91
|
"pos": [
|
|
87
92
|
"cancelReceipt",
|
|
@@ -202,7 +207,12 @@
|
|
|
202
207
|
"extendReservation",
|
|
203
208
|
"releaseReservation",
|
|
204
209
|
"getReservation",
|
|
205
|
-
"listReservations"
|
|
210
|
+
"listReservations",
|
|
211
|
+
"createVariantGroup",
|
|
212
|
+
"updateVariantGroup",
|
|
213
|
+
"getVariantGroup",
|
|
214
|
+
"listVariantGroups",
|
|
215
|
+
"addVariant"
|
|
206
216
|
],
|
|
207
217
|
"pos": [
|
|
208
218
|
"pairRegisterDevice",
|
|
@@ -237,6 +247,7 @@
|
|
|
237
247
|
},
|
|
238
248
|
"unknownOutcomeCalls": [
|
|
239
249
|
"activateCashregister",
|
|
250
|
+
"addVariant",
|
|
240
251
|
"cancelInvoice",
|
|
241
252
|
"cancelReceipt",
|
|
242
253
|
"changeStockCondition",
|
|
@@ -250,6 +261,7 @@
|
|
|
250
261
|
"createPrintJob",
|
|
251
262
|
"createReceipt",
|
|
252
263
|
"createReservation",
|
|
264
|
+
"createVariantGroup",
|
|
253
265
|
"createWebhook",
|
|
254
266
|
"deactivateArticle",
|
|
255
267
|
"deletePartnerWebhook",
|
|
@@ -286,6 +298,7 @@
|
|
|
286
298
|
"updateCustomer",
|
|
287
299
|
"updateInvoiceItem",
|
|
288
300
|
"updatePartnerWebhook",
|
|
301
|
+
"updateVariantGroup",
|
|
289
302
|
"updateWebhook",
|
|
290
303
|
"withdrawInvoiceItem"
|
|
291
304
|
],
|
|
@@ -1070,7 +1083,12 @@
|
|
|
1070
1083
|
"extendReservation",
|
|
1071
1084
|
"releaseReservation",
|
|
1072
1085
|
"getReservation",
|
|
1073
|
-
"listReservations"
|
|
1086
|
+
"listReservations",
|
|
1087
|
+
"createVariantGroup",
|
|
1088
|
+
"updateVariantGroup",
|
|
1089
|
+
"getVariantGroup",
|
|
1090
|
+
"listVariantGroups",
|
|
1091
|
+
"addVariant"
|
|
1074
1092
|
],
|
|
1075
1093
|
"inventoryErrorCodes": [
|
|
1076
1094
|
"validation",
|
|
@@ -1133,7 +1151,12 @@
|
|
|
1133
1151
|
"reason_required",
|
|
1134
1152
|
"insufficient_available",
|
|
1135
1153
|
"reservation_not_found",
|
|
1136
|
-
"reservation_not_active"
|
|
1154
|
+
"reservation_not_active",
|
|
1155
|
+
"variant_group_not_found",
|
|
1156
|
+
"variant_already_exists",
|
|
1157
|
+
"invalid_variant_attributes",
|
|
1158
|
+
"variant_group_inactive",
|
|
1159
|
+
"variant_limit"
|
|
1137
1160
|
],
|
|
1138
1161
|
"inventoryRequestErrorCodes": [
|
|
1139
1162
|
"account_not_found",
|
|
@@ -1182,7 +1205,9 @@
|
|
|
1182
1205
|
"article.deactivated",
|
|
1183
1206
|
"reservation.expired",
|
|
1184
1207
|
"reservation.released",
|
|
1185
|
-
"reservation.redeemed"
|
|
1208
|
+
"reservation.redeemed",
|
|
1209
|
+
"variant_group.created",
|
|
1210
|
+
"variant_group.updated"
|
|
1186
1211
|
],
|
|
1187
1212
|
"landedCostAllocations": [
|
|
1188
1213
|
"value",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"_hinweis": "Vertrags-Export /v3, erzeugt aus den echten Handlern (npm run vertrag:v3 in functions/ und functions-kasse/). Nicht von Hand pflegen.",
|
|
3
3
|
"_quelle": {
|
|
4
4
|
"sha256": "61892b91e6a8a0f273dcfdeb63809d92d98fb837a3c0baa782f03b29dd3b8b7a",
|
|
5
|
-
"inputsSha256": "
|
|
5
|
+
"inputsSha256": "8490315ac4059c3b26274649b8c3323295b26a6422a02da3a3cc241338cc797b",
|
|
6
6
|
"backendPackage": "@kreiseck/kasseneck-api@0.33.0",
|
|
7
7
|
"inputs": [
|
|
8
8
|
"docs/api/fehlercodes.json",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"_hinweis": "Vertrags-Export /v3, erzeugt aus den echten Handlern (npm run vertrag:v3 in functions/ und functions-kasse/). Nicht von Hand pflegen.",
|
|
3
3
|
"_quelle": {
|
|
4
4
|
"sha256": "265bcf3e14cdea33ec3c4df399eb487d40c0d7793ee23d2ee12bcf664bcad550",
|
|
5
|
-
"inputsSha256": "
|
|
5
|
+
"inputsSha256": "8490315ac4059c3b26274649b8c3323295b26a6422a02da3a3cc241338cc797b",
|
|
6
6
|
"backendPackage": "@kreiseck/kasseneck-api@0.33.0",
|
|
7
7
|
"inputs": [
|
|
8
8
|
"docs/api/fehlercodes.json",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"_hinweis": "Vertrags-Export /v3, erzeugt aus den echten Handlern (npm run vertrag:v3 in functions/ und functions-kasse/). Nicht von Hand pflegen.",
|
|
3
3
|
"_quelle": {
|
|
4
4
|
"sha256": "aad7147db385e4a6d88ba5fb59d24c04e7e1f01195778aa70ccdc68fb90adcd7",
|
|
5
|
-
"inputsSha256": "
|
|
5
|
+
"inputsSha256": "8490315ac4059c3b26274649b8c3323295b26a6422a02da3a3cc241338cc797b",
|
|
6
6
|
"backendPackage": "@kreiseck/kasseneck-api@0.33.0",
|
|
7
7
|
"inputs": [
|
|
8
8
|
"docs/api/fehlercodes.json",
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"default": {
|
|
5
5
|
"sha256": "bf1e7c100e328517c72d5badf31904183efe22d1fddec308e2fe2722068854bc",
|
|
6
6
|
"head": [],
|
|
7
|
-
"inputsSha256": "
|
|
7
|
+
"inputsSha256": "10b8007647d9d9ba2a1c904b320f1ad5a97f66ab2ae3f4511ba18bfcbd616dea",
|
|
8
8
|
"backendPackage": "@kreiseck/kasseneck-api@0.33.0",
|
|
9
9
|
"inputs": [
|
|
10
10
|
"functions-kasse/test/unit/fixtures/kassen-welt.js",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"channel",
|
|
25
25
|
"note"
|
|
26
26
|
],
|
|
27
|
-
"inputsSha256": "
|
|
27
|
+
"inputsSha256": "35cb1bb7c33a3eb238dd7a4a38ef604df1170e108afb3a8800fbf17ea6d3a3cb",
|
|
28
28
|
"backendPackage": "@kreiseck/kasseneck-api@0.14.0",
|
|
29
29
|
"inputs": [
|
|
30
30
|
"functions-kasse/gemeinsam/api-rand.js",
|