Aller au contenu

app.appel_administration

Journal des appels d’administration d’identité (comptes, permissions, appareils, organisation). Ajout seul : un appel refusé ou en échec est tracé aussi.

Name Type Default Nullable Children Parents Comment
id uuid app.uuid_v7() false Identifiant de l’appel (UUID v7).
organisation_id uuid false app.organisation app.utilisateur app.appareil Organisation concernée : l’organisation active, ou celle qui vient d’être créée. Sert à l’isolation par RLS (EC-032).
auteur_sub uuid false Identifiant Keycloak de l’auteur de l’appel.
auteur_id uuid true app.utilisateur Ligne app.utilisateur de l’auteur dans l’organisation. Nul pour un membre de l’équipe BioTrace qui crée une organisation.
action text false Action demandée, ex. utilisateur.creer, utilisateur.desactiver, appareil.revoquer, organisation.creer.
cible_utilisateur_id uuid true app.utilisateur Utilisateur visé, de la même organisation.
cible_keycloak_sub uuid true Identifiant Keycloak du compte visé, conservé même si la ligne app.utilisateur n’existe pas ou plus.
cible_appareil_id uuid true app.appareil Appareil visé, de la même organisation.
resultat text false reussi, refuse (droit manquant, cible d’une autre organisation) ou echec (Keycloak ou base indisponible).
details jsonb ‘{}’::jsonb false Éléments utiles à l’audit : motif, code d’erreur, ensemble de permissions. Jamais de mot de passe ni de jeton.
cree_le timestamp with time zone now() false Date de l’appel.
Name Type Definition
appel_administration_action_check CHECK CHECK ((action ~ ‘^[a-z_]+(.[a-z_]+)*$’::text))
appel_administration_resultat_check CHECK CHECK ((resultat = ANY (ARRAY[‘reussi’::text, ‘refuse’::text, ‘echec’::text])))
appel_administration_organisation_id_fkey FOREIGN KEY FOREIGN KEY (organisation_id) REFERENCES app.organisation(id)
appel_administration_organisation_id_auteur_id_fkey FOREIGN KEY FOREIGN KEY (organisation_id, auteur_id) REFERENCES app.utilisateur(organisation_id, id)
appel_administration_organisation_id_cible_utilisateur_id_fkey FOREIGN KEY FOREIGN KEY (organisation_id, cible_utilisateur_id) REFERENCES app.utilisateur(organisation_id, id)
appel_administration_organisation_id_cible_appareil_id_fkey FOREIGN KEY FOREIGN KEY (organisation_id, cible_appareil_id) REFERENCES app.appareil(organisation_id, id)
appel_administration_pkey PRIMARY KEY PRIMARY KEY (id)
Name Definition
appel_administration_pkey CREATE UNIQUE INDEX appel_administration_pkey ON app.appel_administration USING btree (id)
appel_administration_organisation_idx CREATE INDEX appel_administration_organisation_idx ON app.appel_administration USING btree (organisation_id, cree_le DESC)
Name Definition
journal CREATE TRIGGER journal AFTER INSERT OR DELETE OR UPDATE ON app.appel_administration FOR EACH ROW EXECUTE FUNCTION journal.tg_journaliser()
ajout_seul CREATE TRIGGER ajout_seul BEFORE DELETE OR UPDATE ON app.appel_administration FOR EACH ROW EXECUTE FUNCTION app.tg_ajout_seul()
erDiagram

"app.appel_administration" }o--|| "app.organisation" : "FOREIGN KEY (organisation_id) REFERENCES app.organisation(id)"
"app.appel_administration" }o--|| "app.utilisateur" : "FOREIGN KEY (organisation_id, auteur_id) REFERENCES app.utilisateur(organisation_id, id)"
"app.appel_administration" }o--|| "app.utilisateur" : "FOREIGN KEY (organisation_id, cible_utilisateur_id) REFERENCES app.utilisateur(organisation_id, id)"
"app.appel_administration" }o--|| "app.appareil" : "FOREIGN KEY (organisation_id, cible_appareil_id) REFERENCES app.appareil(organisation_id, id)"

"app.appel_administration" {
  uuid id "Identifiant de l'appel (UUID v7)."
  uuid organisation_id FK "Organisation concernée : l'organisation active, ou celle qui vient d'être créée. Sert à l'isolation par RLS (EC-032)."
  uuid auteur_sub "Identifiant Keycloak de l'auteur de l'appel."
  uuid auteur_id FK "Ligne app.utilisateur de l'auteur dans l'organisation. Nul pour un membre de l'équipe BioTrace qui crée une organisation."
  text action "Action demandée, ex. utilisateur.creer, utilisateur.desactiver, appareil.revoquer, organisation.creer."
  uuid cible_utilisateur_id FK "Utilisateur visé, de la même organisation."
  uuid cible_keycloak_sub "Identifiant Keycloak du compte visé, conservé même si la ligne app.utilisateur n'existe pas ou plus."
  uuid cible_appareil_id FK "Appareil visé, de la même organisation."
  text resultat "`reussi`, `refuse` (droit manquant, cible d'une autre organisation) ou `echec` (Keycloak ou base indisponible)."
  jsonb details "Éléments utiles à l'audit : motif, code d'erreur, ensemble de permissions. Jamais de mot de passe ni de jeton."
  timestamp_with_time_zone cree_le "Date de l'appel."
}
"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.appareil" {
  uuid id "Identifiant de l'appareil (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."
  text code "Code court unique de l'appareil, utilisé dans les références provisoires (EC-009)."
  uuid utilisateur_id FK "Agent titulaire de l'appareil."
  text modele "Modèle du téléphone."
  boolean gnss_bifrequence "Vrai si le téléphone dispose d'un récepteur GNSS bifréquence (GPS-03, GPS-05)."
  text version_application "Dernière version de l'application terrain connue."
  text statut "Statut : actif, revoque ou remplace."
  timestamp_with_time_zone enrole_le "Date d'enrôlement."
  timestamp_with_time_zone revoque_le "Date de révocation. Nulle si l'appareil n'est pas révoqué."
  uuid revoque_par FK "Utilisateur qui a révoqué l'appareil."
  text motif_revocation "Motif de la révocation, obligatoire dès qu'elle a lieu."
  bigint derniere_sequence "Dernière séquence de commande traitée pour cet appareil. Ne diminue jamais."
  timestamp_with_time_zone derniere_synchro "Date de la dernière synchronisation."
  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."
}

Generated by tbls