Saltearse al contenido

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

  1. El personal de caseta tiene rol Operator en el yard. Comparte la matriz de permisos del Operator regular.
  2. El “Modo Caseta” NO es un rol distinto, es una vista UI. Cualquier Operator+ puede activarla.
  3. La detección de aproximación es vía GPS Samsara (no requiere acción del personal).
  4. La detección de salida sin registrar es automática (alerta visual prominente).
  5. El registro de visitantes desde caseta crea Trailer con Ownership = 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.md para 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 LeftYard y 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 UnexpectedManualGap requiere 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❌ NoSolo YardManager
Acceder a anomalías generales⚠️ LimitadoSolo las que afectan caseta directamente
Operar en múltiples yards simultáneamente❌ NoUna caseta = un yard

Configuración del Modo Caseta

Settings configurables (vía Sprint 33.5)

SettingDefaultSignificado
caseta.aproximacion.radioMetros500Radio (m) para considerar trailer “aproximándose”
caseta.ingresos.ventanaMinutos30Cuántos minutos atrás mostrar ingresos recientes
caseta.salidasSinRegistrar.alertaSonidotrueReproducir sonido en alertas de salida sin registrar
caseta.refreshIntervalSegundos30Frecuencia 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 visitantes
  • 03-workflows-operativos/anomalias.md — detección de salidas sin registrar
  • 00-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.