- Escribir el contrato de salida antes de pedir la conversión.
- Detectar filas inventadas, perdidas, duplicadas o alteradas.
- Normalizar fechas sin intercambiar día y mes.
- Conciliar importes en céntimos y bloquear una importación incorrecta.
Veinte filas no tienen por qué ser las mismas veinte filas
Una entrada puede contener 20 movimientos y la salida también 20. Eso no demuestra integridad: el modelo puede perder una fila e inventar otra. La cantidad coincide mientras cambia el conjunto. Por eso cada movimiento necesita un identificador de origen estable que se conserve exactamente una vez.
Tampoco basta con abrir el CSV y «verlo bien». Un signo invertido convierte un gasto en ingreso;12/06/2026 puede transformarse erróneamente en 6 de diciembre; una categoría nueva puede romper la importación; y una suma descuadrada puede quedar fuera de la pantalla.
El contrato de aceptación
| Control | Regla verificable | Fallo que evita |
|---|---|---|
| Esquema | Seis columnas exactas, sin campos adicionales | Formato incompatible o datos inesperados |
| Identidad | Cada ID del origen aparece una vez | Filas inventadas, perdidas o duplicadas |
| Fecha | Entrada declarada DD/MM/YYYY; salida YYYY-MM-DD | Intercambiar día y mes |
| Descripción | Se conserva y no comienza por =, +, - o @ | Alteración e interpretación como fórmula |
| Categoría | Valor exacto de un catálogo cerrado | Etiquetas improvisadas |
| Tipo | Ingreso si es positivo; gasto si es negativo | Invertir el sentido económico |
| Importe | Mismos céntimos y signo que el origen | Redondeo o cifra modificada |
| Conciliación | Suma de salida igual a suma de origen | Importar un conjunto incompleto o alterado |
Laboratorio: una propuesta elegante con ocho fallos
El laboratorio contiene 20 movimientos ficticios y una propuesta de IA deliberadamente defectuosa. Conserva 20 filas, pero pierde MOV-DEMO-007 e inventa MOV-DEMO-999. También cambia un signo, crea una categoría, interpreta mal una fecha y rompe la conciliación.
Abrir el laboratorio MIT de extracto a CSV
- Lee
datos/esquema.jsonydatos/catalogo.json. - Ejecuta
npm run evaluar:propuesta. Debe terminar con código 1. - Corrige una copia sin abrir todavía
solucion/importacion.csv. - Repite el evaluador hasta obtener cero errores y diferencia de cero céntimos.
- Ejecuta
npm run verificarpara contrastar todas las invariantes.
Prompt con contrato, no con deseos
Transforma únicamente los movimientos proporcionados. No añadas, elimines, combines ni dividas filas. ESQUEMA EXACTO movimiento_id,fecha_iso,descripcion,categoria,tipo,importe REGLAS - conserva movimiento_id sin modificar y exactamente una vez - la fecha de entrada es DD/MM/YYYY; devuelve YYYY-MM-DD - conserva la descripción sin resumir ni completar - categoria debe pertenecer al catálogo adjunto - tipo: ingreso si importe > 0; gasto si importe < 0 - conserva importe y signo con dos decimales - no añadas columnas, comentarios, totales ni texto fuera del CSV ANTES DE TERMINAR - cuenta IDs únicos de entrada y salida - informa por separado de cualquier fila que no puedas transformar - calcula la suma en céntimos y exige diferencia 0 La salida es una propuesta. No afirmes que está lista para importar.
El flujo seguro de seis etapas
- Copiar: conserva el archivo original sin cambios.
- Minimizar: usa el tutorial anterior para retirar cuentas, nombres y detalles innecesarios.
- Transformar: produce una propuesta bajo esquema cerrado.
- Validar: comprueba tipos, catálogo, IDs y contenido potencialmente ejecutable.
- Conciliar: compara filas, conjunto de IDs y total en céntimos.
- Aprobar: una persona revisa muestra, excepciones y destino antes de importar.
Si el evaluador falla, el proceso se detiene. No «arregles» una diferencia modificando el total: localiza la fila, el signo, la fecha o la transformación responsable.
CSV no significa ausencia de riesgo
RFC 4180 documenta un formato común —cabecera, campos, comillas y saltos—, pero también advierte que existen diferencias entre implementaciones y que un CSV puede compartir datos privados. Además, algunas hojas interpretan ciertos textos como fórmulas. Trata el archivo como entrada no confiable, valida el contenido y nunca ejecutes directamente una salida del modelo.
OWASP denomina improper output handling a utilizar una salida de un LLM sin validarla o tratarla según el contexto de destino. En este caso, el destino es un importador o una hoja: el esquema y la conciliación son controles obligatorios, no mejoras opcionales.
Coste y elección de herramienta
- El laboratorio no requiere cuenta, API, Excel ni suscripción.
- Un chat de pago puede reducir trabajo manual, pero no elimina revisión ni coste por uso.
- Para reglas estables, un script determinista suele ser más barato y reproducible que un LLM.
- Reserva la IA para formatos variables o clasificación ambigua; valida siempre su salida.
- No subas extractos reales sin autorización, minimización y revisión del producto y plan.
Fuentes primarias
- RFC Editor · RFC 4180, formato común CSV
- Python · lectura y escritura de CSV
- OWASP · validación y tratamiento de salidas de LLM
- Aulafy · minimizar datos antes de usar IA
Comprobado el 27 de julio de 2026. El método es independiente del proveedor; revisa el formato exigido por tu importador real.
Si has guardado la evidencia de esta lección, continúa con «Primer MCP seguro». Si no, repite la comprobación antes de avanzar.