Skip to main content

Transit international

Vue d'ensemble

Le transit international permet à un acheteur (app Tranoo) d'organiser l'expédition d'un véhicule acheté vers un pays de destination, en choisissant un transitaire inscrit sur Tranoo Pro.

Le parcours est modélisé par la collection TransitMission et exposé via les préfixes API :

  • /api/transit-missions
  • /api/transit (alias de compatibilité)

:::info Hors périmètre L'ancien modèle PropositionTransit et ses routes sont désactivés dans app.js. Ne pas les utiliser comme référence. :::

Acteurs

ActeurApplicationRôle
AcheteurTranooDémarre le parcours, choisit le transitaire, valide le transfert
TransitaireTranoo ProReçoit les missions, accepte ou refuse, clôture la mission
AdminDashboardValide les comptes transitaires (/api/transitaires/verification)

Modèle de données

TransitMission.js

ChampDescription
articleRéférence Article
acheteurRéférence User (rôle acheteur)
transitaireRéférence User (rôle transitaire), nullable
statutVoir cycle de vie ci-dessous
modeLivraisontransit ou consommation
paysDestinationPays cible (requis avant sélection transitaire)
detailsSupplementairesNotes libres
articleTitreTitre dénormalisé pour affichage
dateSelectionTransitaireDate de choix du transitaire
dateTransferDate de transfert après vérification
dateTraiteDate de clôture par le transitaire
verificationApprovedtrue après transfert validé

Index : unique (article, acheteur) — un seul parcours par article et par acheteur.

Modèles associés

ModèleRôle
TransitaireReview.jsAvis clients sur transitaires (/api/transitaire-reviews)
TransitaireSubscriptionPricing.jsTarifs abonnement transitaire (admin)
Subscription.jsAbonnement actif requis pour certaines actions transitaire

La vérification du compte transitaire est stockée sur User.transitaireVerification (pas un modèle séparé).

Cycle de vie d'une mission

stateDiagram-v2
[*] --> parcours: POST /start
parcours --> en_cours: POST /select-transitaire
en_cours --> parcours: PATCH /rejeter-attribution (transitaire)
en_cours --> transferer: POST /transferer (acheteur)
transferer --> traite: PATCH /marquer-traite (transitaire)
parcours --> annule: annulation achat
en_cours --> annule: annulation achat
StatutSignification
parcoursParcours démarré, destination renseignée, transitaire non encore choisi (ou refusé)
en_coursTransitaire sélectionné, en attente de validation / transfert
transfererVéhicule transféré au transitaire après vérification
traiteMission clôturée par le transitaire
annuleAchat annulé — parcours bloqué

Endpoints API

Préfixe : /api/transit-missions (et /api/transit)

MéthodeRouteAuthDescription
POST/startAcheteurDémarre ou met à jour un parcours
POST/select-transitaireAcheteurAssigne un transitaire (articleId, transitaireId)
POST/transfererAcheteurPasse la mission en transferer
GET/mes-parcoursAcheteurListe des parcours de l'acheteur
GET/parcours/:articleIdAcheteurDétail d'un parcours
GET/mes-missionsTransitaireMissions assignées au transitaire
GET/acceptesTransitaireCompatibilité ancienne route Flutter
PATCH/:id/marquer-traiteTransitaireClôture une mission transferer
PATCH/:id/rejeter-attributionTransitaireRefuse une mission en_cours
PATCH/:id/detailsAcheteurMet à jour destination / détails

Règles métier clés

  • Pays de destination obligatoire avant select-transitaire
  • Un transitaire actif (en_cours ou transferer) bloque un nouveau choix (code: TRANSITAIRE_ACTIF)
  • Seul le transitaire assigné peut rejeter-attribution ou marquer-traite
  • marquer-traite exige le statut transferer

Vérification des comptes transitaires

Préfixe : /api/transitaires/verification

MéthodeRouteAuthDescription
GET/statusTransitaireStatut de vérification du compte connecté
POST/submitTransitaireSoumet le dossier (carte recto/verso, entreprise)
GET/admin/demandesAdminListe des demandes en attente
GET/admin/demandes/:userIdAdminDétail d'une demande
PATCH/admin/demandes/:userId/approveAdminApprouve le dossier
PATCH/admin/demandes/:userId/rejectAdminRejette avec motif

Statuts de vérification (User.transitaireVerification.statut)

StatutDescription
noneAucune soumission
pendingDossier en cours d'examen
approvedCompte validé (recto + verso requis)
rejectedDossier refusé (rejectionMotif)

Les réponses API utilisent des codes d'erreur stables (TRANSITAIRE_VERIF_PENDING, etc.) et des messages localisés via Accept-Language. Voir Internationalisation.

Notifications et temps réel

Push (FCM)

Événements notifiés via notificationController :

TypeDéclencheur
transit_selectionAcheteur choisit un transitaire
transit_transferMission passée en transferer
transit_rejectedTransitaire refuse la mission

Socket.io

Le contrôleur émet transit-mission-update au transitaire connecté lors des changements de statut :

global.io.to(socketId).emit('transit-mission-update', {
missionId: String(mission._id),
statut: mission.statut,
});

Chat

La messagerie acheteur ↔ transitaire passe par /api/chat (Socket.io + REST). Voir WhatsApp & notifications.

Intégration mobile

AppÉcrans / flux
TranooParcours achat → choix destination → sélection transitaire → transfert
Tranoo ProListe missions transitaire, acceptation/refus, clôture

Abonnement transitaire

Les transitaires peuvent avoir un abonnement actif (Subscription) géré comme les vendeurs. Les tarifs admin sont configurés via /api/admin/transitaire-subscription-pricing.

Fichiers source

FichierRôle
src/controllers/transitMissionController.jsLogique missions
src/controllers/transitaireVerificationController.jsVérification comptes
src/controllers/transitaireReviewController.jsAvis
src/routes/transitMission.jsRoutes missions
src/routes/transitaireVerification.jsRoutes vérification
src/models/TransitMission.jsSchéma MongoDB

OpenAPI : fichier paths/11-transitaires-transit-stats.js. Voir API Swagger.

Voir aussi