# US-MAI005-009: Reasignar viaje con motivo **ID:** US-MAI005-009 **Modulo:** MAI-005 (Despacho) **Prioridad:** Alta **Story Points:** 5 --- ## Historia de Usuario **Como** despachador del centro de control **Quiero** poder cambiar la unidad asignada a un viaje registrando el motivo del cambio **Para** responder a imprevistos operativos y mantener trazabilidad de las decisiones --- ## Criterios de Aceptacion ### CA-001: Iniciar reasignacion **Dado** que tengo un viaje con unidad asignada **Cuando** selecciono la opcion de reasignar **Entonces** se abre el flujo de reasignacion mostrando la asignacion actual ### CA-002: Seleccionar motivo obligatorio **Dado** que inicio la reasignacion **Cuando** selecciono una nueva unidad **Entonces** debo elegir un motivo de la lista predefinida ### CA-003: Motivos predefinidos **Dado** que debo seleccionar motivo **Cuando** veo la lista de opciones **Entonces** encuentro: Falla mecanica, Operador no disponible, Solicitud cliente, Optimizacion, Skills no coinciden, Problema capacidad, Otro ### CA-004: Detalle adicional opcional **Dado** que seleccione un motivo **Cuando** selecciono "Otro" o quiero dar mas contexto **Entonces** puedo escribir un detalle adicional en texto libre ### CA-005: Ver sugerencias para reasignacion **Dado** que inicio la reasignacion **Cuando** busco nueva unidad **Entonces** veo sugerencias ordenadas por score excluyendo la unidad actual ### CA-006: Confirmar reasignacion **Dado** que seleccione nueva unidad y motivo **Cuando** confirmo la reasignacion **Entonces** el viaje se asigna a la nueva unidad y la anterior queda disponible ### CA-007: Notificar afectados **Dado** que se confirma la reasignacion **Cuando** el proceso termina **Entonces** se notifica al operador anterior (liberado) y al nuevo (asignado) ### CA-008: Registrar en log de auditoria **Dado** que se completa la reasignacion **Cuando** consulto el historial del viaje **Entonces** veo el registro con: unidad anterior, nueva unidad, motivo, detalle, usuario, timestamp --- ## Mockup / UI ``` +-----------------------------------------------------------------------+ | REASIGNAR VIAJE [X] | +-----------------------------------------------------------------------+ | | | Viaje: VJE-0456 | Cliente: Transportes MX | | Origen: CDMX | Destino: Queretaro | Fecha: 27-Ene-2026 | | | | ASIGNACION ACTUAL | | +----------------------------------------------------------------+ | | | Unidad: U-005 Kenworth T680 | | | | Operador: Juan Perez Garcia | | | | Asignado: 27-Ene-2026 08:30 por admin@transportes.com | | | +----------------------------------------------------------------+ | | | | MOTIVO DE REASIGNACION * | | +----------------------------------------------------------------+ | | | ( ) Falla mecanica | | | | (x) Operador no disponible | | | | ( ) Solicitud del cliente | | | | ( ) Optimizacion de rutas | | | | ( ) Skills no coinciden | | | | ( ) Problema de capacidad | | | | ( ) Otro | | | +----------------------------------------------------------------+ | | | | Detalle adicional (opcional): | | +----------------------------------------------------------------+ | | | Operador reporto enfermedad esta manana | | | +----------------------------------------------------------------+ | | | | NUEVA UNIDAD | | +----------------------------------------------------------------+ | | | #1 U-012 Freightliner Cascadia [72] ### [SELECT] | | | | Carlos Lopez | 15.3 km | DISPONIBLE | | | +----------------------------------------------------------------+ | | | #2 U-008 International LT [65] ## [ ] | | | | Roberto Sanchez | 22.1 km | DISPONIBLE | | | +----------------------------------------------------------------+ | | | #3 U-015 Volvo VNL [58] ## [ ] | | | | Maria Garcia | 28.5 km | DISPONIBLE | | | +----------------------------------------------------------------+ | | | | [Cancelar] [CONFIRMAR CAMBIO] | | | +-----------------------------------------------------------------------+ ``` --- ## Notas Tecnicas - Endpoint: `POST /api/dispatch/reassign` - Motivos definidos como ENUM en backend: `ReassignReason` - Requiere permiso `dispatch:write` - Notificaciones via modulo de notificaciones existente - Log se guarda en `dispatch_logs` con action='REASSIGNED' - Al confirmar: actualizar `trips.unit_id`, cambiar estado unidad anterior a AVAILABLE - Transaccion atomica para evitar estados inconsistentes --- ## Definicion de Done - [ ] Endpoint /dispatch/reassign implementado - [ ] UI de reasignacion con formulario - [ ] Lista de motivos predefinidos - [ ] Campo de detalle opcional - [ ] Sugerencias de nuevas unidades (excluyendo actual) - [ ] Notificaciones a operadores afectados - [ ] Registro en log de auditoria - [ ] Liberacion automatica de unidad anterior - [ ] Tests unitarios de validaciones - [ ] Tests E2E del flujo completo --- *US-MAI005-009 - Modulo MAI-005 - ERP Transportistas*