MAI-003: Ordenes de Transporte
Modulo: MAI-003 | Version: 1.0.0 | Actualizado: 2026-01-27
Descripcion
El modulo de Ordenes de Transporte (OT) es el nucleo operativo del ERP Transportistas. Una OT representa la solicitud formal de un cliente (shipper) para mover mercancia desde un punto de origen hasta uno o multiples destinos, con restricciones logisticas especificas. Este modulo gestiona todo el ciclo de vida de la OT, desde su creacion en borrador hasta su cierre tras la facturacion.
La OT es el documento maestro que conecta las necesidades comerciales del cliente con la ejecucion operativa del transporte. Cada OT contiene informacion detallada sobre la carga, ubicaciones georreferenciadas, ventanas de tiempo, requisitos de equipo, tarifas aplicables y estado operativo. Las OTs pueden agruparse en embarques para consolidacion logistica y asignarse a viajes para su ejecucion.
Workflow de la OT
BORRADOR --> CONFIRMADA --> ASIGNADA --> EN_PROCESO --> COMPLETADA --> FACTURADA --> CANCELADA (desde cualquier estado previo a COMPLETADA)
| Estado |
Descripcion |
Transiciones permitidas |
| BORRADOR |
OT recien creada, editable libremente |
CONFIRMADA, CANCELADA |
| CONFIRMADA |
Datos validados, lista para planeacion |
ASIGNADA, CANCELADA |
| ASIGNADA |
Vinculada a un embarque y/o viaje |
EN_PROCESO, CANCELADA |
| EN_PROCESO |
Viaje en ejecucion, carga en transito |
COMPLETADA |
| COMPLETADA |
Entrega realizada con POD |
FACTURADA |
| FACTURADA |
OT incluida en factura emitida |
(estado terminal) |
| CANCELADA |
OT cancelada con motivo registrado |
(estado terminal) |
Actores
| Actor |
Rol en el modulo |
| Cliente / Shipper |
Solicita el servicio de transporte, proporciona datos de carga y ubicaciones |
| Despachador |
Crea y confirma OTs, valida datos, coordina con clientes |
| Coordinador / Planner |
Agrupa OTs en embarques, asigna a viajes, optimiza recursos |
| Operador / Conductor |
Ejecuta el transporte fisico de la carga asociada a las OTs |
| Administrador |
Configura parametros del modulo, gestiona permisos y tarifas |
Funcionalidades Clave
- Creacion de OT con datos completos: Origen/destino georreferenciados, datos de carga (peso, volumen, piezas, pallets), tipo de carga, ventanas de tiempo para recoleccion y entrega, referencia del cliente.
- Multi-paradas: Soporte para rutas con multiples puntos de recoleccion y entrega mediante la tabla
paradas_viaje asociada al viaje.
- Agrupacion en embarques: Consolidacion de multiples OTs compatibles en un embarque para optimizar capacidad y costos.
- Asignacion a viajes: Vinculacion de OTs/embarques a viajes con unidad, operador y ruta asignados.
- Restricciones logisticas: Requisitos de temperatura, GPS, escolta, citas, instrucciones especiales por OT.
- Calculo de tarifa: Tarifa base, recargos, descuentos, subtotal, IVA y total calculados automaticamente.
- Tracking de status: Transiciones de estado controladas con trazabilidad de usuario y timestamp.
- Busqueda avanzada: Filtros por estado, cliente, fechas, tipo de carga, codigo y referencia.
- Cancelacion controlada: Cancelacion con registro de motivo y usuario responsable.
Entidades Principales (DDL)
| Entidad |
Tabla |
Schema |
Descripcion |
| OrdenTransporte |
transport.ordenes_transporte |
transport |
Solicitud de servicio de transporte |
| Embarque |
transport.embarques |
transport |
Agrupacion logica de OTs para consolidacion |
| Viaje |
transport.viajes |
transport |
Ejecucion operativa (unidad + operador + ruta) |
| ParadaViaje |
transport.paradas_viaje |
transport |
Paradas programadas en un viaje (multi-drop) |
| POD |
transport.pod |
transport |
Proof of Delivery - evidencia de entrega |
| Incidencia |
transport.incidencias |
transport |
Registro de incidencias durante el transporte |
ENUMs Relevantes
| ENUM |
Valores |
Uso |
estado_orden |
BORRADOR, CONFIRMADA, ASIGNADA, EN_PROCESO, COMPLETADA, FACTURADA, CANCELADA |
Estado de la OT |
tipo_carga |
GENERAL, PELIGROSA, REFRIGERADA, SOBREDIMENSIONADA, GRANEL, LIQUIDOS, CONTENEDOR, AUTOMOVILES |
Clasificacion de carga |
estado_pod |
PENDIENTE, PARCIAL, COMPLETO, RECHAZADO |
Estado de evidencia de entrega |
API Endpoints (Proyectados)
| Metodo |
Endpoint |
Descripcion |
| POST |
/api/v1/ordenes-transporte |
Crear nueva OT |
| GET |
/api/v1/ordenes-transporte |
Listar OTs con filtros y paginacion |
| GET |
/api/v1/ordenes-transporte/:id |
Obtener detalle de una OT |
| PATCH |
/api/v1/ordenes-transporte/:id |
Actualizar OT en BORRADOR |
| PATCH |
/api/v1/ordenes-transporte/:id/confirmar |
Confirmar OT (BORRADOR -> CONFIRMADA) |
| PATCH |
/api/v1/ordenes-transporte/:id/cancelar |
Cancelar OT con motivo |
| POST |
/api/v1/embarques |
Crear embarque agrupando OTs |
| GET |
/api/v1/embarques |
Listar embarques con OTs asociadas |
| GET |
/api/v1/embarques/:id |
Detalle de embarque |
| PATCH |
/api/v1/embarques/:id/asignar-viaje |
Asignar embarque a viaje |
| GET |
/api/v1/ordenes-transporte/dashboard |
Resumen de OTs por estado |
| GET |
/api/v1/ordenes-transporte/exportar |
Exportar listado de OTs (CSV/Excel) |
User Stories
| ID |
Titulo |
SP |
Prioridad |
Archivo |
| US-MAI003-001 |
Crear orden de transporte |
8 |
P0 |
historias-usuario/US-MAI003-001.md |
| US-MAI003-002 |
Agregar multiples paradas a OT |
5 |
P0 |
historias-usuario/US-MAI003-002.md |
| US-MAI003-003 |
Definir restricciones logisticas |
5 |
P1 |
historias-usuario/US-MAI003-003.md |
| US-MAI003-004 |
Agrupar OTs en embarque |
8 |
P0 |
historias-usuario/US-MAI003-004.md |
| US-MAI003-005 |
Consultar status de OT |
3 |
P1 |
historias-usuario/US-MAI003-005.md |
| US-MAI003-006 |
Modificar OT en borrador |
5 |
P1 |
historias-usuario/US-MAI003-006.md |
| US-MAI003-007 |
Cancelar OT |
3 |
P1 |
historias-usuario/US-MAI003-007.md |
| US-MAI003-008 |
Buscar OTs con filtros avanzados |
5 |
P1 |
historias-usuario/US-MAI003-008.md |
| US-MAI003-009 |
Exportar listado de OTs |
3 |
P2 |
historias-usuario/US-MAI003-009.md |
| US-MAI003-010 |
Dashboard de OTs por status |
5 |
P2 |
historias-usuario/US-MAI003-010.md |
Total Story Points: 50
Dependencias
| Tipo |
Modulo |
Descripcion |
| Depende de |
MAI-001 (Auth) |
Autenticacion, RBAC, multi-tenancy |
| Depende de |
MAI-002 (Clientes y Tarifas) |
Datos de shippers/consignees, tarifas por lane |
| Bloquea |
MAI-004 (Planeacion TMS) |
La planeacion consume OTs confirmadas |
| Bloquea |
MAI-005 (Despacho) |
El despacho opera sobre OTs asignadas a viajes |
| Bloquea |
MAI-006 (Tracking) |
El tracking monitorea viajes con OTs asociadas |
| Bloquea |
MAI-007 (POD y Cierre) |
El POD cierra la entrega de OTs |
| Bloquea |
MAI-009 (Facturacion) |
La facturacion genera CFDI sobre OTs completadas |
Notas Tecnicas
- RLS (Row Level Security): Todas las tablas del schema
transport tienen RLS habilitado con aislamiento por tenant_id usando current_setting('app.tenant_id').
- Indices: La tabla
ordenes_transporte cuenta con indices en tenant_id, estado, shipper_id, fecha_recoleccion_programada y viaje_id para optimizar las consultas mas frecuentes.
- Constraint unico:
uq_ot_tenant_codigo garantiza que el codigo de OT sea unico por tenant.
- Soft delete: Se utiliza
deleted_at para eliminacion logica.
- Auditoria: Campos
created_at, created_by_id, updated_at, updated_by_id en todas las entidades.
Notas Adicionales de Epica
Criterios de Aceptacion de la Epica:
- Un despachador puede crear una OT con todos los datos obligatorios (origen, destino, cliente, carga)
- El sistema valida la transicion de estados segun el workflow definido
- Se pueden agrupar OTs compatibles en un embarque con totales consolidados
- La busqueda permite filtrar por estado, cliente, fechas, tipo de carga y codigo
- El dashboard muestra contadores por estado con actualizacion en tiempo real
- Todas las tablas tienen RLS habilitado para aislamiento por tenant
- Los endpoints cumplen con paginacion, filtros y ordenamiento estandar
- La auditoria registra usuario y timestamp en cada operacion
Riesgos Identificados:
| Riesgo |
Impacto |
Mitigacion |
| Datos de ubicacion incompletos |
Alto |
Validacion obligatoria de campos de direccion y geocodificacion |
| Volumen alto de OTs por tenant |
Medio |
Indices optimizados y paginacion obligatoria en listados |
| Cambios de estado no controlados |
Alto |
Maquina de estados estricta en backend con validacion de transiciones |
| Calculo incorrecto de tarifas |
Alto |
Validacion cruzada con modulo MAI-002 y tests unitarios exhaustivos |
Distribucion de Esfuerzo por Capa:
| Capa |
Esfuerzo Estimado |
| Database (DDL + migraciones) |
15% |
| Backend (entities + services + controllers) |
45% |
| Frontend (components + pages + forms) |
30% |
| Tests (unit + integration + e2e) |
10% |
MAI-003 Ordenes de Transporte - ERP Transportistas v1.0.0