CARTOGRAPHIE_SYSTÈME customer corpus, run 13 Sep 2026 · 68 BOM EXEMPLES LOCAL · MONO_UTILISATEUR
Adesio · Intake

Cartographie du système Intake

Chaque objet, champ, source et destination — une seule carte. Intake est la porte d’entrée côté client du moteur de matching d’Adesio : il ingère des fichiers BOM désordonnés, apprend chaque format, résout chaque ligne en un MPN ou un générique structuré, et transmet une BOM canonique propre à travers un contrat fixe. Cette page trace ce qui le traverse, et exactement où le portail s’arrête et où le Stack Adesio commence.

Couverture de résolution — customer corpus, run 13 Sep 2026
83.8%
des 6 230 lignes approvisionnables peuvent aller directement au matching — 77.1% par référence fabricant, 6.7% en générique avec valeur et boîtier structurés. 16.2% sont à vérifier ici avant de poursuivre. 6 323 lignes sur 68 BOM ; 68 / 68 reconnues automatiquement par un format appris.
Une carte, pas la source de vérité. Ce sont les documents projet qui le sont — cette page est schématique. Les chiffres ci-dessus sont une exécution mesurée à une date, pas un compteur en direct, et ils bougent à chaque passage sur le corpus.
01 · Le pipeline

Extract → Transform → Load → [ match · enrich · risk · price ]

L’import de BOM est la première étape d’un processus plus long, déjà construit dans le Stack Adesio. Le portail possède Extract + Transform + le contrat de Load ; tout ce qui suit la remise canonique existe déjà en aval. Le schéma canonique est l’objet frontière entre les deux.

Entrée · client

Sources

N’importe quel format de BOM, aussi désordonné soit-il, déposé ou téléversé. Un fichier qui n’est pas une BOM est refusé plutôt qu’analysé. .ebom · .xlsx · .xls · .csv

Portail · Extract

Lire

Un lecteur par format transforme le fichier en tables brutes. Les nouveaux formats sont de nouveaux lecteurs devant le même pipeline. readBomFile → RawTable[]

Portail · Transform

Résoudre

Encodage, rôles de colonnes, résolution à deux voies, fabricant canonique, génériques, suppression du bruit — avec une confiance et une base sur chaque ligne.

Le contrat

BOM canonique

Un schéma fixe. N’importe quel format en entrée, une BOM canonique propre en sortie ; Adesio ne voit jamais un format brut. adesio.bom.canonical/v1

Portail → Adesio · Load

Transmettre

Émettre le projet et ses BOM ; chaque ligne devient un bomLine, joint sur IdTech. PRÉVU

Stack Adesio · construit

Moteur central

Matching faisant autorité, enrichissement, risque et prix — puis appel d’offres et commande depuis le projet. C’est ici qu’une ligne que le portail n’a pas su résoudre est résolue.

Le KPI du portail, c’est la couverture de résolution et un Load propre. L’anti-objectif, c’est de reconstruire en aval un second moteur de matching, de risque ou de prix.

02 · Ce qui entre

Ce qui entre par la porte

De vrais formats clients, chacun avec ses bizarreries. L’encodage est décidé en premier — sur tout le tampon, jamais par échantillon — avant toute lecture de structure.

.ebom

Cadence Allegro

Délimité par points-virgules ; le MPN se trouve dans DESCRIPTION à une position différente selon la famille. L’extraction par famille a fait passer ce fichier de 68% à 88% puis 94%. CONSTRUIT

.xlsx / .xls

Classeurs Excel

Lus via SheetJS. Un classeur multi-feuilles devient un projet avec plusieurs BOM ; les onglets qui ne sont pas des BOM sont ignorés. CONSTRUIT

.csv

Nomenclatures ERP

Exports français multi-niveaux : MPN empaquetés en MANUFACTURER (MPN), virgules décimales, et rapports imprimés dont les sous-tables imbriquées sont repliées dans leur ligne parente par un reshaper nommé. CONSTRUIT

PDF · ODS · IPC-2581 · ODB++

Autres lecteurs

Un lecteur par format devant le pipeline inchangé. Non construit. PRÉVU

L’échelle de l’encodage

Marque d’ordre des octets ?EF BB BF · FF FE · FE FF
Décodage UTF-8 strict ?tout le tampon, pas un échantillon de 64 Ko
cp1252 ou latin1la plage 0x80–0x9F est le révélateur
Encodage + confianceexposés, avec une correction de décodage

Décoder avant la structure. Windows-1252 est décodé sans ICU, pour que Node 20 cesse de supprimer silencieusement les octets 0x80–0x9F. .xlsx est du zip/XML et saute entièrement l’échelle.

