docs(r0): kickoff SIOP V2 — vision, cadrage, charte graphique, maquettes HD

Refondation design-first du projet SIOP (v1 gelée) :
- Playbook 00-vision (charte projet, personas, benchmark Atlas)
- Playbook 01-cadrage (releases R0→R5 + DoD, user-story map, exigences, risques)
- Playbook 02-design : charte graphique, tokens.css bi-thème (palettes
  analytics validées CVD/contraste par script), maquettes HD navigables
  (7 écrans dont démo-login DEMO_MODE, bilan codé, portail QR, mobile)

Prochaine étape : validation des maquettes par le référent avant tout code.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
pr-daaif
2026-07-15 21:06:33 +01:00
commit 04e61056f6
14 changed files with 1547 additions and 0 deletions

View File

@@ -0,0 +1,55 @@
# 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é.