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.
Antes de iniciar una sincronización completa:
syncRunning + runningSyncJob).SyncProgressDetailsEmitter.reset() y SyncProgressEmitter).machineId remoto (Machine.ensureRemoteMachineId), registrando máquina si hace falta (POST /machines).
Dentro de runSyncInternal el orden es:
SyncMachineEnrollment (bloqueante, primero).SyncDeliveries (sin timeout por etapa interna).SyncBeneficiaries (sin timeout dentro de este tramo paralelo).SyncDeliveryGoals (posterior al paralelo).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.
SyncMachineEnrollment:GET /machine-enrollments?page={p}&size={s}&machineId={id}&machine.id={id}SyncBeneficiaries:GET /beneficiaries-enrollments?…&campusOfferIds={ids}GET /photos/{beneficiaryId}/beneficiary?nameFrom=machineSyncDeliveries:POST /deliveries/dataPOST /deliveries/photosSyncDeliveryGoals:GET /minuta-menu-dues/delivery-goals?since={d}&until={d}&campusId={id}SyncLogs:POST /logs
ClientSyncService ejecuta ticks periódicos:
POST /health-checks).MachineEnrollmentService.getActive() == null).Esto evita impactar la experiencia de operación durante una jornada abierta.
El detalle completo de cómo se construye y filtra la lista de jornadas visibles se documenta aparte en:
Resumen rápido:
ShiftSelectionScreen refresca desde eventos locales de DB.OperationalShiftService agrupa y consolida jornadas locales en OperationalShift.MachineEnrollmentService deduplica y preserva consistencia de referencias.
RutaPAEDomain.network.request.SyncDeliveries ejecuta:
POST /deliveries/dataPOST /deliveries/photos
Puede usar URL por entrega (delivery.url, delivery.photosUrl) o fallback al host por defecto.
208 en datos de entrega se trata como “ya existe” (no necesariamente fatal).404 en fotos puede ser inconsistencia eventual; se reintenta con backoff.machineId remoto.MachineDomain/src/main/java/co/ada/domain/network/Client.ktMachineDomain/src/main/java/co/ada/domain/network/ClientSyncService.ktMachineDomain/src/main/java/co/ada/domain/network/request/SyncMachineEnrollment.ktMachineDomain/src/main/java/co/ada/domain/network/request/SyncBeneficiaries.ktMachineDomain/src/main/java/co/ada/domain/network/request/SyncDeliveries.ktMachineDomain/src/main/java/co/ada/domain/network/request/SyncDeliveryGoals.ktMachineDomain/src/main/java/co/ada/domain/network/request/SyncLogs.ktRutaPAEDomain/src/main/java/co/ada/rutapaedomain/network/request/SyncDeliveries.kt2026-04-23