Saltar a contenido

job-envio-onebeat

Jobs que intercambian archivos con Onebeat por SFTP. Este repo es el piloto 1 de la estructura estándar (ver estructura_carpeta_job.md).

Estado de migración

Job Catálogo Estado
onebeat_limpieza_sftp L12 ✅ Migrado (piloto)
onebeat_mtsskus L06 ✅ Migrado (versión base, ver nota _14)
onebeat_catalogo_atributos L08 ✅ Migrado (versión base)
onebeat_transactions L09 ✅ Migrado (versión base)
onebeat_stocklocations L10 ✅ Migrado (versión base)
onebeat_status L07 ✅ Migrado (Status.py, versión base; ver variantes en AGENTS.md)
onebeat_given_target L11 ✅ Migrado (lógica propia: SharePoint → CSV → SFTP; ficha 00:00 vs inventario 02:00 pendiente)

¿Qué hacen los envíos (L06, L07, L08, L09, L10)?

Cada madrugada (02:30 a 02:42) preparan los datos de Onebeat en la base de Athenas (ejecutan un procedimiento almacenado), exportan la vista resultante a un CSV (;, UTF-8) y lo suben al SFTP de Onebeat. Después envían un correo de aviso a soporte BI con el resultado (Success, No data o Failed) y dejan una fila en la tabla de control de procesos. Si la vista no tiene datos, no se sube nada y el aviso lo dice.

Job Subcomando Procedimiento / vista Hora
L08 onebeat_catalogo_atributos catalogo-atributos sp_tbl_OneBeat_Catalogo_Atributos 02:30
L10 onebeat_stocklocations stocklocations sp_tbl_OneBeat_StockLocations 02:36
L06 onebeat_mtsskus mtsskus sp_tbl_OneBeat_MTSSKUs 02:38
L09 onebeat_transactions transactions sp_tbl_OneBeat_Transactions 02:42
L07 onebeat_status status sp_tbl_OneBeat_STATUS 02:51

Si falla un envío

  1. Llegará un correo “ONEBEAT - Failed - …” y el panel mostrará EXIT_NONZERO.
  2. Si el fallo fue al subir al SFTP, el CSV queda en output/ y se puede reenviar reejecutando el job (es seguro: el archivo del día se reemplaza).
  3. Detalle en RUNBOOK.md.

¿Qué hace onebeat_given_target (L11)?

Cada madrugada descarga el Excel OneBeat/GivenTarget.xlsx del SharePoint de Dabratec (sitio DABRATECBI, vía Microsoft Graph), lo convierte a CSV (GivenTarget_<fecha>.csv, ;, UTF-8; las columnas Stock Location Name y Referencias como enteros) y lo sube al SFTP de Onebeat. Siempre envía un correo a soporte BI: éxito, “el Excel no tiene registros” (no se sube nada) o cancelación. Deja una fila en la tabla de control (Success / No Data / Failed). Si el Excel no está o SharePoint no responde, el job falla (exit 1), lo audita y avisa. Subcomando: given-target.

¿Qué hace onebeat_limpieza_sftp?

Cada día 1 de mes a las 23:00 borra del SFTP de Onebeat (carpeta de archivos enviados) los archivos con más de 30 días, para que la carpeta no crezca sin límite. No toca carpetas. Al terminar deja una fila en la tabla de control de procesos.

¿Qué hacer si falla?

  1. Mirar la alerta del panel (EXIT_NONZERO) y abrir el log de esa ejecución desde el panel.
  2. Un fallo suele ser de conexión (SFTP caído o clave cambiada). No hay pérdida de datos: no borra nada si no logra conectarse.
  3. Pasos detallados y cómo reejecutar: ver RUNBOOK.md.

Para desarrolladores

python3.11 -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"
cp .env.example .env && chmod 600 .env     # completar valores
pytest && ruff check .
python -m envio_onebeat limpieza-sftp --dry-run
# envíos: catalogo-atributos | mtsskus | transactions | stocklocations | status
# SharePoint → SFTP: given-target (requiere GRAPH_* en .env)
python -m envio_onebeat catalogo-atributos --dry-run   # lee la vista, NO ejecuta el SP ni sube ni audita

Comparación con los scripts originales (no modifica la carpeta legacy):

python tools/verify_equivalence.py <ruta>/code/activo/Onebeat/PY      # L06-L10
python tools/verify_given_target.py <ruta>/code/activo/Onebeat/PY     # L11

Datos y logs no viven en este repo (ver estructura_carpeta_job.md, sección 4).


Fuente: repositorio job-envio-onebeat, versión 412eb90 (con cambios locales). Página generada con tools/publicar_docs.py.