Guillaume Duvernay

Open Source

jev-table-import-mapper

Nutzer laden CSVs hoch. Deren Spalten entsprechen nie Ihren eigenen.

Eine kleine JavaScript-Library für den Import-Screen, den fast jedes Produkt irgendwann baut. Sie mappt die Spalten einer hochgeladenen Datei auf Ihre Zieltabelle, gibt eine Wahrscheinlichkeit für jeden Treffer zurück und meldet unsichere Zuordnungen. Zwei Dateien, keine Abhängigkeiten.

Rolle
Autor
Jahr
2026
Stack
JavaScript, OpenRouter, Jev
Besuchen
Quellcode

Erst Code, dann Logik für das, was Code lösen kann

In Phase eins werden Groß-/Kleinschreibung, Akzente und Trenner normalisiert, gefolgt von einem Abgleich auf strikte Gleichheit. "First Name" und "first_name" sind dasselbe Wort, nur anders geschrieben, daher wird dieses Paar kostenlos fixiert und kann nicht falsch sein. "Company Name" und "company" sind nicht dasselbe Wort, ebenso wenig wie "team" und "department": das sind Fragen, die in den nächsten Schritt gehen. Bei einem sauberen HubSpot-Export sind so 7 von 10 Spalten geklärt, bevor ein einziger Netzwerkaufruf erfolgt.

Ein Aufruf als Matrix für alles Weitere

In Phase zwei wird pro verbleibendem Paar eine unabhängige Ja/Nein-Frage gestellt, statt einer Multiple-Choice-Frage pro Spalte, ergänzt um eine Prüffrage, ob eine Spalte überhaupt nirgendwo hingehört. Diese Struktur ist die Designentscheidung. Multiple-Choice muss einen Gewinner benennen, selbst wenn nichts passt; eine Matrix darf überall niedrig punkten, was ein fehlendes Feld widerspiegelt. Ein Export mit 23 Spalten gegen eine Tabelle mit 10 Spalten bedeutet 253 Fragen, ein Aufruf, 675 ms und etwa ein Zehntel eines Cents.

Die Entscheidung bleibt in Ihrem Code

Der Aufruf gibt die gesamte Matrix zurück, kein Urteil. Der Schwellenwert ist eine Konstante, die Sie anpassen, kein Verhalten, das Sie per Prompt steuern, und alles darunter wird zu einem sortierten Dropdown statt zu einer Vermutung. Da der Wert ohnehin existiert, kann die Oberfläche ihn anzeigen, sodass ein Treffer bei 81% anders wirkt als einer bei 98%.

Die Grenzen des Systems

Getestet mit neun realen Exporten gegen drei Zieltabellen mit jeweils zehn Spalten. Ein Zielschema von etwa 40 Spalten würde mehr als einen Aufruf erfordern, und das zweite Budget im Kontextfenster des Modells teilt sich nicht auf. Eine sehr breite Tabelle ist also ein hartes Limit und kein bloßer Performance-Verlust. Ich habe es nicht ausprobiert.

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 10Spalten per Code geklärt, vor jedem Aufruf

675 msfür 253 Fragen in einem einzigen Aufruf

$0.0012zum Mapping eines Warehouse-Exports mit 23 Spalten