import type { InternerTransport } from '../client/aufrufe.js'; /** * Gutschein pruefen und Etikett nachdrucken an der Kasse (Backend * gutschein-endpoints). Beide Aufrufe gibt es nur ueber den Kassenweg * `/api/v3`. * * Der Klartext-Code lebt nur im Speicher des Aufrufs: er wird weder * protokolliert noch in einer Fehlermeldung genannt. Die Kasse bekommt nach * dem Pruefen nur die letzten vier Zeichen (`codeSuffix`) zurueck. */ export type VoucherKind = 'multi_purpose' | 'single_purpose' | 'service' | 'promotion'; export type VoucherStatus = 'active' | 'used_up' | 'expired' | 'paid_out' | 'cancelled' | 'blocked'; export declare const VOUCHER_KINDS: readonly VoucherKind[]; export declare const VOUCHER_STATUSES: readonly VoucherStatus[]; /** Gueltigkeit eines Gutscheins; Daten als `YYYY-MM-DD` (Wiener Tag). Was der Server nicht nennt, fehlt. */ export interface VoucherValidity { pattern: 'unlimited' | '1+3' | 'custom'; redeemableUntil?: string; refundableUntil?: string; validUntil?: string; } /** Der Artikel eines Dienstleistungsgutscheins. */ export interface VoucherArticle { id: string; name: string; vatRateBp: number; priceCents: number; } /** * Stand eines Gutscheins nach dem Code-Eingeben. Felder, die zur Art nicht * passen oder die der Server nicht sendet, fehlen im Modell (nie `null`). */ export interface VoucherCheck { type: VoucherKind; status: VoucherStatus; /** Die letzten vier Zeichen des Codes, fuer Anzeige und Beleg. */ codeSuffix: string; balanceCents?: number; faceValueCents?: number; quantity?: number; remainingQuantity?: number; vatRateBp?: number; article?: VoucherArticle; discountCents?: number; discountPercentBp?: number; validity?: VoucherValidity; /** * Befreit verkauft (Kleinunternehmer beim Verkauf, Satz 0): eine Einloesung * verteilt sich anteilig auf alle Saetze des Korbs, auch in einem * inzwischen steuerpflichtigen Konto. Fehlt bei aelteren Servern. */ exempt?: boolean; } /** Gutschein-Einstellungen der Kasse (Block `vouchers` aus `getKasseSettings`). */ export interface PosVoucherSettings { sale: boolean; valueVoucherType: 'multi_purpose' | 'single_purpose' | null; vatRateBp: number | null; } /** Ohne Block `vouchers` (alter Server, Konto ohne Schalter): Verkaufen ist aus. */ export declare const VOUCHER_SETTINGS_DEFAULTS: Readonly; /** * Block `vouchers` einer Einstellungs-Antwort, geschlossen im Zweifel: ist * irgendein Feld unstimmig, gilt der ganze Block als nicht gelesen und * Verkaufen bleibt aus (kein Wurf, sonst ginge das Laden aller Einstellungen * verloren). Stimmig heisst: `sale` ein Wahrheitswert, die Art * `multi_purpose`/`single_purpose`/`null`, der Satz eine ganze Zahl >= 0 oder * `null`; Mehrzweck traegt keinen Satz, Einzweck braucht einen, und ein * eingeschalteter Verkauf braucht eine Art. Ein ausgeschalteter Verkauf darf * eine Art behalten. */ export declare function posVoucherSettingsFromWire(block: unknown): PosVoucherSettings; /** * Gutschein am Code pruefen (Gutschein-Recht `voucherRedeem`). Der Code wird * tolerant eingelesen (Gross/klein, Bindestriche, `O`/`0`, `I`/`L`/`1`) und * vor dem Senden auf sein Pruefzeichen geprueft: ein Tippfehler geht nie ueber * das Netz, sondern endet mit `KasseneckValidationError`. Fachliche Fehler * kommen als `KasseneckApiError` mit dem Code des Servers * (`voucher_not_found`, `too_many_voucher_checks`, `not_permitted` …). */ export declare function checkVoucher(transport: InternerTransport, code: string): Promise; /** * Etikett eines Gutscheins noch einmal drucken (Gutschein-Recht * `voucherManage`). Antwort ist der Klartext-Code zum Drucken; er gehoert * nur in den Speicher bis zum Druck. Aufrufer duerfen ihn nicht protokollieren, * speichern oder in Meldungen nennen; Lesefehler dieser Antwort nennen ihn nie. */ export declare function reprintVoucherLabel(transport: InternerTransport, id: string): Promise<{ code: string; }>;