Note d'amendement de conception – modules, règles et normes
02/10/2026. Statut : relue par l’équipe le 02/10/2026, décisions AM-01 à AM-17 décidées. Source de rang 0 (EC-088). Identifiants de permission en anglais, préfixés par le code du module (EC-092).
BioTrace est un outil de préparation et de preuve, pas un auditeur. Il enregistre fidèlement ce qui se passe, garde les preuves, signale les écarts et produit le dossier d’audit. L’organisme de certification reste seul juge.
Cette note amende les décisions du Lot 0, du découpage en lots, du plan du Lot 1 et du cahier des charges v1.2. Elle remplace aussi une partie de la note d’analyse critique du même jour : les douze archétypes, les quatre couches de référentiels et le moteur de combinaison sont abandonnés.
Ce qu’elle retient tient en six points :
- Quatre familles de règles : les invariants (code figé), les règles de processus (code avec réglages bornés), les grilles de conformité (données) et les documents (modèles).
- Cinq vrais invariants seulement. Tout le reste est paramétrable, si le besoin existe.
- Un arbre d’activités typé (activités, sous-activités, étapes), chargé par défaut depuis les packs filière. Chaque nœud se paramètre et s’active par organisation, et les activités actives ouvrent les modules.
- Des normes juxtaposées, jamais combinées. Chaque norme est une grille de points de contrôle. Être conforme UE et NOP, c’est satisfaire les deux grilles. Seule une courte liste fermée de paramètres se combine, comme l’exige RG-301.
- Un seul moteur de règles, volontairement simple : un dictionnaire de données, des points d’accroche, des tables de décision et six issues possibles. Chaque évaluation produit un constat d’écart.
- Des procédés exécutés étape par étape, avec des sorties typées : produit, coproduit, sous-produit, rebut, perte.
Les identifiants AM-01 à AM-17 désignent les décisions de cette note. Elles ont été relues par l’équipe le 02/10/2026 et ont le statut « Décidé ».
Principes directeurs amendés
Section intitulée « Principes directeurs amendés »Ces principes s’ajoutent à ceux du découpage en lots. En cas de conflit, ce sont eux qui s’appliquent.
| Code | Principe | Conséquence |
|---|---|---|
| P1 | Le programme signale, la personne décide (RG-308, généralisé) | On ne bloque que ce qui rendrait le registre faux ou ce qu’un texte interdit sans exception |
| P2 | La complexité est absorbée par l’équipe BioTrace, jamais par l’utilisateur | Pas de vocabulaire technique à l’écran (« pack », « table de décision », « point d’accroche ») ; un écran montre seulement ce qui s’applique ici et maintenant |
| P3 | Une norme se juxtapose, elle ne se combine pas | Une grille par référentiel ; pas de calcul de priorité entre normes, sauf sur une liste fermée de clés (AM-08) |
| P4 | Le mécanisme est dans le code, le contenu dans les données | Une évolution de norme se fait sans code, tant qu’elle porte sur des données connues du dictionnaire |
| P5 | Une règle ne lit que ce que le dictionnaire expose | Un besoin nouveau se traduit par l’ajout d’une variable ou d’un indicateur, qui sert ensuite à toutes les normes |
| P6 | On paramètre ce qui varie réellement, pas ce qui pourrait varier | Un réglage n’est ajouté que lorsqu’on a constaté deux besoins différents |
| P7 | Chaque écart laisse une trace explicable | Toute évaluation qui produit une issue crée un constat : règle, version, source, valeur constatée, valeur attendue |
| P8 | Le hors-ligne reste la contrainte qui tranche | Une règle doit pouvoir s’évaluer sur le téléphone ; sinon, elle est marquée « évaluée au serveur » et son issue n’est jamais un rejet du fait saisi |
Registre des amendements
Section intitulée « Registre des amendements »Sur 34 décisions existantes relues, 12 sont maintenues, 20 amendées et 2 remplacées. Aucune décision structurante du Lot 0 n’est remise en cause : partie double, synchronisation, RLS, packages/domain et vecteurs de tests restent tels quels. Les amendements portent sur le paramétrage, les rôles, la qualité biologique et le périmètre du noyau.
| Décision existante | Source | Statut | Amendement | Réf. |
|---|---|---|---|---|
| PC-01 Formules dans le code, valeurs dans des règles | Paramètres contextuels | Maintenu | Les formules deviennent les indicateurs du dictionnaire | AM-09 |
| PC-02 Catalogue de facteurs fermé | Paramètres contextuels | Amendé | Ajout des facteurs activite, type_etape, nature_sortie, marche_destination |
AM-09, AM-12 |
| PC-03 Facteurs numériques en classes | Paramètres contextuels | Maintenu | Sans changement | – |
| PC-04 La règle la plus précise l’emporte | Paramètres contextuels | Maintenu | Vaut pour les paramètres ; les tables de décision appliquent toutes les lignes vraies | AM-09 |
| PC-05 La couche organisation l’emporte | Paramètres contextuels | Amendé | Vaut pour les clés filière. Une clé citée par une grille ou une table réglementaire est non surchargeable ; l’organisation peut seulement la durcir, dans les bornes | AM-06 |
| PC-06 Refus des ambiguïtés à la publication | Paramètres contextuels | Amendé | Étendu aux tables de décision : une ligne sans source, sans issue ou sans date d’effet est refusée | AM-09 |
| PC-07 Aucune valeur inventée | Paramètres contextuels | Maintenu | Une variable manquante produit l’issue « à vérifier », jamais une valeur par défaut | AM-09 |
| PC-08 Instantané de la règle appliquée | Paramètres contextuels | Amendé | Étendu aux règles évaluées et à leurs constats | AM-15 |
| Chaque campagne fige la version du pack | Découpage | Amendé | Le pack filière reste figé par campagne ; grilles et tables réglementaires sont résolues à la date de référence de chaque ligne | AM-11 |
| Expressions des packs en CEL (Recommandé, ADR avant le Lot 4) | Découpage | Amendé | ADR avancée au Lot 0, car le moteur de règles en dépend | AM-09 |
| Formulaires JSON Schema, éditeur borné | Découpage | Amendé | Étendu : une grille peut ajouter des champs exigés à un registre, par surcouche versionnée | AM-06 |
| Front organisé en modules par domaine | Découpage | Amendé | Chaque domaine devient un module activable, avec un manifeste | AM-05 |
| Mouvements en partie double | Découpage, schéma | Maintenu | Devient l’invariant I1 ; chaque mouvement de transformation est rattaché à son étape | AM-03, AM-12 |
Rôle technique unique equipe_biotrace |
Keycloak | Amendé | Scindé en rédacteur, relecteur, publieur et support. Amendé par EC-099 : trois rôles génériques de l’éditeur, sans séparation des tâches | AM-14 |
| Ensembles de permissions par défaut | Keycloak | Amendé | Permissions préfixées par module ; ensembles filtrés selon les modules actifs | AM-05 |
Séparations des tâches figées (droits) |
Paquet domain | Maintenu | Restent des règles de processus codées ; RG-304 et RG-305 s’ajoutent à la liste | AM-02 |
QualiteLot : union de quatre états figée |
Paquet domain | Amendé | États et ordre définis par référentiel ; l’algorithme d’intersection ne change pas | AM-16 |
expressions : interface réservée |
Paquet domain | Amendé | Implémentée au Lot 0 | AM-09 |
Tables pack, pack_version |
Schéma | Amendé | Type de pack filiere ou referentiel ; un pack référentiel porte grilles et tables de décision |
AM-06 |
| EC-011 Tolérance de bilan par produit | Écarts | Amendé | Étendue à l’étape et au procédé | AM-12 |
| EC-012 Double validation par auteurs distincts | Écarts | Maintenu | Règle de processus, sans changement | AM-02 |
| EC-013 Trois issues d’une commande | Écarts | Maintenu | Une issue « bloquer » évaluée au serveur sur un fait déjà saisi devient « acceptée en file de contrôle » | AM-09 |
| EC-015 Intrants dans le bilan | Écarts | Maintenu | Intrants rattachés à l’étape qui les consomme | AM-12 |
| EC-024 Certification portée par le certificat | Écarts | Amendé | Le certificat reçoit une portée : activités, produits, sites, unités | AM-07 |
A6 statut_conformite à six états, peutRevendiquer |
Plan du Lot 1 | Amendé | États fournis par le référentiel ; peutRevendiquer reste une fonction, paramétrée par ces états |
AM-16 |
| Producteurs et foncier dans le noyau | Plan du Lot 1 | Amendé | Passent au module Membres et foncier | AM-05 |
| Recettes de transformation paramétrables | Plan du Lot 1 | Remplacé | Remplacées par l’arbre d’activités du pack filière (AM-04) | AM-12 |
| RG-300 Profil à l’ouverture | Cahier v1.2 | Maintenu | Le profil est un préréglage de l’arbre d’activités | AM-04 |
| RG-301 Standards cochés, règle la plus restrictive | Cahier v1.2 | Amendé | Les standards cochés ouvrent des grilles ; « la plus restrictive » ne vaut que pour la liste fermée AM-08 | AM-06, AM-08 |
| RG-302 Producteur individuel sans SCI | Cahier v1.2 | Maintenu | Se traduit par le module SCI non activé | AM-05 |
| RG-308 Le programme signale, la personne décide | Cahier v1.2 | Maintenu | Fonde l’issue « exiger une note » | AM-09 |
| §2.2 Cinq activités élémentaires | Cahier v1.2 | Amendé | Deviennent les regroupements du premier niveau de l’arbre d’activités | AM-04 |
| Archétypes, quatre couches, moteur de combinaison | Note d’analyse critique | Remplacé | Remplacés par les grilles juxtaposées et le moteur simple | AM-06, AM-09 |
| Pack référentiel, qualification calculée | Note d’analyse critique | Amendé | Pack conservé et simplifié ; la qualification devient un filtre | AM-06, AM-07 |
Les nouvelles décisions AM-01 à AM-17 sont détaillées dans les sections suivantes et récapitulées ici :
| Réf. | Décision | Statut |
|---|---|---|
| AM-01 | BioTrace prépare et prouve ; il ne certifie pas | Décidé |
| AM-02 | Quatre familles de règles | Décidé |
| AM-03 | Cinq invariants figés | Décidé |
| AM-04 | Arbre d’activités typé : types fermés, instances dans les packs, activation par nœud | Décidé |
| AM-05 | Modules activables, avec manifeste et activation datée | Décidé |
| AM-06 | Une grille de conformité par référentiel, juxtaposée | Décidé |
| AM-07 | Qualification par filtre et portée du certificat | Décidé |
| AM-08 | Combinaison limitée à une liste fermée de clés | Décidé |
| AM-09 | Moteur de règles par tables de décision | Décidé |
| AM-10 | Rayon de lecture d’une règle et évaluation au serveur | Décidé |
| AM-11 | Date de référence par ligne réglementaire | Décidé |
| AM-12 | Exécution des procédés, sorties typées et suivi par étape | Décidé |
| AM-13 | Atelier de publication ; Git en attendant | Décidé |
| AM-14 | Rôles de l’équipe BioTrace séparés | Décidé |
| AM-15 | Constat d’écart enregistré à chaque issue | Décidé |
| AM-16 | États de qualité définis par référentiel | Décidé |
| AM-17 | Tri des 957 exigences en quatre familles à l’import | Décidé |
Les quatre familles de règles et les cinq invariants (AM-02, AM-03)
Section intitulée « Les quatre familles de règles et les cinq invariants (AM-02, AM-03) »Toute règle de BioTrace appartient à l’une des quatre familles ci-dessous. Lors de chaque ajout, on commence par déterminer sa famille, car c’est elle qui fixe où la règle vit et qui peut la modifier.
| Famille | Définition | Où elle vit | Qui la modifie | Exemples |
|---|---|---|---|---|
| Invariants | Règles dont la violation rendrait le registre faux | Code et contraintes de la base | Personne, sauf décision d’architecture | Voir le tableau suivant |
| Règles de processus | Comportement propre au produit BioTrace, défini par le cahier | Code, avec réglages bornés | Le comportement : un développeur, après mise à jour du cahier. Les réglages : la direction ou le RSCI | RG-230 (circuit de validation), RG-032 (dévalidation), RG-172 (quarantaine au-delà du seuil), RG-304 et RG-305 (signature et zones), EC-012 |
| Grilles de conformité | Ce qu’une norme demande de prouver, et les contrôles qui en découlent | Données : packs référentiel | Équipe BioTrace | Points UE, NOP, CCPB, Naturland |
| Documents et rapports | Ce qui est produit pour un tiers | Modèles en données, moteur de génération en code | Client (modèles personnalisés, RG-104) et équipe BioTrace | Reçu, fiche de transformation, rapport « prêt pour l’audit » |
Les cinq invariants
Section intitulée « Les cinq invariants »| Code | Invariant | Mise en œuvre actuelle | Ce qui reste paramétrable autour |
|---|---|---|---|
| I1 | Chaque gramme est compté : toute entrée et toute sortie est un mouvement équilibré, et un écart est un mouvement déclaré | Partie double, SB-06, SB-07 | Tolérance d’écart, issue en cas de dépassement |
| I2 | Rien ne s’efface : une correction est un nouvel événement, avec son auteur et sa date | Ajout seul, journal, SB-04, SB-05, SB-08 | Qui peut corriger ou dévalider |
| I3 | Un identifiant officiel est unique et n’est jamais réutilisé | Numérotation (EC-009, EC-010) | Gabarit affiché (RG-303) |
| I4 | Tout lot a une origine enregistrée | Mouvement de création obligatoire | Niveau de détail exigé sur l’origine |
| I5 | Un lot en quarantaine ne sort pas tant qu’il y est | RG-161 | Ce qui déclenche la quarantaine, qui la lève |
Sont requalifiées en règles de processus des règles jusque-là présentées comme intangibles : le blocage de la réception sur certificat expiré (RG-014), car le NOP accepte un fournisseur exempté avec preuves renforcées ; la vente limitée aux lots validés (RG-081) ; la séparation des fonctions. Elles restent codées, et leur réglage éventuel passe par une option prévue dans le produit.
Réglages bornés laissés au client
Section intitulée « Réglages bornés laissés au client »- Les ensembles de permissions : qui crée, valide, dévalide, lève un contrôle (matrice §2.6 du cahier).
- Les seuils filière dans leurs bornes : humidité, impuretés, tolérances de rendement (moteur de paramètres).
- Le mode d’issue, quand le cahier laisse le choix : signaler avec une note, ou bloquer.
- L’activation d’un circuit : pas de circuit de validation pour le producteur individuel (RG-302).
- Les listes de contrôle du SCI et les modèles de documents.
Activités, modules et activation par organisation (AM-04, AM-05)
Section intitulée « Activités, modules et activation par organisation (AM-04, AM-05) »L’opérateur déclare ce qu’il fait. BioTrace en déduit les modules à proposer et les grilles qui le concernent. C’est un monolithe modulaire : toutes les tables sont déployées pour tous, et l’activation se fait à l’exécution, par organisation.
Arbre d’activités typé (AM-04)
Section intitulée « Arbre d’activités typé (AM-04) »Activités élémentaires et étapes de procédé ne forment plus qu’une seule notion : un arbre d’activités. Chaque nœud de l’arbre se déclare, se paramètre et s’active de la même façon, quel que soit son niveau.
Le type est fermé, l’instance est ouverte. Le type de chaque nœud est pris dans un catalogue fermé et versionné, défini par BioTrace : séchage, exportation, fumigation… C’est le type que les normes, les portées de certificat et les modules utilisent. L’instance est définie par le pack filière, par exemple « séchage solaire des noix de cajou », avec ses propres mesures et ses propres seuils. Un pack peut créer autant d’instances qu’il le souhaite, mais jamais de nouveau type.
| Niveau | Exemple (cajou) | Origine |
|---|---|---|
| Activité | Transformation | Catalogue BioTrace |
| Sous-activité | Décorticage | Pack filière, typée par le catalogue |
| Étape | Cuisson à la vapeur, décorticage, séchage, dépelliculage, calibrage | Pack filière, typée par le catalogue |
L’arbre est limité à trois niveaux. Au-delà, il devient illisible pour l’opérateur, et les rendements ne sont plus interprétables par l’auditeur.
Les cinq activités du cahier (§2.2) restent les regroupements affichés à l’écran. Le premier niveau du catalogue les détaille :
| Regroupement (cahier) | Activités de premier niveau |
|---|---|
| Production | Production végétale, cueillette sauvage, collecte auprès de membres |
| Achat | Achat auprès de tiers, importation |
| Nettoyage / triage | Nettoyage et triage, stockage |
| Transformation | Transformation, conditionnement et étiquetage, sous-traitance |
| Vente / export | Vente nationale, exportation, transport et distribution |
Ce que porte chaque nœud, à tous les niveaux :
- son type et son libellé ;
- ses entrées, ses sorties typées et ses intrants ;
- ses mesures, qui entrent dans le dictionnaire de données ;
- ses paramètres, c’est-à-dire des clés du moteur de paramètres, résolues avec le facteur
activiteoutype_etape; - ses points d’accroche ;
- son caractère : obligatoire ou facultatif, critique ou non (OSP-05), sous-traitable ou non ;
- son ordre parmi ses frères, avec des branches possibles ;
- les modules qu’il propose, le cas échéant.
L’utilisateur ouvre n’importe quel nœud et voit ses paramètres, avec leur valeur, leur origine (pack ou organisation) et leurs bornes. La présentation est la même au niveau « Transformation » et au niveau « Séchage ».
Chargement et activation
- Le pack filière propose un arbre par défaut. Par exemple, le pack cajou charge collecte, séchage, stockage, décorticage et exportation, avec leurs étapes.
- À l’ouverture du compte, l’opérateur part de l’arbre du ou des packs choisis. Il décoche ce qu’il ne fait pas, et peut ajouter une activité du catalogue que le pack n’a pas prévue. Le profil (RG-300) n’est qu’un préréglage de cet arbre.
- Ensuite, la direction active ou désactive un nœud. Chaque changement est daté, journalisé et motivé, par organisation et, si besoin, par site.
- Garde-fous :
- un nœud obligatoire ou critique ne se désactive pas tant que son parent est actif ;
- désactiver un nœud désactive ses enfants ;
- les données passées restent en lecture seule ;
- les points de grille liés à un nœud désactivé deviennent « non applicables ».
- Les paramètres d’un nœud se surchargent dans les bornes du pack (PC-05). Une clé réglementaire ne peut qu’être durcie.
Un seul mécanisme pour trois usages. Les activités actives de premier niveau déterminent les modules proposés. Les nœuds actifs, à tous les niveaux, déterminent les points de grille applicables. Les étapes actives déterminent ce que l’ordre de transformation déroule (AM-12).
Noyau et modules (AM-05)
Section intitulée « Noyau et modules (AM-05) »| Couche | Contenu | Proposé par |
|---|---|---|
| Noyau, toujours actif | Organisation et sites, tiers, produits, lots et mouvements, stocks, documents et preuves, traçabilité et rappel, campagnes, référentiels et grilles, file de contrôle, journal, administration | – |
| Membres et foncier | Producteurs, groupements, parcelles, cartographie, capacité | Production végétale, collecte, cueillette |
| Collecte | Collecte, reçus, agents acheteurs | Collecte auprès de membres |
| SCI | Inspections internes, non-conformités, comité, conflits d’intérêts | Collecte auprès de membres, si certification de groupe |
| Planification, intrants et avances, paiements | Modules du Lot 4 | Collecte auprès de membres |
| Réception | Réception de fournisseurs, contrôle à réception | Achat, importation |
| Préparation | Nettoyage, transformation par procédés, laboratoire | Nettoyage, transformation |
| Commercialisation | Ventes, exportation (COI, NOP Import Certificate), transport | Vente, exportation |
| EUDR | Diligence raisonnée, export GeoJSON | Exportation vers l’UE, si le produit est concerné |
Le manifeste d’un module
Section intitulée « Le manifeste d’un module »Chaque module déclare dans le code :
- son code et les activités qui le proposent ;
- ses dépendances (SCI → Membres et foncier ; paiements → Collecte) ;
- ses permissions, préfixées par son code (
collection.record,inspection.record, EC-092) ; - ses écrans, ses routes d’API et ses commandes hors-ligne ;
- ses types de mouvements ;
- ses points d’accroche et les variables qu’il ajoute au dictionnaire (AM-09) ;
- ses modèles de documents.
Le manifeste pilote quatre filtres : les gardes de l’API et des commandes, les menus, les règles de synchronisation PowerSync, et les permissions proposées dans les ensembles.
Règles d’activation
Section intitulée « Règles d’activation »- La table
organisation_moduleenregistre chaque activation et désactivation, avec la date, l’auteur et le motif. - La direction active les modules. BioTrace propose ceux qui correspondent aux activités déclarées, sans les imposer.
- Un module désactivé passe en lecture seule : ses données restent visibles et exportables.
- On ne peut pas désactiver un module dont dépend un module actif.
- Un point de grille qui porte sur un module inactif est marqué non applicable, jamais « non conforme ».
Normes : grilles de conformité juxtaposées (AM-06, AM-07, AM-08, AM-11, AM-16)
Section intitulée « Normes : grilles de conformité juxtaposées (AM-06, AM-07, AM-08, AM-11, AM-16) »Une norme est décrite comme le fait un auditeur : une grille de points de contrôle. Chaque référentiel coché par l’opérateur (UE, NOP, CCPB, Naturland…) ouvre sa grille. Les grilles ne se combinent pas : chacune est évaluée et affichée pour elle-même.
Le pack référentiel (AM-06)
Section intitulée « Le pack référentiel (AM-06) »Un pack de type referentiel contient :
- l’identité du référentiel : code, nature (norme publique, organisme de certification, standard privé), textes sources ;
- ses états de qualité et leur ordre (AM-16) ;
- sa grille de points de contrôle ;
- ses tables de décision (AM-09) ;
- ses paramètres réglementaires, non surchargeables par l’organisation sauf pour les durcir ;
- ses surcouches de registres et ses modèles de documents propres ;
- ses vecteurs de tests.
Un organisme ou un standard privé est un pack comme un autre. Naturland est une grille de plus, pas une couche au-dessus de l’UE. Quand un standard privé renvoie à la norme publique, sa grille ne reprend que ses exigences propres, et l’opérateur coche les deux.
Un point de contrôle
Section intitulée « Un point de contrôle »| Champ | Contenu | Exemple |
|---|---|---|
| Code et libellé | Identifiant stable, libellé lisible | CER-39 · Opérations dans la portée du certificat |
| Source | Texte, article, citation courte | 7 CFR 205, portée de la certification |
| Activités concernées | Liste d’activités élémentaires | Toutes |
| Objet | Ce sur quoi porte le point | Opération, lot, site |
| Preuve attendue | Type de pièce ou d’enregistrement | Certificat avec portée |
| Échéance ou fréquence | Le cas échéant | Annuelle |
| Mode | Automatique (une règle du moteur) ou manuel (coché, avec pièce) | Automatique |
| Dates | Date d’effet, date de fin, date de référence (AM-11) | Date de l’opération |
Un point a cinq statuts possibles par organisation : satisfait, preuve manquante, écart ouvert, à vérifier, non applicable. Le tableau « prêt pour l’audit » les affiche par référentiel et par thème.
Qualification par filtre (AM-07)
Section intitulée « Qualification par filtre (AM-07) »Il n’y a pas de calcul de qualification. L’écran affiche les points dont les activités recoupent celles qui sont déclarées. Deux contrôles s’y ajoutent :
- un écart de portée : une activité déclarée qui n’est pas couverte par la portée du certificat, pour un référentiel coché ;
- une condition d’éligibilité : la certification de groupe UE, ou les opérations exemptées NOP, exprimées comme des points ordinaires.
Le certificat reçoit pour cela une portée : référentiel, activités, catégories de produits, sites, unités incluses et exclues. Elle s’applique aussi aux fournisseurs et aux clients.
Combinaison limitée à une liste fermée (AM-08)
Section intitulée « Combinaison limitée à une liste fermée (AM-08) »La plupart des cas de « règle la plus restrictive » (RG-301) se règlent d’eux-mêmes : chaque grille applique ses propres seuils. Par exemple, les seuils de taille du groupe n’existent que dans la grille UE. Une combinaison n’est nécessaire que lorsque BioTrace doit calculer une seule valeur pour agir. Ces clés sont listées et codées une par une :
| Clé | Stratégie | Raison |
|---|---|---|
| Durée de conservation avant purge | Date la plus tardive | Une seule purge possible |
| Taux de ré-inspection et de contrôles non annoncés | Valeur la plus haute | Un seul programme d’inspection |
| Taille d’échantillon d’inspection | Valeur la plus haute | Un seul tirage |
| Délai de réponse à une demande d’information | Délai le plus court | Une seule échéance affichée |
Ajouter une clé à cette liste est une décision de produit, prise en code, avec ses vecteurs de tests.
Dates d’effet (AM-11)
Section intitulée « Dates d’effet (AM-11) »- Le pack filière reste figé par la campagne, comme aujourd’hui. Cela protège les rendements et les calibrations.
- Chaque point de grille et chaque ligne de table réglementaire porte une date d’effet, une date de fin éventuelle et une date de référence : opération, récolte, création du lot ou émission du certificat. C’est le choix de la date de référence qui exprime une disposition transitoire du texte.
- Une nouvelle version ne remet jamais en cause une opération passée. Elle peut ouvrir des constats sur l’existant, par exemple sur des lots encore en stock.
États de qualité par référentiel (AM-16)
Section intitulée « États de qualité par référentiel (AM-16) »Le type QualiteLot, qui fige aujourd’hui quatre états, devient une donnée du référentiel : la liste des états et leur ordre. Par exemple, l’UE définit bio, conversion A2+, conversion A1 et conventionnel. Le NOP a sa propre liste. Les catégories d’étiquetage NOP (100 % organic, organic, made with organic) sont calculées à partir de la composition, par un indicateur du dictionnaire. intersectionQualites et peutRevendiquer gardent leur algorithme, mais lisent l’ordre fourni par le référentiel.
Moteur de règles (AM-09, AM-10, AM-15)
Section intitulée « Moteur de règles (AM-09, AM-10, AM-15) »Un seul mécanisme sert aux contrôles des normes, aux points automatiques des grilles et aux seuils filière qui déclenchent une action. Il repose sur quatre éléments : un dictionnaire de données, des points d’accroche, des tables de décision et une liste fermée d’issues. Ce n’est pas un moteur BPMN : il ne dessine ni n’orchestre aucun processus. Il évalue des conditions à des moments définis.
Dictionnaire de données
Section intitulée « Dictionnaire de données »C’est la liste des variables qu’une règle a le droit de lire, avec pour chacune son nom, son type, son unité et sa disponibilité hors-ligne. Les variables ont trois origines :
| Origine | Exemples | Ajout |
|---|---|---|
| Noyau | lot.quantite_g, lot.qualite[UE], operation.date, fournisseur.certificat.statut, utilisateur.roles |
Code, par l’équipe de développement |
| Pack filière | etape.mesures.humidite_pm, etape.mesures.temperature_dc, attributs typés du produit |
Données : toute mesure déclarée par une étape devient une variable |
| Indicateurs calculés | indicateur.rendement_pm, indicateur.pourcentage_bio, indicateur.lignee.qualite_min, indicateur.jours_depuis(evenement) |
Code, une fois, puis réutilisé partout |
Le dictionnaire est généré à partir des manifestes des modules et des packs publiés. Les valeurs suivent la convention du Lot 0 : entiers, grammes, centièmes de point.
Points d’accroche
Section intitulée « Points d’accroche »Un point d’accroche est un moment où des règles sont évaluées. Chaque module déclare les siens, et chaque étape d’un procédé en hérite automatiquement.
reception.avant_validation,collecte.avant_validationetape.avant_validation(pour toute étape de procédé),transformation.avant_cloturevente.avant_expedition,document.avant_emissioncertificat.changement_statut,campagne.avant_clotureperiodique.quotidien, pour les échéances et la surveillance
Tables de décision
Section intitulée « Tables de décision »Chaque ligne d’une table a la forme suivante.
| Point d’accroche | Contexte (facteurs) | Condition | Issue | Source | Date d’effet |
|---|---|---|---|---|---|
| Réception, avant validation | Produit soja | etape.mesures.humidite_pm > param('humidite_max') |
Quarantaine et non-conformité | RG-172 | Campagne |
| Réception, avant validation | Référentiel NOP | Fournisseur exempté et pièce d’origine absente | Bloquer | 7 CFR 205.101 | Date de l’opération |
| Étape « mûrissement » | NOP, hors fruits tropicaux et agrumes | Éthylène utilisé | Bloquer | TRF-52 | Date de l’opération |
| Clôture de campagne | Référentiel UE | Surface d’un membre > param('surface_max_membre') |
Signaler, note exigée | RG-301, RG-308 | Date de clôture |
Règles d’écriture :
- Le contexte utilise les facteurs existants (produit, référentiel, activité, type d’étape…). La condition utilise les variables du dictionnaire.
- Les seuils ne sont jamais écrits en dur dans une ligne : la ligne appelle
param('…'), résolu par le moteur de paramètres existant. Le seuil se règle donc à un seul endroit. - Toutes les lignes vraies s’appliquent. Il n’y a pas de priorité entre lignes : chaque ligne vraie produit son issue et son constat, et l’issue la plus forte détermine ce que l’utilisateur peut faire.
- Une condition simple (variable, comparaison, valeur) se saisit par formulaire. CEL n’est utilisé que pour une condition composée, avec des vecteurs de tests obligatoires.
- La table est stockée en données et compilée en CEL, que le téléphone et le serveur évaluent avec la même bibliothèque.
Les six issues, de la plus faible à la plus forte
Section intitulée « Les six issues, de la plus faible à la plus forte »- Signaler : alerte visible, sans action requise.
- Exiger une note : l’utilisateur continue après avoir justifié (RG-308).
- Exiger une pièce : l’action attend une preuve jointe.
- Créer une non-conformité ou une tâche, assignée au RSCI ou à un rôle.
- Mettre en quarantaine l’objet (RG-172, invariant I5).
- Bloquer l’action : validation, expédition, signature ou émission.
« Bloquer » vise toujours une action, jamais l’enregistrement d’un fait. Une collecte déjà réalisée est toujours enregistrée. Si une règle évaluée au serveur la met en défaut, elle est « acceptée en file de contrôle » (EC-013). Une variable manquante ne produit jamais d’issue silencieuse : elle produit un constat « à vérifier » (PC-07).
Rayon de lecture et hors-ligne (AM-10)
Section intitulée « Rayon de lecture et hors-ligne (AM-10) »Une règle lit l’objet en cours, ses entrées directes, l’étape précédente et les indicateurs de lignée préparés par le noyau. Elle ne parcourt pas librement la base.
Le serveur compile pour chaque organisation un livret de règles : les lignes applicables pour la période, sans le texte inutile au téléphone. Ce livret descend par PowerSync. Une ligne qui a besoin de données absentes du téléphone est marquée « évaluée au serveur » : son issue apparaît à la synchronisation. Chaque commande porte la version du livret, et le serveur réévalue à la synchronisation.
Le constat d’écart (AM-15)
Section intitulée « Le constat d’écart (AM-15) »Chaque ligne vraie crée un constat, dans une table en ajout seul. Il contient :
- la règle, sa version et sa source ;
- l’objet concerné ;
- la valeur constatée, la valeur attendue et l’écart ;
- l’issue ;
- le statut : ouvert, justifié par une note, levé, clos ;
- l’auteur et la date de chaque changement de statut.
Les constats alimentent les alertes, la file de contrôle, les points automatiques des grilles et le tableau « prêt pour l’audit ». C’est ainsi que l’application « sait » qu’il y a un écart, et peut expliquer pourquoi.
Exécution des procédés et sorties typées (AM-12)
Section intitulée « Exécution des procédés et sorties typées (AM-12) »Les « recettes de transformation paramétrables » du Lot 1 sont remplacées par l’arbre d’activités (AM-04). Une sous-activité de transformation, avec ses étapes, joue le rôle de procédé. Cette section décrit comment ce procédé s’exécute, et ce que deviennent ses sorties. Le même modèle sert au nettoyage et au triage, et pourra servir aux cycles de production du pack fruits.
Ce que devient chaque sortie
Section intitulée « Ce que devient chaque sortie »| Nature | Devient un lot ? | Qualité biologique |
|---|---|---|
| Produit principal | Oui, avec un numéro officiel | Héritée des entrées, par intersection |
| Coproduit | Oui, à séquence héritée (RG-303) | Héritée |
| Sous-produit valorisé | Oui, s’il est vendu, cédé ou stocké | Héritée, et peut être revendiquée |
| Rebut | Non : sortie typée, avec sa destination | Sort des flux biologiques |
| Perte déclarée | Non : mouvement de sortie typé | Sans objet |
Un produit intermédiaire entre deux étapes est un en-cours, sans numéro. Il devient un lot dès qu’il est stocké, change de site ou dépasse la durée paramétrée (TRA-01).
Le bilan matière se vérifie à chaque étape enregistrée et sur l’ensemble du procédé : sorties + pertes ≤ entrées + intrants (EC-015, invariant I1).
Les normes visent des types, pas des étapes précises
Section intitulée « Les normes visent des types, pas des étapes précises »Une ligne de table réglementaire ne cite jamais l’identifiant d’un nœud d’un pack filière. Elle cite un type du catalogue (AM-04), une nature de sortie ou une catégorie de produit. Ainsi, un nouveau pack filière ne demande pas de réécrire les normes. Exemples : le mûrissement à l’éthylène (TRF-52), une étape critique sans procédure en vigueur (OSP-06), un rebut qui réintègre un flux bio.
Ce que voit l’opérateur
Section intitulée « Ce que voit l’opérateur »- Un ordre de transformation déroule le procédé. Chaque étape a son statut : à faire, en cours, réalisée, validée.
- À chaque étape, l’écran montre ses entrées, ses sorties, les mesures à saisir et les constats éventuels, avec leur source.
- Le niveau de suivi est un réglage de l’organisation, par procédé. En suivi global, une seule saisie couvre tout le procédé. En suivi détaillé, chaque étape a sa saisie. Une étape critique, ou une étape qui produit un lot, est toujours saisie à part.
- La fiche de transformation montre le rendement par étape et le rendement global, ainsi que la destination de chaque sous-produit et de chaque rebut.
Gouvernance (AM-13, AM-14, AM-17)
Section intitulée « Gouvernance (AM-13, AM-14, AM-17) »Qui modifie quoi
Section intitulée « Qui modifie quoi »| Qui | Modifie | Ne modifie pas |
|---|---|---|
| Rédacteur réglementaire (équipe BioTrace) | Grilles, tables de décision, listes, paramètres réglementaires, vecteurs de tests, en brouillon | Il ne publie pas |
| Relecteur expert (équipe BioTrace) | Valide le fond et les tests | Il ne relit pas son propre brouillon |
| Publieur (équipe BioTrace) | Fixe la date d’effet, publie, notifie les clients | Il ne publie rien sans relecture validée |
| Support (équipe BioTrace) | Assiste un client, avec accès journalisé (RG-309) | Il ne modifie pas le contenu des packs |
| Développeur | Code : invariants, règles de processus, variables et indicateurs du dictionnaire, points d’accroche, stratégies AM-08 | Il ne modifie pas le contenu d’un pack publié |
| Direction, RSCI (client) | Réglages bornés : permissions, seuils dans les bornes, modes d’issue, activation des modules, listes de contrôle du SCI, modèles de documents | Ils ne peuvent assouplir aucune règle réglementaire |
Le rôle technique equipe_biotrace de Keycloak est scindé en quatre rôles plateforme. La séparation entre rédacteur et relecteur est vérifiée par la base, avec le même mécanisme que EC-012 (AM-14).
Amendé le 02/10/2026 par EC-099 : BioTrace est l’éditeur, et l’on n’audite pas son équipe. Trois rôles génériques du super back-office (editeur_admin, editeur_parametrage, editeur_support), sans séparation des tâches entre eux. Le tableau ci-dessus garde la répartition du travail, pas des contrôles.
Cycle de publication d’un pack référentiel (AM-13)
Section intitulée « Cycle de publication d’un pack référentiel (AM-13) »- Fiche de changement : la source (texte, liste, demande d’un organisme) et la date d’effet prévue.
- Brouillon édité par formulaires, avec ses vecteurs de tests.
- Validation automatique : facteurs et variables connus, absence d’ambiguïté, une source, une issue et une date de référence par ligne.
- Simulation sur les données réelles des organisations concernées. Elle liste les constats que la nouvelle version ouvrirait, client par client.
- Relecture par une seconde personne. Pour la grille d’un organisme, la relecture peut inclure l’organisme lui-même.
- Publication : la version est figée et une correction passe par une nouvelle version. Le statut « retiré » existe déjà.
- Notification : chaque client reçoit une note de changement, avec l’impact sur ses données. La direction ou le RSCI en accuse réception, et cet accusé est journalisé.
En attendant l’atelier, les packs sont écrits dans packs/ du dépôt Git, au même format. L’intégration continue exécute les étapes 3 et 6, et la relecture passe par la revue de code. Quand l’atelier arrive, il devient la source de vérité et Git n’en est plus que le miroir. Il n’y a rien à réécrire, car le format est le même.
Amorçage depuis le registre des exigences (AM-17)
Section intitulée « Amorçage depuis le registre des exigences (AM-17) »Le registre Excel (957 exigences) est importé une fois, ligne par ligne, en brouillon. Chaque ligne est d’abord triée dans l’une des quatre familles :
- un point de grille, avec ou sans ligne de table de décision, va dans les données ;
- une règle de processus va au backlog du produit, puis au cahier ;
- un invariant est vérifié contre I1 à I5 ;
- un document va au catalogue des modèles.
Le tri est fait par le rédacteur, puis relu. Il sert aussi d’indicateur : si beaucoup de lignes réclament une variable ou un indicateur absent du dictionnaire, c’est là qu’il faut investir en code. Comme le registre n’a pas encore été vérifié de façon contradictoire, aucune ligne importée n’est publiée sans relecture.
Évolutions du schéma et de packages/domain
Section intitulée « Évolutions du schéma et de packages/domain »Toutes les nouvelles tables suivent les conventions du Lot 0 : identifiants UUID v7, ajout seul, journalisation, RLS sur organisation_id pour les tables propres à une organisation (EC-022, EC-032). Les tables « globales » sont partagées entre organisations, comme pack aujourd’hui.
| Table | Portée | Contenu | Lot |
|---|---|---|---|
activite |
Globale | Catalogue fermé des types d’activité et d’étape, sur trois niveaux, et regroupements | 0 |
organisation_activite |
Organisation | Activation et désactivation de chaque nœud de l’arbre, à tous les niveaux, par site si besoin : date, auteur, motif | 0 |
module |
Globale | Modules issus des manifestes : code, dépendances | 0 |
organisation_module |
Organisation | Activations et désactivations datées, auteur, motif | 0 |
pack (amendée) |
Globale | Colonne type : filiere ou referentiel |
0 |
variable_dictionnaire |
Globale | Variables générées depuis le code et les packs publiés : nom, type, unité, origine, disponibilité hors-ligne | 0 |
regle_decision |
Globale | Lignes de tables de décision publiées, rattachées à une version de pack | 0 |
constat |
Organisation | Écarts constatés : règle et version, objet, valeurs, issue, statut | 0 |
referentiel (amendée) |
Globale | Nature, états de qualité et leur ordre | 1 |
point_controle |
Globale | Points de grille publiés, rattachés à une version de pack | 1 |
evaluation_point |
Organisation | Statut d’un point pour une organisation, preuves liées, date | 1 |
preuve |
Organisation | Lien entre un fichier, un objet et un point de contrôle |
1 |
certificat_portee |
Organisation | Référentiel, activités, catégories de produits, sites, unités incluses et exclues | 1 |
ordre_transformation |
Organisation | Instance d’un procédé, niveau de suivi | 2 |
etape_realisee |
Organisation | Étape réalisée : statut, mesures, auteur ; référencée par chaque mouvement de l’étape | 2 |
L’arbre par défaut et ses nœuds ne sont pas des tables : ils font partie du contenu JSON d’une version de pack filière, validé par JSON Schema comme le reste des packs.
Le test de catalogue SB-13 s’étend aux nouvelles tables. Trois tests s’ajoutent : une ligne de regle_decision publiée ne peut plus être modifiée (même principe que SB-10) ; un constat ne se modifie que par changement de statut ; un mouvement de transformation sans etape_realisee est refusé lorsque le procédé est en suivi détaillé.
packages/domain
Section intitulée « packages/domain »| Module | Évolution |
|---|---|
regles (nouveau) |
evaluerPoint(accroche, contexte, livret) : sélection des lignes par facteurs et dates, évaluation, liste des issues et des constats ; issueLaPlusForte(issues) |
dictionnaire (nouveau) |
Types des variables, construction du contexte d’évaluation depuis un objet, contrôle des variables manquantes |
indicateurs (nouveau) |
Rendement par étape et global, pourcentage bio d’une composition, agrégats de lignée, délais |
combinaison (nouveau) |
Les stratégies codées de la liste fermée AM-08, clé par clé |
modules (nouveau) |
verifierDependances, moduleActif(organisation, code, date), arbreActif(organisation, site, date), peutDesactiver(noeud) |
qualite (amendé) |
QualiteLot lit les états et l’ordre du référentiel ; algorithme d’intersection inchangé |
rendement, bilan (étendus) |
Contrôle par étape et par procédé |
droits (étendu) |
Ajout de RG-304 et RG-305 aux séparations figées |
expressions (implémenté) |
Bibliothèque CEL retenue par ADR au Lot 0 |
Chaque nouveau module reçoit ses vecteurs de tests dans testdata/, exécutés à l’identique côté téléphone et côté serveur.
Impacts sur les lots et le calendrier Naturland
Section intitulée « Impacts sur les lots et le calendrier Naturland »Le jalon Naturland reste tenable à une condition : le Lot 0 ne pose que les structures et le moteur minimal. L’atelier de publication, la simulation et la grille NOP complète passent après le jalon. Le chemin critique ne change pas : protocole de synchronisation (Lot 0), puis son implémentation (Lot 3).
| Lot | Ajouts et changements | Hors du jalon |
|---|---|---|
| 0 – Socle | Tables activite, module, organisation_*, variable_dictionnaire, regle_decision, constat ; type de pack ; manifestes et gardes de modules ; module regles avec ses six issues ; ADR CEL ; permissions préfixées ; rôles plateforme scindés |
Atelier, simulation |
| 1 – Référentiels | Module Membres et foncier sorti du noyau ; états de qualité par référentiel ; certificat_portee ; point_controle, evaluation_point, preuve ; arbre d’activités chargé depuis le pack filière et réglé à l’ouverture du compte (RG-300) |
– |
| 2 – Flux et preuve | Procédés, ordre_transformation, etape_realisee ; points d’accroche réception, étape, vente, document ; constats dans les flux ; fiche de transformation par étape |
– |
| 3 – Terrain | Livret de règles synchronisé ; évaluation locale ; affichage des constats sur le téléphone | – |
| 4 – Jalon Naturland | Grilles UE et CCPB pour le périmètre du pilote ; grille Naturland si la question Q3 est tranchée en ce sens ; tableau « prêt pour l’audit » ; procédés du pack fruits | Grilles complètes |
| 5 – Export et portails | Grille NOP ; lignes d’export (IMP-20, IMP-28) ; portail auditeur en lecture des grilles | – |
| 6 et 7 | Atelier de publication, simulation, notifications aux clients ; tri complet des 957 exigences terminé | – |
Charge et répartition
Section intitulée « Charge et répartition »- Les ajouts au Lot 0 représentent environ une semaine-personne. C’est une estimation à confirmer par l’équipe. Ils doivent être confiés à une autre personne que celle qui porte la synchronisation.
- Le contenu avance en parallèle du code, sans développeur : le tri du registre et la rédaction des grilles UE et CCPB du pilote commencent dès la première semaine, au format des packs.
- Les documents du Lot 0 sont à mettre à jour : paramètres contextuels (PC-02, PC-05, PC-08), schéma de base (§4, §8, §9), Keycloak (§6), paquet domain (§3.6, §3.10, §3.11), plan du Lot 1 (A6, référentiels), décisions techniques du découpage (paramétrage, expressions, organisation du front).
Questions ouvertes
Section intitulée « Questions ouvertes »- Q1 – Activités élémentaires. Valider le catalogue des types d’activité et d’étape avec l’organisme de certification, en particulier le stockage, la sous-traitance, le transport et la fumigation.
- Q2 – Bibliothèque CEL. Choisir la bibliothèque, par une ADR au Lot 0, sur deux critères : un comportement identique dans le navigateur et dans Node, et la taille du paquet sur le téléphone.
- Q3 – Naturland. Modéliser sa grille dès le jalon, ou seulement après la réponse à l’appel d’offres.
- Q4 – Rôles plateforme. Désigner, dans l’équipe BioTrace, le rédacteur réglementaire et le relecteur expert, et dire s’il faut un appui extérieur pour le NOP.
- Q5 – Modes d’issue réglables. Dresser la liste exacte des règles de processus pour lesquelles le client peut choisir entre « signaler avec une note » et « bloquer ».
- Q6 – Liste AM-08. Confirmer que les quatre clés combinées suffisent. Toute autre clé doit être justifiée par un calcul unique que BioTrace effectue pour agir.
- Q7 – Cahier v1.3. Reporter dans le cahier les amendements de RG-300, RG-301 et §2.2, ainsi que les règles de processus issues du tri du registre.
- Q8 – Note d’analyse critique. Marquer comme remplacées ses sections sur les archétypes, les couches et la combinaison, en renvoyant à la présente note.