Files
SimpleClient-releases/docs/WORKFLOW_AGENT.md
Pierre Marx e6eaba3018 docs signalR
2025-09-04 11:55:08 -04:00

452 lines
12 KiB
Markdown

# Workflow complet d'un agent SimpleConnect
## Vue d'ensemble
Ce document décrit le parcours complet d'un agent utilisant SimpleConnect, depuis la connexion jusqu'à la déconnexion, en passant par la gestion des appels et l'utilisation des différentes fonctionnalités.
## 1. Lancement de l'application
### Actions au démarrage
```javascript
// L'agent lance l'application SimpleConnect
// Initialisation automatique des composants
```
**Processus système** :
- Connexion automatique au serveur SignalR (configuré dans `config.json`)
- Vérification de la disponibilité du service
- Récupération de la liste des terminaux téléphoniques disponibles
- Création du fichier de log journalier
- Génération du dashboard initial (état : application ouverte, non connecté)
## 2. Phase de connexion
### 2.1 Interface de connexion
L'agent arrive sur l'écran de connexion avec :
- Champ email
- Champ mot de passe
- Sélecteur de terminal téléphonique (liste dynamique)
- Bouton de connexion
### 2.2 Processus d'authentification
```javascript
// Envoi des credentials au serveur
AgentLogin(email, password, terminal) Serveur SignalR
// Réponse du serveur avec les informations complètes
{
accessCode: "AGENT001",
firstName: "Marie",
lastName: "DUPONT",
terminal: "3001",
connList: [ // Centres/files assignés à l'agent
{
code: "centre1",
applicationName: "https://pro.doctolib.fr",
accessCode: "user_cardio",
password: "pass123"
},
{
code: "centre2",
applicationName: "https://pro.mondocteur.fr",
accessCode: "user_clinique",
password: "pass456"
}
// ...
]
}
```
### 2.3 Post-connexion
**Actions automatiques après connexion réussie** :
1. Génération dynamique des onglets selon les centres assignés
2. Création des webviews pour chaque plateforme
3. Auto-connexion aux plateformes médicales (injection des credentials)
4. Mise à jour de l'interface :
- Titre fenêtre : "SimpleConnect - Agent: Marie DUPONT - Tel: 3001"
- Nom agent affiché dans l'interface
- Statut : "Disponible" (indicateur vert)
5. Activation de l'écoute des événements IPBX
6. Mise à jour du dashboard JSON avec les informations de connexion
## 3. Phase d'activité - Gestion des appels
### 3.1 État disponible
**L'agent est prêt à recevoir des appels** :
- Statut : indicateur vert "Disponible"
- Peut naviguer librement entre les onglets
- Peut consulter les plannings de manière proactive
- Statistiques visibles : appels traités, RDV pris
### 3.2 Réception d'un appel entrant
#### Séquence d'événements
```
1. Patient appelle le centre
2. Système IPBX détecte l'appel
3. Serveur SignalR envoie IpbxEvent
4. Client reçoit : {eventCode: 1, terminal: "3001", queueName: "centre1"}
5. Interface réagit automatiquement
```
#### Actions système
**Notification immédiate** :
```javascript
// Alerte visuelle
showIncomingCallAlert({
centreName: "Centre Cardio Lyon",
patientInfo: "Marie LAMBERT - 0612345678",
motif: "Consultation urgente"
});
// Son de notification
playNotificationSound();
```
**Auto-acceptation** :
- Timer de 3 secondes avant acceptation automatique
- Ou acceptation manuelle immédiate par l'agent
#### Basculement automatique
```javascript
// Le système identifie le centre concerné
selectCenter('centre1');
// Bascule sur le bon onglet/webview
switchToTab('Centre Cardio Lyon');
// Mise à jour du statut
updateStatus('EN APPEL - Centre Cardio Lyon');
```
### 3.3 Pendant l'appel
**Actions possibles de l'agent** :
1. **Prise de RDV** :
- Navigation dans le planning actif
- Recherche de créneaux disponibles
- Validation du RDV directement dans la webview
2. **Prise de notes** :
```javascript
// Zone de notes rapides
quickNotes.value = "Patient souhaite mardi matin de préférence";
saveNotes(); // Sauvegarde horodatée
```
3. **Consultation documentation** :
```javascript
// Ouverture wiki interne (nouvelle fenêtre)
OpenDoc("http://wiki.interne/protocoles");
// Consultation infos patient (fenêtre séparée)
OpenDoc("http://crm.interne/patient/12345");
```
4. **Informations contextuelles** :
- Historique des derniers appels du patient (si disponible)
- Procédures spécifiques au centre
- Tarifs et modalités
### 3.4 Fin d'appel
#### Séquence de libération
```
1. Patient/Agent raccroche
2. Système IPBX détecte la fin d'appel
3. Serveur SignalR envoie IpbxEvent
4. Client reçoit : {eventCode: 2, terminal: "3001", queueName: "centre1"}
5. Libération automatique de la file
```
#### Actions post-appel
```javascript
// Mise à jour automatique
updateStatus('DISPONIBLE');
callStats.calls++;
callStats.appointments++; // Si RDV pris
// Sauvegarde dans l'historique
saveCallHistory({
timestamp: new Date().toISOString(),
duration: 180, // secondes
centre: "centre1",
status: "completed",
appointment: true
});
```
## 4. Fonctionnalités disponibles pendant la session
### 4.1 Navigation multi-centres
```javascript
// L'agent peut gérer plusieurs centres simultanément
centres = [
{ id: 'centre1', nom: 'Centre Cardio Lyon', couleur: '#FF6B6B' },
{ id: 'centre2', nom: 'Clinique Saint-Jean', couleur: '#4ECDC4' },
{ id: 'centre3', nom: 'Cabinet Dr Martin', couleur: '#45B7D1' }
];
// Navigation libre entre les onglets (hors appel)
selectCenter('centre2'); // Changement manuel
```
### 4.2 Outils de productivité
**Statistiques temps réel** :
```javascript
{
calls: 15, // Appels traités aujourd'hui
appointments: 12, // RDV confirmés
avgDuration: 180, // Durée moyenne en secondes
successRate: 80 // Taux de conversion
}
```
**Notes et historique** :
```javascript
// Notes rapides par appel
saveNotes({
content: "Patient à rappeler pour confirmation",
centre: "centre1",
timestamp: new Date()
});
// Consultation historique
getCallHistory(); // 100 derniers appels
```
### 4.3 Fenêtres auxiliaires
```javascript
// Documentation (DocXplore)
childClientDocXplore = new BrowserWindow({
x: 1920, y: 0, // Position configurée
title: "SimpleConnect / Wiki"
});
// Informations client
childClientDoc = new BrowserWindow({
x: 2880, y: 0, // Position configurée
title: "SimpleConnect / Infos client"
});
```
## 5. Processus de déconnexion
### 5.1 Déclenchement
La déconnexion peut être initiée par :
- Clic sur le bouton "Déconnexion"
- Fermeture de l'application (croix de fenêtre)
- Timeout de session (si configuré)
### 5.2 Confirmation et nettoyage
```javascript
// Dialogue de confirmation
if (confirm('Voulez-vous vraiment vous déconnecter ?')) {
// 1. Notification au serveur
AgentLogoff(agentId);
// 2. Nettoyage local
currentAgent = null;
currentCentres = [];
webviews = {};
// 3. Fermeture des fenêtres auxiliaires
if (childClientDocXplore) childClientDocXplore.close();
if (childClientDoc) childClientDoc.close();
// 4. Génération log final
writeDashboardLog({
"PrestaConnect": {
"Connexion": {
"Connecte": "Non",
"Date_Deconnexion": new Date().toISOString()
}
}
});
// 5. Retour page connexion ou fermeture
showLoginPage(); // ou app.quit()
}
```
## 6. Logs et monitoring
### 6.1 Structure du dashboard
**Fichier** : `./log/log-Dashboard.json`
```json
{
"PrestaConnect": {
"Ouverture": {
"Ouvert": "Oui",
"Date": "2024-12-04T10:00:00.000Z",
"IP_Client": "192.168.1.50",
"IP_Serveur": "10.90.20.201:8002",
"Liste_Telephones": ["3001", "3002", "3003"]
},
"Connexion": {
"Connecte": "Oui",
"Date": "2024-12-04T10:01:00.000Z",
"Agent": "AGENT001",
"Telephone": "3001",
"Nom_Agent": "Marie DUPONT",
"Nombre_Files": 3,
"Files": [
{
"Nom_File": "centre1",
"URL_File": "https://pro.doctolib.fr"
},
{
"Nom_File": "centre2",
"URL_File": "https://pro.mondocteur.fr"
}
]
}
}
}
```
### 6.2 Logs détaillés
**Fichier** : `./log/YYYY-MM-DD-log.txt`
```
[2024-12-04 10:00:00.123] [info] Start application
[2024-12-04 10:00:01.456] [info] ip: 10.90.20.201:8002
[2024-12-04 10:00:02.789] [info] SignalR connected
[2024-12-04 10:01:00.123] [info] Agent login: AGENT001
[2024-12-04 10:05:30.456] [info] IpbxEvent received: eventCode=1, terminal=3001
[2024-12-04 10:08:45.789] [info] IpbxEvent received: eventCode=2, terminal=3001
```
## 7. Mode développement et simulation
### 7.1 Panneau de test CTI
En mode développement (`NODE_ENV=development`), un panneau de test permet :
```javascript
// Simulation d'appels
ctiSimulator.generateRandomCall();
// Simulation automatique
ctiSimulator.startAutoSimulation(30); // Un appel toutes les 30 secondes
// Scénarios prédéfinis
ctiSimulator.simulateScenarios():
- "Appel urgent"
- "Patient régulier"
- "Nouveau patient"
- "Demande résultats"
```
### 7.2 Statistiques de simulation
```javascript
{
total: 45, // Total appels simulés
today: 15, // Appels aujourd'hui
answered: 14, // Appels traités
missed: 1, // Appels manqués
average_duration: 180 // Durée moyenne
}
```
## 8. Diagramme d'états
```
┌─────────────┐
│ DÉCONNECTÉ │
└─────┬───────┘
│ Connexion
┌─────────────┐
│ CONNEXION │
└─────┬───────┘
│ Authentification réussie
┌─────────────┐ Appel entrant ┌─────────────┐
│ DISPONIBLE │ ←─────────────────→ │ EN APPEL │
└─────┬───────┘ Fin d'appel └─────────────┘
│ Déconnexion
┌─────────────┐
│ DÉCONNEXION │
└─────────────┘
```
## 9. Points clés du workflow
### Avantages pour l'agent
1. **Zéro friction** : Pas de recherche manuelle de plateforme
2. **Contexte automatique** : Basculement instantané vers le bon planning
3. **Productivité maximale** : Auto-connexion, notes rapides, historique
4. **Traçabilité complète** : Tous les événements sont enregistrés
5. **Multi-tâches optimisé** : Gestion simultanée de plusieurs centres
### Optimisations système
1. **Reconnexion automatique** SignalR en cas de perte réseau
2. **Sessions persistantes** dans les webviews
3. **Cache local** des dernières sélections (terminal, notes)
4. **Logs structurés** pour analyse et monitoring
5. **Mode simulation** pour formation et tests
## 10. Cas d'usage spéciaux
### 10.1 Appel urgent
```javascript
// Identification par priorité haute
if (callData.priority === 'high') {
// Notification visuelle renforcée
showUrgentCallAlert(callData);
// Son différent
playUrgentSound();
// Auto-acceptation immédiate
acceptCall(callData);
}
```
### 10.2 Patient régulier
```javascript
// Affichage historique patient
if (callData.lastVisit) {
showPatientHistory({
lastVisit: callData.lastVisit,
appointments: callData.appointmentHistory
});
}
```
### 10.3 Multi-files simultanées
L'agent peut recevoir des appels de différentes files et le système bascule automatiquement vers la bonne plateforme à chaque appel, permettant une gestion fluide multi-centres.