Saltar a contenido

SDD — Consultas5B

Ficha técnica

Campo Valor
ID consultas5b
Plataforma Rocketbot (robot Consulta5b)
Archivo desplegado Consultas5B.db
Disparo Tarea programada RB_Consultas5B
Frecuencia 1 vez al día a las 00:30
Módulos de Rocketbot Telegram 1.0.2, SQLServer_ 6.10.12
Proceso de negocio PDD

1. Arquitectura general

flowchart LR
    T[Tarea programada RB_Consultas5B] --> R[Robot Rocketbot]
    R -->|login + filtros por JS| P[Portal CCS 5B]
    P -->|PDF TRX Posteadas| D["C:\rpa\5B"]
    D -->|parser Python| R
    R -->|sp_InsertarTRXposteadas| S[("SQL Server GDA_COPAR_PROD")]
    R -->|errores| TG[Telegram]

2. Componentes

Paso Tipo Responsabilidad
Conexión Telegram Módulo Telegram Conecta con {token}
Conexión BD Módulo SQLServer_ Sesión Con2 a 10.10.6.33, base GDA_COPAR_PROD, ODBC Driver 17
Fecha del día Python Guarda fecha_hoy para nombrar el archivo
Login JS Llena usuario y contraseña y envía el formulario
Rango de fechas JS Fija ayer → hoy en el daterangepicker
Lectura del PDF Python (solo librería estándar) Extrae la tabla del reporte a la lista datos
Normalización de fila Python Convierte fechas a ISO y monto a número
Registro Módulo SQLServer_ Ejecuta dbo.sp_InsertarTRXposteadas por fila

3. Flujo detallado

  1. Conecta Telegram, inicializa intentos = 0, conecta SQL Server y obtiene fecha_hoy.
  2. Abre el navegador en https://ccs.5b.com.gt/coparccsprod01-web/login/auth.
  3. Ciclo de intentos (while {intentos} < 2):
    1. Espera hasta 10 s a que el botón Login sea clicable; el resultado queda en res.
    2. Si res es verdadero: ejecuta el JS de login, entra a Reportes → TRX Posteadas, fija el rango ayer → hoy con JS y presiona Buscar.
    3. Espera hasta 15 s a que aparezca la paginación de la tabla (datatable_paginate); el resultado queda en res.
    4. Si aparece: descarga el PDF y sale del ciclo (break).
    5. Si cualquiera de las esperas falla: intentos + 1, cierra el navegador y lo vuelve a abrir en la página de login para el siguiente intento.
  4. Si not {res} and {intentos} >= 2: envía "5B no está cargando" por Telegram y detiene el robot.
  5. En un try/catch: mueve CCS report-transactionPosting.pdf de la carpeta de descargas a C:\rpa\5B y lo procesa con el parser. Si falla, guarda %rocketbot_last_status% en res_try y lo envía por Telegram.
  6. Por cada elemento de datos (variable de iteración fila_datos), en un try/catch:
    1. Normaliza la fila y llena las variables del SP.
    2. Espera 1 s y ejecuta el SP; el resultado queda en res_sp.
    3. Si falla, envía por Telegram "Fallo con la ejecución del SP o script" con res_bd, el estado de Rocketbot (%rocketbot_last_status%) y res_sp.
  7. Mueve el PDF a C:\rpa\5B\Procesados\{fecha_hoy}.pdf y cierra el navegador.

Parser del PDF

El reporte se lee sin librerías externas, con un lector de PDF propio:

  • Recorre los objetos del PDF, descomprime streams FlateDecode y usa los CMaps ToUnicode de cada fuente para decodificar el texto.
  • Ubica cada texto en la página y usa los rectángulos de las celdas para saber a qué columna pertenece.
  • Detecta el inicio de la tabla por el encabezado normalizado (sin tildes ni mayúsculas).
  • Una fila nueva empieza cuando la columna numero_cuenta trae solo dígitos (columna ancla). Las líneas siguientes sin cuenta se agregan a la misma fila, lo que cubre celdas en varias líneas y filas que continúan en la página siguiente.
  • Ignora texto suelto que aparezca más de 30 puntos debajo de la última fila.

