register library

Kopplung und Anmeldung eines Kassengeräts (RKSV-Kasse).

Der Einstieg ist RegisterClient. Diese Aufrufe laufen ohne Anmeldung — der Kopplungs-Code aus dem Panel bzw. das Gerätegeheimnis ist der Nachweis. Sie stehen bewusst neben KasseneckApi, die einen api_key braucht.

Classes

FieldError
Ein Feldfehler aus details.errors[] einer validation-Antwort.
PairedRegisterDevice
Ergebnis der Kopplung — der vollständige Ausweis dieses Geräts.
RegisterCashregisterState
Darf die gebundene Kasse Belege erstellen? ready: false mit dem Grund (Menschentext) etwa bei fehlender Signaturkarte oder fehlendem Startbeleg.
RegisterClient
Die anmeldungsfreien Aufrufe rund um Kopplung und Anmeldung.
RegisterClientInfo
Kopplung und Anmeldung eines Kassengeräts — der Zwilling von register/pairing.ts im JS-Paket @kreiseck/kasseneck-api.
RegisterDeviceUsers
Antwort von RegisterClient.listRegisterUsersForDevice.
RegisterErrorDetails
Die Angaben einer Abweisung, soweit sie welche trägt. Was fehlt, ist null; deviceLabel ist auch dann null, wenn das belegende Gerät keinen Namen hat (die Oberfläche sagt dann „ein anderes Gerät“).
RegisterGeo
Standort (freiwillig); Grundlage der Standortsperre.
RegisterPinPolicy
PIN-Regel des Betriebs — daraus baut die Kasse Kästchen und Tastatur.
RegisterSession
Ergebnis der Anmeldung. Eine laufende Sitzung an einer Kasse — Zwilling von RegisterSession (npm). Für den Anmeldebildschirm, wenn alle Lizenzplätze belegt sind: der Kassier sieht, WELCHE Sitzung weichen soll, und gibt ihre id als takeoverSessionId mit.
RegisterSessionClient
Die beiden Aufrufe der laufenden Sitzung.
RegisterSessionOverview
Antwort von RegisterClient.listRegisterSessionsForDevice.
RegisterTransport
RegisterUser
Der angemeldete Kassen-Benutzer.
RegisterUserPerms
Rechte eines Kassen-Benutzers.
RegisterUserSession
RegisterUserSummary
Ein Kassen-Benutzer, wie ihn der Anmeldebildschirm zeigt.

Enums

ErrorOutcome
Ausgang eines gescheiterten Aufrufs. rejected: nichts geschehen. unknown: der Vorgang kann ausgefuehrt sein (ein Beleg signiert, ein Storno gebucht, Ware gebucht, eine Rechnung ausgestellt); nie blind wiederholen. Belege, Stornos und Zahlungen nachlesen; ein Aufruf mit idempotencyKey nur mit demselben Schluessel erneut senden (wirkt genau einmal, ein neuer buchte doppelt); ohne Schluessel erst nachlesen.
RegisterLoginMode
Anmeldemodus des Geräts (Draht select_user bzw. pin); ein unbekannter künftiger Wert gilt als selectUser: das Backend weist eine Anmeldung ohne Auswahl ohnehin mit login_mode_select_user ab.
RegisterScope
Reichweite eines Rechts.
RegisterUserKind
Art eines Kassen-Benutzers. Ein künftiger, hier unbekannter Wert gilt als person — beim Lesen ist dieses Paket tolerant.

Constants

