# Lots et quantités Langue : `fr` Page miroir : [lots-and-quantities.en.md](lots-and-quantities.en.md) Statut : `migration partielle` Dernière vérification code : `2026-05-13` Cette page consolide `BR-PT-LOT-001`, `BR-PT-LOT-002` et `BR-PT-LOT-003`. Objectif : piloter les règles de quantité depuis une définition métier lisible, puis les sécuriser par des checks Python et des diagnostics SQL. ## À retenir
Résumé opérationnelUne ligne trade possède un seul lot virtuel. Le lot virtuel porte le solde ouvert global, lot.qt porte le forecast opérationnel, et les lots physiques consomment ce forecast.
Sujet Règle courte
Quantité saisie quantity_theorical est la quantité métier.
Quantité standard quantity est un compteur technique non éditable.
Avant physique quantity suit quantity_theorical.
Après physique quantity reflète l'exécuté physique.
Ligne non finie Le montant de ligne utilise quantity_theorical.
Ligne finie Le montant peut revenir à l'exécuté physique.
Weight basis Achat et vente peuvent lire deux états différents du même lot.
Facturation Elle choisit ses états dans lot.qt.hist.
Contrôles Invariants bloqués en Python et auditables en SQL.
quantity_theorical
        |
        v
  lot virtuel P1  --->  lot.qt forecast  --->  lot physique
        ^                    |
        |                    v
        +------ recalcul après consommation
## Règles consultant ### BR-PT-LOT-001 - Cycle de vie lot virtuel / forecast / physique
Moment Effet métier
Création de ligne Création d'un lot virtuel unique.
Initialisation Le lot virtuel reprend quantity_theorical.
Forecast Une ligne ouverte est créée dans lot.qt.
Planification lot.qt peut être subdivisé par vente, matching, transport ou shipment.
Ajout physique Le lot physique consomme une ligne lot.qt précise.
Après ajout lot.qt diminue et le lot virtuel est recalculé.
Découpage d'un solde P1P1S1T1, P1S1T2, P1S2T3, P1S2T4
Point cléCes découpages ne créent pas plusieurs lots virtuels. Ils décrivent seulement la répartition prévisionnelle du solde ouvert.
### BR-PT-LOT-002 - Quantité contractuelle, compteur, ligne finie
Situation Quantité de référence
Saisie utilisateur quantity_theorical
Aucun lot physique quantity = quantity_theorical
Lots physiques présents quantity = somme des lots physiques
finished = False Montant basé sur quantity_theorical
finished = True Montant basé sur l'exécuté physique
Weight basis disponible Montant basé sur l'état wb.qt_type du contrat
Ce que finished ne fait pasfinished n'efface pas la quantité contractuelle, ne supprime pas les lots physiques et ne masque pas leur PnL. Il signifie seulement que le reliquat ouvert peut être ignoré pour les calculs d'exécution.
Lecture du même lot physique État possible
Achat BL via purchase.purchase.wb.qt_type
Vente LR ou Weight Report via sale.sale.wb.qt_type
Facturation Choix indépendant dans lot.qt.hist
### BR-PT-LOT-003 - Invariants de quantité
Invariant Formule
Conservation somme(lots physiques) + lot virtuel = quantity_theorical
Forecast ouvert somme(lot.qt non zéro) = max(lot virtuel, 0)
Cas Règle
Lot virtuel achat Sommer tous les lot.qtlot_p = lot virtuel, avec ou sans lot_s.
Lot virtuel vente Sommer tous les lot.qtlot_s = lot virtuel, avec ou sans lot_p.
lot.qt = 0 Ignoré par les checks ; mémoire possible d'une prévision vidée.
Lot virtuel négatif Autorisé pour compenser l'écart théorique / exécuté ; forecast attendu = zéro.
lot.qt non zéro orphelin Interdit si ni lot_p ni lot_s n'est renseigné.
### BR-PT-LOT-004 - Historique de quantité et weighing
Élément Règle
lot.qt.hist Porte les états de quantité d'un lot.
Fiche lot.lot Pas de saisie directe des états.
Modification Uniquement via Do weighing.
Lot virtuel Pas de packing manuel.
Champs packing virtuel lot_qt et lot_unit non éditables.
### Tolérances
Gap à confirmerLe contrôle complet de tolérance restante dans LotQt.add_physical_lots / LotQt.add_physical_lot reste à confirmer.
Point Règle cible
Niveau Tolérance globale sur ligne ou contrat.
Transport Pas de tolérance indépendante par transport.
Surconsommation Consomme la tolérance restante.
Sous-consommation Restitue de la tolérance restante.
## Section développeur ### Champs clés ### Création ligne / lot virtuel ### Modification de `quantity_theorical`
target_quantity = quantity_theorical - somme(lots physiques convertis)
free_quantity = target_quantity - somme(lot.qt déjà matchés ou shippés)
### Ajout de lots physiques ### Retrait de lots physiques ### Weighing / états de quantité ### Quantité compteur `quantity` ### Montant de ligne ### Garde-fous Python ### Diagnostic SQL ## Tests proches