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