@kreiseck/kasseneck-api 0.28.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 +79 -0
- package/README.md +41 -5
- 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/partner/fehler.d.ts +28 -2
- package/dist/cjs/partner/fehler.js +55 -11
- package/dist/cjs/partner/index.d.ts +1 -1
- package/dist/cjs/partner/typen.d.ts +9 -2
- 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/partner/fehler.d.ts +28 -2
- package/dist/esm/partner/fehler.js +55 -11
- package/dist/esm/partner/index.d.ts +1 -1
- package/dist/esm/partner/typen.d.ts +9 -2
- 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 +12 -6
- package/fixtures/rechnung-api.schema.json +1 -1
- package/fixtures/rechnung-texte.json +1 -1
- package/package.json +1 -1
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { KeckPaymentMethod, type KeckPaymentMethodKey, CreditCardProvider } from '../enums/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Eine Zahlung am Beleg — Zwilling der Eintraege in `payments`, wie
|
|
4
|
+
* `functions/gemeinsam/zahlungen-core.js` (`pruefeZahlungen`) sie normalisiert
|
|
5
|
+
* und ablegt.
|
|
6
|
+
*
|
|
7
|
+
* Ein Beleg kann ueber mehrere Zahlungen bezahlt sein (zwei Karten, Rest bar).
|
|
8
|
+
* Dann steht die Liste unter `payments`, und das Einzelfeld `paymentMethod`
|
|
9
|
+
* ist `mixed`, sobald verschiedene Zahlarten vorkommen (zwei Karten ergeben
|
|
10
|
+
* `creditCard`). Altbelege haben keine Liste; dort gilt weiter
|
|
11
|
+
* `paymentMethod` samt Kartenfeldern.
|
|
12
|
+
*
|
|
13
|
+
* Betraege in ganzen Cent: am Verkauf positiv, am Storno negativ (Rueckzahlung).
|
|
14
|
+
* `method`/`provider` sind beim Lesen wie ueberall entweder der bekannte
|
|
15
|
+
* Enum-Eintrag oder der rohe Schluessel (siehe `enum-payload.ts`).
|
|
16
|
+
*/
|
|
17
|
+
export interface ReceiptPayment {
|
|
18
|
+
/** Vom Server vergeben (`p1`, `p2`, …); Bezugspunkt fuer `refundOf`. */
|
|
19
|
+
id?: string;
|
|
20
|
+
method: KeckPaymentMethod | string;
|
|
21
|
+
amountCents: number;
|
|
22
|
+
/** Nur bei Barzahlung: gegebener Betrag. */
|
|
23
|
+
tenderedCents?: number;
|
|
24
|
+
/** Nur neben `tenderedCents`: Rueckgeld (vom Server gerechnet). */
|
|
25
|
+
changeCents?: number;
|
|
26
|
+
/** Kartenanbieter bzw. Terminal. */
|
|
27
|
+
provider?: CreditCardProvider | string;
|
|
28
|
+
/** Kennung der Zahlung am Terminal/Anbieter. */
|
|
29
|
+
providerPaymentId?: string;
|
|
30
|
+
/** Terminaldaten fuer den Kartenblock (frueher `cardPaymentData`). */
|
|
31
|
+
providerData?: Record<string, unknown>;
|
|
32
|
+
/** Nur am Storno: `id` der Originalzahlung, die erstattet wird. */
|
|
33
|
+
refundOf?: string;
|
|
34
|
+
/**
|
|
35
|
+
* Trinkgeld, das mit dieser Zahlung gegeben wurde, in ganzen Cent — TEIL
|
|
36
|
+
* von `amountCents` (das Terminal bucht Betrag + Trinkgeld zusammen). Nur
|
|
37
|
+
* an Verkaufs-/Trainingsbelegen.
|
|
38
|
+
*/
|
|
39
|
+
tipCents?: number;
|
|
40
|
+
}
|
|
41
|
+
/** Nutzlast-Form einer Zahlung (Backend-Dokument bzw. Antwort). */
|
|
42
|
+
export interface ReceiptPaymentPayload {
|
|
43
|
+
id?: string;
|
|
44
|
+
method: string;
|
|
45
|
+
amountCents: number;
|
|
46
|
+
tenderedCents?: number;
|
|
47
|
+
changeCents?: number;
|
|
48
|
+
provider?: string;
|
|
49
|
+
providerPaymentId?: string;
|
|
50
|
+
providerData?: Record<string, unknown>;
|
|
51
|
+
refundOf?: string;
|
|
52
|
+
tipCents?: number;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Eine Zahlung, wie der Aufrufer sie an `createReceipt`/`sellReceipt`/
|
|
56
|
+
* `cancelReceipt` schickt. `id` und `changeCents` vergibt der Server.
|
|
57
|
+
*
|
|
58
|
+
* - `method`: jede Zahlungsart ausser `mixed`.
|
|
59
|
+
* - `amountCents`: ganze Cent, am Verkauf > 0, am Storno < 0.
|
|
60
|
+
* - `tenderedCents`: nur bei Barzahlung am Verkauf, hoechstens an einer Zahlung.
|
|
61
|
+
* - `provider`/`providerPaymentId`/`providerData`: bei Karten Pflicht
|
|
62
|
+
* (`providerPaymentId` ausser bei `custom`), bei `online` optional, sonst
|
|
63
|
+
* nicht erlaubt; am Storno beschreiben sie die Erstattung und sind optional.
|
|
64
|
+
* - `refundOf`: nur am Storno.
|
|
65
|
+
* - `tipCents`: Trinkgeld dieser Zahlung, ganze Cent > 0, Teil von
|
|
66
|
+
* `amountCents`; nur am Verkauf, nie neben `tip` (den Rest prueft der Server).
|
|
67
|
+
*/
|
|
68
|
+
export interface ReceiptPaymentInput {
|
|
69
|
+
method: KeckPaymentMethod | KeckPaymentMethodKey;
|
|
70
|
+
amountCents: number;
|
|
71
|
+
tenderedCents?: number;
|
|
72
|
+
provider?: CreditCardProvider;
|
|
73
|
+
providerPaymentId?: string;
|
|
74
|
+
providerData?: Record<string, unknown>;
|
|
75
|
+
refundOf?: string;
|
|
76
|
+
tipCents?: number;
|
|
77
|
+
}
|
|
78
|
+
/** Lesepfad: nur vorhandene Felder uebernehmen, nichts ergaenzen. */
|
|
79
|
+
export declare function fromReceiptPaymentPayload(payload: ReceiptPaymentPayload): ReceiptPayment;
|
|
80
|
+
/**
|
|
81
|
+
* Schreibpfad: Zahlungen zurueck in die Nutzlast — streng wie
|
|
82
|
+
* `toReceiptPayload`: ein roher, unbekannter Schluessel bei `method` oder
|
|
83
|
+
* `provider` wirft.
|
|
84
|
+
*/
|
|
85
|
+
export declare function toReceiptPaymentPayload(payment: ReceiptPayment): ReceiptPaymentPayload;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fromReceiptPaymentPayload = fromReceiptPaymentPayload;
|
|
4
|
+
exports.toReceiptPaymentPayload = toReceiptPaymentPayload;
|
|
5
|
+
const index_js_1 = require("../enums/index.js");
|
|
6
|
+
const enum_payload_js_1 = require("./enum-payload.js");
|
|
7
|
+
/** Lesepfad: nur vorhandene Felder uebernehmen, nichts ergaenzen. */
|
|
8
|
+
function fromReceiptPaymentPayload(payload) {
|
|
9
|
+
return {
|
|
10
|
+
...(typeof payload.id === 'string' ? { id: payload.id } : {}),
|
|
11
|
+
method: (0, enum_payload_js_1.readEnumKey)(index_js_1.KeckPaymentMethod, payload.method),
|
|
12
|
+
amountCents: payload.amountCents,
|
|
13
|
+
...(typeof payload.tenderedCents === 'number' ? { tenderedCents: payload.tenderedCents } : {}),
|
|
14
|
+
...(typeof payload.changeCents === 'number' ? { changeCents: payload.changeCents } : {}),
|
|
15
|
+
...(typeof payload.provider === 'string' ? { provider: (0, enum_payload_js_1.readEnumKey)(index_js_1.CreditCardProvider, payload.provider) } : {}),
|
|
16
|
+
...(typeof payload.providerPaymentId === 'string' ? { providerPaymentId: payload.providerPaymentId } : {}),
|
|
17
|
+
...(payload.providerData != null && typeof payload.providerData === 'object' ? { providerData: payload.providerData } : {}),
|
|
18
|
+
...(typeof payload.refundOf === 'string' ? { refundOf: payload.refundOf } : {}),
|
|
19
|
+
...(typeof payload.tipCents === 'number' ? { tipCents: payload.tipCents } : {}),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Schreibpfad: Zahlungen zurueck in die Nutzlast — streng wie
|
|
24
|
+
* `toReceiptPayload`: ein roher, unbekannter Schluessel bei `method` oder
|
|
25
|
+
* `provider` wirft.
|
|
26
|
+
*/
|
|
27
|
+
function toReceiptPaymentPayload(payment) {
|
|
28
|
+
return {
|
|
29
|
+
...(payment.id !== undefined ? { id: payment.id } : {}),
|
|
30
|
+
method: typeof payment.method === 'object' ? payment.method.value : (0, enum_payload_js_1.requireEnumKey)(index_js_1.KeckPaymentMethod, payment.method, 'Zahlungsart').value,
|
|
31
|
+
amountCents: payment.amountCents,
|
|
32
|
+
...(payment.tenderedCents !== undefined ? { tenderedCents: payment.tenderedCents } : {}),
|
|
33
|
+
...(payment.changeCents !== undefined ? { changeCents: payment.changeCents } : {}),
|
|
34
|
+
...(payment.provider !== undefined ? { provider: (0, enum_payload_js_1.requireEnumKey)(index_js_1.CreditCardProvider, payment.provider, 'Kartenanbieter') } : {}),
|
|
35
|
+
...(payment.providerPaymentId !== undefined ? { providerPaymentId: payment.providerPaymentId } : {}),
|
|
36
|
+
...(payment.providerData !== undefined ? { providerData: payment.providerData } : {}),
|
|
37
|
+
...(payment.refundOf !== undefined ? { refundOf: payment.refundOf } : {}),
|
|
38
|
+
...(payment.tipCents !== undefined ? { tipCents: payment.tipCents } : {}),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { KeckPaymentMethod, ReceiptType } from '../enums/index.js';
|
|
2
|
+
import { type ReceiptPayment, type ReceiptPaymentPayload } from './receipt-payment.js';
|
|
2
3
|
/**
|
|
3
4
|
* Belegzeile einer Liste — die Form, die `listMyReceipts` liefert
|
|
4
5
|
* (`projectReceiptForCustomer` in functions/index.js).
|
|
@@ -63,6 +64,13 @@ export interface ReceiptSummary {
|
|
|
63
64
|
stornoStand: 'offen' | 'teil' | 'voll';
|
|
64
65
|
/** Nur am Nullbeleg, nur fuer Kassen-Benutzer: Anlass (monthly, annual, annual_replacement, outage_end, final, manual). */
|
|
65
66
|
zeroKind?: ZeroKind;
|
|
67
|
+
/**
|
|
68
|
+
* Zahlungsliste, nur bei Belegen, die eine tragen. Die Liste liefert nur
|
|
69
|
+
* die oeffentlichen Felder (id, method, amountCents, provider,
|
|
70
|
+
* tenderedCents, changeCents, refundOf, tipCents) — Anbieter-Interna
|
|
71
|
+
* (`providerPaymentId`, `providerData`) bleiben im Backend.
|
|
72
|
+
*/
|
|
73
|
+
payments?: ReceiptPayment[];
|
|
66
74
|
}
|
|
67
75
|
export interface ReceiptSummaryPayload {
|
|
68
76
|
receiptId?: string | null;
|
|
@@ -90,5 +98,6 @@ export interface ReceiptSummaryPayload {
|
|
|
90
98
|
cancellationReason?: string | null;
|
|
91
99
|
stornoStand?: string | null;
|
|
92
100
|
zeroKind?: string | null;
|
|
101
|
+
payments?: ReceiptPaymentPayload[] | null;
|
|
93
102
|
}
|
|
94
103
|
export declare function fromReceiptSummaryPayload(payload: ReceiptSummaryPayload): ReceiptSummary;
|
|
@@ -6,6 +6,7 @@ exports.fromReceiptSummaryPayload = fromReceiptSummaryPayload;
|
|
|
6
6
|
const index_js_1 = require("../enums/index.js");
|
|
7
7
|
const money_js_1 = require("../money.js");
|
|
8
8
|
const enum_payload_js_1 = require("./enum-payload.js");
|
|
9
|
+
const receipt_payment_js_1 = require("./receipt-payment.js");
|
|
9
10
|
/**
|
|
10
11
|
* Belegzeile einer Liste — die Form, die `listMyReceipts` liefert
|
|
11
12
|
* (`projectReceiptForCustomer` in functions/index.js).
|
|
@@ -53,5 +54,6 @@ function fromReceiptSummaryPayload(payload) {
|
|
|
53
54
|
...(payload.cancellationReason ? { cancellationReason: payload.cancellationReason } : {}),
|
|
54
55
|
stornoStand: payload.stornoStand === 'teil' || payload.stornoStand === 'voll' ? payload.stornoStand : 'offen',
|
|
55
56
|
...(istZeroKind(payload.zeroKind) ? { zeroKind: payload.zeroKind } : {}),
|
|
57
|
+
...(Array.isArray(payload.payments) ? { payments: payload.payments.map(receipt_payment_js_1.fromReceiptPaymentPayload) } : {}),
|
|
56
58
|
};
|
|
57
59
|
}
|
|
@@ -3,6 +3,7 @@ import { type ReceiptItem, type ReceiptItemPayload, type ReceiptItemPayloadRead
|
|
|
3
3
|
import { type Voucher, type VoucherPayload } from './voucher.js';
|
|
4
4
|
import type { Cancellation, CancellationOf, CancellationReason } from './cancellation.js';
|
|
5
5
|
import { type ZeroKind } from './receipt-summary.js';
|
|
6
|
+
import { type ReceiptPayment, type ReceiptPaymentPayload } from './receipt-payment.js';
|
|
6
7
|
/**
|
|
7
8
|
* Beleg — Zwilling der Beleg-Nutzlast von `KasseneckReceipt` in
|
|
8
9
|
* kasseneck_api/lib/models/kasseneck_receipt.dart (nur der signatur-/
|
|
@@ -54,6 +55,12 @@ export interface Receipt {
|
|
|
54
55
|
cancellations?: Cancellation[];
|
|
55
56
|
/** Nur an Nullbelegen: Anlass (monthly, annual, annual_replacement, outage_end, final, manual). */
|
|
56
57
|
zeroKind?: ZeroKind;
|
|
58
|
+
/**
|
|
59
|
+
* Zahlungsliste (mehrere Zahlungen je Beleg), nur vorhanden, wenn der Beleg
|
|
60
|
+
* sie traegt. Altbelege haben keine; dort gelten `paymentMethod` und die
|
|
61
|
+
* Kartenfelder. Siehe [ReceiptPayment].
|
|
62
|
+
*/
|
|
63
|
+
payments?: ReceiptPayment[];
|
|
57
64
|
}
|
|
58
65
|
export interface ReceiptPayload {
|
|
59
66
|
qr: string;
|
|
@@ -78,6 +85,8 @@ export interface ReceiptPayload {
|
|
|
78
85
|
customProjectId: string | null;
|
|
79
86
|
/** Nur bei Belegen mit Trinkgeld (siehe [Receipt.tipCents]). */
|
|
80
87
|
tipCents?: number | null;
|
|
88
|
+
/** Nur bei Belegen mit Zahlungsliste (siehe [Receipt.payments]). */
|
|
89
|
+
payments?: ReceiptPaymentPayload[] | null;
|
|
81
90
|
}
|
|
82
91
|
/**
|
|
83
92
|
* Nutzlast-Form, die dieses Paket **liest**. Unterscheidet sich von
|
|
@@ -9,6 +9,7 @@ const enum_payload_js_1 = require("./enum-payload.js");
|
|
|
9
9
|
const receipt_item_js_1 = require("./receipt-item.js");
|
|
10
10
|
const voucher_js_1 = require("./voucher.js");
|
|
11
11
|
const receipt_summary_js_1 = require("./receipt-summary.js");
|
|
12
|
+
const receipt_payment_js_1 = require("./receipt-payment.js");
|
|
12
13
|
/**
|
|
13
14
|
* Schreibt die Nutzlast in der **neuen** Form — sie **normalisiert, statt zu
|
|
14
15
|
* spiegeln**: ein Beleg, der in der v1-Positionsform gelesen wurde, geht hier
|
|
@@ -49,6 +50,7 @@ function toReceiptPayload(receipt) {
|
|
|
49
50
|
signatureSuccess: receipt.signatureSuccess ?? null,
|
|
50
51
|
customProjectId: receipt.customProjectId ?? null,
|
|
51
52
|
...(receipt.tipCents != null ? { tipCents: receipt.tipCents } : {}),
|
|
53
|
+
...(receipt.payments != null ? { payments: receipt.payments.map(receipt_payment_js_1.toReceiptPaymentPayload) } : {}),
|
|
52
54
|
};
|
|
53
55
|
}
|
|
54
56
|
// Nullbelege haben keine Positionen -> items kann fehlen/null sein (siehe Dart-Vorbild).
|
|
@@ -84,6 +86,7 @@ function fromReceiptPayload(payload) {
|
|
|
84
86
|
...(payload.cancellationReason ? { cancellationReason: payload.cancellationReason } : {}),
|
|
85
87
|
...((0, receipt_summary_js_1.istZeroKind)(payload.zeroKind) ? { zeroKind: payload.zeroKind } : {}),
|
|
86
88
|
...(payload.cancellations ? { cancellations: payload.cancellations.map(leseStorno) } : {}),
|
|
89
|
+
...(Array.isArray(payload.payments) ? { payments: payload.payments.map(receipt_payment_js_1.fromReceiptPaymentPayload) } : {}),
|
|
87
90
|
};
|
|
88
91
|
}
|
|
89
92
|
function leseStorno(eintrag) {
|
|
@@ -19,6 +19,32 @@
|
|
|
19
19
|
* unterscheiden. Deshalb stehen hier BEIDE Flaechen: die der Schnittstelle
|
|
20
20
|
* ([PARTNER_FEHLER_CODES]) und die des Partner-Portals
|
|
21
21
|
* ([PARTNER_PORTAL_FEHLER_CODES]).
|
|
22
|
+
*
|
|
23
|
+
* **Seit 0.29.0 englisch, wie der Rest von `/v3`.** Dieser Client spricht seit
|
|
24
|
+
* 0.28.0 ausschliesslich `/v3` (`PARTNER_BASE_URL`): die paar deutschen Codes,
|
|
25
|
+
* die der Server bis dahin noch roh durchreichte, kommen jetzt genauso englisch
|
|
26
|
+
* an wie alle anderen. [PARTNER_FEHLER_CODES] fuehrt deshalb ausnahmslos die
|
|
27
|
+
* `/v3`-Schreibweise aus `fehlercodes.json`s `v3`-Zuordnung (deutsch -> englisch);
|
|
28
|
+
* ein Aufrufer bekommt vom Server nie mehr die deutsche Form.
|
|
29
|
+
*
|
|
30
|
+
* **`kein_partnerbetrieb` und `request_not_found` fehlen absichtlich.** Beide
|
|
31
|
+
* sind admin-only (`partner-endpoints.js`, ausserhalb von `FEHLER_KATALOG`) und
|
|
32
|
+
* erreichen `/v3` nie: ein Partner-Aufruf kann sie unter keinem Pfad bekommen.
|
|
33
|
+
* Sie standen frueher versehentlich in dieser Liste; `dart-partner.json` (ein
|
|
34
|
+
* eingefrorener Abzug aus Dart 5.3.0, bevor das korrigiert wurde) fuehrt sie
|
|
35
|
+
* weiterhin, siehe die Ausnahme in `test/partner-enums.test.ts`.
|
|
36
|
+
*
|
|
37
|
+
* **Die Vertrags-Codes (`kind_not_allowed`, `mode_not_allowed`,
|
|
38
|
+
* `power_of_attorney_missing`, `not_found`, `no_version`,
|
|
39
|
+
* `unknown_version`, `text_changed`, `already_accepted`) stehen hier, obwohl
|
|
40
|
+
* dieses Paket `reportCustomerContract` nicht anbietet.** Der Katalog des
|
|
41
|
+
* Backends fuehrt sie mit `flaeche: 'api'`/`'beide'`, dieselbe Regel wie bei
|
|
42
|
+
* den Portal-Codes oben: vollstaendig heisst vollstaendig, auch fuer einen
|
|
43
|
+
* Endpunkt, den (noch) kein Aufruf dieses Clients ausloest. Ein Server-Update,
|
|
44
|
+
* das den Endpunkt ergaenzt, bräuchte dann keinen zweiten Fehlerkatalog-Umbau.
|
|
45
|
+
* `not_required` fehlt bewusst: derselbe gemeinsame Server-Zweig wie die
|
|
46
|
+
* anderen sechs, aber ueber die Partner-API nicht erreichbar (der Server hat
|
|
47
|
+
* ihn aus `FEHLER_KATALOG` entfernt, siehe `partner-core.js` im Backend).
|
|
22
48
|
*/
|
|
23
49
|
/**
|
|
24
50
|
* Alle Codes, die die **Schnittstelle** kennt. Als Liste und nicht nur als
|
|
@@ -27,7 +53,7 @@
|
|
|
27
53
|
*
|
|
28
54
|
* Reihenfolge und Bestand wie im Abzug des Backends.
|
|
29
55
|
*/
|
|
30
|
-
export declare const PARTNER_FEHLER_CODES: readonly ["validation", "rate_limited", "app_not_found", "app_not_accepted", "
|
|
56
|
+
export declare const PARTNER_FEHLER_CODES: readonly ["validation", "rate_limited", "app_not_found", "app_not_accepted", "live_not_allowed", "customer_exists", "customer_conflict", "customer_limit", "access_not_allowed", "email_taken", "no_email", "tax_number_missing", "fon_missing", "signature_pending", "signature_missing", "signature_unknown", "signature_ambiguous", "signature_not_ready", "signature_limit", "signature_failed", "module_inactive", "cashregister_limit", "cashregister_not_found", "contracts_pending", "kind_not_allowed", "mode_not_allowed", "power_of_attorney_missing", "not_found", "no_version", "unknown_version", "text_changed", "already_accepted", "activation_failed", "webhook_limit", "webhook_inactive", "event_not_subscribed"];
|
|
31
57
|
/**
|
|
32
58
|
* Die Codes, die nur im **Partner-Portal** entstehen — beim Pflegen der App,
|
|
33
59
|
* der Schluessel, der Mitglieder und der Signaturkarten.
|
|
@@ -58,7 +84,7 @@ export declare function istPartnerFehler(error: unknown, code: PartnerCode): boo
|
|
|
58
84
|
export interface PartnerFeldFehler {
|
|
59
85
|
/**
|
|
60
86
|
* Der Feldpfad, so wie er im gesendeten Betrieb steht — verschachtelt und je
|
|
61
|
-
* Kontakt: `address.
|
|
87
|
+
* Kontakt: `address.zip`, `taxDetails.taxNumber`, `contacts.0.email`.
|
|
62
88
|
*/
|
|
63
89
|
field: string;
|
|
64
90
|
message: string;
|
|
@@ -20,6 +20,32 @@
|
|
|
20
20
|
* unterscheiden. Deshalb stehen hier BEIDE Flaechen: die der Schnittstelle
|
|
21
21
|
* ([PARTNER_FEHLER_CODES]) und die des Partner-Portals
|
|
22
22
|
* ([PARTNER_PORTAL_FEHLER_CODES]).
|
|
23
|
+
*
|
|
24
|
+
* **Seit 0.29.0 englisch, wie der Rest von `/v3`.** Dieser Client spricht seit
|
|
25
|
+
* 0.28.0 ausschliesslich `/v3` (`PARTNER_BASE_URL`): die paar deutschen Codes,
|
|
26
|
+
* die der Server bis dahin noch roh durchreichte, kommen jetzt genauso englisch
|
|
27
|
+
* an wie alle anderen. [PARTNER_FEHLER_CODES] fuehrt deshalb ausnahmslos die
|
|
28
|
+
* `/v3`-Schreibweise aus `fehlercodes.json`s `v3`-Zuordnung (deutsch -> englisch);
|
|
29
|
+
* ein Aufrufer bekommt vom Server nie mehr die deutsche Form.
|
|
30
|
+
*
|
|
31
|
+
* **`kein_partnerbetrieb` und `request_not_found` fehlen absichtlich.** Beide
|
|
32
|
+
* sind admin-only (`partner-endpoints.js`, ausserhalb von `FEHLER_KATALOG`) und
|
|
33
|
+
* erreichen `/v3` nie: ein Partner-Aufruf kann sie unter keinem Pfad bekommen.
|
|
34
|
+
* Sie standen frueher versehentlich in dieser Liste; `dart-partner.json` (ein
|
|
35
|
+
* eingefrorener Abzug aus Dart 5.3.0, bevor das korrigiert wurde) fuehrt sie
|
|
36
|
+
* weiterhin, siehe die Ausnahme in `test/partner-enums.test.ts`.
|
|
37
|
+
*
|
|
38
|
+
* **Die Vertrags-Codes (`kind_not_allowed`, `mode_not_allowed`,
|
|
39
|
+
* `power_of_attorney_missing`, `not_found`, `no_version`,
|
|
40
|
+
* `unknown_version`, `text_changed`, `already_accepted`) stehen hier, obwohl
|
|
41
|
+
* dieses Paket `reportCustomerContract` nicht anbietet.** Der Katalog des
|
|
42
|
+
* Backends fuehrt sie mit `flaeche: 'api'`/`'beide'`, dieselbe Regel wie bei
|
|
43
|
+
* den Portal-Codes oben: vollstaendig heisst vollstaendig, auch fuer einen
|
|
44
|
+
* Endpunkt, den (noch) kein Aufruf dieses Clients ausloest. Ein Server-Update,
|
|
45
|
+
* das den Endpunkt ergaenzt, bräuchte dann keinen zweiten Fehlerkatalog-Umbau.
|
|
46
|
+
* `not_required` fehlt bewusst: derselbe gemeinsame Server-Zweig wie die
|
|
47
|
+
* anderen sechs, aber ueber die Partner-API nicht erreichbar (der Server hat
|
|
48
|
+
* ihn aus `FEHLER_KATALOG` entfernt, siehe `partner-core.js` im Backend).
|
|
23
49
|
*/
|
|
24
50
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
51
|
exports.PARTNER_PORTAL_FEHLER_CODES = exports.PARTNER_FEHLER_CODES = void 0;
|
|
@@ -44,21 +70,19 @@ exports.PARTNER_FEHLER_CODES = [
|
|
|
44
70
|
'rate_limited',
|
|
45
71
|
'app_not_found',
|
|
46
72
|
'app_not_accepted',
|
|
47
|
-
'kein_partnerbetrieb',
|
|
48
73
|
'live_not_allowed',
|
|
49
74
|
// Betrieb anlegen
|
|
50
75
|
'customer_exists',
|
|
51
76
|
'customer_conflict',
|
|
52
77
|
'customer_limit',
|
|
53
|
-
'
|
|
78
|
+
'access_not_allowed',
|
|
54
79
|
'email_taken',
|
|
55
80
|
'no_email',
|
|
56
81
|
// FinanzOnline-Link
|
|
57
|
-
'
|
|
82
|
+
'tax_number_missing',
|
|
58
83
|
// Signatur
|
|
59
84
|
'fon_missing',
|
|
60
85
|
'signature_pending',
|
|
61
|
-
'request_not_found',
|
|
62
86
|
'signature_missing',
|
|
63
87
|
'signature_unknown',
|
|
64
88
|
'signature_ambiguous',
|
|
@@ -69,7 +93,17 @@ exports.PARTNER_FEHLER_CODES = [
|
|
|
69
93
|
'module_inactive',
|
|
70
94
|
'cashregister_limit',
|
|
71
95
|
'cashregister_not_found',
|
|
72
|
-
'
|
|
96
|
+
'contracts_pending',
|
|
97
|
+
// Vertraege (reportCustomerContract: dieses Paket bietet den Endpunkt nicht
|
|
98
|
+
// an, der Katalog fuehrt die Codes trotzdem vollstaendig, siehe oben)
|
|
99
|
+
'kind_not_allowed',
|
|
100
|
+
'mode_not_allowed',
|
|
101
|
+
'power_of_attorney_missing',
|
|
102
|
+
'not_found',
|
|
103
|
+
'no_version',
|
|
104
|
+
'unknown_version',
|
|
105
|
+
'text_changed',
|
|
106
|
+
'already_accepted',
|
|
73
107
|
'activation_failed',
|
|
74
108
|
// Webhooks
|
|
75
109
|
'webhook_limit',
|
|
@@ -119,28 +153,38 @@ const RAT = {
|
|
|
119
153
|
rate_limited: 'Zu viele Aufrufe. data.retryAfterSec Sekunden warten und denselben Aufruf wiederholen.',
|
|
120
154
|
app_not_found: 'Die appId gibt es nicht. getPartnerInfo liefert die eigenen Apps samt id.',
|
|
121
155
|
app_not_accepted: 'Diese App hat noch keine abgenommene Version. Mit einem pk_test_-Schluessel oder mit env:"test" geht es sofort weiter; live erst nach der Abnahme.',
|
|
122
|
-
kein_partnerbetrieb: 'Dieser Betrieb gehoert nicht zu diesem Partner-Konto. Die eigenen stehen in listPartnerCustomers.',
|
|
123
156
|
live_not_allowed: 'Ein Test-Schluessel erzeugt nichts Echtes. Fuer einen Live-Betrieb den Live-Schluessel nehmen — umgekehrt darf ein Live-Schluessel mit env:"test" sehr wohl einen Testbetrieb anlegen.',
|
|
124
157
|
customer_exists: 'Diesen Betrieb gibt es schon (data.customerId). Mit derselben customerId weiterarbeiten.',
|
|
125
158
|
customer_conflict: 'Die Steuernummer ist bei Kasseneck bereits registriert. Die Zuordnung zum Partner macht Kasseneck — hello@kasseneck.at.',
|
|
126
159
|
customer_limit: 'Das Tageslimit fuer neue Betriebe ist erreicht (data.max, data.resetAt). Morgen weiter.',
|
|
127
|
-
|
|
160
|
+
access_not_allowed: 'Fuer dieses Partner-Konto sind Zugaenge zum Kundenpanel nicht freigeschaltet — es entstand NICHTS, auch kein Betrieb. Ohne access{invite:true} erneut anlegen oder die Freischaltung erfragen (Stand: getPartnerInfo.partner.canCreateAccess).',
|
|
128
161
|
email_taken: 'Fuer diese E-Mail gibt es schon einen Kasseneck-Zugang. Eine andere Adresse waehlen, auf die Einladung verzichten oder den Betrieb zuordnen lassen.',
|
|
129
162
|
no_email: 'Im Konto des Betriebs steht keine E-Mail-Adresse. Ohne sie geht weder eine Einladung noch der FinanzOnline-Link hinaus.',
|
|
130
|
-
|
|
163
|
+
tax_number_missing: 'Am Betrieb ist keine Steuernummer hinterlegt, ohne sie gibt es keinen Einrichtungs-Link. Die Steuernummer bei Kasseneck nachtragen lassen (hello@kasseneck.at), dann sendPartnerCustomerFonLink erneut.',
|
|
131
164
|
fon_missing: 'Der Betrieb hat noch keinen FinanzOnline-Zugang. sendPartnerCustomerFonLink senden und customer.fon_verified abwarten. Betrifft das ANMELDEN der Signatureinheit, nicht das Beantragen.',
|
|
132
165
|
signature_pending: 'Fuer diesen Betrieb laeuft bereits ein Antrag. Auf signature.ready warten.',
|
|
133
|
-
request_not_found: 'Diese signaturId gibt es nicht. getCustomerSignatureStatus nennt die des Betriebs.',
|
|
134
166
|
signature_missing: 'Der Betrieb hat ueberhaupt keine Signatur, und jede Kasse bezieht sich auf eine. Zuerst requestCustomerSignature.',
|
|
135
167
|
signature_unknown: 'Die genannte signatureRequestId gehoert nicht zu diesem Betrieb. getCustomerSignatureStatus nennt die seinen.',
|
|
136
168
|
signature_ambiguous: 'Der Betrieb hat mehrere Signaturen; welche die Kasse benutzt, muss dastehen. Eine aus data.choices als signatureRequestId mitgeben.',
|
|
137
169
|
signature_not_ready: 'Die Signatur DIESER Kasse ist noch nicht bereit. Auf signature.ready warten; eine mit automatic:true angelegte Kasse geht danach von selbst live.',
|
|
138
170
|
signature_limit: 'Hoechstens zehn Signaturen je Betrieb. Eine bestehende benutzen, statt mit additional:true eine weitere zu beantragen.',
|
|
139
171
|
signature_failed: 'FinanzOnline hat die Anmeldung abgelehnt (data.rc). Kasseneck klaert das — hello@kasseneck.at.',
|
|
140
|
-
module_inactive: 'Das Modul (data.
|
|
172
|
+
module_inactive: 'Das Modul (data.module, z. B. "cash_register", Text in data.detail) ist fuer diesen Betrieb nicht gebucht. Kasseneck schaltet es frei.',
|
|
141
173
|
cashregister_limit: 'Hoechstens 20 Registrierkassen je Betrieb. Eine bestehende nutzen.',
|
|
142
174
|
cashregister_not_found: 'Diese cashregisterId gibt es bei diesem Betrieb nicht.',
|
|
143
|
-
|
|
175
|
+
contracts_pending: 'Nur live: der Betrieb hat Auftragsverarbeitungs- und Nutzungsvertrag noch nicht bestaetigt. An der Kasse aendert sich nichts. Den Betrieb ueber den Einrichtungs-Link bestaetigen lassen (sendPartnerCustomerFonLink, Stand in avv/terms von getPartnerCustomer), danach activateCashregister erneut.',
|
|
176
|
+
// -- Vertraege (reportCustomerContract) ------------------------------------
|
|
177
|
+
// Dieser Client bietet den Endpunkt (noch) nicht an; die Codes stehen hier
|
|
178
|
+
// nur fuer die Katalogseite und fuer einen Aufrufer, der die rohe Antwort
|
|
179
|
+
// selbst auswertet (siehe Kopfkommentar der Datei).
|
|
180
|
+
kind_not_allowed: 'reportCustomerContract mit einer anderen Art als "avv". Der Vollmachtsweg nimmt nur den Auftragsverarbeitungsvertrag entgegen. Dieser Client bietet den Endpunkt nicht an.',
|
|
181
|
+
mode_not_allowed: 'Der Vollmachtsweg ist fuer dieses Partner-Konto nicht freigeschaltet. Kasseneck fragen (hello@kasseneck.at).',
|
|
182
|
+
power_of_attorney_missing: 'Der Partnervertrag mit dem Vollmachts-Kapitel ist noch nicht bestaetigt. Erst danach nimmt der Vollmachtsweg Meldungen entgegen.',
|
|
183
|
+
not_found: 'Die genannte customerId gehoert nicht zu diesem Partner-Konto oder existiert nicht. listPartnerCustomers nennt die eigenen.',
|
|
184
|
+
no_version: 'Fuer die gemeldete Vertragsart gibt es derzeit keine gueltige Fassung. Bei Kasseneck nachfragen.',
|
|
185
|
+
unknown_version: 'Die gemeldete Vertragsversion gibt es nicht. Die aktuell geltende Fassung neu abrufen.',
|
|
186
|
+
text_changed: 'Der gezeigte Vertragstext hat sich seit dem Laden geaendert (data.textHash traegt die aktuell geltende Pruefsumme). Neu laden und danach erneut bestaetigen lassen.',
|
|
187
|
+
already_accepted: 'Diese Fassung ist bereits bestaetigt (data.contractId). Nichts weiter zu tun.',
|
|
144
188
|
activation_failed: 'Die Inbetriebnahme blieb an data.step haengen (ggf. data.rc). activateCashregister erneut aufrufen — jeder Schritt ist idempotent, der Lauf setzt an der Bruchstelle an.',
|
|
145
189
|
webhook_limit: 'Hoechstens 10 Webhook-Endpunkte je Partner. Einen ungenutzten loeschen.',
|
|
146
190
|
webhook_inactive: 'Der Webhook steht auf active:false. Zuerst aktivieren, dann erneut proben.',
|
|
@@ -27,6 +27,6 @@ export { getPartnerInfo, createPartnerCustomer, listPartnerCustomers, checkPartn
|
|
|
27
27
|
export { createPartnerWebhook, listPartnerWebhooks, rotatePartnerWebhookSecret, updatePartnerWebhook, deletePartnerWebhook, sendPartnerWebhookTest, listPartnerWebhookDeliveries, parseWebhookEvent, istPartnerWebhookEvent, PARTNER_WEBHOOK_EVENTS, WEBHOOK_UMSCHLAG_FELDER, type PartnerWebhookEvent, type PartnerWebhookEventType, type PartnerWebhook, type CreateWebhookOptions, type CreateWebhookResult, type DeleteWebhookResult, type WebhookApiVersion, type WebhookDeliveryStatus, type WebhookTestZustellung, type ContractKind, type ContractSource, type ContractAcceptedEventData, type WebhookPatch, type WebhookListe, type WebhookZustellung, type WebhookTestResult, type WebhookEventResult, } from './webhooks.js';
|
|
28
28
|
export { verifyWebhookSignature, parseSignatureHeader, WEBHOOK_SIGNATURE_HEADER, WEBHOOK_EVENT_HEADER, WEBHOOK_DELIVERY_HEADER, WEBHOOK_TOLERANCE_SEC, WEBHOOK_RETRY_PLAN_SEC, WEBHOOK_MAX_ATTEMPTS, WEBHOOK_TIMEOUT_MS, WEBHOOK_LIMIT, type VerifyWebhookOptions, type WebhookVerifyResult, type WebhookVerifyReason, } from './webhook-signatur.js';
|
|
29
29
|
export { PARTNER_ENVS } from './typen.js';
|
|
30
|
-
export type { PartnerEnv, PartnerScope, PartnerApp, PartnerInfo, LegalForm, AustrianState, ContactRole, AvvMode, FeeInterval, PartnerFee, SignatureHistoryReason, RequestSignatureOptions, CustomerSignature, Rechtsform, Bundesland, KontaktRolle, BetriebAdresse, BetriebSteuer, BetriebKontakt, BetriebSteuerberater, Betrieb, CreateCustomerOptions, CreateCustomerResult, KundenStatus, KundenZeile, AvvStand, VertragStand, KundenFonStand, ListCustomersOptions, KundenListe, Kunde, FonLinkResult, SignaturAntragStatus, SignaturHistorieEintrag, SignaturAntrag, RequestSignatureResult, SignaturStand, KassenSchritt, KassenStatus, Kasse, CreateCashregisterOptions, CreateCashregisterResult, ActivateCashregisterResult, KassenListe, CustomerCashregisterCredential, CustomerCredentials, } from './typen.js';
|
|
30
|
+
export type { PartnerEnv, PartnerScope, PartnerApp, PartnerInfo, LegalForm, AustrianState, ContactRole, AvvMode, FeeInterval, PartnerFee, SignatureHistoryReason, SignatureErrorCode, RequestSignatureOptions, CustomerSignature, Rechtsform, Bundesland, KontaktRolle, BetriebAdresse, BetriebSteuer, BetriebKontakt, BetriebSteuerberater, Betrieb, CreateCustomerOptions, CreateCustomerResult, KundenStatus, KundenZeile, AvvStand, VertragStand, KundenFonStand, ListCustomersOptions, KundenListe, Kunde, FonLinkResult, SignaturAntragStatus, SignaturHistorieEintrag, SignaturAntrag, RequestSignatureResult, SignaturStand, KassenSchritt, KassenStatus, Kasse, CreateCashregisterOptions, CreateCashregisterResult, ActivateCashregisterResult, KassenListe, CustomerCashregisterCredential, CustomerCredentials, } from './typen.js';
|
|
31
31
|
/** `credentials:read` — nicht im Standardsatz, siehe typen.ts. */
|
|
32
32
|
export { SCOPE_CREDENTIALS } from './typen.js';
|
|
@@ -329,6 +329,13 @@ export type SignaturAntragStatus = 'requested' | 'assigned' | 'registered' | 're
|
|
|
329
329
|
* `finanzonline` hiessen unter `/v1` `karte_eingetragen` und `fon`.
|
|
330
330
|
*/
|
|
331
331
|
export type SignatureHistoryReason = 'api' | 'portal' | 'card_entered' | 'finanzonline' | 'automation_off' | 'test_environment' | 'no_stock' | (string & {});
|
|
332
|
+
/**
|
|
333
|
+
* `error.code` eines Signaturantrags oder einer Signatur (`SignaturAntrag`,
|
|
334
|
+
* `CustomerSignature`). Hiess unter `/v1` `kunde_nicht_gefunden` /
|
|
335
|
+
* `unvollstaendig` / `fon_fehler`; dieser Client spricht seit 0.28.0 nur noch
|
|
336
|
+
* `/v3` und sieht darum nur die englische Form.
|
|
337
|
+
*/
|
|
338
|
+
export type SignatureErrorCode = 'customer_not_found' | 'incomplete' | 'finanzonline_error' | (string & {});
|
|
332
339
|
export interface SignaturHistorieEintrag {
|
|
333
340
|
from: SignaturAntragStatus | null;
|
|
334
341
|
to: SignaturAntragStatus;
|
|
@@ -344,7 +351,7 @@ export interface SignaturAntrag {
|
|
|
344
351
|
vdaId: string | null;
|
|
345
352
|
signatureId: string | null;
|
|
346
353
|
error: {
|
|
347
|
-
code:
|
|
354
|
+
code: SignatureErrorCode | null;
|
|
348
355
|
message: string | null;
|
|
349
356
|
rc: string | null;
|
|
350
357
|
} | null;
|
|
@@ -383,7 +390,7 @@ export interface CustomerSignature {
|
|
|
383
390
|
requestId: string | null;
|
|
384
391
|
signatureId: string | null;
|
|
385
392
|
error: {
|
|
386
|
-
code:
|
|
393
|
+
code: SignatureErrorCode | null;
|
|
387
394
|
message: string | null;
|
|
388
395
|
rc: string | null;
|
|
389
396
|
} | null;
|