Saltar a contenido

Autor: Adalberto González

Fecha creacion: 2026-06-03
Estado: desarrollo

Worker: historico.worker

Ubicación: src/app/views/logistica/guias-devoluciones/workers/historico.worker.ts
Tipo: Web Worker


¿Qué hace?

Este servicio se encarga de obtener el historial completo de devoluciones. Para hacerlo, consulta automáticamente todas las páginas de información disponibles en el servidor y va entregando los registros a medida que los recibe, sin esperar a que termine de descargar todo el histórico.


Mensaje de entrada (HistoricoWorkerConfig)

Campo Tipo Descripción
apiUrl string URL base del API Gateway
token string JWT del usuario en sessionStorage
headersecurity string Header de seguridad requerido por el backend
estados string[] Estados a consultar, ej: ['Devolución ratificada']
tiendaParam string Tiendas asignadas al usuario para filtrar. Vacío = todas
mesesYaCargados string[] Prefijos YYYY-MM ya en memoria — el worker los salta para no duplicar

Mensaje de salida (WorkerBatchMessage)

Se emite N veces — una por cada lote procesado, más un mensaje final con done: true.

Campo Tipo Descripción
rows DevolucionRow[] Registros del lote. Array vacío en el mensaje final.
done boolean true solo en el último mensaje — señal de finalización
error string? Presente si un lote individual falló (el worker continúa con el siguiente)

Flujo

postMessage(HistoricoWorkerConfig)
  → inicializar ZSTDDecoder
  → para cada estado en estados[]:
      → buildUrl(apiUrl, estado, tiendaParam)
      → fetchPagina(url, página 1)          ← HTTP GET con headers de auth
          → descomprimirLote(Resultado, skipPrefixes)
              → base64ToUint8Array()         ← worker-utils
              → decoder.decode()             ← ZSTDDecoder
              → parsearYFiltrar(skipPrefixes) ← worker-utils
          → emitirLote(rows, done: false)    → postMessage al componente
      → para páginas 2..N en lotes de CONCURRENT_PAGES=2:
          → Promise.all(fetchPagina x2)
          → descomprimirLote por cada página
          → emitirLote(rows, done: false)
  → emitirLote([], done: true)              ← señal final

Ciclo de vida

El componente lanza 2 instancias de este worker en paralelo: - Worker 1: estados ['Devolución ratificada'] - Worker 2: estados ['Devolucion Completada', 'Devolución completada']

El componente cuenta cuántos workers emiten done: true. Cuando los 2 terminan, activa historicoListo = true y detiene la animación de carga. Cada worker se termina con worker.terminate() al recibir done: true.


Endpoints que consume

Método Ruta Descripción
GET {apiUrl}metodoGenerico?coleccion=PedidosInter&Estado={estado}&Tienda={tienda}&mcomp=2&page={n} Obtiene página N de devoluciones comprimidas con ZSTD

Historial de cambios

Fecha Autor Cambio
2026-06-03 Adalberto González Se creo el worker

Observaciones

  • CONCURRENT_PAGES = 2 — se descargan 2 páginas en paralelo por estado para no saturar el backend. Ajustar con cuidado.
  • Si una página individual falla, el error se loguea pero el worker continúa con las demás páginas — no aborta todo el histórico.