RERO ILS

July 8, 2026 · View on GitHub

Objectif : Vérifier le bon fonctionnement de toutes les interfaces utilisateur face à une mise à jour (Angular, dépendances, refactoring). Ce protocole couvre ce que les tests unitaires backend ne couvrent pas : l'affichage, les interactions, les mises à jour de listes, les formulaires, les retours visuels.

Prérequis : Environnement de test avec données de démonstration (fixtures RERO ILS). Comptes disponibles : visiteur anonyme, lecteur, bibliothécaire de succursale, bibliothécaire système, admin.

Convention :

  • [ ] — case à cocher pour chaque étape
  • ⚠️ — point souvent raté lors de migrations, vérifier attentivement
  • 🔒 — nécessite un rôle spécifique
  • 🔄 — vérifier que la liste/vue se met à jour sans rechargement manuel de la page

Table des matières

  1. Transversal & infrastructure
  2. Recherche (interface publique et admin)
  3. Interface publique — Détail document
  4. Interface publique — Profil lecteur
  5. Administration — Circulation (checkout/checkin)
  6. Administration — Gestion des lecteurs
  7. Administration — Catalogue (documents, exemplaires, holdings)
  8. Administration — Acquisitions
  9. Administration — Configuration
  10. Administration — Rapports & monitoring
  11. Administration — Migrations

1. Transversal & infrastructure

1.1 Authentification

#ÉtapeOK
1.1.1Login avec identifiants valides → redirection vers page d'accueil[ ]
1.1.2Login avec identifiants invalides → message d'erreur affiché[ ]
1.1.3Logout → session terminée, redirection vers login[ ]
1.1.4⚠️ Accès direct à une URL protégée sans session → redirection login, puis retour à l'URL d'origine[ ]
1.1.5Session expirée : ouvrir DevTools → Application → Cookies → supprimer tous les cookies du domaine, puis tenter une action (ex. sauvegarder un formulaire) → redirection vers login, pas de crash silencieux ni page blanche[ ]

1.2 Navigation principale (admin)

#ÉtapeOK
1.2.1Menu principal visible avec ses 5 catégories : Services aux usagers, Catalogue, Acquisitions, Rapports, Admin[ ]
1.2.2Sous-menus s'ouvrent au clic[ ]
1.2.3⚠️ Les raccourcis clavier fonctionnent (c → checkout, p → lecteurs, etc.)[ ]
1.2.4🔒 Les entrées de menu masquées selon le rôle (bibliothécaire système = tous les menus VS rôle pro_circulation = pas de menus acquisitions par exemple)[ ]
1.2.5Sélecteur de bibliothèque active présent et fonctionnel[ ]

1.3 Retours visuels — points de vérification ciblés

#ÉtapeOK
1.3.1Après un checkin réussi : toast de confirmation affiché. Après un checkin en erreur (exemplaire inconnu) : toast d'erreur avec message explicite[ ]
1.3.2Après sauvegarde d'un formulaire (enregistrement lecteur ou notice bibliographique) : toast de succès affiché[ ]
1.3.3Formulaire de création de lecteur : saisir un email déjà existant → message d'erreur inline sous le champ email. Saisir un nom d'utilisateur existant → message d'erreur inline sous ce champ[ ]
1.3.4Formulaire de changement de mot de passe : saisir deux mots de passe différents → erreur inline visible. Après correction → erreur disparaît[ ]
1.3.5Console navigateur : aucune erreur JavaScript critique (vérifier au moins 1× par module)[ ]

1.4 Changement de langue

#ÉtapeOK
1.4.1Sélecteur de langue accessible et fonctionnel[ ]
1.4.2⚠️ Après changement de langue, les labels d'interface sont bien traduits (pas de clé brute visible, ex. translate.key.path)[ ]

2. Recherche (interface publique et admin)

La plupart des comportements de cette section s'appliquent à la fois à l'interface publique et aux listes de ressources de l'interface admin (documents, lecteurs, exemplaires, commandes…). La recherche avancée (§ 2.3) est spécifique à l'admin.

2.1 Page d'accueil publique

#ÉtapeOK
2.1.1Page d'accueil charge sans erreur[ ]
2.1.2Barre de recherche présente et focalisable[ ]
2.1.3Saisie d'un terme et soumission → résultats affichés[ ]

