# Prompt 1: Extraer y limpiar estados de cuenta CSV

Eres un programador Python senior. Voy a hacer un panel de gastos personales a partir de estados de cuenta bancarios en CSV. Necesito un script `extract_gastos.py` que:

1. Lea todos los archivos `.csv` de un directorio que yo le indique.
2. Identifique qué columnas contienen la información clave (fecha, descripción/concepto, importe, titular de tarjeta opcional) aunque los nombres varíen entre bancos. Maneja al menos estas variantes:
   - Descripción: "Descripción", "Concepto", "Movimiento", "Description", "Transaction"
   - Importe: "Importe", "Monto", "Cargo", "Abono", "Amount", "Debit", "Credit"
   - Fecha: "Fecha", "Date", "Fecha operación"
3. Añada una columna `tipo` para distinguir la procedencia de cada archivo (por ejemplo tarjeta de crédito vs. cuenta de servicios). **Pregúntame cómo se llaman mis archivos antes de asumir un patrón de nombre**: cada banco exporta con la convención que se le antoja, y una regla adivinada aquí contamina todo lo demás.
4. Limpie la descripción del comercio con una función `normalizar_merchant(desc)`:
   - Pasa a mayúsculas y quita espacios al inicio/final.
   - Elimina todo a partir de un doble espacio (suelen ser ciudad o número de tienda).
   - Elimina números de 3 o más dígitos y lo que sigue a un asterisco.
   - Trunca a 24 caracteres.
5. Valide que el importe sea numérico. Si una fila tiene importe vacío o no numérico, descártala y cuenta cuántas fueron.
6. Guarde un archivo `movimientos_limpios.json` con todas las filas limpias: fecha, descripcion_original, merchant_normalizado, importe, tipo.
7. Imprima un resumen: total de archivos leídos, total de filas, filas descartadas, rango de fechas y primeras 5 filas.

No asumas que los CSV tienen encoding UTF-8; prueba `utf-8` y `latin-1`. No inventes datos de ejemplo.

Pregúntame: ¿qué nombres de columnas tiene tu banco? ¿tus archivos incluyen tarjeta de crédito, débito o ambos?
