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

12 KiB

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

// 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

// 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 :

// 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

// 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 :

    // Zone de notes rapides
    quickNotes.value = "Patient souhaite mardi matin de préférence";
    saveNotes(); // Sauvegarde horodatée
    
  3. Consultation documentation :

    // 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

// 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

// 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 :

{
    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 :

// 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

// 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

// 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

{
    "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 :

// 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

{
    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

// 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

// 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.