@kreiseck/kasseneck-api 1.1.1 → 1.2.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 (123) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +70 -0
  3. package/dist/cjs/client/aufrufe.d.ts +5 -5
  4. package/dist/cjs/client/aufrufe.js +21 -2
  5. package/dist/cjs/client/errors.d.ts +1 -1
  6. package/dist/cjs/client/errors.js +2 -1
  7. package/dist/cjs/client/receipts.d.ts +9 -1
  8. package/dist/cjs/client/receipts.js +18 -3
  9. package/dist/cjs/client/transport.d.ts +3 -3
  10. package/dist/cjs/client/transport.js +2 -2
  11. package/dist/cjs/index.d.ts +2 -2
  12. package/dist/cjs/index.js +6 -3
  13. package/dist/cjs/invoice/index.d.ts +2 -2
  14. package/dist/cjs/invoice/index.js +3 -1
  15. package/dist/cjs/invoice/typen.d.ts +13 -2
  16. package/dist/cjs/invoice/vertrag.d.ts +10 -1
  17. package/dist/cjs/invoice/vertrag.js +39 -2
  18. package/dist/cjs/models/cancellation.d.ts +14 -2
  19. package/dist/cjs/models/cancellation.js +15 -1
  20. package/dist/cjs/models/cashregister.d.ts +3 -0
  21. package/dist/cjs/models/cashregister.js +1 -0
  22. package/dist/cjs/models/index.d.ts +1 -1
  23. package/dist/cjs/models/index.js +4 -2
  24. package/dist/cjs/models/payment-errors.d.ts +1 -1
  25. package/dist/cjs/models/payment-errors.js +1 -0
  26. package/dist/cjs/models/receipt-email.d.ts +1 -1
  27. package/dist/cjs/models/receipt-email.js +1 -0
  28. package/dist/cjs/models/receipt-errors.d.ts +1 -1
  29. package/dist/cjs/models/receipt-errors.js +1 -0
  30. package/dist/cjs/models/receipt-item.d.ts +9 -0
  31. package/dist/cjs/models/receipt-item.js +5 -0
  32. package/dist/cjs/models/receipt.d.ts +1 -1
  33. package/dist/cjs/models/receipt.js +6 -1
  34. package/dist/cjs/pos/artikel.d.ts +14 -0
  35. package/dist/cjs/pos/artikel.js +13 -2
  36. package/dist/cjs/pos/errors.d.ts +3 -3
  37. package/dist/cjs/pos/errors.js +6 -2
  38. package/dist/cjs/pos/index.d.ts +5 -2
  39. package/dist/cjs/pos/index.js +13 -2
  40. package/dist/cjs/pos/lager.d.ts +95 -0
  41. package/dist/cjs/pos/lager.js +160 -0
  42. package/dist/cjs/register/errors.d.ts +1 -1
  43. package/dist/cjs/register/errors.js +1 -0
  44. package/dist/cjs/register/pairing.d.ts +27 -1
  45. package/dist/cjs/register/pairing.js +18 -1
  46. package/dist/cjs/stored/draht.d.ts +4 -2
  47. package/dist/cjs/stored/draht.js +46 -5
  48. package/dist/cjs/stored/vokabular.d.ts +1 -1
  49. package/dist/cjs/stored/vokabular.js +5 -3
  50. package/dist/cjs/version.d.ts +1 -1
  51. package/dist/cjs/version.js +1 -1
  52. package/dist/esm/client/aufrufe.d.ts +5 -5
  53. package/dist/esm/client/aufrufe.js +21 -2
  54. package/dist/esm/client/errors.d.ts +1 -1
  55. package/dist/esm/client/errors.js +2 -1
  56. package/dist/esm/client/receipts.d.ts +9 -1
  57. package/dist/esm/client/receipts.js +19 -4
  58. package/dist/esm/client/transport.d.ts +3 -3
  59. package/dist/esm/client/transport.js +2 -2
  60. package/dist/esm/index.d.ts +2 -2
  61. package/dist/esm/index.js +2 -2
  62. package/dist/esm/invoice/index.d.ts +2 -2
  63. package/dist/esm/invoice/index.js +1 -1
  64. package/dist/esm/invoice/typen.d.ts +13 -2
  65. package/dist/esm/invoice/vertrag.d.ts +10 -1
  66. package/dist/esm/invoice/vertrag.js +38 -1
  67. package/dist/esm/models/cancellation.d.ts +14 -2
  68. package/dist/esm/models/cancellation.js +13 -0
  69. package/dist/esm/models/cashregister.d.ts +3 -0
  70. package/dist/esm/models/cashregister.js +1 -0
  71. package/dist/esm/models/index.d.ts +1 -1
  72. package/dist/esm/models/index.js +1 -1
  73. package/dist/esm/models/payment-errors.d.ts +1 -1
  74. package/dist/esm/models/payment-errors.js +1 -0
  75. package/dist/esm/models/receipt-email.d.ts +1 -1
  76. package/dist/esm/models/receipt-email.js +1 -0
  77. package/dist/esm/models/receipt-errors.d.ts +1 -1
  78. package/dist/esm/models/receipt-errors.js +1 -0
  79. package/dist/esm/models/receipt-item.d.ts +9 -0
  80. package/dist/esm/models/receipt-item.js +5 -0
  81. package/dist/esm/models/receipt.d.ts +1 -1
  82. package/dist/esm/models/receipt.js +6 -1
  83. package/dist/esm/pos/artikel.d.ts +14 -0
  84. package/dist/esm/pos/artikel.js +13 -3
  85. package/dist/esm/pos/errors.d.ts +3 -3
  86. package/dist/esm/pos/errors.js +6 -2
  87. package/dist/esm/pos/index.d.ts +5 -2
  88. package/dist/esm/pos/index.js +6 -2
  89. package/dist/esm/pos/lager.d.ts +95 -0
  90. package/dist/esm/pos/lager.js +154 -0
  91. package/dist/esm/register/errors.d.ts +1 -1
  92. package/dist/esm/register/errors.js +1 -0
  93. package/dist/esm/register/pairing.d.ts +27 -1
  94. package/dist/esm/register/pairing.js +17 -1
  95. package/dist/esm/stored/draht.d.ts +4 -2
  96. package/dist/esm/stored/draht.js +45 -4
  97. package/dist/esm/stored/vokabular.d.ts +1 -1
  98. package/dist/esm/stored/vokabular.js +5 -3
  99. package/dist/esm/version.d.ts +1 -1
  100. package/dist/esm/version.js +1 -1
  101. package/fixtures/hobex-hps-codes.json +1 -1
  102. package/fixtures/invoice-api-examples/cancel-error-return-disposition.json +17 -0
  103. package/fixtures/invoice-api-examples/credit-error-return-disposition.json +26 -0
  104. package/fixtures/invoice-api-examples/credit-return-disposition.json +23 -0
  105. package/fixtures/invoice-api-examples/issue-error-return-disposition.json +25 -0
  106. package/fixtures/invoice-api-examples/issue-error-stock-id.json +27 -0
  107. package/fixtures/invoice-api-examples/issue-stock.json +22 -0
  108. package/fixtures/invoice-api.schema.json +37 -1
  109. package/fixtures/invoice-texts.json +1 -1
  110. package/fixtures/pos-texts.json +1 -1
  111. package/fixtures/surface.json +48 -4
  112. package/fixtures/v3/antworten/belege.json +1 -1
  113. package/fixtures/v3/antworten/belegmail.json +1 -1
  114. package/fixtures/v3/antworten/kasse-belege.json +1 -1
  115. package/fixtures/v3/antworten/kasse.json +662 -3
  116. package/fixtures/v3/antworten/rechnungen.json +1 -1
  117. package/fixtures/v3/antworten/storno.json +1 -1
  118. package/fixtures/v3/stored/belege.json +1 -1
  119. package/fixtures/v3/stored/kasse.json +58 -3
  120. package/fixtures/v3/stored/rechnungen.json +1 -1
  121. package/fixtures/v3/v3-vokabular.json +249 -16
  122. package/fixtures/v3/zahlbetrag-faelle.json +1 -1
  123. package/package.json +1 -1
