# Pricing, basis et fixing Langue : `fr` Statut : `migration partielle` Derniere verification code : `2026-05-25` Cette page consolide les regles de pricing trade autour des composants, des periodes de prix, des periodes d'application, du fixing manuel et du prix final des lignes achat / vente. ## A retenir > **Resume operationnel** > Une ligne trade peut etre en prix fixe, basis ou EFP. En basis, le prix de > base vient d'un ou plusieurs composants de fixing. Chaque composant lit une > courbe de prix, construit des dates de prix, applique ces prix sur des dates > d'application, puis alimente le prix de la ligne via un summary. | Sujet | Regle courte | | --- | --- | | Composant | Un `pricing.component` appartient a une ligne achat ou vente. | | Courbe | La courbe principale est `price_index`. | | Matrix | Une matrix peut alimenter un composant de fixing, avec ligne generique ou conditions. | | Pricing period | Definit les dates ou lire les prix sur la courbe. | | Application period | Definit les dates ou appliquer les tranches de fixing. | | AVG | Utilise la moyenne progressive des prix lus. | | LAST | Autorise la courbe a reprendre le dernier prix connu si la date n'a pas de prix. | | Pricing rows | Les lignes `pricing.pricing` portent quantite fixee, non fixee et prix EOD. | | Summary | Le summary remonte la derniere ligne de pricing du groupe. | | Prix ligne | En `basis`, `unit_price` est le prix base hors premium. | ```text pricing.component | v pricing.trigger | +--> pricing period --> dates de lecture curve | +--> application period --> dates de fixing | v pricing.pricing | v purchase/sale pricing summary | v line.unit_price ``` ## Regles consultant ### BR-PT-PRI-001 - Le premium fait partie du prix economique Source: `BR-PT-008` | Point | Regle | | --- | --- | | Prix visible | `unit_price` reste le prix de base hors premium. | | Prix economique | Le montant utilise `unit_price + premium`. | | Basis | Le premium s'ajoute aussi quand le prix base vient du fixing. | | Documents commerciaux | Une ligne `basis` peut afficher le premium comme prix visible selon le contexte document. | | Valuation | Le premium doit etre pris en compte dans les lignes valorisees. | > **Point cle** > Le premium n'est pas un composant de fixing. Il reste porte par la ligne > commerciale, mais il fait partie du prix economique utilise pour les montants. ### BR-PT-PRI-002 - Linked currency Source: `BR-PT-009` et `BR-PT-010` | Point | Regle | | --- | --- | | Activation | `linked_price`, `linked_currency` et `linked_unit` deviennent obligatoires. | | Saisie | Le prix et le premium peuvent etre saisis dans le repere lie. | | Conversion | Les calculs internes convertissent vers la devise / unite de la ligne. | | Basis | En `basis + linked currency`, `linked_price` represente le basis brut hors premium. | | Amount | Le montant ajoute le premium converti. | ### BR-PT-PRI-003 - Pricing manuel Source: `BR-PT-016` et doublon historique `BR-PT-015` | Colonne | Role | | --- | --- | | `pricing_date` | Date de saisie du fixing. | | `quantity` | Quantite fixee ce jour. | | `settl_price` | Prix de marche saisi. | | `fixed_qt` | Cumul des quantites fixees. | | `fixed_qt_price` | Prix moyen pondere du cumul fixe. | | `unfixed_qt` | Solde restant a fixer. | | `unfixed_qt_price` | Dernier prix disponible de la courbe du composant pour le solde non fixe, avec fallback sur `settl_price` si aucune courbe exploitable n'est disponible. | | `eod_price` | Prix economique courant de la ligne de fixing. | | `last` | Derniere ligne du groupe, utilisee par le summary. | > **Saisie utilisateur** > En manuel, l'utilisateur renseigne seulement `quantity` et `settl_price`. > Les cumuls, le prix moyen, le solde non fixe et `last` sont recalcules par le > systeme. ### BR-PT-PRI-004 - Pricing automatique par composant | Etape | Effet metier | | --- | --- | | Composant | L'utilisateur choisit une courbe, un calendrier et active `Auto`. | | Source curve | Le systeme lit les prix depuis `price_index`. | | Source matrix | Le systeme lit les prix depuis `price_matrix.line`. | | Trigger | L'utilisateur definit une periode de prix et une periode d'application. | | Lecture prix | Le systeme lit les prix de la courbe sur les dates de pricing. | | Application | Le systeme cree une ligne de pricing par date d'application. | | Quota | La quantite fixee par date correspond a la quantite de ligne divisee par le nombre de dates d'application. | | Moyenne | Si `AVG` est coche, le prix fixe utilise la moyenne progressive. | | Fallback prix | Si `LAST` est coche, la courbe peut reprendre le dernier prix disponible. | | Cut-off | `Pricing date max` arrete la generation apres cette date. | | Ratio negatif | Un ratio `-100%` soustrait le composant du prix basis. | ```text Prix lus: P1 P2 P3 P4 Application: A1 A2 A3 A4 Quantite fixee: Q/4 Q/4 Q/4 Q/4 Summary: derniere ligne marquee last ``` ### BR-PT-PRI-005 - Mode From / To manuel | Cas | Regle | | --- | --- | | Pas de `pricing_period` | L'utilisateur peut saisir `From` / `To` cote pricing. | | Pas de `application_period` | L'utilisateur peut saisir `From` / `To` cote application. | | Application vide | Par defaut, l'application reprend la meme fourchette que le pricing manuel. | | Calendrier present | Les jours fermes du calendrier sont exclus. | | Calendrier absent | Tous les jours calendaires de la fourchette sont utilises. | | Lecture curve | Les prix sont lus sur les dates de la fourchette pricing. | | Application fixing | Les lignes de fixing sont creees sur les dates de la fourchette application. | > **Exemple simple** > Pricing `01/04 -> 05/04`, Application vide. Le systeme lit les prix du 1 au > 5 avril et cree les applications sur ces memes dates, sauf jours exclus par le > calendrier si un calendrier est renseigne. ### BR-PT-PRI-006 - Matrix de premium ou spread | Cas | Regle | | --- | --- | | Matrix generique | Une ligne matrix sans origin, destination, product ni quality s'applique comme fallback global. | | Matrix conditionnelle | Une ligne avec origin, destination, product ou quality est prioritaire si elle correspond a la ligne trade. | | Prix | `price_value` est converti vers l'unite / devise de la ligne si la matrix les renseigne. | | Validite | `valid_from` et `valid_to` limitent la periode d'utilisation de la matrix. | | Calendrier | Si le composant n'a pas de calendrier, le calendrier de la matrix est utilise. | | Soustraction | Pour soustraire un premium, mettre le ratio du composant a `-100%`. | > **Usage premium simple** > Creer une matrix avec une ligne sans condition et `price_value = 45`, puis > ajouter un composant de type `Matrix` sur la ligne trade. Avec un ratio > `-100%`, ce composant diminue le prix basis de 45 dans le repere de la ligne. ## Section developpeur ### Modeles pivots - Composant : `pricing.component` - Trigger : `pricing.trigger` - Periode relative : `pricing.period` - Ligne de fixing : `pricing.pricing` - Summary achat : `purchase.pricing.summary` - Summary vente : `sale.pricing.summary` - Ligne achat : `purchase.line` - Ligne vente : `sale.line` - Courbe : `price.price` - Valeur de courbe : `price.price_value` - Calendrier : `price.calendar` ### Methodes principales - `pricing.trigger.getPricingListDates()` - `pricing.trigger.getApplicationListDates()` - `pricing.trigger.getListDates()` - `pricing.trigger.getprice()` - `purchase.line.check_pricing()` - `sale.line.check_pricing()` - `purchase.line.generate_pricing()` - `sale.line.generate_pricing()` - `pricing.pricing._sync_manual_values()` - `pricing.pricing._sync_manual_last()` - `purchase.pricing.summary.table_query()` - `sale.pricing.summary.table_query()` ### Points d'attention actuels | Sujet | Etat | | --- | --- | | `fallback` composant | Champ present, logique metier encore portee par `trigger.last`. | | `last` trigger | Signifie dernier prix disponible sur la curve. | | `last` pricing | Signifie derniere ligne du groupe pour le summary. | | Matrix | Disponible dans le fixing auto, avec fallback generique et priorite aux lignes conditionnelles. | | `prDate` / `apPrice` | Variables intermediaires historiques peu exploitees. | | AVG | Moyenne progressive calculee sur la liste des prix lus. | ## Tests proches - `modules/purchase_trade/tests/test_module.py` - Couverture existante : - champs manuels readonly / editable ; - recalcul du pricing manuel ; - unicite logique du `last` par groupe ; - fallback `quantity` si `quantity_theorical` est vide ; - controle que le composant appartient a la ligne courante. - Tests a maintenir : - From / To manuel sans calendrier ; - From / To manuel avec calendrier ; - application vide qui reprend la fourchette pricing ; - comportement AVG / LAST.