Skip to main content

🚛 Trade Transports - Gestion des transports

Le module Transports permet aux utilisateurs de créer et gérer leurs opérations de transport avec gestion automatique des clients.

🎯 Objectif​

Gérer les opérations de transport et les clients associés avec création automatique des profils clients et gestion des documents officiels.

✹ FonctionnalitĂ©s principales​

  • CrĂ©ation de transports : Enregistrement des opĂ©rations de transport
  • Gestion des clients : CrĂ©ation automatique ou liaison avec existants
  • Types de vĂ©hicules : Classification des moyens de transport
  • Documents : Upload de papiers officiels (permis, assurance, etc.)
  • Suivi : Informations dĂ©taillĂ©es sur chaque transport

📋 Informations collectĂ©es​

Transport​

  • Points de chargement et dĂ©chargement
  • NumĂ©ro de plaque d'immatriculation
  • Type de vĂ©hicule utilisĂ©
  • NumĂ©ro de chargement (gĂ©nĂ©rĂ© automatiquement)

Produit​

  • Nature et description du produit
  • QuantitĂ© transportĂ©e
  • Poids moyen et valeur
  • Prix unitaire moyen

Client​

  • Informations de contact (email ou tĂ©lĂ©phone obligatoire)
  • Nom et prĂ©nom
  • Liaison automatique avec clients existants

Documents​

  • Permis de conduire
  • Carte grise du vĂ©hicule
  • Assurance
  • Autres documents officiels

🔌 Endpoints disponibles​

CrĂ©er un transport​

POST /trade/transports

ParamĂštres :

{
"chargerFirstName": "Jean",
"chargerLastName": "Dupont",
"chargerPhone": "+237123456789",
"chargerEmail": "jean.dupont@example.com",
"vehicleTypeId": 1,
"loadingPoint": "Marché Central, Douala",
"unloadingPoint": "Gare RoutiÚre, Yaoundé",
"vehiclePlateNumber": "CM-456-DEF",
"productLabel": "Fruits et légumes",
"productQuantity": 500,
"averageWeight": 1.2,
"averageUnitPrice": 200,
"totalProductValue": 100000,
"customerId": null,
"newCustomer": {
"firstName": "Marie",
"lastName": "Kouam",
"email": "marie.kouam@example.com",
"phone": "+237987654321"
}
}

Réponse de succÚs :

{
"success": true,
"message": "Transport créé avec succÚs",
"result": {
"id": 123,
"publicId": "transport-abc-123",
"loadingNumber": "TRP-2025-001234",
"chargerFirstName": "Jean",
"chargerLastName": "Dupont",
"chargerPhone": "+237123456789",
"chargerEmail": "jean.dupont@example.com",
"loadingPoint": "Marché Central, Douala",
"unloadingPoint": "Gare RoutiÚre, Yaoundé",
"vehiclePlateNumber": "CM-456-DEF",
"productLabel": "Fruits et légumes",
"productQuantity": 500,
"averageWeight": 1.2,
"averageUnitPrice": 200,
"totalProductValue": 100000,
"status": "PENDING",
"vehicleType": {
"id": 1,
"name": "Camion 10 tonnes",
"description": "Véhicule de transport lourd"
},
"customer": {
"id": 456,
"firstName": "Marie",
"lastName": "Kouam",
"email": "marie.kouam@example.com",
"phone": "+237987654321"
},
"createdAt": "2025-07-21T10:30:00Z"
}
}

Lister les transports​

GET /trade/transports?page=1&limit=10&status=PENDING&vehicleTypeId=1

ParamĂštres de requĂȘte :

  • page : NumĂ©ro de page (dĂ©faut: 1)
  • limit : ÉlĂ©ments par page (dĂ©faut: 10, max: 100)
  • status : Filtrer par statut
  • vehicleTypeId : Filtrer par type de vĂ©hicule
  • loadingPoint : Filtrer par point de chargement
  • unloadingPoint : Filtrer par point de dĂ©chargement
  • customerId : Filtrer par client
  • startDate : Date de dĂ©but (format ISO)
  • endDate : Date de fin (format ISO)
  • search : Recherche textuelle (numĂ©ro, produit, points)

Réponse :

{
"success": true,
"message": "Liste des transports",
"result": {
"meta": {
"total": 89,
"total_pages": 9,
"current_page": 1,
"limit": 10
},
"data": [
{
"id": 123,
"publicId": "transport-abc-123",
"loadingNumber": "TRP-2025-001234",
"chargerFirstName": "Jean",
"chargerLastName": "Dupont",
"loadingPoint": "Marché Central, Douala",
"unloadingPoint": "Gare RoutiÚre, Yaoundé",
"vehiclePlateNumber": "CM-456-DEF",
"productLabel": "Fruits et légumes",
"productQuantity": 500,
"totalProductValue": 100000,
"status": "PENDING",
"vehicleType": {
"id": 1,
"name": "Camion 10 tonnes"
},
"customer": {
"id": 456,
"firstName": "Marie",
"lastName": "Kouam"
},
"createdAt": "2025-07-21T10:30:00Z"
}
]
}
}

DĂ©tail d'un transport​

GET /trade/transports/{id}

Réponse :