02b · Les portes d’entrée

Quatre portes, un seul Intake

Le produit, c’est Intake. Une zone de dépôt, une ligne de commande, une API HTTP et un connecteur Claude sont quatre façons de l’atteindre — pas quatre produits, et pas un noyau sur lequel on aurait boulonné des intégrations. Quelle que soit la porte empruntée, un fichier rencontre les mêmes lecteurs, la même résolution, le même contrat adesio.bom.canonical/v1 et les mêmes règles sur ce qui peut être affirmé. Et la même INSTALLATION : un format appris dans l’application est reconnu par le connecteur, et un composant qu’un opérateur a confirmé quelque part est déjà tranché partout.

portal

L’application

Déposer un fichier, lire le rapport, corriger une colonne, confirmer un composant. La seule porte avec un humain devant — et la seule qui puisse proposer les gestes de correction et de confirmation. CONSTRUIT

portal

La ligne de commande

bom-analyzer <file> écrit le rapport, le document canonique, le CSV et la liste de recherches. N’applique DÉLIBÉRÉMENT aucune confirmation d’opérateur : un chiffre qu’elle imprime parle de ce que l’outil lit, pas de ce que quelqu’un a cliqué. CONSTRUIT

portal

L’API HTTP

Les mêmes routes que celles de l’application, décrites en OpenAPI 3.1 et rendues depuis la table sur laquelle le serveur dispatche — la description ne peut donc pas dériver de l’API. Une instance sert son propre schéma sur /api/schema. CONSTRUIT

portal

Le connecteur Claude

MCP sur stdio : analyser, parcourir ce qui est à vérifier, exporter les recherches, enregistrer une décision — à l’intérieur d’une conversation. Chaque listing est paginé, parce qu’une vraie BOM ne tient pas dans le contexte d’un modèle. CONSTRUIT

Ce qui n’est pas construit, et c’est le même manque pour trois d’entre elles : il n’y a pas d’authentification et un seul client. Une API multi-tenant, un connecteur distant ajouté sur claude.ai avec OAuth, une sémantique de job pour les gros fichiers et des webhooks attendent tous une seule chose — une clé d’API qui résout vers un identifiant client. Les magasins sont déjà cloisonnés par client ; rien d’autre ne l’est. PRÉVU

03 · Résolution

Deux voies — une ligne se résout dans l’une ou l’autre

Adesio apparie en aval de deux façons : une ligne est donc résolue si elle porte soit un MPN confirmé, soit une valeur + un boîtier confirmés. Seules les lignes qui n’ont ni l’un ni l’autre sont à vérifier — et même celles-là ne sont pas perdues : elles poursuivent vers Adesio.

Ligne MPN

payload = mpn + manufacturer

Porte une véritable référence fabricant. Un MPN deviné depuis l’intérieur d’une description atterrit en ambiguous avec son candidat attaché — jamais en found. Le fabricant est résolu par le sous-système d’alias sans jamais écraser ce que le fichier énonce.

Ligne générique

payload = value + package

Une résistance, une capa ou une inductance CMS n’a pas d’identité au-delà de sa valeur et de son boîtier, extraits par une analyse définie plutôt que devinés. Un générique correspond à un ensemble d’équivalents, pas à un composant unique.

Prévisualisation paramétrique des génériques CONSTRUIT

Les concurrents transforment une description en MPN candidats. Le portail a déjà fait la moitié difficile — l’extraction structurée — et câble maintenant la seconde en tant que prévisualisation : la valeur et le boîtier d’un générique sont appariés contre des composants que le portail a déjà résolus avec certitude, hors-ligne, sans aucun appel externe. Mesuré sur customer corpus, run 13 Sep 2026 : 181 des 417 lignes génériques (43.4%) sont revenues avec au moins un candidat. Un candidat ne fait jamais autorité — la ligne reste ambiguous et le matcher d’Adesio fait autorité après le Load.

04 · L’objet canonique

Une ligne de la BOM canonique

Le contrat entre le portail et Adesio : adesio.bom.canonical/v1. Les champs nommés sont toujours présents et nuls quand ils sont inconnus, la forme est donc stable. Certains champs sont repris tels quels dans la vue Composants d’Adesio ; les autres décrivent avec quelle certitude chacun a été extrait.

