Le moteur historique et son remplaçant affichent tous les deux un devis à 105,50 € HT. L’équipe valide la comparaison. À la première livraison partielle, le montant préparé pour la facture diffère pourtant de 1,80 €. Le nouveau moteur a imputé la remise aux frais de préparation alors que le contrat la réservait au matériel.
En pratique, la recette doit couvrir la répartition du prix sur les lignes et les opérations qui réutilisent ces lignes. Une remise déplacée peut laisser le total inchangé tout en faussant une livraison partielle, la marge d’un produit ou l’assiette utilisée par un système aval. La même anomalie peut passer sur tous les devis d’une famille tant que la recette contrôle seulement la somme.
Dans une refonte de logiciel métier, commencez par comparer ce que chaque moteur calcule pour une même révision de devis. Le cas fictif ci-dessous suit deux lignes jusqu’à une facture simulée. La matrice indique ensuite comment décider si un lot de devis peut passer sur la nouvelle version.
Dans quels cas comparer les deux moteurs ?
La comparaison est utile lorsqu’un nouveau moteur reprend des tarifs déjà exploités par des commerciaux, un portail B2B ou un ERP. Elle concerne aussi un changement plus discret, comme la réécriture d’un calcul de paliers ou le remplacement d’un import de contrats. Le risque augmente quand plusieurs documents reprennent le résultat : devis, commande, facture partielle, avoir ou export de marge.
Choisissez d’abord une famille dont la règle est accessible et dont l’usage aval peut être reproduit. Dans l’exemple, un distributeur applique un prix par quantité à une référence, puis une remise contractuelle sur le matériel. Les frais de préparation constituent une autre ligne. Les montants sont exprimés en euros HT et l’exercice laisse de côté TVA, conversion de devise et avoirs. Ces dimensions demandent chacune leurs propres cas si elles entrent dans le lot réel.
Pour une nouvelle règle commerciale, faites valider le résultat attendu par le métier avant la comparaison. Pour une règle reprise à l’identique, conservez comme témoin une révision de devis dont le détail a été vérifié. Dans les deux cas, le moteur historique sert à expliquer l’écart et les règles approuvées servent à trancher.
Faire calculer les deux versions sur les mêmes données
Conserver la version du tarif et le moment de la décision
Le lot de recette associe à chaque devis une révision, une date d’effet tarifaire, un contrat et sa version, une liste de lignes identifiées et les paramètres nécessaires au calcul. Gardez les unités, les quantités et la devise. Une règle fondée sur le jour local doit conserver le fuseau utilisé. Un calcul rejoué le lendemain avec le tarif du jour peut produire un autre montant même si le code est correct.
Distinguez deux exercices. Pour rejouer un devis historique, présentez aux deux moteurs les mêmes entrées historiques. Pour tester une nouvelle grille à venir, construisez un nouveau cas avec sa propre date d’effet. Si la grille historique ou la remise signée manque, marquez la révision comme non comparable et sortez-la du taux de conformité tout en l’affichant dans le bilan de couverture.
Garder le calcul candidat hors du circuit de vente
À l’entrée, les deux moteurs reçoivent la même révision. En sortie, le candidat produit une trace de calcul dans la recette. La journalisation rapproche les résultats par identifiant de révision, version du moteur et version des règles. Le moteur autoritaire reste seul à enregistrer le devis et à transmettre une décision commerciale pendant la comparaison.
Vérifiez en recette que le candidat ne réserve aucun numéro de devis, n’envoie aucune notification et n’alimente ni commandes ni files de facturation. Si le calcul dépend d’un service de contrats, fournissez la version capturée en entrée ou une réponse de test fidèle au cas. Le calcul en miroir pendant une migration détaille comment isoler ces effets lorsqu’on duplique des demandes réelles.
Cas chiffré : 105,50 € HT dans les deux moteurs
Établir l’attendu à partir du contrat
Le distributeur fictif propose un matériel à 10 € l’unité. À partir de dix pièces, le prix de 9 € s’applique à toutes les pièces de la ligne. Le contrat accorde ensuite une remise de 5 % sur le matériel. Une ligne de préparation de 20 € reste au plein tarif. Le responsable commercial valide ces trois règles avant le rejeu. La recette enregistre les identifiants MAT et PREP pour que la comparaison survive à un changement d’ordre ou de libellé.
Pour dix pièces, le montant brut du matériel vaut 90 €. La remise vaut 4,50 €, donc la ligne nette vaut 85,50 €. Les frais restent à 20 €. Le moteur candidat calcule bien 4,50 € de remise, mais rattache la déduction à la préparation au moment de construire les lignes. Il affiche donc 90 € de matériel et 15,50 € de préparation.
| Ligne | Attendu et ancien | Candidat | Écart |
|---|---|---|---|
| Matériel | 85,50 | 90,00 | +4,50 |
| Préparation | 20,00 | 15,50 | −4,50 |
| Total | 105,50 | 105,50 | 0,00 |
Paradoxalement, l’écart global nul rend le défaut plus facile à livrer. Le rapprochement doit donc contrôler le prix de base, le palier appliqué, la remise et son motif par ligne. Dans le dossier de preuve, indiquez le premier champ divergent. Ici, le montant de la remise est exact et la destination de la remise est fausse. La correction porte sur l’affectation, même si le moteur sait aussi sélectionner le bon palier.
Rejouer une livraison partielle sans émettre de facture
Le client accepte le devis pour dix pièces. Le scénario de recette prévoit d’en livrer quatre d’abord et de facturer la préparation à la dernière livraison. Le tarif reste celui de la révision acceptée. Le premier envoi ne recalcule donc pas le palier comme si le client avait commandé quatre pièces. Pour cette famille, le montant net du matériel se répartit exactement à raison de 8,55 € par unité.
La première facture attendue vaut 4 × 8,55 €, soit 34,20 € HT. Avec la remise sur la préparation, la même simulation produit 4 × 9 €, soit 36,00 € HT. À la seconde livraison, l’attendu est de 51,30 € de matériel et 20 € de préparation, soit 71,30 €. Le candidat donne 54 € et 15,50 €, soit 69,50 €. Même en additionnant les deux factures, les écarts de 1,80 € se compensent. Le contrôle doit porter sur chaque document et sur le rattachement à la ligne acceptée.
Rejouez ensuite le cas sur la sortie réellement consommée par la facturation. Si l’ERP reçoit seulement un total et recalcule les lignes, alors vérifiez aussi sa convention de calcul. S’il reçoit les lignes nettes, vérifiez qu’il reprend leurs identifiants et les quantités effectivement livrées. Exécutez la simulation sur un adaptateur de recette ou une prévisualisation sans émission. Une sortie d’API correcte ne suffit pas à prouver que la facture reprend ce même détail.
Matrice de recette : paliers, dates et arrondis
Les devis historiques apportent de la variété. Ajoutez des cas synthétiques pour franchir précisément une frontière qui apparaît rarement dans l’historique. Ici, neuf et dix pièces donnent le même total grâce au palier, mais le prix net unitaire passe de 9,50 € à 8,55 €. La matrice doit donc vérifier le prix et le nombre d’unités en plus du total.
| Cas | Attendu à vérifier |
|---|---|
| 9 pièces | Palier à 10 € par pièce. Matériel net 85,50 €, total 105,50 €. |
| 10 pièces | Palier à 9 € par pièce. Matériel net 85,50 €, total 105,50 €. Remise de 4,50 € affectée à MAT. |
| 11 pièces | Palier à 9 € par pièce. Matériel net 94,05 €, total 114,05 €. |
| Contrat expiré | À dix pièces, matériel à 90 € sans remise et total à 110 €. Vérifier le motif de refus de la remise. |
| Livraison 4 puis 6 | Deux factures simulées de 34,20 € et 71,30 €. Chaque document est contrôlé séparément. |
| Détail historique manquant | Cas non comparable avec cause identifiée. Aucune validation du lot critique sur la base de ce seul total. |
Rejouer aussi l’endroit où l’on arrondit
Ajoutez un témoin distinct avec trois lignes d’une unité à 0,335 € HT. La convention retenue dans ce témoin arrondit chaque ligne au centime, au plus proche avec demi-centime vers le haut pour les montants positifs. Le résultat est 3 × 0,34 €, soit 1,02 €. Un moteur qui additionne d’abord obtient 1,005 €, arrondi à 1,01 €. Les deux calculs sont reproductibles. Le second contredit ici la convention approuvée pour ce document.
Utilisez une représentation décimale qui conserve la précision de l’entrée. La documentation de decimal en Python montre comment fixer une échelle et un mode d’arrondi avec quantize(). Validez séparément le stade où appliquer cet arrondi et, pour des avoirs ou des signes négatifs, ajoutez leurs propres résultats attendus. La bibliothèque permet d’appliquer la règle choisie par l’entreprise.
Décider quels écarts bloquent la bascule
Pour chaque révision, le comparateur conserve les valeurs des deux moteurs, l’attendu métier, le premier champ divergent et l’effet observé. Le verdict doit être compréhensible par le commerce et la facturation. Si le total concorde mais que la facture partielle s’écarte, alors la famille reste sur le moteur historique. La correction est reçue après rejeu de la même révision et des cas de bord associés.
| Constat | Décision |
|---|---|
| Même total, autre ligne | Bloquer cette famille. Corriger l’affectation et rejouer la facturation partielle. |
| Un centime sur un montant émis | Vérifier le stade d’arrondi contre la convention approuvée. Bloquer si elle est contredite. |
| Libellé seul différent | Accepter après contrôle des usages aval, si les identifiants et montants sont conservés. |
| Règle modifiée et approuvée | Valider contre le nouvel attendu, avec date d’effet et population couvertes. |
| Entrée manquante | Classer le cas comme non comparable. Reporter l’ouverture si ce contrat reste critique et sans autre preuve. |
En revanche, un lot indépendant peut avancer si son calcul, ses consommateurs et son repli ont été éprouvés séparément. Vérifiez cette indépendance plutôt que d’ouvrir tout un canal sur la base d’un taux global. Une famille de contrats rare peut concentrer le risque alors que ses dossiers pèsent peu dans la moyenne.
Erreurs fréquentes lors du rapprochement
- Comparer par rang de ligne. Deux lignes permutées peuvent créer un faux écart. Rapprochez-les par identifiant métier stable.
- Neutraliser tous les écarts d’un centime. Vérifiez si le champ sert seulement à l’affichage ou s’il entre dans un montant facturé.
- Oublier les contrats hors période. Un devis historique comparé au contrat courant mélange une nouvelle règle et un changement de code.
- Recalculer les devis déjà émis au moment du repli. Gardez leur révision et leur décision tarifaire. Réorientez les nouvelles demandes selon la procédure convenue.
Plan d’action : ouvrir un périmètre tarifaire à la fois
Préparer la preuve avant de lancer les calculs
Choisissez un lot qui couvre au moins un contrat actif, une frontière de quantité, une remise refusée et un usage aval. Le commerce signe les cas attendus. La facturation confirme les montants par document et leur ordre. L’équipe technique fige le jeu d’entrée et les versions des moteurs pour pouvoir reproduire chaque verdict.
Produisez ensuite un relevé par famille avec nombre de demandes reçues, cas comparables, conformes, divergents et inconnus. Au premier passage, examinez les inconnus avec leurs responsables. Pour un cas historique inexploitable, obtenez un témoin métier équivalent ou maintenez la population hors du lot. Fixez les conditions de sortie avant de regarder le pourcentage de succès.
Exercer le repli avant le premier devis réel
Ouvrez d’abord un périmètre où les nouvelles demandes peuvent être redirigées par une règle connue. Le responsable de bascule vérifie la journalisation, la file de demandes et le repli avant l’ouverture. Le seuil de coupure peut être immédiat pour une remise sur une ligne non éligible ou pour une sortie de facture inexpliquée. L’équipe sait alors quel périmètre arrêter et à partir de quelle révision enquêter.
Lors du retour à l’ancien moteur, conservez la trace des devis émis par la cible et leur version de calcul. Identifiez les demandes en cours avant de les reprendre pour éviter deux décisions sur la même révision. Pour toute rectification d’un document déjà transmis, suivez le circuit métier prévu. La décision de fermer le pilote se prend avec les équipes qui recevront les écarts après la bascule.
Guides complémentaires pour préparer la bascule
Si la discussion porte encore sur les comportements à conserver, la parité fonctionnelle en refonte aide à distinguer une remise contractuelle d’un contournement hérité. Une fois la règle décidée, la matrice tarifaire précise les valeurs que la recette doit retrouver.
Si l’accord de recette risque de perdre sa valeur entre deux environnements, le guide pour recevoir une version entre sandbox, recette et production explique comment relier l’approbation à la version, à sa configuration et aux effets réellement vérifiés.
Inscrivez la règle de prix, les cas aval et les responsables de validation dans le cahier des charges de refonte. Si la bascule inclut aussi des contrats ou des devis historiques, la recette métier des données migrées permet de vérifier les rattachements et les pièces avant de lancer la comparaison tarifaire.
Conclusion : valider le prix jusque dans ses usages
Sur le devis à 105,50 €, le premier écart se trouve dans la ligne qui reçoit la remise. La facture partielle le rend visible et montre pourquoi deux totaux identiques ne suffisent pas pour valider la reprise.
Figez la révision, les règles et les entrées, puis comparez les lignes, les paliers, les arrondis et le document produit après livraison. La bascule peut être décidée pour la famille dont les écarts ont une explication validée et dont le retour à l’ancien calcul a été exercé.
Dawap accompagne la refonte de votre logiciel métier avec les équipes commerciales, techniques et de facturation. L’atelier de recette part de vos règles tarifaires et des documents qui en dépendent pour cadrer un premier lot que chaque équipe peut vérifier.