Aller au contenu

app.pack_version

Version d’un pack filière. Une version publiée est figée : seul le passage à « retiré » reste possible.

Name Type Default Nullable Children Parents Comment
id uuid app.uuid_v7() false app.campagne app.produit app.variable_dictionnaire app.regle_decision app.point_controle app.noeud_activite app.organisation_onboarding Identifiant de la version (UUID v7).
pack_id uuid false app.pack Pack concerné.
version text false Version sémantique (majeure.mineure.correctif).
contenu jsonb false Contenu du pack, en JSON.
sha256 text false Empreinte SHA-256 du contenu.
calibre boolean false false Vrai si les rendements du pack ont été calibrés (EC-007).
statut text ‘brouillon’::text false Statut : brouillon, publie ou retire.
publie_le timestamp with time zone true Date de publication. Nulle pour un brouillon.
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 la dernière modification, tenue par un déclencheur.
publie_par uuid true Identifiant Keycloak (sub) du membre de l’équipe de l’éditeur qui a publié la version depuis le cockpit. Nul pour les versions publiées par le pipeline ou la ligne de commande avant CP-5.
Name Type Definition
pack_version_check CHECK CHECK (((statut = ‘brouillon’::text) = (publie_le IS NULL)))
pack_version_sha256_check CHECK CHECK ((sha256 ~ ‘^[0-9a-f]{64}$’::text))
pack_version_statut_check CHECK CHECK ((statut = ANY (ARRAY[‘brouillon’::text, ‘publie’::text, ‘retire’::text])))
pack_version_version_check CHECK CHECK ((version ~ ‘^[0-9]+.[0-9]+.[0-9]+$’::text))
pack_version_pack_id_fkey FOREIGN KEY FOREIGN KEY (pack_id) REFERENCES app.pack(id)
pack_version_pkey PRIMARY KEY PRIMARY KEY (id)
pack_version_pack_id_version_key UNIQUE UNIQUE (pack_id, version)
Name Definition
pack_version_pkey CREATE UNIQUE INDEX pack_version_pkey ON app.pack_version USING btree (id)
pack_version_pack_id_version_key CREATE UNIQUE INDEX pack_version_pack_id_version_key ON app.pack_version USING btree (pack_id, version)
Name Definition
journal CREATE TRIGGER journal AFTER INSERT OR DELETE OR UPDATE ON app.pack_version FOR EACH ROW EXECUTE FUNCTION journal.tg_journaliser()
modifie_le CREATE TRIGGER modifie_le BEFORE UPDATE ON app.pack_version FOR EACH ROW EXECUTE FUNCTION app.tg_modifie_le()
pack_version_fige CREATE TRIGGER pack_version_fige BEFORE UPDATE ON app.pack_version FOR EACH ROW EXECUTE FUNCTION app.tg_pack_version_fige()
erDiagram

"app.campagne" }o--|| "app.pack_version" : "FOREIGN KEY (pack_version_id) REFERENCES app.pack_version(id)"
"app.produit" }o--o| "app.pack_version" : "FOREIGN KEY (pack_version_id) REFERENCES app.pack_version(id)"
"app.variable_dictionnaire" }o--o| "app.pack_version" : "FOREIGN KEY (pack_version_id) REFERENCES app.pack_version(id)"
"app.regle_decision" }o--|| "app.pack_version" : "FOREIGN KEY (pack_version_id) REFERENCES app.pack_version(id)"
"app.point_controle" }o--|| "app.pack_version" : "FOREIGN KEY (pack_version_id) REFERENCES app.pack_version(id)"
"app.noeud_activite" }o--|| "app.pack_version" : "FOREIGN KEY (pack_version_id) REFERENCES app.pack_version(id)"
"app.organisation_onboarding" }o--o| "app.pack_version" : "FOREIGN KEY (pack_version_id) REFERENCES app.pack_version(id)"
"app.pack_version" }o--|| "app.pack" : "FOREIGN KEY (pack_id) REFERENCES app.pack(id)"

