Herramientas de usuario

Herramientas del sitio


ada:howto:sicoferp:factory:new-migracion-sicoferp:machine:flujos-clave:flujo-de-sincronizacion-http

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

  • SyncMachineEnrollment:
    • GET /machine-enrollments?page={p}&size={s}&machineId={id}&machine.id={id}
  • SyncBeneficiaries:
    • GET /beneficiaries-enrollments?…&campusOfferIds={ids}
    • GET /photos/{beneficiaryId}/beneficiary?nameFrom=machine
  • SyncDeliveries:
    • POST /deliveries/data
    • POST /deliveries/photos
  • SyncDeliveryGoals:
    • GET /minuta-menu-dues/delivery-goals?since={d}&until={d}&campusId={id}
  • SyncLogs:
    • POST /logs

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

  • Conflicto 208 en datos de entrega se trata como “ya existe” (no necesariamente fatal).
  • 404 en fotos puede ser inconsistencia eventual; se reintenta con backoff.
  • Pérdida de internet durante sync pausa/cancela etapa según contexto.
  • Si backend “pierde” la máquina (404/410 o patrón equivalente), se intenta recrear machineId remoto.

Fuentes de verdad

  • MachineDomain/src/main/java/co/ada/domain/network/Client.kt
  • MachineDomain/src/main/java/co/ada/domain/network/ClientSyncService.kt
  • MachineDomain/src/main/java/co/ada/domain/network/request/SyncMachineEnrollment.kt
  • MachineDomain/src/main/java/co/ada/domain/network/request/SyncBeneficiaries.kt
  • MachineDomain/src/main/java/co/ada/domain/network/request/SyncDeliveries.kt
  • MachineDomain/src/main/java/co/ada/domain/network/request/SyncDeliveryGoals.kt
  • MachineDomain/src/main/java/co/ada/domain/network/request/SyncLogs.kt
  • RutaPAEDomain/src/main/java/co/ada/rutapaedomain/network/request/SyncDeliveries.kt

Ultima verificacion

  • Fecha: 2026-04-23
  • Verificado contra implementación actual de sincronización HTTP y filtrado de jornadas en pantalla.
ada/howto/sicoferp/factory/new-migracion-sicoferp/machine/flujos-clave/flujo-de-sincronizacion-http.txt · Última modificación: 2026/05/07 20:07 por 192.168.175.130