Ein Scheinwerfer ist auf zwei Kanälen eingestellt und wird auf einem bestellt. Bis er verpackt ist, vergehen Stunden. Wird er in dieser Zeit auf dem zweiten Kanal ein weiteres Mal bestellt, muss einer der Käufer eine Absage bekommen — und das kostet mehr als nur diesen Verkauf.
Die Reservierung bindet ein konkretes Lagerstück an eine Auftragsposition. Sie endet verbraucht, wenn die Ware das Haus verlässt, oder freigegeben, wenn der Kauf nicht zustande kommt; state kennt daneben den Wert expired. Beides nimmt Mengen und steht als Buchung im Journal.
| Fläche | Rollen |
|---|---|
| Commerce | Teilehandel, Autoverwerter |
Was dieser Fall voraussetzt
- Ein Auftrag mit Positionen. Die Reservierung verlangt
salesOrderIdundorderLineId; eine Reservierung ohne Auftrag ist nicht vorgesehen. - Ein Lagerstück statt einer Artikelnummer. Reserviert wird ein konkretes Exemplar mit
stockItemId. - Die aktuelle Revision. Jede Änderung an der Reservierung trägt
expectedRevision. - Einen Kanal, der Reservierungen trägt. Der Funktionsumfang nennt es je Kanal.
Der Ablauf
Die Tabelle nennt je Stufe den zuständigen Aufruf und das, was danach vorliegt. Die Begründung, warum die Stufe nicht übersprungen werden kann, steht darunter.
| Stufe | Aufruf | Was danach vorliegt |
|---|---|---|
| Reservieren | POST /commerce/v1/inventory/reservations | stockItemId, salesOrderId und orderLineId, optional expiresAt |
| Stand prüfen | GET /commerce/v1/inventory/reservations/{reservationId} | reservedQuantity, releasedQuantity und consumedQuantity |
| Verbrauchen | POST /commerce/v1/inventory/reservations/{reservationId}/consume | reasonCode fulfilled, wenn die Ware das Haus verlässt |
| Freigeben | POST /commerce/v1/inventory/reservations/{reservationId}/release | reasonCode order_cancelled oder expired, wenn der Kauf nicht zustande kommt |
| Journal lesen | GET /commerce/v1/inventory/ledger | Reservierung, Verbrauch und Freigabe als nachvollziehbare Buchungen |
Warum jede Stufe nötig ist
- Reservieren.
POST /commerce/v1/inventory/reservationsnimmtstockItemId,quantity,salesOrderId,orderLineId,expectedRevisionund optionalexpiresAt. Ab jetzt ist das Stück an diese Position gebunden;availableQuantityim Bestand wird laut Vertrag unter Berücksichtigung aktiver Reservierungen abgeleitet. - Den Stand prüfen.
GET /commerce/v1/inventory/reservations/{reservationId}nenntinitialQuantity,reservedQuantity,releasedQuantity,consumedQuantityundstate. Bei mehreren Stück zeigt sich hier, wie viel noch gebunden ist. - Verbrauchen.
POST /commerce/v1/inventory/reservations/{reservationId}/consumenimmtquantity,reasonCode— beim Versandfulfilled— undexpectedRevision. Verbraucht wird, wenn die Ware das Haus verlässt, nicht wenn der Auftrag eingeht. - Freigeben.
POST /commerce/v1/inventory/reservations/{reservationId}/releasegibt Mengen zurück, etwa mitorder_cancelled,order_changed,expiredodermanual_review. Eine Reservierung, die nie freigegeben wird, blockiert ein verkäufliches Teil ohne Käufer. - Das Journal lesen.
GET /commerce/v1/inventory/ledgerführt Reservierung, Verbrauch und Freigabe als Buchungen mitreservationId,quantityDeltaundbalance. So lässt sich später jede Bewegung eines Einzelstücks erklären.
curl -X POST \
-H 'X-Api-Key: <API_KEY>' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: reservierung-4711-versand' \
-d '{"quantity":1,"reasonCode":"fulfilled","expectedRevision":"<revision>"}' \
'https://commerce-preview.invalid/commerce/v1/inventory/reservations/<reservationId>/consume'Was am Ende vorliegt
Am Ende zeigen reservedQuantity, releasedQuantity und consumedQuantity, welche Menge noch gebunden, freigegeben oder verbraucht ist, und state nennt den Stand der Reservierung. Ob ein zweiter Käufer das Teil in der Zwischenzeit noch bestellen konnte, hängt davon ab, wie rechtzeitig das Angebot auf dem zweiten Kanal aktualisiert wurde.
Wo das in der Dokumentation steht
Die verbindlichen Feldlisten, Fehlercodes und Beispielantworten stehen im OpenAPI-Vertrag dieser Fläche unter docs.tapinomahub.com (tapinoma-commerce). Alle Anwendungsfälle nach Fläche und Rolle geordnet: Übersicht der Anwendungsfälle.
Quellen und Rechtsgrundlagen
Häufige Fragen
Kann ich ohne Auftrag reservieren?
Nein. Die Reservierung verlangt salesOrderId und orderLineId; sie bindet ein Stück an eine konkrete Auftragsposition.
Wann verbrauche ich die Reservierung?
Wenn die Ware das Haus verlässt, mit reasonCode fulfilled. Der Auftragseingang allein ist noch kein Verbrauch.
Kann ich eine Reservierung teilweise freigeben?
Ja. Verbrauch und Freigabe nehmen Mengen; der Stand zeigt, wie viel reserviert, freigegeben und verbraucht ist.
