Memo n.º 08
Ingeniería · 2026.08.14 · 4 min de lectura
El CSV de tu banco es un desastre. Así parseamos 55.
Notas de campo de construir un corpus de parsers: separadores de miles que parecen decimales, fechas sin año, BOM y finales de línea de Windows, y los tests que mantienen funcionando 55 formatos de banco y 31 de exchange.

Open Banking cubre los bancos conectados. Todo lo demás llega como una exportación en CSV, y cada banco inventa la suya. Esto es lo que aprendimos construyendo un parser que reconoce 40+ formatos de banco y 30+ exportaciones de exchanges y brókers, y los tests que impiden que se rompan.
El número es la parte difícil
«1.234,56» son mil doscientos treinta y cuatro con cincuenta y seis en España. «1,234.56» es lo mismo en Reino Unido. «1.234» son mil en Madrid y uno coma dos tres cuatro en Londres. Un parser que adivina celda a celda acertará unas y fallará otras; uno que decide por fichero, con el patrón mayoritario de ese fichero, acierta. El nuestro lee la columna entera antes de leer un solo valor.
La notación científica es la otra trampa: un exchange de cripto exporta «3.6e-5 USDT», y un recorte ingenuo de letras convierte el exponente en «3.6-5», que se lee como 3,6. Es un error de cien mil veces sobre una cantidad de polvo, y nos pasó en un fixture antes de pasarle a un usuario.
Fechas
Día-mes-año en casi toda Europa, mes-día-año en las exportaciones de EE. UU., año-mes-día en las sensatas, y «5/1/2025» en una exportación de Hyperliquid que significa cinco de enero. Un año de dos cifras, una columna de fecha sin hora y otra columna aparte con la hora (Bitvavo), una cabecera que dice «Time(UTC+8)» y espera que desplaces ocho horas. Nuestra regla: gana la zona horaria declarada en la cabecera, una no declarada es UTC, y un fixture demuestra que cada formato cae en el día correcto.
Los caracteres invisibles
Una marca de orden de bytes al principio del fichero, que pone Excel, rompe el nombre de la primera columna. Los finales de línea de Windows añaden un retorno de carro a la última celda de cada fila. Una línea en blanco final parece un movimiento vacío. Cada fixture de nuestro corpus se prueba tal cual, con BOM, con CRLF y con línea final, y cada uno debe ser reclamado por exactamente un detector en las cuatro variantes.
Detectar antes de parsear
El fallo peligroso no es «este fichero no se puede parsear». Es «este fichero lo parseó el parser equivocado»: una exportación de Blofin que dispara el detector de OKX porque Blofin es un fork suyo, un fichero de MEXC cuya columna «Executed Amount» contiene la palabra que busca el detector de Binance. Los detectores casan celdas de cabecera exactas, no subcadenas, y el test del corpus demuestra que cada fixture lo reclama un detector y lo rechazan todos los demás.
Qué significa «verificado»
Un fixture está verificado cuando su cabecera y sus convenciones se copiaron de una exportación real; modelado cuando se construyó a partir de las columnas documentadas por el proveedor porque nadie ha compartido aún un fichero real. El README dice cuál es cuál. Cuando aparece uno real, sustituye al modelo, conserva el nombre de fichero y se actualiza el resultado esperado en el test. Tres mercados (Backpack, Lighter, Aster) están modelados hoy; la treintena restante, verificada.
Cuando las reglas fallan
Un formato que nadie ha visto va a un modelo con la cabecera y unas pocas filas, con números de cuenta y nombres eliminados antes, y el modelo propone una correspondencia de columnas. La propuesta se valida igual que una por reglas: los números deben parsearse, las fechas deben caer en el pasado, los importes no pueden ser todos cero. La vía por reglas resuelve bastante más del noventa por ciento de las subidas; el modelo es el último recurso, no el primero.
La petición
Si tu banco o bróker no se reconoce, el arreglo más rápido es tu exportación anonimizada. Lait ofrece compartirla después de una importación correcta, y cada muestra compartida se convierte en un fixture que protege a la siguiente persona con el mismo banco.
Pruébalo
Lait pone tu cripto, tu bolsa, tus bancos, tus inmuebles y tus deudas en una sola pantalla, en euros o dólares. Pedir invitación.
Sin tarjeta. El acceso básico es gratuito. Hecho en Barcelona.