Aller au contenu principal

💰 API Trade Flow

Documentation complète de l'API de gestion des flux commerciaux.

🎯 Vue d'ensemble

L'API Trade Flow gère les collections de données commerciales, les workflows de validation multi-niveaux et les rapports statistiques du système Commerce Tracking.

Fonctionnalités principales

  • Collections : Création et gestion des collections de données
  • Validation : Workflow de validation multi-niveaux
  • Collectes digitalisées : Gestion des collectes digitalisées
  • Rapports : Génération de rapports et statistiques
  • Workflow : Gestion des états et transitions

🔑 Authentification requise

Tous les endpoints nécessitent un token JWT valide :

Authorization: Bearer <jwt-token>

📊 Endpoints Collections

POST /trade-flow/collections

Créer une nouvelle collection de données commerciales.

Request:

POST /trade-flow/collections
Authorization: Bearer <jwt-token>
Content-Type: application/json

{
"collection_date": "2024-01-15T10:30:00Z",
"collector_id": 456,
"location": {
"country_id": 1,
"region_id": 2,
"district_id": 3,
"city_id": 4,
"checkpoint_id": 5
},
"trade_data": {
"product_type": "agricultural",
"products": [
{
"product_id": 101,
"quantity": 100,
"unit": "kg",
"value_usd": 500.00
}
],
"transport_mode": "road",
"origin_country": 1,
"destination_country": 2,
"trader_info": {
"name": "John Trader",
"nationality": "CD",
"document_type": "passport",
"document_number": "AB123456"
}
},
"metadata": {
"collection_method": "digital",
"device_id": "DEVICE_001",
"gps_coordinates": {
"latitude": -4.4419,
"longitude": 15.2663
}
}
}

Response Success (201):

{
"success": true,
"message": "Collection créée avec succès",
"result": {
"id": 123,
"public_id": "uuid-string",
"collection_date": "2024-01-15T10:30:00Z",
"collector_id": 456,
"status": "draft",
"validation_level": 0,
"location": {
"country_id": 1,
"region_id": 2,
"district_id": 3,
"city_id": 4,
"checkpoint_id": 5
},
"trade_data": {
"product_type": "agricultural",
"products": [
{
"product_id": 101,
"quantity": 100,
"unit": "kg",
"value_usd": 500.00
}
],
"transport_mode": "road",
"origin_country": 1,
"destination_country": 2,
"trader_info": {
"name": "John Trader",
"nationality": "CD",
"document_type": "passport",
"document_number": "AB123456"
}
},
"metadata": {
"collection_method": "digital",
"device_id": "DEVICE_001",
"gps_coordinates": {
"latitude": -4.4419,
"longitude": 15.2663
}
},
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z"
},
"errors": null,
"except": null
}

GET /trade-flow/collections

Lister les collections avec pagination et filtres.

Query Parameters:

GET /trade-flow/collections?page=1&limit=10&status=draft&collector_id=456&date_from=2024-01-01&date_to=2024-01-31

Response Success (200):

