🔍
© Document propriété de IFclubs SAS — Confidentiel, usage interne uniquement www.ifclubs.fr

🎯 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
💡 Réactis = main courante numérique + alertes automatiques + IA pour les établissements de santé. Le bénéfice principal est la traçabilité totale et la conformité documentaire post-crise.

🏥 Utilisateurs ciblés

Types d'établissements

TypeExemplesBesoins spécifiques
Cliniques MCOClinique privée, chirurgicalePlan blanc, gestion patients en cours d'opération, communication familles
EHPAD / MRMaison de retraite, EHPADIntoxications alimentaires, chutes massives, communication familles résidents
HAD / SSIADHospitalisation à domicileCoordination équipes terrain, communication sur sites dispersés
Groupes multi-sitesGroupe de cliniques, GHTPérimètres multiples, pilotage centralisé, gestion inter-établissements

💬 Ce que Réactis apporte

Directeur / DG
  • 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
Directeur des soins
  • 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
Responsable qualité
  • 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
DSI / RSSI
  • 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

« Nous avons déjà un plan blanc — pourquoi Réactis ? »
Le plan blanc dit quoi faire, mais il ne dit pas qui l'a fait, à quelle heure, et avec quel résultat. Réactis est la main courante qui prouve que le plan blanc a été suivi. En cas de contrôle HAS ou de litige, c'est la traçabilité qui compte, pas le document.
« Nos équipes ne sont pas à l'aise avec les outils numériques. »
Réactis est conçu pour être utilisé en situation de stress, sans formation préalable. L'interface est réduite à l'essentiel : un champ de texte, un bouton "Ajouter". Le cadre de nuit qui n'a jamais vu l'outil peut l'utiliser en moins de 2 minutes. La démo le prouve.
« Nos données patient vont aller dans l'IA ? »
Non, et ce n'est pas qu'une question de règle d'usage : c'est une double sécurité technique. D'abord, les CGU stipulent explicitement qu'aucune donnée nominative patient ne doit être saisie dans le journal de crise — celui-ci contient uniquement des informations opérationnelles : "Évacuation bloc B3 en cours", "Chirurgien prévenu", etc. Ensuite, chaque entrée transmise à l'IA (journal, transcription de réunion, message externe) passe par un scanner de risques automatique qui détecte et bloque les éléments sensibles (numéro de mobile, email, marqueur de confidentialité) avant tout envoi. Pour les documents importés (plans blancs, fiches réflexes…), une sécurité supplémentaire s'applique : ils doivent en plus être validés manuellement par un référent de l'établissement avant que leur contenu puisse être exploité par l'IA.
« Qu'est-ce qui se passe si internet est coupé pendant la crise ? »
Réactis nécessite une connexion internet pour fonctionner — mais une coupure totale est extrêmement rare en pratique. Dans la grande majorité des crises hospitalières (incendie, panne HIS, intoxication, eau…), la connexion internet reste disponible car elle est indépendante du réseau informatique interne. Et même en cas de coupure filaire, les téléphones de garde, d'astreinte et les smartphones personnels disposent de la 4G/5G — Réactis reste accessible depuis n'importe quel mobile sans aucune installation.
« Nous n'avons qu'une crise tous les 2 ans — ça vaut vraiment l'abonnement ? »
La valeur de Réactis n'est pas le nombre de crises, c'est la qualité de gestion lors de la crise. Une seule crise mal gérée — mauvaise communication familles, rapport incomplet pour l'ARS, procédure non tracée — peut coûter bien plus que l'abonnement annuel. De plus, Réactis s'utilise aussi pour les exercices de simulation (recommandés par la HAS).
« C'est quoi la différence avec WhatsApp ou un simple Google Docs ? »
WhatsApp ne génère pas de rapport de fin conforme, ne structure pas les entrées (INFO / ACTION / DÉCISION / ALERTE), ne notifie pas automatiquement, ne propose pas de conseils basés sur le plan blanc. Réactis est conçu pour que le rapport soit prêt quand la crise se ferme.
« Qui garantit la disponibilité de la plateforme lors d'une vraie crise ? »
L'infrastructure est hébergée sur un VPS mutualisé en France chez IONOS SE (ISO 27001) : 6 vCore, 8 Go RAM, 240 Go NVMe SSD. Une migration vers un serveur OVH certifié HDS (Hébergeur de Données de Santé) est prévue au premier semestre 2027. Le serveur est indépendant du réseau informatique de l'établissement : si le HIS est en panne, Réactis reste accessible. Les sauvegardes sont assurées par un script automatisé quotidien, chiffré AES-256, conservé 30 jours.

