Aller au contenu

Lot 0 bis, séquence L0-2 — Activités et modules

02/10/2026. Mise en œuvre de la séquence L0-2 du plan d’alignement, d’après la note d’amendement (AM-04, AM-05, AM-06). Décision : EC-094 ; écart ouvert : EC-095.

  • L’opérateur déclare ses activités ; BioTrace en déduit les modules à proposer. La direction décide : une proposition n’active rien.
  • Monolithe modulaire : toutes les tables restent déployées pour tous. Un module s’active par organisation, avec date, auteur et motif, en ajout seul.
  • La base garde l’autorité sur les dépendances, par un déclencheur ; le domaine (modules) donne la même réponse avant l’écriture.
  • Les gardes de l’API et des commandes, les menus et les permissions par module sont livrés en L0-3. Depuis L0-3, collecte dépend aussi de membres_foncier (EC-095).

Migration db/migrations/20261002100000_lot0bis_l02_activites_modules.sql.

Table Portée Rôle
app.activite Globale Catalogue fermé des types d’activité, sur trois niveaux. Premier niveau seulement : les 13 activités de la note, rangées dans les cinq regroupements du cahier §2.2. Les types de niveaux 2 et 3 sont arrivés en L1-4, provisoires (EC-108)
app.module Globale 11 modules, dont le noyau, toujours actif
app.module_dependance Globale sci → membres_foncier, paiements → collecte : les seules dépendances écrites dans la note (EC-095)
app.module_activite Globale Activités qui proposent chaque module, d’après le tableau de la note
app.organisation_module Organisation, ajout seul Activations et désactivations : état, motif, auteur, horodatage
app.organisation_activite Organisation, ajout seul Activités déclarées, pour toute l’organisation ou pour un site. noeud vaut le code de l’activité en L0-2 ; il portera le chemin d’un nœud du pack en L1-4
app.module_en_vigueur, app.activite_en_vigueur Vues État courant : la ligne la plus récente
app.pack.type Colonne filiere (par défaut) ou referentiel (AM-06)

Les catalogues ne s’écrivent que par migration : biotrace_app n’y a ni INSERT ni UPDATE. Les historiques n’acceptent aucun UPDATE ni DELETE.

Même code dans la base (DETAIL de l’erreur), dans le domaine et dans l’API (409, sauf mention).

Refus Code
Activer ou désactiver le noyau module_toujours_actif
Activer un module dont un module requis est inactif dependance_inactive (details.modules)
Désactiver un module dont dépend un module actif module_requis (details.modules)
Demander l’état courant (un module jamais activé est inactif) etat_inchange
Module inconnu module_inconnu (404)
Déclarer un nœud qui n’est pas une activité de premier niveau noeud_non_pris_en_charge (base) ; activite_inconnue (API, 404)

Deux changements simultanés dans la même organisation sont sérialisés par un verrou consultatif : ils ne peuvent pas contourner une dépendance.

  • etatModules(catalogue, historique, instant) : modules actifs à un instant, le noyau compris.
  • verifierChangement(catalogue, actifs, code, etat) : les refus ci-dessus, avant l’écriture.
  • modulesProposes(catalogue, actifs, activitesActives) : modules suggérés par les activités déclarées et pas encore actifs.
Route Droit Rend
GET /v1/activites membre actif Les 13 activités, leur état pour l’organisation, le dernier changement, les sites où elles sont déclarées à part
POST /v1/activites/{code}/etat modules.manage L’activité après le changement (etat, motif, site_id facultatif)
GET /v1/modules membre actif Les modules, leur état, leurs dépendances, les activités qui les proposent, l’indicateur « proposé »
POST /v1/modules/{code}/etat modules.manage Le module après le changement (etat, motif)

Droit modules.manage (EC-094) : nouveau, donné par défaut aux ensembles direction et administrateur_client.

L’exportateur d’ananas déclare collecte_membres, stockage, conditionnement_etiquetage et exportation, et active membres_foncier, collecte et sci (activites.json, modules.json). L’organisation de démonstration n’a pas d’ensemble de permissions en base : il n’y a rien à y ajouter.

Test Ce qu’il vérifie
db/tests/l0bis-2.sql Catalogues (13 activités, 5 regroupements), écriture interdite aux catalogues, les quatre refus, ajout seul, état par site, site d’une autre organisation refusé, journal, RLS entre deux organisations, type de pack
SB-01, SB-13, db/verifier-rls.sh Les quatre tables globales rejoignent la liste des tables sans RLS
VT-MOD-001 à 015 verifierChangement, etatModules, modulesProposes
apps/api/test/activation.test.ts Déclaration, propositions, refus de dépendance, désactivation bloquée, noyau, droit manquant (403), historique journalisé