Pricing
This commit is contained in:
@@ -1,53 +1,195 @@
|
||||
# Pricing, basis, premium
|
||||
# Pricing, basis et fixing
|
||||
|
||||
Statut: `migration partielle`
|
||||
Langue : `fr`
|
||||
Statut : `migration partielle`
|
||||
Derniere verification code : `2026-05-25`
|
||||
|
||||
## BR-PT-PRI-001 - Le premium fait partie du prix economique
|
||||
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 | La matrix existe dans le modele mais n'est pas encore le moteur principal du fixing automatique. |
|
||||
| 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`
|
||||
|
||||
### Regle consultant
|
||||
| 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. |
|
||||
|
||||
Le premium ou discount saisi sur une ligne fait partie du prix economique, que
|
||||
la ligne soit en prix fixe ou en basis.
|
||||
> **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.
|
||||
|
||||
### Notes developpeur
|
||||
|
||||
- `unit_price` reste le prix de base hors premium.
|
||||
- Montant economique: `unit_price + premium converti si necessaire`.
|
||||
- En basis, le premium s'applique aussi aux blocs valorises.
|
||||
|
||||
## BR-PT-PRI-002 - Linked currency
|
||||
### BR-PT-PRI-002 - Linked currency
|
||||
|
||||
Source: `BR-PT-009` et `BR-PT-010`
|
||||
|
||||
### Regle consultant
|
||||
| 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. |
|
||||
|
||||
Quand le prix est saisi dans une devise ou unite liee, le premium est exprime
|
||||
dans ce meme repere puis converti pour les calculs internes.
|
||||
|
||||
### Notes developpeur
|
||||
|
||||
- Champs obligatoires si active: `linked_price`, `linked_currency`,
|
||||
`linked_unit`.
|
||||
- En `basis + linked currency`, `linked_price` represente le basis brut hors
|
||||
premium.
|
||||
- `amount` ajoute le premium converti.
|
||||
|
||||
## BR-PT-PRI-003 - Pricing manuel
|
||||
### BR-PT-PRI-003 - Pricing manuel
|
||||
|
||||
Source: `BR-PT-016` et doublon historique `BR-PT-015`
|
||||
|
||||
### Regle consultant
|
||||
| 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` | Prix de fallback du solde non fixe. |
|
||||
| `eod_price` | Prix economique courant de la ligne de fixing. |
|
||||
| `last` | Derniere ligne du groupe, utilisee par le summary. |
|
||||
|
||||
En pricing manuel, l'utilisateur saisit uniquement la quantite fixee du jour et
|
||||
le prix de marche. Les cumuls et prix moyens sont calcules automatiquement.
|
||||
> **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.
|
||||
|
||||
### Notes developpeur
|
||||
### BR-PT-PRI-004 - Pricing automatique par composant
|
||||
|
||||
- Champs saisis: `quantity`, `settl_price`.
|
||||
- Champs derives: `fixed_qt`, `fixed_qt_price`, `unfixed_qt`,
|
||||
`unfixed_qt_price`, `eod_price`, `last`.
|
||||
- Groupe metier: `line + component` ou `sale_line + component`.
|
||||
- Le composant choisi doit appartenir a la ligne courante.
|
||||
| Etape | Effet metier |
|
||||
| --- | --- |
|
||||
| Composant | L'utilisateur choisit une courbe, un calendrier et active `Auto`. |
|
||||
| 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. |
|
||||
|
||||
```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.
|
||||
|
||||
## 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 modele et le MTM, pas encore completement integree au fixing auto. |
|
||||
| `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.
|
||||
|
||||
Reference in New Issue
Block a user