Skip to content

Carrier-to-carrier (relais entre deux transporteurs)

Un transport peut changer de main en cours de route — un transporteur initial (A) prend en charge la collecte, puis remet la garde de la marchandise à un second transporteur (B) qui assure la livraison finale. L'API modélise ce relais en ajoutant un second rôle SUBSEQUENTCARRIER au document en cours de transport, puis en faisant enregistrer une double signature au point de rupture de charge : un transfert côté A, une acceptation côté B.

Points clés à retenir :

  • Le second transporteur n'est pas connu à la création du document — il est ajouté dynamiquement une fois le transport déjà en statut TRANSIT.
  • Le transfert de garde est un événement à deux signatures distinctes (remise / acceptation), pas une simple mise à jour de champ.
  • Le chauffeur du transporteur A signe aussi sa propre acceptation de collecte (COLLECTION_ACCEPTANCE, case 23 du CMR papier) avant le relais — cette signature reste requise avant toute signature de livraison, quel que soit le nombre de transporteurs relais insérés ensuite. Voir Signature électronique.
  • Le TMS donneur d'ordre reste notifié de bout en bout, y compris du relais lui-même (webhook de type commentaire), sans jamais perdre la visibilité sur le transport.
  • Le PDF final consolide l'historique des deux transporteurs sur un seul document — il n'y a pas deux e-CMR distincts.
sequenceDiagram
    participant TMS as TMS externe
    participant API as API e-CMR
    participant A as Chauffeur A
    participant B as Chauffeur B

    Note over TMS,API: Création avec Carrier A comme transporteur initial
    TMS->>API: POST /freightdocuments (role Carrier = A)
    API-->>TMS: 201 Created, status=DRAFT
    TMS->>API: POST /freightdocuments/id/issue
    API-->>TMS: 200 OK, status=ISSUED
    API-)TMS: Webhook STATUS=ISSUED

    Note over A,API: Collecte par le transporteur A
    A->>API: GET /freightdocuments/id (préchargement)
    A->>API: POST signature collecte
    API-->>A: 200 OK, status=TRANSIT
    API-)TMS: Webhook STATUS=TRANSIT
    A->>API: POST signature collecte-chauffeur (COLLECTION_ACCEPTANCE)
    API-->>A: 200 OK, signature enregistrée (statut inchangé)

    Note over TMS,API: Ajout du relais en cours de route
    TMS->>API: POST subsequentCarriers (ajout Carrier B)
    API-->>TMS: 200 OK, role Carrier B ajouté

    Note over A,B: Point de rupture de charge
    A->>API: POST signature transfert (remise de garde)
    API-->>A: 200 OK, transfert enregistré
    B->>API: POST signature acceptation (prise en charge)
    API-->>B: 200 OK, garde transférée à B
    API-)TMS: Webhook COMMENT (relais A vers B)

    Note over B,API: Poursuite jusqu'à livraison
    B->>API: POST events (arrivée, déchargement)
    B->>API: POST signature livraison
    API-->>B: 200 OK, status=DELIVERED
    API-)TMS: Webhook STATUS=DELIVERED

    TMS->>API: GET /freightdocuments/id/pdf
    API-->>TMS: PDF e-CMR (historique des deux transporteurs)