Wiki
Moteur de tarification
Comment le moteur de prix deterministe de QuoteNode calcule les totaux d'offre, applique les remises et gere les multi-devises et la TVA.
Moteur de tarification
QuoteNode utilise un moteur de tarification deterministe qui garantit des calculs reproductibles et auditables. Chaque prix, remise et montant de taxe suit un ordre d’evaluation defini et est stocke pour verification.
Ordre de calcul
Le moteur traite les prix dans cette sequence exacte :
- Line unit price — prix de base issu du catalogue (ou saisi manuellement pour une ligne personnalisee)
- Pricing rule evaluation — ajustements automatiques bases sur le client ou son groupe
- Quantity multiplication — unit_price × quantity = line_subtotal
- Line-level discount — pourcentage ou montant fixe soustrait de line_subtotal = line_net
- Line VAT — line_net × VAT_rate = line_vat (par ligne, selon le groupe TVA du produit)
- Line gross — line_net + line_vat = line_gross
- Subtotal — somme de tous les
line_net - Offer-level discount — pourcentage ou montant fixe soustrait du sous-total
- Shipping — ajoute au sous-total remisé (en valeur NET)
- Total NET — sous-total remisé + transport
- Total VAT — somme des montants TVA par ligne (recalcules apres remise globale si applicable)
- Total GROSS — total_net + total_vat
Regles de prix
Les regles de prix permettent des ajustements automatiques selon la relation client :
Cibles des regles
- Par client — s’applique a un client specifique (par ex. “ACME Corp a -10 %”)
- Par groupe client — s’applique a tous les clients d’un groupe (par ex. “les VIP ont -15 %“)
Perimetre des regles
- All products — la regle s’applique a tout le catalogue
- Specific product group — la regle ne s’applique qu’a un groupe produit donne (par ex. “Services” ou “Hardware”)
Types de regles
- Percentage discount — soustrait un pourcentage du prix de base (par ex. -10 %)
- Percentage markup — ajoute un pourcentage au prix de base (par ex. +5 %)
- Fixed amount discount — soustrait un montant fixe par unite (par ex. -20 PLN)
- Fixed amount markup — ajoute un montant fixe par unite
Priorite et conflits
Quand plusieurs regles matchent la meme combinaison produit-client :
- Les regles sont triees par priorite (plus grand nombre = plus prioritaire)
- La regle applicable la plus prioritaire gagne
- Les regles ne se cumulent pas : une seule regle est appliquee par couple produit-client
Validite
Chaque regle peut definir une plage de dates (valid_from, valid_to) ainsi qu’un drapeau actif. Seules les regles actives dans leur periode de validite sont evaluees.
Multi-devises
QuoteNode permet de creer des offres dans toute devise configuree :
- Base currency — devise par defaut du tenant (par ex. PLN), utilisee pour tout le reporting
- Offer currency — devise selectionnee pour une offre particuliere (par ex. EUR, USD)
- FX rate — taux de change entre la devise de l’offre et la devise de base
Quand une offre est creee dans une devise non egale a la devise de base :
- Les prix produits sont stockes dans la devise de base du catalogue
- Lors de la creation de l’offre, le taux FX courant convertit les prix
- Le taux utilise est stocke dans le snapshot de l’offre (immuable)
- Les rapports pipeline reconvertissent toutes les valeurs vers la devise de base avec le taux stocke
Les taux FX sont aujourd’hui geres manuellement par les administrateurs. Une integration automatique NBP/ECB est prevue.
Gestion de la TVA
Groupes TVA
Les groupes TVA definissent les taux disponibles pour le tenant :
- taux standard : 23 %, 8 %, 5 %, 0 %
- exonere (pas de TVA)
- taux personnalises pour certains contextes juridiques
Chaque produit est rattache a un groupe TVA. Un groupe TVA est marque par defaut et applique aux nouveaux produits ainsi qu’aux lignes manuelles.
TVA par ligne
La TVA est calculee ligne par ligne, jamais comme un pourcentage plat sur le total. C’est indispensable pour les offres contenant des produits relevant de taux TVA differents.
Les totaux d’offre incluent un tableau de ventilation TVA montrant le total par taux :
VAT 23%: 1,230.00 PLN
VAT 8%: 160.00 PLN
VAT 0%: 0.00 PLN
─────────────────────────
Total VAT: 1,390.00 PLN
Modes d’affichage des prix
Chaque offre peut utiliser l’un de trois modes d’affichage :
- NET — tous les prix sont affiches en NET uniquement
- GROSS — tous les prix sont affiches en GROSS uniquement
- NET + VAT + GROSS — detail complet affichant les trois valeurs par ligne et dans les totaux
Le mode est configurable par offre et influe a la fois sur le template PDF et sur la page publique d’offre.
Remises
Remises au niveau ligne
Chaque ligne peut recevoir une remise individuelle :
- Pourcentage — par ex. -10 % sur le sous-total de ligne
- Montant fixe — par ex. -50 PLN sur le sous-total de ligne
Les remises de ligne sont appliquees apres la multiplication par quantite et avant la TVA.
Remise au niveau offre
Une remise globale peut etre appliquee a toute l’offre :
- Pourcentage — par ex. -5 % sur le sous-total
- Montant fixe — par ex. -200 PLN sur le sous-total
La remise d’offre est appliquee apres sommation de toutes les lignes, mais avant transport et TVA.
Affichage des remises
Le systeme de templates prend en charge trois modes d’affichage des remises :
- BAKED_IN (par defaut) — les remises sont pre-appliquees ; le client ne voit que le prix final
- SHOW_COLUMN — une colonne dediee affiche le prix initial et la remise appliquee
- HIDDEN — les remises sont appliquees mais non affichees dans une colonne separee
Arrondi
Tous les calculs monetaires utilisent l’arrondi HALF_UP (banker’s rounding configurable). L’arrondi est applique :
- par ligne (apres remise, avant TVA),
- par montant TVA (pour chaque ligne),
- sur les totaux d’offre.
Le mode d’arrondi reste coherent sur tout le calcul afin de garantir que la somme des lignes reste egale au total de l’offre.
Totaux stockes
Les totaux calcules sont stockes dans une table denormalisee offer_totals afin de permettre :
- des requetes rapides dans les rapports et les listes,
- la verification d’audit (on peut recalculer et comparer aux valeurs stockees),
- l’exactitude historique (les totaux sont snapshots et conserves meme si les regles de prix changent ensuite)