@kreiseck/kasseneck-api 1.7.1 → 1.8.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 (113) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/README.md +170 -1
  3. package/dist/cjs/client/aufrufe.d.ts +9 -7
  4. package/dist/cjs/client/aufrufe.js +57 -2
  5. package/dist/cjs/client/errors.js +2 -0
  6. package/dist/cjs/client/index.d.ts +1 -1
  7. package/dist/cjs/client/index.js +2 -1
  8. package/dist/cjs/client/transport.d.ts +27 -3
  9. package/dist/cjs/client/transport.js +29 -3
  10. package/dist/cjs/index.d.ts +1 -1
  11. package/dist/cjs/index.js +3 -2
  12. package/dist/cjs/inventory/api.d.ts +21 -2
  13. package/dist/cjs/inventory/api.js +22 -3
  14. package/dist/cjs/inventory/fehler.d.ts +6 -0
  15. package/dist/cjs/inventory/fehler.js +12 -0
  16. package/dist/cjs/inventory/index.d.ts +6 -4
  17. package/dist/cjs/inventory/index.js +33 -3
  18. package/dist/cjs/inventory/inventur.d.ts +104 -0
  19. package/dist/cjs/inventory/inventur.js +245 -0
  20. package/dist/cjs/inventory/lesen.d.ts +20 -1
  21. package/dist/cjs/inventory/lesen.js +307 -0
  22. package/dist/cjs/inventory/typen.d.ts +410 -1
  23. package/dist/cjs/inventory/vertrag.d.ts +94 -8
  24. package/dist/cjs/inventory/vertrag.js +117 -5
  25. package/dist/cjs/invoice/vertrag.d.ts +1 -1
  26. package/dist/cjs/invoice/vertrag.js +2 -0
  27. package/dist/cjs/models/cancellation.d.ts +1 -1
  28. package/dist/cjs/models/cancellation.js +2 -0
  29. package/dist/cjs/models/payment-errors.d.ts +1 -1
  30. package/dist/cjs/models/payment-errors.js +2 -0
  31. package/dist/cjs/models/receipt-email.d.ts +1 -1
  32. package/dist/cjs/models/receipt-email.js +2 -0
  33. package/dist/cjs/models/receipt-errors.d.ts +1 -1
  34. package/dist/cjs/models/receipt-errors.js +2 -0
  35. package/dist/cjs/pos/errors.d.ts +4 -3
  36. package/dist/cjs/pos/errors.js +23 -2
  37. package/dist/cjs/pos/index.d.ts +4 -1
  38. package/dist/cjs/pos/index.js +9 -2
  39. package/dist/cjs/pos/inventur.d.ts +104 -0
  40. package/dist/cjs/pos/inventur.js +117 -0
  41. package/dist/cjs/pos/texte.d.ts +82 -0
  42. package/dist/cjs/pos/texte.js +35 -0
  43. package/dist/cjs/register/errors.d.ts +1 -1
  44. package/dist/cjs/register/errors.js +2 -0
  45. package/dist/cjs/stored/vokabular.d.ts +1 -1
  46. package/dist/cjs/stored/vokabular.js +1 -1
  47. package/dist/cjs/version.d.ts +1 -1
  48. package/dist/cjs/version.js +1 -1
  49. package/dist/esm/client/aufrufe.d.ts +9 -7
  50. package/dist/esm/client/aufrufe.js +57 -2
  51. package/dist/esm/client/errors.js +2 -0
  52. package/dist/esm/client/index.d.ts +1 -1
  53. package/dist/esm/client/index.js +1 -1
  54. package/dist/esm/client/transport.d.ts +27 -3
  55. package/dist/esm/client/transport.js +28 -3
  56. package/dist/esm/index.d.ts +1 -1
  57. package/dist/esm/index.js +1 -1
  58. package/dist/esm/inventory/api.d.ts +21 -2
  59. package/dist/esm/inventory/api.js +23 -4
  60. package/dist/esm/inventory/fehler.d.ts +6 -0
  61. package/dist/esm/inventory/fehler.js +11 -0
  62. package/dist/esm/inventory/index.d.ts +6 -4
  63. package/dist/esm/inventory/index.js +5 -3
  64. package/dist/esm/inventory/inventur.d.ts +104 -0
  65. package/dist/esm/inventory/inventur.js +226 -0
  66. package/dist/esm/inventory/lesen.d.ts +20 -1
  67. package/dist/esm/inventory/lesen.js +301 -0
  68. package/dist/esm/inventory/typen.d.ts +410 -1
  69. package/dist/esm/inventory/vertrag.d.ts +94 -8
  70. package/dist/esm/inventory/vertrag.js +116 -4
  71. package/dist/esm/invoice/vertrag.d.ts +1 -1
  72. package/dist/esm/invoice/vertrag.js +2 -0
  73. package/dist/esm/models/cancellation.d.ts +1 -1
  74. package/dist/esm/models/cancellation.js +2 -0
  75. package/dist/esm/models/payment-errors.d.ts +1 -1
  76. package/dist/esm/models/payment-errors.js +2 -0
  77. package/dist/esm/models/receipt-email.d.ts +1 -1
  78. package/dist/esm/models/receipt-email.js +2 -0
  79. package/dist/esm/models/receipt-errors.d.ts +1 -1
  80. package/dist/esm/models/receipt-errors.js +2 -0
  81. package/dist/esm/pos/errors.d.ts +4 -3
  82. package/dist/esm/pos/errors.js +23 -2
  83. package/dist/esm/pos/index.d.ts +4 -1
  84. package/dist/esm/pos/index.js +2 -1
  85. package/dist/esm/pos/inventur.d.ts +104 -0
  86. package/dist/esm/pos/inventur.js +109 -0
  87. package/dist/esm/pos/texte.d.ts +82 -0
  88. package/dist/esm/pos/texte.js +35 -0
  89. package/dist/esm/register/errors.d.ts +1 -1
  90. package/dist/esm/register/errors.js +2 -0
  91. package/dist/esm/stored/vokabular.d.ts +1 -1
  92. package/dist/esm/stored/vokabular.js +1 -1
  93. package/dist/esm/version.d.ts +1 -1
  94. package/dist/esm/version.js +1 -1
  95. package/fixtures/hobex-hps-codes.json +1 -1
  96. package/fixtures/invoice-api.schema.json +1 -1
  97. package/fixtures/invoice-texts.json +1 -1
  98. package/fixtures/pos-texts.json +94 -1
  99. package/fixtures/stocktake-quantity-cases.json +55 -0
  100. package/fixtures/surface.json +151 -8
  101. package/fixtures/v3/antworten/belege.json +1 -1
  102. package/fixtures/v3/antworten/belegmail.json +1 -1
  103. package/fixtures/v3/antworten/kasse-belege.json +1 -1
  104. package/fixtures/v3/antworten/kasse.json +2958 -3
  105. package/fixtures/v3/antworten/lager.json +1727 -3
  106. package/fixtures/v3/antworten/rechnungen.json +1 -1
  107. package/fixtures/v3/antworten/storno.json +1 -1
  108. package/fixtures/v3/stored/belege.json +1 -1
  109. package/fixtures/v3/stored/kasse.json +414 -3
  110. package/fixtures/v3/stored/rechnungen.json +1 -1
  111. package/fixtures/v3/v3-vokabular.json +475 -8
  112. package/fixtures/v3/zahlbetrag-faelle.json +1 -1
  113. package/package.json +1 -1
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listMyStocktakes = listMyStocktakes;
4
+ exports.listMyStocktakeItems = listMyStocktakeItems;
5
+ exports.listMyStocktakeCounts = listMyStocktakeCounts;
6
+ exports.recordMyStocktakeCount = recordMyStocktakeCount;
7
+ exports.voidMyStocktakeCount = voidMyStocktakeCount;
8
+ exports.parseQuantityMilli = parseQuantityMilli;
9
+ const errors_js_1 = require("../client/errors.js");
10
+ const inventur_js_1 = require("../inventory/inventur.js");
11
+ const lesen_js_1 = require("../inventory/lesen.js");
12
+ const schreiben_js_1 = require("../inventory/schreiben.js");
13
+ const artikel_js_1 = require("./artikel.js");
14
+ function anfragefehler(name, grund) {
15
+ return new errors_js_1.KasseneckValidationError(name, grund, 'request');
16
+ }
17
+ /** Eine Kennung, die gesendet werden muss. */
18
+ function kennung(name, feld, w) {
19
+ if (typeof w !== 'string' || w.trim() === '')
20
+ throw anfragefehler(name, `${feld} fehlt`);
21
+ return w;
22
+ }
23
+ /** Die Optionen flach, ohne `undefined`; Pflichtkennung `stocktakeId`. */
24
+ function mitInventur(name, options) {
25
+ const p = (0, schreiben_js_1.anfrage)(name, options);
26
+ kennung(name, 'stocktakeId', p.stocktakeId);
27
+ return p;
28
+ }
29
+ /** Offene Inventuren (fuer Kassen-Benutzer nur `counting` und `review` mit offenem Nachzaehlen). */
30
+ async function listMyStocktakes(transport, options = {}) {
31
+ const name = 'listMyStocktakes';
32
+ const p = (0, schreiben_js_1.anfrage)(name, options);
33
+ if (p.locationId === '')
34
+ delete p.locationId;
35
+ const daten = await transport(name, p);
36
+ return (0, lesen_js_1.liste)(name, daten, 'stocktakes', lesen_js_1.inventur);
37
+ }
38
+ /** Positionen einer Inventur; ab der Pruefung mit Soll nur mit dem Recht `stocktakeClose`. */
39
+ async function listMyStocktakeItems(transport, options) {
40
+ const name = 'listMyStocktakeItems';
41
+ const daten = await transport(name, mitInventur(name, options));
42
+ return { items: (0, lesen_js_1.liste)(name, daten, 'items', lesen_js_1.inventurPosition), nextCursor: (0, lesen_js_1.naechsterCursor)(name, daten) };
43
+ }
44
+ /** Zaehlungen einer Inventur, neueste zuerst; `ownOnly` nur die eigenen. */
45
+ async function listMyStocktakeCounts(transport, options) {
46
+ const name = 'listMyStocktakeCounts';
47
+ const daten = await transport(name, mitInventur(name, options));
48
+ return { counts: (0, lesen_js_1.liste)(name, daten, 'counts', lesen_js_1.inventurZaehlung), nextCursor: (0, lesen_js_1.naechsterCursor)(name, daten) };
49
+ }
50
+ /** Eine Zaehlung; Antwort: die Zaehlung und die Position danach (Ist-Summe, kein Soll). */
51
+ async function recordMyStocktakeCount(transport, options) {
52
+ const name = 'recordMyStocktakeCount';
53
+ const p = mitInventur(name, options);
54
+ (0, schreiben_js_1.schluessel)(name, p, { pflicht: true });
55
+ (0, inventur_js_1.zaehlungPruefen)(name, p);
56
+ if (p.cashregisterId !== undefined)
57
+ kennung(name, 'cashregisterId', p.cashregisterId);
58
+ return (0, lesen_js_1.zaehlungMitPosition)(name, await transport(name, p));
59
+ }
60
+ /** Storniert eine Zaehlung mit Grund (fremde nur mit dem Recht `stocktakeClose`). */
61
+ async function voidMyStocktakeCount(transport, options) {
62
+ const name = 'voidMyStocktakeCount';
63
+ const p = mitInventur(name, options);
64
+ (0, schreiben_js_1.schluessel)(name, p, { pflicht: true });
65
+ (0, inventur_js_1.stornoPruefen)(name, p);
66
+ return (0, lesen_js_1.zaehlungMitPosition)(name, await transport(name, p));
67
+ }
68
+ /** Tausendstel je Einheit: drei Nachkommastellen, wie die Mengen am Draht. */
69
+ const STELLEN = 3;
70
+ /**
71
+ * Eine eingetippte Menge in Tausendstel der Basiseinheit, **ohne Gleitkomma**:
72
+ * `'12'` → `12000`, `'0,25'` → `250`, `'1.5'` → `1500`.
73
+ *
74
+ * - Dezimaltrenner Komma oder Punkt, hoechstens drei Nachkommastellen; weitere
75
+ * Nullen am Ende zaehlen nicht (`'1,2340'` → `1234`). `'0'` ist eine gueltige
76
+ * Menge (leer gezaehlt).
77
+ * - **Punkt mit genau drei Ziffern danach und einem Ganzteil ungleich 0**
78
+ * (`'1.000'`, `'12.500'`) ist bei jeder Einheit `null`: in oesterreichischer
79
+ * Schreibweise ist das ein Tausenderpunkt („tausend“), am Ziffernblock ein
80
+ * Dezimalpunkt („eins“); ein Faktor 1000 buchte der Abschluss als Differenz.
81
+ * Mit Komma ist es eindeutig (`'1,000'` → `1000`), ebenso `'0.500'`,
82
+ * `'1.5'`, `'1.25'`.
83
+ * - **Stueckware** nur als ganze Zahl ohne Trenner. Stueckware ist, was
84
+ * `rule` sagt (die gespeicherte Mengenregel des Artikels,
85
+ * `PosArticle.quantityRule`, `'piece'` | `'decimal'`), ohne `rule` die
86
+ * Vorgabe der Einheit (`quantityRuleForUnit`: Stk, g, ml …, auch ohne
87
+ * Einheit). Einzelstuecke (Seriennummer) sind immer Stueckware: dann
88
+ * `'piece'` uebergeben.
89
+ *
90
+ * `null` auch fuer: leer, Vorzeichen, Tausenderleerzeichen, Exponent, mehr als
91
+ * drei Nachkommastellen, groesser als eine sichere Ganzzahl. Die Kasse zeigt
92
+ * dann ihren Satz (`stocktake.quantity_invalid`), statt still zu runden.
93
+ * Gemeinsame Prueffaelle mit dem Dart-Zwilling:
94
+ * `fixtures/stocktake-quantity-cases.json`.
95
+ */
96
+ function parseQuantityMilli(text, unit, rule) {
97
+ if (typeof text !== 'string')
98
+ return null;
99
+ const m = /^(\d*)(?:([.,])(\d*))?$/.exec(text.trim());
100
+ if (!m)
101
+ return null;
102
+ const ganz = m[1] ?? '';
103
+ const trenner = m[2];
104
+ const roh = m[3] ?? '';
105
+ if (ganz === '' && roh === '')
106
+ return null;
107
+ const stueck = (rule === 'piece' || rule === 'decimal' ? rule : (0, artikel_js_1.quantityRuleForUnit)(unit).rule) === 'piece';
108
+ if (trenner !== undefined && stueck)
109
+ return null;
110
+ if (trenner === '.' && roh.length === 3 && /[1-9]/.test(ganz))
111
+ return null;
112
+ const nachkomma = roh.replace(/0+$/, '');
113
+ if (nachkomma.length > STELLEN)
114
+ return null;
115
+ const milli = BigInt(ganz === '' ? '0' : ganz) * 1000n + BigInt(nachkomma.padEnd(STELLEN, '0'));
116
+ return milli <= BigInt(Number.MAX_SAFE_INTEGER) ? Number(milli) : null;
117
+ }
@@ -555,6 +555,42 @@ declare const MELDUNGEN_ROH: {
555
555
  readonly 'logo.remove_failed': {
556
556
  readonly text: "Entfernen fehlgeschlagen.";
557
557
  };
558
+ readonly 'stocktake.none_open': {
559
+ readonly text: "An diesem Standort läuft gerade keine Inventur. Eine Inventur legt der Inhaber im Panel an.";
560
+ };
561
+ readonly 'stocktake.scan_or_search': {
562
+ readonly text: "Artikel scannen oder suchen.";
563
+ };
564
+ readonly 'stocktake.counted': {
565
+ readonly text: "{name}: {quantity} gezählt.";
566
+ readonly placeholders: readonly ["name", "quantity"];
567
+ };
568
+ readonly 'stocktake.blind_hint': {
569
+ readonly text: "Blind zählen – die Kasse zeigt keinen Buchbestand. Bitte zählen, was wirklich da ist.";
570
+ };
571
+ readonly 'stocktake.recount_hint': {
572
+ readonly text: "Bitte die markierten Positionen nachzählen.";
573
+ };
574
+ readonly 'stocktake.unknown_code': {
575
+ readonly text: "Zu „{code}“ gibt es keinen Artikel. Bitte den Code prüfen oder den Artikel suchen.";
576
+ readonly placeholders: readonly ["code"];
577
+ };
578
+ readonly 'stocktake.quantity_invalid': {
579
+ readonly text: "Bitte eine gültige Menge eingeben – höchstens drei Nachkommastellen, bei Stückware nur ganze Zahlen.";
580
+ };
581
+ readonly 'stocktake.serials_capture': {
582
+ readonly text: "Bitte für jedes Stück die Seriennummer scannen.";
583
+ };
584
+ readonly 'stocktake.serials_mismatch': {
585
+ readonly text: "Je Stück genau eine Seriennummer: {count} erfasst, {quantity} gezählt.";
586
+ readonly placeholders: readonly ["count", "quantity"];
587
+ };
588
+ readonly 'stocktake.reason_missing': {
589
+ readonly text: "Bitte einen Grund für das Stornieren eingeben.";
590
+ };
591
+ readonly 'stocktake.outcome_unknown': {
592
+ readonly text: "Unklar, ob die Zählung angekommen ist. „Erneut senden“ schickt dieselbe Zählung – sie zählt auch dann nur einmal.";
593
+ };
558
594
  readonly 'app.not_in_browser': {
559
595
  readonly text: "Die Kassen-App läuft nicht im Browser – dafür gibt es kasse.kasseneck.at.";
560
596
  readonly only: readonly ["app"];
@@ -1050,6 +1086,52 @@ declare const BESCHRIFTUNGEN_ROH: {
1050
1086
  readonly 'stock.return_disposed': {
1051
1087
  readonly text: "Entsorgt";
1052
1088
  };
1089
+ readonly 'stocktake.title': {
1090
+ readonly text: "Inventur zählen";
1091
+ };
1092
+ readonly 'stocktake.quantity': {
1093
+ readonly text: "Menge";
1094
+ };
1095
+ readonly 'stocktake.defective': {
1096
+ readonly text: "Defekt";
1097
+ };
1098
+ readonly 'stocktake.count_zero': {
1099
+ readonly text: "0 zählen";
1100
+ };
1101
+ readonly 'stocktake.next': {
1102
+ readonly text: "Weiter";
1103
+ };
1104
+ readonly 'stocktake.void': {
1105
+ readonly text: "Stornieren";
1106
+ };
1107
+ readonly 'stocktake.reason': {
1108
+ readonly text: "Grund";
1109
+ };
1110
+ readonly 'stocktake.progress': {
1111
+ readonly text: "{counted} von {total} gezählt";
1112
+ readonly placeholders: readonly ["counted", "total"];
1113
+ };
1114
+ readonly 'stocktake.serial_numbers': {
1115
+ readonly text: "Seriennummern erfassen";
1116
+ };
1117
+ readonly 'stocktake.recount': {
1118
+ readonly text: "Nachzählen";
1119
+ };
1120
+ readonly 'stocktake.resend': {
1121
+ readonly text: "Erneut senden";
1122
+ };
1123
+ readonly 'stocktake.my_counts': {
1124
+ readonly text: "Meine Zählungen";
1125
+ };
1126
+ readonly 'stocktake.sent': {
1127
+ readonly text: "gesendet";
1128
+ };
1129
+ readonly 'stocktake.unconfirmed': {
1130
+ readonly text: "unbestätigt";
1131
+ };
1132
+ readonly 'stocktake.voided': {
1133
+ readonly text: "storniert";
1134
+ };
1053
1135
  };
1054
1136
  export type LabelKey = keyof typeof BESCHRIFTUNGEN_ROH;
1055
1137
  export declare const LABELS: Record<LabelKey, TextEntry>;
@@ -292,6 +292,22 @@ const MELDUNGEN_ROH = {
292
292
  'unpairing.failed': { text: 'Entkoppeln fehlgeschlagen.' },
293
293
  'logo.upload_failed': { text: 'Hochladen fehlgeschlagen.' },
294
294
  'logo.remove_failed': { text: 'Entfernen fehlgeschlagen.' },
295
+ // --- Inventur zählen ------------------------------------------------------
296
+ // Gezählt wird blind und nur online; bei unklarem Ausgang schickt
297
+ // „Erneut senden“ dieselbe Zählung mit demselben Schlüssel (sie zählt genau
298
+ // einmal), nie eine neue. `{quantity}` ist die Menge samt Einheit („12 Stk“),
299
+ // `{count}` die Zahl der erfassten Seriennummern.
300
+ 'stocktake.none_open': { text: 'An diesem Standort läuft gerade keine Inventur. Eine Inventur legt der Inhaber im Panel an.' },
301
+ 'stocktake.scan_or_search': { text: 'Artikel scannen oder suchen.' },
302
+ 'stocktake.counted': { text: '{name}: {quantity} gezählt.', placeholders: ['name', 'quantity'] },
303
+ 'stocktake.blind_hint': { text: 'Blind zählen – die Kasse zeigt keinen Buchbestand. Bitte zählen, was wirklich da ist.' },
304
+ 'stocktake.recount_hint': { text: 'Bitte die markierten Positionen nachzählen.' },
305
+ 'stocktake.unknown_code': { text: 'Zu „{code}“ gibt es keinen Artikel. Bitte den Code prüfen oder den Artikel suchen.', placeholders: ['code'] },
306
+ 'stocktake.quantity_invalid': { text: 'Bitte eine gültige Menge eingeben – höchstens drei Nachkommastellen, bei Stückware nur ganze Zahlen.' },
307
+ 'stocktake.serials_capture': { text: 'Bitte für jedes Stück die Seriennummer scannen.' },
308
+ 'stocktake.serials_mismatch': { text: 'Je Stück genau eine Seriennummer: {count} erfasst, {quantity} gezählt.', placeholders: ['count', 'quantity'] },
309
+ 'stocktake.reason_missing': { text: 'Bitte einen Grund für das Stornieren eingeben.' },
310
+ 'stocktake.outcome_unknown': { text: 'Unklar, ob die Zählung angekommen ist. „Erneut senden“ schickt dieselbe Zählung – sie zählt auch dann nur einmal.' },
295
311
  // --- Nur App -------------------------------------------------------------
296
312
  'app.not_in_browser': { text: 'Die Kassen-App läuft nicht im Browser – dafür gibt es kasse.kasseneck.at.', only: ['app'] },
297
313
  'app.open_in_browser': { text: 'Bitte im Browser öffnen: {target}', placeholders: ['target'], only: ['app'] },
@@ -620,6 +636,25 @@ const BESCHRIFTUNGEN_ROH = {
620
636
  'stock.return_restock': { text: 'Zurück ins Lager' },
621
637
  'stock.return_defective': { text: 'Defekt' },
622
638
  'stock.return_disposed': { text: 'Entsorgt' },
639
+ // --- Inventur zählen ---------------------------------------------------------
640
+ // Knöpfe und Zeilen des Zählbildschirms. „gesendet“ und „unbestätigt“ stehen
641
+ // an den Zählungen der Sitzung (unbestätigt: unklarer Ausgang, „Erneut
642
+ // senden“ mit demselben Schlüssel).
643
+ 'stocktake.title': { text: 'Inventur zählen' },
644
+ 'stocktake.quantity': { text: 'Menge' },
645
+ 'stocktake.defective': { text: 'Defekt' },
646
+ 'stocktake.count_zero': { text: '0 zählen' },
647
+ 'stocktake.next': { text: 'Weiter' },
648
+ 'stocktake.void': { text: 'Stornieren' },
649
+ 'stocktake.reason': { text: 'Grund' },
650
+ 'stocktake.progress': { text: '{counted} von {total} gezählt', placeholders: ['counted', 'total'] },
651
+ 'stocktake.serial_numbers': { text: 'Seriennummern erfassen' },
652
+ 'stocktake.recount': { text: 'Nachzählen' },
653
+ 'stocktake.resend': { text: 'Erneut senden' },
654
+ 'stocktake.my_counts': { text: 'Meine Zählungen' },
655
+ 'stocktake.sent': { text: 'gesendet' },
656
+ 'stocktake.unconfirmed': { text: 'unbestätigt' },
657
+ 'stocktake.voided': { text: 'storniert' },
623
658
  };
624
659
  exports.LABELS = BESCHRIFTUNGEN_ROH;
625
660
  /**
@@ -22,7 +22,7 @@ import { KasseneckApiError } from '../client/errors.js';
22
22
  * ueber `KasseneckApiError.code` lesbar; die Kasse braucht dafuer einen
23
23
  * Rueckfallzweig.
24
24
  */
25
- export declare const REGISTER_ERROR_CODES: readonly ["account_not_found", "admin_required", "api_not_approved", "cashregister_in_use", "cashregister_not_assigned", "cashregister_not_found", "cashregister_token_invalid", "cashregister_token_missing", "device_bound_elsewhere", "device_not_found", "device_not_paired", "device_takeover_required", "dialect_mismatch", "internal_translation_error", "licenses_exhausted", "live_not_enabled", "location_outside", "location_required", "login_failed", "login_mode_select_user", "login_unavailable", "method_not_allowed", "mfa_required", "not_found", "pairing_code_expired", "pairing_code_unknown", "pairing_code_used", "pairing_failed", "register_user_no_business", "register_user_not_allowed", "register_user_not_found", "register_user_only", "response_translation_failed", "session_ended", "session_expired", "session_not_running", "session_other_cashregister", "too_many_attempts", "unauthorized", "user_disabled", "user_verification_failed", "validation", "route_missing"];
25
+ export declare const REGISTER_ERROR_CODES: readonly ["account_not_found", "admin_required", "api_not_approved", "app_check_invalid", "app_check_missing", "cashregister_in_use", "cashregister_not_assigned", "cashregister_not_found", "cashregister_token_invalid", "cashregister_token_missing", "device_bound_elsewhere", "device_not_found", "device_not_paired", "device_takeover_required", "dialect_mismatch", "internal_translation_error", "licenses_exhausted", "live_not_enabled", "location_outside", "location_required", "login_failed", "login_mode_select_user", "login_unavailable", "method_not_allowed", "mfa_required", "not_found", "pairing_code_expired", "pairing_code_unknown", "pairing_code_used", "pairing_failed", "register_user_no_business", "register_user_not_allowed", "register_user_not_found", "register_user_only", "response_translation_failed", "session_ended", "session_expired", "session_not_running", "session_other_cashregister", "too_many_attempts", "unauthorized", "user_disabled", "user_verification_failed", "validation", "route_missing"];
26
26
  export type RegisterErrorCode = typeof REGISTER_ERROR_CODES[number];
27
27
  export declare function isRegisterErrorCode(value: unknown): value is RegisterErrorCode;
28
28
  /** Der Code eines geworfenen Fehlers, wenn es einer der Kassen-Anmeldung ist; sonst `undefined`. */
@@ -35,6 +35,8 @@ exports.REGISTER_ERROR_CODES = Object.freeze([
35
35
  'account_not_found',
36
36
  'admin_required',
37
37
  'api_not_approved',
38
+ 'app_check_invalid',
39
+ 'app_check_missing',
38
40
  'cashregister_in_use',
39
41
  'cashregister_not_assigned',
40
42
  'cashregister_not_found',
@@ -1,5 +1,5 @@
1
1
  /** Fingerabdruck des Vertrags-Exports, aus dem diese Datei stammt (`_quelle.sha256`). */
2
- export declare const VOKABULAR_QUELLE = "6e6eae018f1e84116d3942cbfd35bc2d5d6f5c5e5551823c7ed88f15ed407744";
2
+ export declare const VOKABULAR_QUELLE = "0f78308720a3098401867185fdceea2aadf292158d719c0f9dc0306826959a27";
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 = "6e6eae018f1e84116d3942cbfd35bc2d5d6f5c5e5551823c7ed88f15ed407744";
7
+ exports.VOKABULAR_QUELLE = "0f78308720a3098401867185fdceea2aadf292158d719c0f9dc0306826959a27";
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.7.1";
7
+ export declare const PACKAGE_VERSION = "1.8.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.7.1';
10
+ exports.PACKAGE_VERSION = '1.8.0';
@@ -12,8 +12,8 @@
12
12
  * weiterhin jeden `string`: wer einen Aufruf braucht, den dieses Paket nicht
13
13
  * umhuellt, muss ihn weiterhin absetzen koennen.
14
14
  */
15
- import type { TransportBodyFields, TransportCallOptions } from './transport.js';
16
- export declare const ALL_CALLS: readonly ["activateCashregister", "cancelInvoice", "cancelReceipt", "createCreditNote", "createCustomer", "createCustomerCashregister", "createPartnerCustomer", "checkPartnerCustomerEmail", "createPartnerWebhook", "createPaymentLinkStripe", "createPrintJob", "createReceipt", "deletePartnerWebhook", "downloadDailyReport", "downloadReport", "endRegisterSession", "financeWebService", "generateFullReceiptId", "getCustomer", "getCustomerCredentials", "getCustomerSignatureStatus", "getFirstReceiptDate", "getInvoice", "getInvoicePdf", "getInvoiceSetupStatus", "getInvoiceXml", "getKasseSettings", "getPartnerCustomer", "getPartnerInfo", "getPrintJob", "getReceipt", "getReportV2", "hobexPayApi", "hobexRefundApi", "issueInvoice", "listCustomerCashregisters", "listInvoices", "listBrands", "listMyArticleGroups", "listMyArticles", "listMyCashregisters", "listMyPrinters", "listMyReceipts", "listMyStock", "listMyStockLocations", "listMyTipRecipients", "listPartnerCustomers", "listPartnerWebhookDeliveries", "listPartnerWebhooks", "listRegisterUsersForDevice", "listRegisterSessionsForDevice", "pairRegisterDevice", "recordInvoicePayment", "registerPinLogin", "registerUserLogin", "renewRegisterSession", "reportCustomerContract", "requestCustomerSignature", "searchCustomers", "sendPartnerCustomerFonLink", "sendPartnerWebhookTest", "sendReceiptEmail", "setMyCashregisterStockLocation", "setMyKasseLogo", "setMyKasseSettings", "setMyRegisterDeviceSettings", "stripeCaptureIntent", "unpairRegisterDevice", "rotatePartnerWebhookSecret", "updateCustomer", "updatePartnerWebhook", "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"];
15
+ import type { PdfOrData, TransportBodyFields, TransportCallOptions } from './transport.js';
16
+ export declare const ALL_CALLS: readonly ["activateCashregister", "cancelInvoice", "cancelReceipt", "createCreditNote", "createCustomer", "createCustomerCashregister", "createPartnerCustomer", "checkPartnerCustomerEmail", "createPartnerWebhook", "createPaymentLinkStripe", "createPrintJob", "createReceipt", "deletePartnerWebhook", "downloadDailyReport", "downloadReport", "endRegisterSession", "financeWebService", "generateFullReceiptId", "getCustomer", "getCustomerCredentials", "getCustomerSignatureStatus", "getFirstReceiptDate", "getInvoice", "getInvoicePdf", "getInvoiceSetupStatus", "getInvoiceXml", "getKasseSettings", "getPartnerCustomer", "getPartnerInfo", "getPrintJob", "getReceipt", "getReportV2", "hobexPayApi", "hobexRefundApi", "issueInvoice", "listCustomerCashregisters", "listInvoices", "listBrands", "listMyArticleGroups", "listMyArticles", "listMyCashregisters", "listMyPrinters", "listMyReceipts", "listMyStock", "listMyStockLocations", "listMyTipRecipients", "listPartnerCustomers", "listPartnerWebhookDeliveries", "listPartnerWebhooks", "listRegisterUsersForDevice", "listRegisterSessionsForDevice", "pairRegisterDevice", "recordInvoicePayment", "registerPinLogin", "registerUserLogin", "renewRegisterSession", "reportCustomerContract", "requestCustomerSignature", "searchCustomers", "sendPartnerCustomerFonLink", "sendPartnerWebhookTest", "sendReceiptEmail", "setMyCashregisterStockLocation", "setMyKasseLogo", "setMyKasseSettings", "setMyRegisterDeviceSettings", "stripeCaptureIntent", "unpairRegisterDevice", "rotatePartnerWebhookSecret", "updateCustomer", "updatePartnerWebhook", "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", "createStocktake", "listStocktakes", "getStocktake", "listStocktakeItems", "recordStocktakeCount", "voidStocktakeCount", "listStocktakeCounts", "reviewStocktake", "recountStocktake", "closeStocktake", "cancelStocktake", "getStocktakePdf", "listMyStocktakes", "listMyStocktakeItems", "listMyStocktakeCounts", "recordMyStocktakeCount", "voidMyStocktakeCount"];
17
17
  export type ApiCall = typeof ALL_CALLS[number];
18
18
  /**
19
19
  * Die oeffentlichen Endpunkte unter `/v3` (`https://api.kasseneck.at/v3/<name>`),
@@ -21,14 +21,14 @@ export type ApiCall = typeof ALL_CALLS[number];
21
21
  * (`fixtures/v3/v3-vokabular.json`, `endpoints.public`, umbenannt nach
22
22
  * `names`). Ein Test haelt beide Listen deckungsgleich.
23
23
  */
24
- export declare const PUBLIC_CALLS: readonly ["createReceipt", "getReceipt", "cancelReceipt", "sendReceiptEmail", "generateFullReceiptId", "downloadReceipt", "getFirstReceiptDate", "getReportV2", "downloadReport", "downloadDailyReport", "createPaymentLinkStripe", "stripeCaptureIntent", "hobexPayApi", "hobexRefundApi", "hobexGetStatus", "financeWebService", "listMyTipRecipients", "getPartnerInfo", "createPartnerCustomer", "checkPartnerCustomerEmail", "listPartnerCustomers", "getPartnerCustomer", "sendPartnerCustomerFonLink", "createPartnerWebhook", "updatePartnerWebhook", "deletePartnerWebhook", "listPartnerWebhooks", "sendPartnerWebhookTest", "rotatePartnerWebhookSecret", "listPartnerWebhookDeliveries", "requestCustomerSignature", "getCustomerSignatureStatus", "createCustomerCashregister", "activateCashregister", "listCustomerCashregisters", "getCustomerCredentials", "reportCustomerContract", "getPartnerBilling", "getPartnerBillingMonth", "createCustomer", "getCustomer", "updateCustomer", "searchCustomers", "issueInvoice", "cancelInvoice", "createCreditNote", "getInvoice", "listInvoices", "getInvoicePdf", "getInvoiceXml", "getInvoiceSetupStatus", "listBrands", "recordInvoicePayment", "createInvoiceItem", "updateInvoiceItem", "withdrawInvoiceItem", "getInvoiceItem", "listInvoiceItems", "setCustomerMandate", "revokeCustomerMandate", "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"];
24
+ export declare const PUBLIC_CALLS: readonly ["createReceipt", "getReceipt", "cancelReceipt", "sendReceiptEmail", "generateFullReceiptId", "downloadReceipt", "getFirstReceiptDate", "getReportV2", "downloadReport", "downloadDailyReport", "createPaymentLinkStripe", "stripeCaptureIntent", "hobexPayApi", "hobexRefundApi", "hobexGetStatus", "financeWebService", "listMyTipRecipients", "getPartnerInfo", "createPartnerCustomer", "checkPartnerCustomerEmail", "listPartnerCustomers", "getPartnerCustomer", "sendPartnerCustomerFonLink", "createPartnerWebhook", "updatePartnerWebhook", "deletePartnerWebhook", "listPartnerWebhooks", "sendPartnerWebhookTest", "rotatePartnerWebhookSecret", "listPartnerWebhookDeliveries", "requestCustomerSignature", "getCustomerSignatureStatus", "createCustomerCashregister", "activateCashregister", "listCustomerCashregisters", "getCustomerCredentials", "reportCustomerContract", "getPartnerBilling", "getPartnerBillingMonth", "createCustomer", "getCustomer", "updateCustomer", "searchCustomers", "issueInvoice", "cancelInvoice", "createCreditNote", "getInvoice", "listInvoices", "getInvoicePdf", "getInvoiceXml", "getInvoiceSetupStatus", "listBrands", "recordInvoicePayment", "createInvoiceItem", "updateInvoiceItem", "withdrawInvoiceItem", "getInvoiceItem", "listInvoiceItems", "setCustomerMandate", "revokeCustomerMandate", "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", "createStocktake", "listStocktakes", "getStocktake", "listStocktakeItems", "recordStocktakeCount", "voidStocktakeCount", "listStocktakeCounts", "reviewStocktake", "recountStocktake", "closeStocktake", "cancelStocktake", "getStocktakePdf"];
25
25
  /**
26
26
  * Die Endpunkte des Kassenwegs (`https://kasse.kasseneck.at/api/v3/<name>`,
27
27
  * Web-Kasse: gleicher Ursprung `/api/v3`), in der Reihenfolge von
28
28
  * `endpoints.register`. Sechs davon sind zugleich oeffentlich; die Kasse ruft
29
29
  * sie trotzdem ueber diesen Weg (ein Dialekt je Client, Nachtrag §5.2).
30
30
  */
31
- export declare const POS_CALLS: readonly ["pairRegisterDevice", "listRegisterUsersForDevice", "listRegisterSessionsForDevice", "registerUserLogin", "registerPinLogin", "renewRegisterSession", "endRegisterSession", "unpairRegisterDevice", "listMyCashregisters", "listMyReceipts", "getReceipt", "createReceipt", "generateFullReceiptId", "cancelReceipt", "sendReceiptEmail", "listMyArticleGroups", "listMyArticles", "getKasseSettings", "setMyKasseSettings", "setMyKasseLogo", "setMyRegisterDeviceSettings", "listMyPrinters", "createPrintJob", "getPrintJob", "listMyTipRecipients", "listMyStockLocations", "listMyStock", "setMyCashregisterStockLocation"];
31
+ export declare const POS_CALLS: readonly ["pairRegisterDevice", "listRegisterUsersForDevice", "listRegisterSessionsForDevice", "registerUserLogin", "registerPinLogin", "renewRegisterSession", "endRegisterSession", "unpairRegisterDevice", "listMyCashregisters", "listMyReceipts", "getReceipt", "createReceipt", "generateFullReceiptId", "cancelReceipt", "sendReceiptEmail", "listMyArticleGroups", "listMyArticles", "getKasseSettings", "setMyKasseSettings", "setMyKasseLogo", "setMyRegisterDeviceSettings", "listMyPrinters", "createPrintJob", "getPrintJob", "listMyTipRecipients", "listMyStockLocations", "listMyStock", "setMyCashregisterStockLocation", "listMyStocktakes", "listMyStocktakeItems", "listMyStocktakeCounts", "recordMyStocktakeCount", "voidMyStocktakeCount"];
32
32
  export type PublicCall = typeof PUBLIC_CALLS[number];
33
33
  export type PosCall = typeof POS_CALLS[number];
34
34
  /**
@@ -49,7 +49,7 @@ export type PosCall = typeof POS_CALLS[number];
49
49
  * [ALL_CALLS], [PUBLIC_CALLS] und [POS_CALLS] steht entweder hier oder in
50
50
  * [CALLS_WITHOUT_EFFECT] (Waechter `test/ausgang-einordnung.test.ts`).
51
51
  */
52
- export declare const UNKNOWN_OUTCOME_CALLS: readonly ["activateCashregister", "addVariant", "cancelInvoice", "cancelReceipt", "changeStockCondition", "createArticle", "createCreditNote", "createCustomer", "createCustomerCashregister", "createInvoiceItem", "createPartnerCustomer", "createPartnerWebhook", "createPrintJob", "createReceipt", "createReservation", "createVariantGroup", "createWebhook", "deactivateArticle", "deletePartnerWebhook", "deleteWebhook", "extendReservation", "financeWebService", "hobexPayApi", "hobexRefundApi", "issueInvoice", "pairRegisterDevice", "receiveGoods", "recordInvoicePayment", "recordStockLoss", "releaseReservation", "reportCustomerContract", "requestCustomerSignature", "reverseStockMovement", "revokeCustomerMandate", "rotatePartnerWebhookSecret", "rotateWebhookSecret", "sendPartnerCustomerFonLink", "sendPartnerWebhookTest", "sendReceiptEmail", "sendWebhookTest", "setCustomerMandate", "setMyCashregisterStockLocation", "setMyKasseLogo", "setMyKasseSettings", "setMyRegisterDeviceSettings", "stripeCaptureIntent", "transferStock", "unpairRegisterDevice", "updateArticle", "updateCustomer", "updateInvoiceItem", "updatePartnerWebhook", "updateVariantGroup", "updateWebhook", "withdrawInvoiceItem"];
52
+ export declare const UNKNOWN_OUTCOME_CALLS: readonly ["activateCashregister", "addVariant", "cancelInvoice", "cancelReceipt", "cancelStocktake", "changeStockCondition", "closeStocktake", "createArticle", "createCreditNote", "createCustomer", "createCustomerCashregister", "createInvoiceItem", "createPartnerCustomer", "createPartnerWebhook", "createPrintJob", "createReceipt", "createReservation", "createStocktake", "createVariantGroup", "createWebhook", "deactivateArticle", "deletePartnerWebhook", "deleteWebhook", "extendReservation", "financeWebService", "hobexPayApi", "hobexRefundApi", "issueInvoice", "pairRegisterDevice", "receiveGoods", "recordInvoicePayment", "recordMyStocktakeCount", "recordStockLoss", "recordStocktakeCount", "recountStocktake", "releaseReservation", "reportCustomerContract", "requestCustomerSignature", "reverseStockMovement", "reviewStocktake", "revokeCustomerMandate", "rotatePartnerWebhookSecret", "rotateWebhookSecret", "sendPartnerCustomerFonLink", "sendPartnerWebhookTest", "sendReceiptEmail", "sendWebhookTest", "setCustomerMandate", "setMyCashregisterStockLocation", "setMyKasseLogo", "setMyKasseSettings", "setMyRegisterDeviceSettings", "stripeCaptureIntent", "transferStock", "unpairRegisterDevice", "updateArticle", "updateCustomer", "updateInvoiceItem", "updatePartnerWebhook", "updateVariantGroup", "updateWebhook", "voidMyStocktakeCount", "voidStocktakeCount", "withdrawInvoiceItem"];
53
53
  /** Warum ein Aufruf keine Wirkung hat, die ein Zeitlimit offen lassen koennte. */
54
54
  export type CallWithoutEffectReason = 'read' | 'repeatable';
55
55
  /**
@@ -85,10 +85,10 @@ export declare const CALLS_WITHOUT_EFFECT: Readonly<Record<string, CallWithoutEf
85
85
  * absetzt, sagt es mit `hasEffect: true`.
86
86
  */
87
87
  export declare function isUnknownOutcomeCall(name: string): boolean;
88
- /** Einer der 28 Aufrufe des Kassenwegs. */
88
+ /** Einer der 33 Aufrufe des Kassenwegs. */
89
89
  export declare function isPosCall(name: string): boolean;
90
90
  /**
91
- * Nur ueber den Kassenweg erreichbar (22 Namen): unter `api.kasseneck.at/v3`
91
+ * Nur ueber den Kassenweg erreichbar (27 Namen): unter `api.kasseneck.at/v3`
92
92
  * gibt es sie nicht. Der Transport schickt sie darum ohne eigene Basis an
93
93
  * [POS_BASE_URL] statt an die oeffentliche Basis.
94
94
  */
@@ -97,3 +97,5 @@ export declare function isPosOnlyCall(name: string): boolean;
97
97
  export type InternerTransport = <T = unknown>(functionName: ApiCall, params?: Record<string, unknown>, extraBodyFields?: TransportBodyFields, secretParams?: readonly string[], options?: TransportCallOptions) => Promise<T>;
98
98
  /** Wie [KasseneckBinaryTransport], nur mit bekanntem Aufrufnamen. */
99
99
  export type InternerBinaerTransport = (functionName: ApiCall, params?: Record<string, unknown>) => Promise<Uint8Array>;
100
+ /** Wie `createPdfOrDataTransport` (transport.ts), nur mit bekanntem Aufrufnamen. */
101
+ export type InternerPdfOderDatenTransport = (functionName: ApiCall, params?: Record<string, unknown>) => Promise<PdfOrData>;
@@ -105,6 +105,25 @@ export const ALL_CALLS = [
105
105
  'getVariantGroup',
106
106
  'listVariantGroups',
107
107
  'addVariant',
108
+ // Lager-API Inventur (Lager-Kern Stufe 3, ./inventory)
109
+ 'createStocktake',
110
+ 'listStocktakes',
111
+ 'getStocktake',
112
+ 'listStocktakeItems',
113
+ 'recordStocktakeCount',
114
+ 'voidStocktakeCount',
115
+ 'listStocktakeCounts',
116
+ 'reviewStocktake',
117
+ 'recountStocktake',
118
+ 'closeStocktake',
119
+ 'cancelStocktake',
120
+ 'getStocktakePdf',
121
+ // Inventur zaehlen an der Kasse (Lager-Kern Stufe 3, ./pos)
122
+ 'listMyStocktakes',
123
+ 'listMyStocktakeItems',
124
+ 'listMyStocktakeCounts',
125
+ 'recordMyStocktakeCount',
126
+ 'voidMyStocktakeCount',
108
127
  ];
109
128
  /**
110
129
  * Die oeffentlichen Endpunkte unter `/v3` (`https://api.kasseneck.at/v3/<name>`),
@@ -211,6 +230,19 @@ export const PUBLIC_CALLS = [
211
230
  'getVariantGroup',
212
231
  'listVariantGroups',
213
232
  'addVariant',
233
+ // Lager-API Inventur (Lager-Kern Stufe 3), umhuellt in `./inventory`.
234
+ 'createStocktake',
235
+ 'listStocktakes',
236
+ 'getStocktake',
237
+ 'listStocktakeItems',
238
+ 'recordStocktakeCount',
239
+ 'voidStocktakeCount',
240
+ 'listStocktakeCounts',
241
+ 'reviewStocktake',
242
+ 'recountStocktake',
243
+ 'closeStocktake',
244
+ 'cancelStocktake',
245
+ 'getStocktakePdf',
214
246
  ];
215
247
  /**
216
248
  * Die Endpunkte des Kassenwegs (`https://kasse.kasseneck.at/api/v3/<name>`,
@@ -248,6 +280,12 @@ export const POS_CALLS = [
248
280
  'listMyStockLocations',
249
281
  'listMyStock',
250
282
  'setMyCashregisterStockLocation',
283
+ // Inventur zaehlen (Lager-Kern Stufe 3): nur ueber den Kassenweg.
284
+ 'listMyStocktakes',
285
+ 'listMyStocktakeItems',
286
+ 'listMyStocktakeCounts',
287
+ 'recordMyStocktakeCount',
288
+ 'voidMyStocktakeCount',
251
289
  ];
252
290
  /**
253
291
  * Die Aufrufe **mit Wirkung**, alphabetisch: sie legen etwas an, aendern oder
@@ -272,7 +310,9 @@ export const UNKNOWN_OUTCOME_CALLS = [
272
310
  'addVariant',
273
311
  'cancelInvoice',
274
312
  'cancelReceipt',
313
+ 'cancelStocktake',
275
314
  'changeStockCondition',
315
+ 'closeStocktake',
276
316
  'createArticle',
277
317
  'createCreditNote',
278
318
  'createCustomer',
@@ -283,6 +323,7 @@ export const UNKNOWN_OUTCOME_CALLS = [
283
323
  'createPrintJob',
284
324
  'createReceipt',
285
325
  'createReservation',
326
+ 'createStocktake',
286
327
  'createVariantGroup',
287
328
  'createWebhook',
288
329
  'deactivateArticle',
@@ -296,11 +337,15 @@ export const UNKNOWN_OUTCOME_CALLS = [
296
337
  'pairRegisterDevice',
297
338
  'receiveGoods',
298
339
  'recordInvoicePayment',
340
+ 'recordMyStocktakeCount',
299
341
  'recordStockLoss',
342
+ 'recordStocktakeCount',
343
+ 'recountStocktake',
300
344
  'releaseReservation',
301
345
  'reportCustomerContract',
302
346
  'requestCustomerSignature',
303
347
  'reverseStockMovement',
348
+ 'reviewStocktake',
304
349
  'revokeCustomerMandate',
305
350
  'rotatePartnerWebhookSecret',
306
351
  'rotateWebhookSecret',
@@ -322,6 +367,8 @@ export const UNKNOWN_OUTCOME_CALLS = [
322
367
  'updatePartnerWebhook',
323
368
  'updateVariantGroup',
324
369
  'updateWebhook',
370
+ 'voidMyStocktakeCount',
371
+ 'voidStocktakeCount',
325
372
  'withdrawInvoiceItem',
326
373
  ];
327
374
  /**
@@ -376,6 +423,8 @@ export const CALLS_WITHOUT_EFFECT = Object.freeze({
376
423
  getReportV2: 'read',
377
424
  getReservation: 'read',
378
425
  getStock: 'read',
426
+ getStocktake: 'read',
427
+ getStocktakePdf: 'read',
379
428
  getVariantGroup: 'read',
380
429
  hobexGetStatus: 'read',
381
430
  listArticles: 'read',
@@ -391,6 +440,9 @@ export const CALLS_WITHOUT_EFFECT = Object.freeze({
391
440
  listMyReceipts: 'read',
392
441
  listMyStock: 'read',
393
442
  listMyStockLocations: 'read',
443
+ listMyStocktakeCounts: 'read',
444
+ listMyStocktakeItems: 'read',
445
+ listMyStocktakes: 'read',
394
446
  listMyTipRecipients: 'read',
395
447
  listPartnerCustomers: 'read',
396
448
  listPartnerWebhookDeliveries: 'read',
@@ -400,6 +452,9 @@ export const CALLS_WITHOUT_EFFECT = Object.freeze({
400
452
  listReservations: 'read',
401
453
  listStock: 'read',
402
454
  listStockMovements: 'read',
455
+ listStocktakeCounts: 'read',
456
+ listStocktakeItems: 'read',
457
+ listStocktakes: 'read',
403
458
  listVariantGroups: 'read',
404
459
  listWebhookDeliveries: 'read',
405
460
  listWebhooks: 'read',
@@ -423,12 +478,12 @@ export function isUnknownOutcomeCall(name) {
423
478
  const OEFFENTLICH = new Set(PUBLIC_CALLS);
424
479
  const KASSENWEG = new Set(POS_CALLS);
425
480
  const NUR_KASSE = new Set(POS_CALLS.filter((name) => !OEFFENTLICH.has(name)));
426
- /** Einer der 28 Aufrufe des Kassenwegs. */
481
+ /** Einer der 33 Aufrufe des Kassenwegs. */
427
482
  export function isPosCall(name) {
428
483
  return KASSENWEG.has(name);
429
484
  }
430
485
  /**
431
- * Nur ueber den Kassenweg erreichbar (22 Namen): unter `api.kasseneck.at/v3`
486
+ * Nur ueber den Kassenweg erreichbar (27 Namen): unter `api.kasseneck.at/v3`
432
487
  * gibt es sie nicht. Der Transport schickt sie darum ohne eigene Basis an
433
488
  * [POS_BASE_URL] statt an die oeffentliche Basis.
434
489
  */
@@ -268,6 +268,8 @@ export const PAYMENT_CALL_REJECTED_CODES = Object.freeze([
268
268
  'account_not_found',
269
269
  'live_not_enabled',
270
270
  'api_not_approved', // Live-API ohne Freigabe (Entwicklerbereich): vor dem Handler abgewiesen
271
+ 'app_check_missing', // Admin-App ohne bzw. mit ungueltigem App Check: vor dem Handler abgewiesen
272
+ 'app_check_invalid',
271
273
  'unauthorized',
272
274
  'mfa_required',
273
275
  'user_verification_failed',
@@ -1,5 +1,5 @@
1
1
  export { type AuthCredentials, type KasseneckAuth, type ApiKeyAuthOptions, type RegisterUserAuthOptions, apiKeyAuth, registerUserAuth, } from './auth.js';
2
- export { DEFAULT_BASE_URL, POS_BASE_URL, DEFAULT_TIMEOUT_MS, type HttpResponseLike, type HttpRequestInit, type FetchLike, type TransportOptions, type TransportBodyFields, type TransportCallOptions, type KasseneckTransport, type KasseneckBinaryTransport, createTransport, createBinaryTransport, } from './transport.js';
2
+ export { DEFAULT_BASE_URL, POS_BASE_URL, DEFAULT_TIMEOUT_MS, type HttpResponseLike, type HttpRequestInit, type FetchLike, type TransportOptions, type TransportBodyFields, type TransportCallOptions, type KasseneckTransport, type KasseneckBinaryTransport, type KasseneckPdfOrDataTransport, type PdfOrData, createTransport, createBinaryTransport, createPdfOrDataTransport, } from './transport.js';
3
3
  export { ALL_CALLS, type ApiCall, PUBLIC_CALLS, POS_CALLS, UNKNOWN_OUTCOME_CALLS, type PublicCall, type PosCall, } from './aufrufe.js';
4
4
  export { KasseneckApiError, KasseneckAuthError, KasseneckHttpError, KasseneckNetworkError, KasseneckValidationError, type ValidationScope, type KasseneckError, type HttpFailureReason, type CauseDigest, type ErrorOutcome, CLIENT_ERROR_CODES, type ClientErrorCode, isKasseneckApiError, isKasseneckAuthError, isKasseneckHttpError, isKasseneckNetworkError, isKasseneckValidationError, isOutcomeUnknown, } from './errors.js';
5
5
  export { type ReceiptCommonOptions, type SellReceiptOptions, type TipOptions, type TipRecipientShare, type CancelReceiptOptions, type ReceiptWithCompany, sellReceipt, sellReceiptWithCompany, paymentsExpectedCents, cardRefundReference, receiptLayoutFromResult, cancelReceipt, type CancelReceiptResult, zeroReceipt, getReceipt, getReceiptWithCompany, generateFullReceiptId, getFirstReceiptDate, listMyReceipts, type ListMyReceiptsOptions, type ReceiptList, type ReceiptListStats, checkVoucherCombinationError, type SendReceiptEmailOptions, type SendReceiptEmailResult, sendReceiptEmail, } from './receipts.js';
@@ -1,5 +1,5 @@
1
1
  export { apiKeyAuth, registerUserAuth, } from './auth.js';
2
- export { DEFAULT_BASE_URL, POS_BASE_URL, DEFAULT_TIMEOUT_MS, createTransport, createBinaryTransport, } from './transport.js';
2
+ export { DEFAULT_BASE_URL, POS_BASE_URL, DEFAULT_TIMEOUT_MS, createTransport, createBinaryTransport, createPdfOrDataTransport, } from './transport.js';
3
3
  export { ALL_CALLS, PUBLIC_CALLS, POS_CALLS, UNKNOWN_OUTCOME_CALLS, } from './aufrufe.js';
4
4
  export { KasseneckApiError, KasseneckAuthError, KasseneckHttpError, KasseneckNetworkError, KasseneckValidationError, CLIENT_ERROR_CODES, isKasseneckApiError, isKasseneckAuthError, isKasseneckHttpError, isKasseneckNetworkError, isKasseneckValidationError, isOutcomeUnknown, } from './errors.js';
5
5
  export { sellReceipt, sellReceiptWithCompany, paymentsExpectedCents, cardRefundReference, receiptLayoutFromResult, cancelReceipt, zeroReceipt, getReceipt, getReceiptWithCompany, generateFullReceiptId, getFirstReceiptDate, listMyReceipts, checkVoucherCombinationError, sendReceiptEmail, } from './receipts.js';
@@ -91,16 +91,16 @@ export interface TransportOptions {
91
91
  auth: KasseneckAuth;
92
92
  /**
93
93
  * Abweichende Basis der **oeffentlichen** Aufrufe (Vorgabe
94
- * [DEFAULT_BASE_URL]): alles ausser den 28 Aufrufen des Kassenwegs, und die
94
+ * [DEFAULT_BASE_URL]): alles ausser den 33 Aufrufen des Kassenwegs, und die
95
95
  * sechs oeffentlichen davon nur, wenn nicht mit `registerUserAuth`
96
96
  * angemeldet. Muss auf `/v3` enden (eigene Proxys erlaubt), sonst wirft das
97
97
  * Anlegen; `/v1` oder `/api` gibt es in der 1.x-Linie nicht.
98
98
  */
99
99
  baseUrl?: string;
100
100
  /**
101
- * Abweichende Basis des **Kassenwegs** (Vorgabe [POS_BASE_URL]): die 22
101
+ * Abweichende Basis des **Kassenwegs** (Vorgabe [POS_BASE_URL]): die 27
102
102
  * reinen Kassenaufrufe (Kopplung, Anmeldung, Einstellungen, Artikel,
103
- * Drucker, ...) und mit `registerUserAuth` alle 28 Aufrufe des Kassenwegs.
103
+ * Drucker, ...) und mit `registerUserAuth` alle 33 Aufrufe des Kassenwegs.
104
104
  * Die Web-Kasse gibt `'/api/v3'` (gleicher Ursprung). Muss auf `/v3` enden
105
105
  * (in der Regel `/api/v3`), sonst wirft das Anlegen.
106
106
  */
@@ -193,3 +193,27 @@ export declare function createTransport(options: TransportOptions): KasseneckTra
193
193
  * reports.ts.)
194
194
  */
195
195
  export declare function createBinaryTransport(options: TransportOptions): KasseneckBinaryTransport;
196
+ /**
197
+ * Ergebnis eines Aufrufs, der eine Datei **oder** eine Nutzlast liefert: das
198
+ * PDF als Bytes oder die `data` einer Erfolgshuelle (etwa ein Lese-Link, wenn
199
+ * die Datei zu gross fuer die Antwort ist).
200
+ */
201
+ export type PdfOrData = {
202
+ pdf: Uint8Array;
203
+ } | {
204
+ data: unknown;
205
+ };
206
+ /**
207
+ * Ruft eine Backend-Funktion auf, die ein PDF **oder** eine JSON-Nutzlast
208
+ * liefert (Inventurprotokoll: die Datei bis 9 MiB, darueber ein Lese-Link).
209
+ */
210
+ export type KasseneckPdfOrDataTransport = (functionName: string, params?: Record<string, unknown>) => Promise<PdfOrData>;
211
+ /**
212
+ * Dritter Einstiegspunkt, fuer Aufrufe, die eine Datei oder eine Nutzlast
213
+ * liefern (`getStocktakePdf` aus `./inventory`). Wie [createBinaryTransport]
214
+ * wird die Antwort nur als Bytes gelesen; die ersten Bytes entscheiden: `%PDF`
215
+ * ergibt `{ pdf }`, eine Erfolgshuelle `{ data }`, eine Fehlerhuelle denselben
216
+ * fachlichen Fehler wie auf dem JSON-Weg. Leer, kein JSON oder ohne Statusfeld
217
+ * ist unlesbar mit denselben Gruenden wie dort.
218
+ */
219
+ export declare function createPdfOrDataTransport(options: TransportOptions): KasseneckPdfOrDataTransport;