Pattern·Intermédiaire··Mis à jour le 05/10/2026
Pattern · Pricing
Franchises incluses et surplus
Exprimer nativement « les N premières sont incluses, au-delà c’est payant » — et découvrir pourquoi une seule de vos franchises s’applique.
Le problème
Plusieurs bundles incluent une franchise — tant d’heures de formation, tant de mois d’un service — le surplus étant facturé au tarif réel. Cinq franchises configurées. Exactement une fonctionnait.
Le contexte
Un catalogue où la quantité incluse diffère par bundle, et où le prix du surplus diffère par service.
L’architecture recommandée
Modéliser la franchise comme un barème d’ajustement de prix à paliers — quantité incluse à zéro, surplus au prix réel — plutôt que comme un drapeau de pricing de bundle. Les paliers expriment la forme directement et restent lisibles pour qui maintient le catalogue.
L’échec n’avait rien à voir avec les paliers. La pricing procedure par défaut applique les barèmes par des constantes en dur, pas dynamiquement : une constante pointait sur un barème, donc un seul était jamais lu. Le correctif est un barème global unique portant toutes les franchises, avec la constante pointée dessus.
Mise en œuvre
- Construire un barème global portant les paliers de toutes les franchises, plutôt qu’un barème par offre.
- Pointer la constante de la procédure dessus et réactiver la procédure — l’éditer la désactive.
- Vérifier sur un vrai devis en repriçant et en lisant les totaux de ligne.
Ce que ça coûte
Un barème global est moins propre qu’un barème par offre, mais c’est ce que la procédure lit réellement. Les barèmes par offre peuvent rester en place, inertes, comme documentation — ou être désactivés pour ne pas égarer la personne suivante.
Attention
- Les paliers portent une devise. Des paliers écrits dans une devise ne matchent pas une transaction dans une autre, et la franchise échoue en silence — un piège quand une offre s’étend à une nouvelle région.
- Éditer une pricing procedure la désactive. Réactivez-la, sinon rien ne price.
- Les dates de segment de ramp sont verrouillées sur un segment annuel et éditables sur un segment custom. Ce qui ressemble à un bug de date est un type de segment.