Muestra las diferencias entre dos versiones de la página.
| — |
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. | ||