"app.pack_version" {
  uuid id "Identifiant de la version (UUID v7)."
  uuid pack_id FK "Pack concerné."
  text version "Version sémantique (majeure.mineure.correctif)."
  jsonb contenu "Contenu du pack, en JSON."
  text sha256 "Empreinte SHA-256 du contenu."
  boolean calibre "Vrai si les rendements du pack ont été calibrés (EC-007)."
  text statut "Statut : brouillon, publie ou retire."
  timestamp_with_time_zone publie_le "Date de publication. Nulle pour un brouillon."
  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."
  uuid publie_par "Identifiant Keycloak (sub) du membre de l'équipe de l'éditeur qui a publié la version depuis le cockpit. Nul pour les versions publiées par le pipeline ou la ligne de commande avant CP-5."
}
"app.campagne" {
  uuid id "Identifiant stable (UUID v7)."
  uuid organisation_id FK "Organisation propriétaire. Sert à l'isolation par RLS (EC-032)."
  text code "Code de campagne inséré dans le numéro officiel. Unique par organisation, toutes années confondues (EC-031)."
  text nom "Nom de la campagne."
  date date_ouverture_prevue "Date d'ouverture prévue. Détermine « AA » tant que la campagne est en préparation."
  date date_cloture_prevue "Date de clôture prévue. Jamais avant la date d'ouverture prévue."
  date date_ouverture "Date d'ouverture réelle, renseignée à l'ouverture puis figée."
  date date_cloture "Date de clôture réelle, renseignée à la clôture."
  smallint annee "Année d'ouverture (réelle, sinon prévue), calculée. Ses deux derniers chiffres forment « AA » du numéro (EC-023)."
  uuid pack_version_id FK "Version du pack de la filière. Figée à l'ouverture, qui exige une version publiée."
  integer modele_numerotation_version FK "Version du modèle de numérotation de l'organisation. Obligatoire et figée à l'ouverture ; la clé vers le modèle est posée à la séquence A3."
  text statut "`preparation`, `ouverte` ou `cloturee`. Pas de retour en préparation."
  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.produit" {
  uuid id "Identifiant stable (UUID v7)."
  uuid organisation_id FK "Organisation propriétaire. Sert à l'isolation par RLS (EC-032)."
  text code "Code du produit, inséré dans le numéro officiel (segment « produit »). Unique par organisation (EC-063)."
  text nom_fr "Nom en français."
  text nom_en "Nom en anglais."
  text unite_code FK "Unité de saisie et d'affichage."
  boolean est_matiere_premiere "Vrai pour une matière première, faux pour un produit fini."
  uuid matiere_premiere_liee_id FK "Matière première dont le produit fini est issu. Réservé aux produits finis, de la même organisation."
  text code_modele "Code du modèle de produit du pack qui a servi à créer la ligne. Nul pour un produit créé à la main."
  uuid pack_version_id FK "Version de pack d'origine. Nulle pour un produit créé à la main ; nulle exactement quand code_modele l'est."
  boolean actif "Faux quand le produit n'est plus utilisé. Un produit 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.variable_dictionnaire" {
  uuid id "Identifiant stable (UUID v7)."
  text nom "Nom pointé de la variable, lu par les conditions (reception.quantite_g)."
  text type "Type : entier, texte, booléen, liste de textes, table texte → texte. Jamais de décimal."
  text unite "Unité de la valeur (g, cp…) ; vide pour un texte ou un booléen."
  text origine "Origine : noyau (code), pack (mesure déclarée par une étape), indicateur (calcul du noyau)."
  boolean hors_ligne "Vrai si la variable est disponible sur le téléphone ; sinon la ligne qui la lit est évaluée au serveur (AM-10)."
  text module_code FK "Module qui déclare la variable ; exclusif de pack_version_id."
  uuid pack_version_id FK "Version de pack qui déclare la variable ; exclusif de module_code."
  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)."
}
"app.regle_decision" {
  uuid id "Identifiant stable (UUID v7)."
  uuid pack_version_id FK "Version du pack référentiel qui publie la ligne."
  text code "Identifiant de la ligne dans le pack, stable d'une version à l'autre."
  text accroche "Point d'accroche où la ligne est évaluée (reception.avant_validation…), déclaré par un manifeste de module."
  jsonb contexte "Facteurs cités et leurs valeurs acceptées (produit, référentiel…) ; {} : tous les contextes."
  text condition "Condition CEL booléenne sur les variables du dictionnaire ; les seuils passent par param('clé'), jamais en dur."
  text__ parametres "Clés de paramètres citées par la condition, résolues par le moteur de paramètres."
  text issue "Issue d'une condition vraie, parmi six, de la plus faible à la plus forte : signaler, exiger une note, exiger une pièce, créer une non-conformité, mettre en quarantaine, bloquer l'action."
  text source "Texte, article ou règle d'où vient la ligne. Obligatoire (PC-06)."
  date date_effet "Date d'effet, incluse (AM-11)."
  date date_fin "Date de fin, exclue ; vide si la ligne reste en vigueur."
  text date_reference "Date de l'objet comparée à la période d'effet : opération, récolte, création du lot ou émission du certificat (AM-11)."
  text evaluation "locale (téléphone et serveur) ou serveur (données absentes du téléphone ; issue connue à la synchronisation, AM-10)."
  jsonb mesure "Pour un écart chiffré : variable constatée et paramètre attendu (EC-098)."
  timestamp_with_time_zone cree_le "Date de publication de la ligne."
}
"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."
}
"app.noeud_activite" {
  uuid id "Identifiant stable (UUID v7)."
  uuid organisation_id FK "Organisation propriétaire. Sert à l'isolation par RLS (EC-032)."
  text chemin "Chemin pointé du nœud, un segment par niveau, trois niveaux au plus. Au premier niveau, il vaut le code de l'activité."
  text activite_code FK "Type du nœud, pris dans le catalogue fermé app.activite ; sa profondeur est celle du nœud."
  text libelle_fr "Libellé en français, défini par le pack."
  text libelle_en "Libellé en anglais, défini par le pack."
  boolean obligatoire "Vrai : le nœud ne se désactive pas tant que son parent est actif."
  boolean critique "Vrai : étape critique (OSP-05), donc obligatoire."
  boolean sous_traitable "Vrai : le nœud peut être confié à un sous-traitant."
  smallint ordre "Rang parmi les nœuds frères."
  uuid pack_version_id FK "Version du pack d'où le nœud a été copié."
  timestamp_with_time_zone cree_le "Date de création de la ligne."
  timestamp_with_time_zone modifie_le "Date de dernière modification de la ligne."
  jsonb contrat "Contrat facultatif du nœud (AM-04, EC-118) : entrées et sorties typées (codes produit), mesures (code, libellé, unité, type) et clés de paramètres, tel que publié par le pack et validé par packs.validerArbre. Absent : le nœud accepte tout (pas de contrat défini). Les intrants cités par AM-04 restent en écart (EC-119)."
}
"app.organisation_onboarding" {
  uuid id "Identifiant stable (UUID v7)."
  uuid organisation_id FK "Organisation concernée. Sert à l'isolation par RLS (EC-032)."
  text etat "reporte : la personne a choisi « Plus tard » ; termine : les modules, le pack et les activités ont été appliqués ; rouvert : le parcours a été rejoué (tests, reprise après un changement d'activité)."
  jsonb reponses "Réponses au questionnaire : famille de culture, activités, exigences, familles souhaitées mais pas encore disponibles. Sert de préremplissage et de demande à l'équipe de l'éditeur (EC-133)."
  uuid pack_version_id FK "Version du pack filière chargée à la fin du parcours. Nulle tant que le parcours n'est pas terminé."
  text motif "Motif de la ligne, obligatoire (« Onboarding » en usage normal)."
  uuid cree_par FK "Utilisateur qui a reporté, terminé ou rouvert le parcours."
  timestamp_with_time_zone cree_le "Horodatage de la ligne."
}
"app.pack" {
  uuid id "Identifiant du pack (UUID v7)."
  text code "Code du pack (ex. fruits)."
  text libelle "Libellé du pack."
  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 type "Type de pack (AM-06) : filiere (produits, paramètres, arbre d'activités) ou referentiel (états de qualité, grilles, tables de décision)."
}

Generated by tbls