Sous-traitance avec TMS
Le transporteur désigné sur le document (CARRIER) n'effectue pas lui-même le transport : il sous-traite à une autre société de transport, qui dispose elle-même de son propre TMS et de ses propres identifiants API. Ce scénario s'appuie sur la délégation de rôle : le rôle CARRIER reste porté par l'entreprise donneuse d'ordre, mais son accès est délégué à une autre organisation, qui peut elle-même redéléguer en interne (sous-comptes) — voire re-déléguer à son tour à un second niveau de sous-traitance.
Points clés à retenir :
- La délégation se fait au niveau du rôle (
CARRIER), pas au niveau du document entier — le sous-traitant ne voit que ce à quoi son rôle délégué lui donne accès. - Le sous-traitant s'authentifie avec ses propres identifiants API — jamais avec ceux du donneur d'ordre.
- Le sous-traitant peut lui-même déléguer à un sous-compte (par exemple un chauffeur salarié), en scopant la délégation à ce document précis.
- Le donneur d'ordre continue de recevoir les webhooks de changement de statut, quel que soit le nombre de niveaux de délégation en dessous de lui.
sequenceDiagram
participant TMS as TMS donneur d'ordre
participant API as API e-CMR
participant SubTMS as TMS sous-traitant
participant Driver as Chauffeur (app)
TMS->>API: POST /freightdocuments + issue
API-->>TMS: 200 OK, status=ISSUED
Note over TMS,SubTMS: Délégation au niveau document
TMS->>API: POST delegate (role Carrier vers email sous-traitant)
API-->>TMS: 200 OK, délégation créée
API-)SubTMS: Email: accès délégué reçu
Note over SubTMS,API: Le sous-traitant utilise ses propres identifiants API
SubTMS->>API: GET /freightdocuments?filters=ownRoles.eq:CARRIER
API-->>SubTMS: Liste des documents délégués
Note over SubTMS,Driver: Le sous-traitant délègue à son propre chauffeur
SubTMS->>API: POST delegate (sous-compte chauffeur, scope=ce document)
API-->>SubTMS: 200 OK, délégation créée
SubTMS-)Driver: Mission assignée (dans son propre système)
Driver->>API: GET /freightdocuments/id (identifiants sous-compte)
API-->>Driver: Document + ownPermissions
Driver->>API: POST events (arrivée, chargement)
Driver->>API: POST signature collecte
API-->>Driver: 200 OK, status=TRANSIT
API-)TMS: Webhook STATUS=TRANSIT
Driver->>API: POST events (arrivée, déchargement)
Driver->>API: POST signature livraison
API-->>Driver: 200 OK, status=DELIVERED
API-)TMS: Webhook STATUS=DELIVERED
SubTMS->>API: GET /freightdocuments/id (suivi de son propre transport)
API-->>SubTMS: status=DELIVERED