Saltar a contenido

job-envio-nike

Envia a Nike, por SFTP, las ventas y el stock del dia anterior (un TXT por sucursal y consulta), deja un zip de backup y registra el resumen por sucursal. Catalogo: W12.

Uso

pip install -e .[dev]
cp .env.example .env   # completar
python -m envio_nike --dry-run            # ejecuta los SP y deja los TXT en output/, sin SFTP
python -m envio_nike                      # ayer
python -m envio_nike --desde 2026-10-07   # reproceso de un dia (--fecha es alias)
python -m envio_nike --desde 2026-10-01 --hasta 2026-10-07   # rango (un envio por dia)

Codigos de salida: 0 ok | 1 fallo o "ya hay otra ejecucion" | 2 configuracion/uso. (El original: 0 ok, 1 lock, 2 error de proceso.)

Que hace (por cada dia)

  1. exec ods.venta_nike_v3 @fechaproceso y exec ods.stock_nike_v2 @fechaproceso (valida que traigan las columnas usadas, incluida SUC_DABRA).
  2. Escribe output/<aaaammdd>/{ventas,stock}_nike_<sucursal>_<dd_mm_aaaa>.txt (sin cabecera, ;, texto entre comillas, sin la columna SUC_DABRA, CRLF).
  3. Sube esos archivos por SFTP a /home/<usuario>/OUT: primero <archivo>.tmp y luego rename; con NIKE_SFTP_OVERWRITE=true reemplaza lo ya entregado. Reintenta hasta 3 veces (10 s y 20 s) solo ante timeout.
  4. Solo si el envio salio bien, y de forma independiente: (a) backup: un zip por consulta en NIKE_BACKUP_DIR (o archive/<aaaammdd>/) y borra los TXT; (b) resumen por sucursal en ods.tbl_Info_Nike_New con Marca='NI' (borra y reinserta ese dia y marca).
  5. Una fila en ods.tbl_control_procesos (ID08 - PY_ENVIA_EXTERNO_TXT_NIKE_DIARIA, Success/Error) al terminar todos los dias, y un resumen Fechas con error: <fecha> (<etapa>) en el log.

Nunca corren dos instancias a la vez (flock en state/, se libera solo si el proceso muere).

Verificacion

pytest && python -m ruff check . && python tools/verify_equivalence.py <ruta>/code/activo/PY_ENVIA_EXTERNO_TXT_NIKE_DIARIA --mutaciones

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