erp-transportistas-v2/docs/02-definicion-modulos/MAI-007-pod-cierre/REQUERIMIENTOS.md
Adrian Flores Cortes 7f45eb6383 docs(modulos): MAI-007 POD y Cierre - Especificacion completa
Nuevo modulo P0 critico especificado:
- README.md: Vision general, alcance, actores, flujo
- REQUERIMIENTOS.md: 4 RF (4.7.1-4.7.4), RNF, validaciones
- RESUMEN-EPICA.md: Valor de negocio, criterios exito, 31 SP

User Stories (5):
- US-MAI007-001: Capturar firma digital (8 SP)
- US-MAI007-002: Registrar tiempos reales (5 SP)
- US-MAI007-003: Adjuntar fotos evidencia (5 SP)
- US-MAI007-004: Validar POD antes de cierre (8 SP)
- US-MAI007-005: Cerrar con excepcion (5 SP)

Este modulo es bloqueante para:
- MAI-009 (Facturacion)
- MAI-010 (Liquidaciones)
- MAE-016 (Carta Porte)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 01:33:03 -06:00

177 lines
5.9 KiB
Markdown

# REQUERIMIENTOS.md - MAI-007: POD y Cierre Operativo
**Version:** 1.0.0
**Fecha:** 2026-01-27
**Fuente:** REQ-GIRO-TRANSPORTISTA.md - Seccion 4.7
---
## Requerimientos Funcionales
### RF-4.7.1: Captura POD
**Descripcion:**
El sistema debe permitir capturar la prueba de entrega (Proof of Delivery) incluyendo firma digital, nombre/ID del receptor, sello, fotos y documento escaneado.
**Criterios de Aceptacion:**
1. El operador puede capturar firma digital en pantalla tactil
2. El sistema registra nombre y opcionalmente ID del receptor
3. El operador puede adjuntar 1-5 fotos de evidencia
4. El operador puede escanear documento firmado (carta de porte, remision)
5. La captura funciona en modo offline con sincronizacion posterior
6. El sistema valida que la firma no este vacia
7. El sistema registra coordenadas GPS de la captura
**Mapeo a DDL:**
- Tabla: `pod`
- Campos: receptor_nombre, receptor_identificacion, firma_digital_id, foto_ids, documento_url, coordenadas, fecha_captura
**Endpoints Requeridos:**
- `POST /api/v1/pod` - Crear POD
- `PUT /api/v1/pod/:id` - Actualizar POD
- `POST /api/v1/pod/:id/firma` - Subir firma digital
- `POST /api/v1/pod/:id/fotos` - Subir fotos
- `POST /api/v1/pod/:id/documento` - Subir documento escaneado
**Prioridad:** Alta
---
### RF-4.7.2: Validaciones POD
**Descripcion:**
El sistema no debe permitir "cerrar" un viaje sin POD o sin justificacion aprobada por un supervisor.
**Criterios de Aceptacion:**
1. El boton "Cerrar Viaje" esta deshabilitado si no hay POD capturado
2. Si no hay POD, el sistema muestra opcion "Cerrar con Excepcion"
3. Cerrar con excepcion requiere:
- Motivo de excepcion (catalogo + texto libre)
- Aprobacion de supervisor (puede ser posterior)
4. El sistema notifica al supervisor cuando hay excepciones pendientes
5. Las excepciones se registran en bitacora de auditoria
**Mapeo a DDL:**
- Tabla: `pod` campo `status` (COMPLETO, EXCEPCION_PENDIENTE, EXCEPCION_APROBADA)
- Tabla: `excepciones_pod` (viaje_id, motivo, justificacion, aprobador_id, fecha_aprobacion)
**Endpoints Requeridos:**
- `POST /api/v1/viajes/:id/cierre-excepcion` - Solicitar cierre con excepcion
- `PUT /api/v1/excepciones/:id/aprobar` - Aprobar excepcion
- `PUT /api/v1/excepciones/:id/rechazar` - Rechazar excepcion
**Prioridad:** Alta
---
### RF-4.7.3: Tiempos Reales
**Descripcion:**
El sistema debe registrar tiempos de llegada, inicio/fin de descarga y salida para metricas de detention y SLA.
**Criterios de Aceptacion:**
1. El operador puede registrar:
- Hora de arribo al destino
- Hora de inicio de descarga
- Hora de fin de descarga
- Hora de salida del destino
2. Los eventos pueden capturarse automaticamente por geocerca
3. El sistema calcula automaticamente:
- Tiempo de espera (arribo a inicio descarga)
- Tiempo de descarga (inicio a fin)
- Tiempo total en destino
4. El sistema compara vs tolerancia del SLA del cliente
5. Si se excede tolerancia, genera flag de "detention"
6. Los tiempos alimentan calculo de recargos en facturacion
**Mapeo a DDL:**
- Tabla: `tiempos_reales`
- Campos: viaje_id, parada_id, hora_arribo, hora_inicio_descarga, hora_fin_descarga, hora_salida, detention_minutos, excede_sla
**Endpoints Requeridos:**
- `POST /api/v1/tiempos-reales` - Registrar tiempo
- `GET /api/v1/viajes/:id/tiempos` - Consultar tiempos del viaje
- `GET /api/v1/viajes/:id/detention` - Consultar detention calculado
**Prioridad:** Alta
---
### RF-4.7.4: Cierre Contable Operativo
**Descripcion:**
Al cerrar el viaje, el sistema debe congelar los costos (combustible, peajes, viaticos) y calcular rentabilidad preliminar.
**Criterios de Aceptacion:**
1. Al cerrar viaje, el sistema:
- Marca costos como "cerrados" (no editables)
- Suma total de costos del viaje
- Calcula margen vs precio cotizado
- Genera registro de cierre con snapshot de valores
2. El cierre puede revertirse solo con autorizacion especial
3. El sistema genera alerta si margen es negativo
4. El viaje cerrado pasa a estado "LISTO_FACTURAR"
5. El sistema notifica a facturacion que hay viaje listo
**Mapeo a DDL:**
- Tabla: `cierres_viaje`
- Campos: viaje_id, fecha_cierre, usuario_cierre, total_costos, total_ingresos, margen, status
**Endpoints Requeridos:**
- `POST /api/v1/viajes/:id/cerrar` - Cerrar viaje
- `POST /api/v1/viajes/:id/reabrir` - Reabrir viaje (admin)
- `GET /api/v1/viajes/:id/rentabilidad` - Consultar rentabilidad
**Prioridad:** Alta
---
## Requerimientos No Funcionales
### RNF-001: Performance App Movil
La captura de POD debe completarse en menos de 30 segundos incluyendo firma y fotos.
### RNF-002: Disponibilidad Offline
El modulo debe funcionar sin conexion, almacenando datos localmente hasta 72 horas.
### RNF-003: Compresion de Imagenes
Las fotos deben comprimirse a max 500KB antes de sincronizar.
### RNF-004: Seguridad
La firma digital debe almacenarse cifrada y ser verificable contra el registro de entrega.
### RNF-005: Auditoria
Todos los eventos de POD deben registrarse en log de auditoria con usuario, timestamp y coordenadas.
---
## Validaciones de Negocio
| Validacion | Descripcion | Accion si falla |
|------------|-------------|-----------------|
| POD_001 | Firma no puede estar vacia | Rechazar POD |
| POD_002 | Receptor nombre obligatorio | Rechazar POD |
| POD_003 | GPS dentro de geocerca destino | Warning, permitir con nota |
| POD_004 | Tiempos en secuencia logica | Rechazar si arribo > descarga |
| POD_005 | Viaje en estado EN_DESTINO | No permitir captura |
---
## Matriz de Trazabilidad
| RF | Tabla DDL | Entity | Endpoint | US |
|----|-----------|--------|----------|---|
| RF-4.7.1 | pod | POD | POST /api/v1/pod | US-MAI007-001, US-MAI007-003 |
| RF-4.7.2 | excepciones_pod | ExcepcionPOD | POST /viajes/:id/cierre-excepcion | US-MAI007-005 |
| RF-4.7.3 | tiempos_reales | TiempoReal | POST /api/v1/tiempos-reales | US-MAI007-002 |
| RF-4.7.4 | cierres_viaje | CierreViaje | POST /viajes/:id/cerrar | US-MAI007-004 |
---
*MAI-007 REQUERIMIENTOS - ERP Transportistas - Sistema SIMCO v4.0.0*