# Exigences non fonctionnelles — SIOP V2 > **Rôle de ce document (playbook)** : les exigences fonctionnelles vivent dans la > user-story map et les issues ; ici on fige ce qui est **transversal** — qualité, sécurité, > conformité, exploitation — avec des critères **mesurables** (sinon invérifiables). ## Qualité & design | Exigence | Critère mesurable | | --- | --- | | Fidélité au design | Revue pixel par release : écrans conformes aux maquettes validées (`../02-design/`) | | Réactivité | Interfaces utilisables de 360 px (mobile) à 1920 px ; tables scrollables sans casser la page | | Thème | Clair **et** sombre, pilotés par les tokens ; aucun style codé en dur hors tokens | | Accessibilité | Navigation clavier sur les parcours critiques ; libellés/aria sur tous les contrôles ; contraste AA | | Langue | 100 % français (produit), zéro franglais dans l'UI | ## Performance | Exigence | Critère | | --- | --- | | Chargement des listes | < 1 s pour 10 000 OT (pagination serveur, index SQL) | | Tableau de bord | < 2 s (agrégations SQL, jamais de calcul en mémoire sur tout l'historique) | | Mobile offline | Ouverture d'un OT déjà synchronisé : instantanée (< 200 ms, lecture locale) | ## Sécurité | Exigence | Critère | | --- | --- | | API fermée par défaut | Guard JWT global ; routes publiques explicitement `@Public()` ; test de couverture des routes | | Permissions | Matrice rôles × objets × droits **en base** (jamais dans le JWT), testée rôle par rôle | | Démo-login | `POST /auth/demo-login` **inexistant** (404) si `DEMO_MODE` n'est pas `true` ; jamais activé en production réelle ; test e2e dédié | | Fichiers | Accès aux objets MinIO uniquement par URL signée à durée courte ; clés opaques | | Secrets | Jamais en git ; `.env.example` exhaustifs ; secrets Dokploy | ## Conformité (loi 09-08) Consentement explicite pour toute géolocalisation ; géolocalisation limitée aux heures de service ; purge des enregistrements audio après transcription (R5) ; droit d'accès/rectification des données personnelles (procédure au runbook). ## Fiabilité & exploitation | Exigence | Critère | | --- | --- | | Sauvegardes | PostgreSQL + MinIO sauvegardés quotidiennement ; restauration testée 1×/release (runbook) | | Migrations | `prisma migrate deploy` rejouable ; seed idempotent (rejouer ne casse rien) | | Offline mobile | Aucune saisie terrain perdue : file locale + verrou optimiste + rejeu (testé) | | Supervision | Endpoint `/health` (base, Redis, MinIO) ; vérifié au déploiement | ## Testabilité Pyramide : unitaires (logique pure), intégration contre infra réelle (Docker), parcours navigateur Playwright (1+ par release), mobile testé en Node (`node:sqlite`), contrat OpenAPI bloquant en CI. Couverture API ≥ 70 % **bloquante**. Chaque bug corrigé = un test qui l'aurait attrapé.