đ 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â
| Filtre | Type | Description |
|---|---|---|
status | String | Statut de la plainte |
priority | String | Priorité (LOW, MEDIUM, HIGH, URGENT) |
assignedTo | String | UUID de l'agent assigné |
category | String | Catégorie de plainte |
search | String | Recherche 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â
| Action | Description | Données Requises |
|---|---|---|
assign | Assigner Ă un agent | assignedTo, comment |
update-status | Changer le statut | status, comment |
update-priority | Changer la priorité | priority, comment |
close | Fermer les plaintes | comment |
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.