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>
5.1 KiB
US-MAI003-001: Crear orden de transporte
Metadata
| Campo | Valor |
|---|---|
| ID | US-MAI003-001 |
| Epica | EPIC-MAI-003 - Ordenes de Transporte |
| Modulo | ordenes-transporte |
| Prioridad | P0 |
| Story Points | 8 |
| Sprint | Por asignar |
| Estado | Backlog |
Historia de Usuario
Como despachador de una empresa transportista, quiero crear una orden de transporte con todos los datos del servicio solicitado por el cliente, para registrar formalmente la demanda de transporte y que pueda ser procesada por el equipo de planeacion y operaciones.
Descripcion Detallada
La creacion de una OT es el punto de entrada del flujo operativo de transporte. El despachador recibe la solicitud del cliente (por telefono, email o portal) y registra toda la informacion necesaria para ejecutar el servicio: datos del shipper y consignee, ubicaciones de origen y destino con coordenadas geograficas, fechas y ventanas de tiempo para recoleccion y entrega, caracteristicas de la carga (tipo, peso, volumen, piezas, pallets, valor declarado) y la tarifa aplicable.
El sistema debe generar automaticamente un codigo unico de OT por tenant (por ejemplo, OT-2026-00001) y registrar al usuario creador. La OT se crea en estado BORRADOR, permitiendo al despachador completar o modificar los datos antes de confirmarla.
Los campos de origen y destino incluyen datos de geolocalizacion (latitud/longitud) que seran utilizados posteriormente por los modulos de planeacion (MAI-004) y tracking (MAI-006). La tarifa se calcula automaticamente al asociar un tarifario, aplicando recargos y descuentos para obtener el total del servicio.
Criterios de Aceptacion
Escenario 1: Creacion exitosa con datos obligatorios
Dado que el despachador tiene permisos de creacion de OT y existe al menos un cliente registrado, Cuando completa el formulario con los datos obligatorios (shipper, consignee, origen, destino) y presiona guardar, Entonces el sistema crea la OT en estado BORRADOR con un codigo unico generado automaticamente, registra created_at y created_by_id, y muestra el detalle de la OT creada.
Escenario 2: Validacion de datos obligatorios
Dado que el despachador esta creando una nueva OT, Cuando intenta guardar sin completar los campos obligatorios (shipper_id, shipper_nombre, consignee_id, consignee_nombre, origen_direccion, destino_direccion, created_by_id), Entonces el sistema muestra mensajes de validacion indicando los campos faltantes y no crea la OT.
Escenario 3: Codigo unico por tenant
Dado que el tenant ya tiene OTs registradas, Cuando se crea una nueva OT, Entonces el sistema genera un codigo que no exista previamente para ese tenant, respetando la constraint uq_ot_tenant_codigo.
Escenario 4: Registro completo de carga y tarifas
Dado que el despachador esta creando una OT con datos de carga completos, Cuando selecciona tipo_carga, ingresa peso_kg, volumen_m3, piezas, pallets, valor_declarado y asocia una tarifa_id, Entonces el sistema calcula tarifa_base, recargos, descuentos, subtotal, IVA y total automaticamente y los almacena en la OT.
Tareas Tecnicas
- Database: Verificar que la tabla
transport.ordenes_transporteexiste con todos los campos del DDL, incluyendo indices idx_ot_tenant, idx_ot_estado, idx_ot_shipper, idx_ot_fechas y constraint uq_ot_tenant_codigo. - Backend: Crear entity
OrdenTransportemapeada atransport.ordenes_transporte. CrearOrdenTransporteServicecon metodocreate()que valide datos obligatorios, genere codigo unico y calcule tarifas. CrearOrdenTransporteControllercon endpoint POST/api/v1/ordenes-transporte. Crear DTOs:CreateOrdenTransporteDtocon validaciones class-validator. - Frontend: Crear pagina
OrdenesTransporteCreatePagecon formulario multi-seccion (datos generales, origen/destino, carga, tarifas). Incluir seleccion de shipper y consignee con autocompletado. Incluir mapa para seleccion de coordenadas. - Tests: Tests unitarios del servicio (validacion, generacion de codigo, calculo de tarifas). Tests de integracion del endpoint POST. Tests e2e del flujo completo de creacion.
Dependencias
- Depende de: MAI-001 (Auth - autenticacion y permisos), MAI-002 (Clientes - catalogo de shippers/consignees y tarifas)
- Bloquea: US-MAI003-002 (paradas), US-MAI003-003 (restricciones), US-MAI003-004 (embarques), US-MAI003-005 (consulta status), US-MAI003-006 (modificar), US-MAI003-007 (cancelar)
Notas Tecnicas
- Endpoint: POST
/api/v1/ordenes-transporte - Entity:
OrdenTransporte->transport.ordenes_transporte - RLS: La politica
tenant_isolation_otfiltra portenant_id = current_setting('app.tenant_id')::uuid - Generacion de codigo: Implementar secuencia por tenant, formato sugerido:
OT-{YYYY}-{SECUENCIAL:5} - Calculo de tarifa: Consultar tarifa vigente del modulo MAI-002, aplicar recargos del catalogo de billing, calcular IVA al 16%
- Coordenadas: Campos
origen_latitud,origen_longitud,destino_latitud,destino_longitudcomo DECIMAL(10,7) para precision de ~1cm
US-MAI003-001 - ERP Transportistas v1.0.0