@kreiseck/kasseneck-api 1.7.1 → 1.10.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 (125) hide show
  1. package/CHANGELOG.md +113 -0
  2. package/README.md +170 -1
  3. package/dist/cjs/client/api.d.ts +5 -3
  4. package/dist/cjs/client/api.js +1 -0
  5. package/dist/cjs/client/aufrufe.d.ts +9 -7
  6. package/dist/cjs/client/aufrufe.js +60 -2
  7. package/dist/cjs/client/errors.js +3 -0
  8. package/dist/cjs/client/index.d.ts +2 -2
  9. package/dist/cjs/client/index.js +3 -1
  10. package/dist/cjs/client/reports.d.ts +26 -0
  11. package/dist/cjs/client/reports.js +47 -0
  12. package/dist/cjs/client/transport.d.ts +27 -3
  13. package/dist/cjs/client/transport.js +29 -3
  14. package/dist/cjs/index.d.ts +1 -1
  15. package/dist/cjs/index.js +4 -2
  16. package/dist/cjs/inventory/api.d.ts +21 -2
  17. package/dist/cjs/inventory/api.js +22 -3
  18. package/dist/cjs/inventory/fehler.d.ts +6 -0
  19. package/dist/cjs/inventory/fehler.js +12 -0
  20. package/dist/cjs/inventory/index.d.ts +6 -4
  21. package/dist/cjs/inventory/index.js +33 -3
  22. package/dist/cjs/inventory/inventur.d.ts +104 -0
  23. package/dist/cjs/inventory/inventur.js +245 -0
  24. package/dist/cjs/inventory/lesen.d.ts +20 -1
  25. package/dist/cjs/inventory/lesen.js +307 -0
  26. package/dist/cjs/inventory/typen.d.ts +410 -1
  27. package/dist/cjs/inventory/vertrag.d.ts +94 -8
  28. package/dist/cjs/inventory/vertrag.js +118 -5
  29. package/dist/cjs/invoice/index.d.ts +1 -1
  30. package/dist/cjs/invoice/typen.d.ts +12 -0
  31. package/dist/cjs/invoice/vertrag.d.ts +1 -1
  32. package/dist/cjs/invoice/vertrag.js +3 -0
  33. package/dist/cjs/models/cancellation.d.ts +1 -1
  34. package/dist/cjs/models/cancellation.js +3 -0
  35. package/dist/cjs/models/payment-errors.d.ts +1 -1
  36. package/dist/cjs/models/payment-errors.js +3 -0
  37. package/dist/cjs/models/receipt-email.d.ts +1 -1
  38. package/dist/cjs/models/receipt-email.js +3 -0
  39. package/dist/cjs/models/receipt-errors.d.ts +1 -1
  40. package/dist/cjs/models/receipt-errors.js +3 -0
  41. package/dist/cjs/pos/errors.d.ts +4 -3
  42. package/dist/cjs/pos/errors.js +24 -2
  43. package/dist/cjs/pos/index.d.ts +4 -1
  44. package/dist/cjs/pos/index.js +9 -2
  45. package/dist/cjs/pos/inventur.d.ts +104 -0
  46. package/dist/cjs/pos/inventur.js +117 -0
  47. package/dist/cjs/pos/texte.d.ts +82 -0
  48. package/dist/cjs/pos/texte.js +35 -0
  49. package/dist/cjs/register/errors.d.ts +1 -1
  50. package/dist/cjs/register/errors.js +3 -0
  51. package/dist/cjs/stored/vokabular.d.ts +1 -1
  52. package/dist/cjs/stored/vokabular.js +1 -1
  53. package/dist/cjs/version.d.ts +1 -1
  54. package/dist/cjs/version.js +1 -1
  55. package/dist/esm/client/api.d.ts +5 -3
  56. package/dist/esm/client/api.js +2 -1
  57. package/dist/esm/client/aufrufe.d.ts +9 -7
  58. package/dist/esm/client/aufrufe.js +60 -2
  59. package/dist/esm/client/errors.js +3 -0
  60. package/dist/esm/client/index.d.ts +2 -2
  61. package/dist/esm/client/index.js +2 -2
  62. package/dist/esm/client/reports.d.ts +26 -0
  63. package/dist/esm/client/reports.js +46 -0
  64. package/dist/esm/client/transport.d.ts +27 -3
  65. package/dist/esm/client/transport.js +28 -3
  66. package/dist/esm/index.d.ts +1 -1
  67. package/dist/esm/index.js +1 -1
  68. package/dist/esm/inventory/api.d.ts +21 -2
  69. package/dist/esm/inventory/api.js +23 -4
  70. package/dist/esm/inventory/fehler.d.ts +6 -0
  71. package/dist/esm/inventory/fehler.js +11 -0
  72. package/dist/esm/inventory/index.d.ts +6 -4
  73. package/dist/esm/inventory/index.js +5 -3
  74. package/dist/esm/inventory/inventur.d.ts +104 -0
  75. package/dist/esm/inventory/inventur.js +226 -0
  76. package/dist/esm/inventory/lesen.d.ts +20 -1
  77. package/dist/esm/inventory/lesen.js +301 -0
  78. package/dist/esm/inventory/typen.d.ts +410 -1
  79. package/dist/esm/inventory/vertrag.d.ts +94 -8
  80. package/dist/esm/inventory/vertrag.js +117 -4
  81. package/dist/esm/invoice/index.d.ts +1 -1
  82. package/dist/esm/invoice/typen.d.ts +12 -0
  83. package/dist/esm/invoice/vertrag.d.ts +1 -1
  84. package/dist/esm/invoice/vertrag.js +3 -0
  85. package/dist/esm/models/cancellation.d.ts +1 -1
  86. package/dist/esm/models/cancellation.js +3 -0
  87. package/dist/esm/models/payment-errors.d.ts +1 -1
  88. package/dist/esm/models/payment-errors.js +3 -0
  89. package/dist/esm/models/receipt-email.d.ts +1 -1
  90. package/dist/esm/models/receipt-email.js +3 -0
  91. package/dist/esm/models/receipt-errors.d.ts +1 -1
  92. package/dist/esm/models/receipt-errors.js +3 -0
  93. package/dist/esm/pos/errors.d.ts +4 -3
  94. package/dist/esm/pos/errors.js +24 -2
  95. package/dist/esm/pos/index.d.ts +4 -1
  96. package/dist/esm/pos/index.js +2 -1
  97. package/dist/esm/pos/inventur.d.ts +104 -0
  98. package/dist/esm/pos/inventur.js +109 -0
  99. package/dist/esm/pos/texte.d.ts +82 -0
  100. package/dist/esm/pos/texte.js +35 -0
  101. package/dist/esm/register/errors.d.ts +1 -1
  102. package/dist/esm/register/errors.js +3 -0
  103. package/dist/esm/stored/vokabular.d.ts +1 -1
  104. package/dist/esm/stored/vokabular.js +1 -1
  105. package/dist/esm/version.d.ts +1 -1
  106. package/dist/esm/version.js +1 -1
  107. package/fixtures/hobex-hps-codes.json +1 -1
  108. package/fixtures/invoice-api.schema.json +1 -1
  109. package/fixtures/invoice-texts.json +1 -1
  110. package/fixtures/pos-texts.json +94 -1
  111. package/fixtures/stocktake-quantity-cases.json +55 -0
  112. package/fixtures/surface.json +157 -8
  113. package/fixtures/v3/antworten/belege.json +1 -1
  114. package/fixtures/v3/antworten/belegmail.json +1 -1
  115. package/fixtures/v3/antworten/kasse-belege.json +1 -1
  116. package/fixtures/v3/antworten/kasse.json +2958 -3
  117. package/fixtures/v3/antworten/lager.json +1727 -3
  118. package/fixtures/v3/antworten/rechnungen.json +14 -6
  119. package/fixtures/v3/antworten/storno.json +1 -1
  120. package/fixtures/v3/stored/belege.json +1 -1
  121. package/fixtures/v3/stored/kasse.json +414 -3
  122. package/fixtures/v3/stored/rechnungen.json +1 -1
  123. package/fixtures/v3/v3-vokabular.json +530 -8
  124. package/fixtures/v3/zahlbetrag-faelle.json +1 -1
  125. package/package.json +1 -1
