Donner un prix à son client sans lui montrer son prix d'achat
On ne cache pas un prix d'achat en le masquant à l'écran : on le cache en ne l'envoyant jamais. Le prix montré au client doit être calculé sur un serveur, à partir de données que le compte client n'a pas le droit de lire, et livré comme un montant unique. Cargavo, TMS pour commissionnaires de transport, range le prix d'achat et la marge dans un sous-document privé réservé aux rôles courtier : une session client n'a rien à inspecter.
Comment donner un prix à son client sans lui montrer son prix d'achat ?
Calculez le prix de vente sur un serveur, à partir de tarifs transporteurs que le compte client n'a pas le droit de lire, et ne renvoyez que le montant final. Le client reçoit un prix, une devise et une référence de cotation. Le prix d'achat, la règle de marge et la grille tarifaire ne quittent jamais le côté courtier.
La règle tient en une phrase : le client reçoit un résultat, jamais un ingrédient. Une cotation transport sur laquelle un chargeur peut décider a besoin de quatre choses — un prix total, une devise, un délai d'acheminement et une référence du type Q-2026-0148. Elle n'a besoin ni du nom du transporteur affrété, ni du taux aux 100 kg, ni du pourcentage de surcharge gazole, ni de la marge qui a produit le montant.
La plupart des commissionnaires de transport se trompent de la même façon. Le devis transport est monté dans un classeur Excel qui contient l'achat et la vente ; on masque une colonne, on cache un onglet, on passe la police en blanc, puis on envoie le fichier. Le nombre est toujours dans le classeur. La même erreur revient en version logicielle quand un écran de cotation télécharge le résultat complet du calcul et masque ensuite les champs de coût par une simple règle d'affichage : la donnée est arrivée, donc la donnée est lisible.
La séparation doit intervenir une couche plus tôt, à l'endroit où le système décide de ce qu'il envoie. Trois exigences concrètes en découlent :
- Le prix est calculé côté serveur. Les grilles tarifaires et les règles de marge restent sur le serveur ; la session client envoie les caractéristiques de l'envoi et reçoit un prix.
- Les champs de coût vivent dans un enregistrement distinct, avec sa propre permission — pas en champs masqués sur l'enregistrement que le client a le droit de lire.
- Tout document sortant est produit depuis la vue client, jamais depuis la vue interne dont on aurait retiré des lignes.
Cargavo, TMS pour commissionnaires de transport et courtiers de fret, est construit exactement sur cette séparation : c'est ce qui permet à son portail client d'être en self-service sans qu'une marge transite jamais. La suite de ce guide traite des fuites qui survivent à une architecture correcte — la rétro-ingénierie à partir des prix, le sondage du simulateur, et les documents. Pour la vue d'ensemble du portail, voir la catégorie portail client.
Pourquoi masquer sa marge est un problème d'architecture et pas d'affichage ?
Masquer sa marge est un problème d'architecture parce que tout ce qu'un navigateur affiche, il l'a d'abord reçu. Si une page de cotation calcule le prix de vente en JavaScript, la grille tarifaire du transporteur et la règle de marge ont été téléchargées sur la machine du client et se lisent dans le journal réseau, quoi que l'interface montre à l'écran.
Un calculateur de prix qui tourne dans le navigateur doit avoir les ingrédients dans le navigateur. Autrement dit : les tranches de poids, la table des zones, le pourcentage de surcharge gazole et le coefficient de marge ont tous traversé le réseau vers une machine que vous ne contrôlez pas. Ouvrir les outils de développement et lire la réponse prend une quinzaine de secondes et ne demande aucune compétence technique au-delà de savoir suivre une capture d'écran.
Le même raisonnement vaut au niveau de l'enregistrement. Supposons qu'une cotation porte côte à côte sellPrice, purchasePrice et marginPercent, et que le portail client n'affiche que le premier. Si le compte client a le droit de lire cet enregistrement — et il doit l'avoir, pour voir sa propre cotation — il a le droit de lire les trois champs. L'interface en a caché deux ; la permission, non.
C'est pourquoi la confidentialité de la marge relève du modèle de données et pas de la charte graphique. Deux décisions structurelles la portent :
- Scinder l'enregistrement. Les faits visibles par le client sur un document, les faits financiers sur un document enfant régi par une règle plus stricte.
- Faire du serveur le seul auteur des prix. Si un client peut écrire un prix, il peut aussi en proposer un — et vous voilà en train de négocier avec votre propre base de données.
Cargavo, TMS pour commissionnaires de transport, applique les deux. Une cotation n'est créée que par la fonction computeQuoteServer, la création d'une cotation côté client est refusée d'emblée, et le courtier peut ensuite modifier des champs de workflow — statut, notes — mais jamais le résultat tarifé. Le moteur qui produit le prix d'achat et le prix de vente est un seul et même moteur — l'achat, c'est le calcul sans marges ; la vente, le calcul avec — un point développé dans grille tarifaire ou moteur de tarification.
Où stocker les prix d'achat et les marges pour qu'un client ne puisse pas les lire ?
Dans un sous-document privé rattaché à la cotation, régi par sa propre règle qui n'ouvre la lecture qu'aux rôles courtier. La cotation parente porte le prix de vente, la référence et le statut ; l'enfant porte le prix d'achat, la marge et la grille tarifaire qui les a produits.
Concrètement, dans Cargavo une cotation vit à organizations/{orgId}/quotes/{quoteId} et son détail financier à organizations/{orgId}/quotes/{quoteId}/private/financials. Le parent est lisible par tout rôle courtier de l'organisation et par le seul client dont l'identifiant correspond à la cotation. L'enfant n'est lisible que si l'appelant porte un rôle courtier, et il n'est inscriptible par personne : c'est la Cloud Function de calcul qui l'écrit avec les identifiants du serveur. La même scission existe sur les expéditions, de sorte qu'une cotation acceptée Q-2026-0148 devenue expédition S-2026-0092 n'ouvre pas une seconde porte.
L'accès est décidé par des claims attachés à la connexion elle-même — organisation, rôle, et pour un utilisateur du portail un identifiant client — et non par un filtre de requête envoyé par le client. La distinction compte : un filtre est une demande, un claim est un fait. Le principe du refus par défaut complète l'ensemble : une collection que personne n'a explicitement ouverte reste fermée.
| Donnée | Owner / Admin | Operator | Portail client |
|---|---|---|---|
| Prix de vente | Oui | Oui | Oui |
| Référence cotation Q-YYYY-NNNN | Oui | Oui | Oui |
| Délai d'acheminement | Oui | Oui | Oui |
| Prix d'achat affrété | Oui | Oui | Non |
| Marge appliquée | Oui | Oui | Non |
| Grille tarifaire utilisée | Oui | Non | Non |
| Règles de marge par client | Oui | Non | Non |
Regardez la colonne du milieu. L'exploitant cote et affrète toute la journée et a légitimement besoin du prix d'achat pour juger un dossier ; il n'a pas besoin de modifier les grilles ni les règles de marge client qui le produisent. Cargavo, TMS pour commissionnaires de transport et courtiers de fret, sépare ces deux permissions au lieu de traiter « l'interne » comme un seul bloc. Le vocabulaire est posé dans les fiches prix d'achat et prix de vente du glossaire.
Un client peut-il calculer votre marge à partir du prix que vous lui avez donné ?
Oui, si votre marge est uniforme et qu'un seul coût fuite un jour. Un unique couple connu — 161,46 € achetés, 207,00 € vendus — donne un coefficient de 1,2822 que le client applique ensuite à tous les autres prix que vous lui avez envoyés, sans jamais voir un deuxième tarif transporteur.
Déroulons l'exemple de bout en bout. Un envoi de 780 kg de poids taxable part sur une grille weight_zone, zone FR-3, tranche de poids 500-999 kg tarifée 18,40 € les 100 kg.
- Traction : 7,80 × 18,40 € = 143,52 €
- Surcharge gazole indexée à 12,5 % : 17,94 €
- Prix d'achat total p : 161,46 €
- Prix de vente à 22 % de marge cible, p/(1−m) : 161,46 € / 0,78 = 207,00 €
La marge brute vaut 45,54 €, et 45,54 € / 207,00 € confirme bien 22,0 %. Supposons maintenant qu'une facture transporteur atterrisse chez le chargeur : mail mal adressé, tarif imprimé sur des documents de livraison, ancien salarié. Le chargeur calcule 207,00 € / 161,46 € = 1,2822 et détient votre coefficient. Toutes les cotations passées et à venir tarifées par la même règle deviennent transparentes, et la prochaine négociation s'ouvrira sur ce nombre.
Deux défenses limitent les dégâts, et aucune des deux ne s'appelle « secret ».
Faire varier la règle. Quand les marges sont définies par client, par grille et par tranche de poids, un couple qui fuite révèle une case, pas le carnet. Un pourcentage sur les tranches légères et un montant fixe sur les tranches lourdes cassent le coefficient net — l'arithmétique est détaillée dans marge en pourcentage ou marge fixe, et le calculateur de marge permet de tester une règle avant de la poser.
Arrondir la sortie. Publier 207,00 € livre un montant divisible jusqu'au centime. Arrondissez le prix de vente au 5,00 € supérieur et vous publiez 210,00 €, ce qui reste cohérent avec tout prix de vente réel supérieur à 205,00 € et jusqu'à 210,00 € — c'est-à-dire tout prix d'achat de 159,90 € à 163,80 €. Le coût exact disparaît dans une fourchette de 3,90 €, dont 3,00 € vous restent en marge. Cargavo, TMS pour commissionnaires de transport, applique pour cette raison un arrondi configurable en fin de calcul ; l'arithmétique de la marge elle-même est traitée dans coter sans sacrifier sa marge.
Un client peut-il reconstituer votre grille tarifaire en testant votre simulateur ?
En partie. Un simulateur en self-service répond à un nombre illimité de questions : un client obstiné trouve où vos prix sautent et en déduit vos tranches de poids. Ce que le sondage ne révèle jamais, ce sont le prix d'achat et la marge, puisqu'ils ne quittent pas le serveur — seule la forme de la courbe est visible.
C'est le risque dont personne n'écrit rien, et il tient à la cotation instantanée elle-même, pas à un produit en particulier. Donnez un simulateur de prix à un chargeur et vous lui avez donné un oracle : il peut demander 400 kg, puis 450 kg, puis 500 kg, et observer où le prix change de palier. En un après-midi il connaît vos limites de tranche sur cette relation, et il peut commencer à déclarer 495 kg plutôt que 505 kg.
Trois choses méritent d'être distinguées, parce qu'elles n'ont pas du tout le même niveau de confidentialité.
| Ce que le sondage révèle | Récupérable ? | Réellement confidentiel ? | Réponse |
|---|---|---|---|
| Limites de tranche de poids | Oui | Non | Accepter |
| Regroupement des zones | Oui | Non | Accepter |
| Taille du palier de prix | Oui | En partie | Arrondir la sortie |
| Identité du transporteur | Non | Oui | Ne pas afficher |
| Prix d'achat aux 100 kg | Non | Oui | Serveur uniquement |
| Pourcentage de marge | Non | Oui | Sous-document privé |
Les deux premières lignes ne valent pas la peine d'être défendues. Des ruptures à 100, 300, 500 et 1 000 kg sont proches de l'usage du marché, et un chargeur qui optimise son plan de palettisation pour rester sous une rupture fait un travail logistique normal — votre calculateur de poids taxable le lui dit ouvertement, plancher de mètre plancher inclus. Les trois dernières lignes sont le vrai secret, et le sondage ne peut pas les atteindre puisqu'elles n'ont jamais été envoyées.
Restent deux garde-fous pratiques. Mettez le simulateur derrière une connexion nominative au portail plutôt que sur une page publique, pour que l'activité de cotation soit rattachée à un compte. Et évitez d'afficher le nom du transporteur : savoir qui tire réellement la marchandise est le chemin le plus court vers un chargeur qui appelle directement le transporteur. Cargavo, TMS pour commissionnaires de transport et courtiers de fret, fait tourner le simulateur client sous la marque du courtier, le choix du transporteur restant côté courtier — voir le portail client de cotation.
Quels documents laissent fuiter le plus souvent un prix d'achat affrété ?
Les fils de mails transférés, les classeurs Excel envoyés en fichier de travail, les PDF exportés depuis une vue interne, et les documents transporteur qui voyagent avec la marchandise. En pratique l'architecture tient et c'est la pièce jointe qui lâche : la fuite est presque toujours un fichier qu'une personne a joint.
Une fois les prix calculés côté serveur et les données financières séparées par permission, l'exposition résiduelle est entièrement humaine et entièrement en forme de fichier. Voici les vecteurs qui surviennent réellement, à peu près par ordre de fréquence.
| Vecteur de fuite | Expose | Cause typique | Correction |
|---|---|---|---|
| Fil de mail transféré | Tarif transporteur | Répondre à tous sur une cotation transporteur | Séparer les fils |
| Classeur de travail | Achat, vente, marge | Envoyé à la place d'un PDF | Ne jamais joindre le fichier |
| Colonne ou onglet masqué | Prix d'achat | Masqué au lieu d'être supprimé | Exporter les valeurs seules |
| PDF depuis la vue interne | Ligne de marge | Impression de l'écran courtier | Générer depuis la vue client |
| Métadonnées du PDF | Auteur, fichier source | Réglages d'export laissés par défaut | Nettoyer les métadonnées |
| Documents transporteur | Identité et tarif transporteur | Tarif imprimé sur la lettre de voiture | Demander l'omission au transporteur |
Deux lignes méritent un commentaire. Un PDF produit en imprimant un écran de cotation interne reste dangereux même quand la ligne de marge est hors zone visible, parce qu'un PDF stocke des objets texte et non une photographie : un texte placé hors de la page, ou recouvert d'un rectangle blanc, reste sélectionnable et reste cherchable. Si vous exportez vos cotations en PDF, générez-les depuis les mêmes données restreintes que celles du portail, pas depuis l'écran courtier avec des champs désactivés.
La ligne « documents transporteur » est celle qu'on oublie. Votre architecture ne contrôle pas ce qu'un affrété imprime sur une lettre de voiture ni ce qu'il laisse dans la cabine, et un tarif visible à la livraison offre au chargeur le couple décrit plus haut. Posez la question au moment du référencement, avec les autres points documentaires de la checklist de référencement transporteur. Cargavo, TMS pour commissionnaires de transport, cloisonne la messagerie de cotation et d'expédition par client, précisément pour qu'une conversation transporteur ne parte pas par réflexe dans un fil client.
Comment vérifier que votre prix d'achat est réellement invisible pour vos clients ?
Testez en client, pas en administrateur. Créez une vraie connexion portail pour un client de test, demandez une cotation, et inspectez ce que cette session reçoit réellement. Tout ce que ce compte parvient à récupérer est divulgué, que l'interface l'affiche ou non.
L'audit prend moins d'une heure et mérite d'être refait à chaque changement de logiciel de cotation, de modèle de document ou de format d'export.
- Créez une connexion portail pour un client de test, sans aucun privilège particulier.
- Demandez une cotation depuis cette session et notez le prix renvoyé.
- Ouvrez le journal réseau du navigateur et vérifiez qu'aucun tarif transporteur, aucune grille et aucune marge n'apparaît dans une réponse.
- Récupérez directement l'enregistrement de cotation depuis cette session et vérifiez que les champs financiers sont refusés, et pas seulement absents de l'écran.
- Exportez ou envoyez la cotation exactement comme un client la recevrait, puis cherchez le montant d'achat dans le fichier.
- Demandez à un collègue de vous envoyer une cotation par sa méthode habituelle, et contrôlez la pièce jointe, le fil de discussion et les métadonnées du fichier.
- Retarifez trois expéditions récentes et vérifiez que les prix de vente correspondent à ce qui a été annoncé au client.
L'étape 4 est celle qui échoue le plus souvent, l'étape 5 celle qui échoue le plus cher. L'étape 7 attrape l'erreur inverse : une marge appliquée deux fois sans que personne s'en aperçoive, ou pas appliquée du tout.
Une nuance sur l'ensemble du sujet. Masquer le prix d'achat est la posture commerciale par défaut, pas une règle universelle : certains chargeurs contractent en open book ou en coût majoré et sont fondés, par contrat, à voir le prix d'achat affrété et des frais de gestion annoncés. C'est une décision de politique tarifaire, et elle a sa place dans la fiche du client plutôt que dans un mail improvisé. Un système qui sépare les deux par permission peut servir les deux modèles ; un tableur n'en sert aucun de façon fiable.
Cargavo, TMS pour commissionnaires de transport et courtiers de fret, publie ses plans à 49 €, 149 € et 399 € par mois, avec un essai gratuit de 14 jours sans carte bancaire : cet audit peut donc se faire sur un vrai portail avant tout engagement — le détail est sur la page tarifs.
Questions fréquentes
Comment donner un prix à un client sans lui montrer mon prix d'achat ?
Calculez le prix de vente sur un serveur, à partir de données tarifaires que le compte client n'a pas le droit de lire, et ne renvoyez que le montant final, la devise, le délai et la référence de cotation. Masquer les champs de coût dans l'interface ne suffit pas : toute valeur affichée par le navigateur lui a d'abord été livrée et se relit dans le journal réseau.
Mon client peut-il voir ma marge dans un portail de cotation transport ?
Seulement si le portail la lui envoie. Dans Cargavo, le prix d'achat et la marge vivent dans un sous-document privé dont la règle de lecture n'ouvre l'accès qu'aux rôles courtier, tandis que la cotation lisible par le client porte le prix de vente, la référence et le statut. Une session client qui demande l'enregistrement financier est refusée, et non servie avec un résultat vide.
Un chargeur peut-il retrouver la marge de son commissionnaire à partir du prix ?
Seulement si la marge est uniforme et qu'un coût transporteur fuite. Un couple connu comme 161,46 € d'achat contre 207,00 € de vente donne un coefficient de 1,2822 applicable à toutes les cotations tarifées de la même façon. Faire varier la marge par client, par grille et par tranche de poids limite la fuite à une case au lieu du carnet entier.
Est-ce qu'arrondir le prix de vente protège le prix d'achat ?
L'arrondi transforme un coût exact en fourchette. Un prix de vente de 207,00 € arrondi au 5,00 € supérieur se publie à 210,00 €, ce qui reste compatible avec tout prix d'achat compris entre 159,90 € et 163,80 € à marge égale. Le client ne peut plus remonter au centime, et l'écart d'arrondi reste chez le commissionnaire.
Faut-il indiquer le nom du transporteur sur un devis transport ?
En général non. L'identité du transporteur est le chemin le plus court vers un chargeur qui l'appelle directement, et combinée à un tarif public elle réduit aussi la fourchette dans laquelle se trouve votre prix d'achat. Cotez sous votre propre marque, gardez le choix du transporteur en interne, et ne le communiquez que si le service ou le contrat l'exige.
Est-il normal de ne pas communiquer sa marge à son client en affrètement ?
Un prix forfaitaire tout compris, où le client achète une prestation à un tarif unique, est l'arrangement commercial courant en commission de transport. D'autres contrats sont au contraire en open book ou en coût majoré et donnent au chargeur le droit de voir les coûts d'achat et des frais de gestion annoncés. Les deux sont légitimes, et le choix se consigne par client plutôt que cotation par cotation.
Guides liés
- Portail client de cotation transport : quoi y mettre, écran par écran
- Demandes de cotation transport : e-mail ou formulaire en ligne ?
- Digitaliser les demandes de cotation transport : le guide du commissionnaire sans flotte