Réception de matière (cahier §5.13, RG-170, RG-171). Rattache le lot créé (I4) à ses pesées, ses mesures et au calcul du poids net marchand, figé tel qu’imprimé. Seule la décision (validée ou rejetée) et la dérogation changent.
| Name |
Type |
Default |
Nullable |
Children |
Parents |
Comment |
| id |
uuid |
app.uuid_v7() |
false |
app.reception_pesee app.reception_mesure |
|
Identifiant de la réception (UUID v7). |
| organisation_id |
uuid |
|
false |
app.reception_pesee app.reception_mesure |
app.organisation app.utilisateur app.fichier app.campagne app.produit app.producteur app.fournisseur app.contrat app.lot |
Organisation propriétaire (isolation par ligne). |
| campagne_id |
uuid |
|
false |
|
app.campagne |
Campagne de la réception. |
| produit_id |
uuid |
|
false |
|
app.produit |
Produit reçu. |
| producteur_id |
uuid |
|
true |
|
app.producteur |
Producteur qui livre ; vide si la matière vient d’un fournisseur (l’un ou l’autre, jamais les deux). |
| fournisseur_id |
uuid |
|
true |
|
app.fournisseur |
Fournisseur qui livre ; vide si la matière vient d’un producteur. |
| contrat_id |
uuid |
|
true |
|
app.contrat |
Contrat dont la formule de réfaction s’applique ; vide si aucun contrat (aucune réfaction). |
| lot_id |
uuid |
|
false |
|
app.lot |
Lot créé par la réception, avec son mouvement de création (I4). Un lot naît d’une seule réception. |
| date_operation |
timestamp with time zone |
|
false |
|
|
Date de la réception, saisie sur le terrain : c’est elle qui sert à apprécier l’état du certificat (RG-014). |
| statut |
text |
‘en_attente’::text |
false |
|
|
Statut : en_attente, validee ou rejetee. Ne revient jamais en arrière ; une erreur se corrige par annulation (L2-6). |
| formule_refaction |
jsonb |
|
false |
|
|
Formule de réfaction retenue, copiée du contrat à l’enregistrement : c’est elle qui est imprimée sur le bon de réception (RG-171). |
| detail_calcul |
jsonb |
|
false |
|
|
Détail du calcul du poids net marchand (brut, tare, net, excédent, réfaction), figé tel qu’imprimé (RG-171). |
| net_marchand_g |
bigint |
|
false |
|
|
Poids net marchand en grammes : net de pesée moins la réfaction du contrat. Copie du détail pour les lectures. |
| ticket_fichier_id |
uuid |
|
true |
|
app.fichier |
Ticket de pesée conservé (RG-170), facultatif tant que le stockage objet n’est pas en place. |
| derogation_motif |
text |
|
true |
|
|
Justification de la dérogation de la direction quand une règle bloque la réception (RG-014) ; vide sans dérogation. |
| derogation_par |
uuid |
|
true |
|
app.utilisateur |
Utilisateur de la direction qui a donné la dérogation. |
| derogation_le |
timestamp with time zone |
|
true |
|
|
Date de la dérogation. |
| decide_par |
uuid |
|
true |
|
app.utilisateur |
Utilisateur qui a validé ou rejeté la réception ; vide tant qu’elle est en attente. |
| decide_le |
timestamp with time zone |
|
true |
|
|
Date de la décision ; vide tant que la réception est en attente. |
| cree_par |
uuid |
|
false |
|
app.utilisateur |
Utilisateur qui a enregistré la réception. |
| cree_le |
timestamp with time zone |
now() |
false |
|
|
Date d’enregistrement de la réception. |
| modifie_le |
timestamp with time zone |
now() |
false |
|
|
Date de la dernière modification (décision ou dérogation). |
| Name |
Type |
Definition |
| reception_check |
CHECK |
CHECK (((producteur_id IS NULL) <> (fournisseur_id IS NULL))) |
| reception_check1 |
CHECK |
CHECK ((((derogation_motif IS NULL) = (derogation_par IS NULL)) AND ((derogation_motif IS NULL) = (derogation_le IS NULL)))) |
| reception_check2 |
CHECK |
CHECK (((statut = ‘en_attente’::text) = ((decide_par IS NULL) AND (decide_le IS NULL)))) |
| reception_derogation_motif_check |
CHECK |
CHECK ((derogation_motif <> ‘’::text)) |
| reception_detail_calcul_check |
CHECK |
CHECK ((jsonb_typeof(detail_calcul) = ‘object’::text)) |
| reception_formule_refaction_check |
CHECK |
CHECK ((jsonb_typeof(formule_refaction) = ‘object’::text)) |
| reception_net_marchand_g_check |
CHECK |
CHECK ((net_marchand_g >= 0)) |
| reception_statut_check |
CHECK |
CHECK ((statut = ANY (ARRAY[‘en_attente’::text, ‘validee’::text, ‘rejetee’::text]))) |
| reception_organisation_id_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id) REFERENCES app.organisation(id) |
| reception_organisation_id_cree_par_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id, cree_par) REFERENCES app.utilisateur(organisation_id, id) |
| reception_organisation_id_decide_par_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id, decide_par) REFERENCES app.utilisateur(organisation_id, id) |
| reception_organisation_id_derogation_par_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id, derogation_par) REFERENCES app.utilisateur(organisation_id, id) |
| reception_organisation_id_ticket_fichier_id_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id, ticket_fichier_id) REFERENCES app.fichier(organisation_id, id) |
| reception_organisation_id_campagne_id_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id, campagne_id) REFERENCES app.campagne(organisation_id, id) |
| reception_organisation_id_produit_id_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id, produit_id) REFERENCES app.produit(organisation_id, id) |
| reception_organisation_id_producteur_id_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id, producteur_id) REFERENCES app.producteur(organisation_id, id) |
| reception_organisation_id_fournisseur_id_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id, fournisseur_id) REFERENCES app.fournisseur(organisation_id, id) |
| reception_organisation_id_contrat_id_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id, contrat_id) REFERENCES app.contrat(organisation_id, id) |
| reception_organisation_id_lot_id_fkey |
FOREIGN KEY |
FOREIGN KEY (organisation_id, lot_id) REFERENCES app.lot(organisation_id, id) |
| reception_pkey |
PRIMARY KEY |
PRIMARY KEY (id) |
| reception_organisation_id_id_key |
UNIQUE |
UNIQUE (organisation_id, id) |
| reception_lot_id_key |
UNIQUE |
UNIQUE (lot_id) |
| Name |
Definition |
| reception_pkey |
CREATE UNIQUE INDEX reception_pkey ON app.reception USING btree (id) |
| reception_organisation_id_id_key |
CREATE UNIQUE INDEX reception_organisation_id_id_key ON app.reception USING btree (organisation_id, id) |
| reception_lot_id_key |
CREATE UNIQUE INDEX reception_lot_id_key ON app.reception USING btree (lot_id) |
| reception_campagne_idx |
CREATE INDEX reception_campagne_idx ON app.reception USING btree (organisation_id, campagne_id, statut) |
| reception_fournisseur_idx |
CREATE INDEX reception_fournisseur_idx ON app.reception USING btree (organisation_id, fournisseur_id) WHERE (fournisseur_id IS NOT NULL) |
| reception_producteur_idx |
CREATE INDEX reception_producteur_idx ON app.reception USING btree (organisation_id, producteur_id) WHERE (producteur_id IS NOT NULL) |
| Name |
Definition |
| journal |
CREATE TRIGGER journal AFTER INSERT OR DELETE OR UPDATE ON app.reception FOR EACH ROW EXECUTE FUNCTION journal.tg_journaliser() |
| modifie_le |
CREATE TRIGGER modifie_le BEFORE UPDATE ON app.reception FOR EACH ROW EXECUTE FUNCTION app.tg_modifie_le() |
| reception_controle |
CREATE TRIGGER reception_controle BEFORE INSERT OR UPDATE ON app.reception FOR EACH ROW EXECUTE FUNCTION app.tg_reception_controle() |
erDiagram
"app.reception_pesee" }o--|| "app.reception" : "FOREIGN KEY (organisation_id, reception_id) REFERENCES app.reception(organisation_id, id)"
"app.reception_mesure" }o--|| "app.reception" : "FOREIGN KEY (organisation_id, reception_id) REFERENCES app.reception(organisation_id, id)"
"app.reception" }o--|| "app.organisation" : "FOREIGN KEY (organisation_id) REFERENCES app.organisation(id)"
"app.reception" }o--|| "app.utilisateur" : "FOREIGN KEY (organisation_id, cree_par) REFERENCES app.utilisateur(organisation_id, id)"
"app.reception" }o--|| "app.utilisateur" : "FOREIGN KEY (organisation_id, decide_par) REFERENCES app.utilisateur(organisation_id, id)"
"app.reception" }o--|| "app.utilisateur" : "FOREIGN KEY (organisation_id, derogation_par) REFERENCES app.utilisateur(organisation_id, id)"
"app.reception" }o--|| "app.fichier" : "FOREIGN KEY (organisation_id, ticket_fichier_id) REFERENCES app.fichier(organisation_id, id)"
"app.reception" }o--|| "app.campagne" : "FOREIGN KEY (organisation_id, campagne_id) REFERENCES app.campagne(organisation_id, id)"
"app.reception" }o--|| "app.produit" : "FOREIGN KEY (organisation_id, produit_id) REFERENCES app.produit(organisation_id, id)"
"app.reception" }o--|| "app.producteur" : "FOREIGN KEY (organisation_id, producteur_id) REFERENCES app.producteur(organisation_id, id)"
"app.reception" }o--|| "app.fournisseur" : "FOREIGN KEY (organisation_id, fournisseur_id) REFERENCES app.fournisseur(organisation_id, id)"
"app.reception" }o--|| "app.contrat" : "FOREIGN KEY (organisation_id, contrat_id) REFERENCES app.contrat(organisation_id, id)"
"app.reception" }o--|| "app.lot" : "FOREIGN KEY (organisation_id, lot_id) REFERENCES app.lot(organisation_id, id)"
"app.reception" {
uuid id "Identifiant de la réception (UUID v7)."
uuid organisation_id FK "Organisation propriétaire (isolation par ligne)."
uuid campagne_id FK "Campagne de la réception."
uuid produit_id FK "Produit reçu."
uuid producteur_id FK "Producteur qui livre ; vide si la matière vient d'un fournisseur (l'un ou l'autre, jamais les deux)."
uuid fournisseur_id FK "Fournisseur qui livre ; vide si la matière vient d'un producteur."
uuid contrat_id FK "Contrat dont la formule de réfaction s'applique ; vide si aucun contrat (aucune réfaction)."
uuid lot_id FK "Lot créé par la réception, avec son mouvement de création (I4). Un lot naît d'une seule réception."
timestamp_with_time_zone date_operation "Date de la réception, saisie sur le terrain : c'est elle qui sert à apprécier l'état du certificat (RG-014)."
text statut "Statut : en_attente, validee ou rejetee. Ne revient jamais en arrière ; une erreur se corrige par annulation (L2-6)."
jsonb formule_refaction "Formule de réfaction retenue, copiée du contrat à l'enregistrement : c'est elle qui est imprimée sur le bon de réception (RG-171)."
jsonb detail_calcul "Détail du calcul du poids net marchand (brut, tare, net, excédent, réfaction), figé tel qu'imprimé (RG-171)."
bigint net_marchand_g "Poids net marchand en grammes : net de pesée moins la réfaction du contrat. Copie du détail pour les lectures."
uuid ticket_fichier_id FK "Ticket de pesée conservé (RG-170), facultatif tant que le stockage objet n'est pas en place."
text derogation_motif "Justification de la dérogation de la direction quand une règle bloque la réception (RG-014) ; vide sans dérogation."
uuid derogation_par FK "Utilisateur de la direction qui a donné la dérogation."
timestamp_with_time_zone derogation_le "Date de la dérogation."
uuid decide_par FK "Utilisateur qui a validé ou rejeté la réception ; vide tant qu'elle est en attente."
timestamp_with_time_zone decide_le "Date de la décision ; vide tant que la réception est en attente."
uuid cree_par FK "Utilisateur qui a enregistré la réception."
timestamp_with_time_zone cree_le "Date d'enregistrement de la réception."
timestamp_with_time_zone modifie_le "Date de la dernière modification (décision ou dérogation)."
}
"app.reception_pesee" {
uuid id "Identifiant de la pesée (UUID v7)."
uuid organisation_id FK "Organisation propriétaire (isolation par ligne)."
uuid reception_id FK "Réception pesée."
integer rang "Rang de la pesée dans la réception, à partir de 1."
bigint brut_g "Poids brut en grammes, véhicule et chargement."
bigint tare_g "Tare en grammes, jamais supérieure au brut."
timestamp_with_time_zone cree_le "Date d'enregistrement de la pesée."
}
"app.reception_mesure" {
uuid id "Identifiant de la mesure (UUID v7)."
uuid organisation_id FK "Organisation propriétaire (isolation par ligne)."
uuid reception_id FK "Réception mesurée."
integer humidite_cp "Humidité mesurée en centièmes de point (1 250 = 12,50 %) ; vide si elle n'a pas été mesurée."
integer impuretes_cp "Impuretés mesurées en centièmes de point ; vide si elles n'ont pas été mesurées."
timestamp_with_time_zone cree_le "Date d'enregistrement de la mesure."
}
"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.fichier" {
uuid id "Identifiant du fichier (UUID v7, généré sur l'appareil ou par l'API)."
uuid organisation_id FK "Organisation propriétaire de la ligne. Sert à l'isolation par RLS (EC-032) et au filtrage de la synchronisation."
text cle_objet "Clé de l'objet dans le stockage."
text type_mime "Type MIME du contenu."
bigint taille_octets "Taille en octets."
text sha256 "Empreinte SHA-256 du contenu, en hexadécimal."
text statut "Statut : attendu, recu ou empreinte_invalide. Un fichier reçu n'est plus modifiable."
uuid appareil_id FK "Appareil d'origine du dépôt."
uuid depose_par FK "Utilisateur qui a déposé le fichier."
timestamp_with_time_zone depose_le "Date de réception du contenu par le stockage."
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.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.producteur" {
uuid id "Identifiant stable (UUID v7), clé d'échange avec le système de contrôle interne."
uuid organisation_id FK "Organisation qui enrôle le producteur. Sert à l'isolation par RLS (EC-032)."
uuid groupement_id FK "Groupement d'appartenance (de la même organisation). Le téléphone filtre sur ce groupement."
text code "Code du producteur, unique par organisation et définitif (RG-010, EC-031)."
text nom_complet "Nom complet du producteur."
text telephone "Téléphone. Donnée personnelle : accès réservé aux rôles qui en ont l'usage (EX-063)."
text village "Village."
text canton "Canton."
text zone_production "Zone de production."
date date_inscription "Date d'inscription du producteur, transmise au système de contrôle interne."
text type_piece_identite "Type de la pièce d'identité (carte nationale, passeport…). Vocabulaire non contrôlé pour l'instant. Renseigné avec le numéro, ou absent avec lui."
text numero_piece_identite "Numéro de la pièce d'identité, tel que saisi. Le doublon ne bloque rien : il ouvre un contrôle (AV1-02)."
text numero_piece_normalise "Numéro de pièce en majuscules, sans espace ni tiret, calculé. Sert à rapprocher deux saisies du même numéro."
uuid photo_fichier_id FK "Photo du producteur (fichier de la même organisation)."
uuid piece_fichier_id FK "Image de la pièce d'identité (fichier de la même organisation)."
bigint chiffre_affaires_valeur "Chiffre d'affaires annuel, en unités mineures de sa devise (EC-028). Sert à l'éligibilité au groupe (EC-014)."
text chiffre_affaires_devise "Devise ISO 4217 du chiffre d'affaires. Renseignée avec la valeur, ou absente avec elle."
boolean actif "Faux quand le producteur est retiré des listes de saisie sans altérer l'historique (RG-011). Toujours faux pour une fiche fusionnée."
text statut "`actif` ou `fusionnee`. Une fiche fusionnée renvoie à la fiche retenue et ne se réactive pas."
uuid fusionnee_dans_id FK "Fiche retenue quand celle-ci a été absorbée par une fusion. Renseignée si et seulement si le statut est `fusionnee`."
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.fournisseur" {
uuid id "Identifiant stable (UUID v7)."
uuid organisation_id FK "Organisation propriétaire. Sert à l'isolation par RLS (EC-032)."
text code "Code du fournisseur, unique par organisation."
text nom "Nom du fournisseur."
text pays "Pays, code ISO 3166-1 alpha-2."
text ville "Ville."
text adresse "Adresse postale."
text telephone "Téléphone du fournisseur."
text email "Adresse électronique du fournisseur."
text contact "Personne à contacter."
boolean actif "Faux quand le fournisseur n'est plus utilisé. Un fournisseur 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" {
uuid id "Identifiant stable (UUID v7)."
uuid organisation_id FK "Organisation propriétaire. Sert à l'isolation par RLS (EC-032)."
text code "Code du contrat, unique par organisation."
text type "`achat` (producteur, groupement ou fournisseur), `vente` (client) ou `prestation` (client ou fournisseur, EC-052)."
uuid producteur_id FK "Contrepartie producteur (achat). Exactement une contrepartie entre producteur, groupement, fournisseur et client."
uuid groupement_id FK "Contrepartie groupement (achat)."
uuid fournisseur_id FK "Contrepartie fournisseur (achat ou prestation)."
uuid client_id FK "Contrepartie client (vente ou prestation)."
uuid campagne_id FK "Campagne du contrat (de la même organisation)."
date date_debut "Premier jour de la période du contrat."
date date_fin "Dernier jour de la période du contrat. Jamais avant le début."
text statut "`brouillon`, `actif`, `solde` ou `resilie`. Pas de retour en arrière ; l'activation exige une ligne."
text conditions_paiement "Conditions de paiement, en texte, facultatives."
uuid fichier_id FK "Pièce jointe du contrat (fichier de la même organisation), facultative."
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.lot" {
uuid id "Identifiant du lot (UUID v7)."
uuid organisation_id FK "Organisation propriétaire (isolation par ligne)."
uuid campagne_id FK "Campagne du lot."
text reference_provisoire "Référence provisoire, tant que le lot n'est pas validé (BR-AAAA-MM-JJ-NNNN dans le cahier)."
bigint numero "Rang du numéro officiel, pris par app.attribuer_numero à la validation, jamais réutilisé (I3). Vide avant la validation."
text nature "Nature de la séquence de numérotation : MP matière première, REC réception, NET nettoyé, PF produit fini (EC-068)."
uuid produit_id FK "Produit du lot."
text qualite "Catégorie d'affichage du lot (EC-090) : saisie à la réception, calculée par le mélange (la plus basse catégorie des entrées et des états du résultat, EC-120). La qualité par référentiel est dans app.lot_qualite."
text statut "Statut : brouillon, en_attente, valide, rejete, annule, consomme, quarantaine, archive. Transitions contrôlées par app.tg_lot_controle."
uuid compte_matiere_id FK "Compte de matière du lot (nature lot) : son solde est la quantité du lot."
uuid mouvement_creation_id FK "Mouvement qui crée le lot (I4) : il crédite le compte du lot et n'est pas une contre-passation."
timestamp_with_time_zone date_operation "Date de l'opération qui crée le lot, saisie sur le terrain."
text motif_annulation "Motif de l'annulation ; renseigné si et seulement si le statut est annule."
uuid annule_par FK "Utilisateur qui a annulé le lot."
timestamp_with_time_zone date_annulation "Date de l'annulation."
uuid cree_par FK "Utilisateur qui a créé le lot."
timestamp_with_time_zone cree_le "Date d'enregistrement du lot."
timestamp_with_time_zone modifie_le "Date de la dernière modification (statut ou numéro)."
}
Generated by tbls