Catalogue fermé et versionné des types d’activité, sur trois niveaux (AM-04). Défini par BioTrace : un pack crée des instances typées, jamais de nouveau type. Les normes, les portées de certificat et les modules citent ces types.
| Name |
Type |
Default |
Nullable |
Children |
Parents |
Comment |
| id |
uuid |
app.uuid_v7() |
false |
|
|
Identifiant stable (UUID v7). |
| code |
text |
|
false |
app.activite app.module_activite app.organisation_activite app.certificat_portee app.noeud_activite |
|
Code stable du type, cité par les packs, les grilles et les modules. |
| niveau |
smallint |
|
false |
|
|
Niveau dans l’arbre : 1 activité, 2 sous-activité, 3 étape. Trois niveaux au plus. |
| parent_code |
text |
|
true |
|
app.activite |
Type parent indicatif du catalogue (affichage) ; non vérifié contre l’arbre réel d’une organisation (app.noeud_activite), où seul le niveau du type doit correspondre à la profondeur du chemin. |
| regroupement |
text |
|
false |
|
|
Regroupement affiché à l’écran : les cinq activités élémentaires du cahier v1.2, §2.2. |
| libelle_fr |
text |
|
false |
|
|
Libellé en français. |
| libelle_en |
text |
|
false |
|
|
Libellé en anglais. |
| ordre |
smallint |
|
false |
|
|
Ordre d’affichage parmi les types du même parent. |
| cree_le |
timestamp with time zone |
now() |
false |
|
|
Date de création de la ligne. |
| modifie_le |
timestamp with time zone |
now() |
false |
|
|
Date de dernière modification (par migration seulement). |
| provisoire |
boolean |
false |
false |
|
|
Vrai pour un type de niveau 2 ou 3 posé avant la validation du catalogue avec l’organisme de certification (Q1, EC-108). Le code reste stable ; le libellé et le rangement peuvent changer. |
| Name |
Type |
Definition |
| activite_check |
CHECK |
CHECK (((niveau = 1) = (parent_code IS NULL))) |
| activite_code_check |
CHECK |
CHECK ((code ~ ‘^[a-z][a-z0-9_]*$’::text)) |
| activite_libelle_en_check |
CHECK |
CHECK ((libelle_en <> ‘’::text)) |
| activite_libelle_fr_check |
CHECK |
CHECK ((libelle_fr <> ‘’::text)) |
| activite_niveau_check |
CHECK |
CHECK (((niveau >= 1) AND (niveau <= 3))) |
| activite_regroupement_check |
CHECK |
CHECK ((regroupement = ANY (ARRAY[‘production’::text, ‘achat’::text, ‘nettoyage_triage’::text, ‘transformation’::text, ‘vente_export’::text]))) |
| activite_pkey |
PRIMARY KEY |
PRIMARY KEY (id) |
| activite_code_key |
UNIQUE |
UNIQUE (code) |
| activite_parent_code_fkey |
FOREIGN KEY |
FOREIGN KEY (parent_code) REFERENCES app.activite(code) |
| Name |
Definition |
| activite_pkey |
CREATE UNIQUE INDEX activite_pkey ON app.activite USING btree (id) |
| activite_code_key |
CREATE UNIQUE INDEX activite_code_key ON app.activite USING btree (code) |
| Name |
Definition |
| journal |
CREATE TRIGGER journal AFTER INSERT OR DELETE OR UPDATE ON app.activite FOR EACH ROW EXECUTE FUNCTION journal.tg_journaliser() |
| modifie_le |
CREATE TRIGGER modifie_le BEFORE UPDATE ON app.activite FOR EACH ROW EXECUTE FUNCTION app.tg_modifie_le() |
erDiagram
"app.activite" }o--o| "app.activite" : "FOREIGN KEY (parent_code) REFERENCES app.activite(code)"
"app.module_activite" }o--|| "app.activite" : "FOREIGN KEY (activite_code) REFERENCES app.activite(code)"
"app.organisation_activite" }o--|| "app.activite" : "FOREIGN KEY (activite_code) REFERENCES app.activite(code)"
"app.certificat_portee" }o--o| "app.activite" : "FOREIGN KEY (activite_code) REFERENCES app.activite(code)"
"app.noeud_activite" }o--|| "app.activite" : "FOREIGN KEY (activite_code) REFERENCES app.activite(code)"
"app.activite" {
uuid id "Identifiant stable (UUID v7)."
text code "Code stable du type, cité par les packs, les grilles et les modules."
smallint niveau "Niveau dans l'arbre : 1 activité, 2 sous-activité, 3 étape. Trois niveaux au plus."
text parent_code FK "Type parent indicatif du catalogue (affichage) ; non vérifié contre l'arbre réel d'une organisation (app.noeud_activite), où seul le niveau du type doit correspondre à la profondeur du chemin."
text regroupement "Regroupement affiché à l'écran : les cinq activités élémentaires du cahier v1.2, §2.2."
text libelle_fr "Libellé en français."
text libelle_en "Libellé en anglais."
smallint ordre "Ordre d'affichage parmi les types du même parent."
timestamp_with_time_zone cree_le "Date de création de la ligne."
timestamp_with_time_zone modifie_le "Date de dernière modification (par migration seulement)."
boolean provisoire "Vrai pour un type de niveau 2 ou 3 posé avant la validation du catalogue avec l'organisme de certification (Q1, EC-108). Le code reste stable ; le libellé et le rangement peuvent changer."
}
"app.module_activite" {
uuid id "Identifiant stable (UUID v7)."
text module_code FK "Module proposé."
text activite_code FK "Activité déclarée qui le propose."
timestamp_with_time_zone cree_le "Date de création de la ligne."
timestamp_with_time_zone modifie_le "Date de dernière modification (par migration seulement)."
}
"app.organisation_activite" {
uuid id "Identifiant stable (UUID v7)."
uuid organisation_id FK "Organisation concernée. Sert à l'isolation par RLS (EC-032)."
uuid site_id FK "Site concerné ; vide pour toute l'organisation."
text noeud "Nœud de l'arbre d'activités : code d'activité au premier niveau, chemin pointé du pack (noeud_activite.chemin) aux niveaux 2 et 3."
text activite_code FK "Type du nœud, pris dans le catalogue fermé."
text etat "Nouvel état : active ou désactivée. Un changement sans effet est refusé (etat_inchange)."
text motif "Motif du changement, obligatoire."
uuid cree_par FK "Utilisateur qui a fait le changement."
timestamp_with_time_zone cree_le "Horodatage du changement, qui vaut date d'effet."
}
"app.certificat_portee" {
uuid id "Identifiant stable (UUID v7)."
uuid organisation_id FK "Organisation propriétaire. Sert à l'isolation par RLS (EC-032)."
uuid certificat_id FK "Certificat dont la ligne précise la portée (de la même organisation)."
text dimension "`activite`, `produit`, `site` ou `unite`. Détermine la seule colonne d'élément renseignée."
text activite_code FK "Activité du catalogue fermé (dimension `activite`)."
uuid produit_id FK "Produit du catalogue de l'organisation (dimension `produit`). Les produits sont listés un à un : le catalogue n'a pas de catégorie (EC-102)."
uuid site_id FK "Site de l'organisation (dimension `site`)."
uuid producteur_id FK "Unité producteur (dimension `unite`). Exactement une unité entre producteur, parcelle et zone de cueillette."
uuid parcelle_id FK "Unité parcelle (dimension `unite`)."
uuid zone_cueillette_id FK "Unité zone de cueillette (dimension `unite`)."
boolean inclus "Vrai : l'élément est couvert par le certificat. Faux : il est exclu expressément, et l'exclusion l'emporte sur une inclusion plus large."
uuid cree_par FK "Utilisateur qui a déclaré la ligne."
timestamp_with_time_zone cree_le "Date de création de la ligne."
}
"app.noeud_activite" {
uuid id "Identifiant stable (UUID v7)."
uuid organisation_id FK "Organisation propriétaire. Sert à l'isolation par RLS (EC-032)."
text chemin "Chemin pointé du nœud, un segment par niveau, trois niveaux au plus. Au premier niveau, il vaut le code de l'activité."
text activite_code FK "Type du nœud, pris dans le catalogue fermé app.activite ; sa profondeur est celle du nœud."
text libelle_fr "Libellé en français, défini par le pack."
text libelle_en "Libellé en anglais, défini par le pack."
boolean obligatoire "Vrai : le nœud ne se désactive pas tant que son parent est actif."
boolean critique "Vrai : étape critique (OSP-05), donc obligatoire."
boolean sous_traitable "Vrai : le nœud peut être confié à un sous-traitant."
smallint ordre "Rang parmi les nœuds frères."
uuid pack_version_id FK "Version du pack d'où le nœud a été copié."
timestamp_with_time_zone cree_le "Date de création de la ligne."
timestamp_with_time_zone modifie_le "Date de dernière modification de la ligne."
jsonb contrat "Contrat facultatif du nœud (AM-04, EC-118) : entrées et sorties typées (codes produit), mesures (code, libellé, unité, type) et clés de paramètres, tel que publié par le pack et validé par packs.validerArbre. Absent : le nœud accepte tout (pas de contrat défini). Les intrants cités par AM-04 restent en écart (EC-119)."
}
Generated by tbls