/** * `@kreiseck/kasseneck-api/stored`: gespeicherte Firestore-Dokumente (innen, * deutsch) als dieselben englischen Modelle, die der Draht `/v3` liefert. * * Fuer Verbraucher, die Firestore direkt lesen (Admin-Panel, Echtzeit-Listener * auf Belege). So gibt es in 1.0 ein englisches Modell und keinen zweiten * Draht-Dialekt: jede Funktion hier uebersetzt das Dokument genau so, wie der * Server es unter `/v3` bzw. `/api/v3` hinausgibt (Schluessel und Werte aus * dem Vertrags-Export `fixtures/v3/v3-vokabular.json`), und liest das * Ergebnis dann mit demselben Leser wie eine Antwort. Ein Test haelt jedes * gespeicherte Dokument des Vertrags gegen seine Antwort. * * Belege kommen im Kanal der Kasse (`app`): mit Anbieterdaten der Zahlungen * (`payments[].providerData`/`providerPaymentId`, alte Kartenfelder). */ import { type ReceiptWithCompany } from '../client/receipts.js'; import { type ReceiptCompany } from '../models/receipt-company.js'; import type { Receipt, RegistrationInfo } from '../models/receipt.js'; import { type PosSettings } from '../pos/settings.js'; import { type PosArticle } from '../pos/artikel.js'; /** Ein Firestore-Dokument mit seiner Kennung (die nicht in den Daten steht). */ export interface StoredDocument { id: string; data: unknown; } /** * Ein Belegdokument (`users/{uid}/cashregisters/{id}/receipts/{id}`) als * [Receipt], wie `getReceipt` am Kassenweg ihn liefert. Wirft * `KasseneckValidationError`, wenn es kein Belegdokument ist. */ export declare function fromStoredReceipt(doc: unknown): Receipt; export interface StoredReceiptOptions { /** * Die Kopf-Version dieses Belegs (`users/{uid}/beleg_kopf/{id}`): die mit * `receipt.headerVersionId` (gespeichert `kopfId`), bei Altbelegen ohne * Zuordnung die zum Belegzeitpunkt gueltige (`gueltigAb`/`gueltigBis`). */ headerVersion: StoredDocument; /** * Das Kontodokument (`users/{uid}`): Logo, wenn die Version noch keines * kennt, und die Logo-Stufe (`register_settings.kasse.logoSkala`). */ account?: unknown; /** Konto einer Testumgebung (Aufdruck TESTKASSE, keine Testsignatur-Warnung). */ testCashregister?: boolean; /** * Registrierdaten fuer einen Nullbeleg, der sie nicht selbst traegt * (Altbestand; der Server schlaegt sie an Karte und Kasse nach). Fehlt die * Angabe, bleiben beide Zeitpunkte leer. */ registrationInfo?: RegistrationInfo; } /** * Ein Belegdokument samt Firma und Layout, wie `getReceiptWithCompany` am * Kassenweg es liefert: Kopf und Fuss aus der Kopf-Version, das Layout mit * demselben Regelwerk und in derselben Breite (80 mm) wie am Server. */ export declare function fromStoredReceiptWithCompany(doc: unknown, options: StoredReceiptOptions): ReceiptWithCompany; /** * Eine Kopf-Version (`users/{uid}/beleg_kopf/{id}`) als [ReceiptCompany], wie * die Beleg-Antwort sie traegt. `receipt`: ein Nullbeleg traegt kein Logo; * `account`: kennt die Version noch kein Logo, gilt das des Kontos. */ export declare function fromStoredCompany(headerVersion: unknown, options?: { account?: unknown; receipt?: { receiptType?: unknown; }; }): ReceiptCompany; /** * Gespeicherte Kassen-Einstellungen als [PosSettings], wie `getKasseSettings` * am Kassenweg sie liefert: `betrieb` aus * `users/{uid}.register_settings.kasse`, `geraet` aus * `users/{uid}/register_devices/{id}.kasse` (fehlt = Vorgaben). * * Wie am Server faellt weg, was der Validator beim Lesen nicht annimmt: ein * fremder Steuersatz oder eine fremde Trinkgeldstufe, eine unbekannte * Tasten-Aktion (erst nach dem Entwirren der Tasten, wie `mische`), eine Taste * ausserhalb des Musters, ein Wert ausserhalb seines Bereichs oder Musters * (`wzPos: 500`, Farbe, IP). An seiner Stelle steht die Vorgabe; * [invalidStoredPosSettings] nennt jeden solchen Pfad. So schickt ein * spaeteres Speichern nie einen Eintrag, den der Server abweist. * * Einzige Ausnahme: ein unbekannter Wert eines Aufzaehlungsfeldes vom * richtigen Typ (`stil: 'sepia'`) bleibt woertlich stehen wie ein unbekannter * Wert vom Draht; [unknownPosSettingValues] nennt ihn. Reste der inneren Form * 0.x fallen auf die Vorgabe zurueck. */ export declare function fromStoredPosSettings(stored: { betrieb?: unknown; geraet?: unknown; } | null | undefined): PosSettings; /** * Die aeusseren Pfade (`business.watermarkX`, `business.vatRates.7`, * `device.shortcuts.cash`), deren gespeicherten Wert der Server beim Lesen * weglaesst und [fromStoredPosSettings] darum durch die Vorgabe ersetzt. Fuer * die Anzeige „gespeicherter Wert ungueltig, Vorgabe gilt“. */ export declare function invalidStoredPosSettings(stored: { betrieb?: unknown; geraet?: unknown; } | null | undefined): string[]; /** * Ein Artikeldokument (`users/{uid}/articles/{id}`) als [PosArticle], wie * `listMyArticles` am Kassenweg ihn liefert. Felder, die kein Schreibweg * kennt, und Katalogwerte, die der Vertrag nicht kennt, fallen wie am Server * weg. */ export declare function fromStoredArticle(id: string, stored: unknown): PosArticle; export { fromStoredLayout, toStoredLayout, fromStoredPrintLogo, toStoredPrintLogo } from './layout.js';