Aller au contenu

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).

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).

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).

/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).

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).