inventory library

Die Lager-API: Artikel, Standorte, Bestand und Lagerprotokoll lesen, Konto-Webhooks verwalten und eingehende Zustellungen pruefen (Backend Stufe 5a); Artikel anlegen und aendern, Bestand buchen und Ware reservieren (Stufe 5b, seit 10.4); Variantengruppen (Stufe 5c, seit 10.5); Inventur (Lager-Kern Stufe 3, seit 10.7) – Zwilling von @kreiseck/kasseneck-api/inventory im JS-Paket.

Der Schluessel ist der api_key des Kontos, ohne Kassen-Token. Er gehoert auf einen Server (etwa das Backend eines Online-Shops), nie in eine App, die Kunden installieren. Lesen braucht das Modul lager, Schreiben dazu den Konto-Schalter „Lager-API schreiben“; Einkaufspreise und Lagerwerte kommen nur mit dem Recht costs. Jede schreibende Anfrage traegt einen idempotencyKey.

Mengen in Tausendstel der Basiseinheit, Geld in Cent, Einkaufspreise in Mikro-Euro; alles Ganzzahlen.

StockLevel gibt es gleichnamig im Kassenweg (pos.dart); wer beide Bibliotheken einbindet, nimmt fuer eine ein Praefix.

Classes

AddVariantRequest
Legt eine Variante in einer aktiven Gruppe an (addVariant). Antwort: der Artikel wie createArticle.
Article
Ein Artikel, wie getArticle, listArticles, lookupArticleByCode und die Ereignisse article.* ihn senden.
ArticleInput
Die Felder eines Artikels beim Anlegen.
ArticlePage
Eine Seite von listArticles.
CancelStocktakeRequest
Abbrechen (cancelStocktake, aus counting oder review); der Standort ist danach wieder frei.
ChangeStockConditionRequest
Ware zwischen verkaufbar und defekt umbuchen (changeStockCondition). Ueberzieht nie (exceeds_stock).
CloseStocktakeRequest
Abschliessen (closeStocktake, nur aus review).
CloseStocktakeResult
Antwort von closeStocktake: der Kopf (meist closing, der Server bucht im Hintergrund weiter) und Hinweise wie recount_uncounted.
CreateArticleRequest
Legt einen Artikel an (createArticle).
CreateReservationRequest
Reservieren (createReservation, Checkout im Shop): ganz oder gar nicht. Fehlt verfuegbarer Bestand an einer Position, entsteht nichts und der Fehler insufficient_available nennt die fehlenden Positionen (inventoryShortfalls). Nur bestandsgefuehrte Artikel; gleiche Artikel am gleichen Standort werden zusammengezaehlt.
CreateStocktakeRequest
Legt eine Inventur an (createStocktake). Je Standort hoechstens eine offene (stocktake_location_busy, inventoryBusyStocktakeId nennt sie); hoechstens stocktakeItemsMax Positionen.
CreateVariantGroupRequest
Legt eine Variantengruppe an (createVariantGroup): mit createMatrix: true samt allen Kombinationen (hoechstens 100) oder mit den genannten variants (hoechstens 100), nie beides. Ohne beides entsteht die Gruppe ohne Variante. Die Antwort traegt die Gruppe mit variants (Kennungen und Merkmale), nicht die Artikel.
DeactivateArticleRequest
Stilllegen (deactivateArticle): active: false; Code und eigene Kennungen werden frei. Schon stillgelegt = dieselbe Antwort, nichts geschrieben. Den Bestand behaelt der Artikel, gebucht werden darf weiter.
ExtendReservationRequest
Verlaengern (extendReservation): neuer Ablauf = jetzt + Minuten. Nur eine aktive, noch nicht faellige Reservierung (reservation_not_active).
GoodsReceiptItem
Eine Position eines Wareneingangs.
GoodsReceiptPreview
Antwort von previewGoodsReceipt: was der Wareneingang buchen wuerde.
GoodsReceiptPreviewLine
Eine Zeile der Wareneingangs-Vorschau (previewGoodsReceipt).
GoodsReceiptPreviewRequest
Vorschau eines Wareneingangs (previewGoodsReceipt, am Draht receiveGoods mit dryRun: true): dieselben Felder wie ReceiveGoodsRequest, der Schluessel ist freigestellt. Ein mitgesendeter Schluessel wird nur auf seine Form geprueft und nicht verbraucht; dieselbe Anfrage laesst sich danach mit ihm buchen. Das Schreibrecht braucht die Vorschau trotzdem; den Standort prueft erst die Buchung.
GoodsReceiptSupplier
Lieferant eines Wareneingangs.
InventoryArticleEvent
article.created, article.updated oder article.deactivated (type): der Artikel wie getArticle ihn liefert, ohne Einkaufspreise.
InventoryClient
InventoryReservationEvent
reservation.expired, reservation.released oder reservation.redeemed (type): die Reservierung wie getReservation sie liefert, mit dem Status nach dem Vorgang. released und redeemed kommen bei jeder wirksamen Freigabe bzw. Einloesung, auch einer teilweisen; dann bleibt der Status active. Seit 10.4.
InventoryShortfall
Eine Position, fuer die beim Reservieren der verfuegbare Bestand nicht reicht (insufficient_available, siehe inventoryShortfalls).
InventoryStockBelowMinimumEvent
stock.below_minimum: einmal beim Unterschreiten des Mindestbestands des Standorts.
InventoryStockChangedEvent
stock.changed: der aktuelle Stand eines Artikels an einem Standort. Einen gespeicherten Stand nur ueberschreiben, wenn data.sequence groesser ist.
InventoryTransport
InventoryVariantGroupEvent
variant_group.created oder variant_group.updated (type): die Variantengruppe wie getVariantGroup sie liefert. updated kommt nur bei einer aussen sichtbaren Aenderung (neuer Wert, neue oder stillgelegte Variante, Name, Vorgaben, Stilllegen der Gruppe). Zwei Zustellungen koennen sich ueberholen: den Stand nur uebernehmen, wenn data.updatedAt neuer ist als der gespeicherte. Seit 10.5.
InventoryWarning
Ein Hinweis einer Buchung: sie hat gewirkt, es gibt nur etwas zu wissen.
InventoryWebhook
Ein Konto-Webhook.
InventoryWebhookDelivery
Eine Zustellung aus listWebhookDeliveries.
InventoryWebhookEvent
Eine Zustellung als typisiertes Ereignis; die Unterklasse sagt, welches.
InventoryWebhookLastDelivery
Die letzte Zustellung an einen Webhook.
InventoryWebhookList
Antwort von listWebhooks.
InventoryWebhookTestDelivery
Eine Probezustellung aus sendWebhookTest.
InventoryWebhookTestResult
Antwort von sendWebhookTest.
InventoryWebhookWithSecret
Antwort von createWebhook und rotateWebhookSecret.
LandedCost
Nebenkosten eines Wareneingangs.
Location
Ein Standort des Kontos (Lager, Geschaeft, Fahrzeug).
LocationAddress
Anschrift eines Standorts; ein leerer Teil ist null.
PdfOrData
Ergebnis von InventoryTransport.callPdfOrData: die Datei als Bytes oder die data einer Erfolgshuelle (etwa ein Lese-Link, wenn die Datei zu gross fuer die Antwort ist). Zwilling von PdfOrData im JS-Paket.
PdfOrDataFile
Die Antwort war eine Datei (%PDF).
PdfOrDataPayload
Die Antwort war eine Erfolgshuelle; data ohne Huelle.
ReceiveGoodsRequest
Bucht einen Wareneingang (receiveGoods). Preise und Nebenkosten darf jeder Schreibende senden (so bekommt der Bestand seinen Wert); zurueck kommen Werte nur mit dem Recht costs und nur in der Vorschau (GoodsReceiptPreviewRequest).
RecordStockLossRequest
Abgang (recordStockLoss: Bruch, Schwund, Entnahme …). Ueberzieht nie (exceeds_stock). reason: 'other' braucht note (note_required), reason: 'withdrawal' braucht withdrawalType (withdrawal_type_required).
RecordStocktakeCountRequest
Eine Zaehlung (recordStocktakeCount). Menge in Tausendstel (0 = leer gezaehlt; Stueckartikel und Einzelstuecke nur ganze Stueck), Einzelstueck mit je Stueck genau einer Seriennummer. Mehrere Zaehlungen derselben Position werden addiert.
RecountStocktakeRequest
Nachzaehlen (recountStocktake, nur in review): je Position eine neue Runde; danach zaehlen und erneut pruefen.
ReleaseReservationItem
Eine Position einer Freigabe.
ReleaseReservationRequest
Freigeben (releaseReservation): ohne items alles, sonst je Position (ganz oder teilweise). Der Status wird erst released, wenn nichts mehr offen ist.
Reservation
Eine Reservierung, wie getReservation, jede schreibende Reservierungs-Antwort und die Ereignisse reservation.* sie senden.
ReservationItem
Eine Position einer Reservierung, Mengen in Tausendstel. Offen ist quantity - redeemed - released (open).
ReservationItemInput
Eine Position einer neuen Reservierung.
ReservationPage
Eine Seite von listReservations, neueste zuerst.
ReverseStockMovementRequest
Gegenbuchung (reverseStockMovement): nimmt einen ganzen Vorgang zurueck. Verkaeufe und Reservierungen gehen so nicht (reversal_not_supported), ein zweites Mal auch nicht (already_reversed).
ReviewStocktakeRequest
Pruefen (reviewStocktake): counting → review, in review neu rechnen (etwa nach dem Nachzaehlen).
StockAfter
Bestand am Standort nach einer Bewegung, in Tausendstel.
StockBelowMinimumEventData
Nutzlast von stock.below_minimum: nur beim Unterschreiten, nicht bei jedem weiteren Sinken.
StockChangedEventData
Nutzlast von stock.changed: der aktuelle Stand, nicht die Aenderung.
StockItem
Eine Position von Umbuchung, Abgang oder Zustandswechsel.
StockLevel
Bestand eines Artikels an einem Standort, Mengen in Tausendstel.
StockMovement
Eine Zeile des Lagerprotokolls; neueste zuerst.
StockMovementLot
Ein Los einer Bewegung.
StockMovementPage
Eine Seite von listStockMovements.
StockMovementSourceRef
Woher eine Bewegung kommt.
StockOperation
Antwort jeder Buchung (receiveGoods, transferStock, recordStockLoss, changeStockCondition, reverseStockMovement). Werte traegt sie nie. Eine Wiederholung mit demselben idempotencyKey liefert genau diese Antwort noch einmal.
StockPage
Eine Seite von listStock.
StockResult
Antwort von getStock.
Stocktake
Eine Inventur (Kopf), wie jeder Inventur-Aufruf ausser den Listen der Positionen und Zaehlungen sie sendet.
StocktakeActor
Wer etwas tat: Inhaber, Kasseneck-Admin, Kassen-Benutzer oder ein API-Schluessel.
StocktakeCancellation
Der Abbruch einer Inventur.
StocktakeClosing
Der Abschluss: er bucht in Teilen und laesst sich wieder aufnehmen.
StocktakeCount
Eine Zaehlung.
StocktakeCountPage
Eine Seite von listStocktakeCounts bzw. listMyStocktakeCounts, neueste zuerst.
StocktakeCountResult
Antwort von Zaehlen und Stornieren: die Zaehlung und ihre Position danach (Summe der Runde in StocktakeItem.quantity, kein Soll).
StocktakeCountVoided
Das Storno einer Zaehlung.
StocktakeInventoryLine
Eine Zeile des Inventars (nach dem Abschluss).
StocktakeItem
Eine Position: ein Artikel in einem Zustand (sellable bzw. defective).
StocktakeItemPage
Eine Seite von listStocktakeItems bzw. listMyStocktakeItems, nach Kennung.
StocktakeNotBooked
Was von einer Position nicht gebucht wurde, und warum.
StocktakePage
Eine Seite von listStocktakes.
StocktakePdf
Das Inventurprotokoll: als Datei (StocktakePdfFile) oder, ueber 9 MiB, als Lese-Link (StocktakePdfLink). Mit dem Recht costs die Fassung mit Werten, sonst die nur mit Mengen.
StocktakePdfDownload
Lese-Link auf das Inventurprotokoll, wenn es zu gross fuer die Antwort ist (ueber 9 MiB). Signiert und 15 Minuten gueltig; die geladene Datei an sha256 pruefen.
StocktakePdfFile
Das Inventurprotokoll als Datei (beginnt mit %PDF).
StocktakePdfInfo
Das Inventurprotokoll: ob es da ist, und die Pruefsummen der Fassungen, die der Aufrufer sehen darf.
Das Inventurprotokoll als Lese-Link: die Datei war zu gross fuer die Antwort.
StocktakeProgress
Fortschritt: Zahl der Positionen und ob Positionen zum Nachzaehlen offen sind.
StocktakeRecount
Ein Nachzaehlen-Auftrag an einer Position.
StocktakeRecountItem
Eine Position zum Nachzaehlen.
StocktakeReview
Die Pruefung: wann und von wem angestossen, ob Soll und Differenz schon gerechnet sind.
StocktakeScope
Umfang einer Inventur, bei der Anlage eingefroren.
StocktakeScopeInput
Umfang einer neuen Inventur.
StocktakeSeal
Siegelstand des Lagerprotokolls beim Abschluss: Wiener Tage YYYY-MM-DD. verified: null heisst „nicht fertig geprueft“, nie Bruch.
StocktakeTotals
Summen des Abschlusses (Anzahlen von Positionen; Werte nur mit dem Recht costs).
StocktakeWarning
Ein Hinweis zur Inventur, mit der Zahl der betroffenen Positionen. Er ist kein Fehler: der Vorgang hat gewirkt.
StockValue
Lagerwert eines Artikels. Derselbe Typ an der Kasse (pos.dart) und in der Lager-API (inventory.dart); er kommt nur, wenn Werte freigegeben sind: an der Kasse mit dem Recht stockCosts des Kassenbenutzers, in der Lager-API mit dem Konto-Schalter „Einkaufswerte per API“ (Recht costs).
TransferStockRequest
Umbuchung zwischen zwei Standorten (transferStock). Ueberzieht nie (exceeds_stock).
UpdateArticleRequest
Eine Aenderung (updateArticle): nur die genannten Felder, mindestens eines.
UpdateVariantGroupRequest
Aendert eine aktive Gruppe (updateVariantGroup): nur die genannten Felder, mindestens eines. defaults ist ein Teil-Update (VariantGroupDefaultsInput.clear leert einzelne Felder, clearDefaults alle). addAttributeValues haengt Werte an bestehende Merkmale an und uebergeht still, was es schon gibt (auch in anderer Gross-/Kleinschreibung): der Shop darf immer alle seine Werte senden. Werte entfernen und Merkmale ergaenzen gibt es nicht.
VariantAttribute
Ein Merkmal einer Variantengruppe mit seinen Werten, in der Reihenfolge der Gruppe. Dieselbe Form in der Anfrage (CreateVariantGroupRequest.attributes) und in der Antwort.
VariantGroup
Eine Variantengruppe, wie getVariantGroup, listVariantGroups, die schreibenden Gruppenaufrufe und die Ereignisse variant_group.* sie senden. Die Artikel selbst traegt sie nicht: die liest listArticles(variantGroupId: …).
VariantGroupDefaults
Vorgaben einer Gruppe: sie fuellen bei der Anlage einer Variante die Felder, die die Variante nicht selbst nennt. Ein spaeteres Aendern der Vorgaben aendert keine bestehende Variante (dafuer updateArticle). Ein Feld ohne Vorgabe ist null und fehlt in toJson.
VariantGroupDefaultsInput
Vorgaben einer Gruppe in einer Anfrage. Bei der Anlage fehlt ein Feld ohne Wert; bei einer Aenderung (updateVariantGroup) ist es ein Teil-Update: nur die genannten Felder, clear leert einzelne (am Draht null).
VariantGroupMember
Eine Variante in der Liste ihrer Gruppe.
VariantGroupPage
Eine Seite von listVariantGroups, nach updatedAt aufsteigend.
VariantInput
Eine neue Variante: ihre Merkmalswerte und die Felder eines Artikels wie bei CreateArticleRequest. Was fehlt, fuellen die Vorgaben der Gruppe; ohne name heisst sie „<Gruppe> <Wert1> <Wert2>“ in Merkmalsreihenfolge. Mit ean wird sie ein Fremdartikel, sonst vergibt der Server den naechsten eigenen Code.
VoidStocktakeCountRequest
Storniert eine Zaehlung (voidStocktakeCount); die Position wird aus den uebrigen Zaehlungen neu summiert.

