ADR-0008 — Revue contradictoire ancrée (la couche de communication de l'audit)¶
Statut : accepté (2026-06-12, arbitrages user). Contexte : jusqu'ici la chaîne junior → senior → externe ne portait que la DBO figée et des commentaires globaux au journal. Opaque : la critique n'était pas ancrée (« revoir le taux » — lequel ?), la défense n'existait pas (maintenir une hypothèse contestée avec une justification solide est pourtant un acte professionnel légitime), et le diff entre deux soumissions était invisible alors que les jeux sont immuables et versionnés.
Analogie retenue : la revue de code (pull request) — diff visible, commentaires ancrés, fils à cycle de vie, l'auteur révise ou défend, le reviewer arbitre.
🎯 À retenir
La revue contradictoire est calquée sur la revue de code : critiques ancrées par cible (champ d'hypothèse, données ou global), fils à cycle de vie où le junior révise ou défend (statut maintenu légitime — la résolution n'est pas exigée, le senior arbitre), diff entre soumissions et snapshot intégral des hypothèses + justifications. La composition de l'étude quitte le panneau pour une vue plein écran dédiée (/cabinet/etude/[id]). Le client ne voit rien de cette cuisine interne.
Décisions¶
| # | Décision | Arbitrage |
|---|---|---|
| D-REV-1 | Les critiques s'ancrent par cible : un champ d'hypothèse précis (taux_actualisation, table_mortalite, taux_rotation, grille_ifc, causes, …), donnees (photo/retraitements) ou global. |
user, 2026-06-12 |
| D-REV-2 | Gate de re-soumission : chaque fil ouvert doit avoir au moins une réponse (révision ou défense) avant re-soumission — 409 sinon. La résolution n'est pas exigée : le statut maintenu (défense argumentée sans changement) est légitime, le senior arbitre. |
user, 2026-06-12 |
| D-REV-3 | Justifications d'hypothèses facultatives mais signalées : saisies à la soumission, champ par champ ; les hypothèses sensibles non justifiées portent un badge « à justifier » visible du reviewer. Le PDF livrable les citera. | user, 2026-06-12 |
| D-REV-4 | Senior et externe ouvrent les fils (selon leur étape de workflow) ; le junior assigné répond/défend. Résoudre un fil = reviewer uniquement. | user, 2026-06-12 |
| D-REV-5 | Snapshot intégral : la soumission fige TOUTES les hypothèses (plus seulement 4 champs) + les justifications + le diff vs soumission précédente (calculé depuis la lignée des jeux immuables) dans resultat_json. |
découle de D-REV-1 |
Cycle de vie d'un fil¶
ouvert ──(réponse junior)──► repondu ──(reviewer)──► resolu
│ ▲
└──(défense sans changement)──► maintenu ┘ (le reviewer arbitre :
résout, ou renvoie encore)
- Un fil n'est jamais supprimé (même principe que le journal).
- Les messages d'un fil sont immuables, horodatés, avec acteur + persona.
- L'externe voit les fils senior↔junior : la qualité du débat interne est elle-même une preuve de contrôle (chaîne d'audit).
- Le client ne voit rien de cette cuisine (le PDF reste sa synthèse).
Ce que la revue porte désormais¶
- Hypothèses complètes figées (snapshot intégral, D-REV-5) avec badge multi le cas échéant ;
- Justification par hypothèse (D-REV-3), adossable au Référentiel ;
- Diff vs soumission précédente : champ, avant, après — visible du senior et de l'externe ;
- Fils de critique ancrés avec leur cycle de vie complet ;
- La DBO figée et ses composantes (inchangé).
§workspace — Le plan de travail de l'étude (2026-06-12)¶
Composer une étude dans le panneau d'actions (≈460 px) était une faute : la composition est l'acte central du junior. Quatre décisions (arbitrages user) :
| # | Décision | Arbitrage |
|---|---|---|
| D-WS-1 | Vue plein écran dédiée (route /cabinet/etude/[id], mode focus, pas un modal bloquant) — on peut filer au Labo et revenir, ça survit au reload, le reviewer peut l'ouvrir en lecture. Un lieu, pas un pop-up. |
user |
| D-WS-2 | Pièces justificatives uploadées du disque (PieceJustificative + storage + ouverture par le reviewer) — « 4 % + [BEAC.pdf] » écrase « 4 % ». |
user |
| D-WS-3 | Grille par valeur réelle du jeu choisi (on justifie « 4,0 % », pas un nom de champ abstrait). | user |
| D-WS-4 | Lien interne vers le Référentiel (les runs du Labo ne sont pas persistés ; on lie à une entrée normative). | user |
Mécanique :
- Les justifications (Justification : texte + referentiel_cle) et les
pièces persistent comme un brouillon tant que l'étude est ouverte
(en_etude | a_revoir), éditées par le junior assigné seul ; figées
dans resultat_json.justifications à la soumission (format enrichi
{champ: {texte, referentiel, pieces}}) — relues par la revue et le PDF.
- DBO en direct : POST /api/demandes/{id}/apercu — mêmes gardes que
soumettre-revue (le dossier est dans le tenant du CLIENT, pas du junior),
mais jetable. /api/dbo/dossier, scopé au tenant de l'appelant, ne
conviendrait pas.
- Le client ne voit jamais les justifications/pièces (cuisine interne, 404).
- La composition (photo, jeu, justifs, pièces, soumission) quitte le
panneau : « Démarrer l'étude » et « Ouvrir le plan de travail » y mènent.
Alternatives écartées¶
- Texte libre structuré (sections suggérées) : pas de cycle de vie par critique, donc pas de défense traçable.
- Résolution obligatoire avant re-soumission : interdirait le « maintenu », c'est-à-dire la défense — exactement ce qu'on veut permettre.
- Fils ouverts par tout le staff : brouille les rôles de revue ; le besoin « question du junior avant soumission » sera traité ailleurs si réel.