# Projet Secours — suivi

> Nom provisoire. Ce fichier fait foi. Dev App : projet 14 (tickets 356 à 366).

## But

Relier en temps réel le poste de secours (chef de poste / PC opérationnel), les
équipes sur le terrain et l'association, avec un format de bilan victime unique
pour toutes les associations. À terme, les pompiers et le SAMU (15) pourront
voir l'état des victimes en direct.

## Choix techniques (proposés, à valider)

- **Une seule application web**, avec plusieurs espaces : Équipier, Poste de
  commandement, Administration et, plus tard, Services d'urgence.
- **Laravel** (comme les autres projets) et **Laravel Reverb** pour le temps
  réel (WebSocket).
- **Leaflet + OpenStreetMap** pour la carte (gratuit).
- **Application installable (PWA)** : écran d'accueil du téléphone, GPS,
  notifications, fonctionnement sans réseau avec envoi dès le retour du
  réseau.
- **Données de santé** : hébergement HDS, chiffrement des données de la
  victime, journal de chaque action, durée de conservation et purge, export et
  effacement (RGPD), refus d'accès testés. Même démarche qu'ISO 27001 / HDS
  pour Alterna Socle.

## Les rôles

| Rôle | Connexion | Voit |
|---|---|---|
| Équipier (un téléphone et un PIN par personne) | code opération + PIN à 4 chiffres | le statut, les missions et les bilans de son équipe |
| Chef de poste / chef de dispositif | compte nominatif | tout le dispositif |
| Opérateur PC (délégation) | compte nominatif, désigné par le chef | tout le dispositif ; le chef reste informé |
| Administration de l'association | compte nominatif | dispositifs, historique, rapports |
| Services d'urgence (plus tard) | accès dédié | bilans des victimes en cours |

## Première version (V1) : le cœur en opération

