Isi-APP Docs fonctionnelles
Toutes les docs
Markdown brut
Restitutions — Cahier de recette (tests manuels)
Actif isi-nova functional Revu le 2026-07-20 isi-nova/restitutions-recette.md

Restitutions — Cahier de recette (tests manuels)

Plan de test manuel du module Restitutions (ISI Nova). À dérouler dans le navigateur, étape par étape. Chaque case [ ] est un point à valider.

Doc liée : docs/isi-nova/restitutions.md (fonctionnel) · .claude/technical-docs/isi-nova/restitutions.md (technique).


0. Prérequis

Compte de test

  • [ ] Être connecté avec un utilisateur du tenant ISI-Groupe (session('user.info._id') === 1). ⚠️ Tout autre tenant → 403 sur tout le module.
  • [ ] Cet utilisateur a au moins le droit R sur le module Core Model 50040101 (et C/U/D pour créer / éditer / supprimer).
  • [ ] Au moins un client existe dans ISI-Groupe, idéalement avec son Core Model renseigné (pour une génération IA riche à l'étape Génération).

Fichiers modèles à uploader

Générés dans storage/app/restitution-samples/ (récupère-les depuis le serveur) :

Fichier Sert à tester
01-modele-word-avec-titres.docx Parsing structurel Word (chaque Heading = 1 section)
02-modele-word-avec-marqueurs.docx Détection des marqueurs [ISI_PRATIQUE] / [ITIL_PRATIQUE]
03-modele-word-sans-titres-fallback-ia.docx Fallback IA (document sans Heading → découpage par IA)
04-modele-powerpoint.pptx Parsing slides + rendu livrable .pptx (châssis OOXML complet)

Régénérer si besoin : php artisan tinker puis appeler Tests\Fixtures\Restitution\TemplateFixtures::*.

Environnement

  • [ ] Workers de queue ai-fills actifs (php artisan queue:work --queue=ai-fills) pour les étapes IA (mapping, génération, rendu automatique du livrable). Sinon les jobs restent en attente.
  • [ ] Quota IA tenant suffisant (les appels IA sont facturés au tenant ISI-Groupe).

1. Accès & contrôle d'accès (ACL)

Cas Action Résultat attendu
Tenant non ISI-Groupe Visiter /param-dsi/core-model/admin/restitutions 403 / Accès Refusé
ISI-Groupe sans droit U Ouvrir la liste Liste visible sans bouton « Créer une Restitution » ni boutons d'édition
ISI-Groupe avec droits Ouvrir la liste Liste + boutons d'action visibles
  • [ ] Les 3 cas ci-dessus se comportent comme attendu.
  • [ ] Liste vide, aucun filtre : empty state « Aucune Restitution » + CTA « Créer une Restitution ».
  • [ ] Liste filtrée sans résultat : message « Aucun résultat avec ces filtres ».

2. Étape 1 — Créer une Restitution + uploader des documents

  • [ ] Cliquer « Créer une Restitution » (liste) ou, depuis Suivi clients, ouvrir la modale « Restitutions » du client puis cliquer « Nouvelle Restitution » (_idclient pré-rempli et masqué dans ce cas).
  • [ ] Validation : enregistrer en laissant le client cible vide (cas liste) → message « Le client est obligatoire » (PAS d'erreur 500).
  • [ ] Remplir Titre + Client cible (si non pré-rempli) + Date du diagnostic (+ Contexte optionnel) → Enregistrer → redirection vers l'onglet Documents de l'écran d'édition, toast « Restitution créée ».
  • [ ] Plusieurs Restitutions par client : créer une 2e Restitution pour un client qui en a déjà une → aucune erreur, les deux coexistent et apparaissent toutes les deux dans la modale « Restitutions » du client (Suivi clients).
  • [ ] Rouvrir la Restitution en édition, onglet Infos → le champ client n'est pas modifiable (immuable après création).

Upload de templates (onglet Documents)

  • [ ] Uploader 01-modele-word-avec-titres.docx → toast « Template ajouté (N sections détectées) », N = nombre de Headings ; la ligne apparaît dans le tableau avec le badge « Mapping requis ».
  • [ ] Uploader 04-modele-powerpoint.pptx → sections = nombre de slides.
  • [ ] Uploader 03-modele-word-sans-titres-fallback-ia.docx → le fallback IA se déclenche de façon transparente, des sections sont quand même créées.
  • [ ] Uploader 02-modele-word-avec-marqueurs.docx → les sections contenant [ISI_PRATIQUE] / [ITIL_PRATIQUE] sont marquées (visible en étape Génération).
  • [ ] Cas d'échec : uploader un fichier non .docx/.pptx ou > 20 Mo → rejet + message.
  • [ ] Supprimer un template (bouton corbeille de la ligne, confirm dialog) → le fichier, ses sections et son éventuel livrable disparaissent.

3. Étape 2 — Le wizard de génération (mapping → génération)

Action de ligne « Générer »

  • [ ] Sur un document dont le mapping n'est pas validé, cliquer « Générer » → le wizard s'ouvre en modale, démarrant à l'étape Mapping.
  • [ ] Sur un document déjà mappé mais pas encore généré, cliquer « Générer » → le wizard s'ouvre directement à l'étape Génération (pas de repassage par le mapping).
  • [ ] Sur un document déjà généré (sections en attente de révision), cliquer « Générer » → le wizard est sauté, l'écran de révision s'ouvre directement.
  • [ ] Sur un document déjà finalisé (livrable prêt), l'action de ligne est « Télécharger », pas « Générer ».

Étape Mapping (dans le wizard)

  • [ ] « Proposer le mapping » → l'IA propose une dimension par section + score de confiance (vert / amber / rouge) + justification au clic sur le badge.
  • [ ] Corriger une dimension via le sélecteur d'une ligne.
  • [ ] Bouton « Valider le mapping » désactivé tant qu'une section n'a pas de dimension assignée.
  • [ ] « Valider le mapping » → toutes les sections passent validées, le wizard passe au document suivant (si action groupée sur plusieurs documents non mappés, indicateur « Document X sur N ») ou à l'étape Génération.
  • [ ] Re-lancer « Proposer le mapping » sur un template déjà mappé → confirm dialog (la nouvelle proposition écrase les corrections existantes).

Étape Génération (dans le wizard)

  • [ ] « Lancer la génération » → traitement en arrière-plan ; la modale affiche une barre de progression qui se rafraîchit automatiquement (~3 s).
  • [ ] Fermer le wizard pendant que la génération tourne, puis rouvrir « Générer » sur le même document → le wizard réévalue l'état réel (reprend à l'étape Génération si toujours en cours, ou affiche directement « Voir les résultats » si terminé entretemps — rien n'est perdu).
  • [ ] Verrouillage : tenter de lancer une seconde génération pendant qu'une autre est en cours (sur la même Restitution) → message d'attente, pas de double lancement.
  • [ ] Reprise après échec : si des sections sont en échec, relancer ne retraite que les sections pending/failed (les générées sont conservées).
  • [ ] Génération terminée → bouton « Voir les résultats » apparaît ; cliquer dessus ouvre l'écran de révision (remplace le wizard, pas d'empilement de modales).

Action groupée

  • [ ] Sélectionner plusieurs documents à des stades différents (checkbox) → « Générer la sélection » : seuls ceux qui ont encore besoin de mapping ou de génération sont traités ; les documents déjà finalisés gardent leur action « Télécharger » et sont ignorés par ce lancement.

4. Étape 3 — Réviser et valider le contenu (Document Reviewer)

  • [ ] Vue 2 colonnes : sommaire (gauche, un ou plusieurs documents selon l'origine — ligne ou action groupée) + détail section (droite), badges de statut (bleu généré / vert validé / rouge échec / amber en cours).
  • [ ] Modifier une section (éditeur WYSIWYG) → sauvegarde → marquée « Éditée ».
  • [ ] Régénérer une section (avec consigne optionnelle) → régénération en arrière-plan ; si la section était éditée manuellement, confirmation avant écrasement.
  • [ ] Valider une section → figée (non modifiable tant que non dé-validée).
  • [ ] Section en échec → « Relancer cette section ».
  • [ ] « Valider toutes » → valide en bloc les sections « Générée » (confirm avant).
  • [ ] Bouton « Fermer » du header modal → ferme sans forcer de validation.
  • [ ] Depuis la liste des documents, retour sur l'onglet Documents → le badge « à valider » de l'onglet s'est mis à jour.

5. Étape 4 — Livrable automatique

  • [ ] Dès que toutes les sections d'un document sont validées (validation individuelle ou « Valider toutes »), sans action manuelle, le badge de la ligne passe à « Livrable en cours » puis à un bouton « Télécharger » (quelques secondes, le temps que RenderDeliverableJob s'exécute).
  • [ ] Télécharger → le fichier .docx/.pptx se télécharge ; il réutilise la charte du template uploadé (styles, en-têtes/pieds, slideMaster) avec le contenu IA.
  • [ ] .pptx — identité visuelle du modèle restituée : ouvrir le livrable .pptx généré et vérifier que la mise en forme des slides de contenu du modèle est reprise (couleurs/polices du titre et du corps, bandeaux/formes décoratives) — le rendu clone une vraie slide de contenu et n'en remplace que le texte. ⚠️ Vérifier aussi qu'aucun texte de guidage du modèle (ex. « Points clés attendus », puces d'exemple, pied « x/N ») ne « fuit » sur les slides générées. Éléments non repris (attendu) : numéro de section, sous-titre par slide, pied de page authored. Un rendu « tout blanc / générique » = repli (le modèle n'a aucune slide de contenu exploitable).
  • [ ] Bouton « Uploader un livrable » (icône dédiée sur la ligne) → modale d'upload manuel de secours → badge « Uploadé » après envoi.
  • [ ] Point d'attention : dévalider une section d'un document déjà finalisé, la recorriger, puis la revalider → le livrable n'est pas régénéré tant que toutes les sections ne repassent pas validées (comportement volontaire, pas un bug).

⚠️ Limitations MVP attendues (ce ne sont PAS des bugs) :

  • images du .pptx → remplacées par « [Image: nom_du_fichier] » dans le rendu .pptx ;
  • sections en échec → « [Section non disponible — à compléter manuellement] » ;
  • rendu .docx lossy (SmartArt/macros/champs avancés peuvent être perdus) ;
  • pas d'historique des livrables (re-upload = écrasement).

5bis. Réactivité UI sans rechargement — points sensibles ⚠️

Section critique — validation manuelle OBLIGATOIRE. Ces comportements reposent sur la réactivité client (store Alpine, morphing DOM Livewire, wire:key, polling) et ne sont couverts par aucun test automatisé (ni PHPUnit — rendu serveur seulement — ni Dusk — bloqué hors ISI-Groupe). C'est ici que sont apparues des régressions passées. À dérouler sans jamais rafraîchir la page (F5) : tout le sel du test est là.

  • [ ] Bouton « Générer un livrable » après ajout d'un modèle : onglet Livrables vide (aucun modèle) → le bouton est désactivé (« Ajoutez d'abord un modèle »). Ajouter un modèle dans l'onglet Modèles, revenir à Livrables sans F5 → le bouton « Générer un livrable » / « Générer tout » devient actif.
  • [ ] « Reprendre la révision (N) » : après une génération produisant des sections à réviser, le bouton apparaît sans rechargement avec le bon compteur (y compris après une génération partiellement en échec).
  • [ ] Badges d'onglets (Modèles / Livrables) : se réactualisent sans F5 à l'ajout/suppression d'un modèle ou d'un livrable.
  • [ ] Bouton « Valider » après dévalidation (révision) : sur une section Validée, cliquer « Annuler la validation » → la section repasse Générée et le bouton « Valider » réapparaît immédiatement (sans F5). (morphing DOM — régression historique #7).
  • [ ] Colonnes de la révision à scroll indépendant : faire défiler le sommaire (gauche) ne fait pas défiler le détail (droite), et inversement — sélectionner une section en bas du sommaire laisse le détail visible.
  • [ ] Polling de génération / rendu : la barre de progression (wizard) et l'apparition d'un livrable (onglet Livrables) se mettent à jour toutes les quelques secondes sans action, et s'arrêtent une fois terminé.

Dépendances IA / queue (pré-requis §0) — si un de ces points échoue, vérifier d'abord le worker ai-fills et le quota IA avant de conclure à un bug :

  • [ ] Proposition de mapping (IA) aboutit sans erreur 400 (schéma function-calling). (régression historique #1).
  • [ ] Après validation des sections, le livrable se génère et apparaît ; si le fichier modèle est inaccessible, un message clair s'affiche (pas d'erreur brute) et l'alerte « N livrables n'ont pas pu être générés » remonte. (régressions historiques #3/#4).

6. Suppression d'une Restitution

  • [ ] Bouton « Supprimer la Restitution » → confirm dialog (action irréversible).
  • [ ] Après confirmation → redirection vers la liste, la Restitution n'apparaît plus.
  • [ ] Vérifier (BDD) que sections, jobs, livrables et fichiers physiques sont supprimés (hard delete cascade).

7. Récapitulatif d'exécution

Étape Statut (OK / KO) Remarques
1. ACL
2. Création + upload templates
3. Wizard (mapping + génération)
4. Révision
5. Livrable automatique
5bis. Réactivité UI (sans F5) ⚠️
6. Suppression

Bugs / anomalies relevés :