Le fournisseur annonce dix unités d’un produit et le WMS en attend bien dix. Pourtant, au déchargement, l’opérateur cherche un carton sur la mauvaise palette. Le total ne révèle rien : l’erreur se trouve dans le rattachement des emballages. Le risque est de conserver les quantités du DESADV tout en perdant sa hiérarchie pendant le mapping vers une API. Une somme juste peut alors alimenter un plan de réception matériellement faux.
Le scénario fictif suit deux fragments de détail, chacun limité à une palette et à son carton identifié. Le premier carton contient quatre unités, le second six, pour le même identifiant produit. Une transformation fautive échange leurs palettes dans la projection applicative. Le total reste dix. Ces fragments ne forment pas un message DESADV complet et leurs identifiants numériques ne représentent aucune attribution GS1 vérifiée.
Un programme original utilise le parseur Pydifact 0.1.8 puis applique un contrat local de projection. Ses 34 contrôles comprennent onze lectures natives de segments. Ils montrent notamment qu’un parent absent peut être lu par la bibliothèque avant d’être refusé par notre contrôle métier. Aucun appel WMS, mouvement de stock ou accusé de réception physique n’est exécuté. La bibliothèque est épinglée pour rendre l’expérience reproductible ; ce choix ne recommande pas cette version pour tout nouveau projet.
Notre accompagnement en intégration API WMS / OMS et stock peut partir d’un carton que le quai ne retrouve pas à l’endroit annoncé. L’offre d’intégration API entre vos logiciels métier relie alors le profil EDI, la transformation et l’objet attendu par le destinataire. Le diagnostic compare les liens de parenté et leur portée, avant de chercher à corriger le total ou à relancer toutes les réceptions.
Pour qui : une réception préparée avec le bon total et le mauvais colisage
Suivre la palette que le quai doit réellement ouvrir
Le problème concerne un flux où un avis d’expédition décrit des emballages et leur contenu avant l’arrivée des marchandises. Le destinataire prépare sa réception à partir de ces données, directement dans son WMS ou via un composant intermédiaire. Le fournisseur peut transmettre un DESADV sans décrire tous les niveaux physiques : le profil convenu détermine les informations disponibles. On ne peut pas reconstituer des cartons individualisés si le message ne fournit que des références produit et des totaux.
Le premier échange retrouve un exemple brut, sa version de profil et le résultat affiché au réceptionnaire. Il recherche aussi la transformation qui construit les objets de l’API : importe-t-elle des lignes d’article, des unités logistiques ou une arborescence ? Deux interfaces peuvent employer le mot « colis » pour des objets différents. Le mapping doit conserver assez de contexte pour expliquer quel contenant est attendu, sous quelle palette et avec quelle quantité annoncée.
Distinguer une annonce d’expédition d’une réception constatée
La documentation DESADV présente un avis portant sur des biens expédiés ou prêts à l’être, selon les conditions convenues. Cette annonce aide à préparer la réception ; elle ne constate pas seule ce que l’entrepôt a déchargé. Un carton annoncé, un carton scanné et une quantité acceptée restent donc des informations différentes. Le connecteur ne doit pas transformer la présence d’un QTY de départ en mouvement de réception confirmé dans l’ERP.
Le coût caché apparaît quand le réceptionnaire compense le mauvais rattachement en ouvrant les palettes une par une. L’écart peut ensuite être enregistré comme un manque fournisseur, alors que les unités étaient présentes dans un autre contenant. Le diagnostic doit comparer ce qui était annoncé, ce que le mapping a publié et ce que le quai a constaté. Corriger simplement une quantité globale effacerait précisément l’information nécessaire pour attribuer le problème.
CPS, PAC et GIN : conserver le contexte de l’emballage
Lire le parent CPS avant de constituer une liste plate
Le segment CPS du profil GS1 Germany consulté distingue l’identifiant du niveau et celui du parent. Une numérotation de séquence ne remplace pas ce lien. Dans notre premier fragment, CPS 11 désigne un niveau rattaché à CPS 10. Le programme conserve ces deux chaînes et suit cette relation pour associer la ligne produit au carton, puis à la palette.
La projection locale reconnaît un seul emballage explicitement identifié par niveau CPS. Elle accepte une palette racine de type 201 et un carton de type CT qui lui est rattaché. Ce choix simplifie l’exercice ; il ne résume pas toutes les structures autorisées par EANCOM. Les profils peuvent décrire plusieurs niveaux ou regrouper des emballages. Un groupe de trois cartons ne peut pas être transformé arbitrairement en trois cartons individualisés auxquels on inventerait des identifiants.
Choisir le profil avant d’interpréter les qualifiants
Les références utilisées pour le sens des qualifiants sont celles du profil textile GS1 Germany V6.1, fondé sur EANCOM 2002 S3 et DESADV D.01B, version de contrôle EAN007. Sa page PCI consacrée au marquage SSCC indique 33E ; sa page GIN des unités logistiques précise BJ. Ces références doivent rester associées à leur profil, sans devenir une déclaration de compatibilité de votre partenaire.
Le contexte du segment compte autant que le code isolé. La documentation distingue les informations attachées à l’emballage de celles placées sous une ligne d’article. Une recherche globale de tous les GIN suivie d’une association par ordre d’apparition perd cette portée. Le diagnostic revient au groupe qui contient l’identifiant, puis au niveau CPS concerné. Le profil retenu en recette doit lever les ambiguïtés avec le partenaire avant qu’une nouvelle interprétation soit propagée au WMS.
LIN et QTY : un total GTIN ne décrit pas la répartition physique
Garder la ligne produit et la quantité à leur niveau
Le premier fragment fictif contient un carton, une ligne LIN et QTY+12:4. La projection conserve le qualifiant 12 et la quantité quatre ; PAC décrit ici un emballage, pas quatre emballages. Le deuxième fragment annonce six unités du même produit dans un autre carton. Additionner donne dix, mais l’API doit encore savoir à quel carton et à quelle palette appartiennent chacune des deux quantités. Le résultat utile au quai comprend ces relations, pas uniquement la somme par produit.
La documentation de structure du profil explique l’articulation entre les groupes d’emballages et les articles décrits. L’exemple ci-dessous reprend notre propre fragment de détail, sans en-tête ni enveloppe EDI. Les nombres sont fictifs. Les identifiants logistiques restent des chaînes pour préserver leur écriture. Le programme ne vérifie ni clé de contrôle ni droit d’usage GS1.
CPS+10'
PAC+1++201'
PCI+33E'
GIN+BJ+000000000000000101'
CPS+11+10'
PAC+1++CT'
PCI+33E'
GIN+BJ+000000000000000118'
LIN+1++12345678901231:SRV'
QTY+12:4'
Faire apparaître l’erreur que la somme ne peut pas révéler
Le contre-test échange volontairement les références de palettes après la projection des deux fragments. Il représente une erreur dans la transformation applicative, pas une modification effectuée par le parseur natif. Les références des cartons, des produits et les quantités restent identiques. Paradoxalement, les 10 unités attendues sont toujours présentes dans le total, alors que le carton de 4 unités est associé à la palette qui portait celui de 6 unités, et réciproquement. Le contrôle global donne ainsi un résultat rassurant au moment même où le plan de réception déplace les contenants.
Une référence locale approuvée conserve les couples carton–produit avec leur palette et leur quantité. Si le couple carton–produit pointe vers une autre palette que celle de la référence approuvée, alors la projection est refusée. Cette décision est exercée sur les deux lignes du scénario, sans déduire leur conformité du total produit. Cette référence est elle aussi fictive et enregistrée en mémoire : elle ne prouve pas ce que le fournisseur a réellement emballé. Sur votre flux, l’équipe doit définir quelle donnée approuvée permet de contrôler la transformation, puis conserver les scans de réception séparément. La comparaison du mapping et le contrôle physique répondent à deux questions complémentaires.
Exercice : distinguer lecture native et contrôle de la hiérarchie
Observer les segments produits par le parseur installé
Le programme complet de projection CPS utilise Pydifact 0.1.8 sous Python 3.14.8. Les sources installées du parseur, du tokenizer, du sérialiseur et du conteneur ont été comparées à l’archive officielle de cette version. La bibliothèque produit les segments ; nos fonctions définissent ensuite le profil réduit et les règles de rattachement. L’appel natif décompose les éléments et les composites ; nos règles sur les contenants s’exécutent une fois ces segments obtenus.
L’exécution lit dix segments dans chacun des deux fragments de référence. Elle observe les éléments de CPS 11/10, l’élément vide de LIN et les zéros initiaux de l’identifiant logistique. Une fois ce découpage obtenu, le programme appelle aussi RawSegmentCollection.validate(). Dans la source épinglée, cette méthode ne réalise aucun contrôle et retourne None. Ce retour n’est donc pas un verdict affirmant que la hiérarchie, les identifiants ou le profil d’un partenaire sont valides.
python3 -m venv .venv-desadv
.venv-desadv/bin/python -m pip install pydifact==0.1.8
.venv-desadv/bin/python -B desadv_cps_projection.py
# checks_passed: 34
# native_parse_runs: 11
# real_connection_attempts: 0
# real_api_calls: 0
L’installation utilise le registre de paquets, tandis que l’exercice lui-même reste fermé et sans identifiants de connexion. Les onze lectures natives correspondent aux deux références puis à neuf variantes. Elles ne sont pas onze échanges EDI avec un partenaire. L’environnement et les résultats rendent le diagnostic reproductible ; ils ne constituent ni une certification EANCOM complète ni la recette d’un serveur de traduction, d’un WMS ou d’un ERP installé.
Provoquer les erreurs de contexte que la lecture laisse passer
Les neuf variantes sont encore lisibles par le conteneur brut, mais notre projection les refuse. Elles comprennent un parent absent, une autoréférence CPS, un numéro CPS répété et un identifiant logistique dupliqué. D’autres variantes sortent volontairement du profil réduit : plusieurs emballages sous un même PAC, une plage d’identifiants GIN, une quantité fractionnaire ou le qualifiant de quantité 21 à la place de 12. La dernière ligne n’a plus de quantité de départ.
| Cas observé | Décision locale |
|---|---|
| Parent CPS absent ou autoréférence | Refus du rattachement |
| Numéro de niveau ou identifiant répété | Refus de l’ambiguïté |
| Plusieurs emballages ou plage GIN | Profil non pris en charge |
| QTY 21 ou quantité fractionnaire | Profil non pris en charge |
| Palettes échangées dans le mapping | Total inchangé, référence locale différente |
| Projection conforme à la référence | Annonce préparée, aucune réception créée |
Une variante refusée n’est pas nécessairement un message interdit par le standard. Le programme ne sait pas interpréter toutes les représentations légales ; il les expose comme hors périmètre au lieu d’en fabriquer une équivalence. Son dernier état conserve une annonce projetée, une réception WMS vide et une réception ERP vide. Un fichier accepté par cette projection resterait donc à rapprocher du destinataire et des marchandises réellement présentes.
Erreurs fréquentes : réparer une quantité alors que le parent est perdu
Ne pas multiplier QTY par PAC sans connaître l’unité décrite
Le piège suivant consiste à appliquer une formule uniforme à tous les profils : quantité produit multipliée par nombre d’emballages. Dans notre fragment réduit, PAC vaut un et QTY décrit quatre unités de la ligne. Un autre accord peut décrire un groupe, une unité commerciale différente ou des informations complémentaires de conditionnement. Le contrat doit nommer l’unité et la portée de chaque quantité. Une formule qui paraît juste sur une palette homogène peut déformer un carton mixte.
Les signaux utiles sont une quantité correctement totalisée mais répartie différemment dans le WMS, un carton retrouvé sous deux palettes ou des identifiants disparus juste après la conversion en JSON. L’empreinte du fichier brut aide à retrouver le document analysé ; elle ne dit pas si son mapping est correct. Il faut donc comparer un payload projeté, avec ses liens, et le résultat attendu du cas de recette. Un contrôle uniquement fondé sur le nombre total de lignes laisserait passer l’échange de palettes montré dans l’exercice.
Arrêter la projection au lieu d’inventer le contenant manquant
Un parent inconnu n’autorise pas l’affectation à la dernière palette rencontrée. Cette correction pratique peut produire un JSON accepté par l’API tout en installant un colisage faux. Le middleware conserve le segment, son contexte et le motif du refus pour que l’émetteur ou le responsable du mapping puisse corriger la bonne information. Les plages GIN et les emballages groupés demandent un traitement explicitement défini, pas un découpage implicite par une boucle de longueur supposée.
Le transport du document constitue une autre frontière. Un renommage SFTP refusé après le transfert peut empêcher la publication du DESADV avant même son analyse. À l’inverse, des étiquettes de cartons Amazon FBA emploient des identifiants et un contrat propres à ce service. Un identifiant de colis d’un fournisseur ne devient pas un SSCC par renommage de colonne. Le diagnostic doit retrouver le contrat réellement utilisé.
Plan d’action : vérifier un carton du document jusqu’au poste de réception
Constituer une recette que le réceptionnaire peut contredire
Le pilote sélectionne une annonce dont la structure et les marchandises pourront être examinées avec l’émetteur et le destinataire. Il conserve le document, le profil, la version du mapping et la réponse de l’API. Le responsable logistique précise ce que l’écran de réception doit permettre de retrouver. L’intégrateur du WMS explique son modèle d’unités logistiques ; celui de l’ERP vérifie les opérations qui pourront suivre. Dawap coordonne ces interfaces sans présumer qu’un logiciel expose un format DESADV ou une API native identique à celle d’un autre.
- Nommer le profil partenaire, le document et les unités réellement décrites.
- Suivre un carton, son parent CPS et sa ligne produit dans la projection.
- Comparer le résultat à une répartition approuvée, au-delà du total GTIN.
- Tester parent absent, emballage groupé et échange de palettes dans le mapping.
- Vérifier l’affichage destinataire, puis rapprocher séparément la réception physique.
Le monitoring mesure les documents refusés pour hiérarchie inconnue, les cartons dont le parent disparaît et la latence jusqu’à la disponibilité de l’annonce pour le réceptionnaire. Le seuil d’alerte dépend du rendez-vous de déchargement et de la cadence convenue. Il ne découle pas des quatre et six unités fictives. L’observabilité relie l’anomalie au document et à sa version de transformation ; le runbook indique qui corrige le profil, le mapping ou la configuration de l’API.
Reprendre le document sans créer une deuxième réception
La synchronisation en queue distingue l’analyse, la publication de l’annonce et l’écriture éventuelle de réception. Un retry de parsing ne doit pas déclencher cette dernière opération. L’idempotence se définit sur l’objet distant et l’intention convenue avec le WMS, avec les limites de son interface. Après un timeout de publication, les retries retrouvent le document et l’objet déjà créé avant de décider une nouvelle émission. L’exercice local n’implémente pas ce stockage de reprise ni les appels nécessaires à ce rapprochement.
Le rollback d’une version de mapping doit aussi tenir compte des annonces déjà publiées. Revenir au code précédent ne déplace pas les cartons dans le WMS et n’annule pas les scans du quai. La recette prévoit comment isoler les annonces affectées, comparer leurs deux projections et faire autoriser une correction. Le périmètre peut ensuite s’étendre aux palettes mixtes, aux niveaux supplémentaires et aux quantités variables, chaque représentation recevant ses propres règles et contre-exemples plutôt qu’une tolérance silencieuse.
Conclusion : conserver la place du carton avant de valider la somme
Un DESADV peut annoncer les bonnes quantités tout en étant mal projeté pour l’entrepôt. Dans le cas fictif, l’échange des palettes conserve dix unités et modifie pourtant le carton à chercher. Le diagnostic remonte donc de la ligne produit au contenant et à son parent. Les 34 contrôles rendent cette différence observable, sans faire du parseur une preuve de conformité partenaire ou de réception physique.
Notre prestation d’intégration API WMS / OMS pour vos échanges logistiques peut commencer par une annonce qui mobilise le quai. Nous rapprochons le profil, la projection et la lecture du destinataire pour retenir des contrôles utilisables par vos équipes. La correction doit expliquer les cartons et leur contenu avant de déclencher une écriture de stock.
Pour reprendre un DESADV mal projeté dans votre chaîne logistique, Dawap peut vous accompagner sur le profil EDI, le mapping et le rapprochement avec l’entrepôt. Nous retenons avec vos partenaires logiciels un premier document pour cadrer l’intégration API de vos flux ERP et entrepôt. L’extension aux autres profils attend une recette qui distingue l’annonce publiée, les cartons observés et la réception confirmée.