2.2 Résultats de recherche

S'applique à la recherche publique et aux listes de l'admin.

#ÉtapeOK
2.2.1Liste de résultats affichée avec les données attendues (titre, auteur, date, disponibilité pour les documents)[ ]
2.2.2Facettes (filtres) affichées, cliquables[ ]
2.2.3⚠️ Caractères spéciaux dans la recherche (*, ?, +) → résultats affichés sans encodage parasite visible dans l'URL (%2A ou équivalent), sans message d'erreur[ ]
2.2.4Pagination fonctionne (page suivante, précédente, saut direct)[ ]
2.2.5Tri des résultats change l'ordre affiché[ ]
2.2.6Filtre par facette → liste se restreint, facette cochée visible[ ]
2.2.7Retrait d'un filtre (croix) → liste revient à l'état précédent[ ]
2.2.8Combinaison de plusieurs facettes actives simultanément[ ]
2.2.9Recherche sans résultat → message "aucun résultat" affiché, pas d'erreur[ ]

2.3 Recherche experte (admin uniquement)

Accessible depuis les listes de ressources admin (documents, lecteurs…) via le lien "Recherche experte" / mode expert.

#ÉtapeOK
2.3.1Accès à la recherche experte depuis la liste des documents admin[ ]
2.3.2Saisie d'une requête Elasticsearch/Lucene → résultats corrects[ ]
2.3.3Retour en recherche simple → interface normale[ ]

3. Interface publique — Détail document

3.1 Onglet "Obtenir" (holdings et exemplaires)

#ÉtapeOK
3.1.1Onglet "Obtenir" affiché par défaut[ ]
3.1.2Holdings de l'organisation affichés avec bibliothèque et localisation[ ]
3.1.3⚠️ Filtre par bibliothèque (multi-select) fonctionne et réduit la liste[ ]
3.1.4Accordéon holding : clic sur l'en-tête ouvre/ferme le détail[ ]
3.1.5Exemplaires listés avec statut de disponibilité, cote, localisation[ ]
3.1.6Badge de disponibilité correct (disponible/emprunté/en transit)[ ]
3.1.7Notes publiques des exemplaires affichées[ ]
3.1.8Liens URL (texte intégral électronique) cliquables[ ]
3.1.9⚠️ Holdings d'autres organisations affichés dans une section séparée[ ]
3.1.10Pagination des exemplaires si nombreux[ ]

3.2 Holdings sériaux (périodiques)

#ÉtapeOK
3.2.1Cote, énumération/chronologie affichées[ ]
3.2.2⚠️ Contenus supplémentaires, index, lacunes affichés si présents[ ]
3.2.3⚠️ "Ajouter une réclamation" → action déclenchée (bouton fonctionnel)[ ]

3.3 Demandes et PEB (usager connecté)

#ÉtapeOK
3.3.1🔒 Bouton "Demander" visible pour usager connecté[ ]
3.3.2⚠️ Bouton "Demander" disabled avec tooltip explicatif si demande impossible[ ]
3.3.3Clic "Demander" → sélecteur de lieu de retrait affiché[ ]
3.3.4Confirmation de la demande → message de succès, bouton change d'état[ ]
3.3.5🔒 Bouton PEB visible depuis la vue globale pour usager connecté[ ]

3.4 Onglet "Description"

#ÉtapeOK
3.4.1Résumé, sujets, auteurs, éditeur affichés[ ]
3.4.2⚠️ Les champs conditionnels (spécifiques à certains types de documents) s'affichent pour les documents qui les ont et sont absents pour les autres (ex. informations de fiction pour les romans, notes de musique pour les partitions)[ ]
3.4.3Liens vers les entités (auteurs, sujets) cliquables[ ]

3.5 Options d'export

#ÉtapeOK
3.5.1Boutons d'export présents[ ]
3.5.2Export fonctionne et télécharge le fichier[ ]

4. Interface publique — Profil lecteur

Accès : usager connecté, interface publique

4.1 Navigation dans le profil

