Aller au contenu

Lot 1 bis — Référentiel global et états de qualité par référentiel

02/10/2026. Séquence L1-1+2 du plan d’alignement, partie A, d’après la note d’amendement (AM-06, AM-16). Décisions appliquées : EC-089, EC-090, EC-101 ; écart ouvert : EC-100 (états du NOP).

  • Les états viennent du référentiel. Les états de qualité et de statut d’un référentiel, et leur ordre, sont une donnée de son pack ; ce n’est plus une liste figée dans le code ou dans la base.
  • Un catalogue global, des référentiels cochés. app.referentiel est partagé entre toutes les organisations ; chaque organisation coche les siens dans app.organisation_referentiel (RG-301).
  • L’affichage dépend de la catégorie, pas de l’état. Quatre catégories fermées : bio, conversion, conventionnel, hors statut. Le vert reste réservé à « bio ».
  • Les algorithmes ne changent pas. Mélange par le bas, verdict de revendication, critère de fin n° 3 : mêmes règles, mêmes cas de test.

Le pack référentiel porte etats, contrôlés à la publication par qualite.validerEtats.

Champ Contenu
code, libelle Identifiant stable, libellés français et anglais
categorie bio, conversion, conventionnel ou hors_statut (EC-090)
rang Plus haut = meilleur ; absent pour « hors statut » (suspendu, retiré), qui n’est pas une qualité
revendicable L’unité peut revendiquer le référentiel, avec un certificat en vigueur
vendable_sous État sous lequel un lot se vend, s’il ne se vend pas sous lui-même (RG-156)
exige_debut_conversion Un statut dans cet état exige une date de début de conversion

Packs du dépôt, sans ligne de décision :

Pack États
packs/referentiels/ue/1.0.0.json bio (3, revendicable), conversion année 2 et plus (2, revendicable), conversion année 1 (1, vendable en conventionnel), conventionnel (0), suspendu, retiré
packs/referentiels/nop/1.0.0.json Même liste, provisoire, à confirmer (EC-100)

Migration db/migrations/20261003100000_lot1bis_referentiel_global.sql :

  • app.referentiel (ancienne table par organisation) est renommée app.organisation_referentiel, sans changer ses identifiants (EC-101). certificat.referentiel_id et statut_conformite.referentiel_id désignent le référentiel coché ;
  • nouveau catalogue global app.referentiel : code, nature, libellés, pack référentiel. La publication d’un pack référentiel crée ou relie sa ligne ; l’API ne l’écrit pas ;
  • organisation_referentiel.code est une clé étrangère vers le catalogue : on ne coche qu’un référentiel connu ;
  • app.etats_referentiel(code) rend les états de la dernière version publiée du pack ;
  • statut_conformite : la liste figée des états est remplacée par le déclencheur, qui refuse un état inconnu (etat_inconnu), un référentiel sans états publiés (referentiel_sans_etats) et une conversion sans date de début quand l’état l’exige (debut_conversion_requis). Les lignes existantes ne changent pas.
  • qualite : EtatReferentiel, validerEtats, intersectionQualites(lots, etats), vendableSous(qualite, etats).
  • certification.peutRevendiquer({ etat, etats, certificats, date }) : raisons statut_inconnu, statut_hors_qualite, etat_non_revendicable, puis celles des certificats. Le verdict porte l’état et l’état vendable.
  • Vecteurs VT-QUAL et VT-CERT réécrits avec les états de l’UE en entrée : mêmes cas, mêmes conclusions. Les vecteurs d’etatVersQualite (VT-CERT-018 à 023) sont retirés avec la fonction.
  • GET /v1/conformite/statuts et GET /v1/conformite/verdict rendent chaque état avec son libellé et sa catégorie (EtatAffiche). Le champ qualite du verdict disparaît : l’état revendiqué est etat quand peut est vrai.
  • Le livret du moteur de règles se filtre sur les référentiels cochés et actifs.
  • TamponQualite reçoit { referentiel, libelle, categorie }. L’écran Certificats affiche les libellés du référentiel.
  • PowerSync : le compartiment globales descend le catalogue app.referentiel (les états sont dans le contenu du pack, déjà descendu) ; le compartiment organisation descend app.organisation_referentiel.
Test Ce qu’il vérifie
qualite.test.ts, VT-QUAL, VT-CERT Mélange par le bas selon l’ordre du référentiel, vendableSous, validerEtats, verdict
db/tests/l1-a6.sql (adapté) État inconnu, référentiel sans pack, conversion sans date, référentiel hors catalogue, catalogue fermé à l’API
db/tests/l1bis-1.sql États de la dernière version publiée, brouillon ignoré, catalogue visible de chaque organisation, lignes cochées isolées
apps/api/test/certification.test.ts, back-office.test.ts Verdicts et synthèse avec les états du référentiel
infra/powersync/regles.test.mjs Règles et contrat de données
packages/ui/src/jetons.test.ts Un symbole par catégorie, vert réservé à « bio », aucune couleur nouvelle pour « hors statut »