Guillaume Duvernay

Open source

jev-table-import-mapper

Tus usuarios suben un CSV. Sus columnas nunca coinciden con las tuyas.

Una pequeña librería de JavaScript para la pantalla de importación que todo producto termina creando. Asocia las columnas de un archivo subido con tu tabla de destino, devuelve una probabilidad para cada coincidencia y señala aquellas de las que no está segura. Dos archivos, sin dependencias.

Rol
Autor
Año
2026
Stack
JavaScript, OpenRouter, Jev

Primero el código, y solo para lo que el código puede resolver

La primera etapa normaliza mayúsculas, acentos y separadores, y luego busca una igualdad estricta. First Name y first_name son la misma palabra escrita de forma distinta, por lo que ese par se bloquea automáticamente y nunca falla. Company Name y company no son la misma palabra, tampoco lo son team y department: eso son preguntas, así que pasan a la siguiente fase. En una exportación limpia de HubSpot, esto resuelve 7 de 10 columnas antes de realizar cualquier llamada de red.

Una llamada para todo lo demás, en forma de matriz

La segunda etapa plantea un sí/no independiente por cada par restante, en lugar de una opción múltiple por columna, además de una pregunta de control para saber si una columna no pertenece a ningún sitio. Esa estructura es la decisión de diseño. Una opción múltiple tiene que nombrar a un ganador aunque nada encaje; una matriz puede puntuar bajo en todas partes, que es como se ve un campo ausente. Una exportación de 23 columnas contra una tabla de 10 columnas supone 253 preguntas, una llamada, 675 ms y aproximadamente una décima de centavo.

La decisión permanece en tu código

La llamada devuelve la matriz completa, no un veredicto. El umbral es una constante que tú ajustas, no un comportamiento que se solicita mediante un prompt, y cualquier valor inferior se convierte en un desplegable clasificado en lugar de una suposición. Como el número existe de todos modos, la interfaz puede mostrarlo: una coincidencia al 81% se interpreta de forma distinta a una al 98%.

Dónde se detiene

Probado con nueve exportaciones reales contra tres tablas de destino de diez columnas cada una. Un esquema de destino de unas 40 columnas requeriría más de una llamada, y el segundo presupuesto en la ventana de contexto del modelo no se divide, por lo que una tabla muy ancha es un límite técnico más que una ruta lenta. No lo he probado.

The shape of the questions is the whole thing

One yes/no per pair, not one multiple choice per column. It sounds like a detail and it decides whether the library can say "this column belongs nowhere".

Roughly a third of the columns on a real export belong nowhere in your table. Only the second shape can say so.

A 23 column warehouse export, end to end

Twenty-one times the questions costs 1.45 times the wait: 12 questions take 464 ms and 253 take 675. If each question were its own call this file would be a two minute wait.

7 of 10columnas resueltas por código, antes de cualquier llamada

675 mspor 253 preguntas en una sola llamada

$0.0012para mapear una exportación de almacén de 23 columnas