Champ→ AdesioCe qu’il porte
Identité — la charge utile
mpnComposantRéférence fabricant, là où la ligne en porte une.
manufacturerExactement ce que le fichier énonce, jamais remplacé.
manufacturer_canonicalmoitié de jointureLe fabricant vers lequel l’orthographe énoncée s’est résolue — la moitié de la clé naturelle.
internal_pnCPNRéférence interne / client.
idtechclé de jointureUUID de substitution du composant mutualisé. Nul jusqu’à résolution en aval.
refdesRepère(s) sur la carte.
lineLe numéro de ligne propre à la BOM source — traçabilité uniquement, jamais utilisé pour l’appariement.
Voie générique — requise là où il n’y a pas de MPN
valueentrée de matchingValeur électrique structurée, avec sa base.
packageentrée de matchingBoîtier / empreinte structuré.
parametric_candidatesindicatifL’ensemble de prévisualisation — ordonné, hiérarchisé, jamais une substitution.
Enveloppe de statut — base d’extraction, pas un appariement catalogue
mpn_statusstatut bomLinefound · ambiguous · not_found · not_sourceable · placeholder.
mpn_status_basisdrapeau d’enveloppeDit que c’est ce que le FICHIER énonce, pour que rien en aval ne le lise comme une confirmation catalogue.
mpn_sourceD’où vient l’identité — une colonne, une position dans la description, un alias.
resolutionmpn · matchable_generic · needs_review · not_sourceable.
review_reasonPourquoi une ligne est à vérifier — et si le manque vient de nous ou du fichier.
Contexte & transport
quantityQté dem.Quantité, tolérante à la virgule décimale.
descriptionDescriptionLa description d’origine de la ligne, conservée.
custom_fieldstransportColonnes libellées par l’opérateur — transportées, explicitement non appariantes.
05 · Rôles de colonnes

Vocabulaire réservé vs. champs personnalisés

Le sourcing est piloté par la carte dans laquelle une colonne atterrit, jamais par son libellé. Les rôles réservés sont un vocabulaire fixe et fermé qui correspond à Adesio ; un en-tête personnalisé est conservé mais ne peut jamais piloter l’appariement. Les deux cartes n’entrent jamais en collision.

Réservés · columnRoles — pilotent l’appariement
MPNPACKED_MPNMANUFACTURERINTERNAL_REF → CPNEXTERNAL_REFDESIGNATIONDESCRIPTIONQUANTITYQUANTITY_UNITSIDESUPPLIER_NAMESUPPLIER_REFLINE

Une colonne de profondeur hiérarchique (Level / Niveau) et un code d’assemblage parent (code père) sont exclus d’office des rôles d’identité : ce ne sont pas des identités plus faibles, ce ne sont pas des identités du tout.

Personnalisés · customFields — transport
n’importe quel libelléProjetZoneNote atelier

Un opérateur peut nommer n’importe quelle autre colonne. Elle est portée jusqu’au canonique comme transport libellé — conservée et enregistrée dans le profil de format, mais elle n’atteint jamais le classificateur, et un libellé personnalisé ne peut jamais entrer en collision avec un nom de rôle réservé.

06 · La poignée de main

Pourquoi le portail ne dit jamais « Found »

Le portail rapporte ce qu’il a extrait, et sur quelle base — il ne confirme pas un composant contre un catalogue. Il emploie le vocabulaire de statut d’Adesio mais se limite aux issues fondées sur l’extraction ; c’est le matcher d’Adesio qui produit l’unique FOUND faisant autorité. IdTech est la jointure.

Le portail émet

Statut limité par la base

Ici, found signifie que le FICHIER énonce une référence sans ambiguïté — jamais qu’un catalogue l’a confirmée. Le drapeau de base sur chaque ligne le dit.

La jointure

IdTech

Un UUID de substitution pour le composant mutualisé, qui absorbe les remous de normalisation et de fusion. Le portail le résout ou le crée ; Adesio lit par lui.

Adesio produit

L’appariement faisant autorité

Seul le matcher central, après le Load, transforme une ligne en FOUND catalogue confirmé.

La pire erreur. Un MPN fabriqué de toutes pièces est la pire chose que ce système puisse produire. Les placeholders comme [NoParam] sont filtrés avant de pouvoir être rapportés comme certains ou d’atteindre un tier mutualisé, et un candidat unique et incertain est ambiguous — jamais found.
07 · Modèle de données

Trois tiers, par règle de partage

Le modèle de stockage est défini par ce qui peut être mutualisé entre clients et ce qui ne le peut pas. Les BOM d’un client et leur liaison aux composants ne quittent jamais sa frontière ; la façon de lire un format, et les faits universels sur un composant, sont partagés — c’est ce qui fait que le système s’améliore à chaque fichier.

Tier 1 · privé

Données client

