@kreiseck/kasseneck-api 0.29.0 → 0.31.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 +174 -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/kasse/index.d.ts +1 -1
- package/dist/cjs/kasse/index.js +5 -1
- package/dist/cjs/kasse/settings.d.ts +4 -2
- package/dist/cjs/kasse/settings.js +5 -2
- package/dist/cjs/kasse/texte.d.ts +444 -34
- package/dist/cjs/kasse/texte.js +265 -35
- package/dist/cjs/models/cancellation.d.ts +25 -2
- package/dist/cjs/models/cancellation.js +20 -1
- 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 +86 -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 +19 -0
- package/dist/cjs/payments/hobex-hps/transaction-response.js +28 -28
- 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/kasse/index.d.ts +1 -1
- package/dist/esm/kasse/index.js +1 -1
- package/dist/esm/kasse/settings.d.ts +4 -2
- package/dist/esm/kasse/settings.js +5 -2
- package/dist/esm/kasse/texte.d.ts +444 -34
- package/dist/esm/kasse/texte.js +262 -34
- package/dist/esm/models/cancellation.d.ts +25 -2
- package/dist/esm/models/cancellation.js +20 -1
- 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 +86 -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 +19 -0
- package/dist/esm/payments/hobex-hps/transaction-response.js +28 -28
- 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 +29 -29
- package/fixtures/kasse-settings-standard.json +4 -2
- package/fixtures/kasse-texte.json +479 -35
- package/fixtures/manifest.json +72 -0
- package/fixtures/oberflaeche.json +3 -2
- package/fixtures/rechnung-api.schema.json +1 -1
- package/fixtures/rechnung-texte.json +1 -1
- package/package.json +1 -1
|
@@ -50,6 +50,22 @@ function createReceiptParams(options) {
|
|
|
50
50
|
if (items != null && items.length > 0) {
|
|
51
51
|
params['items'] = alsNutzlast(items, toReceiptItemPayload);
|
|
52
52
|
}
|
|
53
|
+
// `payments: null` gilt wie im Backend (zahlungs-eingang.js) als nicht angegeben.
|
|
54
|
+
if (options.payments != null) {
|
|
55
|
+
// Der alte Storno-Weg und der Null-/Startbeleg nehmen keine Zahlungsliste
|
|
56
|
+
// (Backend: PAYMENTS_NOT_ALLOWED); ein Storno mit mehreren Zahlungen
|
|
57
|
+
// laeuft ueber cancelReceipt.
|
|
58
|
+
if (typ.value === ReceiptType.cancellation.value) {
|
|
59
|
+
throw eingabefehler('payments am Storno gehen nur ueber cancelReceipt.');
|
|
60
|
+
}
|
|
61
|
+
if (typ.value !== ReceiptType.standard.value && typ.value !== ReceiptType.training.value) {
|
|
62
|
+
throw eingabefehler(`payments sind bei receiptType "${typ.value}" nicht erlaubt.`);
|
|
63
|
+
}
|
|
64
|
+
const konflikt = zahlungsKonflikt(options);
|
|
65
|
+
if (konflikt != null)
|
|
66
|
+
throw eingabefehler(konflikt);
|
|
67
|
+
params['payments'] = gepruefteZahlungen(options.payments, false, 'createReceipt');
|
|
68
|
+
}
|
|
53
69
|
// Vom Aufrufer kommt sie geprueft, vom Server roh — siehe die beiden Felder
|
|
54
70
|
// in [CreateReceiptOptions]. Die Typpruefung allein reicht dafuer nicht: ein
|
|
55
71
|
// Verbraucher ohne Typen faellt durch dieses Netz, und ein Tippfehler in der
|
|
@@ -133,11 +149,15 @@ export async function cancelReceipt(rufen, options) {
|
|
|
133
149
|
if (options.note !== undefined && options.note.length > NOTE_MAX) {
|
|
134
150
|
throw new KasseneckValidationError('cancelReceipt', `Anmerkung ist zu lang (hoechstens ${NOTE_MAX} Zeichen)`, 'request');
|
|
135
151
|
}
|
|
152
|
+
// `payments: null` gilt wie im Backend als nicht angegeben.
|
|
153
|
+
const zahlungen = options.payments != null ? gepruefteStornoZahlungen(options) : undefined;
|
|
136
154
|
const params = { cashregisterId, originalReceiptId, reason: options.reason };
|
|
137
155
|
if (options.items !== undefined)
|
|
138
156
|
params.items = options.items.map((p) => ({ index: p.index, quantity: p.quantity }));
|
|
139
157
|
if (options.note !== undefined && options.note !== '')
|
|
140
158
|
params.note = options.note;
|
|
159
|
+
if (zahlungen !== undefined)
|
|
160
|
+
params.payments = zahlungen;
|
|
141
161
|
if (options.paymentMethod != null)
|
|
142
162
|
params.paymentMethod = gepruefteZahlungsart(options.paymentMethod);
|
|
143
163
|
const karte = options.creditCardProvider != null || options.cardPaymentId != null || options.cardPaymentData != null;
|
|
@@ -491,15 +511,110 @@ function gepruefterTip(tip) {
|
|
|
491
511
|
}
|
|
492
512
|
return nutzlast;
|
|
493
513
|
}
|
|
494
|
-
/**
|
|
514
|
+
/**
|
|
515
|
+
* Zahlungsart des Aufrufers pruefen — unbekannt wirft, bevor etwas rausgeht.
|
|
516
|
+
* `mixed` wirft ebenfalls: den Wert vergibt nur der Server (Beleg mit
|
|
517
|
+
* mehreren Zahlarten); gesendet wird stattdessen die Zahlungsliste.
|
|
518
|
+
*/
|
|
495
519
|
function gepruefteZahlungsart(wert) {
|
|
496
|
-
|
|
497
|
-
|
|
520
|
+
let zahlungsart;
|
|
521
|
+
if (typeof wert === 'object' && wert !== null) {
|
|
522
|
+
zahlungsart = wert.value;
|
|
523
|
+
}
|
|
524
|
+
else {
|
|
525
|
+
if (typeof wert !== 'string' || !Object.prototype.hasOwnProperty.call(KeckPaymentMethod, wert)) {
|
|
526
|
+
throw eingabefehler(`Zahlungsart: unbekannter Schluessel "${String(wert)}"`);
|
|
527
|
+
}
|
|
528
|
+
zahlungsart = KeckPaymentMethod[wert].value;
|
|
498
529
|
}
|
|
499
|
-
if (
|
|
500
|
-
throw eingabefehler(
|
|
530
|
+
if (zahlungsart === KeckPaymentMethod.mixed.value) {
|
|
531
|
+
throw eingabefehler('Zahlungsart "mixed" vergibt nur der Server – mehrere Zahlarten gehen als payments hinaus.');
|
|
501
532
|
}
|
|
502
|
-
return
|
|
533
|
+
return zahlungsart;
|
|
534
|
+
}
|
|
535
|
+
/** Hoechstzahl der Zahlungen je Beleg (Backend: MAX_ZAHLUNGEN). */
|
|
536
|
+
const MAX_ZAHLUNGEN = 20;
|
|
537
|
+
/**
|
|
538
|
+
* `payments` neben einer Einzel-Zahlungsart oder Kartenfeldern? Liefert den
|
|
539
|
+
* Grund (Backend: PAYMENTS_CONFLICT), sonst null. Nie still eines bevorzugen.
|
|
540
|
+
*/
|
|
541
|
+
function zahlungsKonflikt(options) {
|
|
542
|
+
for (const feld of ['paymentMethod', 'paymentMethodFromServer', 'creditCardProvider', 'cardPaymentId', 'cardPaymentData']) {
|
|
543
|
+
if (options[feld] != null) {
|
|
544
|
+
return `payments und ${feld} duerfen nicht gemeinsam gesendet werden – Kartenangaben gehoeren in die Zahlung.`;
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
return null;
|
|
548
|
+
}
|
|
549
|
+
/**
|
|
550
|
+
* Zahlungsliste pruefen und in Nutzlast-Form bringen — Formpruefung wie
|
|
551
|
+
* `pruefeZahlungen` im Backend, soweit sie ohne Beleg und Zahlbetrag geht
|
|
552
|
+
* (Summe, Anbieter-Pflicht und Trinkgeld prueft der Server). Wirft, bevor
|
|
553
|
+
* etwas hinausgeht.
|
|
554
|
+
*/
|
|
555
|
+
function gepruefteZahlungen(roh, storno, functionName) {
|
|
556
|
+
const fehler = (grund) => new KasseneckValidationError(functionName, grund, 'request');
|
|
557
|
+
if (!Array.isArray(roh))
|
|
558
|
+
throw fehler('payments muss eine Liste sein.');
|
|
559
|
+
if (roh.length > MAX_ZAHLUNGEN)
|
|
560
|
+
throw fehler(`payments: es sind hoechstens ${MAX_ZAHLUNGEN} Eintraege erlaubt.`);
|
|
561
|
+
return roh.map((eintrag, i) => {
|
|
562
|
+
const nr = i + 1;
|
|
563
|
+
if (eintrag == null || typeof eintrag !== 'object' || Array.isArray(eintrag)) {
|
|
564
|
+
throw fehler(`Zahlung ${nr}: kein gueltiges Objekt.`);
|
|
565
|
+
}
|
|
566
|
+
const z = eintrag;
|
|
567
|
+
const method = gepruefteZahlungsart(z['method']);
|
|
568
|
+
const betrag = z['amountCents'];
|
|
569
|
+
if (typeof betrag !== 'number' || !Number.isInteger(betrag) || (storno ? betrag >= 0 : betrag <= 0)) {
|
|
570
|
+
throw fehler(`Zahlung ${nr}: amountCents muss eine ganze Zahl ${storno ? 'kleiner' : 'groesser'} als 0 sein.`);
|
|
571
|
+
}
|
|
572
|
+
const aus = { method, amountCents: betrag };
|
|
573
|
+
if (z['tenderedCents'] !== undefined) {
|
|
574
|
+
const gegeben = z['tenderedCents'];
|
|
575
|
+
if (storno || typeof gegeben !== 'number' || !Number.isInteger(gegeben) || gegeben < betrag) {
|
|
576
|
+
throw fehler(`Zahlung ${nr}: tenderedCents muss eine ganze Zahl von mindestens amountCents sein (nur am Verkauf).`);
|
|
577
|
+
}
|
|
578
|
+
aus['tenderedCents'] = gegeben;
|
|
579
|
+
}
|
|
580
|
+
if (z['tipCents'] !== undefined) {
|
|
581
|
+
const trinkgeld = z['tipCents'];
|
|
582
|
+
if (typeof trinkgeld !== 'number' || !Number.isInteger(trinkgeld) || trinkgeld <= 0) {
|
|
583
|
+
throw fehler(`Zahlung ${nr}: tipCents muss eine ganze Zahl groesser als 0 sein.`);
|
|
584
|
+
}
|
|
585
|
+
aus['tipCents'] = trinkgeld;
|
|
586
|
+
}
|
|
587
|
+
if (z['provider'] !== undefined) {
|
|
588
|
+
aus['provider'] = kartenanbieter(String(z['provider']));
|
|
589
|
+
}
|
|
590
|
+
if (z['providerPaymentId'] !== undefined) {
|
|
591
|
+
if (typeof z['providerPaymentId'] !== 'string' || z['providerPaymentId'] === '') {
|
|
592
|
+
throw fehler(`Zahlung ${nr}: providerPaymentId muss ein nicht-leerer Text sein.`);
|
|
593
|
+
}
|
|
594
|
+
aus['providerPaymentId'] = z['providerPaymentId'];
|
|
595
|
+
}
|
|
596
|
+
if (z['providerData'] !== undefined) {
|
|
597
|
+
const daten = z['providerData'];
|
|
598
|
+
if (daten === null || typeof daten !== 'object' || Array.isArray(daten)) {
|
|
599
|
+
throw fehler(`Zahlung ${nr}: providerData muss ein Objekt sein.`);
|
|
600
|
+
}
|
|
601
|
+
aus['providerData'] = daten;
|
|
602
|
+
}
|
|
603
|
+
if (z['refundOf'] !== undefined) {
|
|
604
|
+
if (!storno || typeof z['refundOf'] !== 'string' || z['refundOf'] === '') {
|
|
605
|
+
throw fehler(`Zahlung ${nr}: refundOf gibt es nur am Storno, als id der Originalzahlung.`);
|
|
606
|
+
}
|
|
607
|
+
aus['refundOf'] = z['refundOf'];
|
|
608
|
+
}
|
|
609
|
+
return aus;
|
|
610
|
+
});
|
|
611
|
+
}
|
|
612
|
+
/** `payments` am Storno: Konflikt mit Zahlungsart/Kartenfeldern, dann Form. */
|
|
613
|
+
function gepruefteStornoZahlungen(options) {
|
|
614
|
+
const konflikt = zahlungsKonflikt(options);
|
|
615
|
+
if (konflikt != null)
|
|
616
|
+
throw new KasseneckValidationError('cancelReceipt', konflikt, 'request');
|
|
617
|
+
return gepruefteZahlungen(options.payments, true, 'cancelReceipt');
|
|
503
618
|
}
|
|
504
619
|
/** Kartenanbieter pruefen — er stammt vom Aufrufer, nicht aus Serverdaten. */
|
|
505
620
|
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];
|
|
@@ -6,6 +6,11 @@ import { defineEnum } from './define-enum.js';
|
|
|
6
6
|
* `label` ist das deutsche Anzeige-Label fuer die Zahlungsart-Zeile auf dem Beleg.
|
|
7
7
|
* Muss 1:1 mit dem Backend-Mapping `paymentMethodToString` (functions/helper.js)
|
|
8
8
|
* uebereinstimmen.
|
|
9
|
+
*
|
|
10
|
+
* `mixed` vergibt nur der Server: ein Beleg mit mehreren Zahlungen
|
|
11
|
+
* verschiedener Zahlart (`payments`) traegt ihn als Einzelfeld
|
|
12
|
+
* `paymentMethod`. Lesen ist erlaubt, Senden nicht — wer mehrere Zahlarten
|
|
13
|
+
* kassiert, schickt die Zahlungsliste, nie `mixed`.
|
|
9
14
|
*/
|
|
10
15
|
export const KeckPaymentMethod = defineEnum({
|
|
11
16
|
cash: { value: 'cash', needsCreditCard: false, label: 'Barzahlung' },
|
|
@@ -17,4 +22,5 @@ export const KeckPaymentMethod = defineEnum({
|
|
|
17
22
|
boltApp: { value: 'boltApp', needsCreditCard: false, label: 'Bolt App' },
|
|
18
23
|
boltCash: { value: 'boltCash', needsCreditCard: false, label: 'Bolt Cash' },
|
|
19
24
|
boltCard: { value: 'boltCard', needsCreditCard: true, label: 'Bolt Card' },
|
|
25
|
+
mixed: { value: 'mixed', needsCreditCard: false, label: 'Mehrere Zahlungsarten' },
|
|
20
26
|
});
|
package/dist/esm/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/esm/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { ReceiptType, VatRate, KeckPaymentMethod, CreditCardProvider, VoucherType, VoucherAction, StripeLinkMode, } from './enums/index.js';
|
|
2
|
-
export { toReceiptItemPayload, fromReceiptItemPayload, receiptItemTotalCents, receiptItemIsValid, negateReceiptItem, isTipItem, toVoucherPayload, fromVoucherPayload, voucherIsValid, toReceiptPayload, fromReceiptPayload, receiptSubSumCents, receiptSumCents, CANCELLATION_REASONS, CANCELLATION_ERROR_CODES, CANCELLATION_RESERVATION_MS, isCancellationReason, isCancellationErrorCode, RECEIPT_EMAIL_ERROR_CODES, isReceiptEmailErrorCode, remainingQuantities, fromReceiptCompanyPayload, receiptCompanyTaxInfo, fromCashregisterPayload, fromReceiptSummaryPayload, ZERO_KINDS, istZeroKind, reportMonthFromDate, previousReportMonth, nextReportMonth, reportMonthKey, reportMonthReadable, toStripeUrlSessionPayload, fromStripeUrlSessionPayload, toHobexReceiptPayload, fromHobexReceiptPayload, hobexReceiptToCardPaymentData, hobexReceiptNeedsSignature, } from './models/index.js';
|
|
2
|
+
export { toReceiptItemPayload, fromReceiptItemPayload, receiptItemTotalCents, receiptItemIsValid, negateReceiptItem, isTipItem, toVoucherPayload, fromVoucherPayload, voucherIsValid, toReceiptPayload, fromReceiptPayload, receiptSubSumCents, receiptSumCents, CANCELLATION_REASONS, CANCELLATION_ERROR_CODES, CANCELLATION_RESERVATION_MS, isCancellationReason, isCancellationErrorCode, fromReceiptPaymentPayload, toReceiptPaymentPayload, PAYMENT_ERROR_CODES, isPaymentErrorCode, RECEIPT_EMAIL_ERROR_CODES, isReceiptEmailErrorCode, remainingQuantities, fromReceiptCompanyPayload, receiptCompanyTaxInfo, fromCashregisterPayload, fromReceiptSummaryPayload, ZERO_KINDS, istZeroKind, reportMonthFromDate, previousReportMonth, nextReportMonth, reportMonthKey, reportMonthReadable, toStripeUrlSessionPayload, fromStripeUrlSessionPayload, toHobexReceiptPayload, fromHobexReceiptPayload, hobexReceiptToCardPaymentData, hobexReceiptNeedsSignature, } from './models/index.js';
|
|
3
3
|
export { apiKeyAuth, registerUserAuth, DEFAULT_BASE_URL, DEFAULT_TIMEOUT_MS, AUFRUFE, createTransport, createBinaryTransport, KasseneckApiError, KasseneckAuthError, KasseneckHttpError, KasseneckNetworkError, KasseneckValidationError, isKasseneckApiError, isKasseneckAuthError, isKasseneckHttpError, isKasseneckNetworkError, isKasseneckValidationError, sellReceipt, sellReceiptWithCompany, cancelReceipt, createCancelReceipt, zeroReceipt, getReceipt, getReceiptWithCompany, generateFullReceiptId, getFirstReceiptDate, listMyReceipts, listMyCashregisters, checkVoucherCombinationError, sendReceiptEmail, downloadDailyReport, downloadMonthlyReport, getCashboxStatus, getSignatureStatus, createKasseneckApi, } from './client/index.js';
|
|
4
4
|
export { parseServerTimeStamp, toViennaWallClock } from './vienna-time.js';
|
|
5
5
|
export { KASSE_BETRIEB_STANDARD, KASSE_GERAET_STANDARD, mergeKasseSettings, fromArticleGroupPayload, fromKasseArtikelPayload, listMyArticleGroups, listMyArticles, getKasseSettings, setMyKasseSettings, setMyRegisterDeviceSettings, verteileRabatt, cancelScopeOf, receiptsScopeOf, } from './kasse/index.js';
|
|
@@ -10,4 +10,4 @@ export { verteileRabatt } from '../receipt/discount.js';
|
|
|
10
10
|
export { cancelScopeOf, receiptsScopeOf, type RegisterScope, type RegisterUserPerms } from '../register/pairing.js';
|
|
11
11
|
export { type NetzDrucker, type DruckJob, type DruckJobStatus, type CreatePrintJobOptions, listMyPrinters, createPrintJob, getPrintJob } from './drucker.js';
|
|
12
12
|
export { listMyTipRecipients } from './trinkgeld.js';
|
|
13
|
-
export { MELDUNGEN, FEHLERREGELN, meldung, meldungGiltFuer, BELEG_MAIL_FEHLER, belegMailFehler, type Meldung, type MeldungsSchluessel, type Fehlerart, type Seite, type BelegMailFehlercode, } from './texte.js';
|
|
13
|
+
export { MELDUNGEN, FEHLERREGELN, meldung, meldungGiltFuer, BELEG_MAIL_FEHLER, belegMailFehler, STORNO_ZAHLUNG_FEHLER, stornoZahlungFehler, BESCHRIFTUNGEN, beschriftung, type Meldung, type MeldungsSchluessel, type Fehlerart, type Seite, type BelegMailFehlercode, type StornoZahlungFehlercode, type BeschriftungsSchluessel, } from './texte.js';
|
package/dist/esm/kasse/index.js
CHANGED
|
@@ -15,4 +15,4 @@ export { cancelScopeOf, receiptsScopeOf } from '../register/pairing.js';
|
|
|
15
15
|
export { listMyPrinters, createPrintJob, getPrintJob } from './drucker.js';
|
|
16
16
|
export { listMyTipRecipients } from './trinkgeld.js';
|
|
17
17
|
// Was die Kasse selbst sagt — ein Katalog fuer Browser-Kasse und App.
|
|
18
|
-
export { MELDUNGEN, FEHLERREGELN, meldung, meldungGiltFuer, BELEG_MAIL_FEHLER, belegMailFehler, } from './texte.js';
|
|
18
|
+
export { MELDUNGEN, FEHLERREGELN, meldung, meldungGiltFuer, BELEG_MAIL_FEHLER, belegMailFehler, STORNO_ZAHLUNG_FEHLER, stornoZahlungFehler, BESCHRIFTUNGEN, beschriftung, } from './texte.js';
|
|
@@ -156,6 +156,8 @@ export interface KasseSettingsBetrieb {
|
|
|
156
156
|
rueckgeld: boolean;
|
|
157
157
|
schnellbar: boolean;
|
|
158
158
|
kassierenModus: KasseKassierenModus;
|
|
159
|
+
/** Getrennt zahlen: dritter Knopf neben Bar und Karte, ein Beleg mit mehreren Zahlungen. */
|
|
160
|
+
zahlGetrennt: boolean;
|
|
159
161
|
/** Trinkgeld-Chips in Prozent (eine Nachkommastelle, max 5, eindeutig, Reihenfolge des Chefs). */
|
|
160
162
|
tgChips: number[];
|
|
161
163
|
/** Rabatt-Chips in Prozent — dieselben Regeln wie tgChips, vom Chef einstellbar. */
|
|
@@ -168,10 +170,10 @@ export interface KasseSettingsBetrieb {
|
|
|
168
170
|
hinweise: boolean;
|
|
169
171
|
}
|
|
170
172
|
/** Aktionen der Kasse, die eine Taste bekommen koennen. */
|
|
171
|
-
export declare const KASSE_TASTEN_AKTIONEN: readonly ["kassieren", "abschliessen", "abbrechen", "frei", "bar", "karte", "passend", "belege", "letzteZurueck", "einstellungen", "abmelden", "trinkgeld", "vollbild", "gegebenLeeren", "korbLeeren"];
|
|
173
|
+
export declare const KASSE_TASTEN_AKTIONEN: readonly ["kassieren", "abschliessen", "abbrechen", "frei", "bar", "karte", "passend", "belege", "letzteZurueck", "einstellungen", "abmelden", "trinkgeld", "vollbild", "gegebenLeeren", "korbLeeren", "getrennt"];
|
|
172
174
|
export type KasseTastenAktion = typeof KASSE_TASTEN_AKTIONEN[number];
|
|
173
175
|
/** Kurzer Name, damit alle Enum-Listen gleich heissen; der alte bleibt gueltig. */
|
|
174
|
-
export declare const TASTEN_AKTIONEN: readonly ["kassieren", "abschliessen", "abbrechen", "frei", "bar", "karte", "passend", "belege", "letzteZurueck", "einstellungen", "abmelden", "trinkgeld", "vollbild", "gegebenLeeren", "korbLeeren"];
|
|
176
|
+
export declare const TASTEN_AKTIONEN: readonly ["kassieren", "abschliessen", "abbrechen", "frei", "bar", "karte", "passend", "belege", "letzteZurueck", "einstellungen", "abmelden", "trinkgeld", "vollbild", "gegebenLeeren", "korbLeeren", "getrennt"];
|
|
175
177
|
/** Tastenkarte: Aktion -> Tasten (`Mod+F`, `Enter`, `Escape`, `F5` ...; `Mod` = ⌘ auf dem Mac, Strg sonst). */
|
|
176
178
|
export type KasseTastenkarte = Record<KasseTastenAktion, string[]>;
|
|
177
179
|
export declare const KASSE_TASTEN_STANDARD: Readonly<KasseTastenkarte>;
|
|
@@ -88,7 +88,7 @@ export const WZ_SKALA = ['S', 'M', 'L', 'XL'];
|
|
|
88
88
|
/** Wie lange die Fertig-Seite stehen bleibt, in Sekunden; 0 = bis zum Tippen. */
|
|
89
89
|
export const FERTIG_SEKUNDEN = [0, 3, 5, 10, 15, 30, 60];
|
|
90
90
|
/** Aktionen der Kasse, die eine Taste bekommen koennen. */
|
|
91
|
-
export const KASSE_TASTEN_AKTIONEN = ['kassieren', 'abschliessen', 'abbrechen', 'frei', 'bar', 'karte', 'passend', 'belege', 'letzteZurueck', 'einstellungen', 'abmelden', 'trinkgeld', 'vollbild', 'gegebenLeeren', 'korbLeeren'];
|
|
91
|
+
export const KASSE_TASTEN_AKTIONEN = ['kassieren', 'abschliessen', 'abbrechen', 'frei', 'bar', 'karte', 'passend', 'belege', 'letzteZurueck', 'einstellungen', 'abmelden', 'trinkgeld', 'vollbild', 'gegebenLeeren', 'korbLeeren', 'getrennt'];
|
|
92
92
|
/** Kurzer Name, damit alle Enum-Listen gleich heissen; der alte bleibt gueltig. */
|
|
93
93
|
export const TASTEN_AKTIONEN = KASSE_TASTEN_AKTIONEN;
|
|
94
94
|
export const KASSE_TASTEN_STANDARD = Object.freeze({
|
|
@@ -110,6 +110,9 @@ export const KASSE_TASTEN_STANDARD = Object.freeze({
|
|
|
110
110
|
// verschiedenen Momenten (Korb vor dem Kassieren, Gegeben-Feld darin) —
|
|
111
111
|
// der Verteiler laesst die nicht zustaendige Aktion durchfallen.
|
|
112
112
|
korbLeeren: ['Mod+C'],
|
|
113
|
+
// Bewusst ohne Vorgabe: jede freie Mod-Taste ist in irgendeinem Browser
|
|
114
|
+
// belegt oder am Geraet unerprobt. Der Chef vergibt sie, wenn er sie braucht.
|
|
115
|
+
getrennt: [],
|
|
113
116
|
});
|
|
114
117
|
export const KASSE_BETRIEB_STANDARD = Object.freeze({
|
|
115
118
|
// Das Petrol der Marke: die Aktionsfarbe des Design-Systems (Rolle `brand`).
|
|
@@ -124,7 +127,7 @@ export const KASSE_BETRIEB_STANDARD = Object.freeze({
|
|
|
124
127
|
menge: 'x', notiz: false, suche: false, rabatt: 'aus',
|
|
125
128
|
zahlBar: true, zahlKarte: false, kartenanbieter: 'keiner', trinkgeld: false, tgModus: 'beides',
|
|
126
129
|
tgStufen: { 5: true, 10: true, 15: false, 20: false }, tgChips: [5, 10], tgSplit: true, rueckgeld: true,
|
|
127
|
-
schnellbar: false, kassierenModus: '
|
|
130
|
+
schnellbar: false, kassierenModus: 'panel', zahlGetrennt: false,
|
|
128
131
|
// 'fragen' = Fertig-Seite bietet QR und Bon an — sicherster Standard.
|
|
129
132
|
logoBild: '', wzSeite: 'mitte', wzPos: 50, wzPosV: 50, wzStaerke: 6, logoSkala: 'M', wzSkala: 'M',
|
|
130
133
|
glas: true, hinweise: true,
|