Files
siop2/docs/01-cadrage/exigences.md
pr-daaif 04e61056f6 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>
2026-07-15 21:06:33 +01:00

56 lines
2.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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