BOM brutes, liaison CPN → IdTech, quantités, face de carte, rapports et sorties canoniques. Isolées par client, jamais mutualisées. Jamais commitées dans ce dépôt — les fixtures sont synthétiques et ne portent que de la structure.

Tier 2 · structure mutualisée

Profils de format

Comment lire un format — en-têtes, délimiteur, rôles de colonnes. Aucune donnée de composant, donc c’est mutualisé : appris une fois, réutilisé pour chaque client qui emploie cet exporteur. L’hypothèse est énoncée plutôt que supposée : les EN-TÊTES de colonnes d’une BOM ne sont pas traités comme confidentiels.

Tier 3 · les faits, mutualisés

Catalogue de composants mutualisé

Référence, fabricant, famille et le couple valeur+boîtier avec lequel il a été vu. Universel — vrai quel que soit l’expéditeur du fichier — donc les mutualiser, c’est l’effet de réseau : chaque BOM traitée rend la ligne générique du client suivant plus résoluble.

Tier 1 · la provenance, privée

Qui a acheté quoi

Le rapport, le NOM DE FICHIER, les quantités, les dates. Jamais mutualisés, et le nom de fichier en est la raison : BOM 40-00000001-001-F.CSV est un code projet. Stockés comme un registre par client en regard des faits mutualisés, joints uniquement pour la vue propre à ce client.

Une mauvaise ligne dans un tier mutualisé empoisonne tous les clients : un changement de niveau classe passe donc un filtre de confiance et de provenance avant toute création ou fusion.

08 · Apprentissage

Apprendre un format une fois, le reconnaître ensuite

L’apprentissage des formats vit à la périphérie, pour que le cœur d’Adesio ne voie jamais que des données normalisées. Les corrections alimentent le profil ; rien ne s’applique jamais tout seul en silence.

Empreinte

Reconnaître le format

La clé d’identité est UNIQUEMENT structurelle — en-têtes, délimiteur, nombre de colonnes, ligne d’en-tête — et décrit le fichier tel qu’il ARRIVE. 68 / 68 reconnues automatiquement au second passage sur le corpus.

Profil

Appliquer le mapping

Délimiteur, rôles de colonnes, carte préfixe de repère → famille, disposition de description par famille, et un reshaper nommé là où un fichier n’est pas une seule table. Un format reconnu amène son profil client avec lui.

Confirmer

Un opérateur décide

Une correspondance proche n’est jamais appliquée automatiquement : chaque correction est par index de colonne, et une correspondance proche a des colonnes décalées. Elle est proposée à la place.

Alias fabricants

Un fabricant canonique

De nombreuses orthographes se résolvent vers un seul fabricant, indexées sur le MPN plutôt que par rapprochement flou de noms, contre un référentiel mondial de 84 000 lignes. Un fabricant inféré est badgé et n’écrase jamais le fichier.

09 · Levier en aval

Alimenter & prévisualiser — ne pas reconstruire

Le risque, les équivalents et les sources existent déjà dans le Stack Adesio. Le levier du portail est en amont : leur fournir de meilleures entrées, et prévisualiser une version légère à l’import. Les chiffres faisant autorité sont toujours ceux d’Adesio, après le Load.

Layer 1

Risque & conformité

Fournir un fabricant canonique propre au moteur de risque existant — le risque pays d’origine ne vaut que ce que vaut cette identité — et transporter les RoHS/SVHC énoncés par le fichier à travers le canonique. PRÉVU

Layer 2

Équivalents

L’ensemble de candidats paramétriques est exactement cet objet ; les colonnes Équivalent déclarées par le fichier alimentent la même surface. CONSTRUIT

Layer 3

Sources

Une BOM propre et résolue, c’est ce qui fait bien tourner la disponibilité, le prix et l’appel d’offres en aval. PRÉVU

10 · Invariants

Les règles qui ne plient jamais

Jamais de MPN fabriqué ou de placeholder. Un faux MPN est la pire erreur ; les déchets sont filtrés avant d’être rapportés ou mutualisés.
Ne jamais écraser un MPN ou un fabricant énoncé par le moteur. Une valeur inférée s’ajoute et est badgée, elle ne remplace jamais.
Ne jamais affirmer sur une ligne ambiguë — aucune note, aucun risque, équivalent, prix ou candidat n’y est revendiqué comme certain.
Ne jamais commiter une vraie BOM client. Les fixtures sont synthétiques et ne portent que de la structure.
Une ligne de tier mutualisé passe un filtre de confiance et de provenance, parce qu’une mauvaise ligne empoisonne tous les clients.
L’analyseur est déterministe et hors-ligne. Aucun réseau dans le chemin d’analyse ; l’enrichissement est une étape séparée derrière une interface.
Vert avant commit : chaque changement passe par une branche, une pull request et la CI sur Node 20 et 22.
11 · Où nous en sommes

