🎯 Ce qu'est Réactis
Réactis est une plateforme web de gestion de crise conçue spécifiquement pour les établissements de santé : cliniques, hôpitaux, EHPAD, HAD, SSIAD.
Quand une crise éclate dans un établissement (incendie, panne informatique, intoxication, coupure d'eau…), les équipes gèrent habituellement la situation via des appels téléphoniques, des SMS et des post-its. La traçabilité est approximative, les informations se perdent, et le rapport de fin de crise prend des heures à rédiger.
Réactis centralise tout ça en temps réel. C'est une main courante numérique accessible depuis n'importe quel appareil — ordinateur, tablette, smartphone — sans installation.
Ce que Réactis fait concrètement
- Ouvre une crise en 3 clics — type, nom, membres de la cellule
- Journalise chaque action, décision, alerte, information en temps réel avec horodatage automatique
- Alerte instantanément toute la cellule de crise par email, WhatsApp et Telegram à chaque ouverture ou mise à jour
- Propose des conseils IA basés sur le plan blanc de l'établissement et le type de crise
- Génère automatiquement les comptes rendus de réunion, la synthèse de crise, le rapport de fin et le RETEX
- Archive toutes les crises avec leur journal complet et leurs documents pour 5 ans (RETEX indéfiniment)
Ce que Réactis n'est pas
- Ce n'est pas un logiciel à installer — tout se passe dans le navigateur web
- Ce n'est pas un logiciel médical ou DPI — on n'y saisit pas de données patients
- Ce n'est pas un outil de gestion quotidienne — il s'active uniquement lors d'une crise
- Ce n'est pas un outil de communication public — c'est un espace privé pour la cellule de crise
🏥 Utilisateurs ciblés
Types d'établissements
| Type | Exemples | Besoins spécifiques |
|---|---|---|
| Cliniques MCO | Clinique privée, chirurgicale | Plan blanc, gestion patients en cours d'opération, communication familles |
| EHPAD / MR | Maison de retraite, EHPAD | Intoxications alimentaires, chutes massives, communication familles résidents |
| HAD / SSIAD | Hospitalisation à domicile | Coordination équipes terrain, communication sur sites dispersés |
| Groupes multi-sites | Groupe de cliniques, GHT | Périmètres multiples, pilotage centralisé, gestion inter-établissements |
💬 Ce que Réactis apporte
- Conformité HAS et réglementaire : traçabilité totale des crises
- Rapport de fin de crise généré en 2 clics au lieu de 2 jours
- Image de l'établissement préservée : familles et presse informées rapidement et de façon maîtrisée
- Moins de 5,50 € HT par jour pour 1 établissement (1 990 € HT/an ÷ 365)
- Aucun matériel à acheter, aucune maintenance informatique
- Fiches de mission numériques : chaque responsable sait quoi faire
- Alertes instantanées email, WhatsApp, Telegram et/ou Teams à l'ouverture de crise
- Conseils IA basés sur le plan blanc de l'établissement
- Utilisable depuis un smartphone sans application à installer
- Membres de la cellule tracés : qui s'est connecté, à quelle heure
- RETEX automatique : points forts, axes d'amélioration, recommandations
- Historique de toutes les crises archivé 5 ans (RETEX conservés indéfiniment)
- Apprentissage continu : l'IA tient compte des crises passées
- Score de conformité au plan blanc dans le rapport de fin
- Signalement ARS via les templates de communication intégrés
- Aucune installation sur les postes — accès 100% web
- Hébergement France sur VPS mutualisé IONOS (6 vCore, 8 Go RAM, 240 Go NVMe) — sauvegardes quotidiennes chiffrées AES-256 — migration vers un serveur OVH certifié HDS prévue en S1 2027
- Données IA : seul le journal de crise est transmis — aucune donnée patient
- Fournisseurs IA (Mistral AI par défaut, Groq/Anthropic/Microsoft Copilot au choix du client) : DPA RGPD signés, pas d'entraînement des modèles — Mistral AI traite intégralement en UE, sans transfert hors UE
- Pentest prévu avant mise en production définitive
Chiffres clés
- 5,45 € / jour pour 1 établissement jusqu'à 20 licences d'accès (1 990 € HT/an ÷ 365)
- 2 minutes pour ouvrir une crise et alerter toute la cellule
- 2 clics pour générer le rapport de fin de crise (au lieu de 2 jours)
- 5 ans d'archivage des crises, RETEX conservés indéfiniment
- 0 installation sur les postes — fonctionne sur tout navigateur
- 0 donnée patient transmise à l'IA
🛡️ Objections fréquentes et réponses
📋 Journal de crise
⚡ Rappel d'organisation à l'ouverture
À chaque ouverture de cellule de crise, Réactis affiche automatiquement une fenêtre de rappel invitant à désigner les rôles clés avant de commencer :
- Coordinateur·rice — pilote la cellule et prend les décisions
- Secrétaire de cellule de crise — dont le rôle est décrit ci-dessous
La secrétaire de cellule de crise maintient le journal propre et structuré : elle relit les entrées, corrige les fautes, s'assure que les informations clés sont bien tracées.
Elle n'alimente pas le journal à la place de tout le monde. Chaque membre de la cellule doit saisir lui-même ses propres actions, alertes et décisions dans le journal au fil de la crise.
Si la secrétaire est seule à écrire, l'horodatage et la traçabilité deviennent inexacts et la valeur probante du journal est compromise.
Lorsque la secrétaire est désignée dans la fenêtre d'ouverture, son nom est automatiquement consigné dans le journal (entrée ORGANISATION).
Le journal est le cœur de Réactis. Toute information saisie pendant la crise y est enregistrée avec :
- L'horodatage automatique à la seconde
- Le type d'entrée : INFO, ACTION, ALERTE, DÉCISION, RÉUNION, DOCUMENT
- L'auteur (nom de la personne connectée)
- Le statut : une ACTION peut être cochée ✓ Fait, une ALERTE peut être résolue
Types d'entrées expliqués
| Type | Usage | Couleur |
|---|---|---|
| INFO | Toute information factuelle : état de la situation, compte rendu d'un appel, observation terrain | Bleu |
| ACTION | Tâche à réaliser — peut être assignée à un membre, cochée quand réalisée | Vert |
| ALERTE | Alerte critique nécessitant attention immédiate — peut être résolue | Rouge |
| DÉCISION | Décision prise par la direction — trace définitive de qui a décidé quoi | Violet |
| RÉUNION | Déclenchement d'une visioconférence (lien Teams ou autre) | Gris |
| DOCUMENT | Pièce jointe PDF ou image ajoutée à la crise | Orange |
Fonctionnalités avancées du journal
- Date ou heure différente : permet de saisir une entrée avec un horodatage passé (utile pour documenter ce qui s'est passé avant l'ouverture de la crise). L'heure réelle de saisie est conservée en plus de l'heure indiquée par le collaborateur (visible au survol du badge « ⏱ heure rétroactive »), pour la traçabilité.
- Correction orthographique (bouton ✏️ Corriger) : corrige les fautes avant de valider l'entrée — dictionnaire français local, sans appel à une IA
- @ Taguer : associe directement l'entrée ACTION à un membre de la cellule, qui reçoit une notification par email (et par SMS en plus, si ce canal complémentaire est activé pour cette fonctionnalité dans l'admin du tenant)
- Dictée vocale (🎤 Dicter) : reconnaissance vocale pour saisir sans clavier
- Filtre par membre : en vue Pilotage, affiche uniquement les tâches d'un membre
Vue Journal vs Vue Pilotage
- Vue Journal : chronologique, toutes les entrées dans l'ordre — orientée secrétaire de cellule de crise
- Vue Pilotage : vue par défaut — organisée en 5 blocs — Alertes actives, Dernières informations, Actions en cours, Tâches assignées, Décisions prises. Idéal pour le coordinateur de crise.
🎓 Tour guidé — formation autonome intégrée
Réactis inclut sa propre prise en main : un tour guidé interactif, un par rôle (Coordinateur, Secrétaire, Membre, Invité), accessible depuis le tableau de bord. Aucune intervention d'un formateur externe n'est nécessaire — l'apprentissage est entièrement automatisé et autonome pour l'utilisateur.
Comment ça marche
- Chaque rôle a son propre parcours pas à pas (34 étapes Coordinateur, 25 Secrétaire, 15 Membre, 30 Invité), adapté exactement à ce que ce rôle peut faire dans l'outil — pas un mode générique unique.
- Au démarrage, le tour génère automatiquement une crise de Formation pré-remplie avec un scénario réaliste ("Rupture alimentation eau" — 18 entrées INFO/ACTION/DÉCISION/ALERTE + 7 aides), avec substitution des vrais membres de l'établissement (noms, emails) à la place de noms fictifs — un journal déjà vivant, pas un écran vide.
- Cette crise est en mode Formation (voir Nature de la crise ci-dessus) : aucun canal externe n'est jamais utilisé (email, WhatsApp, Telegram, Teams), et elle est exclue du corpus IA (RETEX, benchmark).
- À la dernière étape du tour, la crise de Formation est supprimée automatiquement (déplacée en corbeille, restaurable 30 jours) — aucune Formation ne reste jamais ouverte en permanence sur un tenant.
Pourquoi c'est un argument de vente fort
- Zéro coût de formation externe — pas de session à organiser, pas de prestataire à financer : l'établissement forme ses équipes lui-même.
- Traçabilité pour la certification HAS — la complétion du tour est enregistrée côté serveur (badge 🏅 sur le tableau de bord), preuve d'accompagnement à la prise en main de chaque utilisateur.
- Relançable à tout moment — nouvel arrivant, changement de rôle, rappel avant un exercice de simulation : quelques minutes suffisent, sans intervention.
- Répond directement à l'objection « Nos équipes ne sont pas à l'aise avec les outils numériques » (voir Objections fréquentes) — le tour guidé rend l'outil auto-explicatif.
📡 Alertes multi-canaux
À chaque événement clé, Réactis envoie automatiquement une notification à tous les membres de la cellule de crise.
Événements déclenchant une alerte
- Ouverture de crise : alerte immédiate à tous les utilisateurs du périmètre concerné
- Mise à jour périodique : compte rendu d'étape généré par IA et envoyé automatiquement par email toutes les X heures (réglage « Points d'étape », configurable par le coordinateur depuis le journal de crise, par défaut 1h — désactivable)
- Fermeture de crise : notification de clôture
- Entrée de type ALERTE saisie dans le journal : alerte push immédiate via WhatsApp et/ou Telegram (canaux activés dans l'admin du tenant), et par SMS en plus si ce canal complémentaire est activé pour les ALERTE
- Assignation d'une ACTION à un membre (@ Taguer) : un email est envoyé automatiquement au membre désigné avec le détail de la tâche à réaliser et un lien direct vers la cellule de crise, et par SMS en plus si ce canal complémentaire est activé pour cette fonctionnalité
- Invitation à rejoindre une visioconférence (bouton RÉUNION)
Canaux disponibles
| Canal | Configuration | Inclus dans |
|---|---|---|
| SMTP configurable (serveur client ou relais Réactis) | Tous les abonnements | |
| Compte WhatsApp scanné via QR code dans Admin | Tous les abonnements | |
| Telegram | Bot Telegram configuré dans Admin | Tous les abonnements |
| Teams (sortant) | URL Incoming Webhook Teams — Admin → Teams → Option A | Tous les abonnements |
| Teams (entrant) | Graph API Azure AD + abonnement canal — Admin → Teams → Option B | Tous les abonnements |
| SMS | Clé API Scaleway + Project ID — Admin → SMS. Envoyé, comme les autres canaux activés (email/WhatsApp/Telegram/Teams), à l'ouverture de crise ; activable en plus, spécifiquement, pour les entrées ALERTE (en complément de WhatsApp/Telegram, qui restent le canal par défaut) et pour @ Taguer (en complément de l'email, qui reste le canal par défaut) | Non inclus — compte Scaleway et facturation à la charge de l'établissement |
Intégration Microsoft Teams
Réactis propose deux niveaux d'intégration Teams, indépendants et cumulables, pour les établissements dont les équipes travaillent principalement dans l'environnement Microsoft 365.
Option A — Notifications sortantes (Incoming Webhook)
Réactis envoie automatiquement un message dans un canal Teams à chaque événement clé de la crise. Aucune connexion Azure AD requise.
| Événement | Message envoyé dans Teams |
|---|---|
| 🚨 Ouverture de crise | Nom, type, heure d'ouverture — lien Réactis |
| ⚠️ Nouvelle alerte | Texte de l'alerte saisie dans le journal |
| 📋 Nouvelle décision | Texte de la décision prise |
| 🤖 Synthèse IA | Notification de disponibilité + lien |
| 📝 Compte rendu d'étape | Notification d'envoi du compte rendu + lien |
| ✅ Fermeture de crise | Durée, nombre d'entrées |
Configuration (3 min) : Dans Teams → canal cible → ⋯ → Connecteurs → Incoming Webhook → Configurer → Copier l'URL → Admin Réactis → Teams → Option A → coller l'URL → Enregistrer → Tester.
webhook.office.com, utiliser Power Automate : créer un flux "Quand une requête HTTP est reçue" → "Publier dans un canal Teams" → copier l'URL du déclencheur.Option B — Écoute d'un canal Teams (messages entrants → journal)
Les messages postés dans un canal Teams dédié à la crise par les membres de la cellule sont automatiquement intégrés dans le journal Réactis en temps réel (type INFO), avec le nom de l'auteur et l'horodatage Teams. L'équipe peut ainsi continuer à travailler dans Teams tout en alimentant Réactis.
| Étape | Action | Qui |
|---|---|---|
| 1 | Configurer Azure AD (Tenant ID, Client ID, Secret) dans Admin → Teams | IT client |
| 2 | Ajouter la permission ChannelMessage.Read.All (Application) + Grant admin consent | IT client |
| 3 | Récupérer le Team ID et le Channel ID depuis le lien du canal Teams | IT client ou référent |
| 4 | Admin Réactis → Teams → Option B → saisir Team ID + Channel ID → Activer l'abonnement | Admin Réactis |
Configuration des destinataires
Les destinataires des emails de crise sont exclusivement les utilisateurs enregistrés dans Admin → Utilisateurs, tous rôles confondus (Coordinateur, Membre, Invité), filtrés par périmètre : un utilisateur associé au périmètre "CLINIQUE" ne reçoit que les emails des crises de type "CLINIQUE". Il n'existe pas d'adresse email libre indépendante d'un compte utilisateur — chaque destinataire correspond à une licence d'accès.
Les numéros WhatsApp et identifiants Telegram sont configurés séparément (Admin → WhatsApp / Telegram), également par périmètre.
Des membres supplémentaires peuvent être ajoutés lors de l'ouverture d'une crise spécifique, sans modifier la configuration globale.
📊 Pilotage en temps réel
La vue Pilotage offre une vision synthétique de l'état de la crise en 5 blocs :
- 🚨 Alertes actives : toutes les entrées ALERTE non résolues — affiche combien d'alertes sont en cours
- ℹ️ Dernières informations : les 5 dernières entrées INFO
- ✅ Actions en cours : toutes les entrées ACTION avec leur statut ✓ Fait / en attente
- 👤 Tâches assignées : actions assignées à un membre spécifique via @ Taguer
- 🎯 Décisions prises : toutes les entrées DÉCISION
Le filtre par membre en haut de la vue Pilotage permet d'afficher uniquement les tâches d'une personne. Pratique lors des points de situation : chaque responsable voit ce qui lui est assigné.
📹 Réunion et compte-rendu
Le bouton RÉUNION dans le panneau de saisie déclenche deux actions simultanées :
- Une entrée "RÉUNION" est ajoutée dans le journal avec le lien visio
- Une invitation WhatsApp, Teams et/ou email est envoyée à tous les membres de la cellule avec le lien de visioconférence (selon les canaux paramétrés)
Compte rendu d'étape IA
Réservé aux coordinateurs (+ secrétaire de main courante). Après une réunion, le bouton Compte rendu d'étape génère automatiquement un compte rendu structuré basé sur les entrées du journal. Si une transcription Teams a été importée, elle est incluse dans l'analyse. Le CR peut être copié, édité manuellement ou verrouillé puis envoyé par email à la cellule.
Intégration Teams
Réactis propose deux modes d'intégration avec Microsoft Teams :
- Connexion directe Teams (si configurée par le client) — depuis l'onglet Admin → Teams, le client saisit son Webhook entrant. Dès l'ouverture d'une crise, les alertes et mises à jour sont automatiquement postées dans le canal Teams configuré. Les membres reçoivent les notifications directement dans leur environnement de travail habituel.
- Import de transcription (réservé aux coordinateurs + secrétaire de main courante) — après une réunion Teams, il est possible d'importer le fichier de transcription (format .vtt, .docx ou .txt). Avant tout traitement IA, Réactis scanne automatiquement le contenu à la recherche d'éléments à risque (données sensibles, informations personnelles…) et bloque l'import tant qu'ils ne sont pas corrigés. Une fois cette vérification passée, Réactis filtre automatiquement les échanges sans valeur opérationnelle ("d'accord", "au revoir"…) et intègre les échanges pertinents dans le journal en tant qu'entrées INFO, enrichissant ainsi le compte-rendu IA.
📄 Fiches de mission
Les fiches de mission sont des listes de tâches prédéfinies par service, accessibles en un clic depuis la crise active (bouton 📋 Fiches de mission). Chaque fiche représente un rôle dans la cellule de crise.
Les fiches standards incluses
| Service | Onglet | Spécificité |
|---|---|---|
| 🏥 Directeur de crise | Directeur | Coordination générale, autorité |
| 🩺 Responsable médical | Médecin | Triage, soins, protocoles médicaux |
| 👩⚕️ DSSI (Directeur des soins) | DSSI | Organisation soignante, effectifs |
| 💻 Responsable SI | Resp. SI | Crises cyber, HIS, ransomware — inclut déclaration ANSSI obligatoire |
| 📦 Logistique | Logistique | Matériel, approvisionnement, locaux |
| 🛠️ Responsable technique | Technique | Pannes, prestataires, équipements — crises eau/énergie/ascenseurs/biomédical |
| 👥 Ressources Humaines | RH | Effectifs, rappels, astreintes |
| 📢 Communication | Comm. | Presse, familles, réseaux sociaux |
| 📋 Qualité | Qualité | Traçabilité, signalements ARS/HAS |
| 💊 Pharmacien | Pharmacien | Gestion médicaments, stock critique |
Fonctionnement
- Chaque fiche contient une liste d'actions ordonnées par priorité pour la phase de crise
- L'opérateur coche les actions réalisées — les coches sont sauvegardées en temps réel
- La modale des fiches est large (960px) avec des onglets aux intitulés complets (plus de troncature) pour naviguer facilement entre les services
- Les actions cochées apparaissent dans le rapport de fin de crise (section conformité)
Fiches génériques — entièrement modifiables (Admin → Documents)
Les 10 fiches standards ci-dessus sont éditables directement depuis le panneau Admin (onglet Documents, encart "📋 Fiches de mission génériques") — réservé aux coordinateurs. Il est possible de modifier le libellé du service, l'emoji, la couleur, le texte de chaque action, d'ajouter une action ("+ Ajouter une action"), de supprimer une action ou une fiche entière, et même d'ajouter une fiche générique entièrement nouvelle ("+ Nouvelle fiche") — utile pour un service récurrent chez ce client qui ne justifie pas une génération IA. Chaque fiche a ses propres cases à cocher pour choisir les types de crise (périmètres) où elle doit apparaître.
Fiches personnalisées depuis le plan blanc — générées par IA et personnalisables
En plus des fiches standards, l'IA peut générer des fiches supplémentaires adaptées à l'établissement (bloc chirurgical, oncologie, réanimation néonatale…) en analysant le plan blanc uploadé. Ces fiches générées sont ensuite entièrement personnalisables avant enregistrement : modifier le texte de chaque action, en supprimer, en ajouter (bouton "+ Ajouter une action"), ou supprimer la fiche entière. Voir la section ✨ Génération IA de fiches pour le détail complet.
Configuration pour les clients
Les fiches standards s'adaptent à chaque client directement depuis le panneau Admin (voir ci-dessus, plus besoin d'éditer le fichier JSON à la main). Pour les services très spécifiques identifiés dans le plan blanc (centre de greffes, chirurgie robotique…), la génération IA reste l'option la plus rapide.
📨 Templates de communication
Le bouton 📨 Communiquer donne accès à une bibliothèque de templates de messages pré-écrits, organisés par audience :
- Personnel : alertes internes, procédures dégradées, retour à la normale
- Familles : messages d'information, points de situation rassurants
- Presse : communiqués, points de situation publics
- Partenaires : alertes prestataires, signalement ARS, demandes de transfert
Chaque template est pré-rempli automatiquement avec le nom de l'établissement, la date et l'heure de la crise. L'opérateur clique sur "🔍 Ouvrir" pour lire le message en grand, le modifier si besoin, puis "📋 Copier" pour le coller dans son outil de messagerie.
communication_templates.json dans leur répertoire data.📚 Plan blanc et base documentaire
Base documentaire
Réservé aux coordinateurs (+ secrétaire de main courante). La base documentaire (bouton 📚 Base documentaire) permet d'uploader et consulter les documents de référence de l'établissement : plan blanc principal, fiches réflexes, procédures d'urgence. Ces documents sont accessibles pendant la crise sans quitter l'interface.
🔍 Scanner de risques à l'intégration
Aucun document déposé (plan blanc, fiches réflexes, base documentaire) n'échappe à un contrôle automatique local, sans aucun appel IA, exécuté avant tout enregistrement : recherche de marqueurs de classification restreinte/interne, de numéros de mobile personnels et d'adresses email nominatives. Selon le réglage choisi dans Admin → Documents (bloquant par défaut, ou avertissement), un document signalé est soit refusé (à corriger avant réintégration), soit conservé mais marqué à risque — et dans ce cas jamais transmis au pipeline IA tant qu'il reste signalé.
Ce contrôle automatique s'ajoute à la validation humaine existante : chaque document déposé dans la base documentaire doit être approuvé par un Valideur (bouton ✅ Valider) avant d'être exploité par les fonctions IA. Cette validation conditionne également l'usage du plan blanc et des fiches réflexes par l'IA (conseils en cellule de crise, rapport de fin de crise, génération des fiches de mission) : un plan blanc ou une fiche déposé par l'administrateur n'est exploité par l'IA que si un document au nom correspondant a par ailleurs été approuvé par un Valideur dans la base documentaire.
Extraction automatique du plan blanc
Quand un PDF est uploadé dans la base documentaire, Réactis l'extrait automatiquement via OCR (reconnaissance de texte) au démarrage du serveur. Le contenu extrait est utilisé par l'IA pour les conseils et le rapport de fin de crise.
Documents reconnus automatiquement :
- Plan blanc principal (
plan_blanc.pdf) - Fiches réflexes : incendie, intoxication, rupture eau, alerte sociale, indisponibilité SI
✨ Génération de fiches de mission depuis le plan blanc (IA)
Dans Admin → Documents, le bouton "✨ Analyser le plan blanc" déclenche une analyse IA du plan blanc pour générer des fiches de mission personnalisées, adaptées aux services spécifiques de l'établissement.
- L'IA identifie les services SPÉCIFIQUES mentionnés dans le plan blanc (ex : bloc chirurgical, oncologie, réanimation néonatale, HAD…)
- Les fiches standard sont exclues de la génération — seuls les services propres à l'établissement sont créés
- Chaque fiche proposée est entièrement éditable avant validation : nom du service, actions, couleur, emoji
- Les fiches générées s'ajoutent aux fiches standard sans les remplacer
🧠 RETEX et apprentissage continu
Le RETEX (Retour d'EXpérience) est un document structuré généré par l'IA après chaque crise. Il analyse le journal complet et produit :
- Résumé exécutif de la crise
- Chronologie critique des moments décisifs
- Décisions clés prises pendant la crise
- Points forts de la gestion
- Axes d'amélioration
- Recommandations concrètes pour les prochaines crises
- Métriques de performance (score de coordination, réactivité, documentation)
Apprentissage continu
Les RETEX validés par l'administrateur sont réinjectés dans l'IA lors des crises du même type. Concrètement : lors d'une deuxième panne informatique, les conseils proposés par l'IA tiendront compte des leçons apprises lors de la première panne. C'est un apprentissage propre à chaque établissement.
Conservation des RETEX
Les RETEX sont conservés indéfiniment, même après la purge réglementaire des données brutes des crises (5 ans). Ils représentent la mémoire institutionnelle de l'établissement.
🌿 Conseils terrain
Onglet "🌿 Conseils terrain" dans l'admin — accessible après validation du RETEX, même plusieurs jours après la clôture de la crise.
Ces conseils sont des retours opérationnels libres : ce qui manquait dans le plan blanc, ce qui a bien fonctionné, des recommandations issues du terrain qui ne relèvent pas forcément d'une procédure formelle.
Organisation
- Conseils classés par type de crise (panne informatique, intoxication alimentaire, incendie…)
- Chaque conseil est horodaté et peut être associé à la crise source
- Ajout, modification et suppression à tout moment
Utilisation
Les conseils terrain ne sont pas encore une source pour l'IA : ils ne sont pas lus au moment où l'IA génère ses conseils en cellule de crise. Ils restent aujourd'hui consultés à la main par les coordinateurs — recherche dans l'onglet, impression, ou envoi par email — avant ou pendant une crise du même type.
Sources réellement utilisées par les conseils IA (en cellule de crise)
Le bouton "Conseils" affiché pendant une crise s'appuie, lui, sur quatre sources automatiques :
- Le journal de la crise en cours (entrées déjà saisies, anonymisées avant envoi à l'IA)
- Les RETEX validés de crises passées du même type (jusqu'à 3, avec points forts, axes d'amélioration, recommandations et priorités identifiées)
- Un comparatif de performance en direct vs. l'historique des crises du même type (taux de résolution des actions, actions non traitées)
- Le plan blanc et les fiches réflexes validés, filtrés selon le domaine et le type de crise en cours
Partage
- Imprimer : bouton 🖨 en haut de l'onglet — génère un document propre par type de crise
- Envoyer par email : bouton 📧 — sélection dans la liste des utilisateurs enregistrés (établissement, puis régional/national liés à terme), aucune saisie libre d'adresse
💶 Impact financier des crises
Onglet "💶 Impact financier" dans l'admin — accessible pour chaque crise clôturée, même plusieurs jours après la fermeture. Typiquement renseigné par la directrice financière ou la directrice de l'établissement.
Saisie
- Plusieurs lignes de coûts avec catégorie, description et montant en euros
- Catégories : Ressources humaines, Matériel et équipements, Prestataires externes, Coûts logistiques, Pénalités/pertes d'exploitation, Communication, Autres
- Total calculé automatiquement à la saisie
- Champ "Notes complémentaires" libre (contexte, précisions)
Partage
- Imprimer : bouton 🖨 dans le panneau de chaque crise
- Envoyer par email : bouton 📧 — sélection dans la liste des utilisateurs enregistrés (établissement, puis régional/national liés à terme), aucune saisie libre d'adresse
Remontée multi-tenant
L'impact financier de chaque crise est automatiquement agrégé aux niveaux supérieurs :
| Niveau | Données disponibles |
|---|---|
| Établissement | Impact par crise + total par établissement |
| Régional | Cumul des impacts de tous les établissements de la région + total régional |
| National (Groupe) | Cumul des impacts par région + total national global |
📑 Rapport de fin de crise
Le rapport de fin de crise est généré automatiquement à la fermeture via le bouton correspondant. Il comporte 3 parties :
Partie 1 — Conformité au plan blanc
- Ce qui a été fait conformément au plan blanc
- Ce qui a été omis ou incomplet
- Ce qui n'a pas été fait
- Score de conformité sur 10
Partie 2 — Analyse du pilotage
- Bilan de la coordination (réunions, taux de résolution des actions)
- Points forts
- Axes d'amélioration
- Recommandations opérationnelles pour la prochaine crise
Partie 3 — Utilisation de la plateforme
- Score d'utilisation sur 100 : mesure si toutes les fonctionnalités ont été exploitées
- Fonctionnalités bien utilisées vs sous-exploitées
- Objectif pour la prochaine crise
📧 Envoi RETEX & CR par email
Une fois la crise clôturée, le bouton "📧 Envoyer RETEX & CR" apparaît sur l'écran de fermeture. Il permet d'envoyer en un clic les documents de synthèse aux destinataires choisis.
Choix des destinataires
Une case à cocher par utilisateur enregistré (Coordinateur ou Membre) permet de sélectionner précisément qui reçoit l'email — aucune adresse externe en saisie libre : seuls les utilisateurs enregistrés de l'établissement (et à terme des tenants régional/national liés) peuvent être destinataires. Pour joindre une personne extérieure (direction générale, ARS, assurance, partenaire externe…), elle doit d'abord être créée comme utilisateur, ou — en cellule de crise active — ajoutée comme "personne ponctuelle" (bouton dédié), ce qui lui ouvre un accès Invité limité à cette crise et l'autorise alors comme destinataire.
Contenu de l'email
L'email contient, selon ce qui est disponible pour la crise :
- Le RETEX validé (si un administrateur l'a validé) — synthèse IA structurée de la crise
- Le Rapport de fin de crise (s'il a été généré) — rapport IA en 3 parties
Prérequis
- La configuration SMTP de l'établissement doit être renseignée dans l'admin (onglet Configuration → Emails)
- Les membres doivent avoir une adresse email configurée pour le mode "Membres de la cellule"
🤖 Intelligence Artificielle — Comment ça marche
Réactis utilise l'intelligence artificielle pour assister l'équipe de crise, pas pour décider à sa place. Tout ce que l'IA génère peut être modifié, ignoré ou rejeté par l'opérateur humain.
Principe général
L'IA fonctionne comme un consultant expert en gestion de crise hospitalière qui lit le journal en temps réel et propose des suggestions. Elle ne "voit" que le contenu du journal de la crise et les documents du plan blanc — rien d'autre.
Choix des fournisseurs
Le client dispose d'un seul fournisseur IA actif à la fois parmi les quatre disponibles — aucune combinaison simultanée n'est possible (garantie d'exclusivité au niveau du backend). Le fournisseur actif est configurable en self-service, à la main du client, depuis Admin → Établissement → bloc 🤖 Intelligence artificielle. Depuis le 16/07/2026, Mistral AI est le fournisseur activé par défaut à l'ouverture de tout nouveau tenant.
❌ Désactivation complète de l'IA — self-service (depuis le 21/07/2026)
Le même sélecteur Admin → Intelligence artificielle propose un 5e choix, "❌ Aucune IA (désactivée)", au même titre qu'un 5e fournisseur — le client bascule dessus exactement comme il basculerait entre Mistral et Groq, sans étape intermédiaire ni intervention de l'équipe Réactis. Aucune clé n'est retirée ni modifiée : callAI() refuse simplement tout appel côté serveur tant que ce réglage est actif, avec un message d'erreur explicite propagé jusqu'à l'interface.
Fournisseur par défaut : Mistral AI — inclus gratuitement
Mistral AI est une entreprise française, dont le traitement des données s'effectue intégralement au sein de l'Union européenne — aucun transfert hors UE, donc aucun recours nécessaire aux clauses contractuelles types (CCT/SCC) contrairement à Groq et Anthropic (sociétés américaines). Le modèle utilisé est mistral-small-latest. C'est un choix particulièrement adapté au secteur hospitalier, soucieux de la localisation des données. Son usage dans Réactis est gratuit pour le client (coûts inclus dans l'abonnement).
Fournisseur disponible : Groq — inclus gratuitement
Groq est un service d'IA américain qui utilise le modèle Llama 3.3 70B (un grand modèle de langage développé par Meta, disponible en open-source). Groq est particulièrement rapide (réponse en 1-3 secondes) et son usage dans Réactis est gratuit pour le client (les coûts sont inclus dans l'abonnement).
Fournisseur disponible : Anthropic Claude — inclus gratuitement
Anthropic est une entreprise spécialisée en IA fondée par d'anciens membres d'OpenAI. Leur modèle Claude Haiku est utilisé dans Réactis. Claude produit des textes généralement plus fluides et nuancés que Groq. Comme Groq, son usage dans Réactis est gratuit pour le client.
Fournisseur disponible : Microsoft Copilot — abonnement du client
Si l'établissement dispose déjà d'un abonnement Microsoft 365 Copilot, le client peut connecter Réactis à sa propre instance Copilot en renseignant lui-même sa clé API, en self-service depuis Admin → Établissement. L'IA utilisée est alors celle du client — Réactis n'est que le canal d'envoi des requêtes.
- Coût pour le client : couvert par leur abonnement Microsoft 365 existant — aucun surcoût Réactis
- Activation : le client configure lui-même sa clé API Azure OpenAI/Copilot en self-service, depuis Admin → Établissement → bloc ☁️ Azure OpenAI (Copilot) — Réactis n'a jamais accès à cette clé et ne peut pas la configurer à sa place
- Avantage : les données restent dans l'environnement Microsoft de l'établissement (souveraineté des données, conformité RGPD interne)
- Cas d'usage typique : groupes hospitaliers ou CHU déjà équipés Microsoft 365 — Réactis s'intègre dans leur écosystème existant sans coût IA additionnel
Comparatif des quatre fournisseurs
| Mistral AI | Groq (Llama 3.3) | Anthropic Claude | Microsoft Copilot | |
|---|---|---|---|---|
| Origine / hébergement | 🇫🇷 France (UE) | 🇺🇸 USA | 🇺🇸 USA | Selon tenant client M365 |
| Vitesse | Rapide (2-5s) | ⚡ Très rapide (1-3s) | Rapide (3-8s) | Variable |
| Qualité texte | Bonne | Bonne | Très bonne | Très bonne |
| Coût client | Inclus | Inclus | Inclus | Couvert par abonnement M365 |
| Activation / désactivation | Self-service — actif par défaut | Self-service — déjà pré-activé, bascule immédiate | Self-service — déjà pré-activé, bascule immédiate | Self-service — clé Azure à renseigner par le client lui-même (jamais par Réactis) |
| Combinable avec les autres | ❌ Non — un seul fournisseur actif à la fois | ❌ Non | ❌ Non | ❌ Non |
| Usage recommandé | Tous les clients (par défaut) | Besoin de vitesse maximale | Clients exigeants / gros volumes | Clients déjà équipés Microsoft 365 |
💡 Bouton CONSEILS — Détail complet
C'est la fonctionnalité IA la plus visible : en crise active, le panneau gauche propose des conseils en temps réel basés sur le plan blanc.
{"suggestions":[{"id":"1","priority":"URGENT","service":"Directeur Général","text":"...","source":"Plan Blanc — Chapitre 2"}]}. Durée : 2-8 secondes selon le fournisseur.conseils_log[]) avec : l'horodatage, les suggestions proposées, et le statut choisi par le gestionnaire pour chaque suggestion. Cet historique est accessible dans l'onglet 📊 Conseils IA de l'administration.📊 Rapport Conseils IA (Admin)
L'onglet 📊 Conseils IA dans l'admin offre une vue analytique complète :
- KPIs globaux : total d'appels, conseils proposés, taux d'acceptation, répartition des statuts
- Lacunes plan blanc : si un service est fréquemment marqué "Non pertinent" ou "Plus tard" sur plusieurs crises, c'est un signal que les procédures de ce service méritent d'être renforcées dans le plan blanc
- Détail par crise : tableau chronologique de toutes les crises ayant utilisé les conseils IA — cliquer sur une ligne ouvre une modal détaillée
- Modal de détail par crise : affiche les conseils groupés par appel IA (avec horodatage et délai depuis l'ouverture de la crise), chaque suggestion avec son badge statut coloré (✅ vert / ⏭ bleu / ⏰ ambre / ❌ rouge / ○ gris), la priorité (URGENT/IMPORTANT/SURVEILLANCE), le service responsable et la source (fiche réflexe). Un récapitulatif des KPIs figure en en-tête de la modal.
🎯 Filtres KPI interactifs
Les vignettes KPI sont cliquables à deux endroits :
- Dans le tableau principal (Admin → Conseils IA) : cliquer sur une vignette de statut (ex. "Fait", "Déjà traités"…) filtre le tableau et n'affiche que les crises ayant au moins un conseil avec ce statut. La vignette active est entourée d'un encadré coloré. Cliquer à nouveau dessélectionne le filtre.
- Dans la modal de détail d'une crise : cliquer sur une vignette KPI de la modal filtre les suggestions affichées et masque les appels IA qui ne contiennent aucune suggestion correspondante. Utile pour isoler rapidement, par exemple, tous les conseils "Non pertinents" et identifier les failles du plan blanc.
L'admin peut activer la contribution anonymisée : des métriques d'usage (taux d'acceptation, services ignorés) sont partagées avec IFclubs SAS sans aucun contenu de crise. Ces données permettent d'améliorer les conseils IA pour tous les établissements. Désactivé par défaut, configurable depuis l'onglet Conseils IA de l'admin.
✏️ Correction orthographique
📧 Point d'étape automatique
À l'intervalle configuré par le coordinateur (réglage « Points d'étape » dans le journal de crise, par défaut toutes les heures, désactivable), Réactis génère et envoie automatiquement par email un compte rendu d'étape complet rédigé par IA, sur le même modèle qu'un compte rendu de réunion. Il contient :
- La situation actuelle (4-6 phrases : contexte, chiffres clés, état opérationnel, tendance)
- Les décisions, actions en cours et actions réalisées depuis le compte rendu précédent
- Les prochaines étapes et points de vigilance
- Une synthèse globale de l'évolution de la crise depuis son ouverture
📊 Synthèse IA manuelle
En crise active, le bouton Synthèse IA (accessible via le menu 🤖 IA) génère à la demande une synthèse exécutive du journal.
📝 Compte rendu d'étape IA
situation (4-6 phrases sur l'état actuel), synthese_echanges (si transcription présente), decisions/actions_en_cours/actions_faites (objets horodatés {time, text}, fusionnés avec les entrées déjà typées du journal), prochaines_etapes, points_vigilance, et synthese_globale (3-5 phrases retraçant l'évolution depuis l'ouverture). Les noms des participants qui y apparaissent sont toujours au format court "Prénom I." — jamais le nom de famille complet.📑 Rapport de fin de crise IA — Détail
C'est la fonctionnalité IA la plus complexe. Elle s'active à la fermeture de la crise.
🧠 RETEX IA — Retour d'Expérience
🎙️ Filtrage de transcription Teams
Une transcription de réunion peut arriver dans Réactis de deux façons :
- Automatiquement — si le client a connecté son tenant Microsoft Teams à Réactis (configuration dans Admin → Teams). Dès qu'une réunion Teams se termine pendant une crise active, la transcription est transmise et traitée sans intervention humaine — elle passe par le même scan de risques réglementaire obligatoire que l'import manuel, sans exception.
- Manuellement — en important un fichier de transcription (format .vtt, .docx ou .txt) via le bouton dédié dans la main courante — soumis au même scan de risques réglementaire obligatoire avant tout traitement IA.
Dans les deux cas, le comportement est identique une fois la transcription reçue : Réactis ne l'intègre pas brute dans le journal, mais commence par un scan de risques 100% local (aucun appel IA), puis seulement ensuite un filtrage IA du bruit conversationnel.
scanFreeTextForRisks() — détection 100% locale et déterministe (numéro de téléphone, email, marqueur de confidentialité), zéro appel réseau. Selon le mode configuré côté établissement, une transcription contenant un élément à risque est bloquée (la secrétaire de main courante doit corriger avant de poursuivre) — rien ne part vers l'IA tant que ce n'est pas fait.✨ Génération de fiches de mission depuis le plan blanc
Cette fonctionnalité permet à l'IA d'analyser le plan blanc de l'établissement et de générer des fiches de mission personnalisées pour les services spécifiques de la structure.
plan_blanc_cache.json — le contenu extrait lors de l'upload du PDF (via OCR Python). Les 4 000 premiers caractères sont envoyés à l'IA pour l'analyse (taille optimisée pour rester dans les limites des tokens).[téléphone masqué]. Ce filtre est 100% local et déterministe (aucun appel IA). Il ne détecte pas les noms de personnes : le plan blanc doit avoir été nettoyé de toute mention nominative par l'établissement avant l'upload — un contrôle bloquant s'applique déjà à l'upload du document pour les numéros de téléphone et emails détectés (voir onglet Documents).[{"id":"bloc-chir","service":"Bloc Chirurgical","tab_label":"Bloc","emoji":"🔪","color":"#7c3aed","actions":["Suspendre les interventions programmées","Sécuriser les patients en cours..."],"source":"plan_blanc"}]. Si la réponse JSON est invalide, l'erreur est retournée sans planter.fiches_mission.json du tenant, en conservant les fiches standard. Les nouvelles fiches sont immédiatement disponibles lors de la prochaine ouverture d'une crise.source: "plan_blanc"). Les fiches standard ne sont jamais affectées.🔒 Données et confidentialité IA
Ce qui est transmis à l'IA
- Le contenu du journal de crise (les textes saisis par les opérateurs)
- Le type et nom de la crise (ex : "CLINIQUE — Panne informatique serveur HIS")
- Des extraits du plan blanc filtrés de l'établissement (numéros de téléphone masqués localement avant tout envoi)
- Des statistiques agrégées sur la crise (nombre d'entrées, taux de résolution…)
Ce qui n'est jamais transmis
- Aucune donnée nominative patient — c'est une règle d'usage documentée dans les CGU
- Aucune donnée médicale
- Aucun identifiant d'établissement (nom ou FINESS)
- Aucune donnée de compte utilisateur
- Tout ce qui est intercepté par les filtres réglementaires locaux (numéros de téléphone, emails, NIR détectés dans le journal, les documents importés ou le plan blanc) — masqué ou bloqué avant l'envoi, jamais transmis à l'IA
Engagements des fournisseurs IA
| Fournisseur | Siège | DPA RGPD | Entraînement des modèles | Conservation des données |
|---|---|---|---|---|
| Mistral AI (par défaut) | France (UE) | Oui | Non (contractuel) | Données effacées après traitement — aucun transfert hors UE |
| Groq (au choix) | USA | Oui (CCT) | Non (contractuel) | Données effacées après traitement |
| Anthropic (au choix) | USA | Oui (CCT) | Non (contractuel) | Données effacées après traitement |
| Microsoft Copilot (au choix) | UE / tenant client | Oui (DPA Microsoft) | Non (contractuel) | Données dans le tenant M365 du client — politique de rétention du client |
Choix et activation des fournisseurs IA
Le fournisseur IA actif (Mistral AI par défaut, ou Groq / Anthropic / Azure OpenAI au choix du client) et la désactivation totale ou partielle des fonctions IA sont à la main du client, en self-service depuis Admin → Établissement. La plateforme continue de fonctionner normalement pour le journal, les alertes et les pilotages — seules les fonctionnalités IA (conseils, synthèses, rapports automatiques) sont affectées si le fournisseur est désactivé.
🚀 Onboarding d'un nouveau client
Formulaire de demande client (signup.html)
Le client remplit le formulaire en ligne et choisit son offre parmi quatre options :
| Option choisie | Type de tenant créé | Limite licences d'accès |
|---|---|---|
| 🏥 1 à 3 périmètres établissement (max 3 par tenant établissement) | etablissement | 20 licences d'accès max (tenant, tous périmètres confondus) |
| 🗺️ Périmètre régional | regional | 20 licences d'accès max |
| 🏢 Périmètre groupe / national | groupe | 20 licences d'accès max |
Le client peut ajouter des packs de +5 licences d'accès (195 € HT/an chacun, via un champ quantité sur le formulaire) — la limite est alors 20 + 5 × nb_packs_membres à la création. La demande et toutes les options choisies sont stockées dans data/signups.json du tenant maître.
Validation dans le panneau maître
Les demandes en attente apparaissent dans la section "Demandes d'essai" avec des badges indiquant le type d'offre choisi, la limite de licences d'accès et le fournisseur IA. Cliquer "✅ Activer 30j" déclenche automatiquement :
- Création du tenant du bon type (établissement, régional ou groupe) via le script adapté
- Enregistrement DNS A chez OVH (sous-domaine
slug.crise.ifclubs.fr) - Email de bienvenue avec les accès
- Configuration SSL (bouton "🔒 SSL" dans le panneau maître une fois le DNS propagé)
max_members,tenant_type,nb_perimetresinscrits dans letenant.jsondu nouveau tenant
Pack +5 licences d'accès (depuis le panneau maître)
Rien n'est automatique : quand un client approche de sa limite (≥ 80 % de la capacité), un bouton "📦 +5" apparaît dans sa ligne dans le panneau maître à titre de simple indicateur — il ne déclenche rien tout seul. Frédéric ne clique dessus que si le client a effectivement acheté un pack supplémentaire (paiement reçu) ; le seul franchissement du seuil de 80 % n'autorise pas l'ajout. Le clic incrémente alors max_members de 5 dans son tenant.json, sans redémarrage nécessaire.
Étapes de déploiement
- Inscription en ligne — le client choisit son offre, ses options et envoie sa demande. Rien n'est créé à ce stade : la demande reste simplement en attente dans le panneau maître.
- Validation manuelle par Réactis — Frédéric vérifie la demande dans le panneau maître et ne clique "✅ Activer 30j" qu'après validation (notamment confirmation du paiement). Tant que ce clic n'a pas eu lieu, aucun tenant n'est créé et le client ne reçoit rien.
- Provisionnement — déclenché uniquement par ce clic de validation : le tenant est alors créé (URL personnalisée, identifiants admin, DNS)
- Email de bienvenue — envoyé seulement à la suite de cette validation manuelle, jamais avant : le client reçoit ses accès (URL + identifiants admin) et peut se connecter
- Configuration initiale — réalisable en autonomie par le client grâce à l'interface d'administration guidée. Un accompagnement à la prise en main est proposé en option (formation facturable) :
Configuration initiale (à réaliser par le client — niveau facile — assistance possible, facturable)
| Étape | Où | Description |
|---|---|---|
| 1. Nom établissement | Admin → Établissement | Nom, adresse, FINESS — utilisés dans les templates de communication |
| 2. Types de crise | Admin → Types de crise | Définir les périmètres : CLINIQUE, EHPAD, HAD… avec couleur et membres associés |
| 3. WhatsApp | Admin → WhatsApp | Scanner le QR code avec le téléphone du compte WhatsApp dédié |
| 4. Utilisateurs | Admin → Utilisateurs | Ajouter les membres de la cellule avec leur email et numéro WhatsApp — ce sont eux qui reçoivent les emails de crise par périmètre |
| 5. Plan blanc | Admin → Documents | Uploader le plan blanc PDF + fiches réflexes |
| 6. SMTP (optionnel) | Admin → SMTP | Configurer le serveur email de l'établissement pour que les emails viennent d'une adresse connue |
| 7. Mots de passe d'accès | Admin → Sécurité | Définir les deux niveaux d'accès : mot de passe admin (configuration complète) et mot de passe membre (accès opérationnel en crise). Pas de compte individuel par personne. |
🛡️ Panneau Maître — Fonctionnalités d'administration Réactis
Le panneau maître (admin.crise.ifclubs.fr, port 6099) est l'interface d'administration exclusivement réservée à Réactis. Il consolide la supervision et la gestion de tous les tenants en production.
Vue d'ensemble des tenants
Tous les tenants sont organisés en groupes (Établissements clients, Régionaux, Groupes, Staging, Démo). Chaque groupe est plié par défaut à la connexion — cliquer sur l'en-tête de groupe pour déplier. L'état ouvert/plié est mémorisé par le navigateur.
Chaque ligne de tenant affiche sous l'URL des badges d'options : type d'offre souscrite, nombre de périmètres, licences d'accès actuelles / maximum, et un bouton "📦 +5" quand le client approche 80 % de sa limite.
Demandes d'essai (nouveaux prospects)
Les demandes reçues via signup.html apparaissent avec des badges indiquant les choix du prospect : type d'offre, nombre de périmètres, limite de licences d'accès, fournisseur IA. Rien n'est créé tant que Frédéric n'a pas validé la demande : saisir un slug → cliquer "✅ Activer 30j" uniquement après vérification (notamment du paiement). Ce clic déclenche alors, et alors seulement, la création du tenant, le DNS et l'envoi de l'email de bienvenue au client. La configuration initiale, elle, n'est pas automatique : elle est réalisée ensuite par le client lui-même depuis son interface d'administration.
Création d'un tenant régional
Dans la section "Outils avancés" du panneau, le formulaire "🗺️ Créer régional" permet de provisionner un nouveau tenant régional sans aucune intervention en ligne de commande. Le script /opt/crise-admin/create-regional-tenant.sh génère automatiquement : répertoire de données, tenant.json, .env, service systemd, configuration Nginx et déclenche le DNS OVH.
| Champ | Description |
|---|---|
| Nom du tenant | Nom affiché (ex : "Territoire Occitanie") |
| Slug | Identifiant court DNS (ex : occitanie → occitanie.crise.ifclubs.fr) |
| Couleur | Couleur d'interface du tenant (hex) |
| Mot de passe admin | Mot de passe admin initial — les identifiants sont affichés à la création |
⚙️ Ce que peut configurer l'administrateur client
| Onglet Admin | Ce qu'on y configure | Utilisé par l'IA |
|---|---|---|
| 👥 Utilisateurs | Liste des utilisateurs avec email + téléphone WhatsApp — tous reçoivent les emails de crise de leur périmètre | ✅ Noms des utilisateurs cités dans les synthèses et rapports |
| 📞 Contacts | Annuaire des contacts d'urgence (SAMU, pompiers, prestataires…) | ✅ Suggérés dans les conseils selon le type de crise — seul le rôle (jamais le nom personnel) apparaît dans le journal et les rapports générés |
| Configuration du compte WhatsApp + QR code de connexion | — | |
| ✈️ Telegram | Configuration du bot Telegram | — |
| 🏢 Établissement | Nom, adresse, FINESS — utilisés dans les templates et rapports | ✅ Nom et type d'établissement inclus dans le contexte de chaque prompt |
| 🚨 Types de crise | Périmètres de crise (CLINIQUE, EHPAD…) avec label, couleur, icône | ✅ Type de crise = paramètre central de tous les prompts IA |
| 📮 SMTP | Serveur email sortant de l'établissement | — |
| 📄 Documents | Upload et gestion du plan blanc et des fiches réflexes | ✅ Plan blanc analysé pour générer les fiches de mission personnalisées |
| 🧠 Apprentissage | Visualisation et validation des RETEX générés par l'IA | ✅ RETEX validés réinjectés dans les conseils des crises similaires futures |
| 🔗 Teams | Connexion tenant Teams (transcriptions automatiques) + lien de réunion | ✅ Transcriptions intégrées dans le contexte des CRs et synthèses |
| 🛡️ RGPD | Gestion de la rétention des données (5 ans par défaut) + purge manuelle | — |
| 🔑 Abonnement | Statut de l'abonnement, dates, email de facturation | — |
| 🗺️ Nouveautés | Fonctionnalités à venir | — |
👥 Gestion des comptes utilisateurs
Les 3 types de licence d'accès
Chaque personne enregistrée dans l'onglet Utilisateurs se voit attribuer un ou plusieurs rôles via des cases à cocher (🔑 Coord. / 👁️ Membre / ✅ Valideur / ✉️ Invité). Coordinateur, Membre et Invité sont les 3 identifiants de connexion possibles (chacun avec son propre mot de passe partagé par défaut, pas de compte individuel — sauf si le tenant a activé le mode 2 ou 3, voir "🔐 Modes de connexion" ci-dessous) — chaque personne compte pour 1 licence d'accès, quel que soit son rôle. Le rôle "Valideur" n'est pas un identifiant de connexion séparé : c'est une case à cocher additionnelle qui se combine à Coordinateur ou Membre pour donner un droit de validation des documents importés.
| Ce à quoi on a accès | 🔑 Coordinateur login CRISE | 👁️ Membre login MEMBRE | ✉️ Invité login INVITE |
|---|---|---|---|
| Journal de crise | ✅ Lecture intégrale | ⚠️ Toutes entrées sauf ALERTE / RÉUNION (sauf si désigné(e) Secrétaire de main courante — voir ci-dessous) | ⚠️ Décisions uniquement (type DÉCISION) |
| Saisir une entrée / une alerte | ✅ | ✅ | ❌ Lecture seule (bloqué aussi côté serveur) |
| Ouvrir / fermer une crise | ✅ | ❌ | ❌ |
| Assigner une tâche à un membre | ✅ | ❌ | ❌ |
| Marquer une tâche assignée comme faite | ✅ | ✅ (si assignée à soi) | ❌ |
| Supprimer / fusionner / découper / changer le type d'une entrée | ✅ | ❌ | ❌ |
| Dupliquer une entrée | ✅ | ✅ | ❌ |
| Démarrer / modifier / clore une visio | ✅ | ❌ Consultation seule | ❌ |
| Espace Admin (config, membres, tarifs, sécurité, rapports) | ✅ | ❌ | ❌ |
| Générer / consulter le rapport de fin de crise, un RETEX, des Conseils ciblés ou un Compte rendu d'étape (IA) | ✅ | ❌ (sauf si désigné(e) Secrétaire de main courante — voir ci-dessous) | ❌ |
| Valider un document importé, modifier la liste des membres | ✅ uniquement si la case ✅ Valideur est cochée en plus du rôle Coordinateur ou Membre | ||
| Réception des messages du niveau régional (info/alerte) | ✅ uniquement si la case 📡 Région est cochée — voir ci-dessous | ||
| Réception des emails / alertes WhatsApp / Telegram / Teams | ✅ | ✅ | ✅ |
| Badge "Qui êtes-vous ?" / bandeau de présence | ✅ | ✅ | ✅ |
POST /api/crisis/save répond ok:true sans rien enregistrer), même en cas de contournement de l'interface via la console navigateur. C'est un contrôle serveur, pas une simple restriction visuelle.🔐 Modes de connexion (3 modes, au choix par tenant, depuis le 2026-07-19)
Indépendamment des rôles/licences ci-dessus, chaque tenant établissement choisit dans Admin → Utilisateurs (section "Mots de passe d'accès") comment ses trois identifiants (Coordinateur/Membre/Invité) s'authentifient. Réglage tenant.json.login_mode : 'shared' (absent = valeur par défaut) / 'pin' / 'totp'. Les trois modes coexistent dans le code, un seul est actif par tenant à la fois — changer de mode ne supprime aucune donnée (PIN/secret TOTP déjà enregistrés restent en base, simplement inutilisés tant que le mode n'est pas réactivé).
- Mode 1 — Mot de passe partagé (défaut historique) : un seul mot de passe par rôle. L'identité affichée dans le journal est déclarative, choisie librement dans la modale "Qui êtes-vous ?" à chaque connexion — jamais vérifiée côté serveur.
- Mode 2 — Identité + PIN : l'utilisateur choisit son nom dans un roster filtré par rôle (
GET /api/auth/roster) puis saisit un code à 4 chiffres propre à cette personne, vérifié serveur (POST /api/auth/pin-check, hash bcrypt). Flux "PIN oublié" par email/SMS à usage unique (TTL 10 min, 5 tentatives). Reset admin (POST /api/admin/members/reset-totppour le mode 3, équivalentreset-pinpour le mode 2) efface le facteur sans jamais le réassigner — ré-enrôlement obligatoire, tracé dans l'audit log (PIN_RESET/TOTP_RESET). - Mode 3 — Identité + TOTP (Google/Microsoft Authenticator) : même principe que le mode 2, mais le facteur est un code à 6 chiffres rotatif toutes les 30s (RFC 6238, librairie
otplib) au lieu d'un PIN fixe. Enrôlement en 2 étapes :POST /api/auth/totp/enroll/startgénère un secret temporaire et un QR code (qrcode, même mécanisme que le QR WhatsApp) sans rien persister, puisPOST /api/auth/totp/enroll/confirmvérifie le premier code réel avant de sauvegarder le secret. Secret chiffré au repos (AES-256-GCM, cléTOTP_ENC_KEYpropre à chaque environnement) — contrairement au PIN haché à sens unique, le serveur doit pouvoir déchiffrer ce secret pour vérifier les codes suivants, d'où le chiffrement réversible plutôt qu'un hash. Anti-rejeu : un code déjà accepté est refusé une seconde fois dans sa fenêtre de 30s.
sessionStorage.crise_user/crise_user_email) et la modale libre "Qui êtes-vous ?" ne s'affiche plus : elle serait sinon un moyen de contourner la vérification en se re-badgeant sous un autre nom après une connexion PIN/TOTP légitime. En mode 1 (aucune session vérifiée), la modale libre reste affichée comme avant — comportement inchangé.📡 Messagerie hiérarchique — messages du niveau régional (depuis le 2026-07-11)
Si l'établissement est rattaché à un tenant régional, celui-ci peut envoyer des messages de type INFO ou ALERTE vers l'établissement, via un canal dédié et tracé, distinct du journal opérationnel de chaque crise. Ces messages ne sont visibles que par les personnes explicitement cochées 📡 Région dans l'onglet Utilisateurs (case combinable avec n'importe quel rôle, sur le même principe que ✅ Valideur) — typiquement 1 ou 2 coordinateurs désignés. Une pastille 📡 apparaît dans l'en-tête de la crise active pour ces personnes uniquement dès qu'un nouveau message est disponible ; un clic ouvre la liste des messages des 30 derniers jours. Depuis le 2026-07-11, la pastille est agrandie et clignote tant qu'au moins un message n'a pas été ouvert (lu/non-lu suivi côté navigateur, par personne).
✍️ Secrétaire de main courante (désignation par crise depuis le 2026-07-17)
Par défaut, un compte Membre ou Invité ne voit pas les entrées de type ALERTE et RÉUNION dans le journal (voir tableau ci-dessus). À chaque ouverture de crise, le formulaire d'ouverture impose de désigner une personne précise — Membre ou Invité, typiquement celle qui tient la main courante au poste de commandement — dans un menu déroulant listant tous les membres du périmètre concerné (Invités compris) : impossible d'ouvrir la crise sans ce choix. Cette personne conserve la lecture intégrale pour la durée de cette crise uniquement, sans pour autant recevoir les droits d'écriture d'un coordinateur, et sans mot de passe séparé : elle continue à se connecter avec son identifiant habituel (Membre, Invité ou Coordinateur).
En plus de la lecture intégrale du journal, la personne désignée Secrétaire de main courante retrouve l'accès à 4 fonctions IA normalement réservées au Coordinateur : 💡 Conseils ciblés, 📝 Compte rendu d'étape, 📋 Rapport de crise et 🧠 RETEX (génération, consultation, édition avant validation, et validation/dévalidation). Les autres fonctions réservées au Coordinateur (📧 Résumé message externe, Transcription Teams, création de Réunion, Base documentaire, Suivi des présences, Espace Admin) restent hors de portée, y compris pour la Secrétaire.
Le mécanisme repose sur un lien individuel généré automatiquement par le serveur à l'ouverture — il n'y a plus de configuration statique dans Admin → Établissement :
- Dès que la crise est ouverte, un jeton propre à cette crise est généré côté serveur et un email est envoyé automatiquement à la personne désignée, avec son lien d'accès personnel (ex :
https://client.crise.ifclubs.fr/?secretaire=XXXXXXXX) — sauf en 🎓 Formation ou en environnement de démonstration, où l'envoi est simulé (aucun email réel) - Ce lien est personnel, à ne pas transmettre — quiconque l'ouvre dans son navigateur reçoit un jeton stocké localement sur cet appareil, qui débloque la lecture intégrale et les 4 fonctions IA dès sa prochaine connexion avec son mot de passe habituel
- Le jeton n'est valable que pour la durée de cette crise : à la clôture, il cesse immédiatement de fonctionner. Une nouvelle crise impose une nouvelle désignation et génère un nouveau jeton, indépendant du précédent
- Rien n'empêche de désigner la même personne à chaque ouverture si c'est toujours elle qui tient la main courante — mais le choix doit être refait à chaque fois
Environnements de démonstration
| Démo Établissement | Démo Régional | Démo National | |
|---|---|---|---|
| URL | demo.crise.ifclubs.fr | demo-regional.crise.ifclubs.fr | demo-groupe.crise.ifclubs.fr |
| Répertoire | /opt/crise-demo/ | /opt/crise-demo-regional/ | /opt/crise-demo-groupe/ |
| Port | 6012 | 6019 | 6020 |
| But | Démonstration client établissement | Démonstration client régional | Démonstration client national/groupe |
| Données | Fictives — scénario prêt à jouer | Fictives — scénario prêt à jouer | Fictives — scénario prêt à jouer |
| IA | Conseils pré-écrits (pas d'appel IA réel) | Conseils pré-écrits | Conseils pré-écrits |
| Réinitialisation | Quotidienne — le scénario est recalé chaque jour sur une ouverture à 00h00 heure de Paris (script exécuté à 5h du matin) | Aucune — pas de script de réinitialisation automatique à ce jour | Aucune — pas de script de réinitialisation automatique à ce jour |
Compte démo standard
- Admin :
DEMO.CRISE/CRISE - Membre :
DEMO.MEMBRE/MEMBRE - Invité :
DEMO.INVITE/INVITE
Réinitialisation de mot de passe
Les mots de passe sont stockés sous forme hachée (bcrypt). En cas d'oubli, l'administrateur peut changer son propre mot de passe depuis Admin → Abonnement. Pour réinitialiser le mot de passe d'un autre compte, il faut contacter le support à contact@ifclubs.fr.
🔑 Abonnements et tarifs
| Formule | Prix HT/an | Licences d'accès incluses |
|---|---|---|
| 🏥 1 tenant établissement — 1 périmètre | 1 990 € | Jusqu'à 20 (tenant) |
| 🏥 1 périmètre supplémentaire — max de 2 périmètres supplémentaires par tenant établissement | 1 155 € | — |
| 📦 1 pack de 5 licences d'accès supplémentaires — cumulable, ajouté à n'importe quelle formule établissement | 195 € | +5 licences d'accès par pack |
| 🗺️ 1 périmètre régional — dashboard territoire + IA coordination régionale (2ᵉ niveau) | Sur devis | Jusqu'à 20 |
| 🏢 1 périmètre groupe — dashboard national + IA coordination nationale (3ᵉ niveau) | Sur devis | Jusqu'à 20 |
Formule générale : Total = 1 990 € + (nb_périmètres_supplémentaires × 1 155 €) + (nb_packs_5_licences × 195 €). Un tenant établissement est plafonné à 3 périmètres — au-delà, orienter vers un tenant régional ou groupe.
max_members est stockée dans le tenant.json de chaque tenant et vérifiée côté serveur à chaque tentative d'enregistrement de la liste membres. Toute tentative de dépasser la limite est bloquée avec un message explicite invitant à souscrire un pack +5. La limite peut être augmentée depuis le panneau maître sans redémarrage. Le nombre de périmètres (nb_perimetres) est également plafonné à 3 côté serveur pour les tenants établissement, dès l'inscription.Choix du fournisseur IA
Le client choisit son fournisseur IA à la souscription. Un changement ultérieur se fait en self-service, à la main du client, depuis Admin → Établissement.
| Fournisseur | Tarif | Cas d'usage |
|---|---|---|
| 🇫🇷 Mistral AI | Inclus | Par défaut — hébergement France/UE, satisfait la grande majorité des usages |
| 🤖 Groq (Llama 3.3) | Inclus | Au choix du client — vitesse maximale |
| ✨ Anthropic Claude Haiku | Inclus | Au choix du client — analyses plus riches, RETEX approfondi |
| ☁️ Azure OpenAI (Microsoft Copilot) | Inclus — sur abonnement client | Au choix du client — politique DSI M365, données dans le tenant client, zéro surcoût Réactis |
Garantie d'exclusivité : un seul fournisseur est actif à la fois. Lorsqu'un fournisseur est configuré comme actif (Mistral par défaut, ou Groq/Anthropic/Azure au choix du client), le code source de Réactis ne tente aucun appel vers les autres. En cas d'erreur, la fonctionnalité échoue explicitement — aucun fallback silencieux vers un autre fournisseur. Les clés API des fournisseurs non utilisés peuvent être retirées du fichier de configuration du tenant sans aucun risque.
Option pack +5 licences d'accès supplémentaires
+195 € HT/an par pack de 5 licences d'accès, pour l'ensemble du tenant (tous périmètres confondus) — permet de dépasser le plafond de 20 licences d'accès incluses dans la formule de base, par incréments de 5. À utiliser pour les établissements avec une grande cellule de crise ou un organigramme de crise étendu.
❓ FAQ utilisateurs — Questions courantes
1. Export PDF — depuis le tableau de bord → crise sélectionnée → "Rapport de fin" → bouton "🖨 Imprimer / Télécharger en PDF". Le rapport structuré (journal, synthèse IA, décisions, chronologie) s'ouvre dans une page dédiée que le navigateur peut enregistrer en PDF.
2. Export JSON (données brutes) — depuis Admin → RGPD → bouton "Exporter mes données". Génère une archive complète de toutes les crises du tenant au format JSON, exploitable dans Excel ou tout outil d'analyse.
🔧 Problèmes courants et solutions
| Symptôme | Cause probable | Solution |
|---|---|---|
| Page blanche ou erreur au chargement | Cache navigateur | Vider le cache (Ctrl+Shift+R) ou utiliser la navigation privée |
| Emails de crise non reçus | SMTP mal configuré ou spam | Vérifier Admin → SMTP ; vérifier le dossier spam des destinataires |
| WhatsApp déconnecté | Session expirée sur le téléphone | Admin → WhatsApp → Rescanner le QR code |
| IA trop lente ou timeout | Fournisseur actif surchargé (Mistral, Groq…) | Réessayer dans 30 secondes ; peut avoir des pics ponctuels |
| Rapport de fin vide ou erreur | Journal trop court (moins de 3 entrées) | S'assurer que la crise a au minimum 3-4 entrées dans le journal |
| RETEX non réinjecté dans les conseils | RETEX non validé par l'admin | Admin → Apprentissage → Valider le RETEX généré |
| L'utilisateur voit "Session expirée" | Inactivité prolongée | Se reconnecter ; la session est sauvegardée localement — la crise n'est pas perdue |
| La dictée vocale ne fonctionne pas | Pas d'autorisation microphone | Autoriser le microphone dans les paramètres du navigateur |
📞 Escalade technique
Pour les problèmes qui ne peuvent pas être résolus par les solutions ci-dessus, contacter le développeur :
- Email : contact@ifclubs.fr
- Réponse sous 48h ouvrées
Informations à fournir lors d'une escalade
- Nom de l'établissement client et URL de leur plateforme
- Description précise du problème (quand, comment, message d'erreur éventuel)
- Capture d'écran si possible
- Navigateur et appareil utilisé
Ce qui ne peut pas être traité sans le développeur
- Réinitialisation d'un mot de passe admin oublié (opération serveur)
- Modification des fichiers de configuration serveur
- Restauration de données après suppression
- Questions sur la facturation et les abonnements
🔄 Processus de validation des mises à jour
Toutes les nouvelles fonctionnalités passent par un cycle Staging → Validation → Production avant d'être disponibles chez les clients. la consultante joue un rôle central dans cette validation.
Les 4 étapes du cycle
Déploiement & Rollback — Boutons dans le master admin
La section "⚙️ Déploiement & Rollback" est toujours visible en haut du panneau admin.crise.ifclubs.fr, avec deux colonnes :
| Cible | 🚀 Déployer | ↩ Rollback |
|---|---|---|
| Établissements | Applique les features validées sur tous les services clients (crise-staging → prod) | Restaure le backup précédent — un backup auto est créé avant chaque déploiement |
| Groupe | Copie crise-staging-groupe → crise-groupe prod (port 6016) | Restaure un backup groupe (timestamp ou dernier backup) |
Pour un retour en arrière sur plusieurs jours (données comprises), un niveau supérieur existe : les sauvegardes quotidiennes chiffrées AES-256 (une par tenant, conservées 30 jours) permettent de restaurer les données à une date antérieure précise. Opération à déclencher par le support technique uniquement.
Que faire si un bug est découvert plusieurs jours après un déploiement ?
Si plusieurs déploiements ont eu lieu entre le moment où une mise à jour problématique a été déployée et le moment où le problème est découvert, le rollback total n'est pas adapté (il annulerait aussi des mises à jour saines). La marche à suivre dans ce cas :
staging, la consultante le valide via le bouton "✅ Je valide" comme pour n'importe quelle feature.Règles importantes
- Une feature à la fois — on ne démarre pas une nouvelle feature tant que la précédente n'est pas déployée en prod
- Tag DEMO — les modifications sur les données/fichiers de démonstration ne passent pas par le circuit de validation et ne sont pas inscrites dans RELEASE.json
- Garantie technique — le système utilise des patches git individuels : seul le code explicitement sélectionné et validé par la consultante est appliqué en production
Environnements de développement
Trois environnements staging distincts, chacun avec son équivalent production : établissement, régional et national.
| Staging Établissement | Staging Régional | Staging National | Production | |
|---|---|---|---|---|
| URL | staging.crise.ifclubs.fr | regional-staging.crise.ifclubs.fr | groupe-staging.crise.ifclubs.fr | *.crise.ifclubs.fr |
| Répertoire | /opt/crise-staging/ | /opt/crise-staging-regional/ | /opt/crise-staging-groupe/ | /opt/crise/ etc. |
| Port | 6014 | 6017 | 6015 | 6008 / 6016 / … |
| But | Tests établissement | Tests régional | Tests national/groupe | Clients réels |
| Données | Fictives | Fictives | Fictives | Données réelles clients |
| IA | Groq (gratuit) | Groq (gratuit) | Groq (gratuit) | Mistral AI par défaut à la création d'un tenant — selon choix client |
ai_provider. Si aucun ai_settings.json n'existe (tenants créés avant l'introduction du choix multi-fournisseur, ou clé Mistral jamais renseignée), le code retombe sur Groq au runtime (readAiSettings().provider || 'groq') — c'est le cas réel du tenant groupe de production actuel, qui tourne sur Groq faute de MISTRAL_API_KEY configurée.🏢 Réactis Groupe — Vue consolidée multi-établissements
Réactis Groupe propose une offre destinée aux groupes sanitaires qui gèrent plusieurs établissements : groupes de cliniques, groupes EHPAD, GHT, opérateurs multi-sites.
/api/messages) — cette notion de seuil ne s'y applique donc pas encore.Principe d'invisibilité côté établissement
Les équipes opérationnelles des établissements membres ne savent pas et n'ont pas besoin de savoir qu'un tenant groupe les observe. Elles utilisent leur Réactis habituel sans changement. Le groupe lit les données en arrière-plan via une clé technique sécurisée. Ne pas mentionner le tenant groupe lors des formations établissements.
Qui sont les membres du tenant groupe ?
Les directeurs et directrices d'établissements du groupe — pas les équipes opérationnelles. Le coordinateur groupe (DG groupe, Directeur des Risques groupe) pilote depuis le dashboard consolidé pendant que chaque établissement gère sa crise avec son propre Réactis.
Dashboard consolidé
Une carte par établissement, avec en temps réel :
| Information | Nominal | En crise |
|---|---|---|
| Statut | 🟢 NOMINAL | 🔴 EN CRISE (clignotant) |
| Nom de la crise | — | Affiché |
| Durée | — | ⏱ 2h 14min |
| Alertes actives | — | Compteur rouge |
| Actions en cours / résolues | — | Compteurs |
| Derniers CRs de réunion IA | — | 3 derniers affichés |
Rafraîchissement automatique configurable (30s par défaut). Un bouton ↻ permet une actualisation manuelle.
Cliquer sur une carte ouvre un panneau détail (modal fond blanc) avec l'intégralité de l'état de situation : métriques complètes, durée, et les 3 derniers comptes-rendus de réunion en texte complet. Fonctionne aussi bien pour les cartes EN CRISE que NOMINAL.
📊 Tableau de bord Qualité & Performance (régional)
Bouton "📊 Tableau de bord Qualité & Performance" dans la barre du dashboard régional. Trois blocs, ajoutés le 2026-07-10 suite à la vente d'un tenant régional à un interlocuteur cumulant DG Régional et Directeur Qualité & Performance Groupe :
- Score qualité & classement — score composite 0-100 par établissement, pondéré 40% RETEX validés / 30% restitutions RETEX tenues / 30% documents à jour. Calculé uniquement sur les axes disposant de données — un établissement sans RETEX n'est pas pénalisé, simplement non noté sur cet axe.
- Alertes proactives — détection automatique des dérives sans lecture manuelle : RETEX généré depuis plus de 6 mois et jamais validé (critique) ; aucune restitution tenue sur ≥2 RETEX (attention) ; <50% des documents validés sur ≥3 documents (attention).
- Export PDF & Excel — bouton "Export PDF" (impression de la page, scopée au tableau de bord) et "Export Excel" (CSV point-virgule, BOM UTF-8, généré côté client, zéro dépendance npm) directement exploitables en réunion CA/CME/HAS.
La route POST /api/conseils-coordination a été élargie en cohérence : hors crise active, elle n'est plus muette — si des alertes qualité sont détectées, elle déclenche un appel IA dédié (persona "directeur régional, en charge à la fois des risques ET de la qualité") qui propose audit croisé, partage de bonnes pratiques, délai de mise en conformité ou remontée groupe.
/documentation.html (couvre supervision live, remontées automatiques, tableau de bord qualité, IA de coordination, garde-fou d'isolation) et une page de présentation commerciale à /presentation.html, toutes deux accessibles directement depuis la barre du dashboard régional (boutons "📖 Documentation" et "🎯 Présentation") — le client peut les consulter et les revoir à tout moment sans dépendre d'un lien tiers.Mode TV — Écran de supervision permanent
Le bouton "📺 Mode TV" bascule directement dans une vue plein écran optimisée pour être projetée en permanence sur un grand écran en salle de direction — sans ouvrir de nouvel onglet. Le bouton "← Tableau de bord" (ou la touche Échap) revient au dashboard normal.
- Filtre automatique : seuls les établissements EN CRISE sont affichés. Les établissements nominaux disparaissent de l'écran pour que toute l'attention soit concentrée sur ce qui brûle. Si aucune crise active : grand écran vert "✅ TOUT EST NOMINAL".
- Grille adaptive selon le nombre de crises actives : 1 → pleine largeur ; 2 → 2 colonnes ; 3-4 → 2 colonnes ; 5-6 → 3 colonnes
- Horloge temps réel en haut à droite
- Point vert animé indiquant que la connexion est active
- Pied de page : total alertes actives sur les sites en crise
- Clignotement rouge sur les cartes en crise — visible d'un coup d'œil à 5 mètres
- Rafraîchissement automatique partagé avec le dashboard (30s par défaut)
- Cliquer sur une carte EN CRISE ouvre un modal blanc avec : titre et type de crise, durée, métriques (alertes / actions / en cours / résolues / membres), les 3 derniers CRs de réunion en texte complet. Fermeture via ✕, clic autour ou touche Échap.
IA de coordination — Triple niveau en cascade
C'est la fonctionnalité différenciante de l'offre groupe. Réactis propose une IA en cascade à 3 niveaux : chaque niveau analyse l'intelligence déjà synthétisée du niveau inférieur — jamais les données brutes.
⏱️ Fréquences de récupération entre les niveaux
Chaque niveau (établissement, régional, groupe) rafraîchit son dashboard à un intervalle fixe, codé en dur côté serveur/frontend. Aucun de ces intervalles n'est réglable par le client — il n'existe à ce jour aucune interface de configuration self-service pour ce paramètre, à aucun niveau.
/api/etablissements toutes les 30 secondes par défaut. Le backend expose un champ refresh_interval lu depuis le tenant.json du tenant régional (avec repli à 30 s si absent), mais rien ne permet au client de modifier cette valeur : aucune page de réglages n'existe côté régional, et seule une intervention manuelle de Réactis sur le fichier serveur pourrait la changer. À chaque appel, il interroge en temps réel chacun de ses établissements membres via /api/groupe/summary. La synthèse IA régionale (/api/conseils-coordination) est déclenchée manuellement par le directeur régional via le bouton "✨ Conseils coordination régionale".Si l'établissement n'a pas de compte rendu d'étape :
lastCRs retourne un tableau vide — le dashboard régional affiche la carte sans section CR, sans erreur. L'IA reçoit alors uniquement les métriques de pilotage (alertes, actions, durée). Si l'établissement n'a pas de RETEX : le RETEX n'est pas inclus dans /api/groupe/summary — il reste interne à l'établissement et n'est pas visible au niveau régional ou groupe./api/etablissements toutes les refresh_interval secondes (30 s par défaut, lu depuis tenant.json comme au niveau régional — GET /api/tenant renvoie t.refresh_interval || 30). Cette route unique consolide deux sources : pour chaque région membre, elle appelle /api/regional/summary, qui retourne la dernière synthèse IA persistée par le régional (fichier last_synthesis.json) sans recalcul ; et pour chaque établissement en accès direct (sans passer par une région), elle appelle directement /api/groupe/summary chez l'établissement lui-même.| Paramètre | Valeur actuelle | Modifiable par le client ? | Effet |
|---|---|---|---|
refresh_interval (étab) | 30 s (fixe) | Non — codé en dur, aucune UI | Cadence de rafraîchissement du journal en direct |
refresh_interval (régional) | 30 s (repli) | Non — champ présent dans tenant.json mais aucune UI self-service ; modifiable uniquement par Réactis en éditant le fichier serveur | Cadence de polling des étabs membres par le régional |
refresh_interval (groupe) | 30 s (repli) | Non — champ présent dans tenant.json mais aucune UI self-service ; modifiable uniquement par Réactis en éditant le fichier serveur | Cadence de polling des régions (ou étabs directs) par le groupe |
📨 Messages hiérarchiques — Communication top-down
Les directeurs régionaux peuvent diffuser des messages INFO ou ALERTE directement depuis leur dashboard vers tous les établissements de leur périmètre, sans passer par un outil externe. 🔒 Fonctionnalité réservée au niveau régional — le tenant groupe (national) n'a ni bouton ni route pour cet usage à ce jour.
Côté émetteur (Régional)
- Bouton 📨 Messages dans la barre de navigation du dashboard
- Zone de saisie : sélection du type (INFO ou ALERTE) + texte libre + bouton Envoyer
- Le message est publié immédiatement et diffusé en push à tous les établissements du périmètre
- Suppression : un message effacé au niveau émetteur est automatiquement retiré de tous les établissements destinataires
Côté destinataire (Établissement)
- Les messages apparaissent dans l'interface de crise — icône 📡 dans l'en-tête, visible dès qu'une crise est ouverte. Rien n'apparaît dans le dashboard admin (
dashboard.html), qui n'affiche pas cette information. - « L'administrateur de l'établissement », c'est le Coordinateur — au sens du mot de passe partagé Coordinateur (pas un compte individuel nommé), sauf tenant passé en mode 2 (PIN) ou 3 (TOTP) où chaque connexion Coordinateur est liée à une identité vérifiée. Visibilité par défaut : Coordinateur uniquement, et seulement pour les membres cochés « Reçoit les messages du niveau régional » (onglet Utilisateurs) — ciblage individuel via leur identité auto-déclarée (badge de présence).
- Le Coordinateur peut élargir cette visibilité aux rôles Membre et/ou Invité (panneau Admin › Établissement › « Messagerie hiérarchique — visibilité »). Dans ce cas, tous les utilisateurs connectés avec le mot de passe du rôle coché voient le même flux de messages — pas de ciblage individuel possible pour ces deux rôles, leur identité n'étant pas vérifiée côté serveur.
- Les ALERTEs s'affichent en rouge — les INFOs en bleu, avec origine (nom du niveau émetteur) et heure d'envoi
- La pastille clignote tant qu'un message n'est pas lu — statut purement local (par identité déclarée, ou par rôle à défaut), sans suivi individuel côté serveur
Architecture technique
| Composant | Route | Auth |
|---|---|---|
| Régional — envoi | POST /api/messages | requireAdmin (bcrypt) |
| Établissement — réception push | POST /api/hierarchy-message | GROUPE_KEY |
| Établissement — lecture | GET /api/hierarchy-messages | Rôle dérivé du mot de passe fourni (Coordinateur/Membre/Invité), comparé à tenant.hierarchy_messages_roles — défaut : Coordinateur seul |
| Suppression cascadée | DELETE /api/messages/:id | requireAdmin → push DELETE aux établissements |
hierarchy_messages.json de chaque établissement. Pas de délai de polling.🔔 Alertes montantes — Ouverture de crise vers le niveau supérieur
En complément des messages top-down (régional → établissements), Réactis propage également les ouvertures de crise vers le haut : quand un établissement ouvre une crise, le tenant régional parent est automatiquement notifié.
Ce qui est notifié
- Dashboard régional — un message hiérarchique "🚨 [Établissement] — Ouverture de crise : [Type] Nom" apparaît automatiquement dans le flux de messages du dashboard régional
- Email — envoi aux destinataires configurés dans l'admin régional (nom de l'établissement en titre)
- WhatsApp — message dans les groupes WA configurés du tenant régional
- Microsoft Teams — carte adaptive dans le canal Teams via Incoming Webhook
- Telegram — message HTML dans les chats/groupes du bot Telegram configuré
- SMS — message court (max 459 car.) envoyé aux numéros configurés via l'API Scaleway
Canaux configurables dans l'admin régional
| Canal | Configuration requise | Toggle |
|---|---|---|
| SMTP (host, port, user, pass, from) + liste de destinataires | email_enabled (actif par défaut) | |
| Connexion WA + ID des groupes destinataires | whatsapp_enabled | |
| 🔵 Teams | URL Incoming Webhook Teams | teams_enabled |
| ✈️ Telegram | Token du bot + liste de chat IDs | telegram_enabled |
| 📱 SMS | Rien côté client — canal géré et facturé centralement par Réactis. Liste de numéros (+33…) via Membres | sms_enabled |
Architecture technique
| Composant | Route | Auth |
|---|---|---|
| Établissement — déclenchement | POST {regional_url}/api/internal/crisis-alert | x-groupe-key (GROUPE_KEY) |
| Régional — réception + notifications | POST /api/internal/crisis-alert | GROUPE_KEY validé vs etablissements[] |
| Admin régional — lire config | GET /api/admin/alert-settings | x-admin-password |
| Admin régional — sauvegarder config | POST /api/admin/alert-settings | x-admin-password |
Prérequis
- L'établissement doit être rattaché au régional (demande de rattachement acceptée) — le rattachement stocke la
regional_urlet legroupe_keydanslink_request.json - Le tenant régional doit avoir configuré au moins un canal de notification dans son admin
- Pour l'email : le SMTP du tenant régional doit être renseigné dans Admin → Alertes ouverture de crise
- Pour WhatsApp : le client WA du régional doit être connecté (QR scanné)
- Pour Teams : l'URL Incoming Webhook doit être renseignée (Teams → canal → ⋯ → Connecteurs → Incoming Webhook)
- Pour Telegram : le token du bot + les chat IDs doivent être renseignés
- Pour SMS : rien à configurer côté client — la clé API Scaleway (Secret Key) + le Project ID sont centralisés côté serveur Réactis (variables d'environnement
SCALEWAY_API_KEY/SCALEWAY_PROJECT_ID, communes à tous les tenants régionaux) ; le client renseigne uniquement les numéros de téléphone des membres destinataires
SCALEWAY_API_KEY, SCALEWAY_PROJECT_ID, partagés par tous les régionaux) et jamais exposés au frontend (la route GET /api/admin/alert-settings ne renvoie qu'un booléen configured). Le SMS est donc bien "inclus, sans facturation supplémentaire" pour le client, conformément à la doc commerciale — reste à renseigner les vraies valeurs SCALEWAY_API_KEY/SCALEWAY_PROJECT_ID dans les .env des tenants régionaux réels (TNA notamment) pour activer effectivement l'envoi.💰 Tarification Réactis Régional & Groupe
Les licences régionale et groupe se facturent en supplément des abonnements établissements individuels. Architecture à 3 niveaux :
| Composante | Tarif | Ce qu'elle apporte |
|---|---|---|
| Abonnements établissements | Grille standard × N sites | IA niveau 1 — CR, synthèse, RETEX par établissement |
| Licence Réactis Régional | Sur devis | Dashboard territoire + mode TV + IA coordination régionale (2ᵉ niveau) |
| Licence Réactis Groupe | Sur devis | Dashboard national + mode TV + IA stratégique nationale — synthèse des régions (3ᵉ niveau) |
Interlocuteurs clés par niveau
| Niveau | Interlocuteur | Pain point |
|---|---|---|
| Établissement | Directeur d'établissement, Responsable qualité | Traçabilité HAS, rapport de crise, conformité |
| Régional | Directeur régional / Directeur de territoire | Aucune visibilité sur ses établissements en crise — appels téléphoniques uniquement |
| Groupe | DG groupe, Directeur des Risques, DG opérations | Zéro vision consolidée nationale en temps réel |
🌐 Hébergement — Ce qu'il faut savoir (simplifié)
Réactis est hébergé sur un serveur virtuel (VPS) mutualisé en France chez IONOS SE, certifié ISO 27001 — le même VPS héberge l'ensemble des services internes de l'éditeur (clubs d'investissement, autres SaaS). Une migration vers un serveur dédié OVH certifié HDS (Hébergeur de Données de Santé) est prévue au premier semestre 2027.
Spécifications techniques du serveur
| Composant | Détail |
|---|---|
| Processeur | 6 vCore |
| RAM | 8 Go |
| Stockage | 240 Go NVMe SSD |
| Bande passante | Mutualisée avec les autres services hébergés sur le même VPS — non contractualisée séparément |
Sauvegardes
Les sauvegardes sont assurées par un script automatisé (cron quotidien), qui produit une archive chiffrée AES-256 (OpenSSL) du répertoire de données de chaque tenant, conservée 30 jours glissants sur le serveur. Il n'y a pas de réplication hors site à ce jour.
Protection du serveur
Durcissement système standard : accès SSH par clé, pare-feu (ufw, deny par défaut), mises à jour de sécurité régulières, et CrowdSec (agent de détection comportementale + blocage automatique des IP malveillantes, open-source) actif sur le serveur. Pas de suite EDR commerciale dédiée à ce jour.
Données en France
Les données des clients (journal de crise, documents, rapports) restent en France sur le VPS IONOS. Seul le contenu du journal est envoyé temporairement au fournisseur IA actif lors des appels IA — encadré par des DPA RGPD. Par défaut ce fournisseur est Mistral AI, qui traite en UE (aucun passage par les États-Unis) ; au choix du client, le fournisseur peut être Groq, Anthropic ou Azure (ces trois-là basés aux États-Unis, transfert encadré par des CCT).
🔒 Sécurité des données — Points clés (simplifié)
- Connexion sécurisée HTTPS : toutes les communications entre le navigateur et le serveur sont chiffrées
- Mots de passe hachés : les mots de passe ne sont jamais stockés en clair
- Isolation par tenant : chaque client a son propre espace de données, complètement séparé des autres
- Chiffrement au repos : LUKS/dm-crypt — activation prévue lors de la migration vers le serveur OVH certifié HDS (S1 2027)
- Protection endpoint : CrowdSec déployé sur le serveur — EDR open source, détection comportementale et blocage automatique des IP malveillantes en temps réel
- Sauvegardes : scripts quotidiens chiffrés AES-256 par tenant, rétention 30 jours
- Pentest : audit de sécurité prévu avant la mise en production définitive
- Documents protégés : les PDF de la base documentaire (plans blancs, pièces jointes du journal) sont servis derrière une authentification obligatoire (
/uploads,/attachments) — impossible d'y accéder en devinant l'URL, même en étant déconnecté - Filtrage réglementaire du contenu avant IA : avant tout envoi à un fournisseur IA, le contenu du journal, du plan blanc et des documents importés passe par un filtre local et déterministe (aucun appel externe, aucune IA) qui détecte et masque automatiquement numéros de téléphone, emails et NIR — voir « Données et confidentialité IA »
- Validation de document : valider ou approuver la mise à jour d'un document exige un mot de passe de rôle valide (admin ou membre). Le nom du valideur est vérifié contre l'identité de session en mode PIN/TOTP (
getVerifiedMemberName()) ; en mode 1 (mot de passe de rôle partagé, sans identité individuelle), le nom déclaré reste une limite acceptée faute d'identité de session à vérifier - Déploiement/rollback staging → prod : les routes
/api/release/deployet/api/release/rollback(-groupepour le niveau national) exigent une authentification valide, et le paramètre de backup est vérifié contre la liste réelle des sauvegardes sur disque avant exécution
🛡️ RGPD — Points clés (simplifié)
- IFclubs SAS est éditeur du logiciel et sous-traitant pour les clients (signature d'un DPA)
- Le client reste responsable de traitement pour ses données
- Conservation des données : 5 ans par défaut (configurable), RETEX indéfiniment
- Suppression des données : à la demande ou via la purge manuelle Admin → RGPD
- Données traitées : journal de crise (pas de données patients), fichiers de documents (pas de données à caractère personnel), emails des membres
📂 Arborescence de la plateforme Réactis
Vue complète de la structure de fichiers de la plateforme. Chaque service est un répertoire autonome avec son propre backend Node.js et son frontend HTML/JS.
crise-staging/ = environnement de développement/validation · crise/ = production client démo · crise-staging-groupe/ + crise-staging-regional/ = niveau supérieur. Les instances client réelles tournent dans leurs propres répertoires avec leur propre DATA_DIR.Niveau Établissement (/opt/crise-staging/)
Structure identique pour toutes les instances établissement (crise-staging, crise, et chaque client).
| Fichier / Dossier | Rôle et contenu |
|---|---|
| Backend | |
| backend/index.js | Serveur Express.js principal — contient toutes les routes API : journal de crise, alertes, membres, IA, RETEX, conseils terrain, impact financier, import/export, SSO, abonnements, super-admin. Point d'entrée unique du backend. |
| backend/extract_plan_blanc.py | Script Python appelé par le backend pour extraire le texte brut d'un PDF plan blanc (via pdfplumber). Le texte extrait est ensuite transmis à l'IA pour générer les fiches de mission. |
| backend/package.json | Dépendances Node.js : express, multer (upload fichiers), nodemailer (emails), jsonwebtoken, bcrypt, whatsapp-web.js, openai, axios, pdfparse, node-cron. |
| backend/.env | Variables d'environnement sensibles : PORT, ADMIN_PASSWORD_HASH, DATA_DIR (chemin du dossier data client), SMTP_*, MISTRAL_API_KEY, GROQ_API_KEY, ANTHROPIC_API_KEY, GROUPE_API_KEY. Ne jamais committer. |
| Data — Configuration | |
| data/tenant.json | Identité de l'établissement client : nom, ville, type (clinique / EHPAD / hôpital…), logo URL, slug, contacts responsables. Affiché dans l'en-tête de l'interface. |
| data/config.json | Configuration générale du service : types de crise disponibles, niveaux de priorité, délais d'alerte automatiques, options d'affichage du tableau de bord. |
| data/members.json | Liste des membres de la cellule de crise : nom, rôle, email, téléphone, canal préféré (email / WhatsApp / Telegram). Utilisé pour les alertes et les affectations de fiches de mission. |
| data/contacts.json | Annuaire de contacts d'urgence extérieurs : fournisseurs, autorités, partenaires, numéros d'astreinte. |
| data/contact_proposals.json | Propositions d'ajout de contact d'urgence soumises par un membre (non-admin) depuis l'interface, en attente de validation par un coordinateur avant intégration dans contacts.json. |
| data/fiches_mission.json | Fiches de mission par rôle (DG, DSI, DRH, soignant référent…) : liste des actions à mener pendant une crise, générées par l'IA ou saisies manuellement, assignables aux membres. |
| data/communication_templates.json | Templates de messages pré-rédigés par type de crise et par destinataire (staff, patients, familles, presse). Accessibles en 1 clic pendant la crise pour accélérer la communication. |
| data/documents.json | Index des fichiers uploadés (plan blanc, fiches réflexes, documents internes) avec métadonnées (nom, date upload, taille, catégorie). |
| data/member_aliases.json | Table de correspondance alias → membre officiel, utilisée par l'IA pour dédupliquer les noms dans les transcriptions et journaux (ex: "Dr Martin" = "Pr Martin, Chef de service"). |
| data/ai_settings.json | Configuration IA par établissement : fournisseur actif (Mistral par défaut / Groq / Anthropic / Copilot), modèle choisi, options de langue et de style des réponses. |
| data/azure_openai_settings.json | Configuration self-service du fournisseur IA Azure OpenAI (alternative à Mistral/Groq/Anthropic) : endpoint, déploiement, clé API — saisie directement par le client, aucune intervention Réactis nécessaire. |
| data/whatsapp_config.json | Configuration du canal WhatsApp Business : numéro lié, état de la session, options de notification automatique. |
| data/telegram_config.json | Configuration du canal Telegram : token du bot, chat IDs des destinataires, options de notification par type d'événement. |
| data/teams_config.json | Configuration du webhook Microsoft Teams : URL du webhook entrant, activation par type d'événement (ouverture de crise, clôture…). |
| data/sms_config.json | Configuration du canal SMS (Scaleway) pour les alertes réelles : clé API, numéros expéditeur/destinataires, activation par type d'événement. |
| data/sms_formation_config.json | Configuration SMS dédiée aux crises Test/Formation — numéros distincts du canal réel, pour ne jamais déranger les vrais destinataires pendant un exercice. |
| data/email_formation_config.json | Liste d'adresses email dédiées aux crises Test/Formation, utilisée à la place des destinataires réels tant que crisisMode vaut test. |
| data/hierarchy_messages.json | Messagerie hiérarchique descendante (région/groupe → établissement) : historique des messages envoyés par le niveau supérieur, avec statut lu/non-lu par rôle. |
| data/link_request.json | État de la demande de rattachement de l'établissement à un tenant régional/groupe supérieur (statut none / pending / accepted, URL et GROUPE_KEY une fois acceptée). Conditionne la remontée automatique des crises réelles vers le niveau supérieur. |
| data/tour_completions.json | Suivi des tours guidés de découverte complétés par utilisateur et par rôle (coordinateur/secrétaire/membre/invité) — alimente le badge de progression et évite de rejouer un tour déjà vu. |
| data/signups.json | Demandes d'essai reçues depuis signup.html : établissement, contact, offre choisie, fournisseur IA, statut (pending…), token d'activation. Consultées depuis le panneau maître (crise-master). |
| Data — Logs et caches | |
| data/ai_log.json | Journal des appels IA : horodatage, fournisseur, modèle, prompt utilisé, tokens consommés, coût estimé. Utilisé pour l'audit et la supervision des coûts IA. |
| data/email_log.json | Journal des emails envoyés : destinataire, sujet, date, statut (succès / échec). Consultable depuis l'interface Admin → Emails. |
| data/plan_blanc_cache.json | Cache du texte extrait du plan blanc PDF : évite de relancer l'extraction Python à chaque appel IA. Invalidé automatiquement lors de l'upload d'un nouveau plan blanc. |
| data/document_log.json | Journal des uploads de documents (base documentaire) : qui a uploadé quoi, quand, résultat du scan de risque local. Consultable depuis Admin → Documents (GET /api/documents/log, admin uniquement). |
| data/documents.json.sha256 · data/history/*.json.sha256 | Sidecars d'intégrité SHA-256 : un hash par fichier sensible, régénéré à chaque écriture. GET /api/admin/integrity/check recalcule et compare pour détecter toute altération manuelle hors application. |
| Data — Dossiers de crises | |
| data/history/ | Archive des crises passées. Un fichier JSON par crise, nommé par horodatage UNIX (ex: 1781974959892.json). Contient journal complet, alertes, membres impliqués, statut, durée. |
| data/retex/ | RETEX (Retours d'Expérience) validés. Un fichier JSON par crise clôturée, contenant les points positifs, axes d'amélioration, plan d'action, validé par le responsable. Source des "Tendances" et de l'analyse IA. |
| data/attachments/ | Pièces jointes uploadées pendant les crises : photos, captures d'écran, documents de situation. Référencées dans le journal de crise. |
| data/logs/ | Logs applicatifs bas niveau : accès HTTP, erreurs serveur, performances. Rotation automatique. |
| data/wa_session/ | Fichiers de persistance de session WhatsApp (web.js) : authentification QR code sauvegardée pour éviter le re-scan à chaque redémarrage du serveur. |
| data/conseils_terrain.json | Conseils terrain saisis post-RETEX, indexés par type de crise. Chaque conseil inclut contenu, auteur, date, crise source. Consultation manuelle uniquement à ce jour (recherche, impression, envoi par email) — pas encore lu par l'IA. |
| data/impact_financier/ | Évaluations d'impact financier post-crise. Un fichier JSON par crise clôturée, avec lignes de coûts catégorisées (RH, matériel, prestataires…) et total calculé. Remonte vers les niveaux Régional et Groupe. |
| data/trash/ | Corbeille des crises supprimées (trash/history/, trash/retex/, trash/impact_financier/) — restaurable pendant 30 jours, exclue de toute lecture par l'IA. Purge automatique après ce délai. |
| Frontend — Interfaces utilisateur | |
| frontend/index.html | Interface principale de crise : journal de crise temps réel, alertes multi-canaux, pilotage, fiches de mission, communication, plan blanc. Page utilisée pendant la crise. |
| frontend/app.js | Logique JavaScript complète de l'interface principale : WebSocket temps réel, gestion des onglets, appels API, rendu dynamique du journal, IA contextuelle. |
| frontend/style.css | Feuille de styles globale : design system Réactis (couleurs, typographie, composants, mode sombre, responsive). |
| frontend/admin.html | Interface d'administration : gestion des membres, contacts, config établissement, documents, templates email, RETEX, conseils terrain, impact financier, analytics IA, RGPD, abonnement. |
| frontend/admin.js | Logique JavaScript de l'administration : ~2 500 lignes, CRUD membres/contacts/types, gestion des onglets, upload documents, RETEX validation, conseils terrain CRUD + Tendances, impact financier multi-lignes + agrégation. |
| frontend/dashboard.html | Tableau de bord de supervision : vue en temps réel des crises en cours, compteurs, statut des membres, historique des alertes. Conçu pour un affichage permanent (salle de crise, PC superviseur). Les boutons "📧 Emails envoyés" et "⚙️ Admin" ne sont visibles que pour les coordinateurs (rôle admin) — les membres et invités voient uniquement l'historique des crises. |
| frontend/setup.html | Assistant d'onboarding : configuration initiale guidée (nom établissement, membres, SMTP, upload plan blanc). Affiché au premier lancement. |
| frontend/signup.html | Page d'acquisition client : formulaire de demande d'essai Réactis. Le prospect saisit son établissement, ses coordonnées, choisit son offre (établissement 1 à 3 périmètres, régional, groupe), son fournisseur IA, et peut sélectionner un nombre de packs +5 licences d'accès. La demande atterrit dans le panneau maître (section "Demandes d'essai") avec tous les choix affichés en badges. |
| frontend/team-doc.html | Ce document : documentation interne équipe Réactis. Source de vérité dans crise-master/, copiée dans crise/ et crise-staging/ après chaque mise à jour. |
| frontend/doc.html | Documentation utilisateur publique simplifiée : guide de démarrage rapide destiné aux clients sans accès à team-doc.html. |
| frontend/emails.html | Interface de gestion des templates email : édition WYSIWYG des modèles de communication par type de crise et destinataire. |
| frontend/superadmin.html | Interface super-admin (Réactis interne uniquement) : gestion des licences clients, activation/désactivation des abonnements, supervision des instances actives. |
| frontend/presentation.html | Présentation commerciale desktop : diaporama interactif Réactis pour démos prospects (directeurs, DSI, ARS). |
| frontend/presentation-mobile.html | Version mobile de la présentation commerciale : optimisée pour smartphone lors de visites terrain. |
| frontend/presentation-rssi.html | Présentation commerciale ciblée RSSI/DSI : angle sécurité (chiffrement, isolation multi-tenant, intégrité SHA-256, hébergement) plutôt que fonctionnel, pour les interlocuteurs techniques côté prospect. |
| frontend/guide-client.html | Guide de présentation client de la plateforme : parcours des fonctionnalités destiné à un établissement déjà signé, à l'onboarding ou en rappel. Public, sans détail d'implémentation. |
| frontend/conformite-rgpd-securite.html | Page publique de conformité RGPD & Sécurité — synthèse des mesures (chiffrement, hébergement HDS à venir, sous-traitants, durées de conservation). Doublée d'un PDF téléchargeable (Reactis_Conformite_RGPD_Securite_v1.0.pdf). |
| frontend/retex.html | Page de présentation du RETEX (Retour d'Expérience) : explique le principe et le déroulé du retour d'expérience post-crise à un public non-technique (prospect ou nouvel établissement). |
| frontend/roue-vertueuse.html | Infographie imprimable (SVG) du cycle complet de gestion de crise Réactis, étape par étape, au niveau établissement — support visuel utilisé en présentation commerciale et en formation. |
| frontend/Reactis_Conformite_RGPD_Securite_v1.0.pdf | Version PDF téléchargeable de la page conformité RGPD & Sécurité, liée depuis conformite-rgpd-securite.html et depuis les échanges commerciaux. |
| frontend/cgu.html / cgv.html / dpa.html / pssi.html / rgpd.html | Documents légaux et contractuels accessibles depuis le footer de toute page Réactis. CGU = Conditions Générales d'Utilisation · CGV = de Vente · DPA = Data Processing Agreement (RGPD) · PSSI = Politique de Sécurité SI. |
| frontend/registre-traitements.html | Registre des traitements de données RGPD généré pour l'établissement client — requis en cas d'audit CNIL. |
| frontend/logo.svg | Logo Réactis vectoriel — utilisé dans l'en-tête et les documents générés (RETEX PDF, emails). |
| Racine du service | |
| plan blanc/ | PDF de référence fournis avec la plateforme : fiches réflexes par type d'incident (cyber, SI, viral, intégrité données), guide de communication de crise, plan blanc type. Chargés par défaut à l'onboarding. |
| uploads/ | Documents uploadés par l'établissement client via l'interface Admin → Documents. Servis statiquement par Express pour affichage et extraction IA. |
| backups/ | Sauvegardes chiffrées AES du dossier data/. Générées par backup_data.sh, nommées par horodatage. |
| backup_data.sh | Script shell de sauvegarde automatique : archive et chiffre le dossier data/, supprime les backups de plus de 30 jours. Planifié via cron. |
| check_subscriptions.js | Script Node.js de vérification des abonnements : contrôle les dates d'expiration des licences clients, envoie des alertes par email aux clients approchant de l'échéance. |
| monitor.sh | Script de health check : ping le backend, vérifie la disponibilité du service, alerte en cas de down. Planifié via cron toutes les 5 minutes. |
| maincourante_projet.md | Notes de suivi interne du développement : décisions d'architecture, points bloquants, historique des choix techniques. Usage interne Réactis. |
Niveau Régional (/opt/crise-staging-regional/ et tenants /opt/crise-tenants/tna/)
Service agrégateur qui consolide en temps réel les données de tous les établissements de la région. Chaque tenant régional dispose de son propre répertoire dans /opt/crise-tenants/{slug}/ avec un tenant.json de type "type": "regional".
Tenant régional de production actuel : TNA
| Paramètre | Valeur |
|---|---|
| Nom | Territoire Nouvelle-Aquitaine |
| URL | tna.crise.ifclubs.fr |
| Port | 6018 |
| Service | crise-tna.service |
| Données | /opt/crise-tenants/tna/data/tenant.json |
| Mot de passe admin | Reactis2026!TNA |
Connexion d'un établissement à un tenant régional (côté admin TNA)
L'administrateur du tenant régional (ou Frédéric depuis le panneau maître) connecte un établissement membre depuis le bouton "⚙️ Établissements" dans la barre du dashboard régional. Le formulaire demande uniquement le nom, l'URL interne et le slug du service. Tout le reste est automatique :
- Génération d'une
GROUPE_KEYaléatoire (32 octets hex) - Écriture de la clé dans le
.envde l'établissement (GROUPE_KEY=xxx) - Redémarrage du service de l'établissement
- Test de connexion
/api/groupe/summaryavec la clé - Sauvegarde de l'établissement dans le
tenant.jsondu régional
| Fichier / Dossier | Rôle et contenu |
|---|---|
| backend/index.js | Serveur Express.js agrégateur régional. Expose /api/regional/summary qui agrège les données de tous les établissements de la région (/api/groupe/summary de chaque établissement). Expose /api/admin/etablissements (POST/DELETE) pour la gestion des membres depuis l'interface admin. Agrège aussi les impacts financiers multi-établissements. |
| frontend/index.html | Dashboard régional : supervision multi-établissements — statut de chaque établissement, alertes actives, indicateurs consolidés. Inclut un panneau admin "⚙️ Établissements" pour connecter/déconnecter des établissements membres sans intervention technique. |
Niveau Groupe / National (/opt/crise-staging-groupe/)
Service agrégateur de niveau national. Consolide les données des niveaux régionaux et des établissements en accès direct.
| Fichier / Dossier | Rôle et contenu |
|---|---|
| backend/index.js | Serveur Express.js agrégateur national. Appelle en interne /api/regional/summary chez chaque région membre et /api/groupe/summary chez chaque établissement en accès direct. Expose /api/etablissements (données consolidées pour le dashboard et la TV) et /api/conseils-coordination (IA niveau national). |
| frontend/index.html | Dashboard groupe national : vue consolidée de toutes les régions et établissements — carte de situation, alertes actives, indicateurs nationaux, accès aux détails par région. |
| frontend/tv.html | Mode TV : écran de supervision permanente grand format (salle de situation nationale). Rafraîchissement automatique toutes les 30 secondes, affichage plein écran sans contrôles, optimisé pour les écrans de supervision 24h/24. |
Niveau Master (/opt/crise-master/)
Panneau maître interne Réactis (accès Fred uniquement) — pas de duplicata staging pour son propre code. Provisionne et supervise tous les tenants (établissement, régional, groupe), gère la facturation et les demandes d'essai. Port 6099, service crise-master.service.
| Fichier / Dossier | Rôle et contenu |
|---|---|
| index.js | Serveur Express.js unique (pas de sous-dossier backend/) : CRUD tenants (/api/tenants), création établissement/régional (create, create-regional), DNS + certbot automatiques, demandes de rattachement inter-niveaux (send-link-request), demandes d'essai (/api/signups), corbeille tenants (/api/trash), déploiement/rollback de features (/api/release/*), comptabilité (/api/comptabilite/*), rentabilité (/api/profitability). |
| package.json / package-lock.json | Dépendances Node.js du panneau maître. |
| .env | Secrets du panneau maître : PORT, mot de passe admin, clés API DNS/certbot. Ne jamais committer. |
| rib.json | Coordonnées bancaires Réactis utilisées pour l'envoi de RIB aux clients (send-rib) et le suivi de paiement (mark-paid). |
| frontend/index.html | Panel maître : liste des tenants, demandes d'essai, corbeille, déploiement de features (Release), synthèse abonnements. |
| frontend/comptabilite.html | Comptabilité interne Réactis : charges, TVA, journal, résultat — alimentée par /api/comptabilite/*. |
| frontend/rentabilite.html | Analyse de rentabilité par client/tenant : coûts d'infra + IA vs revenus d'abonnement. |
| frontend/organigramme.html | Organigramme interne Réactis (usage interne, non commercial). |
| frontend/plan-formation.html | Plan de formation interne Réactis pour l'équipe (à ne pas confondre avec les fiches de formation des clients). |
| frontend/schema-flux.html | Schéma visuel des flux de données entre niveaux (établissement → régional → groupe) et vers le master. |
| frontend/team-doc.html | Ce document — sa version source de vérité vit ici, copiée ensuite vers crise/ et crise-staging/. |
crise-staging = développement/validation · crise = démo/production Réactis · chaque client dispose de son propre répertoire (ex: crise-nomclient) avec son propre DATA_DIR pointant vers ses données isolées.