diff --git a/docs/WORKFLOW_AGENT.md b/docs/WORKFLOW_AGENT.md index c29860f..bc57571 100644 --- a/docs/WORKFLOW_AGENT.md +++ b/docs/WORKFLOW_AGENT.md @@ -14,6 +14,7 @@ Ce document décrit le parcours complet d'un agent utilisant SimpleConnect, depu ``` **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 @@ -25,8 +26,9 @@ Ce document décrit le parcours complet d'un agent utilisant SimpleConnect, depu ### 2.1 Interface de connexion L'agent arrive sur l'écran de connexion avec : -- Champ email -- Champ mot de passe + +- Champ code agent +- Champ mot de passe - Sélecteur de terminal téléphonique (liste dynamique) - Bouton de connexion @@ -50,7 +52,7 @@ AgentLogin(email, password, terminal) → Serveur SignalR password: "pass123" }, { - code: "centre2", + code: "centre2", applicationName: "https://pro.mondocteur.fr", accessCode: "user_clinique", password: "pass456" @@ -63,6 +65,7 @@ AgentLogin(email, password, terminal) → Serveur SignalR ### 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) @@ -78,6 +81,7 @@ AgentLogin(email, password, terminal) → Serveur SignalR ### 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 @@ -102,12 +106,13 @@ AgentLogin(email, password, terminal) → Serveur SignalR #### Actions système **Notification immédiate** : + ```javascript // Alerte visuelle showIncomingCallAlert({ - centreName: "Centre Cardio Lyon", - patientInfo: "Marie LAMBERT - 0612345678", - motif: "Consultation urgente" + centreName: "Centre Cardio Lyon", + patientInfo: "Marie LAMBERT - 0612345678", + motif: "Consultation urgente", }); // Son de notification @@ -115,6 +120,7 @@ playNotificationSound(); ``` **Auto-acceptation** : + - Timer de 3 secondes avant acceptation automatique - Ou acceptation manuelle immédiate par l'agent @@ -122,13 +128,13 @@ playNotificationSound(); ```javascript // Le système identifie le centre concerné -selectCenter('centre1'); +selectCenter("centre1"); // Bascule sur le bon onglet/webview -switchToTab('Centre Cardio Lyon'); +switchToTab("Centre Cardio Lyon"); // Mise à jour du statut -updateStatus('EN APPEL - Centre Cardio Lyon'); +updateStatus("EN APPEL - Centre Cardio Lyon"); ``` ### 3.3 Pendant l'appel @@ -136,11 +142,13 @@ updateStatus('EN APPEL - Centre Cardio Lyon'); **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"; @@ -148,10 +156,11 @@ updateStatus('EN APPEL - Centre Cardio Lyon'); ``` 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"); ``` @@ -181,17 +190,17 @@ updateStatus('EN APPEL - Centre Cardio Lyon'); ```javascript // Mise à jour automatique -updateStatus('DISPONIBLE'); +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 + timestamp: new Date().toISOString(), + duration: 180, // secondes + centre: "centre1", + status: "completed", + appointment: true, }); ``` @@ -202,18 +211,19 @@ saveCallHistory({ ```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' } + { 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 +selectCenter("centre2"); // Changement manuel ``` ### 4.2 Outils de productivité **Statistiques temps réel** : + ```javascript { calls: 15, // Appels traités aujourd'hui @@ -224,12 +234,13 @@ selectCenter('centre2'); // Changement manuel ``` **Notes et historique** : + ```javascript // Notes rapides par appel saveNotes({ - content: "Patient à rappeler pour confirmation", - centre: "centre1", - timestamp: new Date() + content: "Patient à rappeler pour confirmation", + centre: "centre1", + timestamp: new Date(), }); // Consultation historique @@ -241,14 +252,16 @@ getCallHistory(); // 100 derniers appels ```javascript // Documentation (DocXplore) childClientDocXplore = new BrowserWindow({ - x: 1920, y: 0, // Position configurée - title: "SimpleConnect / Wiki" + 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" + x: 2880, + y: 0, // Position configurée + title: "SimpleConnect / Infos client", }); ``` @@ -257,6 +270,7 @@ childClientDoc = new BrowserWindow({ ### 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é) @@ -265,31 +279,31 @@ La déconnexion peut être initiée par : ```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() +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() } ``` @@ -301,33 +315,33 @@ if (confirm('Voulez-vous vraiment vous déconnecter ?')) { ```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"] + "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" }, - "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" - } - ] + { + "Nom_File": "centre2", + "URL_File": "https://pro.mondocteur.fr" } + ] } + } } ``` @@ -360,7 +374,7 @@ ctiSimulator.startAutoSimulation(30); // Un appel toutes les 30 secondes // Scénarios prédéfinis ctiSimulator.simulateScenarios(): - "Appel urgent" -- "Patient régulier" +- "Patient régulier" - "Nouveau patient" - "Demande résultats" ``` @@ -425,13 +439,13 @@ ctiSimulator.simulateScenarios(): ```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); +if (callData.priority === "high") { + // Notification visuelle renforcée + showUrgentCallAlert(callData); + // Son différent + playUrgentSound(); + // Auto-acceptation immédiate + acceptCall(callData); } ``` @@ -440,13 +454,13 @@ if (callData.priority === 'high') { ```javascript // Affichage historique patient if (callData.lastVisit) { - showPatientHistory({ - lastVisit: callData.lastVisit, - appointments: callData.appointmentHistory - }); + 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. \ No newline at end of file +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.