Enums

ErrorOutcome
Ausgang eines gescheiterten Aufrufs. rejected: nichts geschehen. unknown: der Vorgang kann ausgefuehrt sein (ein Beleg signiert, ein Storno gebucht, Ware gebucht, eine Rechnung ausgestellt); nie blind wiederholen. Belege, Stornos und Zahlungen nachlesen; ein Aufruf mit idempotencyKey nur mit demselben Schluessel erneut senden (wirkt genau einmal, ein neuer buchte doppelt); ohne Schluessel erst nachlesen.

Constants

inventoryEndpoints → const List<String>
Die 44 Endpunkte (14 aus 5a, 13 aus 5b, 5 aus 5c, 12 der Inventur), in der Reihenfolge von endpoints.public.
inventoryErrorCodes → const List<String>
Die Codes, die die Lager-Endpunkte selbst senden (errorCodes.inventory; register_user_not_allowed steht bei inventoryRequestErrorCodes). validation traegt errors: [{field, message}], rate_limited traegt retryAfterSec (dazu die Kopfzeile Retry-After), auch bei sendWebhookTest nach 20 Probesendungen je Wiener Kalendertag (dann bis Mitternacht in Wien).
inventoryIdempotencyKeyMax → const int
Laengster idempotencyKey in Zeichen; laenger weist schon der Client ab, er schneidet nie ab.
inventoryListLimitMax → const int
Groesstes limit einer Liste; ohne Angabe liefert der Server 50.
inventoryRequestErrorCodes → const List<String>
Codes, die Anmeldung und Rand auf jedem Lager-Aufruf erzeugen koennen, soweit sie nicht schon in inventoryErrorCodes stehen; zuletzt route_missing (Code des Pakets). Dieselbe Ableitung wie bei der Rechnungs-API.
inventoryWarningCodes → const List<String>
Hinweise einer Buchung (warnings[].code, warningCodes.inventory). Sie sind keine Fehler: die Buchung hat gewirkt. insufficient_stock gibt es nur beim Verkauf (Abgang, Umbuchung und Zustandswechsel weisen mit exceeds_stock ab), below_minimum misst am verfuegbaren Bestand (onHand - reserved) gegen den Mindestbestand des Standorts, reservation_exceeded meldet eine Rechnung, die mehr verkauft als reserviert war.
inventoryWebhookEnvelopeFields → const List<String>
Die Felder der Huelle jeder Zustellung, in der Reihenfolge am Draht. Statt partnerId (Partner-Webhooks) traegt sie accountId; test steht nur auf Probesendungen.
inventoryWebhookEvents → const List<String>
Die Ereignisse, die ein Konto-Webhook abonnieren kann, in der Reihenfolge von listWebhooks().events. reservation.* (seit 10.4) tragen die Reservierung wie getReservation, mit dem Status danach: reservation.released und reservation.redeemed kommen bei jeder wirksamen Freigabe bzw. Einloesung, auch einer teilweisen (dann bleibt der Status active). variant_group.created und variant_group.updated (seit 10.5) tragen die Variantengruppe wie getVariantGroup; updated kommt nur bei einer aussen sichtbaren Aenderung (neuer Wert, neue oder stillgelegte Variante, Name, Vorgaben, Stilllegen der Gruppe).
inventoryWebhookLimit → const int
Hoechstzahl der Webhooks je Konto (webhook_limit).
kInventoryBaseUrl → const String
Standardadresse der Lager-API (die oeffentliche Basis).
landedCostAllocations → const List<String>
Verteilung der Nebenkosten (allocation, Katalog LAGER_VERTEILUNG); Vorgabe des Servers value.
landedCostTypes → const List<String>
Art von Nebenkosten eines Wareneingangs (landedCosts[].type, Katalog LAGER_NEBENKOSTEN_ART). discount und cash_discount mindern den Wert.
locationTypes → const List<String>
Art eines Standorts (Katalog STANDORT_TYP).
reservationMinutesMax → const int
Laengste Haltedauer einer Reservierung in Minuten (30 Tage).
reservationMinutesMin → const int
Kuerzeste Haltedauer einer Reservierung in Minuten (expiresInMinutes).
reservationStatuses → const List<String>
Stand einer Reservierung (Katalog RESERVIERUNG_STATUS). Nur active haelt Ware zurueck; die drei anderen sind endgueltig: redeemed (ueber eine Rechnung eingeloest), released (freigegeben), expired (abgelaufen).
stockChangeCauses → const List<String>
Ursache eines stock.changed (Katalog LAGER_URSACHE), abgeleitet aus der juengsten Bewegung mit Mengenwirkung. other: keine Regel passt oder es gibt keine Bewegung (dann ist movementId null).
stockConditions → const List<String>
Zustand der Ware an einer Bewegung (Katalog LAGER_ZUSTAND).
stockKinds → const List<String>
Bestandsart eines Artikels (stockKind): quantity = Menge, serial = Einzelstueck mit Seriennummer. Kein Katalog des Vokabulars, der Server uebersetzt das Feld selbst; nach der ersten Bewegung fest (stock_kind_locked).
stockLossReasons → const List<String>
Grund eines Abgangs (RecordStockLossRequest.reason, Katalog LAGER_ABGANG_GRUND). other braucht note.
stockMovementSources → const List<String>
Woher eine Bewegung kommt (Katalog BEWEGUNG_QUELLE), zugleich der Filter source.
stockMovementTypes → const List<String>
Art einer Lagerbewegung (Katalog BEWEGUNG_ART), zugleich der Filter type. goods_receipt ist der Wareneingang, takeover der uebernommene Anfangsbestand (auch per Import). receipt gibt es hier nicht: das ist der Kassenbeleg und steht nur als Quelle (stockMovementSources). reservation (seit 10.4) aendert nur reserved: quantityDelta ist 0, die Menge steht in reservedDelta. Neue Arten stehen hinten.
stocktakeActorTypes → const List<String>
Wer handelte (Katalog INVENTUR_AKTEUR): Inhaber, Kasseneck-Admin, Kassen-Benutzer, API-Schluessel.
stocktakeCheckReasons → const List<String>
Warum eine Position in der Pruefung „pruefen“ traegt (Katalog INVENTUR_PRUEFGRUND): Bewegung zwischen der ersten und letzten Zaehlung, Zaehlung mehr als 10 Tage vom Stichtag, Seriennummern weichen ab, nicht gezaehlt.
stocktakeCountsPerItemMax → const int
Zaehlungen je Position und Runde (too_many_counts), hoechstens so viele Seriennummern je Zaehlung.
stocktakeInventoryAsOf → const List<String>
Zu welchem Zeitpunkt das Inventar im Protokoll steht (Katalog INVENTUR_INVENTAR_ZUM): key_date (auf das Ende des Stichtags fortgeschrieben, Abschluss nach dem Stichtag) oder count_date (Menge zur Aufnahme: permanente Inventur oder Abschluss vor dem Stichtag).
stocktakeItemsMax → const int
Positionen je Inventur (too_many_positions; groessere Bestaende in mehreren Inventuren nacheinander).
stocktakeNotBookedReasons → const List<String>
Warum eine Position nicht oder nicht ganz gebucht wurde (notBooked.code, Katalog INVENTUR_NICHT_GEBUCHT). Dazu kommen Codes, die schon englisch sind (serial_not_in_stock, serial_already_exists, article_not_found); das Modell laesst darum jeden Text stehen.
stocktakeRecountItemsMax → const int
Positionen je recountStocktake.
stocktakeScopeTypes → const List<String>
Umfang einer Inventur (Katalog INVENTUR_UMFANG): alle bestandsgefuehrten Artikel des Standorts, Artikelgruppen oder genannte Artikel.
stocktakeSources → const List<String>
Woher eine Zaehlung bzw. Inventur kam (Katalog INVENTUR_QUELLE).
stocktakeStatuses → const List<String>
Stand einer Inventur (Katalog INVENTUR_STATUS). Gezaehlt wird in counting; review rechnet Soll und Differenz (erst ab hier sichtbar, blind); closing bucht den Abschluss in Teilen; closed und cancelled sind endgueltig. creating steht nur, solange eine grosse Anlage ihre Positionen schreibt.
stocktakeTypes → const List<String>
Art einer Inventur (Katalog INVENTUR_ART): key_date zu einem Stichtag (keyDate), perpetual (permanente Inventur, ohne Stichtag).
variantAttributesMax → const int
Merkmale je Gruppe (Schluessel ^[a-z0-9_]{1,32}$, eindeutig; __…__ ist reserviert).
variantGroupActiveMax → const int
Aktive Varianten je Gruppe (variant_limit).
variantMatrixMax → const int
Kombinationen bei createMatrix: true und hoechstens so viele Eintraege in variants je Anfrage.
variantValuesMax → const int
Werte je Merkmal (je 1–30 Zeichen, eindeutig ohne Gross/Klein).
webhookDeliveryHeader → const String
Der Kopf mit der Zustell-Kennung; bei Wiederholungen dieselbe.
webhookDeliveryStatuses → const List<String>
Stand einer Zustellung (Katalog ZUSTELLUNG, derselbe wie bei Partner-Webhooks). dropped: der Webhook wurde vor der Faelligkeit deaktiviert oder geloescht.
webhookEventHeader → const String
Der Kopf mit dem Ereignisnamen (dasselbe wie type im Rumpf).
webhookSignatureHeader → const String
Der Kopf, in dem die Signatur steht.
webhookToleranceSec → const int
Erlaubte Abweichung des Zeitstempels in Sekunden, in beide Richtungen.
withdrawalTypes → const List<String>
Art einer Entnahme (withdrawalType, Katalog LAGER_ENTNAHME_ART); Pflicht bei reason: 'withdrawal', sonst nicht erlaubt.