#ÉtapeOK
4.1.1Page profil accessible après login[ ]
4.1.2⚠️ Onglets visibles : Prêts, Demandes, Frais, Historique (si activé), PEB, Données personnelles[ ]
4.1.3Code-barres usager affiché en haut[ ]
4.1.4🔒 Sélecteur d'organisation pour usager multi-affilié[ ]

4.2 Onglet "Prêts"

#ÉtapeOK
4.2.1Liste des prêts en cours avec titre, bibliothèque, date d'échéance[ ]
4.2.2⚠️ Badge "En retard" affiché si date dépassée[ ]
4.2.3⚠️ Badge "Bientôt dû" affiché si proche échéance[ ]
4.2.4Bouton "Prolonger" actif si renouvellement possible[ ]
4.2.5⚠️ Bouton "Prolonger" disabled avec tooltip explicatif si impossible[ ]
4.2.6🔄 Après renouvellement : nouvelle date d'échéance affichée sans rechargement[ ]
4.2.7Compteur de renouvellements mis à jour[ ]

4.3 Onglet "Demandes"

#ÉtapeOK
4.3.1Liste des demandes avec titre, statut, lieu de retrait[ ]
4.3.2Statuts affichés : En attente, Disponible au guichet, En transit[ ]
4.3.3Rang dans la file d'attente affiché si applicable[ ]
4.3.4Date limite de retrait affichée si disponible[ ]
4.3.5Bouton "Annuler" visible pour demandes annulables[ ]
4.3.6🔄 Après annulation : demande disparaît de la liste sans rechargement[ ]

4.4 Onglet "Frais"

#ÉtapeOK
4.4.1Liste des frais avec montant, date, document concerné[ ]
4.4.2Détail expandable par frais : historique des transactions[ ]
4.4.3Montant total affiché dans l'en-tête de l'onglet[ ]

4.5 Onglet "Historique"

#ÉtapeOK
4.5.1⚠️ Onglet visible seulement si keep_history activé pour l'usager[ ]
4.5.2Liste des prêts passés avec document, date de retour[ ]
4.5.3Chargement progressif ("Afficher plus") fonctionnel[ ]

4.6 Onglet "PEB" (Prêt entre bibliothèques)

#ÉtapeOK
4.6.1Liste des demandes PEB avec statut, document, lieu de retrait[ ]
4.6.2Champs spécifiques : portée (copie/prêt), pages, URL source[ ]
4.6.3Section expandable "Informations supplémentaires"[ ]

4.7 Onglet "Données personnelles"

#ÉtapeOK
4.7.1Informations personnelles affichées (nom, adresse, email, tél.)[ ]
4.7.2Date d'expiration du compte affichée[ ]
4.7.3⚠️ Indicateur "Conserver l'historique" affiché[ ]
4.7.4Bouton "Modifier" ouvre le formulaire d'édition[ ]
4.7.5⚠️ Champs désactivés (readOnlyFields) bien en lecture seule dans le formulaire[ ]
4.7.6Validation async email/nom d'utilisateur (doublon) fonctionne[ ]
4.7.7Soumission formulaire → retour au profil, données mises à jour[ ]

4.8 Changement de mot de passe

#ÉtapeOK
4.8.1Formulaire 3 champs : mot de passe actuel, nouveau, confirmation[ ]
4.8.2⚠️ Validation force du mot de passe affiche les règles non respectées[ ]
4.8.3Mot de passe actuel incorrect → message d'erreur[ ]
4.8.4Nouveaux mots de passe ne correspondent pas → erreur inline[ ]
4.8.5Changement réussi → message de confirmation[ ]

5. Administration — Circulation (checkout/checkin)

🔒 Rôle : bibliothécaire (circulation)

5.1 Accès et recherche de lecteur

#ÉtapeOK
5.1.1Interface checkout accessible via menu ou raccourci c[ ]
5.1.2Saisie d'un code-barres lecteur (ou nom) → carte lecteur affichée[ ]
5.1.3⚠️ Carte lecteur affiche : nom, date de naissance, âge, type, code-barres, notes[ ]
5.1.4Compte bloqué → message d'avertissement visible sur la carte[ ]
5.1.5Compte expiré → message d'avertissement visible[ ]
5.1.6Lecteur introuvable → message d'erreur clair[ ]