De « tourne sur votre Mac » à « les clients l’utilisent »

Phase A · faite

Analyser & résoudre

Détection d’encodage, résolution à deux voies, le chiffre de couverture en tête, analyse de structure, export canonique, et extraction de MPN par famille depuis une description à disposition fixe.

Phase B · en cours

Apprendre & persister

Empreinte → profil de format → reconnaissance automatique, un magasin de formats JSON, la boucle de correction, le sous-système d’alias fabricants, le catalogue Tier 3 et la prévisualisation paramétrique.

Phase C · devant

Le vrai portail

Authentification, isolation par client, hébergement, stockage objet, chiffrement, la base de composants mutualisée — et la remise Load vers Adesio via une API. Les cibles de déploiement progressent par tag. PRÉVU

12 · Le cycle, par scénario

Quatre façons de parcourir les mêmes neuf étapes

La carte ci-dessus dit de quoi le système est fait. Celle-ci dit ce qui se PASSE, dans l’ordre, et où quatre scénarios réels divergent. C’est une frise de processus, pas un calendrier : les étapes sont en séquence, et rien ici n’est une durée. Seules les cases qui diffèrent de l’exécution standard sont écrites — une case vide signifie que ce scénario fait exactement ce que fait le scénario A, ce qui est tout l’intérêt de les mettre côte à côte.

ScénarioImportClientEncodagePortailFormatPortailRésolutionPortailRapportPortailApprentissagePortailBOM canoniquePortailLoadPortailAval AdesioAdesio
A · BOM standardUn format connu, déjà appris. Le chemin que le portail est fait pour rendre ordinaire.Un fichier, déposé.Décidé sur tout le tampon, avant toute lecture de structure.L’empreinte correspond à un profil enregistré ; ses rôles de colonnes sont appliqués sans aucune question.Chaque ligne se résout en MPN ou en générique structuré.Le chiffre de couverture, les six sections, et les lignes qui attendent encore un humain.Sautée — il n’y a rien de nouveau à apprendre sur ce format.Un document, chaque champ nommé présent, nul là où c’est inconnu.Remis à travers le contrat fixe.Matching, enrichissement, risque, prix — Adesio résout ce que l’intake n’a pas pu.
B · Format nouveauPersonne n’a encore vu cet exporteur. Le travail supplémentaire n’a lieu qu’une fois ; le deuxième fichier de cette forme est le scénario A.identique à Aidentique à AAucune correspondance d’empreinte. Les rôles de colonnes sont décidés sur le seul contenu, et le rapport le dit.identique à AUn opérateur corrige une colonne ; le fichier est relu et toute l’analyse est relancée.La lecture corrigée est enregistrée comme format nommé, indexé sur la STRUCTURE — le prochain fichier de cette forme ne demandera donc rien.identique à Aidentique à Aidentique à A
C · Liste de composantsUn client dont la politique interdit d’exporter une BOM complète. Les mêmes composants sans la structure — intrinsèquement sûr vis-à-vis de la rétro-ingénierie, et le candidat naturel à un déploiement souverain sans flux sortant.Une liste plate de codes composants, sans repères et sans emplacement.identique à Aidentique à AInchangée. Le résolveur n’a jamais eu besoin de la structure — la plupart des fixtures du corpus n’énoncent de toute façon aucune face de carte.La structure absente est ATTENDUE, ce n’est pas un manque : la couverture est calculée sur ce qu’une liste de composants peut porter, et rien n’est retiré pour des champs de conception absents.identique à ALes champs de conception sont nuls — pas omis. La forme reste identique.identique à Aidentique à A
D · Classeur multi-feuillesUn fichier, plusieurs cartes. L’unité qui arrive est un projet, pas une BOM.Un classeur, ou un dossier. Les onglets qui ne sont pas des nomenclatures sont ignorés.Aucune décision d’encodage — un classeur est du zip/XML et stocke son texte en UTF-8.identique à Aidentique à Aidentique à Aidentique à AUn projet portant N BOM, chacune un document à part entière.C’est le projet qui est remis, avec ses BOM en dessous.identique à A
Adesio · Intake — la porte d’entrée BOM côté client · contrat adesio.bom.canonical/v1 · dépôt ades-io/bom-analyzer
Une carte, pas la source de vérité — ce sont les documents projet qui le sont. Les figures sont schématiques, et les chiffres du corpus sont une exécution mesurée (customer corpus, run 13 Sep 2026), pas un compteur en direct.