Der monatliche Abgleich meldet zwölf Abweichungen, drei davon kritisch: ein Auftrag, der im Kanal existiert und im eigenen System nicht, und zwei Bestände, die sich um ein Stück unterscheiden. Wer jetzt einfach die Kanalzahl übernimmt, hat die Abweichung beseitigt und die Ursache behalten.
Der Vertrag macht die Klärung deshalb zu einer eigenen Entscheidung je Abweichung: Quelle übernehmen, Ziel übernehmen oder den Unterschied ausdrücklich akzeptieren — jeweils mit Grund und zugeordnetem Akteur. Belegt ist die Klärung erst, wenn ein neuer Abgleich keine kritische Abweichung mehr findet.
| Fläche | Rollen |
|---|---|
| Commerce | Teilehandel, Softwarehaus, Plattform und Marktplatz |
Was dieser Fall voraussetzt
- Ein abgeschlossener Abgleich. Die Entscheidung bezieht sich auf eine Abweichung mit
discrepancyIdinnerhalb eines Abgleichs. - Eine Person mit Befugnis. Wer Quelle oder Ziel übernimmt, verändert Daten; das sollte nicht jeder dürfen.
- Begründungen, die jemand anderes versteht.
reasonCodeist ein eigener Code; ein betrieblicher Katalog hält ihn lesbar. - Den Willen zur Ursachensuche. Journal und Ereignisstrom lassen sich lesen; einen Bezug zwischen ihren Einträgen und einer Abweichung beschreibt der Vertrag nicht.
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 |
|---|---|---|
| Abgleich lesen | GET /commerce/v1/reconciliations/{reconciliationId} | discrepancies mit kind, severity und resourceId; dazu criticalRemaining |
| Entscheiden | POST /commerce/v1/reconciliations/{reconciliationId}/discrepancies/{discrepancyId}/resolution | apply_source, apply_target oder accept_difference, jeweils mit reasonCode |
| Bestand nachvollziehen | GET /commerce/v1/inventory/ledger | entryType, quantityDelta und balance je Buchung |
| Ereignisse nachlesen | GET /commerce/v1/events | Ereignisse mit streamId, sequence und correlationId |
| Erneut abgleichen | POST /commerce/v1/reconciliations | derselbe Zeitraum mit neuen Prüfpunkten — criticalRemaining ist die Zahl, die zählt |
Warum jede Stufe nötig ist
- Den Abgleich lesen.
GET /commerce/v1/reconciliations/{reconciliationId}liefertcountsmitmatched,discrepantundcriticalRemaining,integritymit den Prüfsummen beider Seiten unddiscrepanciesmitkind,resourceId,severityundstate. Die kritischen zuerst:severityunterscheidetwarningundcritical; welche Wirkung eine kritische Abweichung hat, beschreibt der Vertrag nicht. - Entscheiden.
POST /commerce/v1/reconciliations/{reconciliationId}/discrepancies/{discrepancyId}/resolutionnimmtdecisionmitapply_source,apply_targetoderaccept_difference, dazureasonCodeundexpectedRevision. Die Antwort nenntresultingStateunddecisionActorReference— die Entscheidung ist einem Akteur zugeordnet. - Den Bestand nachvollziehen.
GET /commerce/v1/inventory/ledgerzeigt je BuchungentryType,quantityDeltaundbalance. Jede Buchung trägtstockItemId; einen Bezug zu einer Abweichung beschreibt der Vertrag nicht. - Die Ereignisse nachlesen.
GET /commerce/v1/eventsliefert Ereignisse mitstreamId,sequenceundcorrelationId. Dazu tragen sietype,resourceIdundoccurredAt; was eine Lücke insequencebedeutet, beschreibt der Vertrag nicht. - Erneut abgleichen.
POST /commerce/v1/reconciliationsprüft denselben Zeitraum mit neuen Prüfpunkten. Belegt ist die Klärung, wenncriticalRemainingbei null steht; alles andere ist eine Behauptung.
curl -X POST \
-H 'X-Api-Key: <API_KEY>' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: abweichung-2026-08-0003' \
-d '{"decision":"apply_source","reasonCode":"<reasonCode>","note":"Buchung im Kanal war korrekt, Zustellung fehlte.","expectedRevision":"<revision>"}' \
'https://commerce-preview.invalid/commerce/v1/reconciliations/<reconciliationId>/discrepancies/<discrepancyId>/resolution'Was am Ende vorliegt
Am Ende ist jede Abweichung entschieden, begründet und einem Akteur zugeordnet, Journal und Ereignisstrom sind nachgelesen, und ein neuer Abgleich belegt, dass nichts Kritisches offen ist.
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
Was ist der Unterschied zwischen apply_source und apply_target?
Mit apply_source gilt der Stand der Quelle, mit apply_target der des Ziels. Welche Seite Quelle und welche Ziel ist, legen die Prüfpunkte des Abgleichs fest.
Darf ich eine Abweichung einfach akzeptieren?
Ja, mit accept_difference — aber immer mit Grund. Die Entscheidung trägt eine decisionActorReference und ist später nachvollziehbar.
Wann ist die Klärung abgeschlossen?
Wenn ein neuer Abgleich für denselben Zeitraum keine kritische Abweichung mehr findet, also criticalRemaining null ist.