5.2 Prêt (checkout)

#ÉtapeOK
5.2.1Saisie d'un code-barres exemplaire → prêt enregistré[ ]
5.2.2🔄 ⚠️ Exemplaire apparaît immédiatement dans la liste des prêts du lecteur[ ]
5.2.3Exemplaire déjà prêté → message d'erreur avec information[ ]
5.2.4Exemplaire introuvable → message d'erreur[ ]
5.2.5⚠️ Notes de circulation de l'exemplaire affichées dans la liste expandée ET dans un toast d'alerte[ ]
5.2.6Exemplaire avec type d'exemplaire temporaire → note affichée dans la liste expandée ET dans un toast[ ]
5.2.7Exemplaire appartenant à une collection → note affichée dans la liste expandée ET dans un toast[ ]

5.3 Liste des prêts en cours (pendant le checkout)

#ÉtapeOK
5.3.1Liste affiche : code-barres, titre, auteur, date d'échéance[ ]
5.3.2Clic "expand" par ligne → détails affichés (cote, localisation, notifications)[ ]
5.3.3Renouvellement individuel (bouton par ligne)[ ]
5.3.4⚠️ "Renouveler tout" → tous les renouvelables mis à jour en une action[ ]
5.3.5🔄 Après renouvellement, date d'échéance mise à jour dans la liste[ ]
5.3.6Bouton "Renouveler" disabled si non renouvelable (tooltip explicatif)[ ]
5.3.7Badge frais affiché si des frais sont associés à un prêt existant[ ]
5.3.8Badge demandes (réservations) affiché si d'autres lecteurs attendent[ ]

5.4 Retour (checkin)

Le retour peut se faire depuis l'onglet "Prêts" d'un lecteur chargé (retour dans le contexte du lecteur) ou directement depuis l'interface checkout/checkin sans lecteur sélectionné (retour anonyme). Tester les deux cas.

#ÉtapeOK
5.4.1Retour sans lecteur chargé : saisie code-barres exemplaire → retour enregistré[ ]
5.4.2🔄 ⚠️ Après retour, exemplaire apparaît dans la liste des retours sans rechargement[ ]
5.4.3Retour depuis l'onglet "Prêts" d'un lecteur : même comportement, prêt disparaît de la liste du lecteur[ ]
5.4.4Exemplaire en transit → message indiquant la bibliothèque de destination[ ]
5.4.5Exemplaire avec demande en attente → message signalant la demande[ ]
5.4.6Frais générés au retour → message ou badge visible[ ]
5.4.7⚠️ Scan d'un exemplaire sans prêt actif → exemplaire apparaît dans la liste avec un bandeau d'avertissement (icône triangle), pas de crash ni d'erreur bloquante[ ]

5.5 Onglet "Demandes" (patron en cours)

#ÉtapeOK
5.5.1Liste des demandes du lecteur : titre, date de demande[ ]
5.5.2Annulation d'une demande → 🔄 disparaît de la liste[ ]

5.6 Onglet "À récupérer" (pickup)

#ÉtapeOK
5.6.1Exemplaires disponibles au guichet listés[ ]
5.6.2Date limite de retrait affichée[ ]

5.7 Onglet "Frais" (transactions lecteur)

#ÉtapeOK
5.7.1⚠️ Accordéon "Frais engagés" affiche liste avec date, catégorie, bibliothèque, montant[ ]
5.7.2⚠️ Bouton "Ajouter un frais" → formulaire s'ouvre[ ]
5.7.3🔄 ⚠️ Après ajout d'un frais, il apparaît dans la liste sans rechargement[ ]
5.7.4⚠️ Bouton "Tout payer" fonctionne (split button, avec option "Payer pour ma bibliothèque")[ ]
5.7.5🔄 Après paiement, montant total mis à jour[ ]
5.7.6Accordéon "Frais de retard prévisionnels" : liste avec date d'échéance, document, montant[ ]
5.7.7Accordéon "Historique" : transactions passées listées[ ]
5.7.8Montant total dans les badges d'onglet mis à jour dynamiquement[ ]

5.8 Gestion des demandes (interface globale)

