Skip to main content

📋 Complaints Management

📋 Vue d'ensemble​

Le module Complaints Management permet aux administrateurs de gérer toutes les plaintes du systÚme. Il offre des outils complets pour le suivi, l'assignation et la résolution des plaintes avec un workflow structuré.

đŸ—ïž Architecture​

  • Queue NATS : admin-service
  • Patterns : complaints.*
  • Workflow : SystĂšme de statuts structurĂ©
  • Assignation : Gestion des agents
  • Historique : TraçabilitĂ© complĂšte

📡 Message Patterns NATS​

1. Lister les Plaintes​

Pattern : complaints.all

Payload (ComplaintQueryDto)​

{
"page": 1,
"limit": 10,
"status": "PENDING",
"priority": "HIGH",
"assignedTo": "agent-uuid",
"search": "problĂšme livraison",
"sortBy": "createdAt",
"sortOrder": "desc"
}

Filtres Disponibles​

FiltreTypeDescription
statusStringStatut de la plainte
priorityStringPriorité (LOW, MEDIUM, HIGH, URGENT)
assignedToStringUUID de l'agent assigné
categoryStringCatégorie de plainte
searchStringRecherche dans titre et description

RĂ©ponse​

{
"success": true,
"message": "Complaints retrieved successfully",
"result": {
"data": [
{
"id": 1,
"publicId": "comp-uuid",
"title": "ProblĂšme de livraison",
"description": "Ma commande n'est pas arrivée...",
"status": "PENDING",
"priority": "HIGH",
"category": "DELIVERY",
"userId": "user-uuid",
"assignedTo": "agent-uuid",
"createdAt": "2024-01-15T10:00:00Z",
"updatedAt": "2024-01-15T10:00:00Z",
"user": {
"id": 1,
"username": "John DOE",
"email": "john@example.com"
},
"assignedAgent": {
"id": 1,
"firstName": "Agent",
"lastName": "Support",
"email": "agent@ofr.cm"
}
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 45,
"totalPages": 5
}
}
}

2. DĂ©tails d'une Plainte​

Pattern : complaints.details

Payload​

{
"id": "complaint-uuid"
}

RĂ©ponse ComplĂšte​

{
"success": true,
"message": "Complaint details retrieved successfully",
"result": {
"id": 1,
"publicId": "comp-uuid",
"title": "ProblĂšme de livraison",
"description": "Description détaillée du problÚme...",
"status": "IN_PROGRESS",
"priority": "HIGH",
"category": "DELIVERY",
"userId": "user-uuid",
"assignedTo": "agent-uuid",
"resolution": null,
"createdAt": "2024-01-15T10:00:00Z",
"updatedAt": "2024-01-15T14:30:00Z",
"user": {
"id": 1,
"username": "John DOE",
"email": "john@example.com",
"phone": "+237123456789"
},
"assignedAgent": {
"id": 1,
"firstName": "Agent",
"lastName": "Support",
"email": "agent@ofr.cm"
},
"attachments": [
{
"id": 1,
"fileName": "proof.jpg",
"filePath": "/uploads/complaints/proof.jpg",
"fileSize": 245760,
"uploadedAt": "2024-01-15T10:05:00Z"
}
],
"statusHistory": [
{
"id": 1,
"status": "PENDING",
"changedBy": "system",
"changedAt": "2024-01-15T10:00:00Z",
"comment": "Plainte créée automatiquement"
},
{
"id": 2,
"status": "IN_PROGRESS",
"changedBy": "agent-uuid",
"changedAt": "2024-01-15T14:30:00Z",
"comment": "Prise en charge par l'agent support"
}
]
}
}

3. Assigner une Plainte​

Pattern : complaints.assign

Payload​

{
"id": "complaint-uuid",
"assignData": {
"assignedTo": "agent-uuid",
"comment": "Assignation à l'agent spécialisé en livraisons"
}
}

4. Changer le Statut d'une Plainte​

Pattern : complaints.update-status

Payload​

{
"id": "complaint-uuid",
"statusData": {
"status": "IN_PROGRESS",
"comment": "Investigation en cours",
"priority": "HIGH"
}
}

5. RĂ©soudre une Plainte​

Pattern : complaints.resolve

Payload​

{
"id": "complaint-uuid",
"resolutionData": {
"resolution": "ProblÚme résolu : livraison reprogrammée pour demain. Client contacté et informé.",
"status": "RESOLVED",
"comment": "Résolution satisfaisante pour le client"
}
}

6. OpĂ©rations en Lot​

Pattern : complaints.bulk-action

Payload​

{
"ids": ["comp-uuid1", "comp-uuid2", "comp-uuid3"],
"action": "assign",
"actionData": {
"assignedTo": "agent-uuid",
"comment": "Assignation en lot pour traitement urgent"
}
}

Actions en Lot Disponibles​

ActionDescriptionDonnées Requises
assignAssigner Ă  un agentassignedTo, comment
update-statusChanger le statutstatus, comment
update-priorityChanger la prioritépriority, comment
closeFermer les plaintescomment

7. Statistiques des Plaintes​

Pattern : complaints.stats

Payload​

{
"period": "month",
"agentId": "agent-uuid"
}

RĂ©ponse​

{
"success": true,
"message": "Complaints statistics retrieved successfully",
"result": {
"overview": {
"totalComplaints": 150,
"pendingComplaints": 25,
"inProgressComplaints": 30,
"resolvedComplaints": 85,
"closedComplaints": 10
},
"byPriority": [
{"priority": "URGENT", "count": 5},
{"priority": "HIGH", "count": 20},
{"priority": "MEDIUM", "count": 80},
{"priority": "LOW", "count": 45}
],
"byCategory": [
{"category": "DELIVERY", "count": 60},
{"category": "PAYMENT", "count": 35},
{"category": "SERVICE", "count": 30},
{"category": "OTHER", "count": 25}
],
"agentPerformance": [
{
"agentId": "agent-uuid",
"agentName": "Agent Support",
"assignedComplaints": 15,
"resolvedComplaints": 12,
"averageResolutionTime": "2.5 days"
}
],
"resolutionTrends": {
"thisMonth": 35,
"lastMonth": 28,
"averageResolutionTime": "3.2 days"
}
}
}

📊 Enums et Statuts​

Statuts de Plainte (ComplaintStatus)​

enum ComplaintStatus {
PENDING = 'PENDING', // En attente
ASSIGNED = 'ASSIGNED', // Assignée
IN_PROGRESS = 'IN_PROGRESS', // En cours
WAITING_USER = 'WAITING_USER', // En attente utilisateur
ESCALATED = 'ESCALATED', // Escaladée
RESOLVED = 'RESOLVED', // Résolue
CLOSED = 'CLOSED', // Fermée
CANCELLED = 'CANCELLED' // Annulée
}

Workflow des Statuts​

graph TD
A[PENDING] --> B[ASSIGNED]
B --> C[IN_PROGRESS]
C --> D[WAITING_USER]
C --> E[ESCALATED]
C --> F[RESOLVED]
D --> C
E --> C
F --> G[CLOSED]
A --> H[CANCELLED]
B --> H
C --> H

PrioritĂ©s (ComplaintPriority)​

enum ComplaintPriority {
LOW = 'LOW', // Basse
MEDIUM = 'MEDIUM', // Moyenne
HIGH = 'HIGH', // Haute
URGENT = 'URGENT' // Urgente
}

CatĂ©gories (ComplaintCategory)​

enum ComplaintCategory {
DELIVERY = 'DELIVERY', // Livraison
PAYMENT = 'PAYMENT', // Paiement
SERVICE = 'SERVICE', // Service
TECHNICAL = 'TECHNICAL', // Technique
OTHER = 'OTHER' // Autre
}

🚀 FonctionnalitĂ©s AvancĂ©es​

1. Systùme d'Assignation Intelligent​

  • Auto-assignation : BasĂ©e sur la charge de travail
  • SpĂ©cialisation : Agents experts par catĂ©gorie
  • Équilibrage : Distribution Ă©quitable des tĂąches
  • Escalade automatique : Selon les SLA

2. Suivi et Historique​

  • Historique complet : Tous les changements de statut
  • Commentaires : À chaque Ă©tape
  • TraçabilitĂ© : Qui a fait quoi et quand
  • Audit trail : Pour conformitĂ©

3. Notifications et Alertes​

  • Notifications temps rĂ©el : Nouveaux assignments
  • Alertes SLA : DĂ©passement de dĂ©lais
  • Rappels automatiques : TĂąches en attente
  • Escalade : Vers superviseurs

4. Reporting et Analytics​

  • Tableaux de bord : MĂ©triques en temps rĂ©el
  • Rapports pĂ©riodiques : Performance agents
  • Tendances : Évolution des plaintes
  • KPIs : Temps de rĂ©solution, satisfaction

💡 Exemples d'Utilisation​

Assigner une Plainte Urgente​

{
"id": "comp-urgent-001",
"assignData": {
"assignedTo": "senior-agent-uuid",
"comment": "Plainte urgente - client VIP - traitement prioritaire requis"
}
}

RĂ©soudre avec Satisfaction Client​

{
"id": "comp-delivery-123",
"resolutionData": {
"resolution": "ProblÚme résolu : colis retrouvé et livré. Geste commercial appliqué (remise 10%). Client satisfait de la prise en charge.",
"status": "RESOLVED",
"comment": "Résolution complÚte avec compensation"
}
}

Traitement en Lot par Priorité​

{
"ids": ["comp-001", "comp-002", "comp-003"],
"action": "update-priority",
"actionData": {
"priority": "HIGH",
"comment": "ÉlĂ©vation de prioritĂ© suite Ă  rĂ©clamations multiples"
}
}

🎯 Le module Complaints Management offre une gestion complĂšte des plaintes avec workflow structurĂ©, assignation intelligente et outils de reporting pour assurer une rĂ©solution efficace et une satisfaction client optimale.