import type { InternerTransport } from '../client/aufrufe.js'; /** * Artikelgruppen (Kategorien der Kachel-Kasse) und Artikel in der Form, die * die Kacheln brauchen, Backend: `article-endpoints.js` * (`listMyArticleGroups`, `listMyArticles` mit `groupId`/`tile`). */ export interface ArticleGroup { id: string; name: string; /** #RRGGBB */ color: string; /** Kategorie-Symbol (Emoji, hoechstens zwei Zeichen) oder null. */ symbol: string | null; sort: number; vatRate: number | null; } export interface ArticleGroupPayload { id?: string | null; name?: string | null; color?: string | null; symbol?: string | null; sort?: number | null; vatRate?: number | null; } export declare function fromArticleGroupPayload(p: ArticleGroupPayload): ArticleGroup; /** * Mengenregel eines Artikels (Draht `quantityRule`): `piece` = ganze Stueck * (1, 2, 3 ...), `decimal` = Kommamenge in der Einheit (0,250 kg, 1,5 m). * Beleg und DEP bleiben ganzzahlig: eine Kommamenge wird an der Kasse als EINE * Position mit ausgerechnetem Betrag gebucht, die Bezeichnung traegt die Menge * („Wurst 0,250 kg“). Siehe [quantityRuleForUnit] fuer die Vorgabe je Einheit. */ export declare const QUANTITY_RULES: readonly ["piece", "decimal"]; export type QuantityRule = typeof QUANTITY_RULES[number]; export interface QuantityDefaults { rule: QuantityRule; /** Kasse fragt beim Antippen nach der Menge (Wurst nach Gewicht: ja; Semmel: nein). */ ask: boolean; /** Nachkommastellen bei `decimal`. */ decimals: number; } /** Vorgabe je Einheit: was der Betrieb bei einem neuen Artikel bekommt und aendern darf. */ export declare function quantityRuleForUnit(unit: string | null | undefined): QuantityDefaults; /** Wirksame Regel eines Artikels: gespeicherte Angabe schlaegt die Vorgabe der Einheit. */ export declare function quantityDefaults(a: Pick): QuantityDefaults; /** Artikel, wie ihn die Kasse fuer Kacheln und Belegpositionen braucht. */ export interface PosArticle { id: string; name: string; unitPriceCents: number | null; vatRate: number | null; unit: string; groupId: string | null; /** Erloesgruppe (Buchhaltung); null = keine. */ revenueGroupId: string | null; /** Kachel sichtbar (Draht `tile.visible`, fehlt = sichtbar). */ visible: boolean; /** Reihenfolge der Kachel (Draht `tile.sort`). */ sort: number; active: boolean; /** Gespeicherte Mengenregel; null = Vorgabe der Einheit. */ quantityRule: QuantityRule | null; /** Gespeichert: Kasse fragt nach der Menge; null = Vorgabe der Einheit. */ askQuantity: boolean | null; /** Hoechstmenge je Beleg (bei kg/l/m auch Kommazahl); null = keine Grenze. */ maxQuantity: number | null; /** * Standorte, an denen der Artikel gefuehrt wird (Lager-Kern Stufe 2, innen * `standorte`); `null`, wenn der Artikel keine Angabe traegt. Wie die Kasse * daraus Kacheln filtert, entscheidet die Oberflaeche. Optional, damit * bestehende Literale von Verbrauchern weiter uebersetzen; der Leser * (`fromPosArticlePayload`) setzt das Feld immer (`null` oder Liste). */ stockLocationIds?: string[] | null; /** * Artikelnummer des Betriebs; null = keine. Diese und die drei folgenden * Felder (Scanner-Suche, Lager) sind optional wie `stockLocationIds`, der * Leser setzt sie immer. Texte kommen unveraendert durch (fuehrende Nullen, * Schreibweise); nur ein leerer Text (auch reiner Leerraum) wird `null`. */ number?: string | null; /** EAN/GTIN, wie gespeichert; null = keine. */ ean?: string | null; /** Interner Code des Betriebs (eigener Barcode/QR); null = keiner. */ internalCode?: string | null; /** * Bestandsgefuehrt (Lager-Modul). `null`, wenn die Antwort keine Angabe * traegt (aeltere Backends) -- dann nicht aus anderen Feldern ableiten. */ stockTracked?: boolean | null; } /** Deckelt eine gewuenschte Menge an der Hoechstmenge des Artikels (null = keine Grenze). */ export declare function allowedQuantity(a: Pick, wanted: number): number; /** Ein Artikel am Draht `/api/v3` (`listMyArticles`), soweit dieses Paket ihn liest. */ export interface PosArticlePayload { id?: string | null; name?: string | null; unitPriceCents?: number | null; vatRate?: number | null; unit?: string | null; groupId?: string | null; revenueGroupId?: string | null; tile?: { visible?: boolean | null; sort?: number | null; } | null; active?: boolean | null; quantityRule?: string | null; askQuantity?: boolean | null; maxQuantity?: number | null; stockLocationIds?: string[] | null; number?: string | null; ean?: string | null; internalCode?: string | null; stockTracked?: boolean | null; } export declare function fromPosArticlePayload(p: PosArticlePayload): PosArticle; /** * Die Liste `data.` einer Antwort, jedes Element durch `lesen` (mit * seinem Index fuer Fehlermeldungen). Paketintern: auch `lager.ts` liest so. */ export declare function liste(daten: unknown, feld: string, name: string, lesen: (e: unknown, index: number) => T): T[]; export declare function listMyArticleGroups(transport: InternerTransport): Promise; export declare function listMyArticles(transport: InternerTransport): Promise;