#ÉtapeOK
5.8.1Page "Demandes" accessible depuis le menu[ ]
5.8.2Rafraîchissement automatique configurable (toggle + intervalle)[ ]
5.8.3Tri des demandes fonctionnel[ ]
5.8.4Annulation d'une demande depuis cette vue[ ]

6. Administration — Gestion des lecteurs

🔒 Rôle : bibliothécaire

6.1 Recherche de lecteurs

#ÉtapeOK
6.1.1Accès à la liste des lecteurs via le menu[ ]
6.1.2Recherche par nom, prénom, code-barres[ ]
6.1.3Filtres : expiré / non expiré / bloqué[ ]
6.1.4Tri par pertinence ou nom complet[ ]
6.1.5Facettes : rôles, ville, type de lecteur[ ]
6.1.6Résultats affichent nom, rôles (tags colorés), date de naissance, ville[ ]

6.2 Création d'un compte lecteur (user + patron)

Un compte lecteur est composé de deux parties dans le formulaire : la partie utilisateur (identité, accès) et la partie lecteur (informations bibliothécaires). Tester les deux.

#ÉtapeOK
6.2.1Formulaire de création accessible[ ]
6.2.2⚠️ Champs obligatoires visibles dès l'ouverture du formulaire (notamment sous-champs requis)[ ]
6.2.3Partie utilisateur : validation email en temps réel (unicité async)[ ]
6.2.4Partie utilisateur : validation nom d'utilisateur en temps réel (unicité async)[ ]
6.2.5⚠️ Sélection du rôle : les rôles disponibles dépendent des permissions du bibliothécaire connecté[ ]
6.2.6🔒 Bibliothécaire de succursale : sélection de bibliothèque limitée à ses bibliothèques[ ]
6.2.7Partie lecteur : date d'expiration pré-remplie (+3 ans)[ ]
6.2.8Partie lecteur : code-barres, type de lecteur, bibliothèque(s) d'affiliation renseignables[ ]
6.2.9Sauvegarde → redirect vers le détail, message de succès[ ]

6.3 Édition d'un lecteur

#ÉtapeOK
6.3.1Formulaire pré-rempli avec les données existantes[ ]
6.3.2⚠️ blocked_note effacé si case "bloqué" décochée[ ]
6.3.3⚠️ Retrait du rôle "patron" : si le lecteur a des prêts, frais ou demandes actifs → message d'erreur/blocage explicite[ ]
6.3.4Sauvegarde → données mises à jour dans la vue détail[ ]

6.4 Vue détail du lecteur

#ÉtapeOK
6.4.1Coordonnées affichées : date de naissance, email, téléphones (triés par poids), adresse[ ]
6.4.2Accordéon "Notes" visible si des notes existent[ ]
6.4.3Accordéon "Informations utilisateur" : nom, keep_history, rôles, date de création[ ]
6.4.4Accordéon "Informations lecteur" : code-barres (lien circulation), type, expiration, affiliations[ ]
6.4.5Accordéon "Informations bibliothécaire" si rôle présent[ ]
6.4.6⚠️ Accordéon "Permissions" se charge correctement (ne doit pas rester vide ni en erreur)[ ]
6.4.7Bouton "Circulation" visible pour CIRC_ADMIN[ ]

7. Administration — Catalogue

7.1 Recherche de documents

#ÉtapeOK
7.1.1Liste des documents accessible[ ]
7.1.2Recherche plein texte fonctionne[ ]
7.1.3Facettes (type, langue, date…) fonctionnelles[ ]
7.1.4Boutons Modifier / Dupliquer / Supprimer présents selon les permissions du rôle ; bouton Supprimer disabled (avec tooltip) si la notice a des exemplaires liés[ ]

7.2 Création/édition d'un document

#ÉtapeOK
7.2.1Éditeur de fiche bibliographique s'ouvre[ ]
7.2.2⚠️ Tous les sous-champs obligatoires sont visibles en mode création[ ]
7.2.3⚠️ Les champs conditionnels s'affichent ou se masquent correctement selon les valeurs saisies (ex. type de document, type de contenu)[ ]
7.2.4Ajout/suppression de répétitions de champs (auteurs, sujets, etc.)[ ]
7.2.5Sauvegarde → message de succès, redirect vers le détail[ ]
7.2.6⚠️ "Enregistrer comme modèle" fonctionne et le modèle est récupérable depuis l'éditeur[ ]
7.2.7Duplication d'un document → nouvel enregistrement avec données copiées[ ]