{
"success": true,
"message": "Collections récupérées avec succès",
"result": {
"data": [
{
"id": 123,
"public_id": "uuid-string",
"collection_date": "2024-01-15T10:30:00Z",
"collector_id": 456,
"status": "draft",
"validation_level": 0,
"total_value_usd": 500.00,
"created_at": "2024-01-15T10:30:00Z"
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 150,
"total_pages": 15
},
"filters": {
"status": "draft",
"collector_id": 456,
"date_from": "2024-01-01",
"date_to": "2024-01-31"
}
},
"errors": null,
"except": null
}

GET /trade-flow/collections/:id

Récupérer une collection spécifique par son ID.

Request:

GET /trade-flow/collections/123
Authorization: Bearer <jwt-token>

Response Success (200):

{
"success": true,
"message": "Collection récupérée avec succès",
"result": {
"id": 123,
"public_id": "uuid-string",
"collection_date": "2024-01-15T10:30:00Z",
"collector_id": 456,
"status": "draft",
"validation_level": 0,
"location": { /* ... */ },
"trade_data": { /* ... */ },
"metadata": { /* ... */ },
"validations": [
{
"id": 1,
"level": 1,
"status": "pending",
"validator_id": 789,
"created_at": "2024-01-15T11:00:00Z"
}
],
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z"
},
"errors": null,
"except": null
}

PUT /trade-flow/collections/:id

Modifier une collection existante.

Request:

PUT /trade-flow/collections/123
Authorization: Bearer <jwt-token>
Content-Type: application/json

{
"collection_date": "2024-01-15T11:00:00Z",
"trade_data": {
"product_type": "agricultural",
"products": [
{
"product_id": 101,
"quantity": 150, // Modifié
"unit": "kg",
"value_usd": 750.00 // Modifié
}
]
}
}

DELETE /trade-flow/collections/:id

Supprimer une collection.

Request:

DELETE /trade-flow/collections/123
Authorization: Bearer <jwt-token>

Response Success (200):

{
"success": true,
"message": "Collection supprimée avec succès",
"result": null,
"errors": null,
"except": null
}

✅ Endpoints Validation

POST /trade-flow/collections/:id/submit

Soumettre une collection pour validation.

Request:

POST /trade-flow/collections/123/submit
Authorization: Bearer <jwt-token>
Content-Type: application/json

{
"comments": "Collection prête pour validation"
}

POST /trade-flow/collections/:id/validate/team-manager

Validation niveau 1 par le chef d'équipe.

Request:

POST /trade-flow/collections/123/validate/team-manager
Authorization: Bearer <jwt-token>
Content-Type: application/json

{
"action": "approve", // "approve" ou "reject"
"comments": "Données validées, conforme aux procédures"
}

POST /trade-flow/collections/:id/validate/supervisor

Validation niveau 2 par le superviseur.

Request:

POST /trade-flow/collections/123/validate/supervisor
Authorization: Bearer <jwt-token>
Content-Type: application/json

{
"action": "approve",
"comments": "Validation finale approuvée"
}

POST /trade-flow/collections/:id/reject

Rejeter une collection.

Request:

POST /trade-flow/collections/123/reject
Authorization: Bearer <jwt-token>
Content-Type: application/json

{
"reason": "Données incomplètes",
"comments": "Veuillez compléter les informations manquantes"
}

POST /trade-flow/collections/:id/return

Retourner une collection pour correction.

Request:

POST /trade-flow/collections/123/return
Authorization: Bearer <jwt-token>
Content-Type: application/json

{
"reason": "Correction nécessaire",
"comments": "Veuillez corriger les quantités indiquées"
}

📱 Endpoints Collectes Digitalisées

POST /trade-flow/digitalized-collections

Créer une collecte digitalisée.

Request:

POST /trade-flow/digitalized-collections
Authorization: Bearer <jwt-token>
Content-Type: application/json

{
"collection_id": 123,
"digital_data": {
"form_version": "1.2",
"sections": [
{
"section_id": "basic_info",
"fields": {
"trader_name": "John Trader",
"nationality": "CD",
"document_type": "passport"
}
},
{
"section_id": "products",
"fields": {
"product_list": [
{
"product_id": 101,
"quantity": 100,
"unit": "kg"
}
]
}
}
]
},
"device_info": {
"device_id": "MOBILE_001",
"app_version": "1.0.0",
"platform": "android",
"gps_accuracy": 5.2
}
}

GET /trade-flow/digitalized-collections

Lister les collectes digitalisées.

Response Success (200):

{
"success": true,
"message": "Collectes digitalisées récupérées avec succès",
"result": {
"data": [
{
"id": 1,
"collection_id": 123,
"digital_data": { /* ... */ },
"device_info": { /* ... */ },
"created_at": "2024-01-15T10:30:00Z"
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 50,
"total_pages": 5
}
},
"errors": null,
"except": null
}

📊 Endpoints Statistiques

GET /trade-flow/statistics

Récupérer les statistiques globales.

Request:

GET /trade-flow/statistics?date_from=2024-01-01&date_to=2024-01-31&country_id=1
Authorization: Bearer <jwt-token>

Response Success (200):

{
"success": true,
"message": "Statistiques récupérées avec succès",
"result": {
"period": {
"from": "2024-01-01",
"to": "2024-01-31"
},
"overview": {
"total_collections": 1250,
"validated_collections": 1180,
"pending_collections": 45,
"rejected_collections": 25,
"total_value_usd": 1250000.00
},
"by_status": {
"draft": 45,
"submitted": 12,
"validated": 1180,
"rejected": 25
},
"by_product_type": {
"agricultural": 800,
"livestock": 300,
"minerals": 150
},
"by_transport_mode": {
"road": 900,
"rail": 200,
"air": 50,
"water": 100
},
"trends": {
"daily_collections": [
{ "date": "2024-01-01", "count": 45, "value": 45000 },
{ "date": "2024-01-02", "count": 52, "value": 52000 }
]
}
},
"errors": null,
"except": null
}

GET /trade-flow/statistics/agent

Statistiques spécifiques à un agent.

Request:

GET /trade-flow/statistics/agent?agent_id=456&date_from=2024-01-01&date_to=2024-01-31
Authorization: Bearer <jwt-token>

Response Success (200):

{
"success": true,
"message": "Statistiques agent récupérées avec succès",
"result": {
"agent_id": 456,
"agent_name": "John Doe",
"period": {
"from": "2024-01-01",
"to": "2024-01-31"
},
"performance": {
"total_collections": 85,
"validated_collections": 80,
"pending_collections": 3,
"rejected_collections": 2,
"validation_rate": 94.12,
"average_daily_collections": 2.74
},
"productivity": {
"collections_by_day": [
{ "date": "2024-01-01", "count": 3 },
{ "date": "2024-01-02", "count": 2 }
],
"peak_hours": [9, 10, 11, 14, 15, 16],
"most_productive_day": "Monday"
},
"quality": {
"first_time_validation_rate": 85.71,
"average_corrections_needed": 1.2,
"common_rejection_reasons": [
"Données incomplètes",
"Informations contradictoires"
]
}
},
"errors": null,
"except": null
}

🔄 Workflow des états

États possibles

stateDiagram-v2
[*] --> Draft: Create Collection
Draft --> Submitted: Submit for Validation
Submitted --> TeamManagerValidation: Level 1 Validation
TeamManagerValidation --> Approved: Approve
TeamManagerValidation --> Rejected: Reject
TeamManagerValidation --> SupervisorValidation: Level 2 Validation
SupervisorValidation --> Approved: Approve
SupervisorValidation --> Rejected: Reject
Rejected --> Draft: Return for Correction
Approved --> [*]

Transitions autorisées

État actuelTransitionConditionNouvel état
draftSubmitUtilisateur authentifiésubmitted
submittedValidate L1Role Chef d'Équipeteam_manager_validation
team_manager_validationApproveValidation positivesupervisor_validation
team_manager_validationRejectValidation négativerejected
supervisor_validationApproveValidation finaleapproved
supervisor_validationRejectRejet finalrejected
rejectedReturnRetour pour correctiondraft

🛠️ Gestion des erreurs

Erreurs de validation

{
"success": false,
"message": "Erreur de validation",
"result": null,
"errors": [
"Le champ 'collection_date' est requis",
"Le champ 'collector_id' doit être un nombre",
"La quantité doit être supérieure à 0"
],
"except": null
}

Erreurs d'autorisation

{
"success": false,
"message": "Permissions insuffisantes",
"result": null,
"errors": ["Vous n'avez pas les permissions pour valider cette collection"],
"except": null
}

Erreurs de workflow

{
"success": false,
"message": "Transition non autorisée",
"result": null,
"errors": ["Impossible de valider une collection déjà approuvée"],
"except": null
}

Cette API Trade Flow fournit une interface complète pour la gestion des flux commerciaux avec un système de validation robuste et des capacités de reporting avancées.