Workflow — Modo caseta
Esta página se importa íntegra desde la fuente de verdad técnica:
yms-docs/03-workflows-operativos/modo-caseta.md— cualquier corrección debe hacerse allí.
Documento ejecutivo de referencia
Versión: 1.5 (depuración post-cobertura) Última actualización: 13 de mayo de 2026 Cambios desde versión anterior: ADRs 038-040. El “Modo Caseta” se refuerza como punto de captura primario del flujo: el personal de caseta escanea el QR de la hoja de salida y registra entradas/salidas directamente desde yms-web. Las acciones que decían “asignar slot” se reemplazan por “registrar entrada en zona”. El detalle del flujo de captura vive ahora en registro-entrada.md y registro-salida.md; este documento se enfoca en la vista especializada y las alertas operativas.
Este documento explica cómo opera el personal de caseta de vigilancia dentro del sistema YMS. La caseta es el primer punto de control físico del patio: ve trailers entrando y saliendo, escanea el QR de la hoja de salida para registrar entradas/salidas, y detecta salidas no autorizadas. El “Modo Caseta” es una vista especializada de yms-web optimizada para esta operación.
¿Qué es el Modo Caseta?
El Modo Caseta es una vista de yms-web específicamente diseñada para personal de vigilancia ubicado en la caseta P1 del patio (única caseta operativa de Dulces Nombres). Se diferencia del tablero del personal de patio o del dashboard del jefe de patio en que:
- Información dispuesta para vigilancia: trailers próximos, ingresos recientes, salidas con/sin registro manual.
- Actualizaciones en tiempo real: vía SignalR cuando hay movimiento detectado.
- Botones grandes y acciones simples: optimizada para operación rápida sin obstrucción.
- Alertas visuales prominentes: salidas sin registrar se ven inmediatamente.
Quién la usa: Personal de caseta (rol técnico Operator con permiso de yard, accediendo a la vista específica).
Apps: yms-web exclusivamente (computadora fija en la caseta).
Conceptos fundamentales
Reglas duras del sistema
- El personal de caseta tiene rol
Operatoren el yard. Comparte la matriz de permisos del Operator regular. - El “Modo Caseta” NO es un rol distinto, es una vista UI. Cualquier
Operator+puede activarla. - La detección de aproximación es vía GPS Samsara (no requiere acción del personal).
- La detección de salida sin registrar es automática (alerta visual prominente).
- El registro de visitantes desde caseta crea
TrailerconOwnership = Visitor(ver workflow de visitantes).
Por qué existe esta vista especializada
Sin Modo Caseta, el personal de caseta tendría que usar la misma vista que un integrante del personal de patio (orientada a tareas pendientes y asignación). Esto sería:
- Confuso: la vista del personal de patio asume movilidad y QR scanning.
- Lento: registrar visitante requiere navegar muchos menús.
- Inseguro: no destacaría salidas no autorizadas.
El Modo Caseta resuelve estos problemas con UI dedicada.
Las 4 funciones principales del Modo Caseta
Función 1 — Vigilancia de trailers aproximándose al yard
Qué muestra: lista de trailers cuya posición GPS está cerca del polígono del yard pero aún fuera de él. Útil para anticipar llegadas.
Cómo funciona:
Sistema busca trailers cuya última posición GPS:- Está fuera del polígono del yard.- Está dentro de un radio de N metros del centroide del yard (configurable, default 500m).- Tiene timestamp reciente (últimos 5 minutos).
Lista ordenada por distancia ascendente.Actualización cada 30 segundos vía SignalR.Vista típica:
┌─────────────────────────────────────────────────────┐│ 🟢 APROXIMÁNDOSE AL YARD (3 trailers) │├─────────────────────────────────────────────────────┤│ ABC-1234 ── 250m al norte ── ETA ~2 min ││ XYZ-5678 ── 380m al sur ── ETA ~3 min ││ DEF-9876 ── 480m al este ── ETA ~5 min │└─────────────────────────────────────────────────────┘Acción del personal de caseta: anticipar llegada, preparar documentación si necesario.
Función 2 — Confirmación de ingresos recientes
Qué muestra: trailers que cruzaron la geocerca del patio en los últimos N minutos (default 30).
Cómo funciona:
Sistema lista MovementEvent.EnteredYard de los últimos 30 minutos.Filtra por yard activo del usuario.Notificación SignalR cuando llega uno nuevo.Vista típica:
┌─────────────────────────────────────────────────────┐│ ✅ INGRESOS RECIENTES (8 trailers en 30 min) │├─────────────────────────────────────────────────────┤│ 10:32 ABC-1234 Trailer propio (Reefer) ││ ⏳ Esperando confirmación de zona en rondín ││ ││ 10:28 XYZ-5678 Trailer propio (DryBox) ││ ✅ Registrado en Zona Norte por Juan Pérez ││ ││ 10:15 VST-1111 VISITANTE (registrado por caseta) ││ ⏳ Pendiente confirmación zona en rondín │└─────────────────────────────────────────────────────┘Acción del personal de caseta: confirmar visualmente las llegadas; coordinar con personal de patio si hay demoras.
Función 3 — Registro de visitantes (al ingresar)
Ver
03-workflows-operativos/visitantes.mdpara el flujo completo. Resumen:
T+0 Trailer visitante llega físicamente a la caseta. Chofer presenta documentación.
T+1 Personal de caseta click "+ Registrar visitante". Modal con: número, tipo, empresa, notas.
T+2 [Registrar]. Trailer aparece en lista "Pendientes de asignación". Sistema notifica al personal de patio.
T+3 Personal de caseta indica al chofer dónde dirigirse.Función 4 — Detección de salidas sin registrar (alerta crítica)
Qué muestra: trailers que salieron del patio (cruzaron geocerca hacia afuera) sin que el personal de patio haya registrado la salida manualmente (UnexpectedManualGap).
Cómo funciona:
Sistema detecta automáticamente:- Samsara reporta que el trailer cruzó el geofence hacia afuera.- Pero Assignment.Status sigue siendo Confirmed (sin ExitRegistered manual).
Genera anomalía UnexpectedManualGap (ADR-039) — salida fantasma.Aparece prominentemente en vista de caseta.Notificación SignalR inmediata + sonido (configurable).Vista típica (alerta):
┌─────────────────────────────────────────────────────┐│ 🚨 SALIDAS SIN REGISTRAR (2 trailers) │├─────────────────────────────────────────────────────┤│ ⚠️ ABC-1234 cruzó la salida hace 1 min ││ Registrado en Zona Norte (sin salida registrada)││ [Verificar y registrar salida] ││ ││ ⚠️ XYZ-5678 cruzó la salida hace 4 min ││ Registrado en Zona Sur (sin salida registrada) ││ [Verificar y registrar salida] │└─────────────────────────────────────────────────────┘Acción del personal de caseta:
1. Verificar visualmente que el trailer efectivamente salió.2. Click en [Verificar y registrar salida].3. Modal pide razón: - NormalDeparture (personal de patio olvidó registrar la salida). - SuspiciousDeparture (salida sospechosa, requiere investigación).4. Si NormalDeparture: libera la Assignment automáticamente.5. Si SuspiciousDeparture: - Crea Anomaly de tipo crítico. - Notifica al jefe de patio inmediatamente. - El YardManager investiga.Importancia operativa: sin Modo Caseta, las salidas sin registrar se descubrirían tarde (anomalía LongDwell o reportes manuales). Con Modo Caseta, se detectan en minutos y permite respuesta rápida.
Vista consolidada del Modo Caseta
┌──────────────────────────────────────────────────────────────────┐│ YMS — Modo Caseta — Patio Dulces Nombres │├──────────────────────────────────────────────────────────────────┤│ ││ 🚨 SALIDAS SIN REGISTRAR (1) [Filtros] [Configuración] ││ ┌────────────────────────────────────────────────────────────┐ ││ │ ⚠️ XYZ-5678 cruzó la salida hace 2 min │ ││ │ Zona Sur [Verificar y registrar salida] │ ││ └────────────────────────────────────────────────────────────┘ ││ ││ 🟢 APROXIMÁNDOSE (2) ││ ┌────────────────────────────────────────────────────────────┐ ││ │ ABC-1234 ── 250m norte ── ETA ~2 min │ ││ │ DEF-9999 ── 380m sur ── ETA ~3 min │ ││ └────────────────────────────────────────────────────────────┘ ││ ││ ✅ INGRESOS RECIENTES (últimos 30 min) ││ ┌────────────────────────────────────────────────────────────┐ ││ │ 10:32 ABC-1234 Propio ⏳ Pendiente confirmar zona │ ││ │ 10:28 XYZ-5678 Propio ✅ Zona Norte (Juan Pérez) │ ││ │ 10:15 VST-1111 VISITANTE ⏳ Pendiente confirmar zona │ ││ └────────────────────────────────────────────────────────────┘ ││ ││ [+ Registrar visitante] [Buscar trailer] ││ │└──────────────────────────────────────────────────────────────────┘Casos especiales
Caso 1: Trailer propio visitando otro yard (multi-yard, post-MVP)
Situación: Hg tiene futuro patio adicional. Un trailer propio sale de Dulces Nombres y llega al otro patio.
Comportamiento del sistema:
- Modo Caseta de Dulces Nombres detecta
LeftYardy libera la Assignment. - Cuando llega al otro yard, su Modo Caseta lo ve aproximarse.
- No se requiere intervención manual entre patios.
Caso 2: Trailer “rebota” en geocerca
Situación: un trailer se acerca, “entra” momentáneamente al yard por imprecisión GPS, pero realmente sigue en la calle.
Comportamiento del sistema:
- El detector
UnexpectedManualGaprequiere 3 posiciones consecutivas FUERA del yard antes de generar anomalía. - Por simetría, la entrada a yard también requiere coherencia (no entrada por una sola posición errática).
- En la práctica, esto evita falsos ingresos en la lista de caseta.
Caso 3: Caseta sin GPS / sin internet
Situación: la PC de la caseta queda sin internet temporalmente.
Comportamiento del sistema:
- yms-web pierde conexión SignalR y muestra warning visible.
- La vista del Modo Caseta queda con datos viejos (timestamp visible).
- Cuando recupera conexión, reconecta automáticamente y refresca.
- El registro de visitantes mientras hay desconexión NO está disponible (yms-web no tiene capacidad offline en MVP).
Caso 4: Múltiples casetas en el yard (post-MVP)
Situación: futuro patio con 2 o más casetas operativas.
Comportamiento del sistema (post-MVP):
- Cada caseta tiene su propia vista del Modo Caseta.
- Las salidas sin registrar se muestran a TODAS las casetas (cualquiera puede atender).
- Los ingresos recientes se muestran a todas también.
- Settings post-MVP permiten asignar trailers específicos a casetas específicas (ej. trailers con destino “Norte” salen por caseta 2).
Lo que SÍ y NO permite el Modo Caseta
| Operación | ¿Permitido? | Comentario |
|---|---|---|
| Ver trailers aproximándose | ✅ Sí | Vista en tiempo real |
| Ver ingresos recientes | ✅ Sí | Últimos 30 min default |
| Ver salidas sin registrar | ✅ Sí | Alerta prominente |
| Registrar trailer visitante | ✅ Sí | Workflow específico |
| Registrar salida con verificación | ✅ Sí | Solo en alertas de salida sin registrar |
| Confirmar/corregir zona en rondín | ❌ No (lo hace el personal de patio en campo, no caseta) | Caseta no opera el patio internamente |
| Editar layout | ❌ No | Solo YardManager |
| Acceder a anomalías generales | ⚠️ Limitado | Solo las que afectan caseta directamente |
| Operar en múltiples yards simultáneamente | ❌ No | Una caseta = un yard |
Configuración del Modo Caseta
Settings configurables (vía Sprint 33.5)
| Setting | Default | Significado |
|---|---|---|
caseta.aproximacion.radioMetros | 500 | Radio (m) para considerar trailer “aproximándose” |
caseta.ingresos.ventanaMinutos | 30 | Cuántos minutos atrás mostrar ingresos recientes |
caseta.salidasSinRegistrar.alertaSonido | true | Reproducir sonido en alertas de salida sin registrar |
caseta.refreshIntervalSegundos | 30 | Frecuencia de refresh automático |
Activación de la vista
- El usuario con rol
Operator+en el yard puede activar Modo Caseta desde el menú de usuario. - La vista activa persiste entre sesiones (cookie/localStorage).
- Un usuario puede ver tablero normal + Modo Caseta alternando con tab.
Decisiones de diseño tomadas
Decisión 1: Modo Caseta es vista UI, no rol nuevo
Adoptado: el personal de caseta usa rol Operator con la vista especializada activada.
Justificación: evita inflación de roles. La diferencia de UX no requiere segregación de permisos. Un YardManager también puede usar Modo Caseta si quiere supervisar la operación de caseta directamente.
Decisión 2: Una caseta = un yard
Adoptado: la vista de Modo Caseta opera sobre el yard activo del usuario, no muestra múltiples yards.
Justificación: la operación física de una caseta es local a un yard. Mostrar múltiples yards generaría confusión visual.
Decisión 3: Alertas con sonido configurables
Adoptado: las alertas críticas (salida sin registrar) reproducen sonido, configurable on/off.
Justificación: el personal de caseta puede estar atendiendo otra cosa. Sonido captura atención. Opción de silenciar para casos especiales (ej. operación nocturna sin disturbar).
Decisión 4: Notificación al jefe de patio en SuspiciousDeparture
Adoptado: si la caseta marca una salida como sospechosa, el jefe de patio recibe notificación inmediata (SignalR + email).
Justificación: salidas sospechosas son evento crítico operativo (posible robo, error grave). Inmediatez es esencial.
Decisión 5: Modo Caseta NO opera offline en MVP
Adoptado: yms-web (incluyendo Modo Caseta) NO tiene capacidad offline. Si la caseta pierde internet, no puede registrar visitantes.
Justificación: la conectividad confirmada con cliente es buena (oficina central, fibra óptica). El costo de implementar offline en yms-web es alto vs el riesgo bajo. El Sprint 27-29 (offline) cubre solo yms-mobile (PWA en celular).
Documentos relacionados
03-workflows-operativos/visitantes.md— registro de visitantes03-workflows-operativos/anomalias.md— detección de salidas sin registrar00-vision-general/roles-permisos.md— permisos del personal de caseta
Para mapa completo de la documentación, ver
yms-indice.md.
Documento ejecutivo del workflow del Modo Caseta — referencia operativa.