Résoudre et justifier un écart issu du rapprochementTous les articles

Résoudre et justifier un écart issu du rapprochement

Un rapprochement qui trouve des écarts n’est que la moitié du travail. Ce cas montre l’autre moitié : trancher, motiver et prouver qu’aucun point critique ne reste ouvert.

Publié: 2026-09-12Temps de lecture: 4 minAPI tapinomahub & processus
API & processusAftermarket automobileAPIMarketplacesCommerce de pièces

Le rapprochement mensuel signale douze écarts, dont trois critiques : une commande présente dans le canal mais absente de votre système, et deux stocks différant d’une pièce. Reprendre simplement le chiffre du canal supprime l’écart et garde la cause.

Résoudre et justifier un écart issu du rapprochementEntrée : un rapprochement signale des écarts critiques entre le canal et votre système 1. Lire le rapprochement (GET /commerce/v1/reconciliations/{reconciliationId}): discrepancies avec kind, severity et resourceId ; et criticalRemaining 2. Décider (POST /commerce/v1/reconciliations/{reconciliationId}/discrepancies/{discrepancyId}/resolution): apply_source, apply_target ou accept_difference, chacun avec reasonCode 3. Retracer le stock (GET /commerce/v1/inventory/ledger): entryType, quantityDelta et balance par écriture 4. Relire les événements (GET /commerce/v1/events): événements avec streamId, sequence et correlationId 5. Rapprocher de nouveau (POST /commerce/v1/reconciliations): la même période avec de nouveaux points de contrôle — criticalRemaining est le chiffre qui compte Sortie : chaque écart est tranché, motivé et imputé à un acteur accept_difference est une décision, non une négligence — elle porte un motif et une decisionActorReference.Résoudre et justifier un écart issu du rapprochementEntrée : un rapprochement signale des écarts critiques entre le canal et votre système01Lire le rapprochementGET /commerce/v1/reconciliations/{reconciliationId}discrepancies avec kind, severity et resourceId ; et criticalRemaining02DéciderPOST /commerce/v1/reconciliations/{reconciliationId}/discrepancies/{discrepancyId}/resolutionapply_source, apply_target ou accept_difference, chacun avec reasonCode03Retracer le stockGET /commerce/v1/inventory/ledgerentryType, quantityDelta et balance par écriture04Relire les événementsGET /commerce/v1/eventsévénements avec streamId, sequence et correlationId05Rapprocher de nouveauPOST /commerce/v1/reconciliationsla même période avec de nouveaux points de contrôle — criticalRemaining est le chiffre quicompteSortie : chaque écart est tranché, motivé et imputé à un acteuraccept_difference est une décision, non une négligence — elle porte un motif et une decisionActorReference.
Cinq appels du constat signalé au nouveau rapprochement. Le chiffre qui compte à la fin s’appelle criticalRemaining.

Le contrat fait donc de la résolution une décision propre à chaque écart : retenir la source, retenir la cible ou accepter expressément la différence — avec motif et acteur imputé. La résolution n’est prouvée que lorsqu’un nouveau rapprochement ne trouve plus d’écart critique.

SurfaceRôles
CommerceCommerce de pièces, Éditeur de logiciels, Plateforme et marketplace

Ce que ce cas suppose

  • Un rapprochement achevé. La décision porte sur un écart avec discrepancyId au sein d’un rapprochement.
  • Une personne habilitée. Retenir source ou cible modifie des données ; tout le monde ne devrait pas pouvoir le faire.
  • Des motifs compréhensibles par autrui. reasonCode est votre propre code ; un catalogue interne le rend lisible.
  • La volonté de chercher la cause. Journal et flux d’événements sont consultables ; le contrat ne décrit aucun lien entre leurs entrées et un écart.

Le déroulement

Le tableau indique pour chaque étape l’appel compétent et ce qui existe ensuite. La justification de l’étape figure en dessous.

La chaîne d’appels de ce cas d’usage
ÉtapeAppelCe qui existe ensuite
Lire le rapprochementGET /commerce/v1/reconciliations/{reconciliationId}discrepancies avec kind, severity et resourceId ; et criticalRemaining
DéciderPOST /commerce/v1/reconciliations/{reconciliationId}/discrepancies/{discrepancyId}/resolutionapply_source, apply_target ou accept_difference, chacun avec reasonCode
Retracer le stockGET /commerce/v1/inventory/ledgerentryType, quantityDelta et balance par écriture
Relire les événementsGET /commerce/v1/eventsévénements avec streamId, sequence et correlationId
Rapprocher de nouveauPOST /commerce/v1/reconciliationsla même période avec de nouveaux points de contrôle — criticalRemaining est le chiffre qui compte

Pourquoi chaque étape est nécessaire

  1. Lire le rapprochement. GET /commerce/v1/reconciliations/{reconciliationId} renvoie counts avec matched, discrepant et criticalRemaining, integrity avec les sommes de contrôle des deux côtés et discrepancies avec kind, resourceId, severity et state. Les critiques d’abord : severity distingue warning et critical ; le contrat ne décrit pas l’effet d’un écart critique.
  2. Décider. POST /commerce/v1/reconciliations/{reconciliationId}/discrepancies/{discrepancyId}/resolution prend decision avec apply_source, apply_target ou accept_difference, ainsi que reasonCode et expectedRevision. La réponse indique resultingState et decisionActorReference — la décision est imputée à un acteur.
  3. Retracer le stock. GET /commerce/v1/inventory/ledger montre par écriture entryType, quantityDelta et balance. Chaque écriture porte stockItemId ; le contrat ne décrit aucun lien avec un écart.
  4. Relire les événements. GET /commerce/v1/events renvoie les événements avec streamId, sequence et correlationId. Ils portent aussi type, resourceId et occurredAt ; le contrat ne décrit pas ce que signifie un trou dans sequence.
  5. Rapprocher de nouveau. POST /commerce/v1/reconciliations contrôle la même période avec de nouveaux points de contrôle. La résolution est prouvée quand criticalRemaining est à zéro ; le reste est une affirmation.
Trancher un écart en faveur de la source
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'

Ce que l’on obtient

Au final, chaque écart est tranché, motivé et imputé à un acteur, le journal et le flux d’événements ont été relus, et un nouveau rapprochement prouve qu’aucun point critique n’est ouvert.

Où cela figure dans la documentation

Les listes de champs contractuelles, les codes d’erreur et les réponses d’exemple se trouvent dans le contrat OpenAPI de cette surface, à l’adresse docs.tapinomahub.com (tapinoma-commerce). Tous les cas d’usage classés par surface et par rôle : aperçu des cas d’usage.

Sources et références juridiques

Questions fréquentes

Quelle différence entre apply_source et apply_target ?

Avec apply_source, l’état de la source s’applique ; avec apply_target, celui de la cible. Les points de contrôle du rapprochement fixent quel côté est source ou cible.

Puis-je simplement accepter un écart ?

Oui, avec accept_difference — mais toujours avec un motif. La décision porte une decisionActorReference et reste traçable ensuite.

Quand la résolution est-elle achevée ?

Quand un nouveau rapprochement sur la même période ne trouve plus d’écart critique, c’est-à-dire quand criticalRemaining vaut zéro.