import { VoucherAction, VoucherType } from '../enums/index.js'; /** * Gutschein — Zwilling von `KeckVoucher` in * kasseneck_api/lib/models/keck_voucher.dart. * * `valueCents` ist der Gutscheinwert in **Cent** (exakte Integer-Arithmetik). * * `action`/`type` sind schon im Dart-Vorbild reine Strings (keine * Zusatzfelder) — beim Lesen bleibt ein unbekannter Wert deshalb ebenfalls * einfach der rohe Nutzlast-String (siehe [readEnumKey]); ob er zu den * bekannten Werten gehoert, entscheidet sich erst beim Schreiben. */ export interface Voucher { name?: string; code?: string; action: VoucherAction | string; type: VoucherType | string; valueCents?: number; /** Neue Form: Betrag in Cent (Verkauf, Einloesung, Auszahlung). */ amountCents?: number; /** Neue Form, Leistungsgutschein: verkaufter Artikel. */ articleId?: string; /** Neue Form, Leistungsgutschein: Menge (Verkauf) bzw. eingeloeste Menge. */ quantity?: number; /** Neue Form, Leistungsgutschein einloesen: Indizes der Belegpositionen. */ positions?: number[]; /** Neue Form, Auszahlung: Grund, 1 bis 200 Zeichen. */ reason?: string; voucherType?: string; voucherId?: string; /** Letzte vier Zeichen des Codes; der Klartext steht nie am Beleg. */ codeSuffix?: string; vatRateBp?: number; article?: VoucherArticle; balanceAfterCents?: number; remainingQuantityAfter?: number; taxedWith?: string; exempt?: boolean; zeroRateBucket?: boolean; } /** * Ein ausgestellter Gutschein in der Antwort von `createReceipt` unter `/v3` * (`data.issuedVouchers[]`): der Klartext-Code erscheint hier einmalig fuer das Etikett. */ export interface IssuedVoucher { id: string; /** Klartext-Code; nie in Logs oder Fehlertexte schreiben. */ code: string; type: string; index: number; codeSuffix: string; faceValueCents?: number; quantity?: number; /** Nur bei Leistungsgutscheinen: Name des verkauften Artikels; sonst fehlt das Feld. */ articleName?: string; validity?: { pattern: string; redeemableUntil: string | null; refundableUntil: string | null; validUntil: string | null; }; } /** Artikel eines Leistungsgutscheins, wie der Server ihn am Beleg festhaelt. */ export interface VoucherArticle { id: string; name: string; vatRateBp: number; priceCents: number; } /** * Nutzlast eines Gutscheins. Altform: nur `valueCents` (ganze Cent); `value` * (Euro) kommt nur beim Lesen vor: der Server legt es in seinen Antworten * daneben, gelesen wird es nur, wenn `valueCents` fehlt. Neue Form: roh mit * `amountCents` und den weiteren Feldern; gesetzte Feldern gehen hinaus, * fehlende fehlen (kein `valueCents: null` an der neuen Form). * `name` und `code` gehen nur hinaus, wenn sie gesetzt sind. */ export interface VoucherPayload { name?: string | null; code?: string | null; action: string; type: string; value?: number | null; valueCents?: number | null; amountCents?: number; articleId?: string; quantity?: number; positions?: number[]; reason?: string; voucherType?: string; voucherId?: string; codeSuffix?: string; vatRateBp?: number; article?: VoucherArticle; balanceAfterCents?: number; remainingQuantityAfter?: number; taxedWith?: string; exempt?: boolean; zeroRateBucket?: boolean; } /** Arten der neuen Gutscheinform (die Altwerte sind `value` und `promo`). */ export declare const NEUE_GUTSCHEINARTEN: readonly string[]; /** Gehoert der Gutschein zur neuen Form (Art oder Aktion `payout`)? */ export declare function isNewFormVoucher(voucher: Pick): boolean; /** Felder, die nur der Server setzt; an einem Wunsch sind sie `voucher_invalid`. */ export declare const GUTSCHEIN_SERVERFELDER: readonly ["voucherId", "codeSuffix", "zeroRateBucket", "voucherType"]; /** Welche Serverfelder tragt der Gutschein (leere Liste = keines)? */ export declare function voucherServerFields(voucher: Voucher): string[]; export declare function toVoucherPayload(voucher: Voucher): VoucherPayload; /** * Ist der Gutschein an das Backend sendbar? Zwilling von `KeckVoucher.isValid` * im Flutter-Vorbild: Wert- und Aktionsgutscheine brauchen einen Wert, * Aktionsgutscheine duerfen nur eingeloest (nicht verkauft) werden, und ein * gesetzter Wert muss positiv sein. */ export declare function voucherIsValid(voucher: Voucher): boolean; export declare function fromVoucherPayload(payload: VoucherPayload): Voucher;