Saltar a contenido

RUNBOOK — jobs de reporte de venta (L01, L02, L13)

Dato Valor
Programación L01: 13:32, 15:32, 17:32, 19:32, 21:32 y 23:42 · L02: 13:37 … 21:37 y 23:47 · L13: 07:58. Todos los días (ver job.yaml)
Duración esperada A medir (propuesto: < 5 min). Timeout propuesto: 20 min
Comando .venv/bin/python -m reporte_ventas_online <job> con <job> = venta-online-excel (L01), venta-online-retailtrans (L02), retail-dia-anterior (L13)
Efecto Lectura de BD + envía correo a la lista del job. L02 y L13 además escriben una fila en ods.tbl_control_procesos
Salidas /var/lib/dabra/<job>/output/reporte.{html,pdf,xlsx}
Temporales .../tmp/<fecha_hora>/ (se borra al enviar; se conserva si hubo fallo)
Logs /var/log/dabra/<job>/<fecha_hora>.log

Códigos de salida

Código Significado Acción
0 Reporte generado y enviado —
1 Falló lectura de datos, sin filas online, PDF o envío de correo (L02/L13 auditan ERROR) Ver log; reejecutar
2 Configuración faltante/ inválida Revisar .env

Ejecución manual

python -m reporte_ventas_online <job> --dry-run   # no envía ni audita
python -m reporte_ventas_online <job> --prueba    # solo a soporte BI
python -m reporte_ventas_online <job>             # envío real

⚠️ El envío real llega a toda la lista de destinatarios del job (6 a 16 personas según el job). Probar primero con --prueba.

Reproceso e idempotencia

Reejecutar es seguro: regenera todo desde la base. Cada ejecución real envía un correo nuevo (y, en L02/L13, una fila nueva de auditoría), así que reejecutar fuera de horario genera un correo adicional.

Si no llegó el correo

  1. ¿El log dice Correo enviado? Si sí, es un tema del buzón/Office 365.
  2. ¿ERROR … No se pudo enviar? Tres intentos agotados: revisar credenciales SMTP y conectividad.
  3. ¿La consulta de venta online (BYOD) no devolvio filas? Revisar la carga de BYOD; el job no envía reportes vacíos.

Rollback

No aplica (solo lectura de BD). El último reporte válido sigue en output/.

Problemas conocidos

  • L01 no registra en ods.tbl_control_procesos (su script tampoco lo hacía); L02 y L13 sí.
  • Los minutos de L01 (:32) y L02 (:37) difieren sin motivo documentado; la ficha 27 de L02 indica :47.
  • L13: el cron nombra un archivo inexistente; se migró ..._RetailTran_del_dia_anterior_.py (ver job.yaml).

Fuente: repositorio job-reporte-ventas-online, versión 926ecf2 (con cambios locales). Página generada con tools/publicar_docs.py.