Attribut typé d’un produit (calibre, Brix…). Le schéma JSON décrit la valeur ; Ajv la valide côté client et côté serveur.
| Name |
Type |
Default |
Nullable |
Children |
Parents |
Comment |
| id |
uuid |
app.uuid_v7() |
false |
|
|
Identifiant stable (UUID v7). |
| organisation_id |
uuid |
|
false |
|
app.organisation app.produit |
Organisation propriétaire. Sert à l’isolation par RLS (EC-032). |
| produit_id |
uuid |
|
false |
|
app.produit |
Produit décrit, de la même organisation. |
| code |
text |
|
false |
|
|
Code de l’attribut, unique pour le produit : calibre, brix… |
| libelle_fr |
text |
|
false |
|
|
Libellé en français, affiché au-dessus du champ. |
| libelle_en |
text |
|
false |
|
|
Libellé en anglais. |
| schema |
jsonb |
|
false |
|
|
JSON Schema de la valeur de l’attribut (un objet). Entiers seulement pour les mesures (calculs en entiers). |
| obligatoire |
boolean |
false |
false |
|
|
Vrai si la valeur doit être fournie à la saisie. |
| ordre |
integer |
0 |
false |
|
|
Rang d’affichage dans le formulaire. |
| 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. |
| Name |
Type |
Definition |
| attribut_code_check |
CHECK |
CHECK ((code ~ ‘^[a-z][a-z0-9_]*$’::text)) |
| attribut_libelle_en_check |
CHECK |
CHECK ((libelle_en <> ‘’::text)) |
| attribut_libelle_fr_check |
CHECK |
CHECK ((libelle_fr <> ‘’::text)) |
| attribut_schema_check |
CHECK |
CHECK ((jsonb_typeof(schema) = ‘object’::text)) |
| attribut_organisation_id_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id) REFERENCES app.organisation(id) |
| attribut_organisation_id_produit_id_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id, produit_id) REFERENCES app.produit(organisation_id, id) |
| attribut_pkey |
PRIMARY KEY |
PRIMARY KEY (id) |
| attribut_produit_id_code_key |
UNIQUE |
UNIQUE (produit_id, code) |
| attribut_organisation_id_id_key |
UNIQUE |
UNIQUE (organisation_id, id) |
| Name |
Definition |
| attribut_pkey |
CREATE UNIQUE INDEX attribut_pkey ON app.attribut USING btree (id) |
| attribut_produit_id_code_key |
CREATE UNIQUE INDEX attribut_produit_id_code_key ON app.attribut USING btree (produit_id, code) |
| attribut_organisation_id_id_key |
CREATE UNIQUE INDEX attribut_organisation_id_id_key ON app.attribut USING btree (organisation_id, id) |
| Name |
Definition |
| journal |
CREATE TRIGGER journal AFTER INSERT OR DELETE OR UPDATE ON app.attribut FOR EACH ROW EXECUTE FUNCTION journal.tg_journaliser() |
| modifie_le |
CREATE TRIGGER modifie_le BEFORE UPDATE ON app.attribut FOR EACH ROW EXECUTE FUNCTION app.tg_modifie_le() |
erDiagram
"app.attribut" }o--|| "app.organisation" : "FOREIGN KEY (organisation_id) REFERENCES app.organisation(id)"
"app.attribut" }o--|| "app.produit" : "FOREIGN KEY (organisation_id, produit_id) REFERENCES app.produit(organisation_id, id)"
"app.attribut" {
uuid id "Identifiant stable (UUID v7)."
uuid organisation_id FK "Organisation propriétaire. Sert à l'isolation par RLS (EC-032)."
uuid produit_id FK "Produit décrit, de la même organisation."
text code "Code de l'attribut, unique pour le produit : calibre, brix…"
text libelle_fr "Libellé en français, affiché au-dessus du champ."
text libelle_en "Libellé en anglais."
jsonb schema "JSON Schema de la valeur de l'attribut (un objet). Entiers seulement pour les mesures (calculs en entiers)."
boolean obligatoire "Vrai si la valeur doit être fournie à la saisie."
integer ordre "Rang d'affichage dans le formulaire."
timestamp_with_time_zone cree_le "Date de création de la ligne."
timestamp_with_time_zone modifie_le "Date de dernière modification."
}
"app.organisation" {
uuid id "Identifiant de l'organisation (UUID v7)."
text code "Code court en majuscules. Immuable : il figure dans les identifiants Keycloak (coopa.agent01). « EXT » est réservé."
text nom "Nom de l'organisation."
text pays "Pays, code ISO 3166-1 alpha-2."
text langue "Langue de l'organisation : fr ou en."
text fuseau_horaire "Fuseau horaire IANA utilisé pour l'affichage des dates."
text devise_defaut "Devise par défaut des montants, code ISO 4217."
text keycloak_organisation_id "Identifiant de l'organisation dans Keycloak."
text organisme_certificateur "Organisme de certification de l'organisation. Aucun contrôle de format (EC-027)."
text code_operateur "Code d'opérateur attribué par l'organisme certificateur."
uuid logo_fichier_id FK "Fichier du logo (EC-029)."
timestamp_with_time_zone cree_le "Date de création de la ligne."
timestamp_with_time_zone modifie_le "Date de la dernière modification, tenue par un déclencheur."
text source_conformite "Source des décisions de conformité : `interne` (contrôle interne de BioTrace) ou `externe` (outil tiers). Une seule source active à la fois ; app.statut_conformite.source doit lui être égale."
text statut "État du compte client : `active` ou `suspendue`. Une organisation suspendue est refusée par la garde d'authentification (`organisation_suspendue`) ; ses données et ses comptes sont conservés. Décidé par l'équipe de l'éditeur (EC-126)."
timestamp_with_time_zone suspendue_le "Date de la suspension en cours ; nulle tant que l'organisation est active."
}
"app.produit" {
uuid id "Identifiant stable (UUID v7)."
uuid organisation_id FK "Organisation propriétaire. Sert à l'isolation par RLS (EC-032)."
text code "Code du produit, inséré dans le numéro officiel (segment « produit »). Unique par organisation (EC-063)."
text nom_fr "Nom en français."
text nom_en "Nom en anglais."
text unite_code FK "Unité de saisie et d'affichage."
boolean est_matiere_premiere "Vrai pour une matière première, faux pour un produit fini."
uuid matiere_premiere_liee_id FK "Matière première dont le produit fini est issu. Réservé aux produits finis, de la même organisation."
text code_modele "Code du modèle de produit du pack qui a servi à créer la ligne. Nul pour un produit créé à la main."
uuid pack_version_id FK "Version de pack d'origine. Nulle pour un produit créé à la main ; nulle exactement quand code_modele l'est."
boolean actif "Faux quand le produit n'est plus utilisé. Un produit n'est jamais supprimé."
timestamp_with_time_zone cree_le "Date de création de la ligne."
timestamp_with_time_zone modifie_le "Date de dernière modification."
}
Generated by tbls