Functions

inventoryBusyStocktakeId(Object? error) → String?
Die Inventur, die einen Standort belegt (stocktake_location_busy, details['stocktakeId']): weiterzaehlen statt neu anlegen. null, wenn der Fehler ein anderer ist oder der Server keine Kennung nennt.
inventoryErrorCode(Object? error) → String?
Der Fehlercode eines geworfenen Fehlers; null, wenn es keiner der Lager-API ist.
inventoryFieldErrors(Object? error) → List<({String field, String message})>
Die Feldfehler einer validation-Antwort; leer, wenn es keine sind.
inventoryRetryAfterSec(Object? error) → int?
Wie lange rate_limited noch gilt, in Sekunden (data.retryAfterSec, dasselbe wie die Kopfzeile Retry-After). null, wenn der Fehler kein rate_limited ist oder der Server keine Angabe macht. Die Grenze gilt je Konto (etwa 20 Anfragen je Sekunde, kurze Spitzen bis 40).
inventoryShortfalls(Object? error) → List<InventoryShortfall>
Die Positionen, fuer die beim Reservieren der verfuegbare Bestand nicht reicht (insufficient_available, details['details']): je Artikel und Standort angefragt und verfuegbar, in Tausendstel. Leer, wenn der Fehler ein anderer ist. Es fehlen nur diese Positionen; reserviert wurde nichts (ganz oder gar nicht).
isInventoryError(Object? error, [String? code]) → bool
Kurzform fuer on Object catch (e) { if (isInventoryError(e, 'article_not_found')) … }; ohne code jeder Code der Lager-API.
isInventoryErrorCode(String? code) → bool
Ein Code, den ein Lager-Aufruf liefern kann?
isInventoryWarningCode(String? code) → bool
true fuer einen Hinweis-Code einer Buchung (StockOperation.warnings[].code). Hinweise sind nie Fehler: die Buchung hat gewirkt.
isOutcomeUnknown(Object? error) → bool
Ist der Ausgang dieses Fehlers unklar? Dann den Aufruf nicht blind wiederholen: Belege, Stornos und Zahlungen nachlesen; einen Aufruf mit idempotencyKey nur mit demselben Schluessel erneut senden; ohne Schluessel erst nachlesen (siehe ErrorOutcome). Gilt fuer jede Fehlerart; nur KasseneckApiError und KasseneckHttpError koennen unklar sein.
parseInventoryWebhookEvent(Object? rawBody) → InventoryWebhookEvent?
Liest eine Zustellung als typisiertes Ereignis. Vorher die Signatur pruefen (verifyInventoryWebhookSignature).
verifyInventoryWebhookSignature(Object? secret, String? header, Object? rawBody, {int toleranceSec = webhookToleranceSec, DateTime? now}) → bool
Prueft die Signatur einer Zustellung. true nur, wenn Kopf, Zeitfenster und HMAC stimmen; jede schlechte Eingabe und jede Ausnahme ist false, nie ein Wurf.

Exceptions / Errors

KasseneckApiError
Fachlicher Fehler des Backends (PIN falsch, Kasse belegt, Geraet gesperrt …).
KasseneckHttpError
Die Antwort war keine brauchbare Huelle {status, data} oder der HTTP-Weg scheiterte. Traegt bewusst nichts aus dem Rumpf: dort koennten Werte stehen, die wir gerade nicht ins Protokoll lassen wollen.
KasseneckValidationError
Der Aufrufer hat etwas nicht mitgegeben, oder die Antwort trug nicht, was der Aufruf zusagt. Die Meldung nennt immer nur das Feld, nie seinen Wert — sonst stuende ein Geraetegeheimnis im Protokoll.