7.3 Import depuis le web

#ÉtapeOK
7.3.1Interface d'import accessible depuis le menu Catalogue[ ]
7.3.2Recherche par ISBN/titre retourne des résultats[ ]
7.3.3Sélection d'un résultat et import dans l'éditeur[ ]
7.3.4Données importées préremplissent l'éditeur correctement[ ]

7.4 Vue détail d'un document (admin)

#ÉtapeOK
7.4.1Titre, auteurs, données bibliographiques affichés[ ]
7.4.2Section Holdings de l'organisation courante visible[ ]
7.4.3⚠️ Filtre bibliothèques (multi-select) visible si >1 bibliothèque, fonctionne[ ]
7.4.4Accordéon holdings : expand/collapse par holding[ ]
7.4.5⚠️ Menu déroulant "Ajouter" (holding/exemplaire) fonctionnel, visible selon permissions[ ]
7.4.6Holdings d'autres organisations affichés dans une section séparée[ ]
7.4.7Exemplaires listés dans chaque holding avec statut, cote, énumération[ ]
7.4.8Filtre texte sur les exemplaires fonctionnel[ ]
7.4.9Suppression d'un exemplaire → confirmation, disparaît de la liste[ ]
7.4.10Holdings électroniques : liens URL affichés et cliquables[ ]

7.5 Gestion des exemplaires (items)

#ÉtapeOK
7.5.1Création d'un exemplaire depuis le détail document[ ]
7.5.2⚠️ Sous-champs obligatoires visibles dans le formulaire[ ]
7.5.3Édition d'un exemplaire[ ]
7.5.4"Changer de localisation" (switch location) fonctionnel[ ]
7.5.5Recherche d'exemplaires par code-barres, localisation, type[ ]

7.6 Entités (autorités)

#ÉtapeOK
7.6.1Accès à la liste des entités locales[ ]
7.6.2Création d'une entité locale (personne, organisation, concept)[ ]
7.6.3Dans l'éditeur de document : recherche et import d'entité depuis une source externe (VIAF, etc.) via le champ auteur/sujet[ ]
7.6.4Lien entité ↔ document affiché dans le détail document[ ]

7.7 Collections (expositions/cours)

#ÉtapeOK
7.7.1Création d'une collection[ ]
7.7.2Ajout d'exemplaires à une collection[ ]
7.7.3⚠️ Titre de collection masqué dans la vue publique si aucune collection n'existe pour cet exemplaire[ ]
7.7.4Tags de collection dans les listes : pas de doublons d'icône de suppression[ ]

7.8 Champs locaux (local_fields)

Les champs locaux sont définis par type de ressource (document, exemplaire, holding). Tester sur chaque ressource concernée.

#ÉtapeOK
7.8.1Champ local défini pour un document → visible et éditable dans l'éditeur de notice[ ]
7.8.2Champ local défini pour un exemplaire → visible et éditable dans l'éditeur d'exemplaire[ ]
7.8.3Champ local défini pour un holding → visible et éditable dans l'éditeur de holding[ ]

8. Administration — Acquisitions

🔒 Rôle : bibliothécaire avec accès acquisitions

8.1 Fournisseurs (vendors)

#ÉtapeOK
8.1.1Liste des fournisseurs accessible[ ]
8.1.2Création d'un fournisseur avec adresses, contacts[ ]
8.1.3Édition d'un fournisseur[ ]
8.1.4Suppression (si non utilisé)[ ]

8.2 Budgets

Les budgets sont créés en dehors de l'interface admin. Seules la consultation et la vérification sont disponibles ici.

#ÉtapeOK
8.2.1Liste des budgets accessible[ ]
8.2.2Vue détail d'un budget : nom, montant total, exercice fiscal[ ]
8.2.3⚠️ Avertissement affiché si exercice fiscal clôturé[ ]

8.3 Comptes budgétaires (accounts)