Columnas esperadas, en orden: usuario, número de cuenta, traza, fecha publicación, fecha de transacción, tipo txn, modo, autorización débito o número cheque, monto, moneda.

4. Sistemas y dependencias

Sistema Uso Acceso Notas
Portal CCS de 5B Reporte TRX Posteadas Web Formulario de login en /login/authenticate; filtros con daterangepicker de jQuery
SQL Server Registro de transacciones Módulo SQLServer_ 10.10.6.33, GDA_COPAR_PROD, dbo.sp_InsertarTRXposteadas
Telegram Avisos de error Módulo Telegram

5. Credenciales y configuración

Todas las credenciales están como variables cifradas de Rocketbot.

Variable Uso
user_web, password_web Acceso al portal de 5B
user_bd, password_db Acceso a SQL Server
token, chat_id Bot y chat de Telegram

6. Estados y datos persistentes

Ruta Contenido
C:\Users\robots_IT\Downloads\ Descarga temporal del PDF
C:\rpa\5B\ PDF en proceso
C:\rpa\5B\Procesados\ PDF archivado como <fecha>.pdf

7. Manejo de errores y reintentos

Tipo Ejemplo Comportamiento
Infraestructura El portal no carga o no responde Hasta 2 intentos, cada uno con el navegador reabierto; luego aviso por Telegram y fin
Aplicación PDF no encontrado o ilegible Aviso por Telegram con el estado de Rocketbot
Aplicación Error en el SP o en la normalización de una fila Aviso por Telegram y continúa con la siguiente fila

8. Monitoreo y notificaciones

  • Telegram para las tres excepciones anteriores.
  • Log de Rocketbot en la ruta base del robot.
  • Registro de errores en orquestador

9. Restricciones conocidas y trampas

Ruta de descargas fija

El PDF se toma de C:\Users\robots_IT\Downloads\. Si el robot corre con otro usuario de Windows o cambia la carpeta de descargas del navegador, el paso de mover el archivo falla.

Nombre del archivo archivado

Se archiva como {fecha_hoy}.pdf. Dos ejecuciones el mismo día chocan en el nombre.

Ámbito de exec() en Rocketbot

El parser termina con globals().update(locals()) para que sus funciones se vean entre sí. No eliminar esa línea.

Selectores

El login usa los IDs username y password y el botón button.btn-auth; los filtros usan startDate, endDate y reportrange. Un cambio en el portal de 5B afecta estos puntos.

10. Operación (runbook)

Llegó \"5B no está cargando\"
  1. Abrir el portal manualmente y verificar si responde.
  2. Verificar si cambió la pantalla de login (selectores de la sección 9).
  3. Volver a ejecutar la tarea RB_Consultas5B cuando el portal esté disponible.
Llegó error al mover o leer el archivo
  1. Revisar si el PDF está en C:\Users\robots_IT\Downloads\.
  2. Si el PDF existe pero no se pudo leer, revisar si cambió el formato del reporte (encabezados de la sección 3).
Llegó \"Fallo con la ejecución del SP o script\"
  1. Revisar el log de Rocketbot para identificar la fila.
  2. El mensaje incluye el estado de Rocketbot y la respuesta del SP (res_sp).
Volver a cargar un día

[completar: cómo cambiar el rango de fechas y si el SP tolera reprocesar]

11. Historial de cambios

Reconstruido a partir de las versiones guardadas en Consultas5B.db.

Fecha Cambio
2026-09-18 Navegación al portal, filtros de fecha por JS y descarga
2026-09-24 Esperas de objetos, validaciones y conexión a SQL Server
2026-09-25 Parser del PDF e inserción por SP
2026-09-28 Avisos por Telegram, try/catch y ciclo de reintentos. Puesta en producción
2026-10-06 Se quitan alertas de depuración
2026-10-06 Reintentos reales: intentos inicia en 0, el navegador se reabre en cada intento y la alerta usa >= 2. El aviso por fila incluye el estado de Rocketbot y res_sp