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
- Visitar
- Código fuente
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".
One choice per columnThe obvious shape
- Has to pick a destination, always
- When nothing fits it still names one, confidently
- Nothing in the answer means "none of these"
A yes/no per pair, plus a guardWhat it does
- Every pair scored on its own
- A column can score low everywhere, which is what a missing field looks like
- The guard asks directly whether it belongs nowhere
A 23 column warehouse export, end to end
- Normalise and match exactlyCase, accents, separators. Nothing that is a judgementfree
- Ask about everything left23 columns × 10 destinations, plus one guard each253 questions
- One callThe whole matrix comes back as numbers675 ms
- Apply the threshold, in your codeBest free pair first, repeat. Below the bar becomes a dropdown0.75
Mapped, and cost10 of 10, $0.0012
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