#ÉtapeOK
8.3.1Liste des comptes accessible[ ]
8.3.2Création d'un compte avec montant[ ]
8.3.3⚠️ Transfert de fonds entre comptes : formulaire et confirmation fonctionnels[ ]
8.3.4Montants (alloué, engagé, disponible) affichés correctement[ ]

8.4 Commandes (orders)

#ÉtapeOK
8.4.1Liste des commandes accessible[ ]
8.4.2Création d'une commande (fournisseur, compte, lignes)[ ]
8.4.3⚠️ Ajout de lignes de commande : bouton "Ajouter" dans l'accordéon lignes[ ]
8.4.4⚠️ Édition d'une ligne de commande PENDING (pas d'erreur d'autorisation)[ ]
8.4.5⚠️ Suppression d'une ligne de commande PENDING (pas d'erreur d'autorisation)[ ]
8.4.6Notes de commande affichées avec coloration[ ]
8.4.7Badge de priorité sur les lignes[ ]
8.4.8⚠️ Bouton "Envoyer la commande" visible pour commandes PENDING (avec permission update)[ ]
8.4.9Dialog de confirmation "Envoyer la commande" fonctionne[ ]
8.4.10⚠️ Onglet "Réception" visible dès que la commande peut faire l'objet d'une réception (statut approprié), même sans réceptions déjà enregistrées[ ]
8.4.11Onglet "Historique" affiche les changements d'état[ ]

8.5 Réceptions (receipts)

#ÉtapeOK
8.5.1Formulaire de réception s'ouvre depuis une commande[ ]
8.5.2Champs du formulaire visibles et fonctionnels[ ]
8.5.3Sauvegarde → réception enregistrée, liste mise à jour[ ]
8.5.4Annulation → aucun enregistrement créé[ ]

8.6 Fascicules en retard (late issues)

#ÉtapeOK
8.6.1Liste des fascicules en retard accessible[ ]
8.6.2Envoi d'une réclamation depuis cette interface[ ]

9. Administration — Configuration

🔒 Rôle : bibliothécaire système ou admin

9.1 Politiques de circulation (circ_policies)

#ÉtapeOK
9.1.1Liste des politiques accessible[ ]
9.1.2Création d'une politique (durée de prêt, renouvellements, etc.)[ ]
9.1.3Édition d'une politique existante[ ]
9.1.4Suppression d'une politique (si non utilisée)[ ]

9.2 Types d'exemplaires (item_types)

#ÉtapeOK
9.2.1Liste des types accessible[ ]
9.2.2Création / édition / suppression[ ]

9.3 Types de lecteurs (patron_types)

#ÉtapeOK
9.3.1Liste des types accessible[ ]
9.3.2Création / édition / suppression[ ]

9.4 Bibliothèques et localisations

#ÉtapeOK
9.4.1Fiche de ma bibliothèque accessible et éditable[ ]
9.4.2Localisations listées dans la bibliothèque[ ]
9.4.3Création / édition d'une localisation[ ]

9.5 Modèles (templates)

