Aller au contenu

app.unite

Unités de saisie et d’affichage des quantités. Le stock est toujours en grammes (EC-030) : l’unité ne fait que convertir. Globale, ajout seul.

Name Type Default Nullable Children Parents Comment
id uuid app.uuid_v7() false Identifiant stable (UUID v7).
code text false app.produit app.contrat_ligne app.vente Code de l’unité : g, kg, t.
libelle_fr text false Libellé en français.
libelle_en text false Libellé en anglais.
grammes_par_unite bigint false Nombre de grammes dans une unité (entier) : kg 1 000, t 1 000 000.
Name Type Definition
unite_code_check CHECK CHECK ((code ~ ‘^[a-z]+$’::text))
unite_grammes_par_unite_check CHECK CHECK ((grammes_par_unite > 0))
unite_pkey PRIMARY KEY PRIMARY KEY (id)
unite_code_key UNIQUE UNIQUE (code)
Name Definition
unite_pkey CREATE UNIQUE INDEX unite_pkey ON app.unite USING btree (id)
unite_code_key CREATE UNIQUE INDEX unite_code_key ON app.unite USING btree (code)
Name Definition
journal CREATE TRIGGER journal AFTER INSERT OR DELETE OR UPDATE ON app.unite FOR EACH ROW EXECUTE FUNCTION journal.tg_journaliser()
ajout_seul CREATE TRIGGER ajout_seul BEFORE DELETE OR UPDATE ON app.unite FOR EACH ROW EXECUTE FUNCTION app.tg_ajout_seul()
erDiagram

"app.produit" }o--|| "app.unite" : "FOREIGN KEY (unite_code) REFERENCES app.unite(code)"
"app.contrat_ligne" }o--|| "app.unite" : "FOREIGN KEY (unite_prix) REFERENCES app.unite(code)"
"app.vente" }o--|| "app.unite" : "FOREIGN KEY (unite_prix) REFERENCES app.unite(code)"

"app.unite" {
  uuid id "Identifiant stable (UUID v7)."
  text code "Code de l'unité : g, kg, t."
  text libelle_fr "Libellé en français."
  text libelle_en "Libellé en anglais."
  bigint grammes_par_unite "Nombre de grammes dans une unité (entier) : kg 1 000, t 1 000 000."
}
"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.contrat_ligne" {
  uuid id "Identifiant stable (UUID v7)."
  uuid organisation_id FK "Organisation propriétaire. Sert à l'isolation par RLS (EC-032)."
  uuid contrat_id FK "Contrat de la ligne (de la même organisation)."
  uuid produit_id FK "Produit de la ligne (de la même organisation), unique dans le contrat."
  bigint quantite_engagee_g "Quantité engagée en grammes (EC-030), strictement positive."
  bigint prix_unite_mineure "Prix de base en unités mineures de la devise, par unité de prix (par exemple 150 XOF le kilo). Jamais sans devise."
  text devise FK "Devise du prix, code ISO 4217 connu de app.devise (EC-028)."
  text unite_prix FK "Unité du prix (`g`, `kg`, `t`) : le prix vaut par cette unité. Le stock reste en grammes (EC-030)."
  integer tolerance_cp "Tolérance sur la quantité engagée, en centièmes de point. L'alerte de solde au-delà est calculée au Lot 2."
  jsonb formule_refaction "Formule de réfaction en JSON (aucune, excedent_lineaire, lineaire_simple, bilan_de_masse), forme validée par FormuleRefaction (Ajv) ; le mode d'arrondi en fait partie (EC-051). Lue par calculerPesee à la réception."
  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.vente" {
  uuid id "Identifiant de la vente (UUID v7)."
  uuid organisation_id FK "Organisation propriétaire (isolation par ligne)."
  uuid client_id FK "Client acheteur."
  uuid contrat_id FK "Contrat de vente actif du même client, facultatif : vide pour une vente « spot ». Sa tolérance s'ajoute à la quantité engagée."
  uuid produit_id FK "Produit vendu : celui de tous les lots expédiés."
  text referentiel_code FK "Référentiel revendiqué sur la vente (RG-156, AV1-03) ; vide si la vente ne revendique aucun référentiel."
  bigint quantite_engagee_g "Quantité vendue en grammes. Le total expédié ne la dépasse pas, tolérance du contrat comprise."
  bigint prix_unite_mineure "Prix par unité de prix, en unités mineures de la devise."
  text unite_prix FK "Unité à laquelle le prix s'applique (kilogramme, tonne…)."
  text devise FK "Devise du prix."
  date date_operation "Date de la vente."
  text statut "Statut : brouillon, validee, soldee ou annulee. Une vente annulée ne peut plus avoir d'expédition validée."
  uuid valide_par FK "Utilisateur qui a validé la vente ; vide tant qu'elle est en brouillon."
  timestamp_with_time_zone valide_le "Date de validation de la vente."
  uuid cree_par FK "Utilisateur qui a saisi la vente."
  timestamp_with_time_zone cree_le "Date de saisie de la vente."
  timestamp_with_time_zone modifie_le "Date de la dernière modification de la vente."
}

Generated by tbls