Herramientas de usuario

Herramientas del sitio


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

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

ada:howto:sicoferp:factory:new-migracion-sicoferp:machine:flujos-clave:flujo-de-sincronizacion-http [2026/05/07 20:07] (actual)
192.168.175.130 creado
Línea 1: Línea 1:
 +====== 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:
 +
 +  - Se valida conectividad a internet.
 +  - Se evita ejecución concurrente (''​syncRunning''​ + ''​runningSyncJob''​).
 +  - Se reinician señales de progreso (''​SyncProgressDetailsEmitter.reset()''​ y ''​SyncProgressEmitter''​).
 +  - 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:
 +
 +  - ''​SyncMachineEnrollment''​ (bloqueante,​ primero).
 +  - En paralelo:
 +    * ''​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''​.
 +
 +==== 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:​
 +
 +  - Siempre corre health-check por intervalo (''​POST /​health-checks''​).
 +  - Solo permite sincronización completa si:
 +    * hay internet, y
 +    * **no** hay jornada activa (''​MachineEnrollmentService.getActive() == null''​).
 +  - 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:
 +
 +  * [[ada:​howto:​sicoferp:​factory:​new-migracion-sicoferp:​machine:​filtrado-de-jornadas-en-shift-selection|Filtrado De Jornadas En Shift Selection]]
 +
 +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.
 +  - La UI pagina solo renderizado (chunk local), no paginación HTTP.
 +
 +===== Flujo HTTP en RutaPAE (resumen) =====
 +
 +''​RutaPAEDomain.network.request.SyncDeliveries''​ ejecuta:
 +
 +  - Subida de datos:
 +    * ''​POST /​deliveries/​data''​
 +  - Subida de fotos:
 +    * ''​POST /​deliveries/​photos''​
 +  - 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