Fees
Langue : fr
Page miroir : fees.en.md
Statut : migration partielle
Voir aussi la page technique historique : ../fees.md.
Per packing est la seule exception : il suit une quantité de colisage, pas le poids du lot.| Repère | Sujet | Règle courte |
|---|---|---|
| Quantité | fee.quantity |
Somme des lots liés dans fee.lots. |
| État | fee.qt_state vide |
Utilise le weight basis du contrat. |
| État | fee.qt_state renseigné |
Utilise cet état, plafonné au weight basis. |
| Fallback | état absent sur le lot | Prend l'état antérieur le plus proche par sequence. |
| Net / brut | fee.weight_type |
net lit quantity, brut lit gross_quantity. |
| Packing | ppack |
Quantité de packing, décorrélée du poids. |
| Contrôle | Python + SQL | Check applicatif et diagnostic SQL. |
Règles consultant
BR-PT-FEE-001 - Freight value depuis fee shipment
Source : BR-PT-003
Règle consultant
La valeur de fret affichée sur les documents facture vient du fee maritime du shipment, pas d'un champ direct de la facture.
Notes développeur
- Retrouver le lot physique depuis la facture.
- Retrouver son
shipment_in. - Chercher le
fee.feeavecproduct.name = 'Maritime freight'. - Utiliser
fee.get_amount().
BR-PT-FEE-002 - Lots effectifs des fees
Source : BR-PT-021
Règle consultant
Un fee suit le lot virtuel tant qu'aucun lot physique n'est lié. Dès qu'un lot physique est lié, les lots physiques deviennent la base de calcul du fee.
Notes développeur
- Ne pas supprimer le lien virtuel : il reste le fallback.
- Les lots effectifs sont :
- les physiques si au moins un physique est lié ;
- sinon les virtuels.
- La même sélection s'applique au PnL fee.
- Points de synchronisation :
- création fee ;
- lien
fee.lots; - changement de
quantity_theorical; - weighing ;
- suppression de physique.
BR-PT-FEE-003 - Quantité du fee
Règle consultant
La quantité d'un fee suit la vie de la quantité des lots qui lui sont liés. Elle doit représenter la somme des quantités de ces lots dans l'état contractuel autorisé.
Règle courte
fee.quantity = somme(quantité applicable des lots effectifs fee.lots)
Sélection de l'état de quantité
| Cas | État cible |
|---|---|
fee.qt_state vide |
weight basis du contrat porteur du fee |
fee.qt_state renseigné |
fee.qt_state, sauf s'il est postérieur au weight basis |
fee.qt_state postérieur au weight basis |
weight basis |
| état cible absent du lot | état antérieur le plus proche par lot.qt.type.sequence |
| aucun état cible disponible | poids courant du lot, seulement si aucun weight basis ne s'applique |
Source du weight basis
| Fee | weight basis |
|---|---|
| Fee achat | fee.line.purchase.wb.qt_type |
| Fee vente | fee.sale_line.sale.wb.qt_type |
| Fee shipment | weight basis achat du lot si présent |
| Fee shipment sans achat | weight basis vente du lot si présent |
Net / brut
- Si
fee.weight_type = net:- lire
lot.qt.hist.quantity.
- lire
- Si
fee.weight_type = brut:- lire
lot.qt.hist.gross_quantity.
- lire
Per packing
mode = ppackest exclu de la règle poids.fee.quantityreprésente une quantité de packing.- Cette quantité peut être décorrélée du poids net ou brut.
Lump sum
mode = lumpsumsuit aussi la règle de quantité.- Le montant reste forfaitaire.
- La quantité permet de calculer un prix par tonne plus précis.
BR-PT-FEE-004 - Fees % rate via delta de financement
Source : BR-PT-016 historique et notes 2026-04-30
Règle consultant
Les frais financiers en pourcentage se calculent avec le delta de financement
de la ligne d'estimation BL date, pas avec la date du jour.
Notes développeur
- Formule :
amount = unit_price * quantity * (price / 100) * fin_int_delta / 360. - Source du delta : ligne
Estimated dateavectrigger = bldate. - Si aucune ligne
bldaten'existe, ne pas calculer de montant% rate.
Section développeur
Champs clés
- Fee :
fee.fee - Lots du fee :
fee.lots - Quantité du fee :
fee.fee.quantity - Mode :
fee.fee.mode - État de quantité optionnel :
fee.fee.qt_state - Net / brut :
fee.fee.weight_type - État de quantité lot :
lot.qt.hist.quantity_type - Quantité nette :
lot.qt.hist.quantity - Quantité brute :
lot.qt.hist.gross_quantity - Ordre des états :
lot.qt.type.sequence - Weight basis achat / vente :
purchase.weight.basis.qt_type
Fonctions de calcul
Fee._get_effective_fee_lots():- sélectionne physiques puis virtuels.
Fee._target_qt_type_for_lot():- choisit
fee.qt_stateou leweight basis; - plafonne l'état au
weight basis.
- choisit
Fee._select_lot_qt_type():- prend l'état exact s'il existe ;
- sinon prend l'état antérieur le plus proche par
sequence.
Fee._get_lot_fee_quantity():- lit net ou brut selon
weight_type.
- lit net ou brut selon
Fee.sync_quantity_from_lots():- resynchronise
fee.quantity.
- resynchronise
Garde-fous Python
- Check central :
fee.fee.assert_quantity_consistency()fee.fee.assert_quantities_consistency()
- Points de déclenchement :
- création de fee ;
- modification de fee ;
- création / modification / suppression de
fee.lots; - weighing via resynchronisation des fees liés.
- Exception :
mode = ppackn'est pas contrôlé comme un poids.
Gap connu
- Split / merge de lots :
- le flux peut cloner ou créer des lots physiques ;
- le recâblage de
fee.lotsvers les nouveaux lots n'est pas encore garanti ; - les fees concernés doivent donc être contrôlés par le diagnostic SQL après utilisation de ce flux.
Diagnostic SQL
- Script :
- Usage :
- audit des bases de test ;
- audit des données historiques ;
- qualification avant correction.
- Le script remonte les fees non
ppackdontfee.quantityne correspond pas à la somme des lots effectifs selon l'état de quantité applicable.