Évaluation d’un point de contrôle par une organisation : résultat d’une règle ou déclaration d’une personne. En ajout seul ; la plus récente fait foi (vue evaluation_point_en_vigueur). Le statut « non applicable » d’origine structurelle et « preuve manquante » se calculent dans le domaine.
| Name |
Type |
Default |
Nullable |
Children |
Parents |
Comment |
| id |
uuid |
app.uuid_v7() |
false |
app.preuve |
|
Identifiant stable (UUID v7). |
| organisation_id |
uuid |
|
false |
app.preuve |
app.organisation app.utilisateur app.constat |
Organisation propriétaire. Sert à l’isolation par RLS (EC-032). |
| point_controle_id |
uuid |
|
false |
|
app.point_controle |
Point évalué. |
| objet_type |
text |
|
true |
|
|
Type de l’objet évalué (lot, site…). Vide : le point est évalué pour toute l’organisation. |
| objet_id |
uuid |
|
true |
|
|
Identifiant de l’objet évalué. Renseigné avec objet_type, ou pas du tout. |
| statut |
text |
|
false |
|
|
satisfait, preuve_manquante, ecart_ouvert, a_verifier ou non_applicable. Une personne ne déclare jamais « preuve manquante » : il se déduit des pièces. |
| source |
text |
|
false |
|
|
regle : résultat d’une règle du moteur. manuelle : déclaration d’une personne. |
| constat_id |
uuid |
|
true |
|
app.constat |
Constat d’écart ouvert par la règle (AM-15), pour une évaluation issue d’une règle. |
| motif |
text |
|
true |
|
|
Justification de la déclaration. Obligatoire pour déclarer un point satisfait ou non applicable. |
| evalue_par |
uuid |
|
true |
|
app.utilisateur |
Utilisateur qui a déclaré. Vide pour un résultat de règle. |
| evalue_le |
timestamp with time zone |
clock_timestamp() |
false |
|
|
Date de l’évaluation. |
| Name |
Type |
Definition |
| evaluation_point_check |
CHECK |
CHECK (((objet_type IS NULL) = (objet_id IS NULL))) |
| evaluation_point_check1 |
CHECK |
CHECK (((source = ‘regle’::text) OR (statut <> ‘preuve_manquante’::text))) |
| evaluation_point_check2 |
CHECK |
CHECK (((source = ‘manuelle’::text) = (evalue_par IS NOT NULL))) |
| evaluation_point_check3 |
CHECK |
CHECK (((constat_id IS NULL) OR (source = ‘regle’::text))) |
| evaluation_point_motif_check |
CHECK |
CHECK (((motif IS NULL) OR (btrim(motif) <> ‘’::text))) |
| evaluation_point_objet_type_check |
CHECK |
CHECK ((objet_type ~ ‘^[a-z][a-z0-9_]*$’::text)) |
| evaluation_point_source_check |
CHECK |
CHECK ((source = ANY (ARRAY[‘regle’::text, ‘manuelle’::text]))) |
| evaluation_point_statut_check |
CHECK |
CHECK ((statut = ANY (ARRAY[‘satisfait’::text, ‘preuve_manquante’::text, ‘ecart_ouvert’::text, ‘a_verifier’::text, ‘non_applicable’::text]))) |
| evaluation_point_organisation_id_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id) REFERENCES app.organisation(id) |
| evaluation_point_organisation_id_evalue_par_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id, evalue_par) REFERENCES app.utilisateur(organisation_id, id) |
| evaluation_point_organisation_id_constat_id_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id, constat_id) REFERENCES app.constat(organisation_id, id) |
| evaluation_point_point_controle_id_fkey |
FOREIGN KEY |
FOREIGN KEY (point_controle_id) REFERENCES app.point_controle(id) |
| evaluation_point_pkey |
PRIMARY KEY |
PRIMARY KEY (id) |
| evaluation_point_organisation_id_id_key |
UNIQUE |
UNIQUE (organisation_id, id) |
| Name |
Definition |
| evaluation_point_pkey |
CREATE UNIQUE INDEX evaluation_point_pkey ON app.evaluation_point USING btree (id) |
| evaluation_point_organisation_id_id_key |
CREATE UNIQUE INDEX evaluation_point_organisation_id_id_key ON app.evaluation_point USING btree (organisation_id, id) |
| evaluation_point_point_idx |
CREATE INDEX evaluation_point_point_idx ON app.evaluation_point USING btree (organisation_id, point_controle_id, evalue_le DESC) |
| Name |
Definition |
| journal |
CREATE TRIGGER journal AFTER INSERT OR DELETE OR UPDATE ON app.evaluation_point FOR EACH ROW EXECUTE FUNCTION journal.tg_journaliser() |
| ajout_seul |
CREATE TRIGGER ajout_seul BEFORE DELETE OR UPDATE ON app.evaluation_point FOR EACH ROW EXECUTE FUNCTION app.tg_ajout_seul() |
| motif |
CREATE TRIGGER motif BEFORE INSERT ON app.evaluation_point FOR EACH ROW EXECUTE FUNCTION app.tg_evaluation_point_motif() |
erDiagram
"app.preuve" }o--|| "app.evaluation_point" : "FOREIGN KEY (organisation_id, evaluation_point_id) REFERENCES app.evaluation_point(organisation_id, id)"
"app.evaluation_point" }o--|| "app.organisation" : "FOREIGN KEY (organisation_id) REFERENCES app.organisation(id)"
"app.evaluation_point" }o--|| "app.utilisateur" : "FOREIGN KEY (organisation_id, evalue_par) REFERENCES app.utilisateur(organisation_id, id)"
"app.evaluation_point" }o--|| "app.constat" : "FOREIGN KEY (organisation_id, constat_id) REFERENCES app.constat(organisation_id, id)"
"app.evaluation_point" }o--|| "app.point_controle" : "FOREIGN KEY (point_controle_id) REFERENCES app.point_controle(id)"
"app.evaluation_point" {
uuid id "Identifiant stable (UUID v7)."
uuid organisation_id FK "Organisation propriétaire. Sert à l'isolation par RLS (EC-032)."
uuid point_controle_id FK "Point évalué."
text objet_type "Type de l'objet évalué (lot, site…). Vide : le point est évalué pour toute l'organisation."
uuid objet_id "Identifiant de l'objet évalué. Renseigné avec `objet_type`, ou pas du tout."
text statut "`satisfait`, `preuve_manquante`, `ecart_ouvert`, `a_verifier` ou `non_applicable`. Une personne ne déclare jamais « preuve manquante » : il se déduit des pièces."
text source "`regle` : résultat d'une règle du moteur. `manuelle` : déclaration d'une personne."
uuid constat_id FK "Constat d'écart ouvert par la règle (AM-15), pour une évaluation issue d'une règle."
text motif "Justification de la déclaration. Obligatoire pour déclarer un point satisfait ou non applicable."
uuid evalue_par FK "Utilisateur qui a déclaré. Vide pour un résultat de règle."
timestamp_with_time_zone evalue_le "Date de l'évaluation."
}
"app.preuve" {
uuid id "Identifiant stable (UUID v7)."
uuid organisation_id FK "Organisation propriétaire. Sert à l'isolation par RLS (EC-032)."
uuid fichier_id FK "Fichier déposé (de la même organisation)."
uuid point_controle_id FK "Point de contrôle que la pièce appuie."
text objet_type "Type de l'objet appuyé. Vide : toute l'organisation."
uuid objet_id "Identifiant de l'objet appuyé. Renseigné avec `objet_type`, ou pas du tout."
uuid evaluation_point_id FK "Évaluation que la pièce a motivée, si elle a été liée à ce moment."
uuid depose_par FK "Utilisateur qui a lié la pièce."
timestamp_with_time_zone cree_le "Date de liaison."
}
"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.constat" {
uuid id "Identifiant stable (UUID v7)."
uuid organisation_id FK "Organisation concernée. Sert à l'isolation par RLS (EC-032)."
uuid regle_decision_id FK "Ligne de décision évaluée."
text regle_code "Code de la ligne, recopié pour la lecture (instantané, PC-08)."
text version "Version du pack de la ligne, recopiée (instantané, PC-08)."
text source "Source de la ligne, recopiée (instantané, PC-08)."
text accroche "Point d'accroche de l'évaluation."
text objet_type "Nature de l'objet concerné (reception, lot, collecte…)."
uuid objet_id "Identifiant de l'objet concerné."
text resultat "ecart (condition vraie) ou a_verifier (variable, paramètre ou date absents, erreur d'évaluation : jamais de valeur par défaut, PC-07)."
text issue "Issue de la ligne pour un écart ; vide pour « à vérifier »."
text motif "Raison d'un « à vérifier » ; vide pour un écart."
jsonb valeurs "Valeurs lues par la ligne et paramètres utilisés, au moment de l'évaluation."
bigint constatee "Valeur constatée, si la ligne déclare une mesure (entier, unité de la variable)."
bigint attendue "Valeur attendue, si la ligne déclare une mesure."
bigint ecart "Écart constatée − attendue, si la ligne déclare une mesure."
uuid controle_id FK "Entrée de la file de contrôle liée, quand l'issue met une commande en contrôle (EC-091)."
text statut "ouvert, justifie (note exigée), leve, clos (final)."
text note "Justification écrite (RG-308), obligatoire pour « justifié »."
uuid statut_par FK "Auteur du dernier changement de statut."
timestamp_with_time_zone statut_le "Date du dernier changement de statut, posée par la base."
uuid cree_par FK "Utilisateur à l'origine de l'évaluation ; vide pour une évaluation du serveur."
timestamp_with_time_zone cree_le "Date du constat."
timestamp_with_time_zone modifie_le "Date de la dernière modification, tenue par un déclencheur."
text origine "Origine de la règle : pack (ligne d'une table de décision, regle_decision_id renseigné) ou processus (règle codée comme RG-014 ou RG-172, sans ligne de décision)."
}
"app.point_controle" {
uuid id "Identifiant stable (UUID v7)."
uuid pack_version_id FK "Version du pack référentiel qui publie le point."
text code "Code du point, unique dans la version du pack (par exemple CER-39)."
text libelle_fr "Libellé en français."
text libelle_en "Libellé en anglais."
text theme "Thème d'affichage du tableau « prêt pour l'audit ». Texte libre fourni par le pack, provisoire (EC-104)."
text source "Texte, article ou citation courte dont le point est tiré."
text__ activites "Activités du catalogue `app.activite` auxquelles le point s'applique. Vide : toutes les activités. Le point est « non applicable » si l'organisation n'en exerce aucune."
text objet "Ce sur quoi porte le point : opération, lot, site, organisation…"
text preuve_attendue "Type de pièce attendue, en texte. Vide : le point n'exige aucune pièce. Sans pièce liée, un point autrement satisfait est « preuve manquante »."
text echeance "Échéance ou fréquence, en texte. Stockée, non évaluée avant un besoin avéré (EC-104)."
text mode "`automatique` : une règle du moteur le juge. `manuel` : une personne le coche, avec pièce."
text regle_code FK "Ligne de décision de la même version de pack qui juge le point. Obligatoire si le mode est automatique, interdit sinon."
text module_code FK "Module dont dépend le point. Vide : noyau. Si le module est inactif, le point est « non applicable »."
date date_effet "Premier jour où le point s'applique (AM-11)."
date date_fin "Premier jour où le point ne s'applique plus. La date de fin est exclue."
text date_reference "Date à laquelle le point se juge : opération, récolte, création du lot ou émission du certificat (AM-11)."
timestamp_with_time_zone cree_le "Date de publication du point."
}
Generated by tbls