Aller au contenu
Q
QuoteNode

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 :

  1. Line unit price — prix de base issu du catalogue (ou saisi manuellement pour une ligne personnalisee)
  2. Pricing rule evaluation — ajustements automatiques bases sur le client ou son groupe
  3. Quantity multiplication — unit_price × quantity = line_subtotal
  4. Line-level discount — pourcentage ou montant fixe soustrait de line_subtotal = line_net
  5. Line VAT — line_net × VAT_rate = line_vat (par ligne, selon le groupe TVA du produit)
  6. Line gross — line_net + line_vat = line_gross
  7. Subtotal — somme de tous les line_net
  8. Offer-level discount — pourcentage ou montant fixe soustrait du sous-total
  9. Shipping — ajoute au sous-total remisé (en valeur NET)
  10. Total NET — sous-total remisé + transport
  11. Total VAT — somme des montants TVA par ligne (recalcules apres remise globale si applicable)
  12. 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 :

  1. Les regles sont triees par priorite (plus grand nombre = plus prioritaire)
  2. La regle applicable la plus prioritaire gagne
  3. 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 :

  1. Les prix produits sont stockes dans la devise de base du catalogue
  2. Lors de la creation de l’offre, le taux FX courant convertit les prix
  3. Le taux utilise est stocke dans le snapshot de l’offre (immuable)
  4. 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)

Last reviewed: Recently