Rejets de sécurité de la synchronisation (EC-043) : identité incohérente, identifiant ou séquence de commande déjà utilisés. Ajout seul. Aucune écriture métier ne découle d’un rejet.
| Name |
Type |
Default |
Nullable |
Children |
Parents |
Comment |
| id |
uuid |
app.uuid_v7() |
false |
|
|
Identifiant du rejet (UUID v7). |
| organisation_id |
uuid |
|
false |
|
app.organisation |
Organisation du jeton qui a envoyé la commande. Sert à l’isolation par RLS (EC-032). |
| commande_id |
uuid |
|
true |
|
|
Identifiant de commande annoncé dans l’enveloppe reçue. Sans clé étrangère : il peut désigner une autre commande. |
| appareil_id |
uuid |
|
true |
|
|
Appareil annoncé dans l’enveloppe reçue. Sans clé étrangère : il peut être incohérent avec le jeton. |
| utilisateur_id |
uuid |
|
true |
|
|
Utilisateur annoncé dans l’enveloppe reçue. Sans clé étrangère : il peut être incohérent avec le jeton. |
| sequence |
bigint |
|
true |
|
|
Séquence annoncée dans l’enveloppe reçue. |
| code |
text |
|
false |
|
|
Code du rejet : identite_incoherente, identifiant_reutilise ou sequence_reutilisee. |
| empreinte_recue |
text |
|
true |
|
|
Empreinte annoncée dans l’enveloppe reçue. |
| details |
jsonb |
‘{}’::jsonb |
false |
|
|
Éléments de comparaison : valeurs attendues et reçues, empreinte de la commande déjà enregistrée. |
| enveloppe |
jsonb |
|
false |
|
|
Enveloppe reçue, telle quelle. |
| recu_le |
timestamp with time zone |
now() |
false |
|
|
Heure de réception du rejet par le serveur. |
| Name |
Type |
Definition |
| rejet_code_check |
CHECK |
CHECK ((code = ANY (ARRAY[‘identite_incoherente’::text, ‘identifiant_reutilise’::text, ‘sequence_reutilisee’::text]))) |
| rejet_organisation_id_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id) REFERENCES app.organisation(id) |
| rejet_pkey |
PRIMARY KEY |
PRIMARY KEY (id) |
| Name |
Definition |
| rejet_pkey |
CREATE UNIQUE INDEX rejet_pkey ON sync.rejet USING btree (id) |
| rejet_organisation_idx |
CREATE INDEX rejet_organisation_idx ON sync.rejet USING btree (organisation_id, recu_le DESC) |
| Name |
Definition |
| journal |
CREATE TRIGGER journal AFTER INSERT OR DELETE OR UPDATE ON sync.rejet FOR EACH ROW EXECUTE FUNCTION journal.tg_journaliser() |
| ajout_seul |
CREATE TRIGGER ajout_seul BEFORE DELETE OR UPDATE ON sync.rejet FOR EACH ROW EXECUTE FUNCTION app.tg_ajout_seul() |
erDiagram
"sync.rejet" }o--|| "app.organisation" : "FOREIGN KEY (organisation_id) REFERENCES app.organisation(id)"
"sync.rejet" {
uuid id "Identifiant du rejet (UUID v7)."
uuid organisation_id FK "Organisation du jeton qui a envoyé la commande. Sert à l'isolation par RLS (EC-032)."
uuid commande_id "Identifiant de commande annoncé dans l'enveloppe reçue. Sans clé étrangère : il peut désigner une autre commande."
uuid appareil_id "Appareil annoncé dans l'enveloppe reçue. Sans clé étrangère : il peut être incohérent avec le jeton."
uuid utilisateur_id "Utilisateur annoncé dans l'enveloppe reçue. Sans clé étrangère : il peut être incohérent avec le jeton."
bigint sequence "Séquence annoncée dans l'enveloppe reçue."
text code "Code du rejet : identite_incoherente, identifiant_reutilise ou sequence_reutilisee."
text empreinte_recue "Empreinte annoncée dans l'enveloppe reçue."
jsonb details "Éléments de comparaison : valeurs attendues et reçues, empreinte de la commande déjà enregistrée."
jsonb enveloppe "Enveloppe reçue, telle quelle."
timestamp_with_time_zone recu_le "Heure de réception du rejet par le serveur."
}
"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