{
"success": true,
"message": "Détail du transport",
"result": {
"id": 123,
"publicId": "transport-abc-123",
"loadingNumber": "TRP-2025-001234",
"chargerFirstName": "Jean",
"chargerLastName": "Dupont",
"chargerPhone": "+237123456789",
"chargerEmail": "jean.dupont@example.com",
"loadingPoint": "Marché Central, Douala",
"unloadingPoint": "Gare RoutiÚre, Yaoundé",
"vehiclePlateNumber": "CM-456-DEF",
"productLabel": "Fruits et légumes",
"productQuantity": 500,
"averageWeight": 1.2,
"averageUnitPrice": 200,
"totalProductValue": 100000,
"status": "IN_PROGRESS",
"vehicleType": {
"id": 1,
"name": "Camion 10 tonnes",
"description": "Véhicule de transport lourd",
"maxWeight": 10000,
"category": "HEAVY"
},
"customer": {
"id": 456,
"firstName": "Marie",
"lastName": "Kouam",
"email": "marie.kouam@example.com",
"phone": "+237987654321",
"address": "Quartier Bonanjo, Douala",
"createdAt": "2025-07-21T10:30:00Z"
},
"documents": [
{
"id": 1,
"type": "DRIVING_LICENSE",
"filename": "permis_jean_dupont.pdf",
"url": "/uploads/transport-123/permis_jean_dupont.pdf",
"uploadedAt": "2025-07-21T10:35:00Z"
},
{
"id": 2,
"type": "VEHICLE_REGISTRATION",
"filename": "carte_grise.pdf",
"url": "/uploads/transport-123/carte_grise.pdf",
"uploadedAt": "2025-07-21T10:36:00Z"
}
],
"complaints": [
{
"id": 789,
"label": "Retard de livraison",
"status": "RESOLVED",
"createdAt": "2025-07-21T14:00:00Z"
}
],
"createdAt": "2025-07-21T10:30:00Z",
"updatedAt": "2025-07-21T12:15:00Z"
}
}

Types de vĂ©hicules​

GET /trade/transports/vehicle-types

Réponse :

{
"success": true,
"message": "Types de véhicules disponibles",
"result": [
{
"id": 1,
"name": "Camion 10 tonnes",
"description": "Véhicule de transport lourd",
"maxWeight": 10000,
"category": "HEAVY",
"isActive": true
},
{
"id": 2,
"name": "Camionnette",
"description": "Véhicule de transport léger",
"maxWeight": 3500,
"category": "LIGHT",
"isActive": true
},
{
"id": 3,
"name": "Moto",
"description": "Transport rapide en ville",
"maxWeight": 50,
"category": "MOTORCYCLE",
"isActive": true
}
]
}

Upload de documents​

POST /trade/transports/upload

ParamĂštres :

  • files : Fichiers Ă  uploader (multipart/form-data)
  • transportId : ID du transport
  • documentType : Type de document

Types de documents :

  • DRIVING_LICENSE : Permis de conduire
  • VEHICLE_REGISTRATION : Carte grise
  • INSURANCE : Assurance
  • OTHER : Autre document

Contraintes :

  • Taille maximale : 10MB par fichier
  • Types autorisĂ©s : PDF, JPEG, PNG
  • Maximum 5 fichiers par upload

Réponse :

{
"success": true,
"message": "Documents uploadés avec succÚs",
"result": {
"uploaded": [
{
"filename": "permis_conduire.pdf",
"type": "DRIVING_LICENSE",
"size": 1024576,
"url": "/uploads/transport-123/permis_conduire.pdf"
}
],
"errors": []
}
}

📊 Statuts des transports​

StatutDescriptionActions possibles
PENDINGEn attente de validationValider, Rejeter
VALIDATEDValidĂ© et prĂȘtDĂ©marrer
IN_PROGRESSEn cours de transportTerminer, Signaler problĂšme
COMPLETEDTransport terminéArchiver
CANCELLEDAnnuléRéactiver
ON_HOLDEn attenteReprendre, Annuler

🔒 Rùgles de validation​

Transport​

  • vehicleTypeId : Obligatoire, doit exister
  • loadingPoint : Obligatoire, minimum 3 caractĂšres
  • chargerFirstName : Obligatoire
  • chargerLastName : Obligatoire

Client​

  • Email OU tĂ©lĂ©phone obligatoire
  • Si customerId fourni, le client doit exister
  • Si newCustomer fourni, crĂ©ation automatique

Documents​

  • Taille : Maximum 10MB par fichier
  • Types : PDF, JPEG, PNG uniquement
  • Nombre : Maximum 5 fichiers par upload

❌ Gestion des erreurs​

Type de vĂ©hicule non trouvé​

{
"success": false,
"message": "Type de véhicule non trouvé",
"errors": {
"code": "VEHICLE_TYPE_NOT_FOUND",
"vehicleTypeId": 999
}
}

Client non trouvé​

{
"success": false,
"message": "Client non trouvé",
"errors": {
"code": "CUSTOMER_NOT_FOUND",
"customerId": 999
}
}

DonnĂ©es client manquantes​

{
"success": false,
"message": "Informations client insuffisantes",
"errors": {
"code": "MISSING_CUSTOMER_INFO",
"message": "Email ou téléphone requis pour le nouveau client"
}
}

NumĂ©ro de chargement en double​

{
"success": false,
"message": "Numéro de chargement déjà utilisé",
"errors": {
"code": "LOADING_NUMBER_EXISTS",
"loadingNumber": "TRP-2025-001234"
}
}

Prochaine section : Forum Trade