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.
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.
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
Un lecteur par format transforme le fichier en tables brutes. Les nouveaux formats sont de nouveaux lecteurs devant le même pipeline. readBomFile → RawTable[]
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.
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
Émettre le projet et ses BOM ; chaque ligne devient un bomLine, joint sur IdTech. PRÉVU
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.
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.
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
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
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
Un lecteur par format devant le pipeline inchangé. Non construit. PRÉVU
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.
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.
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
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
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
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
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.
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.
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.
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.
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 | → Adesio | Ce qu’il porte |
|---|---|---|
| Identité — la charge utile | ||
| mpn | Composant | Référence fabricant, là où la ligne en porte une. |
| manufacturer | — | Exactement ce que le fichier énonce, jamais remplacé. |
| manufacturer_canonical | moitié de jointure | Le fabricant vers lequel l’orthographe énoncée s’est résolue — la moitié de la clé naturelle. |
| internal_pn | CPN | Référence interne / client. |
| idtech | clé de jointure | UUID de substitution du composant mutualisé. Nul jusqu’à résolution en aval. |
| refdes | — | Repère(s) sur la carte. |
| line | — | Le 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 | ||
| value | entrée de matching | Valeur électrique structurée, avec sa base. |
| package | entrée de matching | Boîtier / empreinte structuré. |
| parametric_candidates | indicatif | L’ensemble de prévisualisation — ordonné, hiérarchisé, jamais une substitution. |
| Enveloppe de statut — base d’extraction, pas un appariement catalogue | ||
| mpn_status | statut bomLine | found · ambiguous · not_found · not_sourceable · placeholder. |
| mpn_status_basis | drapeau d’enveloppe | Dit que c’est ce que le FICHIER énonce, pour que rien en aval ne le lise comme une confirmation catalogue. |
| mpn_source | — | D’où vient l’identité — une colonne, une position dans la description, un alias. |
| resolution | — | mpn · matchable_generic · needs_review · not_sourceable. |
| review_reason | — | Pourquoi une ligne est à vérifier — et si le manque vient de nous ou du fichier. |
| Contexte & transport | ||
| quantity | Qté dem. | Quantité, tolérante à la virgule décimale. |
| description | Description | La description d’origine de la ligne, conservée. |
| custom_fields | transport | Colonnes libellées par l’opérateur — transportées, explicitement non appariantes. |
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.
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.
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é.
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.
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.
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.
Seul le matcher central, après le Load, transforme une ligne en FOUND catalogue confirmé.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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
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
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.
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.
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
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énario | ImportClient | EncodagePortail | FormatPortail | RésolutionPortail | RapportPortail | ApprentissagePortail | BOM canoniquePortail | LoadPortail | Aval 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 à A | identique à A | Aucune correspondance d’empreinte. Les rôles de colonnes sont décidés sur le seul contenu, et le rapport le dit. | identique à A | Un 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 à A | identique à A | identique à 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 à A | identique à A | Inchangé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 à A | Les champs de conception sont nuls — pas omis. La forme reste identique. | identique à A | identique à 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 à A | identique à A | identique à A | identique à A | Un projet portant N BOM, chacune un document à part entière. | C’est le projet qui est remis, avec ses BOM en dessous. | identique à A |