📋 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
🎯 Nature de la crise — réelle ou exercice : un sélecteur « Nature » permet dès l'ouverture de préciser si la cellule concerne une crise réelle ou un exercice. Les alertes WhatsApp/Telegram/email sont envoyées à l'identique dans les deux cas, mais marquées « 🎯 EXERCICE — NE PAS S'INQUIÉTER » (bandeau email, préfixe message, couleur Teams distincte). Un badge « EXERCICE » apparaît dans l'en-tête de la cellule, sur l'écran de clôture, l'historique, la recherche et le rapport final. Un badge cliquable dans l'en-tête permet aussi de basculer réelle ⇄ exercice en cours de crise (avec confirmation). Si le RETEX et/ou le compte-rendu de fin de l'exercice sont validés, ils enrichissent le corpus IA (benchmark historique, axes d'amélioration récurrents) utilisé pour les conseils sur les crises suivantes du même type — contrairement au mode Formation (3ᵉ nature disponible, non détaillé ici), totalement exclu de ce corpus.
📝 Rôle de la secrétaire de cellule — à bien comprendre

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

TypeUsageCouleur
INFOToute information factuelle : état de la situation, compte rendu d'un appel, observation terrainBleu
ACTIONTâche à réaliser — peut être assignée à un membre, cochée quand réaliséeVert
ALERTEAlerte critique nécessitant attention immédiate — peut être résolueRouge
DÉCISIONDécision prise par la direction — trace définitive de qui a décidé quoiViolet
RÉUNIONDéclenchement d'une visioconférence (lien Teams ou autre)Gris
DOCUMENTPièce jointe PDF ou image ajoutée à la criseOrange

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.
💡 Ce que ça permet de dire en rendez-vous commercial : « Réactis inclut sa propre formation. Vos équipes se forment seules, en autonomie complète, sans qu'un consultant ne se déplace ni ne facture de journée de formation. »

📡 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

CanalConfigurationInclus dans
EmailSMTP configurable (serveur client ou relais Réactis)Tous les abonnements
WhatsAppCompte WhatsApp scanné via QR code dans AdminTous les abonnements
TelegramBot Telegram configuré dans AdminTous les abonnements
Teams (sortant)URL Incoming Webhook Teams — Admin → Teams → Option ATous les abonnements
Teams (entrant)Graph API Azure AD + abonnement canal — Admin → Teams → Option BTous les abonnements
SMSClé 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énementMessage envoyé dans Teams
🚨 Ouverture de criseNom, type, heure d'ouverture — lien Réactis
⚠️ Nouvelle alerteTexte de l'alerte saisie dans le journal
📋 Nouvelle décisionTexte de la décision prise
🤖 Synthèse IANotification de disponibilité + lien
📝 Compte rendu d'étapeNotification d'envoi du compte rendu + lien
✅ Fermeture de criseDuré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.

⚠️ Microsoft décommissionne progressivement les "Incoming Webhooks" classiques au profit des Workflows Power Automate. Si l'URL générée ne contient pas 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.

ÉtapeActionQui
1Configurer Azure AD (Tenant ID, Client ID, Secret) dans Admin → TeamsIT client
2Ajouter la permission ChannelMessage.Read.All (Application) + Grant admin consentIT client
3Récupérer le Team ID et le Channel ID depuis le lien du canal TeamsIT client ou référent
4Admin Réactis → Teams → Option B → saisir Team ID + Channel ID → Activer l'abonnementAdmin Réactis
💡 Renouvellement automatique : Microsoft Graph impose un délai d'expiration maximum de 60 minutes sur les abonnements aux messages de canal. Réactis renouvelle automatiquement l'abonnement toutes les 50 minutes en arrière-plan — aucune action manuelle requise une fois activé.
💡 Fonctionnement pendant la crise : seuls les messages du canal configuré sont intégrés. Les messages privés (chats directs) ne sont jamais lus. Si aucune crise n'est ouverte au moment d'un message, il est ignoré.
🛡️ Garde-fou (contrôle d'entrée) : chaque message Teams entrant est scanné automatiquement avant intégration au journal (même moteur de détection que la saisie manuelle et l'import de documents). Selon le mode configuré côté établissement, un message contenant un élément à risque est soit rejeté (non intégré au journal), soit intégré avec un signalement visible pour la cellule.

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

Réservé aux coordinateurs (+ secrétaire de main courante désignée). Les membres et invités ne voient pas ces boutons.

Le bouton RÉUNION dans le panneau de saisie déclenche deux actions simultanées :

  1. Une entrée "RÉUNION" est ajoutée dans le journal avec le lien visio
  2. 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

ServiceOngletSpécificité
🏥 Directeur de criseDirecteurCoordination générale, autorité
🩺 Responsable médicalMédecinTriage, soins, protocoles médicaux
👩‍⚕️ DSSI (Directeur des soins)DSSIOrganisation soignante, effectifs
💻 Responsable SIResp. SICrises cyber, HIS, ransomware — inclut déclaration ANSSI obligatoire
📦 LogistiqueLogistiqueMatériel, approvisionnement, locaux
🛠️ Responsable techniqueTechniquePannes, prestataires, équipements — crises eau/énergie/ascenseurs/biomédical
👥 Ressources HumainesRHEffectifs, rappels, astreintes
📢 CommunicationComm.Presse, familles, réseaux sociaux
📋 QualitéQualitéTraçabilité, signalements ARS/HAS
💊 PharmacienPharmacienGestion 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.

💡 Les templates sont personnalisables par client en éditant le fichier 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
⚠️ Les conseils terrain (cette page) n'en font pas encore partie — c'est une évolution possible mais non développée à ce jour.

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
💡 Les conseils terrain complètent le RETEX IA en capturant les apprentissages opérationnels granulaires qu'un coordinateur peut relire avant/pendant une crise du même type — le RETEX, lui, est analysé et réinjecté automatiquement par l'IA.

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

NiveauDonnées disponibles
ÉtablissementImpact par crise + total par établissement
RégionalCumul des impacts de tous les établissements de la région + total régional
National (Groupe)Cumul des impacts par région + total national global
📊 Les directeurs régionaux et nationaux disposent ainsi d'une mesure consolidée de l'impact financier des crises sur leur périmètre, mis à jour en temps réel dès qu'un établissement enregistre un impact.

📑 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
✅ Le rapport est sauvegardé dans le fichier de la crise. Si on le redemande, il est retourné immédiatement sans nouvel appel IA (mise en cache automatique).

📧 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
⚠️ Si aucun des deux documents n'est disponible, l'envoi est bloqué avec un message d'erreur. Il faut d'abord générer le rapport de fin (bouton dédié sur l'écran de clôture) et/ou générer + valider le RETEX (depuis l'historique des crises, onglet admin "Apprentissage").

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"
📋 Chaque envoi est enregistré dans les logs du serveur. En cas de problème de réception, l'administrateur peut vérifier les logs de l'application.

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

⚠️ Désactiver l'IA fait perdre en puissance le logiciel : plus de conseils en temps réel, plus de rapport de fin automatique, plus de RETEX, plus de compte rendu d'étape. Le journal de crise, les alertes multi-canaux et le tour guidé de formation continuent de fonctionner normalement — seules les fonctions IA sont coupées.

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.

💡 Mistral AI convainc la plupart des clients, notamment pour sa localisation UE. Groq et Anthropic restent disponibles au choix du client, en self-service — Groq pour la vitesse brute, Anthropic pour la meilleure qualité de rédaction sur les rapports et RETEX.

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 AIGroq (Llama 3.3)Anthropic ClaudeMicrosoft Copilot
Origine / hébergement🇫🇷 France (UE)🇺🇸 USA🇺🇸 USASelon tenant client M365
VitesseRapide (2-5s)⚡ Très rapide (1-3s)Rapide (3-8s)Variable
Qualité texteBonneBonneTrès bonneTrès bonne
Coût clientInclusInclusInclusCouvert par abonnement M365
Activation / désactivationSelf-service — actif par défautSelf-service — déjà pré-activé, bascule immédiateSelf-service — déjà pré-activé, bascule immédiateSelf-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 maximaleClients exigeants / gros volumesClients déjà équipés Microsoft 365

💡 Bouton CONSEILS — Détail complet

Réservé aux coordinateurs (+ secrétaire de main courante désignée). Le bouton CONSEILS n'est pas visible pour les membres et invités.

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.

1
L'utilisateur clique sur "CONSEILS" dans le panneau gauche
Le frontend collecte : le type de crise, le nom de la crise, les 30 dernières entrées du journal, la liste des conseils déjà affichés, la liste des conseils déjà traités, et les domaines d'impact actifs (médical, logistique…)
2
Sélection des fiches réflexes pertinentes
Le backend sélectionne les fiches réflexes du plan blanc correspondant au type de crise. Si la crise contient les mots "cyber", "informatique", "ransomware", les fiches informatiques sont incluses. Sinon elles sont exclues.
3
Ajout du contexte RETEX et benchmark
Si des RETEX validés existent pour le même type de crise, leur contenu est ajouté au contexte pour que l'IA propose des conseils enrichis des leçons apprises. Un benchmark compare les statistiques actuelles (taux de résolution des actions, alertes non résolues) à l'historique.
4
Construction du prompt envoyé à l'IA
Le prompt contient :le type et nom de crise, le journal, les actions déjà traitées, les fiches réflexes, les RETEX, le benchmark, et l'instruction de générer 8-12 suggestions JSON avec priorité (URGENT/IMPORTANT/SURVEILLANCE), service concerné, texte max 90 caractères, et source (fiche concernée).
5
Appel à l'IA (fournisseur actif du tenant)
L'IA génère une réponse JSON : {"suggestions":[{"id":"1","priority":"URGENT","service":"Directeur Général","text":"...","source":"Plan Blanc — Chapitre 2"}]}. Durée : 2-8 secondes selon le fournisseur.
6
Filtrage anti-doublons
Le backend compare chaque suggestion aux entrées du journal et aux conseils déjà traités. Si un conseil ressemble trop à une action déjà saisie dans le journal (mots-clés similaires), il est filtré pour éviter les redondances.
7
Affichage dans l'interface
Les conseils s'affichent sous forme de cartes colorées par priorité (rouge = URGENT, orange = IMPORTANT, gris = SURVEILLANCE). Chaque carte propose 4 boutons de feedback : ✅ Fait (crée une DÉCISION dans le journal), ⏭ Déjà traité, ⏰ Plus tard, ❌ Non pertinent. Le choix est enregistré dans le fichier de crise pour analyse ultérieure.
8
Enregistrement du feedback (Conseil Analytics)
Chaque appel conseils est sauvegardé dans le fichier de la crise (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.
⚠️ En mode démo : les conseils sont pré-écrits (pas d'appel IA réel). Toutes les crises DEMO ont chacune leur jeu de 10 conseils cohérents.

📊 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.
💡 Les filtres KPI sont particulièrement utiles en revue post-crise : filtrer sur "Non pertinent" révèle les procédures du plan blanc qui ne correspondent pas à la réalité terrain.
Opt-in contribution anonymisée
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

💡 Contrairement aux autres fonctions de cette page, la correction orthographique n'utilise aucune intelligence artificielle — c'est un dictionnaire français local (Hunspell), embarqué dans le serveur. Zéro appel externe, zéro dépendance à un fournisseur IA.
1
L'utilisateur saisit son texte dans le champ de saisie
Il clique sur "✏️ Corriger" sans valider l'entrée
2
Analyse mot par mot via le dictionnaire local
Chaque mot du texte est vérifié contre un dictionnaire français (Hunspell) embarqué dans le serveur. Sont volontairement exclus de la correction : les mots de 2 caractères ou moins, les mots tout en majuscules (ex. "ALERTE"), et les mots capitalisés hors début de phrase (quasi-certainement des noms propres) — pour limiter les faux positifs.
3
Le texte corrigé remplace le texte original dans le champ
L'utilisateur peut encore modifier manuellement avant de valider. Aucune entrée n'est créée — c'est juste une aide à la rédaction.
4
Contrôle de risques à la validation de l'entrée
Une fois l'entrée validée dans le journal (avec ou sans passage par le correcteur), elle est soumise au même contrôle de risques que toute saisie alimentant le journal (manuelle, Teams, transcription de réunion…) : recherche d'éléments à risque (données sensibles, identifiants…) et blocage par défaut tant qu'ils ne sont pas corrigés.
⚠️ Limite assumée : contrairement à un correcteur IA, seule l'orthographe mot-à-mot est corrigée (pas la grammaire, la conjugaison ou la réaccentuation systématique) — compromis voulu pour rester sans dépendance externe.

📧 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
1
Déclenchement automatique
Un contrôle interne au serveur, toutes les 10 minutes, vérifie si l'intervalle configuré (« Points d'étape ») est écoulé depuis le dernier compte rendu. Si rien de nouveau n'est survenu depuis le précédent (aucune nouvelle entrée, pas de transcription de réunion), aucun compte rendu n'est généré ni envoyé — le contrôle est simplement reporté au prochain passage.
2
Génération par IA
L'IA reçoit l'historique complet depuis l'ouverture de la crise, les nouveautés depuis le dernier compte rendu (décisions, actions, entrées du journal) et, le cas échéant, la transcription de la dernière réunion Teams. Elle produit un compte rendu structuré (situation, décisions, actions, prochaines étapes, points de vigilance, synthèse globale). Consigne stricte : aucune mention des entrées de type ALERTE dans ce contenu généré par IA.
3
Envoi par email, adapté selon le rôle
Coordinateurs : compte rendu complet, avec les alertes ajoutées telles quelles en points de vigilance (jamais reformulées par l'IA). Membres : le même compte rendu, sans les alertes. Invités : uniquement s'ils sont destinataires d'une décision qui leur est taguée, un email personnel listant leurs décisions assignées (aucun envoi sinon). Chaque compte rendu automatique est aussi journalisé comme une entrée INFO et consultable dans l'historique des comptes rendus, avec le badge « 🤖 Système Reactis (auto) ».

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

1
Collecte du journal complet
Toutes les entrées sont envoyées, séparées en deux flux : les entrées normales (INFO, ACTION, ALERTE, DÉCISION) et les lignes de transcription Teams (format [PRÉNOM I.], ex : [MARIE L.]). Le journal est tronqué à 12 000 caractères si nécessaire.
2
Prompt de synthèse structurée
L'IA génère 5 sections : Résumé exécutif (3-5 phrases), Chronologie critique, Actions engagées, Décisions prises, Points de vigilance. Si une transcription Teams est présente, une 6ème section "Synthèse des échanges de réunion" est ajoutée.
3
Sauvegarde et historique
La synthèse est sauvegardée dans le fichier de la crise. Les 20 dernières synthèses sont conservées et accessibles ultérieurement. Idéal pour préparer un point de situation toutes les heures.

📝 Compte rendu d'étape IA

1
Déclenchement depuis la modale Réunion
Accessible via le bouton "📝 Compte rendu d'étape" dans la modale de réunion. Le frontend envoie : type de crise, nom, journal complet, liste des membres au format court "Prénom I." (ex : "Marie L.") — jamais le nom de famille complet — durée depuis l'ouverture.
2
Séparation journal / transcription
Les entrées de type transcription Teams (lignes commençant par [PRÉNOM I.], ex : [MARIE L.]) sont séparées du journal opérationnel. La transcription (jusqu'à 30 000 caractères) est transmise à l'IA comme source principale si présente.
3
Génération du CR structuré
L'IA retourne un JSON structuré (pas du Markdown) : 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.
4
Édition et envoi
L'utilisateur peut modifier le CR manuellement. Il peut le verrouiller (empêche toute modification ultérieure) puis l'envoyer par email à tous les membres. Le CR est archivé dans le fichier de la crise.

📑 Rapport de fin de crise IA — Détail

C'est la fonctionnalité IA la plus complexe. Elle s'active à la fermeture de la crise.

1
Calcul des statistiques de crise
Avant tout appel IA : nombre d'entrées par type, taux de résolution des actions (% cochées), délai moyen de résolution, nombre de membres engagés, nombre de réunions, nombre de CRs générés, présence de transcriptions Teams.
2
Score d'utilisation de la plateforme (0-100)
Calculé avant l'appel IA, ce score mesure : réunions organisées, CRs générés, actions tracées et résolues, membres configurés, rapport fin généré. Les axes sous-utilisés sont listés explicitement dans le prompt.
3
Ajout du benchmark historique
Les métriques de la crise actuelle sont comparées à la moyenne des crises précédentes du même type (durée, taux de résolution, nombre de membres). Cela permet à l'IA de contextualiser sa notation.
4
Prompt en 3 parties
L'IA reçoit le journal (tronqué à 10 000 caractères), les statistiques, le score d'utilisation, le benchmark, et les extraits du plan blanc. Elle génère 3 parties : conformité au plan blanc, analyse du pilotage, utilisation de la plateforme.
5
Mise en cache automatique
Le rapport est sauvegardé dans le fichier de la crise. Si quelqu'un redemande le rapport plus tard, il est retourné immédiatement sans nouvel appel IA. Il peut être regénéré avec le paramètre force=true.

🧠 RETEX IA — Retour d'Expérience

1
Déclenchement depuis le tableau de bord
Accessible depuis l'historique des crises → crise sélectionnée → bouton "Générer le RETEX". Accessible uniquement aux administrateurs.
2
Prompt structuré JSON
L'IA reçoit le journal complet + statistiques + benchmark et doit retourner un JSON structuré précis avec : summary, timeline (5-10 étapes), keyDecisions (3-6), strengths (4-6), improvements (4-6), recommendations (4-6), processMetrics (scores de coordination, réactivité, documentation), complexity, responseTimeMinutes.
3
Validation par l'administrateur
Le RETEX généré est en état "non validé". L'administrateur le lit et peut le valider. Seuls les RETEX validés sont réinjectés comme contexte lors des futurs appels IA pour le même type de crise.
4
Réinjection dans les futurs conseils
Lors du prochain appel CONSEILS pour une crise du même type, le backend charge tous les RETEX validés correspondants et les ajoute au contexte : "RETOURS D'EXPÉRIENCE — CRISES SIMILAIRES PASSÉES : …". L'IA peut alors proposer des conseils tenant compte des erreurs passées.

🎙️ 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.

1
Réception de la transcription
En mode automatique (tenant Teams connecté) : la transcription arrive via webhook dès la fin de la réunion. En mode manuel : l'utilisateur importe le fichier. Dans les deux cas, le serveur parse le contenu et transforme chaque ligne en un "cue" : {speaker, text}. Exemple : {speaker: "Marie Lambert", text: "J'ai contacté le SAMU, ils arrivent dans 10 minutes."} — ce nom brut reste en mémoire transitoire côté navigateur le temps de la prévisualisation, il n'est jamais envoyé tel quel : voir étape suivante.
2
Scan de risques local (avant tout appel IA)
Chaque échange passe par 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.
3
Appel IA de filtrage
Le prompt demande à l'IA d'identifier les échanges sans valeur opérationnelle : salutations, confirmations vides ("d'accord", "ok"), conversations sur l'outil, interjections isolées. L'IA retourne un tableau d'indices à marquer comme "bruit". Si l'IA échoue, aucun filtrage n'est appliqué (comportement sécurisé).
4
Intégration dans le journal
Les échanges retenus sont ajoutés au journal comme entrées INFO avec le préfixe [PRÉNOM I.] (ex : [MARIE L.]) — le nom complet du 'cue' est raccourci à ce moment-là, avant toute écriture dans le journal. Ces entrées sont reconnues par le système et séparées lors de la génération de CRs et synthèses.

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

1
Déclenchement — Admin → Documents → ✨ Analyser le plan blanc
Le bouton n'est visible que si un plan blanc a été uploadé dans la base documentaire. Un clic déclenche l'analyse. Accessible uniquement aux administrateurs.
2
Lecture du plan blanc en cache
Le backend lit 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).
3
Filtre réglementaire du contenu
Avant tout envoi à l'IA, le contenu lu à l'étape précédente passe par le filtre local de détection des numéros de téléphone (fixe, mobile, +33 — tous formats) : tout numéro détecté est automatiquement remplacé par [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).
4
Prompt envoyé à l'IA
L'IA reçoit le contenu du plan blanc filtré et des instructions strictes : identifier les services ou unités SPÉCIFIQUES à l'établissement, NE PAS inclure les services standard déjà couverts (Directeur, DSSI, Médecin, RH, Logistique, Communication, Qualité, SI, Pharmacien), générer pour chaque service : id, nom, tab_label (max 10 caractères), emoji, couleur hex, 8-10 actions concrètes de gestion de crise.
5
Réponse IA — JSON structuré
L'IA retourne un tableau JSON de fiches : [{"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.
6
Preview éditable
Les fiches proposées s'affichent dans un panneau de prévisualisation. Pour chaque fiche : modification du nom du service, suppression d'actions individuelles, ajout d'actions manuelles, suppression complète de la fiche. Aucune modification n'est encore sauvegardée à cette étape.
7
Validation et sauvegarde
Le bouton "💾 Sauvegarder ces fiches" envoie les fiches validées au backend qui les ajoute dans 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.
8
Suppression des fiches personnalisées
Le bouton "🗑 Supprimer les fiches personnalisées" (visible si des fiches IA existent) supprime uniquement les fiches générées depuis le plan blanc (source: "plan_blanc"). Les fiches standard ne sont jamais affectées.
⚠️ Si le plan blanc n'est pas encore uploadé, le bouton n'apparaît pas. Rappeler au client lors de l'onboarding d'uploader son plan blanc le plus tôt possible — c'est ce qui rend toutes les fonctionnalités IA pertinentes pour son contexte.

🔒 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

FournisseurSiègeDPA RGPDEntraînement des modèlesConservation des données
Mistral AI (par défaut)France (UE)OuiNon (contractuel)Données effacées après traitement — aucun transfert hors UE
Groq (au choix)USAOui (CCT)Non (contractuel)Données effacées après traitement
Anthropic (au choix)USAOui (CCT)Non (contractuel)Données effacées après traitement
Microsoft Copilot (au choix)UE / tenant clientOui (DPA Microsoft)Non (contractuel)Données dans le tenant M365 du client — politique de rétention du client
⚠️ Transfert hors UE : seuls Groq et Anthropic sont américains — leur usage est encadré par des Clauses Contractuelles Types (CCT) conformément au RGPD. Mistral AI (fournisseur par défaut) traite les données intégralement en UE, sans transfert hors UE et donc sans recours nécessaire aux CCT. Si un client a une contrainte absolue de souveraineté des données, l'option IA peut être désactivée depuis l'administration.

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 choisieType de tenant crééLimite licences d'accès
🏥 1 à 3 périmètres établissement (max 3 par tenant établissement)etablissement20 licences d'accès max (tenant, tous périmètres confondus)
🗺️ Périmètre régionalregional20 licences d'accès max
🏢 Périmètre groupe / nationalgroupe20 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_perimetres inscrits dans le tenant.json du nouveau tenant
💡 Limite de licences d'accès — quand un administrateur client tente d'enregistrer une liste de membres (coordinateurs, membres, invités confondus) dépassant la limite souscrite, le système renvoie une erreur explicite : "Limite atteinte : votre offre inclut N licences d'accès maximum. Contactez-nous pour ajouter un pack +5 licences d'accès (+195 € HT/an)." Le dépassement est techniquement bloqué.

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

  1. 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.
  2. 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.
  3. Provisionnement — déclenché uniquement par ce clic de validation : le tenant est alors créé (URL personnalisée, identifiants admin, DNS)
  4. 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
  5. 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)

ÉtapeDescription
1. Nom établissementAdmin → ÉtablissementNom, adresse, FINESS — utilisés dans les templates de communication
2. Types de criseAdmin → Types de criseDéfinir les périmètres : CLINIQUE, EHPAD, HAD… avec couleur et membres associés
3. WhatsAppAdmin → WhatsAppScanner le QR code avec le téléphone du compte WhatsApp dédié
4. UtilisateursAdmin → UtilisateursAjouter 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 blancAdmin → DocumentsUploader le plan blanc PDF + fiches réflexes
6. SMTP (optionnel)Admin → SMTPConfigurer le serveur email de l'établissement pour que les emails viennent d'une adresse connue
7. Mots de passe d'accèsAdmin → 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.

ChampDescription
Nom du tenantNom affiché (ex : "Territoire Occitanie")
SlugIdentifiant court DNS (ex : occitanieoccitanie.crise.ifclubs.fr)
CouleurCouleur d'interface du tenant (hex)
Mot de passe adminMot de passe admin initial — les identifiants sont affichés à la création
💡 Après création, le DNS peut prendre quelques minutes à se propager. Le bouton "🔒 SSL" dans la ligne du nouveau tenant déclenche ensuite le certificat Let's Encrypt via certbot.

⚙️ Ce que peut configurer l'administrateur client

Onglet AdminCe qu'on y configureUtilisé par l'IA
👥 UtilisateursListe 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
📞 ContactsAnnuaire 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
💬 WhatsAppConfiguration du compte WhatsApp + QR code de connexion
✈️ TelegramConfiguration du bot Telegram
🏢 ÉtablissementNom, adresse, FINESS — utilisés dans les templates et rapports✅ Nom et type d'établissement inclus dans le contexte de chaque prompt
🚨 Types de crisePérimètres de crise (CLINIQUE, EHPAD…) avec label, couleur, icône✅ Type de crise = paramètre central de tous les prompts IA
📮 SMTPServeur email sortant de l'établissement
📄 DocumentsUpload et gestion du plan blanc et des fiches réflexes✅ Plan blanc analysé pour générer les fiches de mission personnalisées
🧠 ApprentissageVisualisation et validation des RETEX générés par l'IA✅ RETEX validés réinjectés dans les conseils des crises similaires futures
🔗 TeamsConnexion tenant Teams (transcriptions automatiques) + lien de réunion✅ Transcriptions intégrées dans le contexte des CRs et synthèses
🛡️ RGPDGestion de la rétention des données (5 ans par défaut) + purge manuelle
🔑 AbonnementStatut de l'abonnement, dates, email de facturation
🗺️ NouveautésFonctionnalité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
🔒 L'invité est en lecture quasi-nulle par conception — au-delà du filtrage d'affichage (le frontend ne montre que les entrées de type DÉCISION), le serveur refuse silencieusement toute tentative d'écriture envoyée par une session Invité (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.
🔄 Liste dynamique pour les crises actives (depuis le 2026-07-07) — pendant qu'une crise est active, la liste des personnes proposées dans le badge "Qui êtes-vous ?" et le bandeau de présence est relue en direct depuis la fiche Membres à jour : un ajout ou une suppression de membre en cours de crise est reflété immédiatement. Une fois la crise close, la liste reste figée telle qu'elle était à l'ouverture, pour préserver la traçabilité historique de qui était réellement joignable pendant l'événement.

🔐 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-totp pour le mode 3, équivalent reset-pin pour 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/start génère un secret temporaire et un QR code (qrcode, même mécanisme que le QR WhatsApp) sans rien persister, puis POST /api/auth/totp/enroll/confirm vérifie le premier code réel avant de sauvegarder le secret. Secret chiffré au repos (AES-256-GCM, clé TOTP_ENC_KEY propre à 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.
🔒 Verrouillage anti-usurpation identique en modes 2 et 3 — dans les deux cas, une fois connecté, l'identité vérifiée serveur est mémorisée en session (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é.
👤 Badge nom dans l'en-tête — en modes 2 et 3, le nom de l'utilisateur connecté (rôle + nom) s'affiche automatiquement dans l'en-tête, aussi bien sur le journal d'une crise que sur le dashboard de liste des crises, dès la connexion réussie — sans action supplémentaire. En mode 1, rien ne s'affiche à cet endroit puisqu'il n'y a pas d'identité individuelle vérifiée.

📡 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).

📧 Email à la réception (depuis le 2026-07-11) — dès qu'un message INFO ou ALERTE arrive du régional, un email est envoyé immédiatement à toutes les personnes cochées 📡 Région et disposant d'une adresse email renseignée dans l'onglet Utilisateurs, en plus de la pastille clignotante dans l'interface. Cet envoi est indépendant de l'état d'une éventuelle crise en cours dans l'établissement (y compris en Mode Formation) : ce n'est pas une notification liée à une crise locale, mais un accusé de réception d'un canal hiérarchique.
🔕 Aucune relance automatique — l'email et la pastille ne sont envoyés/activés qu'une seule fois, à la réception. Si la personne désignée ne consulte pas le message, il n'est ni renvoyé, ni transmis à quelqu'un d'autre. C'est un choix délibéré : à elle de décider si et comment transmettre l'information en interne. L'identité de la personne connectée repose sur le même mécanisme auto-déclaré que le badge "Qui êtes-vous ?" (ce n'est pas une authentification individuelle forte, puisque Coordinateur/Membre/Invité restent des identifiants partagés).

✍️ 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
🔒 La lecture intégrale du journal (ALERTE/RÉUNION) reste un filtrage côté affichage, comme pour le rôle Invité (le journal complet est transmis au navigateur, seul l'onglet visible en est filtré). En revanche, l'accès aux 4 fonctions IA ci-dessus est vérifié côté serveur : chaque appel API correspondant exige soit le mot de passe Coordinateur, soit le mot de passe Membre/Invité accompagné du jeton Secrétaire valide pour la crise actuellement ouverte — une personne sans ce jeton, ou porteuse du jeton d'une crise déjà close, reçoit une erreur 401 même en contournant l'interface.

Environnements de démonstration

Démo ÉtablissementDémo RégionalDémo National
URLdemo.crise.ifclubs.frdemo-regional.crise.ifclubs.frdemo-groupe.crise.ifclubs.fr
Répertoire/opt/crise-demo//opt/crise-demo-regional//opt/crise-demo-groupe/
Port601260196020
ButDémonstration client établissementDémonstration client régionalDémonstration client national/groupe
DonnéesFictives — scénario prêt à jouerFictives — scénario prêt à jouerFictives — scénario prêt à jouer
IAConseils pré-écrits (pas d'appel IA réel)Conseils pré-écritsConseils pré-écrits
RéinitialisationQuotidienne — 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 jourAucune — 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

FormulePrix HT/anLicences d'accès incluses
🏥 1 tenant établissement — 1 périmètre1 990 €Jusqu'à 20 (tenant)
🏥 1 périmètre supplémentaire — max de 2 périmètres supplémentaires par tenant établissement1 155 €
📦 1 pack de 5 licences d'accès supplémentaires — cumulable, ajouté à n'importe quelle formule établissement195 €+5 licences d'accès par pack
🗺️ 1 périmètre régional — dashboard territoire + IA coordination régionale (2ᵉ niveau)Sur devisJusqu'à 20
🏢 1 périmètre groupe — dashboard national + IA coordination nationale (3ᵉ niveau)Sur devisJusqu'à 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.

🔒 Limites de licences d'accès techniquement appliquées — la limite 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.

FournisseurTarifCas d'usage
🇫🇷 Mistral AIInclusPar défaut — hébergement France/UE, satisfait la grande majorité des usages
🤖 Groq (Llama 3.3)InclusAu choix du client — vitesse maximale
✨ Anthropic Claude HaikuInclusAu choix du client — analyses plus riches, RETEX approfondi
☁️ Azure OpenAI (Microsoft Copilot)Inclus — sur abonnement clientAu 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

Comment ouvrir une crise ?
Depuis l'écran d'accueil après connexion : 1. Sélectionner le type de périmètre (CLINIQUE, EHPAD…), 2. Saisir le nom de la crise, 3. Sélectionner les membres de la cellule, 4. Cliquer sur "OUVRIR LA CRISE". Tous les membres sélectionnés reçoivent immédiatement un email et un message WhatsApp.
Je n'arrive pas à me connecter — que faire ?
Vérifier : 1. L'identifiant et le mot de passe (attention aux majuscules), 2. L'URL correcte (chaque établissement a sa propre URL), 3. La connexion internet du poste. Si le problème persiste, contacter le support à contact@ifclubs.fr.
Comment ajouter un membre qui n'est pas dans la liste ?
Aucune saisie libre d'adresse email n'est possible — toutes les notifications passent uniquement par des comptes utilisateurs enregistrés. Lors de l'ouverture d'une crise, utiliser le sélecteur "Ajouter un autre utilisateur enregistré" en bas du panneau membres : il liste tous les comptes existants qui n'apparaissent pas déjà dans les cases à cocher pré-filtrées pour ce type de crise. Si la personne n'a pas encore de compte, la créer d'abord dans Admin → Utilisateurs pour qu'elle apparaisse ensuite dans ce sélecteur.
Comment retrouver une crise passée ?
Depuis l'écran d'accueil → bouton "📊 Tableau de bord". Toutes les crises passées sont listées avec leur type, nom, durée et date. Cliquer sur une crise pour voir son journal complet et accéder au rapport de fin et au RETEX.
Peut-on utiliser Réactis depuis un smartphone ?
Oui. L'interface est entièrement responsive. Sur mobile, l'écran est organisé en onglets (Saisie / Journal / Pilotage) pour éviter le défilement. Aucune application à installer — utiliser directement le navigateur (Chrome, Safari, Firefox).
Les conseils IA ne s'affichent pas — que se passe-t-il ?
Causes possibles : 1. Les services IA sélectionnés sont temporairement indisponibles (rare), 2. Tous les conseils disponibles ont déjà été affichés ou traités, 3. La clé API n'est plus valide (vérifier Admin → Paramètres IA). En cas d'indisponibilité temporaire, les conseils réapparaissent lors du prochain clic.
Comment exporter le journal de crise ?
Deux options disponibles directement depuis la plateforme :

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ômeCause probableSolution
Page blanche ou erreur au chargementCache navigateurVider le cache (Ctrl+Shift+R) ou utiliser la navigation privée
Emails de crise non reçusSMTP mal configuré ou spamVérifier Admin → SMTP ; vérifier le dossier spam des destinataires
WhatsApp déconnectéSession expirée sur le téléphoneAdmin → WhatsApp → Rescanner le QR code
IA trop lente ou timeoutFournisseur actif surchargé (Mistral, Groq…)Réessayer dans 30 secondes ; peut avoir des pics ponctuels
Rapport de fin vide ou erreurJournal 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 conseilsRETEX non validé par l'adminAdmin → Apprentissage → Valider le RETEX généré
L'utilisateur voit "Session expirée"Inactivité prolongéeSe reconnecter ; la session est sauvegardée localement — la crise n'est pas perdue
La dictée vocale ne fonctionne pasPas d'autorisation microphoneAutoriser 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
🚨 En cas de panne totale de la plateforme pour un client en situation de crise réelle : appeler directement la consultante. Ne pas attendre l'email.

🔄 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

1
Développement sur Staging
la fonctionnalité est développée sur le staging concerné (établissement, régional ou national) uniquement — jamais directement en production. Chaque modification est enregistrée dans git (un commit par feature) et inscrite dans la liste des releases avec le statut ⚗️ EN COURS. Exception : les modifications sur les données de démonstration n'ont pas besoin de validation (tag DEMO).
2
Validation par la consultante
la consultante teste la fonctionnalité sur staging et clique "✅ Je valide" directement sur la carte dans admin.crise.ifclubs.fr. La feature passe automatiquement en statut ✅ PRÊTE avec la date de validation. Si un problème est identifié, la feature reste en cours et est corrigée par le développeur.
3
Déploiement sélectif en production
Dans la section Release de admin.crise.ifclubs.fr, un bandeau vert apparaît pour chaque feature validée par la consultante. le développeur coche uniquement les features qu'il souhaite déployer et clique "🚀 Déployer en prod". Le système applique chirurgicalement le patch git de chaque feature sélectionnée sur la production, puis redémarre les services clients. Une feature non cochée, ou non validée par la consultante, ne peut pas être déployée.
4
Confirmation et suivi
Les features déployées passent en statut 🚀 DÉPLOYÉ avec la date. L'historique des déploiements est conservé dans RELEASE.json. En cas de problème après déploiement, la section "⚙️ Déploiement & Rollback" du panneau master admin permet de revenir en arrière en un clic — un backup automatique est créé avant chaque déploiement.

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
ÉtablissementsApplique 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
GroupeCopie crise-staging-groupe → crise-groupe prod (port 6016)Restaure un backup groupe (timestamp ou dernier backup)
⚠️ Le rollback établissement remet tout le code prod à l'état du backup précédent — pas seulement une feature. Il ne remonte que d'un cran (le dernier déploiement). À n'utiliser qu'en cas de bug critique immédiat, quand la prod est cassée et qu'il faut revenir en arrière en urgence.

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 :

1
Identifier précisément les lignes problématiques
Décrire le problème au développeur avec le comportement constaté. Il identifie quelle feature (et quelles lignes de code) est responsable, en comparant le comportement actuel avec l'historique RELEASE.json.
2
Corriger en staging
Le correctif est développé et testé sur staging (staging.crise.ifclubs.fr) — jamais directement en production. Le correctif peut annuler la feature entière ou juste ajuster le comportement fautif.
3
Revalider via le circuit normal
Le correctif est inscrit dans RELEASE.json avec un statut staging, la consultante le valide via le bouton "✅ Je valide" comme pour n'importe quelle feature.
4
Déployer
le développeur clique "🚀 Déployer" — seul le correctif validé est appliqué, sans toucher aux autres features déployées depuis.
✅ Cette approche est plus sûre qu'un rollback multi-niveaux : elle ne risque pas d'annuler des fonctionnalités saines déployées entre-temps, et elle passe par le même circuit de validation que toute autre modification.

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 ÉtablissementStaging RégionalStaging NationalProduction
URLstaging.crise.ifclubs.frregional-staging.crise.ifclubs.frgroupe-staging.crise.ifclubs.fr*.crise.ifclubs.fr
Répertoire/opt/crise-staging//opt/crise-staging-regional//opt/crise-staging-groupe//opt/crise/ etc.
Port6014601760156008 / 6016 / …
ButTests établissementTests régionalTests national/groupeClients réels
DonnéesFictivesFictivesFictivesDonnées réelles clients
IAGroq (gratuit)Groq (gratuit)Groq (gratuit)Mistral AI par défaut à la création d'un tenant — selon choix client
⚠️ Ce défaut « Mistral » ne s'applique qu'aux tenants créés via le flux d'admin qui fixe explicitement 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.
✅ La règle absolue : aucune modification de code n'est jamais faite directement en production. Tout passe par staging → validation → déploiement contrôlé. En cas de bug en production, le bouton Rollback dans le master admin permet de revenir en arrière immédiatement.

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

💡 Ce que ça résout : aujourd'hui, un directeur groupe apprend qu'un établissement est en crise par une remontée de coups de téléphone hiérarchiques. Avec Réactis, l'information se propage automatiquement par effet boule de neige : chaque cellule de crise alimente la cellule supérieure sans action supplémentaire des équipes terrain.
🎚️ Seuil d'alerte (2026-07-21, régional uniquement) : le directeur régional configure depuis Admin → Alertes ouverture de crise un seuil (par défaut 1) — les canaux email/WhatsApp/Teams/Telegram/SMS ne se déclenchent qu'à partir de N établissements simultanément en crise, pour ne recevoir que les alertes qui justifient une intervention régionale. Le message hiérarchique dans le tableau de bord régional, lui, reste toujours poussé immédiatement quel que soit le seuil. 🔒 Le tenant groupe (national) n'a aujourd'hui aucun canal d'alerte propre (pas d'email/WhatsApp/Teams/Telegram/SMS, pas de route /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 :

InformationNominalEn crise
Statut🟢 NOMINAL🔴 EN CRISE (clignotant)
Nom de la criseAffiché
Durée⏱ 2h 14min
Alertes activesCompteur rouge
Actions en cours / résoluesCompteurs
Derniers CRs de réunion IA3 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.

🔒 Isolation (2026-07-21) : ni le tenant régional ni le tenant groupe (national) ne proposent de bouton d'accès direct à la cellule de crise d'un établissement — seules les remontées (statuts, comptes-rendus, indicateurs) sont consultables depuis ces niveaux. C'est ce niveau de pilotage qui intéresse un DG régional, un Directeur Qualité groupe ou un DG national, jamais l'accès opérationnel à un établissement.

📊 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 client dédiée — chaque tenant régional expose désormais sa propre page de documentation client à /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.
💡 "Votre salle de direction dispose d'un écran permanent qui vous montre en temps réel uniquement ce qui brûle — quand tout va bien l'écran est vert, dès qu'une crise démarre votre établissement apparaît immédiatement. Vous cliquez dessus pour avoir l'état complet sans quitter l'écran de supervision. Et si la salle est bien éclairée, un simple clic passe en mode clair pour une meilleure lisibilité."

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.

1
Niveau établissement — IA opérationnelle
L'IA de chaque établissement analyse la crise en cours en temps réel : compte rendu d'étape, synthèse de situation, conseils tactiques, RETEX. Ces synthèses structurées (~800 mots) sont la matière première des niveaux supérieurs.
2
Niveau régional — IA de coordination territoriale
Le tenant régional collecte les CRs de ses établissements membres. L'IA produit une synthèse régionale : quels établissements sont en crise, quelles ressources mutualiser sur le territoire, quelles décisions prendre au niveau direction régionale. Ce n'est pas un résumé — c'est une analyse de coordination inter-sites à l'échelle du territoire.
3
Niveau groupe — IA stratégique nationale
Le tenant groupe ne récupère pas les données brutes des établissements — il récupère les synthèses régionales déjà produites. L'IA passe une troisième fois et produit une vision stratégique : tendances cross-territoires, alertes systémiques, décisions de niveau DG, communication groupe. C'est ce qu'un vrai DG fait mentalement avec ses directeurs régionaux — Réactis l'automatise en quelques secondes.
⚠️ Si un établissement n'a pas encore généré de compte rendu d'étape, l'IA régionale travaille sur les métriques uniquement (alertes, durée, actions). Rappeler aux clients l'importance de générer des CRs pendant la crise.

⏱️ 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.

1
Niveau établissement
Le dashboard de l'établissement se met à jour automatiquement toutes les 30 secondes (valeur fixe dans le code frontend, non paramétrable). Ce rafraîchissement contrôle uniquement l'affichage temps réel du journal — la génération IA (CR, synthèse) est déclenchée manuellement par les opérateurs.
2
Niveau régional
Le dashboard régional appelle /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.
3
Niveau groupe
Le dashboard groupe appelle /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ètreValeur actuelleModifiable par le client ?Effet
refresh_interval (étab)30 s (fixe)Non — codé en dur, aucune UICadence 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 serveurCadence 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 serveurCadence de polling des régions (ou étabs directs) par le groupe
💡 Latence maximale en cascade : dans le pire cas, une information saisie dans un établissement met jusqu'à (refresh étab + refresh régional + refresh groupe) secondes pour remonter au groupe — soit environ 90 secondes avec les valeurs actuelles, fixes. Ces intervalles ne sont pas ajustables à la demande, y compris en crise active.
⚠️ Dégradation en cascade : la qualité de l'information au niveau supérieur dépend directement des actions réalisées au niveau inférieur. Si les opérateurs d'un établissement ne génèrent pas de compte rendu d'étape ou ne déclenchent pas de synthèse IA, le niveau régional ne dispose que des métriques brutes (alertes, actions ouvertes, durée). Si le directeur régional ne génère pas de synthèse de coordination, le niveau groupe reçoit des données vides pour cette région. La rigueur de saisie et de génération IA à chaque niveau conditionne la pertinence de la vision consolidée au sommet.

📨 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

ComposantRouteAuth
Régional — envoiPOST /api/messagesrequireAdmin (bcrypt)
Établissement — réception pushPOST /api/hierarchy-messageGROUPE_KEY
Établissement — lectureGET /api/hierarchy-messagesRôle dérivé du mot de passe fourni (Coordinateur/Membre/Invité), comparé à tenant.hierarchy_messages_roles — défaut : Coordinateur seul
Suppression cascadéeDELETE /api/messages/:idrequireAdmin → push DELETE aux établissements
💡 Le modèle est push à l'écriture (pas pull périodique) : dès qu'un directeur régional envoie un message, il est immédiatement livré dans le hierarchy_messages.json de chaque établissement. Pas de délai de polling.
🔒 Par défaut, seul le Coordinateur accède aux messages hiérarchiques, avec ciblage individuel par membre (notif_regional). L'accès Membre/Invité est désactivé par défaut et doit être activé explicitement par le Coordinateur ; une fois activé, la visibilité est de niveau rôle — pas de ciblage individuel pour ces deux rôles, faute d'identité vérifiée côté serveur.

🔔 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é.

⚠️ La propagation est limitée au premier niveau supérieur uniquement : un établissement notifie son régional, mais PAS le groupe national. Chaque niveau décide librement de re-propager vers son propre supérieur.

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

CanalConfiguration requiseToggle
📧 EmailSMTP (host, port, user, pass, from) + liste de destinatairesemail_enabled (actif par défaut)
💬 WhatsAppConnexion WA + ID des groupes destinataireswhatsapp_enabled
🔵 TeamsURL Incoming Webhook Teamsteams_enabled
✈️ TelegramToken du bot + liste de chat IDstelegram_enabled
📱 SMSRien côté client — canal géré et facturé centralement par Réactis. Liste de numéros (+33…) via Membressms_enabled

Architecture technique

ComposantRouteAuth
Établissement — déclenchementPOST {regional_url}/api/internal/crisis-alertx-groupe-key (GROUPE_KEY)
Régional — réception + notificationsPOST /api/internal/crisis-alertGROUPE_KEY validé vs etablissements[]
Admin régional — lire configGET /api/admin/alert-settingsx-admin-password
Admin régional — sauvegarder configPOST /api/admin/alert-settingsx-admin-password
💡 La notification est fire-and-forget : l'établissement répond immédiatement à l'utilisateur sans attendre la confirmation des envois côté régional. En cas d'indisponibilité temporaire du régional, l'ouverture de crise se fait normalement — la notification est simplement perdue (pas de retry).

Prérequis

  • L'établissement doit être rattaché au régional (demande de rattachement acceptée) — le rattachement stocke la regional_url et le groupe_key dans link_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
Centralisation Scaleway effectuée (2026-07-08) — la clé API et le Project ID ne sont plus stockés/saisissables par tenant : ils sont lus depuis l'environnement du serveur (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 :

ComposanteTarifCe qu'elle apporte
Abonnements établissementsGrille standard × N sitesIA niveau 1 — CR, synthèse, RETEX par établissement
Licence Réactis RégionalSur devisDashboard territoire + mode TV + IA coordination régionale (2ᵉ niveau)
Licence Réactis GroupeSur devisDashboard national + mode TV + IA stratégique nationale — synthèse des régions (3ᵉ niveau)

Interlocuteurs clés par niveau

NiveauInterlocuteurPain point
ÉtablissementDirecteur d'établissement, Responsable qualitéTraçabilité HAS, rapport de crise, conformité
RégionalDirecteur régional / Directeur de territoireAucune visibilité sur ses établissements en crise — appels téléphoniques uniquement
GroupeDG groupe, Directeur des Risques, DG opérationsZé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

ComposantDétail
Processeur6 vCore
RAM8 Go
Stockage240 Go NVMe SSD
Bande passanteMutualisé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/deploy et /api/release/rollback (-groupe pour 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
💡 Les documents contractuels RGPD sont accessibles depuis le footer de toute page Réactis : CGV, DPA, CGU, RGPD, PSSI.

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

💡 Convention de déploiement : 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ètreValeur
NomTerritoire Nouvelle-Aquitaine
URLtna.crise.ifclubs.fr
Port6018
Servicecrise-tna.service
Données/opt/crise-tenants/tna/data/tenant.json
Mot de passe adminReactis2026!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 :

  1. Génération d'une GROUPE_KEY aléatoire (32 octets hex)
  2. Écriture de la clé dans le .env de l'établissement (GROUPE_KEY=xxx)
  3. Redémarrage du service de l'établissement
  4. Test de connexion /api/groupe/summary avec la clé
  5. Sauvegarde de l'établissement dans le tenant.json du régional
⚠️ L'établissement doit déjà être déployé et accessible depuis le serveur. Le formulaire régional ne crée pas l'établissement — il l'enregistre comme membre de la région.
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/.
📌 Nomenclature des répertoires : 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.