Skip to content

Pricing & taxe

Le pricing applique la mécanique des pipelines au prix d'un produit et aux totaux d'un panier. Cette page en donne le détail : décomposition du prix, taxe et devise, commande figée.

Le prix d'un produit

Un prix traverse une chaîne de PriceModifier (voir pipelines), sur un PriceContext :

php
final class PriceContext
{
    public function __construct(
        public readonly Product $product,
        public readonly int $quantity,
        public readonly ?Authenticatable $customer,
        public Money $price,      // prix HT — muté en chaîne
        public array $trace = [], // audit des transformations
    ) {}
}

Les maillons raisonnent en HT. Le résultat est un objet Price décomposé :

php
$price->exclTax();  // HT (Money), après modifiers
$price->inclTax();  // TTC (Money)
$price->tax();      // montant de taxe seul

Taxe & devise : maillons cœur de fin de chaîne

La taxe est résolue après tous les modifiers, par le TaxResolver (remplaçable), à partir de la règle de taxe du produit et de la zone fiscale courante (CurrentAreaResolver). Vous n'appliquez jamais la taxe dans un modifier.

Tout est calculé en Brick\Money\Money — exact, arrondi à l'échelle de la devise aux frontières d'affichage, jamais en float.

Les totaux

Le panier affiche des lignes contribuées par des TotalsModifier (livraison, remise…), agrégées en Money : ligne « produits » + lignes contribuées = ligne « total ». Voir pipelines — les totaux.

Panier vivant vs commande figée

  • Panier : les modifiers s'exécutent, les prix sont recalculés en direct.
  • Commande : au placement, les lignes sont figées dans price_components (JSON, en devise de référence et du client). Une commande se relit sans aucun package installé — supprimer un transporteur après coup ne change pas une commande passée.

Points d'extension de ce domaine

Je veux…Point d'extension
modifier un prixPriceModifier + PriceModifierRegistry
ajouter une ligne de totauxTotalsModifier + TotalsModifierRegistry
changer le calcul de taxeTaxResolver
changer la zone fiscale couranteCurrentAreaResolver
réordonner les maillonsconfig/pricing.php

Voir aussi