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¶
- ¿El log dice
Correo enviado? Si sí, es un tema del buzón/Office 365. - ¿
ERROR … No se pudo enviar? Tres intentos agotados: revisar credenciales SMTP y conectividad. - ¿
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(verjob.yaml).
Fuente: repositorio job-reporte-ventas-online, versión 926ecf2 (con cambios locales). Página generada con tools/publicar_docs.py.