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¶
- Conecta Telegram, inicializa
intentos = 0, conecta SQL Server y obtienefecha_hoy. - Abre el navegador en
https://ccs.5b.com.gt/coparccsprod01-web/login/auth. - Ciclo de intentos (
while {intentos} < 2):- Espera hasta 10 s a que el botón Login sea clicable; el resultado queda en
res. - Si
reses verdadero: ejecuta el JS de login, entra a Reportes → TRX Posteadas, fija el rango ayer → hoy con JS y presiona Buscar. - Espera hasta 15 s a que aparezca la paginación de la tabla (
datatable_paginate); el resultado queda enres. - Si aparece: descarga el PDF y sale del ciclo (
break). - 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.
- Espera hasta 10 s a que el botón Login sea clicable; el resultado queda en
- Si
not {res} and {intentos} >= 2: envía "5B no está cargando" por Telegram y detiene el robot. - En un try/catch: mueve
CCS report-transactionPosting.pdfde la carpeta de descargas aC:\rpa\5By lo procesa con el parser. Si falla, guarda%rocketbot_last_status%enres_tryy lo envía por Telegram. - Por cada elemento de
datos(variable de iteraciónfila_datos), en un try/catch:- Normaliza la fila y llena las variables del SP.
- Espera 1 s y ejecuta el SP; el resultado queda en
res_sp. - 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%) yres_sp.
- Mueve el PDF a
C:\rpa\5B\Procesados\{fecha_hoy}.pdfy 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
FlateDecodey usa los CMapsToUnicodede 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_cuentatrae 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\"
- Abrir el portal manualmente y verificar si responde.
- Verificar si cambió la pantalla de login (selectores de la sección 9).
- Volver a ejecutar la tarea
RB_Consultas5Bcuando el portal esté disponible.
Llegó error al mover o leer el archivo
- Revisar si el PDF está en
C:\Users\robots_IT\Downloads\. - 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\"
- Revisar el log de Rocketbot para identificar la fila.
- 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 |