Invariants
Cette page est la cible des liens produits par le composant <InvariantBadge id="INV-XXX" />. Chaque invariant a un titre H3 avec un anchor lowercased identique à l'identifiant (INV-S01 devient inv-s01).
Pour une vue d'ensemble par famille, voir Introduction Invariants.
Sécurité (S)
inv-s01
Idéation suicidaire détectée, alerte rouge dispatchée en moins de 5 secondes. Mesure : timestamp événement détection vers timestamp alert.created.
inv-s02
Aucun ticket silencieux hors N3. Toute alerte génère un retour vocal au senior et une trace dans alert_trail.
inv-s03
Cascade aidants 3 niveaux maximum, fallback JUWA support N+1 systématique.
inv-s04
Tout signal AVC suspecté gated derrière PO-AVC-VALIDATION-MEDICALE tant que la validation médicale n'est pas reçue.
inv-s05
Bouton d'alerte physique ou virtuel : pas de debounce supérieur à 200 ms, pas d'écran intermédiaire.
inv-s06
Douleur EVA supérieure ou égale à 7 sur 10 déclenche la cascade aidants sans étape supplémentaire.
Consentement (C)
inv-c01
Aucun fait mémorisé sans consentement actif de la catégorie correspondante.
inv-c02
Retrait de consentement effacé en moins de 72 heures (RGPD, droit à l'oubli).
inv-c03
Le consentement biométrique (voix, image) suit l'Article 9 RGPD : opt-in explicite, journal d'usage.
inv-c04
Conservation des transcripts audio sous 24 heures par défaut. Allongement nécessite consentement explicite.
inv-c05
Mémoire long terme Zep : opt-in distinct du consentement court terme.
inv-c06
Pas de profiling automatisé pour discrimination tarifaire (impossible par design).
inv-c07
Latence e2e voix sous 2,5 secondes (budget partagé STT, LLM, TTS).
Périmètre (P)
inv-p01
Aucun croisement de données entre seniors d'une même tablette (multi-utilisateur strict).
inv-p02
Aidants voient les données du senior auquel ils sont rattachés uniquement.
inv-p03
Admin JUWA voit toutes les données mais via dashboard tracé (audit log obligatoire).
inv-p04
Le voice-worker n'accède pas directement à Postgres : passage par REST sécurisé.
inv-p05
RLS Postgres : un senior n'accède qu'à ses propres données, policy USING (user_id = current_setting('app.current_user_id')).
Accessibilité (A)
inv-a01
Police de base supérieure ou égale à 22 px sur tablette (lecture senior).
inv-a02
Contraste WCAG AA minimum, AAA quand mesurable.
inv-a03
Aucun timeout visuel inférieur à 30 secondes sans avertissement vocal.
inv-a04
Lip-sync décalage inférieur à 80 ms (perceptible naturel).
inv-a05
Aucun son brutal supérieur à 70 dB SPL en sortie haut-parleur tablette.
Technique (T)
inv-t01
Toute donnée chiffrée at-rest (Postgres TDE, Object Storage SSE-S3).
inv-t02
Aucune donnée hors UE. Scaleway Paris exclusivement.
inv-t03
Backups Postgres quotidiens, rétention 30 jours, restoration testée mensuellement.
inv-t04
Secrets jamais en clair en repo. Scaleway Secret Manager et injection runtime.
inv-t05
Tout endpoint mutant idempotent ou rate-limité (cf. Gestion d'erreurs).
inv-t06
Logs structurés OTel (Cockpit Mimir, Loki, Tempo). Aucun console.log en prod.
inv-t07b
PII masking, noms et numéros aidants masqués dans les events tablette (anti-shoulder-surfing).