/** * Inventur der Lager-API (Lager-Kern Stufe 3): anlegen, zaehlen, Zaehlungen * stornieren, pruefen, nachzaehlen, abschliessen, abbrechen, Inventurprotokoll * holen; dazu die Listen der Inventuren, Positionen und Zaehlungen. * * Ablauf: `createStocktake` → `recordStocktakeCount` (beliebig oft, auch von * mehreren Geraeten; je Position addiert) → `reviewStocktake` (erst jetzt Soll * und Differenz) → bei Bedarf `recountStocktake` und erneut `reviewStocktake` * → `closeStocktake` → `getStocktakePdf`. Pruefen und Abschliessen rechnet der * Server im Hintergrund: die Antwort traegt den Zwischenstand * (`review.complete: false` bzw. `status: 'closing'`), `getStocktake` den * Fortgang. * * **Blind:** vor `review` traegt keine Antwort ein Soll; `blind: false` zeigt * beim Zaehlen nur den heutigen Buchbestand (`bookStockNow`), nie das Soll * zur Referenzzeit. * * Rechte wie in Stufe 5b: Lesen mit jedem Schluessel, alles Schreibende (auch * Zaehlen) mit dem Konto-Schalter „Lager-API schreiben“ (Test-Schluessel * immer), sonst `inventory_api_not_enabled`; Werte und das Protokoll mit * Werten nur mit `lagerApi.kosten`. * * **Vor dem Senden geprueft wird nur, was ohne Netz sicher falsch ist:** * `idempotencyKey` (Pflicht bei jedem Schreiben, 1–120 Zeichen), fehlende * Kennungen (`stocktakeId`, `articleId`, `countId`, `locationId`), `scope` * kein Objekt, eine Menge, die keine Ganzzahl ist (Tausendstel), ein leerer * Grund, `items` beim Nachzaehlen leer oder ohne `articleId`, * `serialNumbers` keine Liste, `uncountedAsZero` kein Wahrheitswert. Alles * Fachliche (Umfang, Stichtag, Seriennummern, Zustand) prueft der Server. * * **Wiederholen** wie bei jedem Schreiben: nach `outcome: 'unknown'` denselben * Aufruf mit **demselben** `idempotencyKey`. Eine Zaehlung wirkt dann genau * einmal (das Zaehldokument ist selbst der Nachweis); ein neuer Schluessel * zaehlte die Ware ein zweites Mal. */ import type { ApiCall, InternerPdfOderDatenTransport, InternerTransport } from '../client/aufrufe.js'; import type { CancelStocktakeRequest, CloseStocktakeRequest, CloseStocktakeResult, CreateStocktakeRequest, RecordStocktakeCountRequest, RecountStocktakeRequest, ReviewStocktakeRequest, Stocktake, StocktakeCount, StocktakeCountListQuery, StocktakeCountPage, StocktakeCountResult, StocktakeItem, StocktakeItemListQuery, StocktakeItemPage, StocktakeListQuery, StocktakePage, StocktakePdf, VoidStocktakeCountRequest } from './typen.js'; type Params = Record; /** * Legt eine Inventur an. Je Standort hoechstens eine offene * (`stocktake_location_busy`, `data.stocktakeId` nennt sie); Umfang `groups` * bzw. `articles` nur mit bestandsgefuehrten Artikeln (`article_not_tracked`). * Jede Inventur beginnt in `counting`. */ export declare function createStocktake(transport: InternerTransport, request: CreateStocktakeRequest): Promise; /** * Inventuren des Kontos. Ohne `updatedSince` zuletzt geaenderte zuerst; mit * `updatedSince` aufsteigend nach `updatedAt` und inklusive (Abgleich: das * groesste gesehene `updatedAt` als naechstes `updatedSince`). Filter * `status` und `locationId`. */ export declare function listStocktakes(transport: InternerTransport, query?: StocktakeListQuery): Promise; /** Alle Inventuren der Abfrage, Seite fuer Seite, in der Reihenfolge von [listStocktakes]. */ export declare function iterateStocktakes(transport: InternerTransport, query?: StocktakeListQuery): AsyncGenerator; /** Eine Inventur samt `progress.counted` (gezaehlte Positionen). */ export declare function getStocktake(transport: InternerTransport, stocktakeId: string): Promise; /** Positionen einer Inventur nach Kennung; `openOnly` = ungezaehlt bzw. in `review` zum Nachzaehlen offen. */ export declare function listStocktakeItems(transport: InternerTransport, query: StocktakeItemListQuery): Promise; export declare function iterateStocktakeItems(transport: InternerTransport, query: StocktakeItemListQuery): AsyncGenerator; /** Zaehlungen einer Inventur, neueste zuerst, auch stornierte; mit `articleId` nur die des Artikels. */ export declare function listStocktakeCounts(transport: InternerTransport, query: StocktakeCountListQuery): Promise; export declare function iterateStocktakeCounts(transport: InternerTransport, query: StocktakeCountListQuery): AsyncGenerator; /** Pruefung einer Zaehlung vor dem Senden, geteilt mit dem Kassenweg. Paketintern. */ export declare function zaehlungPruefen(name: ApiCall, p: Params): void; /** Pruefung eines Stornos vor dem Senden, geteilt mit dem Kassenweg. Paketintern. */ export declare function stornoPruefen(name: ApiCall, p: Params): void; /** * Eine Zaehlung. Antwort: die Zaehlung und ihre Position danach (Summe der * Runde in `item.quantity`). Gezaehlt wird in `counting`, in `review` nur an * Positionen, die zum Nachzaehlen frei sind (sonst `stocktake_not_open`). */ export declare function recordStocktakeCount(transport: InternerTransport, request: RecordStocktakeCountRequest): Promise; /** Storniert eine Zaehlung mit Grund; die Position wird aus den uebrigen Zaehlungen neu summiert. */ export declare function voidStocktakeCount(transport: InternerTransport, request: VoidStocktakeCountRequest): Promise; /** * Pruefen: `counting` → `review`, in `review` neu rechnen (nach dem * Nachzaehlen). Die Antwort kommt sofort mit `review.complete: false`; Soll * und Differenz stehen an den Positionen, sobald `complete` `true` ist. */ export declare function reviewStocktake(transport: InternerTransport, request: ReviewStocktakeRequest): Promise; /** Nachzaehlen: je genannter Position eine neue Runde; danach zaehlen und erneut [reviewStocktake]. */ export declare function recountStocktake(transport: InternerTransport, request: RecountStocktakeRequest): Promise; /** * Abschliessen (nur aus `review`, sonst `stocktake_not_in_review`; offene * Nachzaehlungen ergeben `stocktake_recount_open`). Der Server bucht in * Teilen weiter; die Antwort traegt meist `status: 'closing'`. Ein erneuter * Aufruf waehrend `closing` stoesst den Abschluss wieder an. */ export declare function closeStocktake(transport: InternerTransport, request: CloseStocktakeRequest): Promise; /** Abbrechen mit Grund (aus `counting` oder `review`); der Standort ist danach frei. */ export declare function cancelStocktake(transport: InternerTransport, request: CancelStocktakeRequest): Promise; /** * Das Inventurprotokoll (PDF), erst nach dem Abschluss (`stocktake_not_closed`, * auch fuer eine abgebrochene Inventur). Mit `lagerApi.kosten` die Fassung mit * Werten, sonst die nur mit Mengen. Bis 9 MiB kommt die Datei selbst * (`kind: 'pdf'`), darueber ein signierter Lese-Link fuer 15 Minuten * (`kind: 'download'`); die geladene Datei an `download.sha256` pruefen. * * Als freie Funktion braucht sie den Transport aus `createPdfOrDataTransport` * (Paketwurzel): ein JSON-Transport laese die Datei als Text, ein reiner * Binaer-Transport kennt den Link nicht. [createInventoryClient] bindet ihn selbst. */ export declare function getStocktakePdf(transport: InternerPdfOderDatenTransport, stocktakeId: string): Promise; export {};