Saltearse al contenido

Workflow — Registro de salida

Esta página se importa íntegra desde la fuente de verdad técnica: yms-docs/03-workflows-operativos/registro-salida.md — cualquier corrección debe hacerse allí.

Flujo de un vistazo

flowchart TB
  Start([Trailer va a salir]) --> OPEN[Abre Registro de salida]
  OPEN --> SHOW[App muestra sellos<br/>capturados al entrar]
  SHOW --> CAPT[Captura sellos al salir]
  CAPT --> COMP{¿Sellos<br/>coinciden?}
  COMP -- Sí --> PHOTO[Inspección 360° de salida<br/>4 fotos]
  COMP -- No --> ANOM[Crea anomalía<br/>SealMismatch · HIGH]
  ANOM --> PHOTO
  PHOTO --> DAMAGE{¿Daño<br/>visible?}
  DAMAGE -- Sí --> EXTRA[Fotos extra + descripción<br/>+ anomalía TrailerDamaged]
  DAMAGE -- No --> CONF[Confirma salida]
  EXTRA --> CONF
  CONF --> CLOSE[(Assignment<br/>cerrado · Released)]
  CLOSE --> GPS[Espera cruce de salida<br/>vía Samsara GPS]
  GPS --> DONE[Marcado GpsConfirmed]

  style ANOM fill:#dc3545,color:#fff
  style EXTRA fill:#dc3545,color:#fff
  style CLOSE fill:#28a745,color:#fff
  style DONE fill:#28a745,color:#fff
Flujo de salida con verificación de sellos

Documento ejecutivo de referencia

Versión: 1.0 (depuración post-cobertura) Última actualización: 13 de mayo de 2026 Reemplaza a: liberacion.md (versión 1.4). El concepto de “liberar slot” queda obsoleto; el registro de salida del trailer con verificación de sellos lo sustituye.

Este documento explica cómo el personal de patio registra la salida de un trailer del patio: el flujo cierra la asignación activa, captura los sellos al salir (con verificación contra los del entrar), y dispara la confirmación GPS posterior. Es la operación inversa al registro de entrada y ocurre con la misma frecuencia.


Conceptos fundamentales

¿Qué es un “registro de salida”?

Es el evento operativo que marca el fin de una Assignment activa: el trailer sale del yard, queda Released, y los sellos se verifican contra los del entrar.

Situaciones reales:

  • Un tracto llega, engancha al trailer y se lo lleva — el personal de patio registra la salida.
  • Un trailer queda dañado y se retira — el personal de patio registra salida con razón TrailerDamaged + foto.
  • El jefe de patio detecta error operativo — fuerza cierre administrativo del registro de entrada (Variante 3).

Reglas duras del sistema

  1. Solo se pueden cerrar Assignments en estado Confirmed. Una ya Released o ForceClosed no se puede cerrar de nuevo.
  2. Toda salida requiere razón documentada (estructurada, no texto libre).
  3. Sellos al salir se comparan con los del entrar. Si difieren → anomalía SealMismatch (High). Personal de patio debe confirmar la discrepancia (rotura, cambio, ausencia).
  4. Si la razón es TrailerDamaged, la foto es obligatoria.
  5. La salida es operación append-only. Genera MovementEvent tipo ExitRegistered que NO se puede editar.
  6. Salida normal: Operator+, YardManager+, Admin.
  7. Cierre forzado: solo YardManager+, Admin.

Las 3 variantes de registro de salida

Variante 1 — Salida normal por el personal de patio (caso típico, ~95%)

Contexto: el chofer del tracto engancha al trailer y lo retira. El personal de patio registra la salida.

Quién ejecuta: Operator (rol técnico — referido como “personal de patio”).

Flujo paso a paso:

T+0 Personal de patio identifica el trailer que sale (visualmente, o por aviso
del chofer del tractor).
T+1 yms-mobile → tab "Activos" o búsqueda → toca el Assignment del trailer.
O escanea QR de la hoja de salida que el chofer trae al retirarse
(si el TMS emitió hoja de retiro).
T+2 Pantalla "Registrar salida" muestra:
- Datos del trailer y entrada (Folio, fecha entrada, zona, sellos
capturados al entrar, fotos de inspección 360° del ingreso).
- Razón obligatoria (dropdown estructurado).
- Sellos al salir (1, 2, 3 — el personal de patio captura visualmente
lo que ve en el remolque ahora).
T+3 Razones disponibles:
- NormalDeparture (caso típico)
- TrailerDamaged
- ClientRequest
- InternalTransfer (cambio de yard)
- Other (texto libre obligatorio si se elige)
T+4 Sistema compara sellos al entrar vs al salir:
- Si coinciden → continuar.
- Si difieren → muestra alerta visual "Los sellos no coinciden con
los del entrar. ¿Por qué?" con opciones:
a) "Sellos rotos / cambiados" → confirma + genera anomalía
SealMismatch (High).
b) "Error de captura al entrar" → confirma + genera anomalía
SealMismatch (Medium, con nota).
c) "Cancelar y verificar" → vuelve a la pantalla anterior.
T+5 Inspección rápida 360° de salida (ADR-041):
Pantalla con 4 placeholders obligatorios (frente, atrás,
izquierdo, derecho).
El personal de patio toma cada foto desde la cámara del dispositivo.
Si detecta un daño nuevo (no presente en las fotos del ingreso),
agrega fotos extra con categoría DamageDetail + descripción y el
sistema genera anomalía ManualReport razón "Daño detectado al egreso".
Si la razón es TrailerDamaged, las fotos del daño son obligatorias.
T+6 [Confirmar]. Sistema:
- Marca Assignment como Released, con RazónDeSalida documentada.
- Crea MovementEvent (Type=ExitRegistered, Source=Manual o
ShipmentDocumentScan si escaneó documento de retiro).
- Marca TrailerSeals como Removed (con timestamp y RemovalPhotoId
si se tomó foto).
- Crea 4 Photo con Category InspectionFront/Back/Left/Right
asociadas al MovementEvent de salida.
- Si hubo DamageDetail: crea Anomaly + Photos asociadas.
- Si trailer.IsGpsCapable: el worker Samsara buscará posición
posterior fuera del geofence para marcar GpsConfirmedAt.
- Notifica vía SignalR al yard.
T+7 Pantalla confirmación: "Salida registrada — Trailer ABC-1234.
Tiempo en patio: 1 día 3 horas. 4 fotos."
T+8 (asíncrono) Si IsGpsCapable y no se detecta salida GPS en umbral
(sugerencia 15 min) → anomalía ManualEntryNeedsGpsConfirmation
(variante de salida, severidad Medium).
T+9 Si GPS reporta "trailer salió del yard" SIN registro manual
previo → anomalía UnexpectedManualGap (entrada/salida fantasma).

