Une unité de mesure (UoM, unit of measure) est l'unité dans laquelle une quantité est exprimée : une pièce, un kilogramme, un litre, un mètre. Dans les données produit, elle répond à une question pratique pour chaque nombre de la fiche : 330 quoi ? Prix, stock, contenu net, quantité de commande et conditionnement ont tous besoin d'une unité, et ils n'ont pas à partager la même.
La plupart des catalogues ont besoin de quatre notions d'unité : l'unité de base (la plus petite chose que tu comptes, une canette), l'unité de vente (ce que le client met dans son panier, un pack de 6), l'unité de commande (ce que tu achètes au fournisseur, un plateau de 24) et le contenu net avec son unité (330 ml par canette). Si ces quatre notions sont justes, les prix à l'unité de mesure, les flux et les règles de commande B2B suivent. Ce guide présente les champs, les règles de l'UE et de Google sur le prix à l'unité, les codes standard et un exemple chiffré pour nettoyer des unités fournisseurs comme 500gr, 0,5 kg et 500 g.
Unité de base, unité de vente et unité de commande sur une canette d'eau gazeuse
Prenons de l'eau gazeuse en canettes de 330 ml. Le fournisseur livre des plateaux de 24 canettes et des palettes de 84 plateaux. Ta boutique en ligne vend des canettes à l'unité aux clients professionnels pour leurs bureaux et des packs de 6 aux particuliers. Un produit, cinq niveaux de quantité :
Niveaux d'unité pour un produit : eau gazeuse 330 ml
| Unité de base | 1 canette | 1 | H87 (pièce) | Comptage du stock, prix à l'unité |
|---|---|---|---|---|
| Contenu net | 330 ml par canette | s.o. | MLT (millilitre) | Étiquette, prix à l'unité, flux |
| Unité de vente (particuliers) | Pack de 6 | 6 | XPK (paquet) | Prix et panier de la boutique |
| Unité de commande | Plateau de 24 | 24 | XPK (paquet) | Achats, règles de commande B2B |
| Unité logistique | Palette de 84 plateaux | 2 016 | Code d'emballage convenu avec le transporteur | Entrepôt et transport |
Les ennuis commencent quand un prix ou un chiffre de stock perd son niveau. Un prix fournisseur de 7,20 € s'entend par plateau de 24, soit 0,30 € la canette. Importe-le dans un champ que la boutique lit comme un prix par pack de 6 et tu vends à perte. Un stock de 10 peut signifier 10 canettes ou 10 plateaux (240 canettes), et un stock dans la mauvaise unité fausse aussi les plafonds de backorder et la disponibilité dans les flux. La solution est ennuyeuse et efficace : enregistre le niveau à côté de chaque quantité.
Conditionnement, contenu net et facteurs de conversion sous forme de champs
Un modèle d'unités minimal tient en quelques attributs. Utilise les mêmes codes dans tout le catalogue et garde le nombre et l'unité dans des champs séparés, pour que les systèmes puissent calculer avec le nombre.
- net_content_value et net_content_unit : 330 et ml. La quantité de produit dans une unité de base, comme sur l'étiquette.
- sales_unit et units_per_sales_unit : package et 6. Ce que contient une ligne de panier de quantité 1.
- order_unit et units_per_order_unit : package et 24. Ce que contient une ligne de commande fournisseur de quantité 1, qui est aussi l'endroit où se placent une quantité minimale de commande et les multiples de commande.
- price_quantity : 1 par défaut ; 100 si le fournisseur cote par 100 pièces, courant pour les vis et la visserie.
- net_weight et gross_weight avec leur unité : pour les règles d'expédition et la douane, pas pour le prix à l'unité.
- unit_pricing_measure et unit_pricing_base_measure : uniquement là où un prix à l'unité doit être affiché (voir plus bas).
Les formats de catalogue B2B reposent sur la même idée. BMEcat, par exemple, décrit un article avec une ORDER_UNIT, une CONTENT_UNIT, le nombre d'unités de contenu par unité de commande (NO_CU_PER_OU) et une PRICE_QUANTITY, si bien qu'une boîte de 100 vis tarifée à la boîte est sans ambiguïté pour le système de l'acheteur.
Le prix à l'unité de mesure dans l'UE selon la directive relative à l'indication des prix
Dans l'UE, les produits proposés aux consommateurs doivent afficher un prix à l'unité de mesure à côté du prix de vente. La directive 98/6/CE définit le prix à l'unité de mesure comme le prix final, TVA et autres taxes comprises, pour un kilogramme, un litre, un mètre, un mètre carré ou un mètre cube, ou une autre unité unique couramment utilisée dans l'État membre pour ce produit. Pour les produits vendus en vrac, seul le prix à l'unité de mesure est exigé, et une publicité qui mentionne le prix de vente doit aussi indiquer le prix à l'unité de mesure.
La directive laisse de la place aux règles nationales. Les États membres peuvent dispenser du prix à l'unité de mesure lorsqu'il ne serait pas utile ou prêterait à confusion, et pour les produits non alimentaires, ils peuvent limiter l'obligation à une liste de catégories de produits. Vérifie la transposition nationale pour chaque marché où tu vends. Le calcul lui-même est simple, et le calculateur de prix unitaire le fait par produit :
- Café en grains, 500 g à 7,49 € : 7,49 / 0,5 = 14,98 € le kg.
- Huile d'olive, 750 ml à 8,95 € : 8,95 / 0,75 = 11,93 € le litre.
- Eau gazeuse, 6 x 330 ml à 5,40 € : 6 x 0,33 = 1,98 l, donc 5,40 / 1,98 = 2,73 € le litre.
Aucun de ces chiffres ne peut être calculé si le contenu net manque, se trouve sous forme de texte dans le titre du produit ou utilise une unité que la boutique ne reconnaît pas. Le prix à l'unité de mesure est d'abord un problème de données produit.
Google Merchant Center : unit_pricing_measure et unit_pricing_base_measure
Google Shopping affiche les prix à l'unité à partir de deux attributs. unit_pricing_measure est la quantité du produit telle que vendue, par exemple 750ml ; il est obligatoire pour les produits annoncés dans l'UE, les pays de l'AELE, au Royaume-Uni, en Australie et en Nouvelle-Zélande lorsque la réglementation locale exige un prix à l'unité, et facultatif ailleurs. unit_pricing_base_measure est le dénominateur, par exemple 1l ou 100ml.
- Unités acceptées : poids oz, lb, mg, g, kg ; volume floz, pt, qt, gal, ml, cl, l, cbm ; longueur in, ft, yd, cm, m ; surface sqft, sqm ; à l'unité ct (sheet et item uniquement en Australie et en Nouvelle-Zélande).
- Valeurs de mesure de base : les nombres entiers 1, 10, 100, 2, 4 et 8 suivis d'une unité, et les combinaisons métriques 75cl, 750ml, 50kg et 1000kg.
- Décimales : deux chiffres au maximum après la virgule ; Google arrondit le reste.
- Conflit : si un produit a aussi un energy_efficiency_class, Google affiche la classe énergétique, pas le prix à l'unité.
Pour les trois exemples ci-dessus, cela donne 500g avec une base de 1kg, 750ml avec une base de 1l, et 1980ml avec une base de 1l pour le pack de 6. Note que le flux utilise des symboles en minuscules comme ml et sqm, pas les codes UN/CEFACT que ton ERP exporte peut-être. Plus de détails sur les attributs de flux dans le guide Google Merchant Center.
Codes d'unité standard : recommandation UN/CEFACT n° 20 et ETIM
Les systèmes qui échangent commandes et factures n'écrivent pas kg ou Stück ; ils utilisent des codes. La liste de référence est la recommandation UN/ECE n° 20, avec des codes d'emballage issus de la recommandation n° 21 préfixés par X. La liste de codes Peppol pour la recommandation 20, utilisée pour la facturation électronique européenne, est un bon endroit pour les consulter.
Une unité, trois écritures : libellé, UN/CEFACT et Google
| Kilogramme | KGM | kg | kg |
|---|---|---|---|
| Gramme | GRM | g | g |
| Litre | LTR | l | l |
| Millilitre | MLT | ml | ml |
| Centilitre | CLT | cl | cl |
| Mètre | MTR | m | m |
| Centimètre | CMT | cm | cm |
| Mètre carré | MTK | sqm | m² |
| Mètre cube | MTQ | cbm | m³ |
| Pièce | H87 ou C62 (un) | ct | pce |
| Paquet | XPK | s.o. | paquet |
H87 (pièce) et C62 (un, également utilisé comme unité) comptent tous deux des articles à l'unité ; les partenaires commerciaux s'accordent généralement sur l'un des deux. Le négoce technique ajoute une couche : dans ETIM, les caractéristiques numériques comme la longueur ou la puissance ont une unité standardisée, donc une longueur de câble doit être convertie dans l'unité attendue par la caractéristique ETIM avant d'être échangée.
Normaliser des unités fournisseurs désordonnées : un exemple chiffré
Les fichiers fournisseurs s'accordent rarement sur les unités. L'un envoie 500gr, un autre 0,5 kg, un troisième 500 g dans le titre seulement. Voici comment dix valeurs brutes issues de trois fichiers fournisseurs se normalisent en une valeur, un code d'unité et une valeur dans l'unité de base de l'attribut.
Dix valeurs fournisseurs, normalisées
| 500gr | 500 | GRM | 0,5 kg | gr est un alias de g |
|---|---|---|---|---|
| 0,5 kg | 0,5 | KGM | 0,5 kg | Virgule décimale, pas un séparateur de milliers |
| 500 g | 500 | GRM | 0,5 kg | Déjà propre |
| 1/2 kilo | 0,5 | KGM | 0,5 kg | Fraction et alias |
| 1.000 g | 1000 | GRM | 1 kg | Point comme séparateur de milliers (fichiers néerlandais et allemands) |
| 1,5L | 1,5 | LTR | 1,5 l | L majuscule, virgule décimale |
| 75cl | 75 | CLT | 0,75 l | Garde cl si l'étiquette indique cl |
| 750 ML | 750 | MLT | 0,75 l | Seule la casse diffère |
| 6 x 330 ml | 330 | MLT | 0,33 l par canette | Multipack : units_per_sales_unit = 6 |
| 25 stuks | 25 | H87 | 25 pièces | Comptage, à placer dans le conditionnement |
Les règles derrière le tableau sont les mêmes pour tout attribut :
- Garde la valeur brute dans sa propre colonne pour pouvoir auditer chaque conversion plus tard.
- Résous le format numérique par source. 1.000 chez un fournisseur allemand vaut mille ; 1.000 chez un fournisseur américain vaut un. Décide par fichier, jamais par valeur.
- Sépare le nombre de l'unité et associe les alias d'unité (gr, grams, gram, G) à un seul code.
- Choisis une unité de base par attribut (kg pour le poids, l pour le volume, mm ou cm pour les dimensions) et convertis avec un facteur fixe.
- Décompose les multipacks en contenu par unité et unités par pack, pour que le prix à l'unité et le conditionnement soient tous deux justes.
- Enregistre le résultat dans des champs numériques et génère à partir d'eux le texte affiché, comme 500 g, et pas l'inverse.
C'est la même approche que celle de la standardisation des attributs en général : se mettre d'accord d'abord sur les valeurs autorisées, puis corriger les données en masse, puis bloquer les nouveaux écarts à l'entrée.
Unités enregistrées et unités affichées selon le marché
Normaliser ne veut pas dire que chaque marché voit le même texte. Enregistre une valeur dans une unité de base, puis formate-la par langue et par canal au moment de la sortie. Un sachet de 0,5 kg s'affiche 0.5 kg sur une page en anglais américain, 0,5 kg sur une page en néerlandais ou en allemand, et 500g dans un flux Google.
- Format numérique : le séparateur décimal et le séparateur de milliers suivent la langue de la page, jamais le fichier du fournisseur.
- Libellé d'unité : pièce s'écrit pc en anglais, st. en néerlandais et Stk. en allemand ; le code enregistré (H87) reste le même.
- Métrique et impérial : si tu vends aux États-Unis, convertis 500 g en 17,6 oz à la sortie pour l'affichage, mais garde les grammes comme valeur enregistrée pour que le prix à l'unité de mesure de l'UE reste exact. Le flux pour le Royaume-Uni doit utiliser des valeurs métriques.
- Arrondi : n'arrondis que la valeur affichée. Arrondir la valeur enregistrée à chaque conversion crée une dérive : 17,6 oz reconvertis donnent 498,95 g.
Cette séparation simplifie aussi les traductions. Un traducteur ne touche jamais à 500 g ; c'est le template qui génère le libellé qui s'en charge.
Sept erreurs d'unité qui cassent les prix à l'unité et les flux
- L'unité vit dans la valeur. 500g dans un champ texte ne peut être ni trié, ni filtré, ni divisé. Sépare-les.
- Une virgule décimale lue comme séparateur de milliers. 0,5 kg devient 5 kg, et le prix à l'unité est divisé par dix.
- Un prix de pack comparé à un prix à l'unité. Le pack de 6 et la canette seule affichent des prix à l'unité calculés sur des quantités différentes.
- Le poids brut utilisé comme contenu net. L'emballage est inclus, donc le prix à l'unité est trop bas.
- Le poids net égoutté ignoré. Pour les produits dans un liquide, comme les olives en saumure, la directive autorise le prix à l'unité sur le poids net égoutté lorsque ce poids doit être déclaré.
- Onces liquides confondues avec onces. floz est un volume et oz un poids ; Google les traite comme des unités différentes.
- Des libellés qui ne font que renommer. Passer de cm à mm sans multiplier la valeur par 10 transforme une étagère de 30 cm en étagère de 30 mm.
Ensembles de codes d'unité, conversions et contrôles dans WISEPIM
WISEPIM traite les unités comme des données, pas comme du texte. Quand la fonctionnalité d'espace de travail Classification est activée, les UOM code sets (ensembles de codes UOM) regroupent des unités apparentées (poids, longueur, volume et autres) avec un code, un symbole, des noms localisés et un facteur de conversion vers l'unité de base de l'ensemble, ainsi que des réglages d'affichage et d'export. L'action Change Unit of Measure (Changer l'unité de mesure), dans l'édition groupée et dans les automatisations, convertit les valeurs sur une sélection, ou ne change que le libellé quand les valeurs étaient mal étiquetées.
Autour de cela, plusieurs fonctionnalités existantes aident avec les unités désordonnées. La page Attribute values (Valeurs d'attribut, pour les attributs texte et de sélection) regroupe les valeurs qui ne diffèrent que par les majuscules, les espaces ou la ponctuation, comme 500gr, 500 GR et 500 gr, ou 1,5 ml et 1.5 ml, et permet de fusionner chaque groupe en une seule valeur en une étape, avec annulation (voir normalisation des valeurs d'attribut). Elle ne traite pas gr et g comme la même unité et ne convertit pas les grammes en kilogrammes : 500 g et 0,5 kg restent des valeurs distinctes jusqu'à ce que tu les convertisses. Quand l'import CSV crée des attributs à partir des colonnes fournisseur, il peut ajouter la colonne d'unité du fournisseur à la valeur, la garder dans un attribut _uom séparé ou l'ignorer. L'enrichissement AI peut extraire le contenu net des descriptions vers des attributs. Les règles Quality Guard peuvent avertir ou bloquer les produits dont le champ unité est vide ou ne correspond pas à un motif. L'export BMEcat de Feed Hub renseigne ORDER_UNIT, CONTENT_UNIT, NO_CU_PER_OU et PRICE_QUANTITY à partir d'attributs comme order_unit et pack_size, en traduisant des valeurs comme stuks ou pcs en codes UN/CEFACT. WISEPIM ne calcule pas les prix à l'unité de mesure, et son template de flux Google Shopping comme sa connexion Merchant Center n'envoient ni unit_pricing_measure ni unit_pricing_base_measure. Ce qu'il fait, c'est garder le contenu net, le conditionnement et l'unité cohérents, pour que ta boutique ou l'outil qui construit ces champs de flux dispose de données propres.