@@ -0,0 +1,104 @@
1
+ import type { InternerTransport } from '../client/aufrufe.js';
2
+ import type { Stocktake, StocktakeCountPage, StocktakeCountResult, StocktakeItemPage } from '../inventory/typen.js';
3
+ import type { StockCondition, StocktakeStatus } from '../inventory/vertrag.js';
4
+ import { type QuantityRule } from './artikel.js';
5
+ /**
6
+ * Inventur zaehlen an der Kasse (Lager-Kern Stufe 3, Backend
7
+ * inventur-endpoints.js): offene Inventuren des Standorts, ihre Positionen und
8
+ * Zaehlungen lesen, zaehlen und eine Zaehlung stornieren. Alle fuenf Aufrufe
9
+ * gibt es nur ueber den Kassenweg `/api/v3`.
10
+ *
11
+ * Rechte am Server: `stocktakeCount` (zaehlen, eigene Zaehlungen stornieren,
12
+ * lesen) bzw. `stocktakeClose` (auch fremde Zaehlungen stornieren und ab der
13
+ * Pruefung das Soll sehen). Kassen-Benutzer sehen in [listMyStocktakes] nur
14
+ * Inventuren in `counting` und solche in `review` mit offenem Nachzaehlen.
15
+ * Anlegen, Pruefen und Abschliessen gibt es an der Kasse nicht.
16
+ *
17
+ * Gezaehlt wird nur online: die Serverzeit ist die Referenzzeit. Bei unklarem
18
+ * Ausgang (`outcome: 'unknown'`) dieselbe Zaehlung mit **demselben**
19
+ * `idempotencyKey` erneut senden; sie wirkt genau einmal.
20
+ *
21
+ * Die Modelle sind dieselben wie in `./inventory` (`Stocktake`,
22
+ * `StocktakeItem`, `StocktakeCount`); Mengen in Tausendstel.
23
+ */
24
+ export interface ListMyStocktakesOptions {
25
+ /** Nur dieser Standort; `''` gilt wie nicht angegeben. */
26
+ locationId?: string;
27
+ /** Nur dieser Stand. */
28
+ status?: StocktakeStatus;
29
+ }
30
+ export interface ListMyStocktakeItemsOptions {
31
+ stocktakeId: string;
32
+ /** Nur ungezaehlte Positionen (in der Pruefung: die zum Nachzaehlen). */
33
+ openOnly?: boolean;
34
+ limit?: number;
35
+ cursor?: string;
36
+ }
37
+ export interface ListMyStocktakeCountsOptions {
38
+ stocktakeId: string;
39
+ articleId?: string;
40
+ /** Nur die eigenen Zaehlungen. */
41
+ ownOnly?: boolean;
42
+ limit?: number;
43
+ cursor?: string;
44
+ }
45
+ export interface RecordMyStocktakeCountOptions {
46
+ /** Bei „Erneut senden“ derselbe Schluessel wie beim ersten Versuch. */
47
+ idempotencyKey: string;
48
+ stocktakeId: string;
49
+ articleId: string;
50
+ /** Vorgabe `sellable`. */
51
+ condition?: StockCondition;
52
+ /** Tausendstel, aus der Eingabe mit [parseQuantityMilli]; `0` = leer gezaehlt. */
53
+ quantity: number;
54
+ /** Einzelstueck: je Stueck genau eine Seriennummer. */
55
+ serialNumbers?: string[];
56
+ /** Hoechstens 200 Zeichen. */
57
+ note?: string | null;
58
+ /** Ohne Angabe gilt die Kasse der Anmeldung (`registerUserAuth`). */
59
+ cashregisterId?: string;
60
+ }
61
+ export interface VoidMyStocktakeCountOptions {
62
+ idempotencyKey: string;
63
+ stocktakeId: string;
64
+ countId: string;
65
+ /** 1–500 Zeichen. */
66
+ reason: string;
67
+ }
68
+ /** Offene Inventuren (fuer Kassen-Benutzer nur `counting` und `review` mit offenem Nachzaehlen). */
69
+ export declare function listMyStocktakes(transport: InternerTransport, options?: ListMyStocktakesOptions): Promise<Stocktake[]>;
70
+ /** Positionen einer Inventur; ab der Pruefung mit Soll nur mit dem Recht `stocktakeClose`. */
71
+ export declare function listMyStocktakeItems(transport: InternerTransport, options: ListMyStocktakeItemsOptions): Promise<StocktakeItemPage>;
72
+ /** Zaehlungen einer Inventur, neueste zuerst; `ownOnly` nur die eigenen. */
73
+ export declare function listMyStocktakeCounts(transport: InternerTransport, options: ListMyStocktakeCountsOptions): Promise<StocktakeCountPage>;
74
+ /** Eine Zaehlung; Antwort: die Zaehlung und die Position danach (Ist-Summe, kein Soll). */
75
+ export declare function recordMyStocktakeCount(transport: InternerTransport, options: RecordMyStocktakeCountOptions): Promise<StocktakeCountResult>;
76
+ /** Storniert eine Zaehlung mit Grund (fremde nur mit dem Recht `stocktakeClose`). */
77
+ export declare function voidMyStocktakeCount(transport: InternerTransport, options: VoidMyStocktakeCountOptions): Promise<StocktakeCountResult>;
78
+ /**
79
+ * Eine eingetippte Menge in Tausendstel der Basiseinheit, **ohne Gleitkomma**:
80
+ * `'12'` → `12000`, `'0,25'` → `250`, `'1.5'` → `1500`.
81
+ *
82
+ * - Dezimaltrenner Komma oder Punkt, hoechstens drei Nachkommastellen; weitere
83
+ * Nullen am Ende zaehlen nicht (`'1,2340'` → `1234`). `'0'` ist eine gueltige
84
+ * Menge (leer gezaehlt).
85
+ * - **Punkt mit genau drei Ziffern danach und einem Ganzteil ungleich 0**
86
+ * (`'1.000'`, `'12.500'`) ist bei jeder Einheit `null`: in oesterreichischer
87
+ * Schreibweise ist das ein Tausenderpunkt („tausend“), am Ziffernblock ein
88
+ * Dezimalpunkt („eins“); ein Faktor 1000 buchte der Abschluss als Differenz.
89
+ * Mit Komma ist es eindeutig (`'1,000'` → `1000`), ebenso `'0.500'`,
90
+ * `'1.5'`, `'1.25'`.
91
+ * - **Stueckware** nur als ganze Zahl ohne Trenner. Stueckware ist, was
92
+ * `rule` sagt (die gespeicherte Mengenregel des Artikels,
93
+ * `PosArticle.quantityRule`, `'piece'` | `'decimal'`), ohne `rule` die
94
+ * Vorgabe der Einheit (`quantityRuleForUnit`: Stk, g, ml …, auch ohne
95
+ * Einheit). Einzelstuecke (Seriennummer) sind immer Stueckware: dann
96
+ * `'piece'` uebergeben.
97
+ *
98
+ * `null` auch fuer: leer, Vorzeichen, Tausenderleerzeichen, Exponent, mehr als
99
+ * drei Nachkommastellen, groesser als eine sichere Ganzzahl. Die Kasse zeigt
100
+ * dann ihren Satz (`stocktake.quantity_invalid`), statt still zu runden.
101
+ * Gemeinsame Prueffaelle mit dem Dart-Zwilling:
102
+ * `fixtures/stocktake-quantity-cases.json`.
103
+ */
104
+ export declare function parseQuantityMilli(text: string, unit?: string | null, rule?: QuantityRule | null): number | null;
@@ -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", "password_change_required", "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',
@@ -60,6 +62,7 @@ exports.REGISTER_ERROR_CODES = Object.freeze([
60
62
  'pairing_code_unknown',
61
63
  'pairing_code_used',
62
64
  'pairing_failed',
65
+ 'password_change_required',
63
66
  'register_user_no_business',
64
67
  'register_user_not_allowed',
65
68
  'register_user_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 = "4b0152e546f6320ecc6dad18156ac91cc176426c71c57ecbf21c1192a714ecda";
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 = "4b0152e546f6320ecc6dad18156ac91cc176426c71c57ecbf21c1192a714ecda";
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.10.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.10.0';
@@ -2,7 +2,7 @@ import type { Cashregister, HobexReceipt, Receipt, ReportMonth, StripeUrlSession
2
2
  import { type CreateStripeLinkOptions, type StripeCaptureResult } from '../payments/stripe.js';
3
3
  import { type HobexPayOptions, type HobexRefundOptions } from '../payments/hobex.js';
4
4
  import { type TransportOptions } from './transport.js';
5
- import { type ReportV2, type ReportV2Options } from './reports.js';
5
+ import { type CashregisterReportPeriod, type ReportV2, type ReportV2Options } from './reports.js';
6
6
  import { type CashboxStatus, type SignatureStatus } from './status.js';
7
7
  import { type SendReceiptEmailOptions, type SendReceiptEmailResult, type ListMyReceiptsOptions, type ReceiptList, type ReceiptWithCompany, type SellReceiptOptions, type CancelReceiptOptions, type CancelReceiptResult } from './receipts.js';
8
8
  /**
@@ -54,9 +54,11 @@ export interface KasseneckApi {
54
54
  listMyCashregisters(): Promise<Cashregister[]>;
55
55
  /** Rohdaten eines Zeitraums: Belege und Firmendaten (`getReportV2`). */
56
56
  getReportV2(options: ReportV2Options): Promise<ReportV2>;
57
- /** Tagesbericht als PDF (Kalendertag nach Wiener Zeit). */
57
+ /** Kassenbericht als PDF (v2): abgeschlossener Monat, Tag oder Zeitraum (Endpunkt `getCashregisterReport`). */
58
+ getCashregisterReport(options: CashregisterReportPeriod): Promise<Uint8Array>;
59
+ /** @deprecated Since 1.10.0: use getCashregisterReport. Tagesbericht als PDF (Kalendertag nach Wiener Zeit). */
58
60
  downloadDailyReport(date: Date): Promise<Uint8Array>;
59
- /** Monatsbericht als PDF (Endpunkt `downloadReport`). */
61
+ /** @deprecated Since 1.10.0: use getCashregisterReport. Monatsbericht als PDF (Endpunkt `downloadReport`). */
60
62
  downloadMonthlyReport(reportMonth: ReportMonth): Promise<Uint8Array>;
61
63
  /** Betriebsstatus der Kasse bei FinanzOnline. */
62
64
  getCashboxStatus(): Promise<CashboxStatus>;
@@ -1,7 +1,7 @@
1
1
  import { createStripeLink, stripeCaptureIntent, } from '../payments/stripe.js';
2
2
  import { hobexPay, hobexRefund } from '../payments/hobex.js';
3
3
  import { createTransport, createBinaryTransport } from './transport.js';
4
- import { downloadDailyReport, downloadMonthlyReport, getReportV2 } from './reports.js';
4
+ import { downloadDailyReport, downloadMonthlyReport, getCashregisterReport, getReportV2 } from './reports.js';
5
5
  import { getCashboxStatus, getSignatureStatus } from './status.js';
6
6
  import { sellReceipt, sellReceiptWithCompany, cancelReceipt, zeroReceipt, getReceipt, getReceiptWithCompany, generateFullReceiptId, getFirstReceiptDate, listMyReceipts, sendReceiptEmail, } from './receipts.js';
7
7
  import { listMyCashregisters } from './cashregisters.js';
@@ -24,6 +24,7 @@ export function createKasseneckApi(options) {
24
24
  sendReceiptEmail: (o) => sendReceiptEmail(rufen, o),
25
25
  listMyCashregisters: () => listMyCashregisters(rufen),
26
26
  getReportV2: (o) => getReportV2(rufen, o),
27
+ getCashregisterReport: (options) => getCashregisterReport(rufenBinaer, options),
27
28
  downloadDailyReport: (date) => downloadDailyReport(rufenBinaer, date),
28
29
  downloadMonthlyReport: (reportMonth) => downloadMonthlyReport(rufenBinaer, reportMonth),
29
30
  getCashboxStatus: () => getCashboxStatus(rufen),
@@ -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", "getCashregisterReport", "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", "getCashregisterReport", "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>;