Excepción operativa: mismas reglas que en registro de entrada — saltar inspección 360° con razón EmergencyOperation genera InspectionSkipped (Medium). Configurable vía Settings: inspection.requirePhotosOnExit.

Comparación entrada vs salida: el YardManager puede consultar lado a lado las 4 fotos del ingreso y las 4 fotos del egreso desde el detalle del Assignment en yms-web. Útil para resolver reclamaciones y disputas con transportistas/aseguradoras (compliance LFPDPPP — fotos de daños retenidas 5 años, ADR-034).

Permisos: Operator+, YardManager+, Admin.


Variante 2 — Salida con QR de hoja de salida de retiro

Contexto: algunas operaciones generan una segunda hoja de salida al retirar el trailer (ej. cuando hay carga distinta a la del ingreso). Si la hay, el personal de patio escanea su QR para acelerar la captura.

Diferencias con Variante 1:

  • Paso T+1: escaneo QR primero.
  • Paso T+2: ShipmentDocument de salida se asocia al MovementEvent de ExitRegistered.
  • Resto idéntico.

Eventos generados: mismo + segundo ShipmentDocument enlazado al evento de salida.


Variante 3 — Cierre forzado por jefe de patio

Contexto: el YardManager detecta un Assignment que quedó “colgado” — el trailer ya no está en el patio pero nadie cerró el registro (ej. personal de patio olvidó, GPS reportó salida fantasma). Para limpiar, cierra el registro administrativamente.

Quién ejecuta: YardManager+, Admin.

Flujo:

T+0 YardManager abre detalle del Assignment (yms-web).
T+1 Click en "Forzar cierre". Modal de confirmación destructiva
(estilo GitHub — tipear folio para confirmar).
T+2 Razón obligatoria (dropdown):
- OperatorUnavailable (personal de patio no disponible para cerrar)
- WrongEntry (entrada mal capturada, no hubo trailer real)
- EmergencyOperation (operación de emergencia sin tiempo de registro)
- AdministrativeCorrection (corrección administrativa)
- GhostExit (GPS reportó salida pero no se registró manualmente)
- Other (texto libre obligatorio)
T+3 [Confirmar]. Sistema:
- Marca Assignment como ForceClosed.
- Crea MovementEvent (Type=ExitRegistered, Source=ManagerAction).
- Notifica al personal de patio que originalmente registró la entrada.
- Queda en AuditLog con razón + ejecutor.

Mitigaciones de abuso de poder: razón obligatoria, notificación al personal de patio original, confirmación destructiva, AuditLog inmutable (ver 00-vision-general/roles-permisos.md Riesgo 1).


Verificación de sellos — detalle

Al registrar la salida (Variantes 1 y 2), el sistema compara automáticamente:

Sello al entrarSello al salirResultado
VacíoVacíoOK
”ABC123""ABC123”OK
”ABC123""XYZ789”SealMismatch — personal de patio debe explicar
”ABC123”VacíoSealMismatch — sello faltante
Vacío”ABC123”SealMismatch — sello no registrado al entrar

La anomalía SealMismatch siempre se crea como High (compliance aduanal). El personal de patio puede agregar nota explicativa en el campo Description. El YardManager la resuelve con razón documentada.


Eventos auditados generados

EventoCuándo
MovementEvent tipo ExitRegisteredAl confirmar salida
Assignment.Released (auditoría implícita)Idem
Assignment.ForceClosedVariante 3 (cierre por YardManager)
TrailerSeal.Removed (uno por sello)Al confirmar salida
MovementEvent tipo GpsConfirmedExitCuando worker Samsara valida
Anomaly.SealMismatchCuando sellos al salir ≠ sellos al entrar
Anomaly.UnexpectedManualGapSi GPS reporta salida sin registro manual

Decisiones técnicas referenciadas

  • ADR-039 — GPS confirma, no genera.
  • ADR-040 — Sellos como entidad de primera clase.
  • Modelo de datos01-tecnico/propuesta-maestra.md §8.0.

Documentos relacionados

  • registro-entrada.md — flujo inverso, con captura inicial de sellos.
  • rondin.md — confirmación de zona durante la estadía.
  • anomalias.mdSealMismatch, UnexpectedManualGap, ManualEntryNeedsGpsConfirmation.
  • 00-vision-general/roles-permisos.md — permisos detallados.

Workflow de registro de salida — referencia operativa.