@kreiseck/kasseneck-api 0.29.0 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -0
- package/dist/cjs/client/api.d.ts +3 -3
- package/dist/cjs/client/index.d.ts +1 -1
- package/dist/cjs/client/receipts.d.ts +32 -3
- package/dist/cjs/client/receipts.js +121 -6
- package/dist/cjs/enums/keck-payment-method.d.ts +10 -0
- package/dist/cjs/enums/keck-payment-method.js +6 -0
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.js +6 -2
- package/dist/cjs/models/cancellation.d.ts +11 -1
- package/dist/cjs/models/cancellation.js +15 -0
- package/dist/cjs/models/index.d.ts +2 -0
- package/dist/cjs/models/index.js +7 -1
- package/dist/cjs/models/payment-errors.d.ts +22 -0
- package/dist/cjs/models/payment-errors.js +46 -0
- package/dist/cjs/models/receipt-payment.d.ts +85 -0
- package/dist/cjs/models/receipt-payment.js +40 -0
- package/dist/cjs/models/receipt-summary.d.ts +9 -0
- package/dist/cjs/models/receipt-summary.js +2 -0
- package/dist/cjs/models/receipt.d.ts +9 -0
- package/dist/cjs/models/receipt.js +3 -0
- package/dist/cjs/receipt/layout.js +112 -10
- package/dist/esm/client/api.d.ts +3 -3
- package/dist/esm/client/index.d.ts +1 -1
- package/dist/esm/client/receipts.d.ts +32 -3
- package/dist/esm/client/receipts.js +121 -6
- package/dist/esm/enums/keck-payment-method.d.ts +10 -0
- package/dist/esm/enums/keck-payment-method.js +6 -0
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/models/cancellation.d.ts +11 -1
- package/dist/esm/models/cancellation.js +15 -0
- package/dist/esm/models/index.d.ts +2 -0
- package/dist/esm/models/index.js +2 -0
- package/dist/esm/models/payment-errors.d.ts +22 -0
- package/dist/esm/models/payment-errors.js +42 -0
- package/dist/esm/models/receipt-payment.d.ts +85 -0
- package/dist/esm/models/receipt-payment.js +36 -0
- package/dist/esm/models/receipt-summary.d.ts +9 -0
- package/dist/esm/models/receipt-summary.js +2 -0
- package/dist/esm/models/receipt.d.ts +9 -0
- package/dist/esm/models/receipt.js +3 -0
- package/dist/esm/receipt/layout.js +112 -10
- package/fixtures/belege/split-bar-rueckgeld.json +58 -0
- package/fixtures/belege/split-eine-karte-trinkgeld.json +75 -0
- package/fixtures/belege/split-karte-karte-bar.json +102 -0
- package/fixtures/belege/split-langer-betrag.json +74 -0
- package/fixtures/belege/split-tischrunde-trinkgeld.json +152 -0
- package/fixtures/belege/split-trinkgeld-karte.json +82 -0
- package/fixtures/belege/split-zwei-karten-gleicher-anbieter.json +89 -0
- package/fixtures/belege/storno-split-teil.json +71 -0
- package/fixtures/belege/storno-split-voll.json +100 -0
- package/fixtures/erwartet/split-bar-rueckgeld.blatt32.json +194 -0
- package/fixtures/erwartet/split-bar-rueckgeld.blatt48.json +182 -0
- package/fixtures/erwartet/split-bar-rueckgeld.grid32.txt +28 -0
- package/fixtures/erwartet/split-bar-rueckgeld.grid48.txt +26 -0
- package/fixtures/erwartet/split-bar-rueckgeld.lines.json +286 -0
- package/fixtures/erwartet/split-eine-karte-trinkgeld.blatt32.json +242 -0
- package/fixtures/erwartet/split-eine-karte-trinkgeld.blatt48.json +224 -0
- package/fixtures/erwartet/split-eine-karte-trinkgeld.grid32.txt +36 -0
- package/fixtures/erwartet/split-eine-karte-trinkgeld.grid48.txt +33 -0
- package/fixtures/erwartet/split-eine-karte-trinkgeld.lines.json +371 -0
- package/fixtures/erwartet/split-karte-karte-bar.blatt32.json +356 -0
- package/fixtures/erwartet/split-karte-karte-bar.blatt48.json +338 -0
- package/fixtures/erwartet/split-karte-karte-bar.grid32.txt +55 -0
- package/fixtures/erwartet/split-karte-karte-bar.grid48.txt +52 -0
- package/fixtures/erwartet/split-karte-karte-bar.lines.json +519 -0
- package/fixtures/erwartet/split-langer-betrag.blatt32.json +266 -0
- package/fixtures/erwartet/split-langer-betrag.blatt48.json +260 -0
- package/fixtures/erwartet/split-langer-betrag.grid32.txt +40 -0
- package/fixtures/erwartet/split-langer-betrag.grid48.txt +39 -0
- package/fixtures/erwartet/split-langer-betrag.lines.json +343 -0
- package/fixtures/erwartet/split-tischrunde-trinkgeld.blatt32.json +470 -0
- package/fixtures/erwartet/split-tischrunde-trinkgeld.blatt48.json +434 -0
- package/fixtures/erwartet/split-tischrunde-trinkgeld.grid32.txt +74 -0
- package/fixtures/erwartet/split-tischrunde-trinkgeld.grid48.txt +68 -0
- package/fixtures/erwartet/split-tischrunde-trinkgeld.lines.json +740 -0
- package/fixtures/erwartet/split-trinkgeld-karte.blatt32.json +272 -0
- package/fixtures/erwartet/split-trinkgeld-karte.blatt48.json +254 -0
- package/fixtures/erwartet/split-trinkgeld-karte.grid32.txt +41 -0
- package/fixtures/erwartet/split-trinkgeld-karte.grid48.txt +38 -0
- package/fixtures/erwartet/split-trinkgeld-karte.lines.json +428 -0
- package/fixtures/erwartet/split-zwei-karten-gleicher-anbieter.blatt32.json +326 -0
- package/fixtures/erwartet/split-zwei-karten-gleicher-anbieter.blatt48.json +296 -0
- package/fixtures/erwartet/split-zwei-karten-gleicher-anbieter.grid32.txt +50 -0
- package/fixtures/erwartet/split-zwei-karten-gleicher-anbieter.grid48.txt +45 -0
- package/fixtures/erwartet/split-zwei-karten-gleicher-anbieter.lines.json +504 -0
- package/fixtures/erwartet/storno-split-teil.blatt32.json +230 -0
- package/fixtures/erwartet/storno-split-teil.blatt48.json +224 -0
- package/fixtures/erwartet/storno-split-teil.grid32.txt +34 -0
- package/fixtures/erwartet/storno-split-teil.grid48.txt +33 -0
- package/fixtures/erwartet/storno-split-teil.lines.json +304 -0
- package/fixtures/erwartet/storno-split-voll.blatt32.json +320 -0
- package/fixtures/erwartet/storno-split-voll.blatt48.json +314 -0
- package/fixtures/erwartet/storno-split-voll.grid32.txt +49 -0
- package/fixtures/erwartet/storno-split-voll.grid48.txt +48 -0
- package/fixtures/erwartet/storno-split-voll.lines.json +410 -0
- package/fixtures/hobex-hps-codes.json +1 -1
- package/fixtures/kasse-texte.json +1 -1
- package/fixtures/manifest.json +72 -0
- package/fixtures/oberflaeche.json +1 -1
- package/fixtures/rechnung-api.schema.json +1 -1
- package/fixtures/rechnung-texte.json +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,49 @@ Was vor 0.7.0 geschah, steht in der Commit-Historie (`git log`); ab hier wird
|
|
|
4
4
|
es hier geführt. Ein Eintrag nennt die Änderung **und ihren Grund** —
|
|
5
5
|
nur der Grund überlebt den nächsten Umbau.
|
|
6
6
|
|
|
7
|
+
## 0.30.0
|
|
8
|
+
|
|
9
|
+
Mehrere Zahlungen je Beleg. Setzt ein Backend mit `payments` voraus (keck, live seit
|
|
10
|
+
2026-09-25); gegen einen älteren Server bleibt alles ohne `payments` wie bisher. Nichts bricht:
|
|
11
|
+
ein Beleg ohne Zahlungsliste liest, sendet und druckt sich byte-gleich wie in 0.29.0.
|
|
12
|
+
|
|
13
|
+
- **`Receipt` und `ReceiptSummary` tragen `payments` (`ReceiptPayment[]`), wenn der Server sie
|
|
14
|
+
liefert**, je Zahlung Zahlart, `amountCents`, bei Bar `tenderedCents`/Rückgeld, bei Karte
|
|
15
|
+
Anbieter und Terminaldaten, bei Stornos `refundOf`, dazu `tipCents` (Trinkgeld je Zahlung).
|
|
16
|
+
Grund: ein Tisch zahlt mit zwei Karten und dem Rest bar, und das Einzelfeld `paymentMethod`
|
|
17
|
+
konnte das nicht abbilden. Altbelege ohne Liste lesen sich unverändert (`payments` fehlt).
|
|
18
|
+
- **`KeckPaymentMethod.mixed` („Mehrere Zahlungsarten")**, nur zum Lesen. Der Server setzt ihn als
|
|
19
|
+
`paymentMethod`, wenn die Zahlungen verschiedene Zahlarten haben; wer ihn selbst sendet, wird
|
|
20
|
+
schon im Client abgewiesen. Grund: sonst wäre ein solcher Beleg für einen älteren Leser eine
|
|
21
|
+
unbekannte Zahlart; zum Kassieren gibt es die Zahlungsliste.
|
|
22
|
+
- **`payments` bei `sellReceipt`, `createReceipt` und `cancelReceipt`**, mit Form- und
|
|
23
|
+
Konfliktprüfung im Client (`payments` zusammen mit `paymentMethod` oder Kartenfeldern ergibt
|
|
24
|
+
`PAYMENTS_CONFLICT`; `payments: null` gilt als nicht angegeben). Für `sellReceipt` gibt es den
|
|
25
|
+
neuen Typ `SellReceiptWithPaymentsOptions`; `SellReceiptOptions` bleibt ein `interface` und
|
|
26
|
+
bekommt nur das optionale `payments?: undefined`, damit bestehender Code unverändert kompiliert
|
|
27
|
+
und die beiden Wege sich nicht mischen lassen. Beim Storno nennt `refundOf` die Zahlung des
|
|
28
|
+
Originals, auf die zurückgezahlt wird.
|
|
29
|
+
- **`PAYMENT_ERROR_CODES` (18 Codes) und `isPaymentErrorCode`**, Zwilling von
|
|
30
|
+
`ZAHLUNGS_FEHLERCODES` im Backend (gleiche Codes, gleiche Reihenfolge). `isPaymentErrorCode`
|
|
31
|
+
erkennt auch die kleingeschriebene `/v3`-Schreibweise, weil `/v3` diese Codes 1:1 klein
|
|
32
|
+
ausliefert. Grund: am Code entscheiden, nie am Text.
|
|
33
|
+
- **`CANCELLATION_ERROR_CODES` um vier `STORNO_…`-Codes ergänzt** (`STORNO_PAYMENTS_REQUIRED`,
|
|
34
|
+
`STORNO_REFUND_EXCEEDS_PAYMENT`, `STORNO_REFUND_REFERENCE_REQUIRED`,
|
|
35
|
+
`STORNO_REFUND_REFERENCE_UNKNOWN`) für die Rückzahlung je Zahlung. `isCancellationErrorCode`
|
|
36
|
+
prüft weiter exakt: unter `/v3` heißen die Storno-Codes nach dem Vokabular anders (nicht bloß
|
|
37
|
+
klein), die Namen kommen mit der Umstellung des Pakets auf `/v3`.
|
|
38
|
+
- **Beleg-Layout: bei mehr als einer Zahlung eine nummerierte Aufschlüsselung** unter „Gesamt:"
|
|
39
|
+
(„Zahlungsarten:", dann „1. Kartenzahlung", „2. Barzahlung" … samt Betrag; der Betrag bricht
|
|
40
|
+
auf 58 mm nie). Darunter eingerückt „davon Trinkgeld", „Gegeben" und „Rückgeld" der jeweiligen
|
|
41
|
+
Zahlung; die Kartenblöcke kommen je Zahlung in Zahlungsreihenfolge, jeweils mit derselben
|
|
42
|
+
Nummer darüber. Grund: auf dem Bon muss nachvollziehbar sein, welcher Betrag wie bezahlt wurde
|
|
43
|
+
und zu welcher Zahlung ein Terminal-Block gehört.
|
|
44
|
+
- **Bei genau einer Zahlung bleibt der Beleg wie bisher**, nur „davon Trinkgeld", „Gegeben" und
|
|
45
|
+
„Rückgeld" stehen jetzt eingerückt unter „Zahlungsart:". Ohne Zahlungsliste ändert sich nichts:
|
|
46
|
+
alle bisherigen Vertragsbeispiele (`fixtures/erwartet`) und der Bytestrom-Zwilling sind
|
|
47
|
+
unverändert. Neu sind neun Beispiele `split-*`/`storno-split-*` (Karte+Karte+Bar,
|
|
48
|
+
Tischrunde mit Trinkgeld, Rückgeld, langer Betrag, Voll- und Teilstorno).
|
|
49
|
+
|
|
7
50
|
## 0.29.0
|
|
8
51
|
|
|
9
52
|
- **Bricht `./partner` (und nur das): `PARTNER_FEHLER_CODES` ist jetzt durchgehend englisch,
|
package/dist/cjs/client/api.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { type CreateStripeLinkOptions, type StripeCaptureResult } from '../payme
|
|
|
3
3
|
import { type HobexPayOptions, type HobexRefundOptions } from '../payments/hobex.js';
|
|
4
4
|
import { type TransportOptions } from './transport.js';
|
|
5
5
|
import { type CashboxStatus, type SignatureStatus } from './status.js';
|
|
6
|
-
import { type SendReceiptEmailOptions, type SendReceiptEmailResult, type ListMyReceiptsOptions, type ReceiptList, type ReceiptWithCompany, type SellReceiptOptions, type CancelReceiptOptions, type CancelReceiptResult, type CreateCancelReceiptOptions } from './receipts.js';
|
|
6
|
+
import { type SendReceiptEmailOptions, type SendReceiptEmailResult, type ListMyReceiptsOptions, type ReceiptList, type ReceiptWithCompany, type SellReceiptOptions, type SellReceiptWithPaymentsOptions, type CancelReceiptOptions, type CancelReceiptResult, type CreateCancelReceiptOptions } from './receipts.js';
|
|
7
7
|
/**
|
|
8
8
|
* Schlichte Factory ueber den Endpunkt-Funktionen: bindet einen Transport
|
|
9
9
|
* einmal und liefert die Aufrufe ohne den wiederkehrenden ersten Parameter.
|
|
@@ -30,9 +30,9 @@ import { type SendReceiptEmailOptions, type SendReceiptEmailResult, type ListMyR
|
|
|
30
30
|
*/
|
|
31
31
|
export interface KasseneckApi {
|
|
32
32
|
/** Normalbeleg (Verkauf). */
|
|
33
|
-
sellReceipt(options: SellReceiptOptions): Promise<Receipt>;
|
|
33
|
+
sellReceipt(options: SellReceiptOptions | SellReceiptWithPaymentsOptions): Promise<Receipt>;
|
|
34
34
|
/** Normalbeleg samt Firmen-/Druckdaten fuer den Belegdruck. */
|
|
35
|
-
sellReceiptWithCompany(options: SellReceiptOptions): Promise<ReceiptWithCompany>;
|
|
35
|
+
sellReceiptWithCompany(options: SellReceiptOptions | SellReceiptWithPaymentsOptions): Promise<ReceiptWithCompany>;
|
|
36
36
|
/** Storno eines bestehenden Belegs — voll oder in Teilen, ueber den Storno-Endpunkt. */
|
|
37
37
|
cancelReceipt(options: CancelReceiptOptions): Promise<CancelReceiptResult>;
|
|
38
38
|
/** Storno aus frei uebergebenen Positionen. */
|
|
@@ -2,7 +2,7 @@ export { type AuthCredentials, type KasseneckAuth, type ApiKeyAuthOptions, type
|
|
|
2
2
|
export { DEFAULT_BASE_URL, DEFAULT_TIMEOUT_MS, type HttpResponseLike, type HttpRequestInit, type FetchLike, type TransportOptions, type TransportBodyFields, type KasseneckTransport, type KasseneckBinaryTransport, createTransport, createBinaryTransport, } from './transport.js';
|
|
3
3
|
export { AUFRUFE, type Aufruf, } from './aufrufe.js';
|
|
4
4
|
export { KasseneckApiError, KasseneckAuthError, KasseneckHttpError, KasseneckNetworkError, KasseneckValidationError, type ValidationScope, type KasseneckError, type HttpFailureReason, type CauseDigest, isKasseneckApiError, isKasseneckAuthError, isKasseneckHttpError, isKasseneckNetworkError, isKasseneckValidationError, } from './errors.js';
|
|
5
|
-
export { type ReceiptCommonOptions, type SellReceiptOptions, type TipOptions, type TipRecipientShare, type CancelReceiptOptions, type CreateCancelReceiptOptions, type ReceiptWithCompany, sellReceipt, sellReceiptWithCompany, cancelReceipt, type CancelReceiptResult, createCancelReceipt, zeroReceipt, getReceipt, getReceiptWithCompany, generateFullReceiptId, getFirstReceiptDate, listMyReceipts, type ListMyReceiptsOptions, type ReceiptList, type ReceiptListStats, checkVoucherCombinationError, type SendReceiptEmailOptions, type SendReceiptEmailResult, sendReceiptEmail, } from './receipts.js';
|
|
5
|
+
export { type ReceiptCommonOptions, type SellReceiptOptions, type SellReceiptWithPaymentsOptions, type TipOptions, type TipRecipientShare, type CancelReceiptOptions, type CreateCancelReceiptOptions, type ReceiptWithCompany, sellReceipt, sellReceiptWithCompany, cancelReceipt, type CancelReceiptResult, createCancelReceipt, zeroReceipt, getReceipt, getReceiptWithCompany, generateFullReceiptId, getFirstReceiptDate, listMyReceipts, type ListMyReceiptsOptions, type ReceiptList, type ReceiptListStats, checkVoucherCombinationError, type SendReceiptEmailOptions, type SendReceiptEmailResult, sendReceiptEmail, } from './receipts.js';
|
|
6
6
|
export { listMyCashregisters } from './cashregisters.js';
|
|
7
7
|
export { downloadDailyReport, downloadMonthlyReport } from './reports.js';
|
|
8
8
|
export { type CashboxStatus, type SignatureStatus, getCashboxStatus, getSignatureStatus, } from './status.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ReceiptType, type ReceiptTypeKey, KeckPaymentMethod, type KeckPaymentMethodKey, CreditCardProvider } from '../enums/index.js';
|
|
2
|
-
import { type Receipt, type ReceiptCompany, type ReceiptItem, type Voucher, type ReceiptSummary, type ReportMonth, type CancellationItem, type CancellationOf, type CancellationReason } from '../models/index.js';
|
|
2
|
+
import { type Receipt, type ReceiptCompany, type ReceiptItem, type Voucher, type ReceiptSummary, type ReportMonth, type CancellationItem, type CancellationOf, type CancellationReason, type ReceiptPaymentInput } from '../models/index.js';
|
|
3
3
|
import type { InternerTransport } from './aufrufe.js';
|
|
4
4
|
import type { Pruefangaben, ReceiptLayout } from '../receipt/layout.js';
|
|
5
5
|
import type { LogoStufe } from '../receipt/blatt.js';
|
|
@@ -90,11 +90,32 @@ export interface CreateReceiptOptions extends ReceiptCommonOptions {
|
|
|
90
90
|
* ausdruecklich uebergebene `paymentMethod` sticht.
|
|
91
91
|
*/
|
|
92
92
|
paymentMethodFromServer?: string;
|
|
93
|
+
/**
|
|
94
|
+
* Mehrere Zahlungen je Beleg (siehe [ReceiptPaymentInput]). Schliesst
|
|
95
|
+
* `paymentMethod`, `paymentMethodFromServer` und die Kartenfelder aus —
|
|
96
|
+
* die Kartenangaben gehoeren dann in die einzelne Zahlung (Backend:
|
|
97
|
+
* `PAYMENTS_CONFLICT`). Nur bei `standard` und `training`.
|
|
98
|
+
*/
|
|
99
|
+
payments?: ReceiptPaymentInput[];
|
|
93
100
|
items?: ReceiptItem[];
|
|
94
101
|
vouchers?: Voucher[];
|
|
95
102
|
}
|
|
103
|
+
/** Verkauf mit einer Zahlungsart (`paymentMethod`, Kartenfelder aus [ReceiptCommonOptions]). */
|
|
96
104
|
export interface SellReceiptOptions extends ReceiptCommonOptions {
|
|
97
105
|
paymentMethod: KeckPaymentMethod | KeckPaymentMethodKey;
|
|
106
|
+
payments?: undefined;
|
|
107
|
+
items?: ReceiptItem[];
|
|
108
|
+
vouchers?: Voucher[];
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Verkauf mit mehreren Zahlungen (`payments`, siehe [ReceiptPaymentInput]).
|
|
112
|
+
* Ohne `paymentMethod` und ohne die Kartenfelder aus [ReceiptCommonOptions] —
|
|
113
|
+
* die Kartenangaben stehen in der einzelnen Zahlung (Backend:
|
|
114
|
+
* `PAYMENTS_CONFLICT`, zur Laufzeit ebenso geprueft).
|
|
115
|
+
*/
|
|
116
|
+
export interface SellReceiptWithPaymentsOptions extends ReceiptCommonOptions {
|
|
117
|
+
payments: ReceiptPaymentInput[];
|
|
118
|
+
paymentMethod?: undefined;
|
|
98
119
|
items?: ReceiptItem[];
|
|
99
120
|
vouchers?: Voucher[];
|
|
100
121
|
}
|
|
@@ -126,6 +147,14 @@ export type CancelReceiptOptions = {
|
|
|
126
147
|
creditCardProvider?: CreditCardProvider;
|
|
127
148
|
cardPaymentId?: string;
|
|
128
149
|
cardPaymentData?: Record<string, unknown>;
|
|
150
|
+
/**
|
|
151
|
+
* Rueckzahlung je Zahlung (Betraege negativ, `refundOf` = `id` der
|
|
152
|
+
* Originalzahlung). Schliesst `paymentMethod` und die Kartenfelder aus
|
|
153
|
+
* (Backend: `PAYMENTS_CONFLICT`). Ohne Angabe spiegelt der Server die
|
|
154
|
+
* Restbetraege jeder Originalzahlung; ein Teilstorno eines Belegs mit
|
|
155
|
+
* mehreren Zahlungen braucht sie (`STORNO_PAYMENTS_REQUIRED`).
|
|
156
|
+
*/
|
|
157
|
+
payments?: ReceiptPaymentInput[];
|
|
129
158
|
} & ({
|
|
130
159
|
receipt: Receipt;
|
|
131
160
|
cashregisterId?: string;
|
|
@@ -183,12 +212,12 @@ export interface ReceiptWithCompany {
|
|
|
183
212
|
*/
|
|
184
213
|
export declare function createReceipt(rufen: InternerTransport, options: CreateReceiptOptions): Promise<Receipt>;
|
|
185
214
|
/** Normalbeleg (Verkauf) nach RKSV. */
|
|
186
|
-
export declare function sellReceipt(rufen: InternerTransport, options: SellReceiptOptions): Promise<Receipt>;
|
|
215
|
+
export declare function sellReceipt(rufen: InternerTransport, options: SellReceiptOptions | SellReceiptWithPaymentsOptions): Promise<Receipt>;
|
|
187
216
|
/**
|
|
188
217
|
* Normalbeleg wie [sellReceipt], liefert zusaetzlich die Firmen-/Druckdaten
|
|
189
218
|
* aus derselben Antwort — alles, was ein Belegdruck braucht, in einem Aufruf.
|
|
190
219
|
*/
|
|
191
|
-
export declare function sellReceiptWithCompany(rufen: InternerTransport, options: SellReceiptOptions): Promise<ReceiptWithCompany>;
|
|
220
|
+
export declare function sellReceiptWithCompany(rufen: InternerTransport, options: SellReceiptOptions | SellReceiptWithPaymentsOptions): Promise<ReceiptWithCompany>;
|
|
192
221
|
/**
|
|
193
222
|
* Storno-Beleg zu einem bestehenden Beleg — voll oder in Teilen. Prueft die
|
|
194
223
|
* Eingabe, bevor etwas hinausgeht; der Server haelt die Restmengen und die
|
|
@@ -65,6 +65,22 @@ function createReceiptParams(options) {
|
|
|
65
65
|
if (items != null && items.length > 0) {
|
|
66
66
|
params['items'] = alsNutzlast(items, index_js_2.toReceiptItemPayload);
|
|
67
67
|
}
|
|
68
|
+
// `payments: null` gilt wie im Backend (zahlungs-eingang.js) als nicht angegeben.
|
|
69
|
+
if (options.payments != null) {
|
|
70
|
+
// Der alte Storno-Weg und der Null-/Startbeleg nehmen keine Zahlungsliste
|
|
71
|
+
// (Backend: PAYMENTS_NOT_ALLOWED); ein Storno mit mehreren Zahlungen
|
|
72
|
+
// laeuft ueber cancelReceipt.
|
|
73
|
+
if (typ.value === index_js_1.ReceiptType.cancellation.value) {
|
|
74
|
+
throw eingabefehler('payments am Storno gehen nur ueber cancelReceipt.');
|
|
75
|
+
}
|
|
76
|
+
if (typ.value !== index_js_1.ReceiptType.standard.value && typ.value !== index_js_1.ReceiptType.training.value) {
|
|
77
|
+
throw eingabefehler(`payments sind bei receiptType "${typ.value}" nicht erlaubt.`);
|
|
78
|
+
}
|
|
79
|
+
const konflikt = zahlungsKonflikt(options);
|
|
80
|
+
if (konflikt != null)
|
|
81
|
+
throw eingabefehler(konflikt);
|
|
82
|
+
params['payments'] = gepruefteZahlungen(options.payments, false, 'createReceipt');
|
|
83
|
+
}
|
|
68
84
|
// Vom Aufrufer kommt sie geprueft, vom Server roh — siehe die beiden Felder
|
|
69
85
|
// in [CreateReceiptOptions]. Die Typpruefung allein reicht dafuer nicht: ein
|
|
70
86
|
// Verbraucher ohne Typen faellt durch dieses Netz, und ein Tippfehler in der
|
|
@@ -148,11 +164,15 @@ async function cancelReceipt(rufen, options) {
|
|
|
148
164
|
if (options.note !== undefined && options.note.length > NOTE_MAX) {
|
|
149
165
|
throw new errors_js_1.KasseneckValidationError('cancelReceipt', `Anmerkung ist zu lang (hoechstens ${NOTE_MAX} Zeichen)`, 'request');
|
|
150
166
|
}
|
|
167
|
+
// `payments: null` gilt wie im Backend als nicht angegeben.
|
|
168
|
+
const zahlungen = options.payments != null ? gepruefteStornoZahlungen(options) : undefined;
|
|
151
169
|
const params = { cashregisterId, originalReceiptId, reason: options.reason };
|
|
152
170
|
if (options.items !== undefined)
|
|
153
171
|
params.items = options.items.map((p) => ({ index: p.index, quantity: p.quantity }));
|
|
154
172
|
if (options.note !== undefined && options.note !== '')
|
|
155
173
|
params.note = options.note;
|
|
174
|
+
if (zahlungen !== undefined)
|
|
175
|
+
params.payments = zahlungen;
|
|
156
176
|
if (options.paymentMethod != null)
|
|
157
177
|
params.paymentMethod = gepruefteZahlungsart(options.paymentMethod);
|
|
158
178
|
const karte = options.creditCardProvider != null || options.cardPaymentId != null || options.cardPaymentData != null;
|
|
@@ -506,15 +526,110 @@ function gepruefterTip(tip) {
|
|
|
506
526
|
}
|
|
507
527
|
return nutzlast;
|
|
508
528
|
}
|
|
509
|
-
/**
|
|
529
|
+
/**
|
|
530
|
+
* Zahlungsart des Aufrufers pruefen — unbekannt wirft, bevor etwas rausgeht.
|
|
531
|
+
* `mixed` wirft ebenfalls: den Wert vergibt nur der Server (Beleg mit
|
|
532
|
+
* mehreren Zahlarten); gesendet wird stattdessen die Zahlungsliste.
|
|
533
|
+
*/
|
|
510
534
|
function gepruefteZahlungsart(wert) {
|
|
511
|
-
|
|
512
|
-
|
|
535
|
+
let zahlungsart;
|
|
536
|
+
if (typeof wert === 'object' && wert !== null) {
|
|
537
|
+
zahlungsart = wert.value;
|
|
538
|
+
}
|
|
539
|
+
else {
|
|
540
|
+
if (typeof wert !== 'string' || !Object.prototype.hasOwnProperty.call(index_js_1.KeckPaymentMethod, wert)) {
|
|
541
|
+
throw eingabefehler(`Zahlungsart: unbekannter Schluessel "${String(wert)}"`);
|
|
542
|
+
}
|
|
543
|
+
zahlungsart = index_js_1.KeckPaymentMethod[wert].value;
|
|
513
544
|
}
|
|
514
|
-
if (
|
|
515
|
-
throw eingabefehler(
|
|
545
|
+
if (zahlungsart === index_js_1.KeckPaymentMethod.mixed.value) {
|
|
546
|
+
throw eingabefehler('Zahlungsart "mixed" vergibt nur der Server – mehrere Zahlarten gehen als payments hinaus.');
|
|
516
547
|
}
|
|
517
|
-
return
|
|
548
|
+
return zahlungsart;
|
|
549
|
+
}
|
|
550
|
+
/** Hoechstzahl der Zahlungen je Beleg (Backend: MAX_ZAHLUNGEN). */
|
|
551
|
+
const MAX_ZAHLUNGEN = 20;
|
|
552
|
+
/**
|
|
553
|
+
* `payments` neben einer Einzel-Zahlungsart oder Kartenfeldern? Liefert den
|
|
554
|
+
* Grund (Backend: PAYMENTS_CONFLICT), sonst null. Nie still eines bevorzugen.
|
|
555
|
+
*/
|
|
556
|
+
function zahlungsKonflikt(options) {
|
|
557
|
+
for (const feld of ['paymentMethod', 'paymentMethodFromServer', 'creditCardProvider', 'cardPaymentId', 'cardPaymentData']) {
|
|
558
|
+
if (options[feld] != null) {
|
|
559
|
+
return `payments und ${feld} duerfen nicht gemeinsam gesendet werden – Kartenangaben gehoeren in die Zahlung.`;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
return null;
|
|
563
|
+
}
|
|
564
|
+
/**
|
|
565
|
+
* Zahlungsliste pruefen und in Nutzlast-Form bringen — Formpruefung wie
|
|
566
|
+
* `pruefeZahlungen` im Backend, soweit sie ohne Beleg und Zahlbetrag geht
|
|
567
|
+
* (Summe, Anbieter-Pflicht und Trinkgeld prueft der Server). Wirft, bevor
|
|
568
|
+
* etwas hinausgeht.
|
|
569
|
+
*/
|
|
570
|
+
function gepruefteZahlungen(roh, storno, functionName) {
|
|
571
|
+
const fehler = (grund) => new errors_js_1.KasseneckValidationError(functionName, grund, 'request');
|
|
572
|
+
if (!Array.isArray(roh))
|
|
573
|
+
throw fehler('payments muss eine Liste sein.');
|
|
574
|
+
if (roh.length > MAX_ZAHLUNGEN)
|
|
575
|
+
throw fehler(`payments: es sind hoechstens ${MAX_ZAHLUNGEN} Eintraege erlaubt.`);
|
|
576
|
+
return roh.map((eintrag, i) => {
|
|
577
|
+
const nr = i + 1;
|
|
578
|
+
if (eintrag == null || typeof eintrag !== 'object' || Array.isArray(eintrag)) {
|
|
579
|
+
throw fehler(`Zahlung ${nr}: kein gueltiges Objekt.`);
|
|
580
|
+
}
|
|
581
|
+
const z = eintrag;
|
|
582
|
+
const method = gepruefteZahlungsart(z['method']);
|
|
583
|
+
const betrag = z['amountCents'];
|
|
584
|
+
if (typeof betrag !== 'number' || !Number.isInteger(betrag) || (storno ? betrag >= 0 : betrag <= 0)) {
|
|
585
|
+
throw fehler(`Zahlung ${nr}: amountCents muss eine ganze Zahl ${storno ? 'kleiner' : 'groesser'} als 0 sein.`);
|
|
586
|
+
}
|
|
587
|
+
const aus = { method, amountCents: betrag };
|
|
588
|
+
if (z['tenderedCents'] !== undefined) {
|
|
589
|
+
const gegeben = z['tenderedCents'];
|
|
590
|
+
if (storno || typeof gegeben !== 'number' || !Number.isInteger(gegeben) || gegeben < betrag) {
|
|
591
|
+
throw fehler(`Zahlung ${nr}: tenderedCents muss eine ganze Zahl von mindestens amountCents sein (nur am Verkauf).`);
|
|
592
|
+
}
|
|
593
|
+
aus['tenderedCents'] = gegeben;
|
|
594
|
+
}
|
|
595
|
+
if (z['tipCents'] !== undefined) {
|
|
596
|
+
const trinkgeld = z['tipCents'];
|
|
597
|
+
if (typeof trinkgeld !== 'number' || !Number.isInteger(trinkgeld) || trinkgeld <= 0) {
|
|
598
|
+
throw fehler(`Zahlung ${nr}: tipCents muss eine ganze Zahl groesser als 0 sein.`);
|
|
599
|
+
}
|
|
600
|
+
aus['tipCents'] = trinkgeld;
|
|
601
|
+
}
|
|
602
|
+
if (z['provider'] !== undefined) {
|
|
603
|
+
aus['provider'] = kartenanbieter(String(z['provider']));
|
|
604
|
+
}
|
|
605
|
+
if (z['providerPaymentId'] !== undefined) {
|
|
606
|
+
if (typeof z['providerPaymentId'] !== 'string' || z['providerPaymentId'] === '') {
|
|
607
|
+
throw fehler(`Zahlung ${nr}: providerPaymentId muss ein nicht-leerer Text sein.`);
|
|
608
|
+
}
|
|
609
|
+
aus['providerPaymentId'] = z['providerPaymentId'];
|
|
610
|
+
}
|
|
611
|
+
if (z['providerData'] !== undefined) {
|
|
612
|
+
const daten = z['providerData'];
|
|
613
|
+
if (daten === null || typeof daten !== 'object' || Array.isArray(daten)) {
|
|
614
|
+
throw fehler(`Zahlung ${nr}: providerData muss ein Objekt sein.`);
|
|
615
|
+
}
|
|
616
|
+
aus['providerData'] = daten;
|
|
617
|
+
}
|
|
618
|
+
if (z['refundOf'] !== undefined) {
|
|
619
|
+
if (!storno || typeof z['refundOf'] !== 'string' || z['refundOf'] === '') {
|
|
620
|
+
throw fehler(`Zahlung ${nr}: refundOf gibt es nur am Storno, als id der Originalzahlung.`);
|
|
621
|
+
}
|
|
622
|
+
aus['refundOf'] = z['refundOf'];
|
|
623
|
+
}
|
|
624
|
+
return aus;
|
|
625
|
+
});
|
|
626
|
+
}
|
|
627
|
+
/** `payments` am Storno: Konflikt mit Zahlungsart/Kartenfeldern, dann Form. */
|
|
628
|
+
function gepruefteStornoZahlungen(options) {
|
|
629
|
+
const konflikt = zahlungsKonflikt(options);
|
|
630
|
+
if (konflikt != null)
|
|
631
|
+
throw new errors_js_1.KasseneckValidationError('cancelReceipt', konflikt, 'request');
|
|
632
|
+
return gepruefteZahlungen(options.payments, true, 'cancelReceipt');
|
|
518
633
|
}
|
|
519
634
|
/** Kartenanbieter pruefen — er stammt vom Aufrufer, nicht aus Serverdaten. */
|
|
520
635
|
function kartenanbieter(wert) {
|
|
@@ -5,6 +5,11 @@
|
|
|
5
5
|
* `label` ist das deutsche Anzeige-Label fuer die Zahlungsart-Zeile auf dem Beleg.
|
|
6
6
|
* Muss 1:1 mit dem Backend-Mapping `paymentMethodToString` (functions/helper.js)
|
|
7
7
|
* uebereinstimmen.
|
|
8
|
+
*
|
|
9
|
+
* `mixed` vergibt nur der Server: ein Beleg mit mehreren Zahlungen
|
|
10
|
+
* verschiedener Zahlart (`payments`) traegt ihn als Einzelfeld
|
|
11
|
+
* `paymentMethod`. Lesen ist erlaubt, Senden nicht — wer mehrere Zahlarten
|
|
12
|
+
* kassiert, schickt die Zahlungsliste, nie `mixed`.
|
|
8
13
|
*/
|
|
9
14
|
export declare const KeckPaymentMethod: {
|
|
10
15
|
readonly cash: {
|
|
@@ -52,6 +57,11 @@ export declare const KeckPaymentMethod: {
|
|
|
52
57
|
readonly needsCreditCard: true;
|
|
53
58
|
readonly label: "Bolt Card";
|
|
54
59
|
};
|
|
60
|
+
readonly mixed: {
|
|
61
|
+
readonly value: "mixed";
|
|
62
|
+
readonly needsCreditCard: false;
|
|
63
|
+
readonly label: "Mehrere Zahlungsarten";
|
|
64
|
+
};
|
|
55
65
|
};
|
|
56
66
|
export type KeckPaymentMethodKey = keyof typeof KeckPaymentMethod;
|
|
57
67
|
export type KeckPaymentMethod = (typeof KeckPaymentMethod)[KeckPaymentMethodKey];
|
|
@@ -9,6 +9,11 @@ const define_enum_js_1 = require("./define-enum.js");
|
|
|
9
9
|
* `label` ist das deutsche Anzeige-Label fuer die Zahlungsart-Zeile auf dem Beleg.
|
|
10
10
|
* Muss 1:1 mit dem Backend-Mapping `paymentMethodToString` (functions/helper.js)
|
|
11
11
|
* uebereinstimmen.
|
|
12
|
+
*
|
|
13
|
+
* `mixed` vergibt nur der Server: ein Beleg mit mehreren Zahlungen
|
|
14
|
+
* verschiedener Zahlart (`payments`) traegt ihn als Einzelfeld
|
|
15
|
+
* `paymentMethod`. Lesen ist erlaubt, Senden nicht — wer mehrere Zahlarten
|
|
16
|
+
* kassiert, schickt die Zahlungsliste, nie `mixed`.
|
|
12
17
|
*/
|
|
13
18
|
exports.KeckPaymentMethod = (0, define_enum_js_1.defineEnum)({
|
|
14
19
|
cash: { value: 'cash', needsCreditCard: false, label: 'Barzahlung' },
|
|
@@ -20,4 +25,5 @@ exports.KeckPaymentMethod = (0, define_enum_js_1.defineEnum)({
|
|
|
20
25
|
boltApp: { value: 'boltApp', needsCreditCard: false, label: 'Bolt App' },
|
|
21
26
|
boltCash: { value: 'boltCash', needsCreditCard: false, label: 'Bolt Cash' },
|
|
22
27
|
boltCard: { value: 'boltCard', needsCreditCard: true, label: 'Bolt Card' },
|
|
28
|
+
mixed: { value: 'mixed', needsCreditCard: false, label: 'Mehrere Zahlungsarten' },
|
|
23
29
|
});
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { ReceiptType, type ReceiptTypeKey, VatRate, type VatRateKey, KeckPaymentMethod, type KeckPaymentMethodKey, CreditCardProvider, type CreditCardProviderKey, VoucherType, type VoucherTypeKey, VoucherAction, type VoucherActionKey, StripeLinkMode, type StripeLinkModeKey, } from './enums/index.js';
|
|
2
|
-
export { type ReceiptItem, type ReceiptItemPayload, type ReceiptItemPayloadRead, toReceiptItemPayload, fromReceiptItemPayload, receiptItemTotalCents, receiptItemIsValid, negateReceiptItem, type TipRecipient, isTipItem, type Voucher, type VoucherPayload, toVoucherPayload, fromVoucherPayload, voucherIsValid, type Receipt, type ReceiptPayload, type ReceiptPayloadRead, toReceiptPayload, fromReceiptPayload, receiptSubSumCents, receiptSumCents, type CancellationOf, type CancellationItem, type Cancellation, type CancellationReason, type CancellationErrorCode, CANCELLATION_REASONS, CANCELLATION_ERROR_CODES, CANCELLATION_RESERVATION_MS, isCancellationReason, isCancellationErrorCode, type ReceiptEmailErrorCode, RECEIPT_EMAIL_ERROR_CODES, isReceiptEmailErrorCode, remainingQuantities, type ReceiptCompany, type ReceiptCompanyPayload, fromReceiptCompanyPayload, receiptCompanyTaxInfo, type Cashregister, type CashregisterOnboarding, type CashregisterPayload, type CashregisterOnboardingPayload, fromCashregisterPayload, type ReceiptSummary, type ReceiptSummaryPayload, fromReceiptSummaryPayload, type ZeroKind, ZERO_KINDS, istZeroKind, type ReportMonth, reportMonthFromDate, previousReportMonth, nextReportMonth, reportMonthKey, reportMonthReadable, type StripeUrlSession, type StripeUrlSessionPayload, toStripeUrlSessionPayload, fromStripeUrlSessionPayload, type HobexReceipt, type HobexReceiptPayload, toHobexReceiptPayload, fromHobexReceiptPayload, hobexReceiptToCardPaymentData, hobexReceiptNeedsSignature, } from './models/index.js';
|
|
3
|
-
export { type AuthCredentials, type KasseneckAuth, type ApiKeyAuthOptions, type RegisterUserAuthOptions, apiKeyAuth, registerUserAuth, DEFAULT_BASE_URL, DEFAULT_TIMEOUT_MS, type HttpResponseLike, type HttpRequestInit, type FetchLike, type TransportOptions, type TransportBodyFields, type KasseneckTransport, type KasseneckBinaryTransport, AUFRUFE, type Aufruf, createTransport, createBinaryTransport, KasseneckApiError, KasseneckAuthError, KasseneckHttpError, KasseneckNetworkError, KasseneckValidationError, type ValidationScope, type KasseneckError, type HttpFailureReason, type CauseDigest, isKasseneckApiError, isKasseneckAuthError, isKasseneckHttpError, isKasseneckNetworkError, isKasseneckValidationError, type ReceiptCommonOptions, type SellReceiptOptions, type TipOptions, type TipRecipientShare, type CancelReceiptOptions, type CancelReceiptResult, type CreateCancelReceiptOptions, type ReceiptWithCompany, sellReceipt, sellReceiptWithCompany, cancelReceipt, createCancelReceipt, zeroReceipt, getReceipt, getReceiptWithCompany, generateFullReceiptId, getFirstReceiptDate, listMyReceipts, type ListMyReceiptsOptions, type ReceiptList, type ReceiptListStats, listMyCashregisters, checkVoucherCombinationError, type SendReceiptEmailOptions, type SendReceiptEmailResult, sendReceiptEmail, downloadDailyReport, downloadMonthlyReport, type CashboxStatus, type SignatureStatus, getCashboxStatus, getSignatureStatus, type KasseneckApi, createKasseneckApi, } from './client/index.js';
|
|
2
|
+
export { type ReceiptItem, type ReceiptItemPayload, type ReceiptItemPayloadRead, toReceiptItemPayload, fromReceiptItemPayload, receiptItemTotalCents, receiptItemIsValid, negateReceiptItem, type TipRecipient, isTipItem, type Voucher, type VoucherPayload, toVoucherPayload, fromVoucherPayload, voucherIsValid, type Receipt, type ReceiptPayload, type ReceiptPayloadRead, toReceiptPayload, fromReceiptPayload, receiptSubSumCents, receiptSumCents, type CancellationOf, type CancellationItem, type Cancellation, type CancellationReason, type CancellationErrorCode, CANCELLATION_REASONS, CANCELLATION_ERROR_CODES, CANCELLATION_RESERVATION_MS, isCancellationReason, isCancellationErrorCode, type ReceiptPayment, type ReceiptPaymentPayload, type ReceiptPaymentInput, fromReceiptPaymentPayload, toReceiptPaymentPayload, type PaymentErrorCode, PAYMENT_ERROR_CODES, isPaymentErrorCode, type ReceiptEmailErrorCode, RECEIPT_EMAIL_ERROR_CODES, isReceiptEmailErrorCode, remainingQuantities, type ReceiptCompany, type ReceiptCompanyPayload, fromReceiptCompanyPayload, receiptCompanyTaxInfo, type Cashregister, type CashregisterOnboarding, type CashregisterPayload, type CashregisterOnboardingPayload, fromCashregisterPayload, type ReceiptSummary, type ReceiptSummaryPayload, fromReceiptSummaryPayload, type ZeroKind, ZERO_KINDS, istZeroKind, type ReportMonth, reportMonthFromDate, previousReportMonth, nextReportMonth, reportMonthKey, reportMonthReadable, type StripeUrlSession, type StripeUrlSessionPayload, toStripeUrlSessionPayload, fromStripeUrlSessionPayload, type HobexReceipt, type HobexReceiptPayload, toHobexReceiptPayload, fromHobexReceiptPayload, hobexReceiptToCardPaymentData, hobexReceiptNeedsSignature, } from './models/index.js';
|
|
3
|
+
export { type AuthCredentials, type KasseneckAuth, type ApiKeyAuthOptions, type RegisterUserAuthOptions, apiKeyAuth, registerUserAuth, DEFAULT_BASE_URL, DEFAULT_TIMEOUT_MS, type HttpResponseLike, type HttpRequestInit, type FetchLike, type TransportOptions, type TransportBodyFields, type KasseneckTransport, type KasseneckBinaryTransport, AUFRUFE, type Aufruf, createTransport, createBinaryTransport, KasseneckApiError, KasseneckAuthError, KasseneckHttpError, KasseneckNetworkError, KasseneckValidationError, type ValidationScope, type KasseneckError, type HttpFailureReason, type CauseDigest, isKasseneckApiError, isKasseneckAuthError, isKasseneckHttpError, isKasseneckNetworkError, isKasseneckValidationError, type ReceiptCommonOptions, type SellReceiptOptions, type SellReceiptWithPaymentsOptions, type TipOptions, type TipRecipientShare, type CancelReceiptOptions, type CancelReceiptResult, type CreateCancelReceiptOptions, type ReceiptWithCompany, sellReceipt, sellReceiptWithCompany, cancelReceipt, createCancelReceipt, zeroReceipt, getReceipt, getReceiptWithCompany, generateFullReceiptId, getFirstReceiptDate, listMyReceipts, type ListMyReceiptsOptions, type ReceiptList, type ReceiptListStats, listMyCashregisters, checkVoucherCombinationError, type SendReceiptEmailOptions, type SendReceiptEmailResult, sendReceiptEmail, downloadDailyReport, downloadMonthlyReport, type CashboxStatus, type SignatureStatus, getCashboxStatus, getSignatureStatus, type KasseneckApi, createKasseneckApi, } from './client/index.js';
|
|
4
4
|
export { parseServerTimeStamp, toViennaWallClock, type ViennaWallClock } from './vienna-time.js';
|
|
5
5
|
export { type KasseSettingsBetrieb, type KasseSettingsGeraet, type KasseSettings, type ArticleGroup, type KasseArtikel, KASSE_BETRIEB_STANDARD, KASSE_GERAET_STANDARD, mergeKasseSettings, fromArticleGroupPayload, fromKasseArtikelPayload, listMyArticleGroups, listMyArticles, getKasseSettings, setMyKasseSettings, setMyRegisterDeviceSettings, verteileRabatt, cancelScopeOf, receiptsScopeOf, } from './kasse/index.js';
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.receiptsScopeOf = exports.cancelScopeOf = exports.verteileRabatt = exports.setMyRegisterDeviceSettings = exports.setMyKasseSettings = exports.getKasseSettings = exports.listMyArticles = exports.listMyArticleGroups = exports.fromKasseArtikelPayload = exports.fromArticleGroupPayload = exports.mergeKasseSettings = exports.KASSE_GERAET_STANDARD = exports.KASSE_BETRIEB_STANDARD = exports.toViennaWallClock = exports.parseServerTimeStamp = exports.createKasseneckApi = exports.getSignatureStatus = exports.getCashboxStatus = exports.downloadMonthlyReport = exports.downloadDailyReport = exports.sendReceiptEmail = exports.checkVoucherCombinationError = exports.listMyCashregisters = exports.listMyReceipts = exports.getFirstReceiptDate = exports.generateFullReceiptId = exports.getReceiptWithCompany = exports.getReceipt = exports.zeroReceipt = exports.createCancelReceipt = exports.cancelReceipt = exports.sellReceiptWithCompany = exports.sellReceipt = exports.isKasseneckValidationError = exports.isKasseneckNetworkError = exports.isKasseneckHttpError = exports.isKasseneckAuthError = exports.isKasseneckApiError = exports.KasseneckValidationError = exports.KasseneckNetworkError = exports.KasseneckHttpError = exports.KasseneckAuthError = exports.KasseneckApiError = exports.createBinaryTransport = exports.createTransport = void 0;
|
|
3
|
+
exports.apiKeyAuth = exports.hobexReceiptNeedsSignature = exports.hobexReceiptToCardPaymentData = exports.fromHobexReceiptPayload = exports.toHobexReceiptPayload = exports.fromStripeUrlSessionPayload = exports.toStripeUrlSessionPayload = exports.reportMonthReadable = exports.reportMonthKey = exports.nextReportMonth = exports.previousReportMonth = exports.reportMonthFromDate = exports.istZeroKind = exports.ZERO_KINDS = exports.fromReceiptSummaryPayload = exports.fromCashregisterPayload = exports.receiptCompanyTaxInfo = exports.fromReceiptCompanyPayload = exports.remainingQuantities = exports.isReceiptEmailErrorCode = exports.RECEIPT_EMAIL_ERROR_CODES = exports.isPaymentErrorCode = exports.PAYMENT_ERROR_CODES = exports.toReceiptPaymentPayload = exports.fromReceiptPaymentPayload = exports.isCancellationErrorCode = exports.isCancellationReason = exports.CANCELLATION_RESERVATION_MS = exports.CANCELLATION_ERROR_CODES = exports.CANCELLATION_REASONS = exports.receiptSumCents = exports.receiptSubSumCents = exports.fromReceiptPayload = exports.toReceiptPayload = exports.voucherIsValid = exports.fromVoucherPayload = exports.toVoucherPayload = exports.isTipItem = exports.negateReceiptItem = exports.receiptItemIsValid = exports.receiptItemTotalCents = exports.fromReceiptItemPayload = exports.toReceiptItemPayload = exports.StripeLinkMode = exports.VoucherAction = exports.VoucherType = exports.CreditCardProvider = exports.KeckPaymentMethod = exports.VatRate = exports.ReceiptType = void 0;
|
|
4
|
+
exports.receiptsScopeOf = exports.cancelScopeOf = exports.verteileRabatt = exports.setMyRegisterDeviceSettings = exports.setMyKasseSettings = exports.getKasseSettings = exports.listMyArticles = exports.listMyArticleGroups = exports.fromKasseArtikelPayload = exports.fromArticleGroupPayload = exports.mergeKasseSettings = exports.KASSE_GERAET_STANDARD = exports.KASSE_BETRIEB_STANDARD = exports.toViennaWallClock = exports.parseServerTimeStamp = exports.createKasseneckApi = exports.getSignatureStatus = exports.getCashboxStatus = exports.downloadMonthlyReport = exports.downloadDailyReport = exports.sendReceiptEmail = exports.checkVoucherCombinationError = exports.listMyCashregisters = exports.listMyReceipts = exports.getFirstReceiptDate = exports.generateFullReceiptId = exports.getReceiptWithCompany = exports.getReceipt = exports.zeroReceipt = exports.createCancelReceipt = exports.cancelReceipt = exports.sellReceiptWithCompany = exports.sellReceipt = exports.isKasseneckValidationError = exports.isKasseneckNetworkError = exports.isKasseneckHttpError = exports.isKasseneckAuthError = exports.isKasseneckApiError = exports.KasseneckValidationError = exports.KasseneckNetworkError = exports.KasseneckHttpError = exports.KasseneckAuthError = exports.KasseneckApiError = exports.createBinaryTransport = exports.createTransport = exports.AUFRUFE = exports.DEFAULT_TIMEOUT_MS = exports.DEFAULT_BASE_URL = exports.registerUserAuth = void 0;
|
|
5
5
|
var index_js_1 = require("./enums/index.js");
|
|
6
6
|
Object.defineProperty(exports, "ReceiptType", { enumerable: true, get: function () { return index_js_1.ReceiptType; } });
|
|
7
7
|
Object.defineProperty(exports, "VatRate", { enumerable: true, get: function () { return index_js_1.VatRate; } });
|
|
@@ -29,6 +29,10 @@ Object.defineProperty(exports, "CANCELLATION_ERROR_CODES", { enumerable: true, g
|
|
|
29
29
|
Object.defineProperty(exports, "CANCELLATION_RESERVATION_MS", { enumerable: true, get: function () { return index_js_2.CANCELLATION_RESERVATION_MS; } });
|
|
30
30
|
Object.defineProperty(exports, "isCancellationReason", { enumerable: true, get: function () { return index_js_2.isCancellationReason; } });
|
|
31
31
|
Object.defineProperty(exports, "isCancellationErrorCode", { enumerable: true, get: function () { return index_js_2.isCancellationErrorCode; } });
|
|
32
|
+
Object.defineProperty(exports, "fromReceiptPaymentPayload", { enumerable: true, get: function () { return index_js_2.fromReceiptPaymentPayload; } });
|
|
33
|
+
Object.defineProperty(exports, "toReceiptPaymentPayload", { enumerable: true, get: function () { return index_js_2.toReceiptPaymentPayload; } });
|
|
34
|
+
Object.defineProperty(exports, "PAYMENT_ERROR_CODES", { enumerable: true, get: function () { return index_js_2.PAYMENT_ERROR_CODES; } });
|
|
35
|
+
Object.defineProperty(exports, "isPaymentErrorCode", { enumerable: true, get: function () { return index_js_2.isPaymentErrorCode; } });
|
|
32
36
|
Object.defineProperty(exports, "RECEIPT_EMAIL_ERROR_CODES", { enumerable: true, get: function () { return index_js_2.RECEIPT_EMAIL_ERROR_CODES; } });
|
|
33
37
|
Object.defineProperty(exports, "isReceiptEmailErrorCode", { enumerable: true, get: function () { return index_js_2.isReceiptEmailErrorCode; } });
|
|
34
38
|
Object.defineProperty(exports, "remainingQuantities", { enumerable: true, get: function () { return index_js_2.remainingQuantities; } });
|
|
@@ -27,8 +27,18 @@ export declare function isCancellationReason(value: unknown): value is Cancellat
|
|
|
27
27
|
*
|
|
28
28
|
* Nur Auth-/Parameterfehler (Sitzung abgelaufen, Pflichtfeld fehlt) kommen
|
|
29
29
|
* ohne Code; dort bleibt `code` undefined.
|
|
30
|
+
*
|
|
31
|
+
* Die vier `STORNO_…`-Codes am Ende gehoeren zur Rueckzahlung je Zahlung
|
|
32
|
+
* (mehrere Zahlungen je Beleg); Formfehler an `payments` selbst melden die
|
|
33
|
+
* Codes aus [PAYMENT_ERROR_CODES].
|
|
34
|
+
*
|
|
35
|
+
* Die Werte hier sind die von `/v1` und intern. Unter `/v3` heissen die
|
|
36
|
+
* Storno-Codes nach dem /v3-Vokabular anders (`already_cancelled`,
|
|
37
|
+
* `cancellation_payments_required`, functions/gemeinsam/api-vokabular-v3.js);
|
|
38
|
+
* diese Namen kommen mit der Umstellung des Pakets auf `/v3`.
|
|
39
|
+
* [isCancellationErrorCode] prueft darum exakt.
|
|
30
40
|
*/
|
|
31
|
-
export declare const CANCELLATION_ERROR_CODES: readonly ["beleg_nicht_gefunden", "belegart_nicht_stornierbar", "trainingsbeleg", "bereits_storniert", "position_ungueltig", "menge_ueber_rest", "grund_unbekannt", "anmerkung_zu_lang", "items_ungueltig", "kasse_nicht_zugewiesen", "keine_berechtigung", "nur_eigene_belege", "kasse_unvollstaendig", "storno_fehlgeschlagen"];
|
|
41
|
+
export declare const CANCELLATION_ERROR_CODES: readonly ["beleg_nicht_gefunden", "belegart_nicht_stornierbar", "trainingsbeleg", "bereits_storniert", "position_ungueltig", "menge_ueber_rest", "grund_unbekannt", "anmerkung_zu_lang", "items_ungueltig", "kasse_nicht_zugewiesen", "keine_berechtigung", "nur_eigene_belege", "kasse_unvollstaendig", "storno_fehlgeschlagen", "STORNO_PAYMENTS_REQUIRED", "STORNO_REFUND_EXCEEDS_PAYMENT", "STORNO_REFUND_REFERENCE_REQUIRED", "STORNO_REFUND_REFERENCE_UNKNOWN"];
|
|
32
42
|
export type CancellationErrorCode = (typeof CANCELLATION_ERROR_CODES)[number];
|
|
33
43
|
export declare function isCancellationErrorCode(value: unknown): value is CancellationErrorCode;
|
|
34
44
|
/** Bezug eines Storno-Belegs auf sein Original. */
|
|
@@ -33,6 +33,16 @@ function isCancellationReason(value) {
|
|
|
33
33
|
*
|
|
34
34
|
* Nur Auth-/Parameterfehler (Sitzung abgelaufen, Pflichtfeld fehlt) kommen
|
|
35
35
|
* ohne Code; dort bleibt `code` undefined.
|
|
36
|
+
*
|
|
37
|
+
* Die vier `STORNO_…`-Codes am Ende gehoeren zur Rueckzahlung je Zahlung
|
|
38
|
+
* (mehrere Zahlungen je Beleg); Formfehler an `payments` selbst melden die
|
|
39
|
+
* Codes aus [PAYMENT_ERROR_CODES].
|
|
40
|
+
*
|
|
41
|
+
* Die Werte hier sind die von `/v1` und intern. Unter `/v3` heissen die
|
|
42
|
+
* Storno-Codes nach dem /v3-Vokabular anders (`already_cancelled`,
|
|
43
|
+
* `cancellation_payments_required`, functions/gemeinsam/api-vokabular-v3.js);
|
|
44
|
+
* diese Namen kommen mit der Umstellung des Pakets auf `/v3`.
|
|
45
|
+
* [isCancellationErrorCode] prueft darum exakt.
|
|
36
46
|
*/
|
|
37
47
|
exports.CANCELLATION_ERROR_CODES = [
|
|
38
48
|
'beleg_nicht_gefunden', // Original fehlt oder gehoert nicht zu dieser Kasse
|
|
@@ -49,6 +59,11 @@ exports.CANCELLATION_ERROR_CODES = [
|
|
|
49
59
|
'nur_eigene_belege', // Recht "eigene", fremder Beleg
|
|
50
60
|
'kasse_unvollstaendig', // api_key/token fehlen am Konto bzw. an der Kasse
|
|
51
61
|
'storno_fehlgeschlagen', // der Storno-Beleg selbst wurde abgelehnt (z. B. Signatur)
|
|
62
|
+
// Mehrere Zahlungen je Beleg (Rueckzahlung je Zahlung):
|
|
63
|
+
'STORNO_PAYMENTS_REQUIRED', // Teilstorno eines Belegs mit mehreren Zahlungen ohne payments
|
|
64
|
+
'STORNO_REFUND_EXCEEDS_PAYMENT', // Rueckzahlungen auf eine Zahlung uebersteigen deren Rest
|
|
65
|
+
'STORNO_REFUND_REFERENCE_REQUIRED', // Karten-Rueckzahlung ohne refundOf einer Kartenzahlung
|
|
66
|
+
'STORNO_REFUND_REFERENCE_UNKNOWN', // refundOf nennt keine Zahlung des Originals
|
|
52
67
|
];
|
|
53
68
|
function isCancellationErrorCode(value) {
|
|
54
69
|
return typeof value === 'string' && exports.CANCELLATION_ERROR_CODES.includes(value);
|
|
@@ -2,6 +2,8 @@ export { type ReceiptItem, type ReceiptItemPayload, type ReceiptItemPayloadRead,
|
|
|
2
2
|
export { type Voucher, type VoucherPayload, toVoucherPayload, fromVoucherPayload, voucherIsValid } from './voucher.js';
|
|
3
3
|
export { type Receipt, type ReceiptPayload, type ReceiptPayloadRead, toReceiptPayload, fromReceiptPayload, receiptSubSumCents, receiptSumCents, } from './receipt.js';
|
|
4
4
|
export { type CancellationOf, type CancellationItem, type Cancellation, type CancellationReason, type CancellationErrorCode, CANCELLATION_REASONS, CANCELLATION_ERROR_CODES, CANCELLATION_RESERVATION_MS, isCancellationReason, isCancellationErrorCode, remainingQuantities, } from './cancellation.js';
|
|
5
|
+
export { type ReceiptPayment, type ReceiptPaymentPayload, type ReceiptPaymentInput, fromReceiptPaymentPayload, toReceiptPaymentPayload, } from './receipt-payment.js';
|
|
6
|
+
export { type PaymentErrorCode, PAYMENT_ERROR_CODES, isPaymentErrorCode } from './payment-errors.js';
|
|
5
7
|
export { type ReceiptEmailErrorCode, RECEIPT_EMAIL_ERROR_CODES, isReceiptEmailErrorCode, } from './receipt-email.js';
|
|
6
8
|
export { type ReceiptCompany, type ReceiptCompanyPayload, fromReceiptCompanyPayload, receiptCompanyTaxInfo, } from './receipt-company.js';
|
|
7
9
|
export { type Cashregister, type CashregisterOnboarding, type CashregisterPayload, type CashregisterOnboardingPayload, fromCashregisterPayload, } from './cashregister.js';
|
package/dist/cjs/models/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.hobexReceiptNeedsSignature = exports.hobexReceiptToCardPaymentData = exports.fromHobexReceiptPayload = exports.toHobexReceiptPayload = exports.fromStripeUrlSessionPayload = exports.toStripeUrlSessionPayload = exports.reportMonthReadable = exports.reportMonthKey = exports.nextReportMonth = exports.previousReportMonth = exports.reportMonthFromDate = exports.istZeroKind = exports.ZERO_KINDS = exports.fromReceiptSummaryPayload = exports.fromCashregisterPayload = exports.receiptCompanyTaxInfo = exports.fromReceiptCompanyPayload = exports.isReceiptEmailErrorCode = exports.RECEIPT_EMAIL_ERROR_CODES = exports.remainingQuantities = exports.isCancellationErrorCode = exports.isCancellationReason = exports.CANCELLATION_RESERVATION_MS = exports.CANCELLATION_ERROR_CODES = exports.CANCELLATION_REASONS = exports.receiptSumCents = exports.receiptSubSumCents = exports.fromReceiptPayload = exports.toReceiptPayload = exports.voucherIsValid = exports.fromVoucherPayload = exports.toVoucherPayload = exports.isDiscountItem = exports.isTipItem = exports.negateReceiptItem = exports.receiptItemIsValid = exports.receiptItemTotalCents = exports.fromReceiptItemPayload = exports.toReceiptItemPayload = void 0;
|
|
3
|
+
exports.hobexReceiptNeedsSignature = exports.hobexReceiptToCardPaymentData = exports.fromHobexReceiptPayload = exports.toHobexReceiptPayload = exports.fromStripeUrlSessionPayload = exports.toStripeUrlSessionPayload = exports.reportMonthReadable = exports.reportMonthKey = exports.nextReportMonth = exports.previousReportMonth = exports.reportMonthFromDate = exports.istZeroKind = exports.ZERO_KINDS = exports.fromReceiptSummaryPayload = exports.fromCashregisterPayload = exports.receiptCompanyTaxInfo = exports.fromReceiptCompanyPayload = exports.isReceiptEmailErrorCode = exports.RECEIPT_EMAIL_ERROR_CODES = exports.isPaymentErrorCode = exports.PAYMENT_ERROR_CODES = exports.toReceiptPaymentPayload = exports.fromReceiptPaymentPayload = exports.remainingQuantities = exports.isCancellationErrorCode = exports.isCancellationReason = exports.CANCELLATION_RESERVATION_MS = exports.CANCELLATION_ERROR_CODES = exports.CANCELLATION_REASONS = exports.receiptSumCents = exports.receiptSubSumCents = exports.fromReceiptPayload = exports.toReceiptPayload = exports.voucherIsValid = exports.fromVoucherPayload = exports.toVoucherPayload = exports.isDiscountItem = exports.isTipItem = exports.negateReceiptItem = exports.receiptItemIsValid = exports.receiptItemTotalCents = exports.fromReceiptItemPayload = exports.toReceiptItemPayload = void 0;
|
|
4
4
|
var receipt_item_js_1 = require("./receipt-item.js");
|
|
5
5
|
Object.defineProperty(exports, "toReceiptItemPayload", { enumerable: true, get: function () { return receipt_item_js_1.toReceiptItemPayload; } });
|
|
6
6
|
Object.defineProperty(exports, "fromReceiptItemPayload", { enumerable: true, get: function () { return receipt_item_js_1.fromReceiptItemPayload; } });
|
|
@@ -25,6 +25,12 @@ Object.defineProperty(exports, "CANCELLATION_RESERVATION_MS", { enumerable: true
|
|
|
25
25
|
Object.defineProperty(exports, "isCancellationReason", { enumerable: true, get: function () { return cancellation_js_1.isCancellationReason; } });
|
|
26
26
|
Object.defineProperty(exports, "isCancellationErrorCode", { enumerable: true, get: function () { return cancellation_js_1.isCancellationErrorCode; } });
|
|
27
27
|
Object.defineProperty(exports, "remainingQuantities", { enumerable: true, get: function () { return cancellation_js_1.remainingQuantities; } });
|
|
28
|
+
var receipt_payment_js_1 = require("./receipt-payment.js");
|
|
29
|
+
Object.defineProperty(exports, "fromReceiptPaymentPayload", { enumerable: true, get: function () { return receipt_payment_js_1.fromReceiptPaymentPayload; } });
|
|
30
|
+
Object.defineProperty(exports, "toReceiptPaymentPayload", { enumerable: true, get: function () { return receipt_payment_js_1.toReceiptPaymentPayload; } });
|
|
31
|
+
var payment_errors_js_1 = require("./payment-errors.js");
|
|
32
|
+
Object.defineProperty(exports, "PAYMENT_ERROR_CODES", { enumerable: true, get: function () { return payment_errors_js_1.PAYMENT_ERROR_CODES; } });
|
|
33
|
+
Object.defineProperty(exports, "isPaymentErrorCode", { enumerable: true, get: function () { return payment_errors_js_1.isPaymentErrorCode; } });
|
|
28
34
|
var receipt_email_js_1 = require("./receipt-email.js");
|
|
29
35
|
Object.defineProperty(exports, "RECEIPT_EMAIL_ERROR_CODES", { enumerable: true, get: function () { return receipt_email_js_1.RECEIPT_EMAIL_ERROR_CODES; } });
|
|
30
36
|
Object.defineProperty(exports, "isReceiptEmailErrorCode", { enumerable: true, get: function () { return receipt_email_js_1.isReceiptEmailErrorCode; } });
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mehrere Zahlungen je Beleg — Fehlercode-Katalog, Zwilling von
|
|
3
|
+
* `functions/gemeinsam/zahlungen-core.js` ZAHLUNGS_FEHLERCODES (gleiche
|
|
4
|
+
* Codes, gleiche Reihenfolge).
|
|
5
|
+
*
|
|
6
|
+
* `createReceipt` und `cancelReceipt` legen sie bei jedem Fehler rund um
|
|
7
|
+
* `payments` (und bei den Aufrufer-Vorbedingungen wie `PAYMENTS_CONFLICT`)
|
|
8
|
+
* als `code` neben die Meldung; das Paket reicht sie als
|
|
9
|
+
* [KasseneckApiError.code] durch. **Entscheide am Code, nie am Text** — die
|
|
10
|
+
* deutsche Meldung darf sich aendern, der Code nicht.
|
|
11
|
+
*
|
|
12
|
+
* Schreibweise: auf `/v1`, `/v2` und intern kommen die Codes gross
|
|
13
|
+
* (`PAYMENTS_SUM_MISMATCH`), unter `/v3` schreibt der Rand des Backends sie
|
|
14
|
+
* klein (`payments_sum_mismatch`, functions/gemeinsam/api-vokabular-v3.js:
|
|
15
|
+
* jeder dieser Codes 1:1 in Kleinschreibung, anders als die Storno-Codes).
|
|
16
|
+
* [isPaymentErrorCode] erkennt beide; wer selbst vergleicht, vergleicht
|
|
17
|
+
* `code.toUpperCase()`.
|
|
18
|
+
*/
|
|
19
|
+
export declare const PAYMENT_ERROR_CODES: readonly ["PAYMENTS_INVALID", "PAYMENT_METHOD_INVALID", "PAYMENT_AMOUNT_INVALID", "PAYMENT_TENDERED_INVALID", "PAYMENT_PROVIDER_INVALID", "PAYMENT_PROVIDER_NOT_ALLOWED", "PAYMENTS_SUM_MISMATCH", "PAYMENTS_DUE_NEGATIVE", "PAYMENTS_NOT_ALLOWED", "PAYMENTS_CONFLICT", "PAYMENTS_REQUIRED", "PAYMENT_METHOD_NOT_SUPPORTED", "TIP_PAYMENT_METHOD_INVALID", "TIP_PAYMENT_METHOD_REQUIRED", "TIP_EXCEEDS_PAYMENT", "PAYMENT_REFUND_NOT_ALLOWED", "PAYMENT_TIP_INVALID", "TIP_CONFLICT"];
|
|
20
|
+
export type PaymentErrorCode = (typeof PAYMENT_ERROR_CODES)[number];
|
|
21
|
+
/** Erkennt einen Code aus [PAYMENT_ERROR_CODES] — gross (`/v1`) wie klein (`/v3`). */
|
|
22
|
+
export declare function isPaymentErrorCode(value: unknown): value is PaymentErrorCode | Lowercase<PaymentErrorCode>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PAYMENT_ERROR_CODES = void 0;
|
|
4
|
+
exports.isPaymentErrorCode = isPaymentErrorCode;
|
|
5
|
+
/**
|
|
6
|
+
* Mehrere Zahlungen je Beleg — Fehlercode-Katalog, Zwilling von
|
|
7
|
+
* `functions/gemeinsam/zahlungen-core.js` ZAHLUNGS_FEHLERCODES (gleiche
|
|
8
|
+
* Codes, gleiche Reihenfolge).
|
|
9
|
+
*
|
|
10
|
+
* `createReceipt` und `cancelReceipt` legen sie bei jedem Fehler rund um
|
|
11
|
+
* `payments` (und bei den Aufrufer-Vorbedingungen wie `PAYMENTS_CONFLICT`)
|
|
12
|
+
* als `code` neben die Meldung; das Paket reicht sie als
|
|
13
|
+
* [KasseneckApiError.code] durch. **Entscheide am Code, nie am Text** — die
|
|
14
|
+
* deutsche Meldung darf sich aendern, der Code nicht.
|
|
15
|
+
*
|
|
16
|
+
* Schreibweise: auf `/v1`, `/v2` und intern kommen die Codes gross
|
|
17
|
+
* (`PAYMENTS_SUM_MISMATCH`), unter `/v3` schreibt der Rand des Backends sie
|
|
18
|
+
* klein (`payments_sum_mismatch`, functions/gemeinsam/api-vokabular-v3.js:
|
|
19
|
+
* jeder dieser Codes 1:1 in Kleinschreibung, anders als die Storno-Codes).
|
|
20
|
+
* [isPaymentErrorCode] erkennt beide; wer selbst vergleicht, vergleicht
|
|
21
|
+
* `code.toUpperCase()`.
|
|
22
|
+
*/
|
|
23
|
+
exports.PAYMENT_ERROR_CODES = Object.freeze([
|
|
24
|
+
'PAYMENTS_INVALID', // payments ist keine Liste oder hat mehr als 20 Eintraege
|
|
25
|
+
'PAYMENT_METHOD_INVALID', // Zahlart unbekannt oder mixed
|
|
26
|
+
'PAYMENT_AMOUNT_INVALID', // amountCents keine Ganzzahl, 0 oder falsches Vorzeichen
|
|
27
|
+
'PAYMENT_TENDERED_INVALID', // tenderedCents an Nicht-Bar-Zahlung, zu klein oder doppelt
|
|
28
|
+
'PAYMENT_PROVIDER_INVALID', // Karte ohne/mit unbekanntem provider, providerPaymentId fehlt
|
|
29
|
+
'PAYMENT_PROVIDER_NOT_ALLOWED', // Anbieterfelder an einer Zahlung, die weder Karte noch online ist
|
|
30
|
+
'PAYMENTS_SUM_MISMATCH', // Summe != Zahlbetrag (Antwort nennt data.expectedCents)
|
|
31
|
+
'PAYMENTS_DUE_NEGATIVE', // Zahlbetrag < 0 (Wertgutschein groesser als der Beleg)
|
|
32
|
+
'PAYMENTS_NOT_ALLOWED', // Null-/Startbeleg mit Zahlungen, alter Storno-Weg
|
|
33
|
+
'PAYMENTS_CONFLICT', // payments zusammen mit paymentMethod oder Kartenfeldern
|
|
34
|
+
'PAYMENTS_REQUIRED', // /v3 ohne payments
|
|
35
|
+
'PAYMENT_METHOD_NOT_SUPPORTED', // paymentMethod/Kartenfelder unter /v3
|
|
36
|
+
'TIP_PAYMENT_METHOD_INVALID', // Trinkgeld-Zahlart kommt in payments nicht vor
|
|
37
|
+
'TIP_PAYMENT_METHOD_REQUIRED', // mehrere Zahlarten, tip.paymentMethod fehlt
|
|
38
|
+
'TIP_EXCEEDS_PAYMENT', // Trinkgeld uebersteigt die Zahlungen seiner Zahlart
|
|
39
|
+
'PAYMENT_REFUND_NOT_ALLOWED', // refundOf ausserhalb eines Stornos oder kein String
|
|
40
|
+
'PAYMENT_TIP_INVALID', // tipCents keine Ganzzahl, <= 0, > amountCents oder nicht am Verkauf
|
|
41
|
+
'TIP_CONFLICT', // tip und payments[].tipCents zugleich
|
|
42
|
+
]);
|
|
43
|
+
/** Erkennt einen Code aus [PAYMENT_ERROR_CODES] — gross (`/v1`) wie klein (`/v3`). */
|
|
44
|
+
function isPaymentErrorCode(value) {
|
|
45
|
+
return typeof value === 'string' && exports.PAYMENT_ERROR_CODES.includes(value.toUpperCase());
|
|
46
|
+
}
|