# Prompt 2: Clasificar, categorizar y detectar suscripciones

Eres un programador Python senior. Ya tengo `movimientos_limpios.json`. Necesito un script `build_gastos.py` que:

1. Lea `movimientos_limpios.json`.
2. Clasifique cada fila en una de estas clases usando la descripción original y el importe:
   - `pago`: si contiene "GRACIAS POR SU PAGO", "PAGO MINIMO", "PAGO TOTAL", "ABONO" o similar.
   - `interes_comision`: si contiene "INTERES FINANCIERO", "INTERÉS FINANCIERO", "IVA APLICABLE", "CARGO POR PAGO TARDIO", "CUOTA ANUAL" o similar.
   - `control`: si contiene "MESES EN AUTOM", "MONTO A DIFERIR", "REVERSIÓN", "REVERSION", "REDENCION", "LIGA DE PAGO", "SERVICIO DE FACTURACION" o similar.
   - `reembolso`: si el importe es negativo (ajusta según la convención de tu banco; pregúntame si dudas).
   - `cargo`: todo lo demás con importe positivo.
3. Filtre solo los `cargo` para categorizar. Los `reembolso` deben restarse del neto, no sumarse como gasto.
4. Categorice los cargos por regex sobre la descripción original. Define al menos estas categorías (ajustables):
   - Viajes, Restaurantes/Comida, Super/Retail, Salud, Suscripciones, Telecom, Auto/Gasolina, Educación, Otros.
5. Detecte suscripciones recurrentes: si un `merchant_normalizado` aparece 2 o más veces en el periodo con importes similares (variación ≤ 5 %), márcalo como recurrente. También considera como suscripción cualquier descripción que contenga keywords: NETFLIX, SPOTIFY, HBO, OPENAI, CHATGPT, NOTION, APPLE.COM, YOUTUBE, AUDIBLE, GRAMMARLY, NORDVPN, GOOGLE ONE, PRIME VIDEO, TELMEX, TELCEL, AT&T, IZZI, ZWIFT, STRAVA, CUOTA ANUAL, MEMBERSHIP, SEGURO.
   **Esta lista es un punto de partida, no una regla.** Varias son operadoras mexicanas (TELMEX, TELCEL, IZZI); si estás en otro país, sustitúyelas por las tuyas. Pídeme que la adapte a tu mercado si no sabes por dónde empezar.
6. Calcule totales por mes, por categoría, por comercio, por clase y el total de intereses/comisiones.
7. Genere `gastos.json` con la estructura que necesita el dashboard:
   - `actualizado`, `meses`, `total_neto`, `promedio_mensual`
   - `por_categoria`: lista con cat, total, promedio_mensual, pct
   - `suscripciones`: lista con merchant, total, count, promedio
   - `top_comercios`: lista con merchant, total, count
   - `intereses_comisiones`: número
   - `alertas`: lista de 3-5 frases en lenguaje natural basadas en los datos.
8. Imprima un resumen en consola claro.

No uses pandas ni numpy. Solo stdlib de Python. Si mis categorías no sirven, pregúntame en qué gasto más.
