Aller au contenu

app.site

Site physique de l’organisation (dépôt, centre de collecte, atelier). Regroupe des emplacements de stockage.

Name Type Default Nullable Children Parents Comment
id uuid app.uuid_v7() false app.emplacement app.organisation_activite app.certificat_portee app.ordre_transformation Identifiant stable (UUID v7).
organisation_id uuid false app.emplacement app.organisation_activite app.certificat_portee app.ordre_transformation app.organisation Organisation propriétaire. Sert à l’isolation par RLS (EC-032).
code text false Code du site, unique par organisation.
nom text false Nom du site.
actif boolean true false Faux quand le site n’est plus utilisé. Un site n’est jamais supprimé.
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
site_code_check CHECK CHECK ((code <> ‘’::text))
site_nom_check CHECK CHECK ((nom <> ‘’::text))
site_organisation_id_fkey FOREIGN KEY FOREIGN KEY (organisation_id) REFERENCES app.organisation(id)
site_pkey PRIMARY KEY PRIMARY KEY (id)
site_organisation_id_code_key UNIQUE UNIQUE (organisation_id, code)
site_organisation_id_id_key UNIQUE UNIQUE (organisation_id, id)
Name Definition
site_pkey CREATE UNIQUE INDEX site_pkey ON app.site USING btree (id)
site_organisation_id_code_key CREATE UNIQUE INDEX site_organisation_id_code_key ON app.site USING btree (organisation_id, code)
site_organisation_id_id_key CREATE UNIQUE INDEX site_organisation_id_id_key ON app.site USING btree (organisation_id, id)
Name Definition
journal CREATE TRIGGER journal AFTER INSERT OR DELETE OR UPDATE ON app.site FOR EACH ROW EXECUTE FUNCTION journal.tg_journaliser()
modifie_le CREATE TRIGGER modifie_le BEFORE UPDATE ON app.site FOR EACH ROW EXECUTE FUNCTION app.tg_modifie_le()
erDiagram

"app.emplacement" }o--|| "app.site" : "FOREIGN KEY (organisation_id, site_id) REFERENCES app.site(organisation_id, id)"
"app.organisation_activite" }o--|| "app.site" : "FOREIGN KEY (organisation_id, site_id) REFERENCES app.site(organisation_id, id)"
"app.certificat_portee" }o--|| "app.site" : "FOREIGN KEY (organisation_id, site_id) REFERENCES app.site(organisation_id, id)"
"app.ordre_transformation" }o--|| "app.site" : "FOREIGN KEY (organisation_id, site_id) REFERENCES app.site(organisation_id, id)"
"app.site" }o--|| "app.organisation" : "FOREIGN KEY (organisation_id) REFERENCES app.organisation(id)"

"app.site" {
  uuid id "Identifiant stable (UUID v7)."
  uuid organisation_id FK "Organisation propriétaire. Sert à l'isolation par RLS (EC-032)."
  text code "Code du site, unique par organisation."
  text nom "Nom du site."
  boolean actif "Faux quand le site n'est plus utilisé. Un site 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."
}
"app.emplacement" {
  uuid id "Identifiant stable (UUID v7)."
  uuid organisation_id FK "Organisation propriétaire. Sert à l'isolation par RLS (EC-032)."
  uuid site_id FK "Site qui porte l'emplacement (de la même organisation)."
  text code "Code de l'emplacement, unique dans son site."
  text nom "Nom de l'emplacement."
  text__ qualites_autorisees "Qualités biologiques que l'emplacement accepte. Vocabulaire à arrêter avec la certification (séquence A6, EC-055) ; non contrôlé pour l'instant."
  bigint capacite_g "Capacité de stockage en grammes (EC-030). Absente : non limitée."
  boolean actif "Faux quand l'emplacement n'est plus utilisé. Un emplacement 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."
}
"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.ordre_transformation" {
  uuid id "Identifiant stable (UUID v7)."
  uuid organisation_id FK "Organisation propriétaire (isolation par ligne)."
  uuid campagne_id FK "Campagne des lots produits par l'ordre."
  uuid site_id FK "Site où le procédé est réalisé ; le procédé doit y être actif."
  uuid noeud_id FK "Procédé : nœud de l'arbre d'activités de l'organisation, de profondeur 2 ou 3, sous une activité du regroupement transformation."
  text niveau_suivi "Niveau de suivi retenu à la création (réglage de l'organisation, par procédé) : global (une saisie couvre le procédé) ou detaille (une saisie par étape)."
  text statut "brouillon, en_cours (dès qu'une étape démarre), termine (toutes les étapes validées) ou annule (aucune étape validée)."
  timestamp_with_time_zone date_operation "Date de l'opération, saisie par l'opérateur."
  text motif_annulation "Motif de l'annulation ; renseigné si et seulement si l'ordre est annulé."
  uuid cree_par FK "Utilisateur qui a créé l'ordre."
  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."
}

Generated by tbls