Lot 1 bis — Grille de conformité
02/10/2026. Séquence L1-3 du plan d’alignement, parties A et B, d’après la note d’amendement (AM-06, AM-11). Écarts ouverts : EC-104 (ce que la note laisse ouvert), EC-105 (sources et date d’effet des points UE), EC-106 (CCPB, aucune source), EC-107 (permission des écritures).
- Une grille par référentiel, publiée dans le pack. Chaque point porte sa source, ses activités, sa preuve attendue, son mode et ses dates. Les grilles ne se combinent pas.
- Cinq statuts : satisfait, preuve manquante, écart ouvert, à vérifier, non applicable.
- Le statut se calcule, il ne se stocke pas. « Non applicable » pour cause structurelle et « preuve manquante » se déduisent des faits. Seuls un résultat de règle et une déclaration de personne sont enregistrés.
- Jamais satisfait par défaut. Un point que personne n’a évalué est « à vérifier ».
Migration db/migrations/20261003120000_lot1bis_points_controle.sql :
| Table | Portée | Contenu |
|---|---|---|
app.point_controle |
Globale, ajout seul | Point publié par une version de pack référentiel. Un point automatique pointe vers une ligne de regle_decision du même pack (clé étrangère composite). Refus à code stable : regle_requise, regle_interdite, activite_inconnue |
app.evaluation_point |
Organisation, ajout seul | Résultat d’une règle ou déclaration d’une personne ; la plus récente fait foi (vue evaluation_point_en_vigueur, une par objet évalué). Motif obligatoire pour déclarer « satisfait » ou « non applicable » (motif_requis) |
app.preuve |
Organisation, ajout seul | Lien entre un fichier de la même organisation, un point et, facultativement, un objet et une évaluation |
Aussi : variable portee.nombre_ecarts au dictionnaire (module Membres et foncier). Les trois tables ne descendent pas sur le téléphone (L1-5 n’a filtré par module que les données de Membres et foncier ; la grille reste côté back-office). Tests : db/tests/l1bis-3.sql.
Module grille, fonctions pures (date, activités actives et état des modules en paramètres) :
statutDuPoint: non applicable (hors dates, module inactif, aucune activité du point exercée, ou déclaré avec motif), puis écart ouvert, puis à vérifier, puis preuve manquante, puis satisfait. Un point sans pièce attendue n’est jamais « preuve manquante ».synthesePretAudit: décompte par référentiel puis par thème, pourcentage de satisfaits en centièmes de point sur les points applicables. Aucun total tous référentiels confondus.validerGrille: contrôle à la publication (code en double, règle absente du pack, activité ou module inconnus, dates incohérentes).
Vecteurs : testdata/domain/grille/ (VT-GRILLE-001 à 017 et 101 à 104).
Pack et publication
Section intitulée « Pack et publication »grille est une rubrique facultative de ContenuPackReferentiel : un pack déjà publié garde son empreinte. La publication contrôle la grille avec validerGrille et l’écrit en une transaction avec les règles.
Pack ue 1.1.0 (packs/referentiels/ue/1.1.0.json), cinq points tirés du cahier v1.2 §1.6 et de la note : UE-34 (notification et certification), UE-PORTEE (automatique : règle UE-PORTEE, portee.nombre_ecarts > 0, issue « signaler »), UE-36 (groupe, activité collecte), UE-39 (conservation cinq ans), UE-32 (étiquetage). Aucun pack CCPB : aucune source dans le dépôt (EC-106).
API (partie B, contrat 1.15.0)
Section intitulée « API (partie B, contrat 1.15.0) »Service apps/api/src/back-office/grille.service.ts. La lecture n’écrit rien ; les écritures sont des actions explicites.
| Route | Droit | Rôle |
|---|---|---|
GET /v1/conformite/grille?date= |
tout membre | Pour chaque référentiel coché et actif : points de la dernière version publiée de sa grille, statut calculé à la date (grille.statutDuPoint), cause de « non applicable », pièces, dernière déclaration ; synthèse par référentiel et par thème |
POST /v1/conformite/grille/evaluer?date= |
review.resolve |
Écrit l’évaluation des points automatiques applicables (source regle) et ouvre un constat par écart qui n’en a pas déjà un d’ouvert (AM-15). Rejouer n’écrit rien de plus |
POST /v1/conformite/evaluations |
review.resolve |
Déclare le statut d’un point manuel (satisfait, ecart_ouvert, a_verifier, non_applicable) ; motif obligatoire pour « satisfait » et « non applicable » (motif_requis) ; un point automatique ne se déclare pas (point_automatique) |
POST /v1/conformite/preuves |
review.resolve |
Lie un fichier déjà déposé à un point (fichier_inconnu, point_inconnu, referentiel_inconnu) |
Le point automatique est jugé par regles.evaluerPoint sur la ligne regle_code de son pack. Le contexte que l’API construit ne contient que portee.nombre_ecarts (écarts de ecartsDePortee) ; une règle qui lirait une autre variable ou un paramètre donne « à vérifier », jamais une valeur par défaut (PC-07).
Écran « Prêt pour l’audit »
Section intitulée « Écran « Prêt pour l’audit » »/pret-audit, section Conformité. Tableau de synthèse (un total par référentiel puis un par thème, aucun total commun), puis les points de chaque grille par thème. Chaque statut porte un symbole et un libellé, aucun n’emprunte le vert (réservé à « bio »). Avec review.resolve : bouton « Évaluer les points automatiques », déclaration d’un point avec motif, liaison d’une pièce par l’identifiant de son fichier (le dépôt de fichier depuis l’écran viendra avec fichiers/url-envoi, reste du lot 0).
Démonstration
Section intitulée « Démonstration »Le chargeur publie ue 1.1.0 : sur le jeu « ananas Togo », l’écart de portée volontaire (conditionnement et étiquetage hors du certificat UE) fait de UE-PORTEE un point « écart ouvert » ; les quatre points manuels sont « à vérifier ». Rejeu vérifié deux fois sur biotrace_test.
apps/api/test/grille-conformite.test.ts (12 tests : statuts, synthèse, droits, motif, pièce, évaluation et constat sans doublon, portée corrigée) et apps/api/test/grille.test.ts (publication).
Le bandeau « Écart de portée » de l’écran Certificats reste en place : il détaille les activités en écart, ce que le point UE-PORTEE ne fait pas. Le point de groupe (article 36) et la liste des points CCPB sont à compléter (EC-105, EC-106).