1. **Connexion équipier** (ticket 357) : numéro d'opération + PIN personnel.
   Si son téléphone tombe en panne, l'équipier se reconnecte sur un autre
   téléphone avec le même PIN (l'ancienne connexion est fermée).
2. **Statuts** (358) : Libre / En intervention / Indisponible (motif : repas,
   pause, toilettes, autre). Position GPS envoyée régulièrement.
3. **Demandes de renfort** (359) : brancardage / évacuation, avis médical,
   matériel, renfort humain, chef de dispositif, **urgence vitale**, **forces
   de l'ordre**, **situation dangereuse**, autre. Voyant SOS sur la carte du
   PC. Le PC envoie une équipe : en glissant l'équipe sur l'alerte, ou depuis
   la notification. L'équipe reçoit l'alerte, l'accepte, et a un bouton
   « Y aller » qui ouvre le GPS du téléphone.
4. **Tableau de bord PC** (360) : heure, météo, nom du poste, compteurs (unités
   libres, en intervention, indisponibles, interventions en cours et au total,
   renforts en attente, victimes), notifications, carte en direct, liste des
   unités et de leur statut.
5. **Équipes** (361) : le chef crée les équipiers (nom, PIN) et les regroupe
   en équipes : nom, indicatif radio, type (binôme à pied, vélo, quad, moto,
   VPSP / ambulance, poste fixe, autre). **Sur la carte, une équipe = un seul
   point** (par exemple « Ambulance » pour ses 3 équipiers) ; sa position
   est celle du dernier équipier qui a envoyé la sienne. Le statut est celui
   de l'équipe, changé par n'importe lequel de ses membres.
6. **Main courante** (362) : chaque événement noté automatiquement, plus des
   ajouts à la main (« Appel au 15 pour l'ouverture du poste »…).
7. **Fiche bilan** (363), visible en direct par le PC. **Elle suit le
   référentiel national des premiers secours en équipe (PSE, ministère de
   l'Intérieur, DGSCGC)** ; vérifier la dernière version avant de la coder :
   - circonstances et identité sommaire (homme / femme / enfant, âge estimé) ;
   - **bilan d'urgence vitale** dans l'ordre : danger, hémorragie, conscience,
     ventilation, circulation, avec l'alerte « urgence vitale » ;
   - **bilan complémentaire** : bonhomme face / dos par zones (lésion : plaie,
     brûlure, déformation, douleur… et douleur de 0 à 10), plaintes,
     antécédents, traitements, allergies ;
   - **constantes horodatées** (plusieurs relevés) : pouls, fréquence
     respiratoire, SpO2, tension, température, glycémie, score de Glasgow ;
   - **gestes effectués** (liste à cocher et heure) ;
   - **régulation** : appel au 15 (heure), avis médical (texte) ;
   - **devenir** : laissée sur place / repartie par ses propres moyens,
     évacuée par l'association, par les pompiers, par le SMUR / SAMU, par une
     ambulance privée, refus de prise en charge, décès ;
   - identité complète remplie plus tard ; le PC complète la fiche à l'arrivée
     au poste.
8. **Suivi à la main** (367) : équipes sans téléphone ou avec un téléphone
   trop ancien. Le PC change leur statut, les place sur la carte et note leurs
   demandes de renfort d'après la radio ou le téléphone ; tout est noté dans
   la main courante avec « par radio ».
9. **Protection des données de santé** (364) : à faire en même temps que le
   reste, pas après.

## Après la V1

- Administration des dispositifs, historique, rapport de fin (« l'an prochain,
  prévoir… »), export PDF des bilans et de la main courante (365).
- Accès pompiers / SAMU (366).
- Plusieurs associations sur la même plateforme (format commun).

## Décisions de Loïc

- **2026-10-11** : fiche bilan selon le référentiel national (PSE) ; un PIN et
  un téléphone par équipier, regroupés en équipes (un seul point sur la
  carte) ; le PC suit à la main les équipes sans téléphone et ajoute des
  lignes à la main courante.
- **2026-10-11** : conservation **un mois, réglable**, pendant la phase de
  tests (avant la certification). Les documents à garder sont imprimés et
  archivés sur papier, comme avant.
- **2026-10-12** : toutes les cartes utilisent le **Plan IGN** de la
  Géoplateforme (gratuit, sans clé, hébergé en France), avec un bouton
  « Plan / Vue aérienne » ; en bas à droite, seulement « © IGN –
  Géoplateforme », sans lien (ticket 466). Règle commune à tous les projets.

## Étape 1 — livrée le 2026-10-11, en attente de validation

Connexion des équipiers, équipes, statuts, carte en direct (tickets 357, 358,
360, 361 ; 364 en partie).

- **Outils** : Laravel 13, Inertia + Vue 3, Tailwind 4, Laravel Reverb
  (temps réel), Leaflet + OpenStreetMap, météo Open-Meteo (gratuite, sans clé).
- **Accueil** : Équipier / Poste de commandement (Administration et Services
  d'urgence annoncés « bientôt »).
- **Poste de commandement** : compte nominatif (e-mail + mot de passe).
  Ouvrir un dispositif (nom, lieu, point sur la carte) : un numéro
  d'opération est donné (ex. 2026-1042). Tableau de bord : heure, météo,
  compteurs, carte avec un point par équipe (grisé si la position a plus de
  5 min), liste des unités, « En direct » ou « Mise à jour toutes les 20 s »
  si le temps réel est coupé. Fermer le dispositif déconnecte tout le monde.
- **Équipes** : créer / modifier / supprimer une équipe (nom, indicatif,
  type) ; ajouter un équipier (nom, équipe, code choisi ou tiré au hasard),
  le changer d'équipe, lui donner un nouveau code, le déconnecter, le
  retirer. **Le code n'est montré qu'une fois** (il n'est pas gardé en clair).
- **Équipier** : numéro d'opération + code sur un clavier à chiffres ;
  statut de l'équipe en une touche (motif pour « Indisponible ») ; GPS
  envoyé toutes les 15 s ou dès 25 m ; « Garder l'écran allumé » ; liste de
  son équipe (connecté / hors ligne). Un second téléphone avec le même code
  déconnecte le premier.
- **Sécurité** : nom de l'équipier chiffré, code en empreinte (HMAC), jeton
  de téléphone en empreinte, seule la dernière position gardée, essais de
  code limités (5 par minute par téléphone, 30 par 10 min par dispositif),
  journal de chaque geste, cloisonnement par association (y compris le
  canal temps réel), protections du navigateur (CSP…). 33 tests.
- **Limites connues** : un site web ne peut pas envoyer la position quand le
  téléphone est en veille (d'où « Garder l'écran allumé ») ; une vraie
  application installée le pourrait plus tard. Pas encore de fonctionnement
  sans réseau ni d'application installable (PWA).

### Reste à faire pour la protection des données (364)

- ~~Durée de conservation et purge~~ : fait le 2026-10-11. Chaque nuit à
  3 h 30, `secours:effacer` efface les dispositifs fermés depuis plus de
  `SECOURS_CONSERVATION_JOURS` jours (30 par défaut) avec leurs équipes et
  équipiers ; le journal (sans donnée de santé) est gardé
  `SECOURS_JOURNAL_JOURS` jours (365). `--simulation` pour voir sans effacer.
  La date d'effacement s'affiche sur un dispositif fermé. En production, il
  faudra la tâche planifiée `php artisan schedule:run` chaque minute.
- **Impression** : avant tout usage réel, la main courante (étape 2) et les
  bilans (étape 3) devront pouvoir s'imprimer, puisque le papier sert
  d'archive.
- Export et effacement RGPD ; double authentification des comptes PC ;
  hébergement HDS.

## Étape 2 — livrée le 2026-10-12, en attente de validation

Renforts, main courante, suivi à la main par radio (tickets 359, 362, 367 ;
360 complété).

- **Demande de renfort (équipier)** : bouton SOS → type en une touche
  (urgence vitale, brancardage / évacuation, avis médical, matériel, humain,
  chef de dispositif sur place, forces de l'ordre, situation dangereuse,
  autre) → précision facultative → Envoyer. La position du téléphone part
  avec. L'équipe passe en intervention si elle était libre. Elle suit sa
  demande (« en attente du PC », « Ambulance arrive ») et peut l'annuler.
- **PC** : voyant SOS qui clignote sur la carte (orange une fois une équipe
  envoyée, avec un trait pointillé depuis cette équipe), son et alerte en
  haut de la colonne de droite (urgences vitales d'abord). Envoyer une
  équipe en la glissant de la liste sur l'alerte, ou en la choisissant.
  Changer d'équipe, clôturer, annuler.
- **Équipe envoyée** : la mission arrive sur ses téléphones (son,
  vibration) avec « Reçu, on part », « Y aller (GPS) » (itinéraire Google
  Maps) puis « Mission terminée » (l'équipe redevient libre).
- **Main courante** : tout s'y écrit seul (ouverture, statuts, renforts,
  fermeture), avec l'heure et l'auteur (nom du compte, ou nom de l'équipe).
  Le PC ajoute des lignes à la main, avec l'heure réelle de l'appel (pas
  avant l'ouverture, pas dans le futur) et l'équipe concernée. Une ligne ne
  se modifie pas : on corrige par une nouvelle ligne. Onglet « Main
  courante » : tableau complet, filtre, **impression** (en-tête du
  dispositif, date d'impression).
- **Suivi à la main** : clic sur une équipe dans la liste → statut (et
  motif), « Placer sur la carte », « Renfort demandé par radio ». Une équipe
  sans équipier connecté porte « 📻 radio ». Tout est noté « (par radio) ».
- **Compteurs** : interventions en cours et au total, renforts en attente /
  en cours.
- **Temps réel côté équipier** : chaque équipe a son canal ; un téléphone ne
  peut écouter que celui de son équipe.
- **Données** : précision des demandes et lignes de main courante chiffrées ;
  effacées avec le dispositif. 62 tests.
- **Local en https** : `https://projet-secours.test` (certificat de Laragon,
  aussi pour Reverb) : le GPS du navigateur exige le https.

## Étape 3 — livrée le 2026-10-12, en attente de validation

La fiche bilan de la victime, suivie en direct (ticket 363 ; 360 complété).

- **Référentiel** : recommandations PSE 2024 du ministère de l'Intérieur
  (DGSCGC), fiches 02AC01 et 02PR01 à 02PR06 (édition 12-2022 / 12-2023) :
  bilan en **4 regards**, surveillance, transmission. Valeurs normales
  reprises des fiches 02FT03 / 02FT04 (FR, FC par âge), SpO2 94–98 %, EVDA,
  échelle numérique de la douleur, FAST. Le texte du référentiel est la
  référence de `app/Bilans/Fiche.php`.
- **Téléphone** : « Nouveau bilan victime » → fiche numérotée (Victime
  n° 1, 2…), position GPS, équipe passée en intervention. 8 étapes :
  situation (1er regard + victime ; identité « peut attendre »), urgence
  vitale (2e regard : hémorragie, voies aériennes, réaction, respiration,
  plainte principale, rachis ; alerte « arrêt cardiaque possible »),
  fonctions vitales (3e regard : respiratoire, circulatoire, neurologique,
  EVDA, pupilles…), lésions (bonhomme face / dos, 17 zones, type, douleur
  0–10), interrogatoire (mécanisme, plaintes, MHTA, FAST), constantes
  (relevés successifs, valeurs hors normes en rouge selon l'âge), gestes
  (liste à toucher, heure notée), transmission et devenir. Tout s'enregistre
  seul ; réseau coupé → nouvel essai. Détresse vitale → bandeau rouge et
  bouton « Demander un renfort (urgence vitale) ». « Terminer » exige le
  devenir.
- **PC** : onglet « Bilans » (toutes les victimes, résumé, détresse vitale
  en rouge, « Victime arrivée au poste ») ; fiche complète sur une page,
  mise à jour en direct, **modifiable par le PC même terminée** (arrivée au
  poste) ; **impression** (fiche papier avec signatures). Tableau de bord :
  compteur de victimes, fiches en cours résumées dans « Alertes », repère
  « V1 » sur la carte, signal sonore à une détresse vitale.
- **Main courante** : prise en charge, détresse vitale signalée, appel au 15
  (à son heure), bilan terminé et devenir.
- **Données de santé** : toute la fiche est chiffrée (une seule colonne) ;
  le message temps réel ne contient aucune donnée de santé (numéro,
  version, urgence oui/non) ; chaque consultation d'une fiche au PC est
  notée au journal ; une équipe ne voit que ses fiches en cours ; effacées
  avec le dispositif. 77 tests.
- **Corrigé en local** : erreurs 500 sous Apache quand plusieurs requêtes
  arrivent ensemble (`Env::disablePutenv()` dans `bootstrap/app.php`) ;
  SQLite qui se verrouillait (attente 5 s, verrou pris dès le début ; pas
  de mode WAL, incompatible avec `migrate:fresh`). Base locale déplacée
  dans `database/local.sqlite` (l'ancien `database.sqlite`, abîmé, est
  encore tenu ouvert par Apache : à supprimer après un redémarrage de
  Laragon, avec ses fichiers `-wal` et `-shm`).

### Choix faits pour Loïc (à confirmer)

- Ouvrir un bilan passe l'équipe en intervention.
- Une fiche terminée ne se rouvre plus sur le téléphone ; le PC peut
  toujours la compléter.
- Un relevé de constantes ne se modifie pas : on en ajoute un nouveau.

## Journal

- **2026-10-11** : projet créé (dossier, Dev App projet 14, tickets 356–366).
  Plan et maquettes de la V1 proposés (`maquettes/index.html`), en attente de
  validation.
- **2026-10-11** : réponses de Loïc intégrées (voir Décisions), ticket 367
  ajouté, maquettes mises à jour (équipiers par équipe, suivi radio).
- **2026-10-11** : étape 1 livrée (voir ci-dessus), en test.
- **2026-10-11** : effacement automatique après un mois (réglable), 40 tests.
- **2026-10-12** : étape 1 validée par Loïc (commit `a51804b`) ; étape 2 livrée, en test.
- **2026-10-12** : tickets de l'étape 1 passés en Terminé par Loïc ; étape 2 commitée (`9888b6d`) ; étape 3 livrée, en test.
- **2026-10-12** : cartes passées au Plan IGN avec la vue aérienne au choix
  (`resources/js/Outils/fondDeCarte.js`, règle de sécurité `img-src`
  ouverte à `data.geopf.fr`), ticket 466, en test ; 77 tests passent.
