Périmètre des agents par module : une ligne par agent affecté (affectation en cours), par groupement et par module actif. Donnée dérivée, recalculée par déclencheur ; les règles de synchronisation la lisent pour ne descendre que les données des modules actifs (AM-05).
| Name |
Type |
Default |
Nullable |
Children |
Parents |
Comment |
| id |
uuid |
app.uuid_v7() |
false |
|
|
Identifiant de la ligne. |
| organisation_id |
uuid |
|
false |
|
app.organisation app.utilisateur app.groupement |
Organisation. |
| groupement_id |
uuid |
|
false |
|
app.groupement |
Groupement où l’agent est affecté. |
| utilisateur_id |
uuid |
|
false |
|
app.utilisateur |
Agent affecté. |
| module_code |
text |
|
false |
|
app.module |
Module actif de l’organisation (le noyau, toujours actif, n’y figure pas). |
| 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 |
| perimetre_module_agent_organisation_id_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id) REFERENCES app.organisation(id) |
| perimetre_module_agent_organisation_id_utilisateur_id_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id, utilisateur_id) REFERENCES app.utilisateur(organisation_id, id) |
| perimetre_module_agent_organisation_id_groupement_id_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id, groupement_id) REFERENCES app.groupement(organisation_id, id) |
| perimetre_module_agent_module_code_fkey |
FOREIGN KEY |
FOREIGN KEY (module_code) REFERENCES app.module(code) |
| perimetre_module_agent_pkey |
PRIMARY KEY |
PRIMARY KEY (id) |
| perimetre_module_agent_organisation_id_groupement_id_utilis_key |
UNIQUE |
UNIQUE (organisation_id, groupement_id, utilisateur_id, module_code) |
| Name |
Definition |
| perimetre_module_agent_pkey |
CREATE UNIQUE INDEX perimetre_module_agent_pkey ON app.perimetre_module_agent USING btree (id) |
| perimetre_module_agent_organisation_id_groupement_id_utilis_key |
CREATE UNIQUE INDEX perimetre_module_agent_organisation_id_groupement_id_utilis_key ON app.perimetre_module_agent USING btree (organisation_id, groupement_id, utilisateur_id, module_code) |
| Name |
Definition |
| modifie_le |
CREATE TRIGGER modifie_le BEFORE UPDATE ON app.perimetre_module_agent FOR EACH ROW EXECUTE FUNCTION app.tg_modifie_le() |
erDiagram
"app.perimetre_module_agent" }o--|| "app.organisation" : "FOREIGN KEY (organisation_id) REFERENCES app.organisation(id)"
"app.perimetre_module_agent" }o--|| "app.utilisateur" : "FOREIGN KEY (organisation_id, utilisateur_id) REFERENCES app.utilisateur(organisation_id, id)"
"app.perimetre_module_agent" }o--|| "app.groupement" : "FOREIGN KEY (organisation_id, groupement_id) REFERENCES app.groupement(organisation_id, id)"
"app.perimetre_module_agent" }o--|| "app.module" : "FOREIGN KEY (module_code) REFERENCES app.module(code)"
"app.perimetre_module_agent" {
uuid id "Identifiant de la ligne."
uuid organisation_id FK "Organisation."
uuid groupement_id FK "Groupement où l'agent est affecté."
uuid utilisateur_id FK "Agent affecté."
text module_code FK "Module actif de l'organisation (le noyau, toujours actif, n'y figure pas)."
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.utilisateur" {
uuid id "Identifiant de l'utilisateur (UUID v7)."
uuid organisation_id FK "Organisation propriétaire de la ligne. Sert à l'isolation par RLS (EC-032) et au filtrage de la synchronisation."
uuid keycloak_sub "Identifiant du compte Keycloak (revendication sub). Identique d'une organisation à l'autre pour un compte externe."
text identifiant "Identifiant local de connexion, sans le code de l'organisation : 3 à 32 caractères parmi a-z, 0-9, _ et -. Unique dans l'organisation."
text nom_affiche "Nom affiché dans l'application."
text telephone "Numéro de téléphone. Attribut du compte, jamais son identifiant."
text statut "Statut du compte : actif, suspendu ou desactive."
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."
}
"app.groupement" {
uuid id "Identifiant stable (UUID v7)."
uuid organisation_id FK "Organisation propriétaire. Sert à l'isolation par RLS (EC-032)."
text code "Code du groupement, unique par organisation."
text nom "Nom du groupement."
boolean actif "Faux quand le groupement n'est plus utilisé. Un groupement 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.module" {
uuid id "Identifiant stable (UUID v7)."
text code "Code du module ; préfixe de ses permissions (EC-092)."
text libelle_fr "Libellé en français."
text libelle_en "Libellé en anglais."
boolean toujours_actif "Vrai pour le noyau : il ne s'active ni ne se désactive."
smallint ordre "Ordre d'affichage."
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)."
}
Generated by tbls