@@ -0,0 +1,95 @@
1
+ import type { InternerTransport } from '../client/aufrufe.js';
2
+ /**
3
+ * Lager an der Kasse (Lager-Kern Stufe 2, Backend lager-endpoints.js):
4
+ * Standorte, Bestand und der Standort der Kasse. Alle drei Aufrufe gibt es
5
+ * nur ueber den Kassenweg `/api/v3` (registerInternal); Rechte am Server:
6
+ * `stockView` (lesen), `stockCosts` (Werte), `stockLocation` (Standort setzen).
7
+ *
8
+ * **Ganzzahlen:** Mengen sind Tausendstel der Basiseinheit (`1000` = 1 Stueck,
9
+ * `250` = 0,250 kg), Werte ganze Cent bzw. Mikro-Euro. Nichts wird geteilt,
10
+ * gerundet oder geklemmt -- ein negativer Bestand (mehr verkauft als gebucht)
11
+ * ist eine Aussage des Servers und bleibt negativ. Eine Zahl, die keine
12
+ * Ganzzahl ist, oder eine fehlende Menge wird **nie** zu `0`: der Aufruf
13
+ * endet mit `KasseneckValidationError` (`scope: 'response'`), denn „kein
14
+ * Bestand“ und „Antwort kaputt“ sind verschiedene Aussagen.
15
+ */
16
+ /** Standort-Typen (Katalog `STANDORT_TYP`), englisch wie am Draht. */
17
+ export declare const STOCK_LOCATION_TYPES: readonly ["warehouse", "store", "vehicle", "other"];
18
+ export type StockLocationType = (typeof STOCK_LOCATION_TYPES)[number];
19
+ export interface StockLocationAddress {
20
+ street: string | null;
21
+ zip: string | null;
22
+ city: string | null;
23
+ country: string | null;
24
+ }
25
+ export interface StockLocation {
26
+ id: string;
27
+ name: string;
28
+ /** `null`: ein Typ, den dieses Paket nicht kennt. */
29
+ type: StockLocationType | null;
30
+ /** Fahrzeuge haben keine Adresse. */
31
+ address: StockLocationAddress | null;
32
+ /** Kennzeichen, nur bei `vehicle`. */
33
+ licensePlate: string | null;
34
+ /** `false` = aufgeloest; als Standort der Kasse abgewiesen (`location_inactive`). */
35
+ active: boolean;
36
+ /** `true` = Hauptstandort, den der Server ohne eigenes Dokument ergaenzt. */
37
+ virtual: boolean;
38
+ }
39
+ /** Bestand eines Artikels an einem Standort, in Tausendstel der Basiseinheit. */
40
+ export interface StockLevel {
41
+ articleId: string;
42
+ locationId: string;
43
+ sellable: number;
44
+ defective: number;
45
+ reserved: number;
46
+ /** `sellable - reserved`, vom Server gerechnet. */
47
+ available: number;
48
+ }
49
+ /** Lagerwert eines Artikels -- nur mit dem Recht `stockCosts`. */
50
+ export interface StockValue {
51
+ articleId: string;
52
+ stockValueCents: number;
53
+ /** Durchschnittlicher Einstandspreis je Basiseinheit in Mikro-Euro; `null` bei Menge 0. */
54
+ averageCostMicros: number | null;
55
+ }
56
+ export interface StockList {
57
+ stock: StockLevel[];
58
+ /**
59
+ * `null`, wenn der Aufrufer das Recht `stockCosts` nicht hat (der Server
60
+ * laesst das Feld weg); `[]`, wenn er es hat und nichts bewertet ist. Eine
61
+ * Oberflaeche zeigt bei `null` keinen Wert, nie „0,00 €“.
62
+ */
63
+ values: StockValue[] | null;
64
+ }
65
+ export interface ListMyStockOptions {
66
+ /** Nur dieser Standort; `''` gilt wie nicht angegeben. */
67
+ locationId?: string;
68
+ /** Nur dieser Artikel; `''` gilt wie nicht angegeben. */
69
+ articleId?: string;
70
+ /** Nur Zeilen unter dem Mindestbestand. */
71
+ belowMinimum?: boolean;
72
+ }
73
+ export interface SetMyCashregisterStockLocationOptions {
74
+ /** Standort-Kennung; `null` setzt auf den Standard-Standort des Betriebs zurueck. */
75
+ stockLocationId: string | null;
76
+ /** Ohne Angabe gilt die Kasse der Anmeldung (`registerUserAuth`). */
77
+ cashregisterId?: string;
78
+ }
79
+ export interface CashregisterStockLocation {
80
+ cashregisterId: string;
81
+ /** `null` = Standard-Standort des Betriebs. */
82
+ stockLocationId: string | null;
83
+ }
84
+ /** Standorte des Betriebs, samt aufgeloesten (`active: false`) und dem Hauptstandort. */
85
+ export declare function listMyStockLocations(transport: InternerTransport): Promise<StockLocation[]>;
86
+ /** Bestand je Artikel und Standort; Werte nur mit dem Recht `stockCosts`. */
87
+ export declare function listMyStock(transport: InternerTransport, options?: ListMyStockOptions): Promise<StockList>;
88
+ /**
89
+ * Standort der Kasse setzen -- von dort bucht der Server Verkauf und Storno
90
+ * ab. `stockLocationId: null` setzt zurueck (am Draht der leere Text).
91
+ * Fehler am Code: `location_not_found`, `location_inactive`,
92
+ * `cashregister_not_found`, `cashregister_not_assigned`, `not_permitted`,
93
+ * `module_inactive`.
94
+ */
95
+ export declare function setMyCashregisterStockLocation(transport: InternerTransport, options: SetMyCashregisterStockLocationOptions): Promise<CashregisterStockLocation>;
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STOCK_LOCATION_TYPES = void 0;
4
+ exports.listMyStockLocations = listMyStockLocations;
5
+ exports.listMyStock = listMyStock;
6
+ exports.setMyCashregisterStockLocation = setMyCashregisterStockLocation;
7
+ const errors_js_1 = require("../client/errors.js");
8
+ const artikel_js_1 = require("./artikel.js");
9
+ /**
10
+ * Lager an der Kasse (Lager-Kern Stufe 2, Backend lager-endpoints.js):
11
+ * Standorte, Bestand und der Standort der Kasse. Alle drei Aufrufe gibt es
12
+ * nur ueber den Kassenweg `/api/v3` (registerInternal); Rechte am Server:
13
+ * `stockView` (lesen), `stockCosts` (Werte), `stockLocation` (Standort setzen).
14
+ *
15
+ * **Ganzzahlen:** Mengen sind Tausendstel der Basiseinheit (`1000` = 1 Stueck,
16
+ * `250` = 0,250 kg), Werte ganze Cent bzw. Mikro-Euro. Nichts wird geteilt,
17
+ * gerundet oder geklemmt -- ein negativer Bestand (mehr verkauft als gebucht)
18
+ * ist eine Aussage des Servers und bleibt negativ. Eine Zahl, die keine
19
+ * Ganzzahl ist, oder eine fehlende Menge wird **nie** zu `0`: der Aufruf
20
+ * endet mit `KasseneckValidationError` (`scope: 'response'`), denn „kein
21
+ * Bestand“ und „Antwort kaputt“ sind verschiedene Aussagen.
22
+ */
23
+ /** Standort-Typen (Katalog `STANDORT_TYP`), englisch wie am Draht. */
24
+ exports.STOCK_LOCATION_TYPES = Object.freeze(['warehouse', 'store', 'vehicle', 'other']);
25
+ const TYPEN = new Set(exports.STOCK_LOCATION_TYPES);
26
+ function antwortfehler(name, grund) {
27
+ return new errors_js_1.KasseneckValidationError(name, grund, 'response');
28
+ }
29
+ const objekt = (w) => (w !== null && typeof w === 'object' && !Array.isArray(w) ? w : null);
30
+ /** Freitext, der fehlen darf (Name, Adressteile, Kennzeichen): leer = `null`. */
31
+ const textOderNull = (w) => (typeof w === 'string' && w !== '' ? w : null);
32
+ /**
33
+ * Eine Kennung, die da sein muss: ohne sie ist die Zeile nicht zuzuordnen,
34
+ * und ein leerer Text als `stockLocationId` setzte die Kasse zurueck.
35
+ */
36
+ function kennung(name, pfad, w) {
37
+ if (typeof w !== 'string' || w === '')
38
+ throw antwortfehler(name, `Antwort enthaelt keine Kennung (data.${pfad} fehlt)`);
39
+ return w;
40
+ }
41
+ /** Eine Zahl des Servers: Ganzzahl oder Antwortfehler, nie ein Ersatzwert. */
42
+ function ganzzahl(name, pfad, w) {
43
+ if (typeof w !== 'number' || !Number.isInteger(w)) {
44
+ throw antwortfehler(name, `Antwort enthaelt keine ganze Zahl (data.${pfad})`);
45
+ }
46
+ return w;
47
+ }
48
+ function standort(name, e, i) {
49
+ const s = objekt(e) ?? {};
50
+ const pfad = `locations[${i}]`;
51
+ const a = objekt(s.address);
52
+ const teile = a ? { street: textOderNull(a.street), zip: textOderNull(a.zip), city: textOderNull(a.city), country: textOderNull(a.country) } : null;
53
+ // Eine Adresse ohne einen einzigen Teil ist keine Adresse.
54
+ const address = teile && Object.values(teile).some((t) => t !== null) ? teile : null;
55
+ return {
56
+ id: kennung(name, `${pfad}.id`, s.id),
57
+ name: typeof s.name === 'string' ? s.name : '',
58
+ type: typeof s.type === 'string' && TYPEN.has(s.type) ? s.type : null,
59
+ address,
60
+ licensePlate: textOderNull(s.licensePlate),
61
+ active: s.active !== false,
62
+ virtual: s.virtual === true,
63
+ };
64
+ }
65
+ function bestand(name, e, i) {
66
+ const b = objekt(e) ?? {};
67
+ const pfad = `stock[${i}]`;
68
+ return {
69
+ articleId: kennung(name, `${pfad}.articleId`, b.articleId),
70
+ locationId: kennung(name, `${pfad}.locationId`, b.locationId),
71
+ sellable: ganzzahl(name, `${pfad}.sellable`, b.sellable),
72
+ defective: ganzzahl(name, `${pfad}.defective`, b.defective),
73
+ reserved: ganzzahl(name, `${pfad}.reserved`, b.reserved),
74
+ available: ganzzahl(name, `${pfad}.available`, b.available),
75
+ };
76
+ }
77
+ function wert(name, e, i) {
78
+ const w = objekt(e) ?? {};
79
+ const pfad = `values[${i}]`;
80
+ return {
81
+ articleId: kennung(name, `${pfad}.articleId`, w.articleId),
82
+ stockValueCents: ganzzahl(name, `${pfad}.stockValueCents`, w.stockValueCents),
83
+ // Fehlt der Durchschnitt oder ist er null, ist die Menge 0 -- eine
84
+ // vorhandene, aber unbrauchbare Zahl ist dagegen ein Antwortfehler.
85
+ averageCostMicros: w.averageCostMicros === undefined || w.averageCostMicros === null
86
+ ? null
87
+ : ganzzahl(name, `${pfad}.averageCostMicros`, w.averageCostMicros),
88
+ };
89
+ }
90
+ /** Standorte des Betriebs, samt aufgeloesten (`active: false`) und dem Hauptstandort. */
91
+ async function listMyStockLocations(transport) {
92
+ const name = 'listMyStockLocations';
93
+ const daten = await transport(name);
94
+ return (0, artikel_js_1.liste)(daten, 'locations', name, (e, i) => standort(name, e, i));
95
+ }
96
+ /** Bestand je Artikel und Standort; Werte nur mit dem Recht `stockCosts`. */
97
+ async function listMyStock(transport, options = {}) {
98
+ const name = 'listMyStock';
99
+ if (options === null || typeof options !== 'object')
100
+ throw new errors_js_1.KasseneckValidationError(name, 'options muss ein Objekt sein', 'request');
101
+ const params = {};
102
+ for (const feld of ['locationId', 'articleId']) {
103
+ const w = options[feld];
104
+ if (w === undefined || w === '')
105
+ continue;
106
+ if (typeof w !== 'string')
107
+ throw new errors_js_1.KasseneckValidationError(name, `${feld} muss Text sein`, 'request');
108
+ params[feld] = w;
109
+ }
110
+ if (options.belowMinimum !== undefined) {
111
+ if (typeof options.belowMinimum !== 'boolean')
112
+ throw new errors_js_1.KasseneckValidationError(name, 'belowMinimum muss true oder false sein', 'request');
113
+ // false filtert am Server nicht; gesendet wird nur der Filter selbst.
114
+ if (options.belowMinimum)
115
+ params.belowMinimum = true;
116
+ }
117
+ const daten = await transport(name, params);
118
+ const stock = (0, artikel_js_1.liste)(daten, 'stock', name, (e, i) => bestand(name, e, i));
119
+ const roh = objekt(daten)?.values;
120
+ // Fehlt `values`, fehlt dem Aufrufer das Recht `stockCosts`: `null`, nie `[]`.
121
+ // Etwas anderes als eine Liste ist dagegen kein „kein Recht“, sondern kaputt.
122
+ if (roh === undefined || roh === null)
123
+ return { stock, values: null };
124
+ return { stock, values: (0, artikel_js_1.liste)(daten, 'values', name, (e, i) => wert(name, e, i)) };
125
+ }
126
+ /**
127
+ * Standort der Kasse setzen -- von dort bucht der Server Verkauf und Storno
128
+ * ab. `stockLocationId: null` setzt zurueck (am Draht der leere Text).
129
+ * Fehler am Code: `location_not_found`, `location_inactive`,
130
+ * `cashregister_not_found`, `cashregister_not_assigned`, `not_permitted`,
131
+ * `module_inactive`.
132
+ */
133
+ async function setMyCashregisterStockLocation(transport, options) {
134
+ const name = 'setMyCashregisterStockLocation';
135
+ const ziel = options?.stockLocationId;
136
+ if (ziel !== null && typeof ziel !== 'string') {
137
+ throw new errors_js_1.KasseneckValidationError(name, 'stockLocationId fehlt (Kennung, oder null zum Zuruecksetzen)', 'request');
138
+ }
139
+ // Leer setzt zurueck. Nur Leerraum wuerde der Server kuerzen und damit still
140
+ // auf den Standard-Standort zuruecksetzen: das ist kein Standort, sondern ein Fehler.
141
+ if (ziel !== null && ziel !== '' && ziel.trim() === '') {
142
+ throw new errors_js_1.KasseneckValidationError(name, 'stockLocationId ist nur Leerraum (Kennung angeben, oder null zum Zuruecksetzen)', 'request');
143
+ }
144
+ const params = { stockLocationId: ziel === null ? '' : ziel };
145
+ if (options.cashregisterId !== undefined) {
146
+ if (typeof options.cashregisterId !== 'string' || options.cashregisterId.trim() === '') {
147
+ throw new errors_js_1.KasseneckValidationError(name, 'cashregisterId ist leer', 'request');
148
+ }
149
+ params.cashregisterId = options.cashregisterId;
150
+ }
151
+ const daten = objekt(await transport(name, params));
152
+ if (!daten || typeof daten.cashregisterId !== 'string' || daten.cashregisterId === '') {
153
+ throw antwortfehler(name, 'Antwort enthaelt keine Kasse (data.cashregisterId fehlt)');
154
+ }
155
+ const stand = daten.stockLocationId;
156
+ if (stand !== null && stand !== undefined && typeof stand !== 'string') {
157
+ throw antwortfehler(name, 'Antwort enthaelt einen unbrauchbaren Standort (data.stockLocationId)');
158
+ }
159
+ return { cashregisterId: daten.cashregisterId, stockLocationId: textOderNull(stand) };
160
+ }
@@ -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", "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", "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`. */
@@ -34,6 +34,7 @@ const fehlercodes_js_1 = require("../client/fehlercodes.js");
34
34
  exports.REGISTER_ERROR_CODES = Object.freeze([
35
35
  'account_not_found',
36
36
  'admin_required',
37
+ 'api_not_approved',
37
38
  'cashregister_in_use',
38
39
  'cashregister_not_assigned',
39
40
  'cashregister_not_found',
@@ -137,10 +137,12 @@ export interface RegisterDeviceUsers {
137
137
  * nennt den Grund als Menschentext (ausser Betrieb, keine Signaturkarte,
138
138
  * Startbeleg fehlt): die Kasse sperrt das Kassieren VOR dem ersten Beleg
139
139
  * statt an createReceipt zu scheitern. Fehlt das Feld, gilt bereit.
140
+ * `stockLocationId`: Lager-Standort der Kasse, fehlt = Standard-Standort.
140
141
  */
141
142
  cashregister?: {
142
143
  ready: boolean;
143
144
  reason?: string | null;
145
+ stockLocationId?: string;
144
146
  };
145
147
  /** Das Geraet haengt an der Test-Umgebung des Betriebs. */
146
148
  testEnvironment: boolean;
@@ -179,6 +181,24 @@ export interface RegisterUserPerms {
179
181
  discount?: boolean;
180
182
  /** Trinkgeld anderen zuweisen. */
181
183
  tipAssign?: boolean;
184
+ /**
185
+ * Lager: Standorte und Mengen sehen (listMyStockLocations, listMyStock).
186
+ * Fehlt das Recht, gilt es als erteilt – anders als alle anderen
187
+ * (siehe [stockViewOf]); ein ausdrueckliches `false` sperrt.
188
+ */
189
+ stockView?: boolean;
190
+ /** Lager: Einkaufswerte sehen (`values` in listMyStock); gibt nur der Inhaber frei. */
191
+ stockCosts?: boolean;
192
+ /** Lager: Wareneingang, Umbuchen. */
193
+ stockMove?: boolean;
194
+ /** Lager: Abgang, Zustand, Gegenbuchung. */
195
+ stockLoss?: boolean;
196
+ /** Inventur: zaehlen. */
197
+ stocktakeCount?: boolean;
198
+ /** Inventur: abschliessen. */
199
+ stocktakeClose?: boolean;
200
+ /** Standort der Kasse waehlen (setMyCashregisterStockLocation). */
201
+ stockLocation?: boolean;
182
202
  [weiteresRecht: string]: boolean | RegisterScope | undefined;
183
203
  }
184
204
  /**
@@ -189,10 +209,16 @@ export interface RegisterUserPerms {
189
209
  * nicht fuehrt (Tippfehler, umbenanntes Recht), kommt hier nicht durch.
190
210
  * Die Gegenrichtung schliesst [_RechteVollstaendig] direkt darunter.
191
211
  */
192
- export declare const REGISTER_PERMS: readonly ["sell", "cancel", "articles", "layout", "reports", "takeover", "cancelScope", "receiptsScope", "drawer", "discount", "tipAssign"];
212
+ export declare const REGISTER_PERMS: readonly ["sell", "cancel", "articles", "layout", "reports", "takeover", "cancelScope", "receiptsScope", "drawer", "discount", "tipAssign", "stockView", "stockCosts", "stockMove", "stockLoss", "stocktakeCount", "stocktakeClose", "stockLocation"];
193
213
  /** Reichweite lesen, mit der Migration des Backends (register-auth.js). */
194
214
  export declare function cancelScopeOf(perms: RegisterUserPerms | null | undefined): RegisterScope;
195
215
  export declare function receiptsScopeOf(perms: RegisterUserPerms | null | undefined): RegisterScope;
216
+ /**
217
+ * Darf der Benutzer Standorte und Mengen sehen? Wie im Backend (lager-core):
218
+ * ohne Schluessel gilt `stockView` als erteilt, ein ausdrueckliches `false`
219
+ * sperrt; alle anderen Lager-Rechte gelten ohne Schluessel als verweigert.
220
+ */
221
+ export declare function stockViewOf(perms: RegisterUserPerms | null | undefined): boolean;
196
222
  /** Der angemeldete Kassen-Benutzer. */
197
223
  export interface RegisterUser {
198
224
  id: string;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.REGISTER_PERMS = void 0;
4
4
  exports.cancelScopeOf = cancelScopeOf;
5
5
  exports.receiptsScopeOf = receiptsScopeOf;
6
+ exports.stockViewOf = stockViewOf;
6
7
  exports.pairRegisterDevice = pairRegisterDevice;
7
8
  exports.unpairRegisterDevice = unpairRegisterDevice;
8
9
  exports.listRegisterSessionsForDevice = listRegisterSessionsForDevice;
@@ -60,6 +61,7 @@ const ohneAnmeldung = () => ({ headers: {}, params: {} });
60
61
  exports.REGISTER_PERMS = [
61
62
  'sell', 'cancel', 'articles', 'layout', 'reports', 'takeover',
62
63
  'cancelScope', 'receiptsScope', 'drawer', 'discount', 'tipAssign',
64
+ 'stockView', 'stockCosts', 'stockMove', 'stockLoss', 'stocktakeCount', 'stocktakeClose', 'stockLocation',
63
65
  ];
64
66
  /** Reichweite lesen, mit der Migration des Backends (register-auth.js). */
65
67
  function cancelScopeOf(perms) {
@@ -76,6 +78,16 @@ function receiptsScopeOf(perms) {
76
78
  return 'all';
77
79
  return ['none', 'own', 'all'].includes(perms.receiptsScope) ? perms.receiptsScope : 'none';
78
80
  }
81
+ /**
82
+ * Darf der Benutzer Standorte und Mengen sehen? Wie im Backend (lager-core):
83
+ * ohne Schluessel gilt `stockView` als erteilt, ein ausdrueckliches `false`
84
+ * sperrt; alle anderen Lager-Rechte gelten ohne Schluessel als verweigert.
85
+ */
86
+ function stockViewOf(perms) {
87
+ if (!perms)
88
+ return false;
89
+ return perms.stockView === undefined ? true : perms.stockView === true;
90
+ }
79
91
  /**
80
92
  * Geraet koppeln: der Kopplungs-Code wird gegen den dauerhaften Ausweis dieses
81
93
  * Geraets getauscht. **Ohne Anmeldung** — der Code ist der Nachweis.
@@ -210,7 +222,12 @@ function kasseBereit(wert) {
210
222
  const roh = wert;
211
223
  if (typeof roh['ready'] !== 'boolean')
212
224
  return undefined;
213
- return { ready: roh['ready'], reason: typeof roh['reason'] === 'string' ? roh['reason'] : null };
225
+ const standort = roh['stockLocationId'];
226
+ return {
227
+ ready: roh['ready'],
228
+ reason: typeof roh['reason'] === 'string' ? roh['reason'] : null,
229
+ ...(typeof standort === 'string' && standort !== '' ? { stockLocationId: standort } : {}),
230
+ };
214
231
  }
215
232
  /** Die Regel aus der Antwort — oder `null`, wenn keine brauchbare kommt. */
216
233
  function regel(wert) {
@@ -10,10 +10,12 @@ export declare function regel(eintrag: SchemaEintrag): {
10
10
  };
11
11
  /** Innere Namen einer Schema-Ebene (was der Server innen an dieser Stelle kennt). */
12
12
  export declare function innereNamen(schema: SchemaObjekt): Map<string, string>;
13
+ /** Rueckgabe-Wahl innen -> aussen (Katalog RUECKGABE; stored.test.ts vergleicht mit dem Vertrag). */
14
+ export declare const _RUECKGABE_NACH_AUSSEN: Readonly<Record<string, string>>;
13
15
  /**
14
16
  * Ein Belegdokument, wie Handler und Rand es vor der Uebersetzung sehen:
15
- * ohne Storno-Marke (storno-core.ohneInterneStornoFelder, Rand
16
- * ohneStornoMarke). Alles andere bleibt woertlich, auch `pruefangaben` im
17
+ * ohne Storno-Marke und Lager-Standort (storno-core.ohneInterneBelegFelder,
18
+ * Rand ohneStornoMarke). Alles andere bleibt woertlich, auch `pruefangaben` im
17
19
  * Beleg selbst (der Server reicht sie so durch). Wirft, wenn es kein
18
20
  * Belegdokument ist.
19
21
  */
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.istObjekt = exports.hat = void 0;
3
+ exports._RUECKGABE_NACH_AUSSEN = exports.istObjekt = exports.hat = void 0;
4
4
  exports.regel = regel;
5
5
  exports.innereNamen = innereNamen;
6
6
  exports._storedReceiptInner = _storedReceiptInner;
@@ -93,7 +93,7 @@ const aeussereWerte = (name) => new Set(Object.values(vokabular_js_1.KATALOGE[na
93
93
  /**
94
94
  * Interne Marke der Storno-Reservierung: `stornoMarke` am Storno-Beleg,
95
95
  * `marke` im Bezug und in `cancellations[]`. Handler
96
- * (storno-core.ohneInterneStornoFelder) und Rand (ohneStornoMarke) nehmen sie
96
+ * (storno-core.ohneInterneBelegFelder) und Rand (ohneStornoMarke) nehmen sie
97
97
  * heraus; der Vertrag nennt die Namen nicht (nur `$function: belegJeKanal`).
98
98
  */
99
99
  const STORNO_MARKE = 'stornoMarke';
@@ -104,6 +104,44 @@ const ohneMarke = (o) => {
104
104
  const { [MARKE]: _m, ...rest } = o;
105
105
  return rest;
106
106
  };
107
+ /**
108
+ * Interne Dokumentfelder eines Belegs, die keine Antwort traegt (Zwilling von
109
+ * storno-core.INTERNE_BELEG_FELDER): der Lager-Standort der Kasse, den
110
+ * createReceipt fuer die Lagerbuchung an den Beleg kopiert.
111
+ */
112
+ const INTERNE_BELEG_FELDER = ['lagerStandortId'];
113
+ /** Rueckgabe-Wahl innen -> aussen (Katalog RUECKGABE; stored.test.ts vergleicht mit dem Vertrag). */
114
+ exports._RUECKGABE_NACH_AUSSEN = Object.freeze({ lager: 'restock', defekt: 'defective', entsorgt: 'disposed' });
115
+ /**
116
+ * Zwilling von `rueckgabeUmbenennen` (Rand): `rueckgabe` heisst aussen
117
+ * `returnDisposition`, an Ort und Stelle; ein Wert ausserhalb des Katalogs
118
+ * faellt weg (der Server schreibt dafuer eine Warnzeile).
119
+ */
120
+ function rueckgabeUmbenennen(o) {
121
+ if (!(0, exports.istObjekt)(o) || !(0, exports.hat)(o, 'rueckgabe'))
122
+ return o;
123
+ const raus = {};
124
+ for (const [k, w] of Object.entries(o)) {
125
+ if (k !== 'rueckgabe') {
126
+ raus[k] = w;
127
+ continue;
128
+ }
129
+ if (typeof w === 'string' && (0, exports.hat)(exports._RUECKGABE_NACH_AUSSEN, w))
130
+ raus.returnDisposition = exports._RUECKGABE_NACH_AUSSEN[w];
131
+ }
132
+ return raus;
133
+ }
134
+ const zeilenMitRueckgabe = (items) => (Array.isArray(items) ? items.map(rueckgabeUmbenennen) : items);
135
+ /** Zwilling von `belegRueckgabeNachAussen`: Storno-Zeilen und Eintraege in `cancellations[]`. */
136
+ function belegRueckgabeNachAussen(beleg) {
137
+ const raus = { ...beleg };
138
+ if (Array.isArray(beleg.items))
139
+ raus.items = zeilenMitRueckgabe(beleg.items);
140
+ if (Array.isArray(beleg.cancellations)) {
141
+ raus.cancellations = beleg.cancellations.map((c) => ((0, exports.istObjekt)(c) && Array.isArray(c.items) ? { ...c, items: zeilenMitRueckgabe(c.items) } : c));
142
+ }
143
+ return raus;
144
+ }
107
145
  /**
108
146
  * Zwilling von `beleg-pruefangaben.alsIso`: leer (auch 0, '') -> null;
109
147
  * Firestore-Zeitstempel, Zahl oder Zeichenkette -> ISO-Zeitpunkt in UTC;
@@ -121,8 +159,8 @@ function alsIso(ts) {
121
159
  }
122
160
  /**
123
161
  * Ein Belegdokument, wie Handler und Rand es vor der Uebersetzung sehen:
124
- * ohne Storno-Marke (storno-core.ohneInterneStornoFelder, Rand
125
- * ohneStornoMarke). Alles andere bleibt woertlich, auch `pruefangaben` im
162
+ * ohne Storno-Marke und Lager-Standort (storno-core.ohneInterneBelegFelder,
163
+ * Rand ohneStornoMarke). Alles andere bleibt woertlich, auch `pruefangaben` im
126
164
  * Beleg selbst (der Server reicht sie so durch). Wirft, wenn es kein
127
165
  * Belegdokument ist.
128
166
  */
@@ -131,6 +169,8 @@ function _storedReceiptInner(doc, functionName) {
131
169
  throw new errors_js_1.KasseneckValidationError(functionName, 'Kein Belegdokument (receiptId fehlt)', 'response');
132
170
  }
133
171
  const { [STORNO_MARKE]: _s, ...beleg } = doc;
172
+ for (const feld of INTERNE_BELEG_FELDER)
173
+ delete beleg[feld];
134
174
  if ((0, exports.hat)(beleg, 'cancellationOf'))
135
175
  beleg.cancellationOf = ohneMarke(beleg.cancellationOf);
136
176
  if (Array.isArray(beleg.cancellations))
@@ -152,7 +192,8 @@ function pruefangabenDerHuelle(p) {
152
192
  */
153
193
  function _receiptEnvelopeToWire(huelle) {
154
194
  const schema = vokabular_js_1.SCHEMAS.getReceipt;
155
- return werteNachAussen(schluesselNachAussen(huelle, schema.data), schema.werte);
195
+ const draht = werteNachAussen(schluesselNachAussen(huelle, schema.data), schema.werte);
196
+ return (0, exports.istObjekt)(draht.receipt) ? { ...draht, receipt: belegRueckgabeNachAussen(draht.receipt) } : draht;
156
197
  }
157
198
  /**
158
199
  * Ein Belegdokument (`users/{uid}/cashregisters/{id}/receipts/{id}`) in der
@@ -1,5 +1,5 @@
1
1
  /** Fingerabdruck des Vertrags-Exports, aus dem diese Datei stammt (`_quelle.sha256`). */
2
- export declare const VOKABULAR_QUELLE = "29994ca53adc96e7cb49b9e3688b102a69c126544ef092fc6579a2e1fcd0d555";
2
+ export declare const VOKABULAR_QUELLE = "b1049e2f65e9261cf8f729481d9ce1e5afda2cf620333f38ae6bf1afb36c8712";
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 = "29994ca53adc96e7cb49b9e3688b102a69c126544ef092fc6579a2e1fcd0d555";
7
+ exports.VOKABULAR_QUELLE = "b1049e2f65e9261cf8f729481d9ce1e5afda2cf620333f38ae6bf1afb36c8712";
8
8
  /** Schema je Endpunkt (aussen -> innen) und Wertverweise auf die Kataloge. */
9
9
  exports.SCHEMAS = {
10
10
  "getReceipt": {
@@ -222,7 +222,8 @@ exports.SCHEMAS = {
222
222
  "__": "kasse",
223
223
  "visible": "sichtbar",
224
224
  "sort": "sort"
225
- }
225
+ },
226
+ "stockLocationIds": "standorte"
226
227
  }
227
228
  ]
228
229
  },
@@ -259,7 +260,8 @@ exports.ARTIKEL_FELDER = [
259
260
  "revenueGroupId",
260
261
  "active",
261
262
  "groupId",
262
- "tile"
263
+ "tile",
264
+ "stockLocationIds"
263
265
  ];
264
266
  /** Wertkataloge innen (deutsch) -> aussen (englisch). */
265
267
  exports.KATALOGE = {
@@ -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.1.1";
7
+ export declare const PACKAGE_VERSION = "1.2.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.1.1';
10
+ exports.PACKAGE_VERSION = '1.2.0';
@@ -13,7 +13,7 @@
13
13
  * umhuellt, muss ihn weiterhin absetzen koennen.
14
14
  */
15
15
  import type { TransportBodyFields } 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", "listMyTipRecipients", "listPartnerCustomers", "listPartnerWebhookDeliveries", "listPartnerWebhooks", "listRegisterUsersForDevice", "listRegisterSessionsForDevice", "pairRegisterDevice", "recordInvoicePayment", "registerPinLogin", "registerUserLogin", "renewRegisterSession", "reportCustomerContract", "requestCustomerSignature", "searchCustomers", "sendPartnerCustomerFonLink", "sendPartnerWebhookTest", "sendReceiptEmail", "setMyKasseLogo", "setMyKasseSettings", "setMyRegisterDeviceSettings", "stripeCaptureIntent", "unpairRegisterDevice", "rotatePartnerWebhookSecret", "updateCustomer", "updatePartnerWebhook"];
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"];
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,20 +21,20 @@ 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", "createCustomer", "getCustomer", "updateCustomer", "searchCustomers", "issueInvoice", "cancelInvoice", "createCreditNote", "getInvoice", "listInvoices", "getInvoicePdf", "getInvoiceXml", "getInvoiceSetupStatus", "listBrands", "recordInvoicePayment"];
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"];
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"];
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"];
32
32
  export type PublicCall = typeof PUBLIC_CALLS[number];
33
33
  export type PosCall = typeof POS_CALLS[number];
34
- /** Einer der 25 Aufrufe des Kassenwegs. */
34
+ /** Einer der 28 Aufrufe des Kassenwegs. */
35
35
  export declare function isPosCall(name: string): boolean;
36
36
  /**
37
- * Nur ueber den Kassenweg erreichbar (19 Namen): unter `api.kasseneck.at/v3`
37
+ * Nur ueber den Kassenweg erreichbar (22 Namen): unter `api.kasseneck.at/v3`
38
38
  * gibt es sie nicht. Der Transport schickt sie darum ohne eigene Basis an
39
39
  * [POS_BASE_URL] statt an die oeffentliche Basis.
40
40
  */