#ÉtapeOK
9.5.1Liste des modèles accessible[ ]
9.5.2⚠️ Enregistrement en tant que modèle (depuis l'éditeur) fonctionnel et modèle récupérable[ ]

9.6 Matrice des permissions

#ÉtapeOK
9.6.1Matrice accessible depuis le menu Admin[ ]
9.6.2Permissions affichées par rôle[ ]
9.6.3⚠️ Modifications sauvegardées et reflétées dans le comportement de l'application[ ]

10. Administration — Rapports & monitoring

10.1 Liste d'inventaire

#ÉtapeOK
10.1.1Accès à l'inventaire via le menu[ ]
10.1.2Filtres disponibles : bibliothèque, localisation, type, état[ ]
10.1.3Export de la liste[ ]

10.2 Frais (rapport global)

#ÉtapeOK
10.2.1Liste des transactions accessible[ ]
10.2.2Filtres par bibliothèque, date, type de frais[ ]

10.3 Statistiques (stats_cfg)

#ÉtapeOK
10.3.1Liste des configurations de statistiques accessible[ ]
10.3.2Création / édition d'une configuration[ ]
10.3.3⚠️ Vue détail d'une configuration : bouton "Données en temps réel" → données chargées et affichées dans le tableau de rapport[ ]
10.3.4Export des données de rapport (si disponible) télécharge le fichier[ ]

10.4 Prêts en cours (vue globale)

#ÉtapeOK
10.4.1Liste accessible depuis le menu[ ]
10.4.2Filtres (bibliothèque, type, état) fonctionnels[ ]

10.5 Demandes PEB (ILL — vue admin)

#ÉtapeOK
10.5.1Liste des demandes PEB accessible[ ]
10.5.2Changement de statut d'une demande[ ]
10.5.3Création d'une demande PEB pour un lecteur[ ]

11. Administration — Migrations

🔒 Rôle : admin système

11.1 Tâches de migration

#ÉtapeOK
11.1.1Liste des migrations accessible[ ]
11.1.2Détail d'une migration (statut, progression)[ ]

11.2 Données de migration (format)

#ÉtapeOK
11.2.1Recherche dans les données de migration[ ]
11.2.2Vue détail d'un enregistrement de migration[ ]

11.3 Dédoublonnage

#ÉtapeOK
11.3.1Interface de dédoublonnage accessible[ ]
11.3.2Recherche avec UI de dédoublonnage fonctionne[ ]
11.3.3Vue détail d'un doublon potentiel[ ]

Annexe A — Points de contrôle transversaux à vérifier sur chaque page

Ces vérifications s'appliquent à chaque section du protocole. Les noter séparément si elles échouent.

PointDescription
Console propreOuvrir les DevTools → Console. Aucune erreur JS non gérée, aucun ERROR TypeError, aucun ExpressionChangedAfterItHasBeenCheckedError Angular
Requêtes réseauAucune requête en 400/500 sans gestion visible côté UI
Mise à jour de listeToute action (créer, modifier, supprimer, payer, rembourser) met à jour la liste/vue sans nécessiter F5
Formulaires invalidesBouton "Sauvegarder" désactivé si formulaire invalide ; messages d'erreur inline visibles
Boutons disabledLes boutons disabled ont un tooltip explicatif
Champs requisTous les champs requis sont visibles (pas masqués par défaut)
TraductionsAucune clé de traduction brute (KEY.NOT.FOUND ou translate.xxx) visible
Accordéons/tabsOuverture et fermeture sans crasher, contenu chargé au bon moment
PaginationNavigation entre pages de résultats cohérente (pas de saut de page, pas de doublon)

Annexe B — Patterns de régression à surveiller lors de mises à jour majeures

Ces patterns représentent les types de bugs les plus fréquents lors de mises à jour du framework ou de refactorings importants. Les utiliser comme grille de lecture pendant le parcours de l'application.

CatégorieSymptôme à surveillerOù chercher en priorité
Mises à jour de listeUne action (ajout, paiement, retour) semble réussir (pas d'erreur) mais la liste ne reflète pas le changement → rechargement manuel révèle que l'action a bien eu lieuFrais lecteur, liste des retours, lignes de commande
Boutons inactifsUn bouton cliquable ne déclenche rien, pas de retour visuel, pas d'erreur consoleBoutons d'action dans les vues détail, formulaires avec logique conditionnelle
Champs formulaire absentsEn mode création, certains sous-champs requis ou optionnels n'apparaissent pas alors qu'ils devraientÉditeurs de notices (surtout champs répétables), éditeur de lecteur
Affichage conditionnel casséUn champ ou bloc s'affiche toujours (ou jamais) quel que soit l'état des donnéesSections conditionnelles dans les vues détail (notes, sections par rôle)
Encodage URLLa navigation ou la recherche produit des URLs avec des caractères encodés en double ou mal encodés, causant des erreurs ou des résultats inattendusURLs de recherche avec filtres actifs, navigation avec paramètres spéciaux
Onglet/panneau videUn onglet ou accordéon s'ouvre mais reste vide alors que des données existentOnglet Permissions dans le détail lecteur, onglets de commande
Erreurs 400 silencieusesUne action de formulaire retourne 400 côté réseau sans message d'erreur UI, ou avec un message générique peu utileFormulaires de frais, formulaires acquisitions

Protocole rédigé sur la base de l'analyse du code source de rero-ils-ui. À maintenir à jour lors de l'ajout de nouvelles fonctionnalités.