clientErrorCodes → const Set<String>
Codes, die das Paket selbst vergibt, nicht der Server: route_missing (HTML statt Backend, der Aufruf kam nie an) und response_unreadable (ein signierender Aufruf meldete Erfolg, die Antwort ist aber unlesbar). dialect_mismatch vergibt das Paket ebenfalls, der Code gehoert aber zum Rand des Servers.
kPosBaseUrl → const String
Basis des Kassenwegs (Kanal app). Die Web-Kasse ruft denselben Weg im gleichen Ursprung als /api/v3.
kPublicBaseUrl → const String
Basis der oeffentlichen API.
kRegisterBaseUrl → const String
Basis-Adresse der Kassen-Aufrufe (Kassenweg, Kanal app).
paymentCallRejectedCodes → const Set<String>
Codes, bei denen ein Geldweg sicher abgelehnt ist: sie entstehen, bevor das Backend den Zahlungsanbieter anspricht.
registerErrorCodes → const List<String>
Die Codes der Anmeldung, gleich registerErrorCodes im Vertrag (surface.json): Fehlerfälle der acht Anmelde-Endpunkte und ihre Handler-Codes, dazu Anmelde- und Randcodes (ohne den Partner-Zugang) und der Paketcode route_missing. Ein Code, der hier nicht steht, bleibt über KasseneckApiError.code lesbar; die Kasse braucht dafür einen Rückfallzweig.

Functions

errorCodeFrom(Map envelope) → String?
Der code einer Antworthuelle — nur ein nicht leerer Text zaehlt, alles andere waere ein geratener Vertrag.
fieldErrors(Object? error) → List<FieldError>
Die Feldfehler einer validation-Antwort; leer, wenn es keine sind.
isOutcomeUnknown(Object? error) → bool
Ist der Ausgang dieses Fehlers unklar? Dann den Aufruf nicht blind wiederholen: Belege, Stornos und Zahlungen nachlesen; einen Aufruf mit idempotencyKey nur mit demselben Schluessel erneut senden; ohne Schluessel erst nachlesen (siehe ErrorOutcome). Gilt fuer jede Fehlerart; nur KasseneckApiError und KasseneckHttpError koennen unklar sein.
isRegisterError(Object? error, [String? code]) → bool
Kurzform für catch (e) { if (isRegisterError(e, 'cashregister_in_use')) … }. Ohne code: ist es überhaupt ein Fehler der Kassen-Anmeldung?
isRegisterErrorCode(Object? value) → bool
readSignedResponse<T>(String functionName, T read(), {String? receiptId()?}) → T
Liest die Erfolgsantwort eines wirkenden Aufrufs (Beleg, Storno, Kartenbelastung). Scheitert das Lesen (fehlender Beleg, fehlender Bezug, unbrauchbares Feld oder ein Laufzeitfehler beim Umwandeln), hat der Server trotzdem Erfolg gemeldet: der Beleg ist signiert und im DEP, die Karte belastet. Das darf nie als gewoehnlicher Fehler enden, sonst kassiert die Kasse ein zweites Mal. Darum wird daraus KasseneckApiError mit Code response_unreadable und Ausgang unklar (Zwilling von signiertGelesen im npm-Paket).
registerErrorCode(Object? error) → String?
Der Code eines geworfenen Fehlers, wenn er einer der Anmeldung ist; sonst null.
registerErrorDetails(Object? error) → RegisterErrorDetails
registerFieldErrors(Object? error) → List<FieldError>
Feldfehler der Anmeldung (Zwilling von registerFieldErrors).
stockViewOf(RegisterUserPerms? perms) → bool
Darf der Benutzer Standorte und Mengen sehen? Wie im Backend (lager-core): ohne Schluessel gilt stockView als erteilt, nur ein ausdrueckliches false sperrt; alle anderen Lager-Rechte gelten ohne Schluessel als verweigert. Ohne Rechte (perms null) nichts.

Exceptions / Errors

KasseneckApiError
Fachlicher Fehler des Backends (PIN falsch, Kasse belegt, Geraet gesperrt …).
KasseneckHttpError
Die Antwort war keine brauchbare Huelle {status, data} oder der HTTP-Weg scheiterte. Traegt bewusst nichts aus dem Rumpf: dort koennten Werte stehen, die wir gerade nicht ins Protokoll lassen wollen.
KasseneckReceiptFormatError
Ein Beleg kam an, liess sich aber nicht lesen — ein Pflichtfeld fehlt oder hat den falschen Typ.
KasseneckValidationError
Der Aufrufer hat etwas nicht mitgegeben, oder die Antwort trug nicht, was der Aufruf zusagt. Die Meldung nennt immer nur das Feld, nie seinen Wert — sonst stuende ein Geraetegeheimnis im Protokoll.