Modules documented: - MAI-003 (OT): README, REQUERIMIENTOS, RESUMEN-EPICA, 10 US - MAI-006 (Tracking): README, REQUERIMIENTOS, RESUMEN-EPICA - MAI-008 (Incidencias): 3 US (18 SP) - MAI-011 (Flota): README, REQUERIMIENTOS, RESUMEN-EPICA - MAI-012 (Combustible): 3 US (18 SP) - MAI-013 (Mantenimiento): 3 US (18 SP) - MAI-014 (Carriers): 3 US (18 SP) - MAI-015 (Portal): 3 US (18 SP) - MAE-016 (Carta Porte): 10 US - MAE-017 (HOS): 3 US (16 SP) - MAE-018 (Reportes): 3 US (18 SP) Phase 2+3 complete: 13 modules, 50+ User Stories Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
6.0 KiB
US-MAI003-010: Dashboard de OTs por status
Metadata
| Campo | Valor |
|---|---|
| ID | US-MAI003-010 |
| Epica | EPIC-MAI-003 - Ordenes de Transporte |
| Modulo | ordenes-transporte |
| Prioridad | P2 |
| Story Points | 5 |
| Sprint | Por asignar |
| Estado | Backlog |
Historia de Usuario
Como coordinador de trafico o gerente de operaciones de una empresa transportista, quiero visualizar un dashboard con el resumen de ordenes de transporte agrupadas por estado, para tener una vision rapida del volumen operativo, identificar cuellos de botella y tomar decisiones de asignacion de recursos.
Descripcion Detallada
El dashboard de OTs es la vista ejecutiva del modulo de ordenes de transporte. Presenta contadores y graficos que resumen el estado actual de todas las OTs del tenant, permitiendo al coordinador o gerente identificar rapidamente cuantas OTs estan pendientes de confirmacion, cuantas estan listas para planeacion, cuantas estan en ejecucion y cuantas pendientes de facturacion.
El dashboard incluye: contadores por estado (tarjetas/cards), un grafico de barras o dona con la distribucion porcentual, OTs proximas a vencer su ventana de entrega (alertas), totales de peso y volumen por estado, y un resumen de OTs creadas vs completadas en el periodo seleccionado.
Los datos del dashboard deben actualizarse al cargar la pagina y permitir filtrado por rango de fechas para analizar periodos especificos. La consulta principal utiliza el indice idx_ot_estado (tenant_id, estado) para agrupar y contar registros de forma eficiente.
Criterios de Aceptacion
Escenario 1: Visualizar contadores por estado
Dado que el tenant tiene OTs en distintos estados, Cuando el coordinador accede al dashboard de ordenes de transporte, Entonces el sistema muestra tarjetas con el conteo de OTs por cada estado: BORRADOR (12), CONFIRMADA (8), ASIGNADA (15), EN_PROCESO (22), COMPLETADA (5), FACTURADA (45), CANCELADA (3).
Escenario 2: Filtrar dashboard por rango de fechas
Dado que el coordinador desea analizar el mes de enero 2026, Cuando selecciona el rango de fechas 2026-01-01 a 2026-01-31, Entonces los contadores y graficos se actualizan mostrando solo las OTs creadas dentro de ese rango, y el resumen muestra "OTs creadas: 110, OTs completadas: 72, Tasa de completitud: 65.5%".
Escenario 3: Alertas de OTs proximas a vencer
Dado que existen OTs en estado CONFIRMADA o ASIGNADA cuya fecha_entrega_programada es dentro de las proximas 24 horas, Cuando el coordinador visualiza el dashboard, Entonces el sistema muestra una seccion de alertas con las OTs proximas a vencer, incluyendo codigo, shipper_nombre, destino_ciudad y horas restantes para la entrega.
Escenario 4: Totales consolidados por estado
Dado que el coordinador necesita dimensionar la carga operativa, Cuando visualiza el dashboard, Entonces el sistema muestra, ademas de los contadores de OTs, los totales de peso_kg y volumen_m3 agrupados por estado para los estados activos (CONFIRMADA, ASIGNADA, EN_PROCESO).
Tareas Tecnicas
- Database: Crear query de agregacion:
SELECT estado, COUNT(*), SUM(peso_kg), SUM(volumen_m3) FROM transport.ordenes_transporte WHERE tenant_id = :tenantId AND deleted_at IS NULL GROUP BY estado. Utilizar el indice idx_ot_estado para optimizar. Para alertas de vencimiento: query con filtrofecha_entrega_programada BETWEEN NOW() AND NOW() + INTERVAL '24 hours'y estado IN ('CONFIRMADA', 'ASIGNADA'). - Backend: Crear metodo
getDashboard(dateRange?)enOrdenTransporteServiceque retorne: contadores por estado, totales de peso/volumen por estado, OTs proximas a vencer, resumen de creadas vs completadas en el periodo. Configurar endpoint GET/api/v1/ordenes-transporte/dashboard?fecha_desde=2026-01-01&fecha_hasta=2026-01-31. CrearDashboardOrdenTransporteDtocon la estructura de respuesta. - Frontend: Crear pagina
OrdenesTransporteDashboardPagecon: fila de tarjetas/cards por estado con colores (BORRADOR=gris, CONFIRMADA=azul, ASIGNADA=naranja, EN_PROCESO=amarillo, COMPLETADA=verde, FACTURADA=verde oscuro, CANCELADA=rojo). Grafico de dona con libreria recharts o chart.js. Tabla de alertas de OTs proximas a vencer. Selector de rango de fechas con presets (hoy, esta semana, este mes, mes anterior). Totales consolidados de peso y volumen. - Tests: Tests unitarios de la query de agregacion. Tests del calculo de tasa de completitud. Tests de integracion del endpoint de dashboard. Tests de filtrado por rango de fechas.
Dependencias
- Depende de: US-MAI003-001 (datos de OTs), US-MAI003-008 (indices de busqueda reutilizados)
- Bloquea: Ninguno directamente (vista de solo lectura ejecutiva)
Notas Tecnicas
- Endpoint: GET
/api/v1/ordenes-transporte/dashboard - Query params:
fecha_desde(ISO date, opcional),fecha_hasta(ISO date, opcional) - Respuesta ejemplo:
{
"contadores": {
"BORRADOR": 12,
"CONFIRMADA": 8,
"ASIGNADA": 15,
"EN_PROCESO": 22,
"COMPLETADA": 5,
"FACTURADA": 45,
"CANCELADA": 3
},
"totales": {
"CONFIRMADA": { "peso_kg": 45000, "volumen_m3": 120.5 },
"ASIGNADA": { "peso_kg": 78000, "volumen_m3": 210.3 },
"EN_PROCESO": { "peso_kg": 112000, "volumen_m3": 305.8 }
},
"alertas_vencimiento": [
{ "id": "uuid", "codigo": "OT-2026-00089", "shipper_nombre": "Acme Corp", "destino_ciudad": "Monterrey", "horas_restantes": 8.5 }
],
"resumen_periodo": {
"creadas": 110,
"completadas": 72,
"canceladas": 3,
"tasa_completitud": 65.45
}
}
- RLS: La query de agregacion esta filtrada por tenant_id automaticamente via la politica tenant_isolation_ot
- Performance: La query GROUP BY estado con indice idx_ot_estado es eficiente incluso con cientos de miles de registros. Para la alerta de vencimiento, usar indice idx_ot_fechas
- Cache: Evaluar cache de 30-60 segundos en Redis para el dashboard, ya que no requiere datos en tiempo real exacto
US-MAI003-010 - ERP Transportistas v1.0.0