Analiza los movimientos REVISAR del cuadre bancario, agrupa por patron, diagnostica causas y genera plan de accion priorizado.
Analiza un Excel de cuadre para agrupar, diagnosticar y priorizar los movimientos marcados como REVISAR.
Si $ARGUMENTS contiene una ruta, usar ese archivo. Si no, buscar el mas reciente en outputs/:
ls -t "C:/_ARCHIVOS/TRABAJO/Facturas/gestion-facturas/outputs/Cuadre_*.xlsx" | head -1
Verificar que el archivo existe antes de continuar.
Ejecutar un script Python que:
import pandas as pd
from pathlib import Path
from collections import Counter
import re
archivo = "RUTA_DEL_ARCHIVO"
# Leer todas las hojas de movimientos (no Facturas)
xlsx = pd.ExcelFile(archivo)
hojas_mov = [h for h in xlsx.sheet_names if h.lower() != 'facturas']
# Cargar facturas para diagnostico
df_fact = pd.read_excel(archivo, sheet_name='Facturas')
# Cargar MAESTRO para verificar aliases
maestro_path = Path(r"C:\_ARCHIVOS\TRABAJO\Facturas\gestion-facturas\datos\MAESTRO_PROVEEDORES.xlsx")
Para cada hoja de movimientos:
Categoria_Tipo == "REVISAR"COMPRA TARJ. 5540XXXXXXXX1019 PANIFIESTO LAVAPIES-MADRID -> PANIFIESTO LAVAPIESTRANSFERENCIA A VINOS DE ARGANZA -> VINOS DE ARGANZAADEUDO RECIBO CERES CERVEZA S L -> CERES CERVEZA S LTELEFONOS YOIGO YC250014247872 -> YOIGOELECTRICIDAD ENERGIA COLECTIVA, S.L. -> ENERGIA COLECTIVALogica de extraccion:
def extraer_nombre(concepto):
c = str(concepto).upper().strip()
if c.startswith("COMPRA TARJ") or c.startswith("ANUL COMPRA TARJ"):
# Posicion 30+ hasta el guion
try:
nombre = c[30:].split("-")[0].strip()
if len(nombre) > 2:
return nombre
except:
pass
elif c.startswith("TRANSFERENCIA A "):
return c.replace("TRANSFERENCIA A ", "").strip()
elif c.startswith("ADEUDO RECIBO "):
return c.replace("ADEUDO RECIBO ", "").strip()
elif "YOIGO" in c:
return "YOIGO"
elif c.startswith("ELECTRICIDAD "):
return c.replace("ELECTRICIDAD ", "").split(",")[0].strip()
return c[:50]
Agrupar y contar por nombre extraido.
Para cada grupo de REVISAR (ordenado por frecuencia descendente):
a) Verificar si el proveedor existe en MAESTRO:
b) Si existe en MAESTRO, verificar facturas:
c) Categorizar irresolubles:
Ordenar las acciones por impacto (numero de REVISAR que resolverian):
ACCION 1: [tipo] [detalle] -> -XX REVISAR
ACCION 2: [tipo] [detalle] -> -XX REVISAR
...
Tipos de accion:
Formato de salida (pantalla):
ANALISIS REVISAR - [nombre_archivo]
======================================
Fecha: [hoy]
Total movimientos: XXXX | Clasificados: XXXX | REVISAR: XXX
POR HOJA:
Tasca: XXX REVISAR de XXXX movimientos
Comestibles: XXX REVISAR de XXXX movimientos
TOP 15 PATRONES REVISAR (por frecuencia):
1. NOMBRE_COMERCIO XX mov [causa resumida]
2. NOMBRE_COMERCIO XX mov [causa resumida]
...
DIAGNOSTICO DETALLADO:
NOMBRE_COMERCIO (XX mov):
Causa: [explicacion]
Solucion: [accion concreta]
Impacto: -XX REVISAR
PLAN DE ACCION (mayor impacto primero):
1. [accion] -> -XX REVISAR
2. [accion] -> -XX REVISAR
...
Total potencial: -XXX REVISAR (XXX -> XXX)
IRRESOLUBLES (XXX mov):
Operaciones bancarias: XX mov
Notas manuales previas: XX mov
Ingresos especiales: XX mov
Sin factura conocida: XX mov
Guardar el mismo contenido en:
outputs/revisar_YYYYMMDD.txt
Al final, informar al usuario:
Informe guardado en outputs/revisar_YYYYMMDD.txt
¿Quieres que ejecute alguna accion? (ej: "haz la accion 2")
datos/MAESTRO_PROVEEDORES.xlsx (gitignored, solo local)