Tabla de Contenidos

Flujo de sincronización HTTP (paso a paso)

Propósito

Explicar el flujo real de sincronización HTTP en Machine y RutaPAE, incluyendo orden de pasos, condiciones de ejecución y cómo esto impacta la visualización de jornadas en ShiftSelectionScreen.

Flujo HTTP en Machine (''Client.runSyncInternal'')

1. Precondiciones

Antes de iniciar una sincronización completa:

  1. Se valida conectividad a internet.
  2. Se evita ejecución concurrente (syncRunning + runningSyncJob).
  3. Se reinician señales de progreso (SyncProgressDetailsEmitter.reset() y SyncProgressEmitter).
  4. Se asegura machineId remoto (Machine.ensureRemoteMachineId), registrando máquina si hace falta (POST /machines).

2. Orden de etapas (sincronización completa)

Dentro de runSyncInternal el orden es:

  1. SyncMachineEnrollment (bloqueante, primero).
  2. En paralelo:
    • SyncDeliveries (sin timeout por etapa interna).
    • SyncBeneficiaries (sin timeout dentro de este tramo paralelo).
  3. SyncDeliveryGoals (posterior al paralelo).
  4. SyncLogs como best-effort (opcional, no bloquea éxito global).

Si cualquiera de las etapas críticas falla, se corta la corrida y el progreso vuelve a Waiting.

3. Endpoints usados en cada etapa

Reglas de ejecución periódica (''ClientSyncService'')

ClientSyncService ejecuta ticks periódicos:

  1. Siempre corre health-check por intervalo (POST /health-checks).
  2. Solo permite sincronización completa si:
    • hay internet, y
    • no hay jornada activa (MachineEnrollmentService.getActive() == null).
  3. Si internet se recupera y no hay jornada activa, dispara sync inmediata.

Esto evita impactar la experiencia de operación durante una jornada abierta.

Filtrado de jornadas en ''ShiftSelectionScreen''

El detalle completo de cómo se construye y filtra la lista de jornadas visibles se documenta aparte en:

Resumen rápido:

  1. ShiftSelectionScreen refresca desde eventos locales de DB.
  2. OperationalShiftService agrupa y consolida jornadas locales en OperationalShift.
  3. MachineEnrollmentService deduplica y preserva consistencia de referencias.
  4. La UI pagina solo renderizado (chunk local), no paginación HTTP.

Flujo HTTP en RutaPAE (resumen)

RutaPAEDomain.network.request.SyncDeliveries ejecuta:

  1. Subida de datos:
    • POST /deliveries/data
  2. Subida de fotos:
    • POST /deliveries/photos
  3. Marcado local como sincronizada (no borra automáticamente por defecto en ese flujo).

Puede usar URL por entrega (delivery.url, delivery.photosUrl) o fallback al host por defecto.

Errores y recuperación relevantes

Fuentes de verdad

Ultima verificacion