docs: Add MAI-009 (Facturación) and MAI-010 (Liquidaciones) specifications

MAI-009 Facturación Transporte (31 SP):
- README, REQUERIMIENTOS (7 RF), RESUMEN-EPICA
- 5 User Stories: generación factura, recargos, CFDI/Carta Porte,
  conciliación/pagos, estados de cuenta

MAI-010 Liquidaciones (31 SP):
- README, REQUERIMIENTOS (6 RF), RESUMEN-EPICA
- 5 User Stories: esquemas pago, cálculo por viaje, viáticos,
  deducciones, generar/autorizar liquidación

Part of Phase 2 - P0 Critical Modules specification

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Adrian Flores Cortes 2026-01-27 02:05:03 -06:00
parent 9caeae936a
commit 569eaeb5a4
16 changed files with 3550 additions and 0 deletions

View File

@ -0,0 +1,207 @@
# MAI-009: Facturación de Transporte
**Version:** 1.0.0
**Fecha:** 2026-01-27
**Estado:** Diseño
**Prioridad:** P1 (Crítico - Monetización)
---
## Descripción General
El módulo de Facturación de Transporte es responsable de generar facturas CFDI por los servicios de transporte, aplicando tarifas, recargos y conectando con evidencias de entrega (POD).
**Problema que resuelve:**
- Facturación manual lenta y propensa a errores
- Recargos (demoras, fuel surcharge) no capturados
- Falta de trazabilidad factura → viaje → POD
- Conciliación difícil entre cotizado vs facturado vs cobrado
- Aging de cartera sin visibilidad
---
## Objetivos del Módulo
1. **Factura automatizada:** Generar facturas desde viajes cerrados con POD
2. **Recargos automáticos:** Aplicar fuel surcharge, detention, maniobras
3. **Trazabilidad completa:** Vincular factura con viajes, POD y evidencias
4. **CFDI timbrado:** Integración con PAC para factura electrónica
5. **Gestión de cobranza:** Estados de cuenta, aging, pagos
---
## Alcance Funcional
### Incluido
- Facturación por viaje, por embarque o por OT
- Cálculo automático de recargos (fuel, detention, etc.)
- Integración con POD para adjuntar evidencias
- Timbrado CFDI via PAC
- Complemento Carta Porte (MAE-016)
- Estados de cuenta por cliente
- Registro de pagos y aging de cartera
### Excluido
- Cobranza judicial (CRM/Legal)
- Contabilidad detallada (módulo financiero erp-core)
- Carta Porte como documento independiente (MAE-016)
---
## Actores
| Actor | Rol en el módulo |
|-------|------------------|
| Facturador | Crea y emite facturas |
| Contador | Revisa, aprueba, concilia |
| Cobranza | Seguimiento de pagos, aging |
| Cliente | Recibe factura, realiza pagos |
| Sistema PAC | Timbra CFDI |
---
## Flujo Principal
```
VIAJES CERRADOS (con POD)
┌─────────────────────────────────────────┐
│ 1. SELECCIONAR VIAJES A FACTURAR │
│ - Filtrar por cliente/periodo │
│ - Viajes con POD pendientes facturar │
│ - Selección individual o masiva │
└────────────────────┬────────────────────┘
┌─────────────────────────────────────────┐
│ 2. GENERAR BORRADOR DE FACTURA │
│ - Líneas automáticas desde viajes │
│ - Aplicar tarifa de cada viaje │
│ - Calcular subtotales │
└────────────────────┬────────────────────┘
┌─────────────────────────────────────────┐
│ 3. APLICAR RECARGOS │
│ - Fuel surcharge automático │
│ - Detention si aplica │
│ - Maniobras, escoltas, etc. │
└────────────────────┬────────────────────┘
┌─────────────────────────────────────────┐
│ 4. REVISAR Y AJUSTAR │
│ - Verificar montos │
│ - Aplicar descuento (si autorizado) │
│ - Agregar notas/observaciones │
└────────────────────┬────────────────────┘
┌─────────────────────────────────────────┐
│ 5. TIMBRAR CFDI │
│ - Generar XML con datos fiscales │
│ - Incluir complemento Carta Porte │
│ - Enviar a PAC │
│ - Recibir UUID y sellos │
└────────────────────┬────────────────────┘
┌─────────────────────────────────────────┐
│ 6. ENVIAR AL CLIENTE │
│ - Email con PDF + XML │
│ - Publicar en portal cliente │
│ - Adjuntar POD si requiere │
└────────────────────┬────────────────────┘
┌─────────────────────────────────────────┐
│ 7. SEGUIMIENTO DE COBRANZA │
│ - Registrar pagos │
│ - Alertas de vencimiento │
│ - Estados de cuenta │
└─────────────────────────────────────────┘
```
---
## Datos del Módulo
### Entidades Principales
| Entidad | Descripción | Estado |
|---------|-------------|--------|
| Lane | Ruta origen-destino | IMPLEMENTADA |
| Tarifa | Precio por lane/servicio | IMPLEMENTADA |
| RecargoCatalogo | Tipos de recargos | IMPLEMENTADA |
| FacturaTransporte | Factura CFDI | IMPLEMENTADA |
| LineaFactura | Conceptos facturados | IMPLEMENTADA |
| FuelSurcharge | Índice de combustible | IMPLEMENTADA |
Ver archivo: [ENTITIES.md](./ENTITIES.md)
---
## Requerimientos Funcionales
Ver archivo: [REQUERIMIENTOS.md](./REQUERIMIENTOS.md)
---
## Integración con PAC
| PAC | Tipo | Uso |
|-----|------|-----|
| Finkok | Primario | Timbrado, cancelación |
| SW Sapien | Respaldo | Failover |
### Servicios requeridos:
- Timbrado de CFDI 4.0
- Complemento Carta Porte 3.1
- Cancelación de CFDI
- Consulta de estatus
---
## Métricas del Módulo
| KPI | Fórmula | Meta |
|-----|---------|------|
| Días a facturar | Avg(fecha_factura - fecha_pod) | <3 días |
| Recargos capturados | % viajes con recargos aplicados | >95% |
| Facturas rechazadas | % facturas con error PAC | <2% |
| DSO | Días promedio de cobranza | <45 días |
---
## Dependencias
### Este módulo depende de:
- MAI-007 (POD): Viajes cerrados con evidencia
- MAI-002 (Tarifas): Precios y recargos
- MAE-016 (Carta Porte): Complemento CFDI
- erp-core/partners: Datos fiscales del cliente
### Otros módulos dependen de este:
- erp-core/financial: Conciliación contable
- MAI-015 (Portal Cliente): Consulta de facturas
---
## Historias de Usuario
Ver carpeta: [historias-usuario/](./historias-usuario/)
| US | Título | Prioridad |
|----|--------|-----------|
| US-MAI009-001 | Generar factura desde viajes | Alta |
| US-MAI009-002 | Aplicar recargos automáticos | Alta |
| US-MAI009-003 | Timbrar CFDI con Carta Porte | Alta |
| US-MAI009-004 | Gestionar conciliación y pagos | Media |
| US-MAI009-005 | Generar estados de cuenta | Media |
---
*Módulo MAI-009 - ERP Transportistas - Sistema SIMCO v4.0.0*

View File

@ -0,0 +1,234 @@
# REQUERIMIENTOS.md - MAI-009: Facturación de Transporte
**Version:** 1.0.0
**Fecha:** 2026-01-27
**Fuente:** REQ-GIRO-TRANSPORTISTA.md - Sección 4.8
---
## Requerimientos Funcionales
### RF-4.8.1: Factura por Viaje/Embarque/OT
**Descripción:**
El sistema debe permitir configurar si la facturación se realiza por viaje individual, por embarque (grupo de OTs), o por OT específica.
**Criterios de Aceptación:**
1. Configuración por cliente: facturar por viaje, embarque u OT
2. Selección de viajes cerrados (con POD) pendientes de facturar
3. Facturación masiva de múltiples viajes en una sola factura
4. Facturación individual (una factura por viaje)
5. Agrupación automática por periodo (semanal, quincenal, mensual)
6. Generación de borrador editable antes de timbrar
**Mapeo a DDL:**
- Tabla: `billing.facturas_transporte`
- Tabla: `billing.lineas_factura`
- Vista: `v_viajes_por_facturar`
**Endpoints Requeridos:**
- `GET /api/v1/facturacion/viajes-pendientes` - Listar viajes a facturar
- `POST /api/v1/facturas` - Crear factura
- `GET /api/v1/facturas/:id` - Obtener factura
- `PUT /api/v1/facturas/:id` - Actualizar borrador
**Prioridad:** Alta
---
### RF-4.8.2: Cálculo Automático de Recargos
**Descripción:**
El sistema debe calcular y aplicar automáticamente los recargos correspondientes: fuel surcharge, demoras (detention) por tiempos reales, reentregas, cambios de destino.
**Criterios de Aceptación:**
1. Fuel surcharge: aplicar % vigente sobre tarifa base
2. Detention en carga: calcular si tiempo real > tolerancia
3. Detention en descarga: calcular si tiempo real > tolerancia
4. Reentrega: aplicar cargo si hubo reexpedición
5. Cambio de destino: calcular diferencial de tarifa
6. Mostrar desglose de cada recargo en la factura
7. Permitir ajustar o eliminar recargos con justificación
**Mapeo a DDL:**
- Tabla: `billing.recargos_catalogo`
- Tabla: `billing.fuel_surcharge`
- Tabla: `billing.lineas_factura` (con recargoId)
**Endpoints Requeridos:**
- `POST /api/v1/facturas/:id/calcular-recargos` - Calcular recargos
- `PUT /api/v1/facturas/:id/lineas/:lineaId` - Ajustar línea
- `DELETE /api/v1/facturas/:id/lineas/:lineaId` - Eliminar línea
**Prioridad:** Alta
---
### RF-4.8.3: Integración con POD
**Descripción:**
El sistema debe anexar el POD y evidencias de entrega a la factura/expediente digital para soporte de cobranza.
**Criterios de Aceptación:**
1. Vincular factura con viajes y sus PODs
2. Incluir URL de evidencias (fotos, firma) en factura
3. Generar expediente digital con: factura PDF, XML, POD, carta porte
4. Enviar expediente completo al cliente
5. POD disponible para descarga desde portal cliente
**Mapeo a DDL:**
- Tabla: `billing.facturas_transporte` (viajeIds, otIds)
- Relación con: `tracking.pods`
**Endpoints Requeridos:**
- `GET /api/v1/facturas/:id/expediente` - Obtener expediente
- `GET /api/v1/facturas/:id/expediente/zip` - Descargar ZIP
**Prioridad:** Alta
---
### RF-4.8.4: Conciliación
**Descripción:**
El sistema debe permitir comparar: cotización original vs factura emitida vs monto cobrado, para identificar diferencias y ajustes.
**Criterios de Aceptación:**
1. Mostrar comparativo: cotizado vs facturado
2. Identificar diferencias (recargos no cotizados, descuentos aplicados)
3. Registrar ajustes con justificación
4. Generar notas de crédito/débito cuando aplique
5. Dashboard de conciliación por periodo
**Mapeo a DDL:**
- Vista: `v_conciliacion_facturas`
- Tabla: `billing.notas_credito_debito`
**Endpoints Requeridos:**
- `GET /api/v1/facturacion/conciliacion` - Reporte de conciliación
- `POST /api/v1/notas` - Crear nota de crédito/débito
**Prioridad:** Media
---
### RF-4.8.5: Estados de Cuenta por Cliente
**Descripción:**
El sistema debe generar estados de cuenta con: viajes, cargos, abonos, notas, y análisis de antigüedad de saldos (aging).
**Criterios de Aceptación:**
1. Estado de cuenta por cliente con periodo seleccionable
2. Mostrar: facturas emitidas, notas, pagos recibidos, saldo
3. Análisis de aging: corriente, 30 días, 60 días, 90 días, +90 días
4. Alertas de facturas próximas a vencer
5. Exportar a PDF y Excel
6. Envío automático periódico al cliente
**Mapeo a DDL:**
- Vista: `v_estado_cuenta_cliente`
- Vista: `v_aging_cartera`
**Endpoints Requeridos:**
- `GET /api/v1/clientes/:id/estado-cuenta` - Estado de cuenta
- `GET /api/v1/facturacion/aging` - Reporte de aging
- `POST /api/v1/clientes/:id/estado-cuenta/enviar` - Enviar por email
**Prioridad:** Media
---
### RF-4.8.6: Timbrado CFDI
**Descripción:**
El sistema debe generar el CFDI 4.0 con complemento Carta Porte 3.1 y timbrarlo mediante PAC autorizado.
**Criterios de Aceptación:**
1. Generar XML CFDI 4.0 con datos fiscales
2. Incluir complemento Carta Porte (MAE-016)
3. Enviar a PAC para timbrado
4. Recibir y almacenar UUID, sello digital, cadena original
5. Generar PDF representación impresa
6. Manejar errores de validación SAT
7. Proceso de cancelación con motivo
**Mapeo a DDL:**
- Tabla: `billing.facturas_transporte` (uuidCfdi, xmlCfdi)
**Endpoints Requeridos:**
- `POST /api/v1/facturas/:id/timbrar` - Timbrar CFDI
- `POST /api/v1/facturas/:id/cancelar` - Cancelar CFDI
- `GET /api/v1/facturas/:id/pdf` - Obtener PDF
- `GET /api/v1/facturas/:id/xml` - Obtener XML
**Prioridad:** Alta
---
### RF-4.8.7: Registro de Pagos
**Descripción:**
El sistema debe permitir registrar pagos parciales o totales y actualizar el estado de la factura.
**Criterios de Aceptación:**
1. Registrar pago con: monto, fecha, referencia, método
2. Soportar pagos parciales con saldo pendiente
3. Marcar factura como PAGADA cuando saldo = 0
4. Generar complemento de pago si aplica (PPD)
5. Conciliar con movimientos bancarios (opcional)
**Mapeo a DDL:**
- Tabla: `billing.pagos_factura`
- Tabla: `billing.facturas_transporte` (montoPagado, fechaPago)
**Endpoints Requeridos:**
- `POST /api/v1/facturas/:id/pagos` - Registrar pago
- `GET /api/v1/facturas/:id/pagos` - Historial de pagos
**Prioridad:** Alta
---
## Requerimientos No Funcionales
### RNF-001: Integración PAC
El sistema debe soportar al menos 2 PACs con failover automático.
### RNF-002: Performance
La generación de factura (sin timbrado) debe completarse en <5 segundos.
### RNF-003: Retención
Los CFDIs deben almacenarse por al menos 5 años según normativa SAT.
### RNF-004: Disponibilidad
El proceso de timbrado debe tener 99.5% de disponibilidad.
---
## Validaciones de Negocio
| Validación | Descripción | Acción si falla |
|------------|-------------|-----------------|
| FAC_001 | Viaje con POD válido | Bloquear facturación |
| FAC_002 | Datos fiscales cliente completos | Alertar, bloquear timbrado |
| FAC_003 | Carta Porte completa si aplica | Bloquear timbrado |
| FAC_004 | Tarifa vigente aplicada | Alertar si tarifa vencida |
| FAC_005 | Fuel surcharge actualizado | Alertar si >30 días |
---
## Matriz de Trazabilidad
| RF | Tabla DDL | Entity | Endpoint | US |
|----|-----------|--------|----------|---|
| RF-4.8.1 | facturas_transporte | FacturaTransporte | /facturas | US-MAI009-001 |
| RF-4.8.2 | lineas_factura | LineaFactura | /facturas/:id/lineas | US-MAI009-002 |
| RF-4.8.3 | facturas_transporte | FacturaTransporte | /facturas/:id/expediente | US-MAI009-001 |
| RF-4.8.4 | v_conciliacion | - | /facturacion/conciliacion | US-MAI009-004 |
| RF-4.8.5 | v_estado_cuenta | - | /clientes/:id/estado-cuenta | US-MAI009-005 |
| RF-4.8.6 | facturas_transporte | FacturaTransporte | /facturas/:id/timbrar | US-MAI009-003 |
| RF-4.8.7 | pagos_factura | PagoFactura | /facturas/:id/pagos | US-MAI009-004 |
---
*MAI-009 REQUERIMIENTOS - ERP Transportistas - Sistema SIMCO v4.0.0*

View File

@ -0,0 +1,242 @@
# RESUMEN-EPICA.md - MAI-009: Facturación de Transporte
**Código:** MAI-009
**Nombre:** Facturación de Transporte
**Version:** 1.0.0
**Fecha:** 2026-01-27
---
## Valor de Negocio
### Problema
Las empresas transportistas pierden dinero por:
- Facturación tardía (servicios olvidados, efectivo atrasado)
- Recargos no capturados (fuel, detention) = ingreso perdido
- Errores en timbrado que retrasan cobranza
- Falta de visibilidad en cartera (quién debe, cuánto, hace cuánto)
- Expedientes incompletos que dificultan cobranza
### Solución
Un módulo de facturación que:
- Genera facturas automáticamente desde viajes cerrados
- Calcula y aplica recargos según reglas configuradas
- Timbra CFDI con Carta Porte en un clic
- Genera expediente completo (factura + POD + evidencias)
- Proporciona visibilidad de cartera y aging
### Beneficios Esperados
| Beneficio | Métrica | Impacto |
|-----------|---------|---------|
| Facturación rápida | -80% tiempo de facturación | Flujo de efectivo |
| Recargos capturados | +15% ingresos por recargos | Rentabilidad |
| Menos errores | -90% rechazos de CFDI | Productividad |
| Cobranza efectiva | -10 días DSO | Capital de trabajo |
---
## Actores y Stakeholders
### Usuarios Primarios
| Actor | Responsabilidad | Frecuencia |
|-------|-----------------|------------|
| Facturador | Genera y emite facturas | Diaria |
| Contador | Revisa, concilia, registra pagos | Diaria |
| Cobranza | Seguimiento de cartera | Diaria |
### Usuarios Secundarios
| Actor | Interés |
|-------|---------|
| Gerente Finanzas | Reportes de facturación y cobranza |
| Cliente | Recibe facturas, consulta estado de cuenta |
| Auditor | Revisión de expedientes fiscales |
---
## Flujo Principal
```
┌─────────────────────────────────────────────────────────────────┐
│ VIAJES CERRADOS (con POD) │
│ (Listos para facturar desde MAI-007) │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 1. SELECCIONAR VIAJES (Facturador) │
│ │
│ Cliente: [Distribuidora ABC ▼] │
│ Periodo: [01-ene-2026] al [15-ene-2026] │
│ │
│ ☑ VJE-0120 | CDMX→GDL | $12,500 | POD: 2026-01-05 ✓ │
│ ☑ VJE-0125 | CDMX→MTY | $18,200 | POD: 2026-01-08 ✓ │
│ ☑ VJE-0128 | CDMX→GDL | $12,500 | POD: 2026-01-12 ✓ │
│ ☐ VJE-0130 | GDL→TIJ | $25,000 | POD: Pendiente ⚠ │
│ │
│ Total seleccionado: 3 viajes | $43,200 │
│ │
│ [Generar Factura] │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 2. BORRADOR DE FACTURA │
│ │
│ Factura: BORRADOR (sin serie/folio) │
│ Cliente: Distribuidora ABC S.A. de C.V. │
│ RFC: DAB850101XXX │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ CONCEPTOS │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ #1 | Servicio de transporte CDMX→GDL │ │
│ │ Viaje: VJE-0120 | Caja seca 53' │ │
│ │ Cantidad: 1 | P.U.: $12,500.00 | Importe: $12,500 │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ #2 | Servicio de transporte CDMX→MTY │ │
│ │ Viaje: VJE-0125 | Caja seca 53' │ │
│ │ Cantidad: 1 | P.U.: $18,200.00 | Importe: $18,200 │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ #3 | Servicio de transporte CDMX→GDL │ │
│ │ Viaje: VJE-0128 | Caja seca 53' │ │
│ │ Cantidad: 1 | P.U.: $12,500.00 | Importe: $12,500 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ [+ Agregar concepto] Subtotal: $43,200.00 │
│ │
│ [Calcular Recargos] │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 3. RECARGOS APLICADOS │
│ │
│ RECARGOS AUTOMÁTICOS: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ #4 | Fuel Surcharge (8%) │ │
│ │ Sobre viajes 1-3 │ │
│ │ Cantidad: 1 | P.U.: $3,456.00 | Importe: $3,456 │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ #5 | Detention en descarga (VJE-0125) │ │
│ │ 3 hrs extra @ $350/hr │ │
│ │ Cantidad: 3 | P.U.: $350.00 | Importe: $1,050 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ RESUMEN │
│ Subtotal servicios: $43,200.00 │
│ Subtotal recargos: $4,506.00 │
│ Subtotal: $47,706.00 │
│ IVA (16%): $7,632.96 │
│ ───────────────────────────────────────── │
│ TOTAL: $55,338.96 MXN │
│ │
│ [Editar] [Vista previa PDF] [Timbrar CFDI] │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 4. CFDI TIMBRADO │
│ │
│ ✓ FACTURA TIMBRADA EXITOSAMENTE │
│ │
│ Serie: A | Folio: 00456 │
│ UUID: 6ba7b810-9dad-11d1-80b4-00c04fd430c8 │
│ Fecha timbrado: 2026-01-27 14:32:15 │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ EXPEDIENTE DIGITAL │
│ 📄 A-00456.pdf (Factura) [Descargar] │
│ 📄 A-00456.xml (CFDI) [Descargar] │
│ 📄 POD-VJE-0120.pdf [Descargar] │
│ 📄 POD-VJE-0125.pdf [Descargar] │
│ 📄 POD-VJE-0128.pdf [Descargar] │
│ │
│ [Descargar todo ZIP] [Enviar al cliente] │
│ │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ FACTURA EMITIDA │
│ → Pendiente de pago │
│ → Visible en portal cliente │
└─────────────────────────────────────────────────────────────────┘
```
---
## Criterios de Éxito
### Funcionales
- [ ] Facturación por viaje/embarque/OT configurable
- [ ] Cálculo automático de recargos
- [ ] Timbrado CFDI con Carta Porte
- [ ] Expediente digital completo
- [ ] Registro de pagos y aging
- [ ] Estados de cuenta por cliente
### Técnicos
- [ ] Integración con 2 PACs
- [ ] Failover automático
- [ ] Almacenamiento de XML 5 años
- [ ] Performance <5 segundos generación
### Negocio
- [ ] <3 días entre POD y factura
- [ ] >95% recargos capturados
- [ ] <2% facturas rechazadas
- [ ] DSO <45 días
---
## Riesgos y Mitigaciones
| Riesgo | Probabilidad | Impacto | Mitigación |
|--------|--------------|---------|------------|
| PAC no disponible | Media | Alto | Segundo PAC de respaldo |
| Error en Carta Porte | Media | Alto | Validación previa al timbrado |
| Datos fiscales incorrectos | Media | Medio | Validación de RFC |
| Recargos no aplicados | Alta | Alto | Cálculo automático obligatorio |
---
## Dependencias
### Prerequisitos
- MAI-007 (POD): Viajes cerrados con POD
- MAI-002 (Tarifas): Tarifas y recargos configurados
- MAE-016 (Carta Porte): Complemento fiscal
- erp-core/partners: Datos fiscales
### Habilita
- erp-core/financial: Contabilidad
- MAI-015 (Portal): Consulta de facturas
---
## Story Points Estimados
| Historia | Complejidad | SP |
|----------|-------------|---|
| US-MAI009-001 | Alta | 8 |
| US-MAI009-002 | Media | 5 |
| US-MAI009-003 | Alta | 8 |
| US-MAI009-004 | Media | 5 |
| US-MAI009-005 | Media | 5 |
| **Total** | | **31** |
---
*Épica MAI-009 - ERP Transportistas - Sistema SIMCO v4.0.0*

View File

@ -0,0 +1,187 @@
# US-MAI009-001: Generar factura desde viajes
**ID:** US-MAI009-001
**Módulo:** MAI-009 (Facturación Transporte)
**Prioridad:** Alta
**Story Points:** 8
---
## Historia de Usuario
**Como** facturador
**Quiero** generar facturas seleccionando los viajes cerrados de un cliente
**Para** cobrar los servicios de transporte de manera rápida y precisa
---
## Criterios de Aceptación
### CA-001: Listar viajes pendientes de facturar
**Dado** que hay viajes cerrados con POD
**Cuando** filtro por cliente y periodo
**Entonces** veo la lista de viajes sin facturar con sus montos
### CA-002: Selección múltiple de viajes
**Dado** que veo la lista de viajes
**Cuando** selecciono varios viajes
**Entonces** puedo generar una factura que los agrupe
### CA-003: Factura individual por viaje
**Dado** que el cliente requiere facturas separadas
**Cuando** selecciono "Facturar individualmente"
**Entonces** se genera una factura por cada viaje seleccionado
### CA-004: Generar borrador editable
**Dado** que seleccioné los viajes
**Cuando** genero la factura
**Entonces** se crea un borrador con líneas automáticas que puedo editar
### CA-005: Líneas automáticas desde tarifa
**Dado** que cada viaje tiene una tarifa aplicada
**Cuando** se genera el borrador
**Entonces** cada línea refleja el precio del viaje según su tarifa
### CA-006: Vincular con POD y evidencias
**Dado** que la factura incluye viajes
**Cuando** consulto el expediente
**Entonces** puedo ver/descargar los POD de cada viaje incluido
---
## Mockup / UI
```
┌─────────────────────────────────────────────────────────────────┐
│ FACTURACIÓN - SELECCIONAR VIAJES [+ Nueva]│
├─────────────────────────────────────────────────────────────────┤
│ │
│ Cliente: [Distribuidora ABC ▼] │
│ Periodo: [01-ene-2026] al [31-ene-2026] [Buscar] │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ VIAJES PENDIENTES DE FACTURAR │
│ │
│ [☑ Seleccionar todos] │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ ☑ VJE-0120 | 05-ene-2026 │ │
│ │ CDMX → Guadalajara | Caja seca 53' │ │
│ │ Tarifa: $12,500.00 | POD: ✓ 05-ene-2026 14:30 │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ ☑ VJE-0125 | 08-ene-2026 │ │
│ │ CDMX → Monterrey | Caja seca 53' │ │
│ │ Tarifa: $18,200.00 | POD: ✓ 08-ene-2026 16:45 │ │
│ │ ⚠ Detention: 3 hrs extra en descarga │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ ☑ VJE-0128 | 12-ene-2026 │ │
│ │ CDMX → Guadalajara | Caja seca 53' │ │
│ │ Tarifa: $12,500.00 | POD: ✓ 12-ene-2026 11:20 │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ ☐ VJE-0130 | 14-ene-2026 │ │
│ │ Guadalajara → Tijuana | Caja seca 53' │ │
│ │ Tarifa: $25,000.00 | POD: ⏳ PENDIENTE │ │
│ │ (No disponible - sin POD) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ RESUMEN DE SELECCIÓN │
│ Viajes seleccionados: 3 │
│ Subtotal tarifas: $43,200.00 │
│ + Recargos estimados: $4,506.00 (fuel + detention) │
│ Total estimado: $47,706.00 + IVA │
│ │
│ Tipo de facturación: │
│ (●) Una factura con todos los viajes │
│ ( ) Una factura por cada viaje │
│ │
│ [Cancelar] [Generar Borrador] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Borrador de Factura
```
┌─────────────────────────────────────────────────────────────────┐
│ FACTURA BORRADOR ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Estado: BORRADOR │
│ │
│ DATOS DEL CLIENTE │
│ Cliente: Distribuidora ABC S.A. de C.V. │
│ RFC: DAB850101XXX │
│ Uso CFDI: [G03 - Gastos en general ▼] │
│ Método pago: [PUE - Pago en una exhibición▼] │
│ Forma pago: [03 - Transferencia ▼] │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ CONCEPTOS [+ Agregar]│
│ │
│ | # | Descripción | Cant | P.U. | Importe |│
│ |---|--------------------------|------|-----------|----------|│
│ | 1 | Transporte CDMX→GDL | 1 | $12,500.00| $12,500 |│
│ | | VJE-0120 | | | [🗑] |│
│ |---|--------------------------|------|-----------|----------|│
│ | 2 | Transporte CDMX→MTY | 1 | $18,200.00| $18,200 |│
│ | | VJE-0125 | | | [🗑] |│
│ |---|--------------------------|------|-----------|----------|│
│ | 3 | Transporte CDMX→GDL | 1 | $12,500.00| $12,500 |│
│ | | VJE-0128 | | | [🗑] |│
│ |---|--------------------------|------|-----------|----------|│
│ │
│ Subtotal: $43,200.00 │
│ │
│ [Calcular Recargos] │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ Observaciones: │
│ [Servicios de transporte enero 2026 ]│
│ │
│ [Guardar borrador] [Vista previa] [Continuar →] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Estados de Factura
| Estado | Descripción | Acciones permitidas |
|--------|-------------|---------------------|
| BORRADOR | En edición | Editar, eliminar, agregar líneas |
| EMITIDA | Timbrada CFDI | Ver, descargar, enviar, cancelar |
| ENVIADA | Enviada al cliente | Ver, registrar pago |
| PAGADA | Saldo = 0 | Ver |
| PARCIAL | Pago parcial | Registrar pago |
| VENCIDA | Pasó fecha vencimiento | Registrar pago, enviar recordatorio |
| CANCELADA | Cancelada SAT | Ver |
---
## Notas Técnicas
- Endpoint: `POST /api/v1/facturas` para crear borrador
- Los viajes se vinculan via `viajeIds[]`
- Las líneas se generan con clave SAT: 78101500 (Transporte de carga)
- El expediente se genera bajo demanda con todos los PDFs
---
## Definición de Done
- [ ] Listado de viajes pendientes de facturar
- [ ] Filtro por cliente y periodo
- [ ] Selección múltiple de viajes
- [ ] Generación de borrador con líneas automáticas
- [ ] Facturación individual o agrupada
- [ ] Vinculación con POD
- [ ] Tests de generación de factura

View File

@ -0,0 +1,196 @@
# US-MAI009-002: Aplicar recargos automáticos
**ID:** US-MAI009-002
**Módulo:** MAI-009 (Facturación Transporte)
**Prioridad:** Alta
**Story Points:** 5
---
## Historia de Usuario
**Como** facturador
**Quiero** que el sistema calcule y aplique automáticamente los recargos correspondientes
**Para** no olvidar cobrar fuel surcharge, demoras y otros cargos adicionales
---
## Criterios de Aceptación
### CA-001: Calcular fuel surcharge
**Dado** que existe un índice de fuel surcharge vigente
**Cuando** calculo recargos en la factura
**Entonces** se aplica el % correspondiente sobre el subtotal de tarifas
### CA-002: Calcular detention en carga
**Dado** que un viaje tuvo tiempo excedido en carga
**Cuando** calculo recargos
**Entonces** se aplica cargo por horas extra según tolerancia configurada
### CA-003: Calcular detention en descarga
**Dado** que un viaje tuvo tiempo excedido en descarga
**Cuando** calculo recargos
**Entonces** se aplica cargo por horas extra según tolerancia configurada
### CA-004: Mostrar desglose de recargos
**Dado** que se aplicaron recargos
**Cuando** veo la factura
**Entonces** cada recargo aparece como línea separada con descripción clara
### CA-005: Permitir ajustar recargos
**Dado** que hay recargos calculados
**Cuando** necesito ajustar uno
**Entonces** puedo modificar el monto o eliminar la línea con justificación
### CA-006: Recargos manuales
**Dado** que hay cargos adicionales no automáticos
**Cuando** necesito agregarlos
**Entonces** puedo seleccionar del catálogo y especificar monto
---
## Mockup / UI
```
┌─────────────────────────────────────────────────────────────────┐
│ CALCULAR RECARGOS ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Factura: BORRADOR | Subtotal servicios: $43,200.00 │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ RECARGOS AUTOMÁTICOS │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ ✓ FUEL SURCHARGE │ │
│ │ Índice vigente: 8% (desde 15-ene-2026) │ │
│ │ Base de cálculo: $43,200.00 │ │
│ │ Monto: $3,456.00 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ ✓ DETENTION DESCARGA (VJE-0125) │ │
│ │ Tiempo real: 4.5 horas | Tolerancia: 1.5 horas │ │
│ │ Horas extra: 3 @ $350/hr │ │
│ │ Monto: $1,050.00 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ RECARGOS MANUALES [+ Agregar]│
│ │
│ (No hay recargos manuales) │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ RESUMEN │
│ Subtotal servicios: $43,200.00 │
│ Total recargos: $4,506.00 │
│ ───────────────────────────────────────── │
│ Nuevo subtotal: $47,706.00 │
│ IVA (16%): $7,632.96 │
│ ───────────────────────────────────────── │
│ TOTAL: $55,338.96 MXN │
│ │
│ [Cancelar] [Aplicar Recargos] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Agregar Recargo Manual
```
┌─────────────────────────────────────────────────────────────────┐
│ AGREGAR RECARGO MANUAL ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Tipo de recargo: [Seleccionar tipo ▼] │
│ ○ MANIOBRAS - Maniobra especial │
│ ○ ESCOLTA - Escolta de seguridad │
│ ○ PERNOCTA - Pernocta de unidad │
│ ○ ESTADIAS - Días extra │
│ ○ FALSO_FLETE - Viaje cancelado │
│ ○ SEGURO_ADICIONAL - Seguro extra │
│ ○ OTRO - Otros │
│ │
│ Viaje relacionado: [VJE-0125 (opcional) ▼] │
│ │
│ Descripción: │
│ [Maniobra de descarga con montacargas especial ] │
│ │
│ Cálculo: │
│ (●) Monto fijo: [$800.00] │
│ ( ) Porcentaje sobre base: [____] % │
│ │
│ [Cancelar] [Agregar Recargo] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Ajustar Recargo
```
┌─────────────────────────────────────────────────────────────────┐
│ AJUSTAR RECARGO ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Recargo: DETENTION DESCARGA (VJE-0125) │
│ Monto calculado: $1,050.00 │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ Acción: │
│ ( ) Mantener monto calculado │
│ (●) Ajustar monto: [$700.00] │
│ ( ) Eliminar recargo │
│ │
│ Justificación (obligatoria si ajusta): │
│ [Acuerdo con cliente: se cobra parcial por ser primera vez ]│
│ │
│ [Cancelar] [Guardar Ajuste] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Tipos de Recargo
| Código | Nombre | Cálculo | Automático |
|--------|--------|---------|------------|
| FUEL | Fuel Surcharge | % sobre subtotal | Sí |
| DETENTION_CARGA | Demora en carga | $/hora extra | Sí |
| DETENTION_DESCARGA | Demora en descarga | $/hora extra | Sí |
| MANIOBRAS | Maniobra especial | Monto fijo | No |
| ESCOLTA | Escolta | Monto fijo | No |
| PERNOCTA | Pernocta | $/noche | No |
| ESTADIAS | Días extra | $/día | No |
| FALSO_FLETE | Viaje cancelado | % de tarifa | No |
| SEGURO_ADICIONAL | Seguro extra | % sobre valor | Condición |
---
## Notas Técnicas
- Endpoint: `POST /api/v1/facturas/:id/calcular-recargos`
- Fuel surcharge se obtiene de `billing.fuel_surcharge` vigente
- Detention se calcula desde datos de `tracking.eventos` (tiempo real)
- Los ajustes se registran en auditoría con justificación
---
## Definición de Done
- [ ] Cálculo automático de fuel surcharge
- [ ] Cálculo de detention desde tiempos reales
- [ ] Agregar recargos manuales del catálogo
- [ ] Ajustar/eliminar recargos con justificación
- [ ] Desglose de recargos en factura
- [ ] Registro de ajustes en auditoría
- [ ] Tests de cálculo de recargos

View File

@ -0,0 +1,235 @@
# US-MAI009-003: Timbrar CFDI con Carta Porte
**ID:** US-MAI009-003
**Módulo:** MAI-009 (Facturación Transporte)
**Prioridad:** Alta
**Story Points:** 8
---
## Historia de Usuario
**Como** facturador
**Quiero** timbrar la factura como CFDI 4.0 con complemento Carta Porte
**Para** cumplir con las obligaciones fiscales y entregar documentos válidos al cliente
---
## Criterios de Aceptación
### CA-001: Validar datos antes de timbrar
**Dado** que tengo un borrador de factura
**Cuando** intento timbrar
**Entonces** el sistema valida: datos fiscales del cliente, líneas correctas, Carta Porte completa
### CA-002: Generar XML CFDI 4.0
**Dado** que los datos son válidos
**Cuando** proceso el timbrado
**Entonces** se genera el XML con estructura CFDI 4.0
### CA-003: Incluir complemento Carta Porte 3.1
**Dado** que los viajes tienen datos de Carta Porte
**Cuando** se genera el XML
**Entonces** incluye el complemento con: ubicaciones, mercancías, autotransporte
### CA-004: Enviar a PAC y recibir respuesta
**Dado** que el XML está listo
**Cuando** se envía al PAC
**Entonces** se recibe: UUID, sello, cadena original, o errores de validación
### CA-005: Manejar errores de validación
**Dado** que el PAC retorna error
**Cuando** veo el resultado
**Entonces** se muestran los errores específicos para corregir
### CA-006: Generar PDF representación impresa
**Dado** que el CFDI fue timbrado
**Cuando** descargo el PDF
**Entonces** incluye: datos fiscales, QR, cadena, sello, complemento CP
---
## Mockup / UI
```
┌─────────────────────────────────────────────────────────────────┐
│ TIMBRAR CFDI ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Factura: BORRADOR | Total: $55,338.96 MXN │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ VALIDACIÓN PREVIA │
│ │
│ DATOS FISCALES │
│ ✓ RFC emisor válido: TRA850101XXX │
│ ✓ RFC receptor válido: DAB850101XXX │
│ ✓ Régimen fiscal configurado │
│ ✓ Uso CFDI seleccionado: G03 │
│ │
│ FACTURA │
│ ✓ Al menos una línea de concepto │
│ ✓ Totales calculados correctamente │
│ ✓ Forma y método de pago seleccionados │
│ │
│ CARTA PORTE (3 viajes) │
│ ✓ VJE-0120: Ubicaciones y mercancías completas │
│ ✓ VJE-0125: Ubicaciones y mercancías completas │
│ ✓ VJE-0128: Ubicaciones y mercancías completas │
│ ✓ Datos de autotransporte completos │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ✅ VALIDACIÓN EXITOSA - Listo para timbrar │
│ │
│ PAC: Finkok (Primario) │
│ Ambiente: [Producción ▼] │
│ │
│ [Cancelar] [🔐 Timbrar CFDI] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Resultado Exitoso
```
┌─────────────────────────────────────────────────────────────────┐
│ ✅ CFDI TIMBRADO EXITOSAMENTE ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ DATOS DEL TIMBRE │
│ │
│ Serie: A │
│ Folio: 00456 │
│ UUID: 6ba7b810-9dad-11d1-80b4-00c04fd430c8 │
│ │
│ Fecha timbrado: 2026-01-27 14:32:15 │
│ PAC: Finkok │
│ Certificado SAT: 00001000000506258000 │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ARCHIVOS GENERADOS │
│ │
│ 📄 A-00456.pdf (Representación impresa) [Descargar] │
│ 📄 A-00456.xml (CFDI timbrado) [Descargar] │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ COMPLEMENTO CARTA PORTE │
│ │
│ IdCCP: CCC000001234567890 │
│ Versión: 3.1 │
│ 3 ubicaciones | 5 mercancías | 1 figura transporte │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ SIGUIENTE PASO │
│ │
│ [Enviar al cliente] [Ver factura] [Nueva factura] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Error de Validación
```
┌─────────────────────────────────────────────────────────────────┐
│ ❌ ERROR AL TIMBRAR ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ El PAC rechazó el CFDI. Corrija los siguientes errores: │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ERRORES SAT │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ ❌ CCE205 - El RFC del receptor no está en la lista LCO│ │
│ │ RFC: DAB850101XXX │ │
│ │ Acción: Verificar RFC correcto del cliente │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ ❌ CCP155 - La clave del producto no es válida │ │
│ │ Línea 2: Clave "99999999" no existe en catálogo │ │
│ │ Acción: Corregir clave de producto SAT │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ Código respuesta PAC: 307 │
│ Mensaje: Documento no válido según esquema XSD │
│ │
│ [Volver a editar] [Reintentar timbrado] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Proceso de Cancelación
```
┌─────────────────────────────────────────────────────────────────┐
│ CANCELAR CFDI ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Factura: A-00456 │
│ UUID: 6ba7b810-9dad-11d1-80b4-00c04fd430c8 │
│ Total: $55,338.96 MXN │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ⚠ ADVERTENCIA │
│ La cancelación de un CFDI tiene implicaciones fiscales. │
│ Una vez cancelada, no se puede revertir. │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ Motivo de cancelación: │
│ [01 - Comprobante emitido con errores con relación▼] │
│ ○ 01 - Con errores con relación │
│ ○ 02 - Con errores sin relación │
│ ○ 03 - No se llevó a cabo la operación │
│ ○ 04 - Operación nominativa relacionada │
│ │
│ UUID que sustituye (si aplica): │
│ [________________________________] │
│ │
│ Justificación interna: │
│ [Error en datos del cliente, se reexpide corregida ] │
│ │
│ [Cancelar operación] [⚠ Cancelar CFDI] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Notas Técnicas
- Integración con PAC Finkok (primario) y SW Sapien (respaldo)
- XML se genera según esquema SAT CFDI 4.0
- Complemento Carta Porte 3.1 se obtiene de MAE-016
- UUID y XML se almacenan en `billing.facturas_transporte`
- PDF se genera con template HTML + puppeteer
- Failover automático si PAC primario falla
---
## Definición de Done
- [ ] Validación previa de datos fiscales
- [ ] Generación de XML CFDI 4.0
- [ ] Inclusión de complemento Carta Porte 3.1
- [ ] Integración con PAC (timbrado)
- [ ] Manejo de errores de validación SAT
- [ ] Generación de PDF representación
- [ ] Proceso de cancelación con motivo
- [ ] Failover a PAC secundario
- [ ] Tests de timbrado y cancelación

View File

@ -0,0 +1,220 @@
# US-MAI009-004: Gestionar conciliación y pagos
**ID:** US-MAI009-004
**Módulo:** MAI-009 (Facturación Transporte)
**Prioridad:** Media
**Story Points:** 5
---
## Historia de Usuario
**Como** encargado de cobranza
**Quiero** registrar los pagos recibidos y conciliar facturas
**Para** mantener actualizado el estado de la cartera y detectar diferencias
---
## Criterios de Aceptación
### CA-001: Registrar pago total
**Dado** que recibí un pago que cubre el total de la factura
**Cuando** registro el pago
**Entonces** la factura se marca como PAGADA y el saldo queda en 0
### CA-002: Registrar pago parcial
**Dado** que recibí un pago menor al saldo
**Cuando** registro el pago parcial
**Entonces** la factura se marca como PARCIAL y se actualiza el saldo pendiente
### CA-003: Pagos múltiples por factura
**Dado** que una factura tiene saldo pendiente
**Cuando** registro nuevos pagos
**Entonces** se acumulan hasta liquidar el total
### CA-004: Comparar cotizado vs facturado
**Dado** que quiero conciliar
**Cuando** consulto una factura
**Entonces** veo comparativo de: monto cotizado, monto facturado, diferencia
### CA-005: Generar nota de crédito/débito
**Dado** que hay diferencias que ajustar
**Cuando** genero una nota
**Entonces** se crea el documento fiscal correspondiente
### CA-006: Dashboard de conciliación
**Dado** que quiero ver el resumen
**Cuando** accedo al dashboard
**Entonces** veo: facturas con diferencias, notas pendientes, montos por conciliar
---
## Mockup / UI
```
┌─────────────────────────────────────────────────────────────────┐
│ REGISTRAR PAGO ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Factura: A-00456 │
│ Cliente: Distribuidora ABC S.A. de C.V. │
│ Total factura: $55,338.96 MXN │
│ Pagos anteriores: $0.00 │
│ Saldo pendiente: $55,338.96 MXN │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ DATOS DEL PAGO │
│ │
│ Fecha de pago: [2026-01-30] │
│ Monto: [$55,338.96] [☑ Pago total] │
│ │
│ Forma de pago: [03 - Transferencia electrónica ▼] │
│ Banco: [BBVA ▼] │
│ Referencia: [REF-2026-01-30-001 ] │
│ │
│ Comprobante: [📎 Seleccionar archivo] │
│ │
│ Notas: │
│ [Transferencia recibida a las 14:30 ]│
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ RESUMEN │
│ Total factura: $55,338.96 │
│ Pago a registrar: -$55,338.96 │
│ Nuevo saldo: $0.00 ✓ │
│ │
│ [Cancelar] [Registrar Pago] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Historial de Pagos
```
┌─────────────────────────────────────────────────────────────────┐
│ HISTORIAL DE PAGOS - Factura A-00456 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Total factura: $55,338.96 | Pagado: $55,338.96 | Saldo: $0.00 │
│ Estado: ✅ PAGADA │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ | Fecha | Monto | Forma | Referencia | │
│ |------------|------------|--------------|---------------| │
│ | 30-ene-26 | $55,338.96 | Transferencia| REF-2026-001 | │
│ | | | BBVA | [Ver comp.] | │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ [Exportar historial] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Conciliación
```
┌─────────────────────────────────────────────────────────────────┐
│ CONCILIACIÓN │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Periodo: [Enero 2026 ▼] Cliente: [Todos ▼] │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ RESUMEN │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ $1.2M │ │ $1.18M │ │ $1.1M │ │ $80K │ │
│ │ Cotizado │ │ Facturado │ │ Cobrado │ │ Pendiente │ │
│ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ FACTURAS CON DIFERENCIAS │
│ │
│ | Factura | Cliente | Cotizado | Facturado | Dif | │
│ |---------|-------------|------------|------------|--------| │
│ | A-00445 | Comercial X | $45,000.00 | $43,500.00 | -$1,500| │
│ | | | Recargo no aplicado | [Ver] | │
│ |---------|-------------|------------|------------|--------| │
│ | A-00448 | Mayorista Y | $28,000.00 | $29,400.00 | +$1,400| │
│ | | | Detention agregado | [Ver] | │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ NOTAS PENDIENTES DE EMITIR │
│ │
│ | Tipo | Factura | Monto | Motivo | Acción | │
│ |---------|---------|----------|------------------|--------| │
│ | Crédito | A-00445 | $1,500 | Recargo omitido | [Emitir]| │
│ │
│ [Exportar reporte] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Nota de Crédito
```
┌─────────────────────────────────────────────────────────────────┐
│ EMITIR NOTA DE CRÉDITO ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Factura relacionada: A-00445 │
│ Cliente: Comercial XYZ S.A. de C.V. │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ TIPO DE NOTA │
│ (●) Nota de crédito (a favor del cliente) │
│ ( ) Nota de débito (a cargo del cliente) │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ CONCEPTOS │
│ │
│ Descripción: [Ajuste por recargo no aplicado en factura orig.]│
│ Monto: [$1,500.00] │
│ IVA: ☑ Incluir IVA ($240.00) │
│ Total nota: $1,740.00 │
│ │
│ Motivo: [Descuento por error en cálculo ▼] │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ [Cancelar] [Generar y Timbrar] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Notas Técnicas
- Tabla: `billing.pagos_factura` para registro de pagos
- Tabla: `billing.notas_credito_debito` para notas
- Vista: `v_conciliacion_facturas` para comparativo
- Complemento de pago (CFDI 4.0) si método es PPD
- Integración opcional con bancos para conciliación automática
---
## Definición de Done
- [ ] Registro de pagos totales y parciales
- [ ] Historial de pagos por factura
- [ ] Actualización de estado de factura
- [ ] Comparativo cotizado vs facturado
- [ ] Generación de notas de crédito/débito
- [ ] Dashboard de conciliación
- [ ] Tests de registro de pagos

View File

@ -0,0 +1,229 @@
# US-MAI009-005: Generar estados de cuenta
**ID:** US-MAI009-005
**Módulo:** MAI-009 (Facturación Transporte)
**Prioridad:** Media
**Story Points:** 5
---
## Historia de Usuario
**Como** encargado de cobranza
**Quiero** generar estados de cuenta con análisis de antigüedad de saldos
**Para** dar seguimiento a la cartera y comunicar claramente los adeudos a los clientes
---
## Criterios de Aceptación
### CA-001: Estado de cuenta por cliente
**Dado** que selecciono un cliente y periodo
**Cuando** genero el estado de cuenta
**Entonces** muestra: facturas emitidas, notas, pagos recibidos, saldo actual
### CA-002: Análisis de aging
**Dado** que hay facturas pendientes
**Cuando** consulto el aging
**Entonces** veo clasificación: corriente, 30, 60, 90, +90 días
### CA-003: Alertas de vencimiento
**Dado** que hay facturas próximas a vencer
**Cuando** consulto la cartera
**Entonces** veo alertas con días para vencimiento
### CA-004: Exportar PDF y Excel
**Dado** que necesito enviar el estado de cuenta
**Cuando** exporto
**Entonces** puedo descargar en formato PDF o Excel
### CA-005: Envío automático
**Dado** que tengo configuración de envío periódico
**Cuando** llega la fecha programada
**Entonces** el sistema envía automáticamente el estado de cuenta por email
### CA-006: Dashboard de cartera
**Dado** que quiero visión general
**Cuando** accedo al dashboard
**Entonces** veo: total por cobrar, aging consolidado, top deudores
---
## Mockup / UI
```
┌─────────────────────────────────────────────────────────────────┐
│ ESTADO DE CUENTA │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Cliente: [Distribuidora ABC ▼] │
│ Periodo: [Todo el histórico ▼] │
│ Al día: [27-ene-2026] [Generar] │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ ESTADO DE CUENTA │ │
│ │ │ │
│ │ Distribuidora ABC S.A. de C.V. │ │
│ │ RFC: DAB850101XXX │ │
│ │ Al 27 de enero de 2026 │ │
│ │ │ │
│ │ ───────────────────────────────────────────────────── │ │
│ │ │ │
│ │ MOVIMIENTOS │ │
│ │ │ │
│ │ | Fecha | Documento | Concepto | Cargo | Abono | Saldo |│
│ │ |--------|-----------|------------------|----------|---------|----------|│
│ │ | 05-ene | A-00420 | Fact. transporte | $32,500 | | $32,500 |│
│ │ | 10-ene | | Pago BBVA ref123 | | $32,500 | $0 |│
│ │ | 15-ene | A-00435 | Fact. transporte | $45,200 | | $45,200 |│
│ │ | 20-ene | A-00456 | Fact. transporte | $55,338 | | $100,538 |│
│ │ | 25-ene | NC-00012 | Nota crédito | | $1,740 | $98,798 |│
│ │ │ │
│ │ ───────────────────────────────────────────────────── │ │
│ │ │ │
│ │ SALDO ACTUAL: $98,798.96 MXN │ │
│ │ │ │
│ │ ───────────────────────────────────────────────────── │ │
│ │ │ │
│ │ ANÁLISIS DE ANTIGÜEDAD │ │
│ │ │ │
│ │ | Rango | Monto | % | │ │
│ │ |-----------|------------|------| │ │
│ │ | Corriente | $55,338.96 | 56% | ████████████ │ │
│ │ | 1-30 días | $43,460.00 | 44% | █████████ │ │
│ │ | 31-60 días| $0.00 | 0% | │ │
│ │ | 61-90 días| $0.00 | 0% | │ │
│ │ | +90 días | $0.00 | 0% | │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ [Descargar PDF] [Descargar Excel] [Enviar por email] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Dashboard de Cartera
```
┌─────────────────────────────────────────────────────────────────┐
│ CARTERA Y COBRANZA │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Periodo: [Enero 2026 ▼] │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ RESUMEN GENERAL │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ $2.5M │ │ $1.8M │ │ $700K │ │
│ │ Facturado │ │ Cobrado │ │ Por cobrar │ │
│ │ este mes │ │ este mes │ │ total │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ AGING DE CARTERA │
│ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ Corriente ████████████████████████████ $420K (60%) │ │
│ │ 1-30 días ████████████████ $180K (26%) │ │
│ │ 31-60 días █████ $60K (9%) │ │
│ │ 61-90 días ██ $25K (4%) │ │
│ │ +90 días █ $15K (2%) │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ TOP 5 DEUDORES │
│ │
│ | # | Cliente | Saldo | Días prom | Acción |│
│ |---|----------------------|------------|-----------|--------|│
│ | 1 | Distribuidora ABC | $98,798 | 12 días | [Ver] |│
│ | 2 | Comercial XYZ | $85,450 | 25 días | [Ver] |│
│ | 3 | Mayorista 123 | $72,300 | 8 días | [Ver] |│
│ | 4 | Retail Partners | $65,000 | 45 días | [Ver] |│
│ | 5 | Logística Norte | $58,200 | 32 días | [Ver] |│
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ FACTURAS PRÓXIMAS A VENCER (7 días) │
│ │
│ | Factura | Cliente | Vence | Monto | Días | │
│ |---------|-----------------|------------|----------|------| │
│ | A-00435 | Distrib. ABC | 28-ene-26 | $45,200 | 1 | │
│ | A-00438 | Comercial XYZ | 30-ene-26 | $32,800 | 3 | │
│ | A-00442 | Mayorista 123 | 02-feb-26 | $28,500 | 6 | │
│ │
│ [Enviar recordatorios masivos] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Configuración de Envío Automático
```
┌─────────────────────────────────────────────────────────────────┐
│ CONFIGURAR ENVÍO AUTOMÁTICO ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Cliente: Distribuidora ABC S.A. de C.V. │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ESTADO DE CUENTA PERIÓDICO │
│ │
│ ☑ Habilitar envío automático │
│ │
│ Frecuencia: [Quincenal ▼] │
│ ○ Semanal (cada lunes) │
│ ○ Quincenal (días 1 y 15) │
│ ○ Mensual (primer día del mes) │
│ │
│ Destinatarios: │
│ [cobranza@distribuidoraabc.com ]│
│ [finanzas@distribuidoraabc.com ]│
│ [+ Agregar destinatario] │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ RECORDATORIOS DE VENCIMIENTO │
│ │
│ ☑ Enviar recordatorio [3] días antes del vencimiento │
│ ☑ Enviar recordatorio el día del vencimiento │
│ ☑ Enviar recordatorio [7] días después de vencida │
│ │
│ [Cancelar] [Guardar configuración]│
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Notas Técnicas
- Vista: `v_estado_cuenta_cliente` para movimientos
- Vista: `v_aging_cartera` para análisis de antigüedad
- Job programado para envío automático de estados de cuenta
- Templates de email configurables por tenant
- Exportación PDF con template HTML + puppeteer
---
## Definición de Done
- [ ] Estado de cuenta por cliente y periodo
- [ ] Análisis de aging (corriente a +90 días)
- [ ] Dashboard de cartera consolidado
- [ ] Top deudores
- [ ] Alertas de vencimiento próximo
- [ ] Exportación PDF y Excel
- [ ] Envío automático programado
- [ ] Tests de generación de reportes

View File

@ -0,0 +1,205 @@
# MAI-010: Liquidaciones a Operadores
**Version:** 1.0.0
**Fecha:** 2026-01-27
**Estado:** Diseño
**Prioridad:** P1 (Crítico - Pago a operadores)
---
## Descripción General
El módulo de Liquidaciones es responsable de calcular y gestionar los pagos a operadores (conductores) propios o terceros, incluyendo viáticos, bonos y deducciones.
**Problema que resuelve:**
- Cálculos manuales de pago propensos a errores
- Viáticos sin control ni comprobación
- Deducciones aplicadas inconsistentemente
- Falta de trazabilidad viaje → pago
- Retrasos en liquidación que afectan relación con operadores
---
## Objetivos del Módulo
1. **Esquemas de pago flexibles:** Por km, por viaje, por porcentaje, por bono
2. **Control de viáticos:** Anticipos, comprobación, sobrantes
3. **Deducciones documentadas:** Multas, daños, faltantes con aprobación
4. **Corte periódico:** Semanal, quincenal con exportación a nómina
5. **Trazabilidad completa:** Cada concepto ligado a viaje específico
---
## Alcance Funcional
### Incluido
- Configuración de esquemas de pago por operador
- Cálculo automático de monto por viaje
- Gestión de viáticos (anticipos y comprobación)
- Registro de deducciones con aprobación
- Bonos por cumplimiento de SLA
- Corte y autorización de liquidaciones
- Exportación a nómina/contabilidad
### Excluido
- Nómina completa (IMSS, ISR, prestaciones)
- Contratos laborales
- Reclutamiento de operadores
---
## Actores
| Actor | Rol en el módulo |
|-------|------------------|
| Operador | Consulta sus viajes y pagos |
| Liquidador | Calcula y procesa liquidaciones |
| Supervisor | Aprueba deducciones y bonos |
| Contador | Exporta a nómina, concilia |
| Sistema | Calcula montos automáticamente |
---
## Flujo Principal
```
VIAJES CERRADOS (con POD)
┌─────────────────────────────────────────┐
│ 1. CALCULAR PAGO POR VIAJE │
│ - Según esquema del operador │
│ - Por km, por viaje, % del flete │
│ - Aplicar bonos si cumplió SLA │
└────────────────────┬────────────────────┘
┌─────────────────────────────────────────┐
│ 2. REGISTRAR VIÁTICOS │
│ - Anticipos entregados │
│ - Comprobación de gastos │
│ - Sobrantes a descontar │
└────────────────────┬────────────────────┘
┌─────────────────────────────────────────┐
│ 3. APLICAR DEDUCCIONES │
│ - Multas de tránsito │
│ - Daños a unidad/carga │
│ - Faltantes de mercancía │
│ - Con aprobación de supervisor │
└────────────────────┬────────────────────┘
┌─────────────────────────────────────────┐
│ 4. GENERAR LIQUIDACIÓN │
│ - Acumular por periodo (semana) │
│ - Desglose de conceptos │
│ - Total a pagar │
└────────────────────┬────────────────────┘
┌─────────────────────────────────────────┐
│ 5. AUTORIZAR Y EXPORTAR │
│ - Revisión por supervisor │
│ - Firma del operador │
│ - Exportar a nómina │
└────────────────────┬────────────────────┘
┌─────────────────────────────────────────┐
│ LIQUIDACIÓN PAGADA │
│ → Registrada en contabilidad │
└─────────────────────────────────────────┘
```
---
## Datos del Módulo
### Entidades Principales
| Entidad | Descripción | Estado |
|---------|-------------|--------|
| EsquemaPago | Configuración de pago por operador | NO IMPLEMENTADA |
| ConceptoLiquidacion | Líneas de la liquidación | NO IMPLEMENTADA |
| Liquidacion | Documento de pago | NO IMPLEMENTADA |
| Viatico | Anticipo y comprobación | NO IMPLEMENTADA |
| Deduccion | Descuentos aplicados | NO IMPLEMENTADA |
### Campos Clave Liquidación
| Campo | Tipo | Obligatorio | Descripción |
|-------|------|-------------|-------------|
| operador_id | UUID | Sí | Operador |
| periodo_inicio | DATE | Sí | Inicio del periodo |
| periodo_fin | DATE | Sí | Fin del periodo |
| total_viajes | DECIMAL | Sí | Suma de pagos por viaje |
| total_viaticos | DECIMAL | Sí | Viáticos netos |
| total_deducciones | DECIMAL | Sí | Deducciones aplicadas |
| total_bonos | DECIMAL | Sí | Bonos ganados |
| total_pagar | DECIMAL | Sí | Neto a pagar |
| estado | ENUM | Sí | BORRADOR, PENDIENTE, AUTORIZADA, PAGADA |
---
## Requerimientos Funcionales
Ver archivo: [REQUERIMIENTOS.md](./REQUERIMIENTOS.md)
---
## Esquemas de Pago
| Tipo | Descripción | Ejemplo |
|------|-------------|---------|
| Por km | Pago por kilómetro recorrido | $2.50/km |
| Por viaje | Monto fijo por viaje | $1,500/viaje |
| Porcentaje | % del flete cobrado | 25% del flete |
| Por bono | Adicional por cumplimiento | $500 si OTIF |
| Mixto | Combinación | Base + km + bono |
---
## Métricas del Módulo
| KPI | Fórmula | Meta |
|-----|---------|------|
| Tiempo de liquidación | Avg(fecha_pago - fecha_cierre) | <5 días |
| Precisión de cálculo | % liquidaciones sin ajuste | >98% |
| Viáticos comprobados | % viáticos con recibos | >90% |
| Deducciones aprobadas | % deducciones con autorización | 100% |
---
## Dependencias
### Este módulo depende de:
- MAI-007 (POD): Viajes cerrados
- MAI-006 (Tracking): Kilometraje real
- MAI-011 (Flota): Datos de operadores
- MAI-002 (Tarifas): Flete para % de pago
### Otros módulos dependen de este:
- erp-core/financial: Exportación a contabilidad
- erp-core/nomina: Integración con nómina
---
## Historias de Usuario
Ver carpeta: [historias-usuario/](./historias-usuario/)
| US | Título | Prioridad |
|----|--------|-----------|
| US-MAI010-001 | Configurar esquema de pago | Alta |
| US-MAI010-002 | Calcular pago por viaje | Alta |
| US-MAI010-003 | Gestionar viáticos | Alta |
| US-MAI010-004 | Aplicar deducciones | Media |
| US-MAI010-005 | Generar y autorizar liquidación | Alta |
---
*Módulo MAI-010 - ERP Transportistas - Sistema SIMCO v4.0.0*

View File

@ -0,0 +1,210 @@
# REQUERIMIENTOS.md - MAI-010: Liquidaciones a Operadores
**Version:** 1.0.0
**Fecha:** 2026-01-27
**Fuente:** REQ-GIRO-TRANSPORTISTA.md - Sección 4.9
---
## Requerimientos Funcionales
### RF-4.9.1: Esquemas de Pago
**Descripción:**
El sistema debe permitir configurar diferentes esquemas de pago para operadores: por km, por viaje, por porcentaje del flete, por bono SLA.
**Criterios de Aceptación:**
1. Configurar esquema por operador individual
2. Esquemas predefinidos reutilizables
3. Pago por km con tarifa configurable
4. Pago fijo por viaje
5. Pago como % del flete cobrado al cliente
6. Bonos por cumplimiento de SLA (on-time delivery)
7. Combinación de esquemas (base + variable)
**Mapeo a DDL:**
- Tabla: `settlements.esquemas_pago`
- Tabla: `settlements.esquema_operador`
**Endpoints Requeridos:**
- `GET /api/v1/esquemas-pago` - Listar esquemas
- `POST /api/v1/esquemas-pago` - Crear esquema
- `PUT /api/v1/operadores/:id/esquema-pago` - Asignar a operador
**Prioridad:** Alta
---
### RF-4.9.2: Viáticos
**Descripción:**
El sistema debe gestionar anticipos de viáticos, comprobación de gastos y control de sobrantes.
**Criterios de Aceptación:**
1. Registrar anticipo de viático por viaje
2. Comprobación de gastos con recibos/tickets
3. Clasificación de gastos: combustible, casetas, comidas, hospedaje
4. Cálculo de sobrante (anticipo - comprobado)
5. Sobrante se descuenta en liquidación
6. Alertas por viáticos sin comprobar
**Mapeo a DDL:**
- Tabla: `settlements.viaticos`
- Tabla: `settlements.comprobantes_viatico`
**Endpoints Requeridos:**
- `POST /api/v1/viajes/:id/viatico` - Registrar anticipo
- `POST /api/v1/viaticos/:id/comprobantes` - Agregar comprobante
- `GET /api/v1/operadores/:id/viaticos-pendientes` - Viáticos sin comprobar
**Prioridad:** Alta
---
### RF-4.9.3: Deducciones
**Descripción:**
El sistema debe permitir registrar deducciones por multas, daños, faltantes según política, con aprobación.
**Criterios de Aceptación:**
1. Catálogo de tipos de deducción
2. Registrar deducción vinculada a viaje/incidencia
3. Monto puede ser fijo o % del daño
4. Requiere aprobación de supervisor
5. Plan de pagos para montos grandes (descuento parcial)
6. Historial de deducciones por operador
7. Límite máximo de deducción por periodo (política)
**Mapeo a DDL:**
- Tabla: `settlements.deducciones`
- Tabla: `settlements.tipos_deduccion`
**Endpoints Requeridos:**
- `POST /api/v1/deducciones` - Registrar deducción
- `POST /api/v1/deducciones/:id/aprobar` - Aprobar deducción
- `GET /api/v1/operadores/:id/deducciones` - Historial
**Prioridad:** Media
---
### RF-4.9.4: Corte y Autorización
**Descripción:**
El sistema debe generar liquidaciones con corte semanal/quincenal, autorización de supervisor y exportación a nómina/contabilidad.
**Criterios de Aceptación:**
1. Configurar periodo de corte (semanal, quincenal)
2. Generar liquidación con todos los conceptos
3. Desglose: viajes, viáticos, deducciones, bonos
4. Revisión y autorización de supervisor
5. Firma digital o aceptación del operador
6. Exportación a formato de nómina
7. Integración con contabilidad para pólizas
**Mapeo a DDL:**
- Tabla: `settlements.liquidaciones`
- Tabla: `settlements.conceptos_liquidacion`
**Endpoints Requeridos:**
- `POST /api/v1/liquidaciones/generar` - Generar corte
- `POST /api/v1/liquidaciones/:id/autorizar` - Autorizar
- `GET /api/v1/liquidaciones/:id/exportar` - Exportar a nómina
**Prioridad:** Alta
---
### RF-4.9.5: Cálculo Automático de Pago por Viaje
**Descripción:**
El sistema debe calcular automáticamente el monto a pagar por cada viaje según el esquema del operador.
**Criterios de Aceptación:**
1. Calcular al cerrar viaje (POD completado)
2. Aplicar esquema del operador asignado
3. Considerar km reales si aplica (desde tracking)
4. Considerar flete real si es % del flete
5. Aplicar bono si cumplió SLA
6. Registrar desglose del cálculo
7. Ajuste manual con justificación
**Mapeo a DDL:**
- Tabla: `settlements.pagos_viaje`
- Vista: `v_viajes_por_liquidar`
**Endpoints Requeridos:**
- `POST /api/v1/viajes/:id/calcular-pago` - Calcular pago
- `PUT /api/v1/pagos-viaje/:id` - Ajustar pago
- `GET /api/v1/operadores/:id/viajes-pendientes` - Por liquidar
**Prioridad:** Alta
---
### RF-4.9.6: Bonos por Desempeño
**Descripción:**
El sistema debe calcular y aplicar bonos por cumplimiento de indicadores.
**Criterios de Aceptación:**
1. Configurar bonos: on-time delivery, sin incidencias, combustible eficiente
2. Calcular automáticamente si cumple condiciones
3. Bono por viaje o por periodo
4. Desglose de bonos en liquidación
5. Histórico de bonos ganados
**Mapeo a DDL:**
- Tabla: `settlements.bonos`
- Tabla: `settlements.tipos_bono`
**Endpoints Requeridos:**
- `GET /api/v1/operadores/:id/bonos` - Bonos ganados
- `POST /api/v1/bonos` - Registrar bono manual
**Prioridad:** Media
---
## Requerimientos No Funcionales
### RNF-001: Precisión de Cálculo
Los cálculos de liquidación deben tener precisión de 2 decimales sin errores de redondeo.
### RNF-002: Auditoría
Todos los ajustes manuales deben registrarse con usuario, fecha y justificación.
### RNF-003: Confidencialidad
Las liquidaciones solo deben ser visibles para el operador correspondiente y personal autorizado.
### RNF-004: Exportación
La exportación a nómina debe completarse en menos de 30 segundos para 100 operadores.
---
## Validaciones de Negocio
| Validación | Descripción | Acción si falla |
|------------|-------------|-----------------|
| LIQ_001 | Viaje con POD para calcular pago | Bloquear cálculo |
| LIQ_002 | Deducción requiere aprobación | Pendiente hasta aprobar |
| LIQ_003 | Deducción no excede límite periodo | Alertar, requiere override |
| LIQ_004 | Viático comprobado antes de liquidar | Alertar, permitir continuar |
| LIQ_005 | Operador sin bloqueo | Alertar si operador bloqueado |
---
## Matriz de Trazabilidad
| RF | Tabla DDL | Entity | Endpoint | US |
|----|-----------|--------|----------|---|
| RF-4.9.1 | esquemas_pago | EsquemaPago | /esquemas-pago | US-MAI010-001 |
| RF-4.9.2 | viaticos | Viatico | /viaticos | US-MAI010-003 |
| RF-4.9.3 | deducciones | Deduccion | /deducciones | US-MAI010-004 |
| RF-4.9.4 | liquidaciones | Liquidacion | /liquidaciones | US-MAI010-005 |
| RF-4.9.5 | pagos_viaje | PagoViaje | /viajes/:id/pago | US-MAI010-002 |
| RF-4.9.6 | bonos | Bono | /bonos | US-MAI010-002 |
---
*MAI-010 REQUERIMIENTOS - ERP Transportistas - Sistema SIMCO v4.0.0*

View File

@ -0,0 +1,233 @@
# RESUMEN-EPICA.md - MAI-010: Liquidaciones a Operadores
**Código:** MAI-010
**Nombre:** Liquidaciones a Operadores
**Version:** 1.0.0
**Fecha:** 2026-01-27
---
## Valor de Negocio
### Problema
Las empresas transportistas enfrentan problemas con:
- Pagos incorrectos a operadores (errores de cálculo)
- Viáticos sin control que generan pérdidas
- Deducciones no aplicadas o aplicadas sin documentar
- Liquidaciones tardías que afectan retención de operadores
- Falta de visibilidad del operador sobre sus ingresos
### Solución
Un módulo de liquidaciones que:
- Calcula automáticamente el pago según esquema configurado
- Controla viáticos con anticipos y comprobación
- Aplica deducciones con aprobación y documentación
- Genera liquidaciones periódicas con desglose claro
- Da visibilidad al operador de sus pagos pendientes
### Beneficios Esperados
| Beneficio | Métrica | Impacto |
|-----------|---------|---------|
| Precisión en pagos | -95% errores de cálculo | Confianza operador |
| Control de viáticos | +30% viáticos comprobados | Reducción pérdidas |
| Rapidez liquidación | -60% tiempo de proceso | Satisfacción operador |
| Retención operadores | -20% rotación | Estabilidad operativa |
---
## Actores y Stakeholders
### Usuarios Primarios
| Actor | Responsabilidad | Frecuencia |
|-------|-----------------|------------|
| Liquidador | Procesa y genera liquidaciones | Semanal |
| Supervisor | Aprueba deducciones y liquidaciones | Semanal |
| Operador | Consulta sus pagos | Diaria |
### Usuarios Secundarios
| Actor | Interés |
|-------|---------|
| Contador | Exporta a nómina, genera pólizas |
| Gerente Operaciones | Reportes de costos por operador |
| RRHH | Datos para expediente laboral |
---
## Flujo Principal
```
┌─────────────────────────────────────────────────────────────────┐
│ VIAJE CERRADO (con POD) │
│ (Listo para liquidar desde MAI-007) │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 1. CÁLCULO DE PAGO POR VIAJE (Automático) │
│ │
│ Viaje: VJE-0125 | Operador: Juan Pérez │
│ Esquema: Por km ($2.50/km) + Bono OTIF ($500) │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Km recorridos (tracking): 540 km │ │
│ │ Pago por km: $1,350.00 │ │
│ │ Bono OTIF (entregó a tiempo): $500.00 │ │
│ │ ───────────────────────────────────────── │ │
│ │ Total viaje: $1,850.00 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 2. VIÁTICOS DEL VIAJE │
│ │
│ Anticipo entregado: $2,000.00 │
│ │
│ Comprobación: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Combustible (ticket): $1,200.00 ✓ │ │
│ │ Casetas (TAG): $450.00 ✓ │ │
│ │ Comida (tickets): $180.00 ✓ │ │
│ │ ───────────────────────────────────────── │ │
│ │ Total comprobado: $1,830.00 │ │
│ │ Sobrante a descontar: $170.00 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 3. DEDUCCIONES (Si aplican) │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Multa de tránsito (VJE-0120): $500.00 │ │
│ │ Motivo: Exceso de velocidad en Qro │ │
│ │ Evidencia: Foto de infracción │ │
│ │ Estado: ✓ Aprobado por supervisor │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 4. LIQUIDACIÓN SEMANAL │
│ │
│ Operador: Juan Pérez García │
│ Periodo: 20-ene-2026 al 26-ene-2026 │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ PERCEPCIONES │ │
│ │ Viaje VJE-0120 (CDMX→GDL): $1,750.00 │ │
│ │ Viaje VJE-0125 (CDMX→MTY): $1,850.00 │ │
│ │ Viaje VJE-0128 (CDMX→GDL): $1,750.00 │ │
│ │ Bono asistencia perfecta: $300.00 │ │
│ │ ───────────────────────────────────────────── │ │
│ │ Subtotal percepciones: $5,650.00 │ │
│ │ │ │
│ │ DEDUCCIONES │ │
│ │ Sobrante viático VJE-0125: -$170.00 │ │
│ │ Multa tránsito VJE-0120: -$500.00 │ │
│ │ ───────────────────────────────────────────── │ │
│ │ Subtotal deducciones: -$670.00 │ │
│ │ │ │
│ │ ═══════════════════════════════════════════════ │ │
│ │ NETO A PAGAR: $4,980.00 MXN │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Estado: PENDIENTE DE AUTORIZACIÓN │
│ │
│ [Autorizar] │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 5. AUTORIZACIÓN Y EXPORTACIÓN │
│ │
│ ✓ Autorizado por: María González (Supervisor) │
│ ✓ Aceptado por operador: Juan Pérez (firma digital) │
│ │
│ [Exportar a nómina] [Generar póliza contable] │
│ │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ LIQUIDACIÓN PAGADA │
│ → Exportada a nómina │
│ → Póliza contable generada │
└─────────────────────────────────────────────────────────────────┘
```
---
## Criterios de Éxito
### Funcionales
- [ ] Configuración de esquemas de pago
- [ ] Cálculo automático por viaje
- [ ] Gestión de viáticos con comprobación
- [ ] Deducciones con aprobación
- [ ] Generación de liquidación periódica
- [ ] Exportación a nómina
### Técnicos
- [ ] Cálculos precisos (2 decimales)
- [ ] Auditoría de ajustes
- [ ] Portal operador con sus pagos
- [ ] Exportación <30 seg para 100 operadores
### Negocio
- [ ] <5 días entre cierre y pago
- [ ] >98% liquidaciones sin ajuste
- [ ] >90% viáticos comprobados
- [ ] 100% deducciones aprobadas
---
## Riesgos y Mitigaciones
| Riesgo | Probabilidad | Impacto | Mitigación |
|--------|--------------|---------|------------|
| Cálculo incorrecto | Media | Alto | Validación doble, auditoría |
| Viáticos sin comprobar | Alta | Medio | Alertas, bloqueo de anticipo |
| Deducciones impugnadas | Media | Medio | Evidencia obligatoria |
| Retraso en liquidación | Media | Alto | Automatización, alertas |
---
## Dependencias
### Prerequisitos
- MAI-007 (POD): Viajes cerrados
- MAI-006 (Tracking): Kilometraje real
- MAI-011 (Flota): Datos de operadores
### Habilita
- erp-core/financial: Pólizas contables
- erp-core/nomina: Integración nómina
---
## Story Points Estimados
| Historia | Complejidad | SP |
|----------|-------------|---|
| US-MAI010-001 | Media | 5 |
| US-MAI010-002 | Alta | 8 |
| US-MAI010-003 | Media | 5 |
| US-MAI010-004 | Media | 5 |
| US-MAI010-005 | Alta | 8 |
| **Total** | | **31** |
---
*Épica MAI-010 - ERP Transportistas - Sistema SIMCO v4.0.0*

View File

@ -0,0 +1,211 @@
# US-MAI010-001: Configurar esquema de pago
**ID:** US-MAI010-001
**Módulo:** MAI-010 (Liquidaciones)
**Prioridad:** Alta
**Story Points:** 5
---
## Historia de Usuario
**Como** administrador de operaciones
**Quiero** configurar diferentes esquemas de pago para los operadores
**Para** tener flexibilidad en la compensación según el tipo de servicio y operador
---
## Criterios de Aceptación
### CA-001: Crear esquema de pago
**Dado** que necesito definir cómo pagar a un operador
**Cuando** creo un esquema de pago
**Entonces** puedo especificar: tipo (km, viaje, %), montos y condiciones
### CA-002: Esquema por kilómetro
**Dado** que algunos operadores se pagan por km
**Cuando** configuro este tipo
**Entonces** defino la tarifa por km y el sistema usa km reales del tracking
### CA-003: Esquema por viaje
**Dado** que algunos operadores se pagan monto fijo por viaje
**Cuando** configuro este tipo
**Entonces** defino el monto fijo que aplica por cada viaje completado
### CA-004: Esquema por porcentaje
**Dado** que algunos operadores se pagan % del flete
**Cuando** configuro este tipo
**Entonces** defino el porcentaje y se calcula sobre el flete facturado
### CA-005: Asignar esquema a operador
**Dado** que tengo esquemas definidos
**Cuando** asigno a un operador
**Entonces** sus futuros viajes se calculan con ese esquema
### CA-006: Esquemas predefinidos
**Dado** que hay esquemas comunes
**Cuando** necesito asignar rápido
**Entonces** puedo elegir de una lista de esquemas predefinidos
---
## Mockup / UI
```
┌─────────────────────────────────────────────────────────────────┐
│ ESQUEMAS DE PAGO [+ Nuevo]│
├─────────────────────────────────────────────────────────────────┤
│ │
│ ESQUEMAS DISPONIBLES │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ ESQ-001: Operador Estándar │ │
│ │ Tipo: Por kilómetro │ │
│ │ Tarifa: $2.50/km + Bono OTIF $500 │ │
│ │ Operadores asignados: 12 [Editar] │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ ESQ-002: Operador Senior │ │
│ │ Tipo: Porcentaje del flete │ │
│ │ Tarifa: 25% + Bono OTIF $800 │ │
│ │ Operadores asignados: 5 [Editar] │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ ESQ-003: Ruta Local │ │
│ │ Tipo: Por viaje fijo │ │
│ │ Tarifa: $1,500/viaje │ │
│ │ Operadores asignados: 8 [Editar] │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Crear Esquema de Pago
```
┌─────────────────────────────────────────────────────────────────┐
│ NUEVO ESQUEMA DE PAGO ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ INFORMACIÓN BÁSICA │
│ │
│ Código: [ESQ-004] │
│ Nombre: [Operador Premium ] │
│ Descripción: [Esquema para operadores con doble articulado ]│
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ TIPO DE CÁLCULO │
│ │
│ Tipo principal: │
│ ( ) Por kilómetro recorrido │
│ (●) Porcentaje del flete │
│ ( ) Monto fijo por viaje │
│ ( ) Mixto (base + variable) │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ CONFIGURACIÓN DEL PORCENTAJE │
│ │
│ Porcentaje sobre flete: [30] % │
│ Mínimo garantizado: [$1,000.00] (por viaje) │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ BONOS ADICIONALES │
│ │
│ ☑ Bono por entrega a tiempo (OTIF) │
│ Monto: [$800.00] │
│ │
│ ☑ Bono por sin incidencias │
│ Monto: [$300.00] │
│ │
│ ☐ Bono por combustible eficiente │
│ Monto: [$______] │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ CONDICIONES ESPECIALES │
│ │
│ ☑ Aplica solo para viajes de ruta larga (>300 km) │
│ ☐ Aplica solo para ciertos clientes │
│ │
│ [Cancelar] [Guardar Esquema] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Asignar Esquema a Operador
```
┌─────────────────────────────────────────────────────────────────┐
│ ASIGNAR ESQUEMA DE PAGO ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Operador: Juan Pérez García │
│ No. Empleado: OP-0025 │
│ Antigüedad: 3 años, 5 meses │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ESQUEMA ACTUAL │
│ ESQ-001: Operador Estándar ($2.50/km + Bono) │
│ Vigente desde: 01-jun-2023 │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ NUEVO ESQUEMA │
│ │
│ Esquema: [ESQ-002: Operador Senior ▼] │
│ │
│ Resumen del esquema: │
│ • Tipo: Porcentaje del flete │
│ • Tarifa: 25% del flete │
│ • Bono OTIF: $800 │
│ • Sin incidencias: $300 │
│ │
│ Fecha inicio: [01-feb-2026] │
│ │
│ Motivo del cambio: │
│ [Promoción por buen desempeño ]│
│ │
│ [Cancelar] [Asignar] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Tipos de Esquema
| Tipo | Descripción | Cálculo |
|------|-------------|---------|
| Por km | Pago por kilómetro | km_reales × tarifa_km |
| Por viaje | Monto fijo | tarifa_viaje |
| Porcentaje | % del flete | flete × porcentaje |
| Mixto | Base + variable | base + (km × tarifa) |
---
## Notas Técnicas
- Tabla: `settlements.esquemas_pago` para definiciones
- Tabla: `settlements.esquema_operador` para asignaciones
- El km real se obtiene de `tracking.eventos` (km recorridos)
- El flete se obtiene de la tarifa aplicada al viaje (MAI-002)
- Histórico de cambios de esquema por operador
---
## Definición de Done
- [ ] CRUD de esquemas de pago
- [ ] Soporte para los 4 tipos de cálculo
- [ ] Configuración de bonos
- [ ] Asignación de esquema a operador
- [ ] Histórico de cambios de esquema
- [ ] Validación de condiciones especiales
- [ ] Tests de configuración

View File

@ -0,0 +1,193 @@
# US-MAI010-002: Calcular pago por viaje
**ID:** US-MAI010-002
**Módulo:** MAI-010 (Liquidaciones)
**Prioridad:** Alta
**Story Points:** 8
---
## Historia de Usuario
**Como** sistema de liquidaciones
**Quiero** calcular automáticamente el monto a pagar por cada viaje cerrado
**Para** que el liquidador tenga los montos listos sin cálculos manuales
---
## Criterios de Aceptación
### CA-001: Calcular al cerrar viaje
**Dado** que un viaje se cierra con POD
**Cuando** se confirma el cierre
**Entonces** el sistema calcula automáticamente el pago del operador
### CA-002: Aplicar esquema del operador
**Dado** que el operador tiene un esquema asignado
**Cuando** se calcula el pago
**Entonces** se aplica la fórmula correspondiente (km, %, fijo)
### CA-003: Usar km reales
**Dado** que el esquema es por km
**Cuando** se calcula
**Entonces** se usan los km reales del tracking, no los estimados
### CA-004: Calcular bonos automáticamente
**Dado** que el viaje cumplió condiciones de bono
**Cuando** se calcula el pago
**Entonces** se agrega el bono correspondiente (OTIF, sin incidencias)
### CA-005: Mostrar desglose
**Dado** que se calculó el pago
**Cuando** consulto el detalle
**Entonces** veo el desglose: base, variable, bonos, total
### CA-006: Ajuste manual
**Dado** que hay situaciones excepcionales
**Cuando** necesito ajustar el monto
**Entonces** puedo hacerlo con justificación obligatoria
---
## Mockup / UI
```
┌─────────────────────────────────────────────────────────────────┐
│ PAGO CALCULADO - VJE-0125 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Viaje: VJE-0125 | CDMX → Monterrey │
│ Operador: Juan Pérez García │
│ Esquema: ESQ-002 (25% del flete + bonos) │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ DATOS DEL VIAJE │
│ │
│ Fecha cierre: 2026-01-25 16:45 │
│ Flete facturado: $18,200.00 MXN │
│ Km recorridos (tracking): 892 km │
│ Tiempo en ruta: 11 hrs 32 min │
│ Entrega: ✓ A tiempo (dentro de ventana SLA) │
│ Incidencias: ✓ Sin incidencias │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ CÁLCULO DEL PAGO │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ PERCEPCIONES │ │
│ │ │ │
│ │ Pago por flete (25% de $18,200): $4,550.00 │ │
│ │ Bono OTIF (entrega a tiempo): $800.00 │ │
│ │ Bono sin incidencias: $300.00 │ │
│ │ ───────────────────────────────────────────────── │ │
│ │ TOTAL A PAGAR: $5,650.00 MXN │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Estado: ✓ CALCULADO | Pendiente de liquidación │
│ │
│ [Ajustar monto] [Ver detalles] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Lista de Viajes por Liquidar
```
┌─────────────────────────────────────────────────────────────────┐
│ VIAJES PENDIENTES DE LIQUIDAR │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Operador: [Juan Pérez García ▼] │
│ Periodo: [20-ene-2026] al [26-ene-2026] │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ VIAJES CERRADOS ESTA SEMANA │
│ │
│ | Viaje | Ruta | Cierre | Pago | Estado |│
│ |---------|----------------|----------|-----------|----------|│
│ | VJE-0120| CDMX → GDL | 21-ene | $1,750.00 | Calculado|│
│ | VJE-0125| CDMX → MTY | 23-ene | $5,650.00 | Calculado|│
│ | VJE-0128| CDMX → GDL | 25-ene | $1,750.00 | Calculado|│
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ RESUMEN │
│ Total viajes: 3 │
│ Total pagos: $9,150.00 │
│ │
│ [Generar liquidación semanal] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Ajuste Manual
```
┌─────────────────────────────────────────────────────────────────┐
│ AJUSTAR PAGO ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Viaje: VJE-0125 │
│ Pago calculado: $5,650.00 │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ AJUSTE │
│ │
│ Nuevo monto: [$5,000.00] │
│ Diferencia: -$650.00 │
│ │
│ Motivo del ajuste (obligatorio): │
│ [Viaje solicitó apoyo de otro operador para última ]│
│ [hora de entrega. Se comparte pago con OP-0032 ]│
│ │
│ Autoriza: [Supervisor requerido ▼] │
│ │
│ ⚠ Los ajustes quedan registrados en auditoría │
│ │
│ [Cancelar] [Guardar Ajuste] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Cálculo por Tipo de Esquema
| Tipo | Fórmula | Ejemplo |
|------|---------|---------|
| Por km | km_reales × tarifa_km | 892 × $2.50 = $2,230 |
| Por viaje | tarifa_fija | $1,500 |
| Porcentaje | flete × % | $18,200 × 25% = $4,550 |
| Mixto | base + (km × tarifa) | $500 + (892 × $1.50) = $1,838 |
---
## Notas Técnicas
- El cálculo se dispara al evento `viaje.cerrado` (MAI-007)
- Km reales desde `tracking.eventos` (suma de tramos)
- Flete desde `billing.lineas_factura` vinculada al viaje
- Bonos se evalúan según condiciones del esquema
- Ajustes requieren aprobación si >10% del calculado
---
## Definición de Done
- [ ] Cálculo automático al cerrar viaje
- [ ] Soporte para los 4 tipos de esquema
- [ ] Uso de km reales desde tracking
- [ ] Cálculo automático de bonos
- [ ] Desglose detallado del pago
- [ ] Ajuste manual con justificación
- [ ] Auditoría de ajustes
- [ ] Tests de cálculo por tipo

View File

@ -0,0 +1,224 @@
# US-MAI010-003: Gestionar viáticos
**ID:** US-MAI010-003
**Módulo:** MAI-010 (Liquidaciones)
**Prioridad:** Alta
**Story Points:** 5
---
## Historia de Usuario
**Como** despachador
**Quiero** registrar anticipos de viáticos y su comprobación
**Para** controlar el efectivo entregado a operadores y evitar pérdidas
---
## Criterios de Aceptación
### CA-001: Registrar anticipo
**Dado** que un operador sale a viaje
**Cuando** registro el anticipo de viático
**Entonces** se vincula al viaje con monto, fecha y forma de entrega
### CA-002: Comprobar gastos
**Dado** que el operador regresa del viaje
**Cuando** comprueba sus gastos
**Entonces** puedo registrar cada gasto con tipo, monto y evidencia (ticket/foto)
### CA-003: Clasificar gastos
**Dado** que hay diferentes tipos de gasto
**Cuando** registro la comprobación
**Entonces** clasifico en: combustible, casetas, comidas, hospedaje, otros
### CA-004: Calcular sobrante
**Dado** que se comprobaron los gastos
**Cuando** consulto el viático
**Entonces** veo: anticipo, comprobado, sobrante (a devolver o descontar)
### CA-005: Descontar sobrante en liquidación
**Dado** que hay sobrante sin devolver
**Cuando** se genera la liquidación
**Entonces** el sobrante se incluye como deducción automática
### CA-006: Alertar viáticos sin comprobar
**Dado** que hay viajes cerrados con viático sin comprobar
**Cuando** consulto el dashboard
**Entonces** veo alertas de viáticos pendientes de comprobación
---
## Mockup / UI
```
┌─────────────────────────────────────────────────────────────────┐
│ REGISTRAR ANTICIPO DE VIÁTICO ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Viaje: VJE-0125 | CDMX → Monterrey │
│ Operador: Juan Pérez García │
│ Distancia estimada: 900 km │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ CÁLCULO SUGERIDO │
│ │
│ Combustible (900 km × 4 km/L × $23/L): $5,175.00 │
│ Casetas (estimado ruta): $1,200.00 │
│ Comidas (2 días × $250): $500.00 │
│ Imprevistos: $325.00 │
│ ───────────────────────────────────────── │
│ Total sugerido: $7,200.00 │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ANTICIPO A ENTREGAR │
│ │
│ Monto: [$7,000.00] │
│ │
│ Forma de entrega: │
│ (●) Efectivo │
│ ( ) Transferencia │
│ ( ) Vale/Tarjeta combustible │
│ │
│ Fecha entrega: [2026-01-22] │
│ │
│ Recibe: [Juan Pérez García ] │
│ Entrega: [María González - Caja ] │
│ │
│ [Cancelar] [Registrar Anticipo] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Comprobación de Viático
```
┌─────────────────────────────────────────────────────────────────┐
│ COMPROBACIÓN DE VIÁTICO ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Viaje: VJE-0125 | Anticipo: $7,000.00 │
│ Operador: Juan Pérez García │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ GASTOS COMPROBADOS [+ Agregar]│
│ │
│ | Tipo | Descripción | Monto | Evidencia | │
│ |-------------|--------------------|---------:|------------| │
│ | Combustible | PEMEX Qro Norte | $2,800.00| [📷 Ver] | │
│ | Combustible | PEMEX MTY Centro | $1,500.00| [📷 Ver] | │
│ | Casetas | TAG (reporte) | $980.00| [📄 Ver] | │
│ | Comidas | Restaurant día 1 | $180.00| [📷 Ver] | │
│ | Comidas | Restaurant día 2 | $150.00| [📷 Ver] | │
│ | Hospedaje | Hotel MTY | $450.00| [📷 Ver] | │
│ |-------------|--------------------|---------:|------------| │
│ | TOTAL COMPROBADO | $6,060.00| | │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ RESUMEN │
│ │
│ Anticipo entregado: $7,000.00 │
│ Total comprobado: -$6,060.00 │
│ ────────────────────────────────────────────────── │
│ Sobrante a devolver/descontar: $940.00 │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ Destino del sobrante: │
│ ( ) Devuelto en efectivo [$______] Fecha: [________] │
│ (●) Descontar en próxima liquidación │
│ │
│ [Guardar borrador] [Cerrar comprobación] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Agregar Gasto
```
┌─────────────────────────────────────────────────────────────────┐
│ AGREGAR GASTO ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Tipo de gasto: [Combustible ▼] │
│ ○ Combustible │
│ ○ Casetas/Peaje │
│ ○ Comidas │
│ ○ Hospedaje │
│ ○ Estacionamiento │
│ ○ Maniobras │
│ ○ Otros │
│ │
│ Descripción: [PEMEX Querétaro Norte - Magna ] │
│ Fecha del gasto: [2026-01-22] │
│ Monto: [$2,800.00] │
│ │
│ Evidencia: │
│ [📷 Seleccionar foto del ticket] │
│ ✓ ticket_pemex_qro.jpg │
│ │
│ Notas: │
│ [Carga completa en Querétaro antes de subir a MTY ]│
│ │
│ [Cancelar] [Agregar] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Dashboard de Viáticos
```
┌─────────────────────────────────────────────────────────────────┐
│ VIÁTICOS PENDIENTES DE COMPROBAR │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ⚠ 5 viáticos pendientes de comprobación │
│ │
│ | Viaje | Operador | Anticipo | Cierre | Días | │
│ |---------|---------------|-----------|----------|-------| │
│ | VJE-0115| Pedro Ramírez | $5,500.00 | 18-ene | 9 🔴 | │
│ | VJE-0118| Ana López | $3,200.00 | 20-ene | 7 🟡 | │
│ | VJE-0122| Luis García | $6,800.00 | 22-ene | 5 🟡 | │
│ | VJE-0126| Carlos Méndez | $4,500.00 | 24-ene | 3 🟢 | │
│ | VJE-0129| Juan Pérez | $7,000.00 | 25-ene | 2 🟢 | │
│ │
│ Total pendiente de comprobar: $27,000.00 │
│ │
│ [Enviar recordatorios] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Notas Técnicas
- Tabla: `settlements.viaticos` para anticipo
- Tabla: `settlements.comprobantes_viatico` para gastos
- Fotos de tickets se suben a S3
- Sobrante se convierte en deducción tipo SOBRANTE_VIATICO
- Alertas configurables (>3 días sin comprobar)
---
## Definición de Done
- [ ] Registro de anticipo vinculado a viaje
- [ ] Comprobación de gastos con clasificación
- [ ] Captura de evidencia (fotos de tickets)
- [ ] Cálculo de sobrante
- [ ] Integración con liquidación
- [ ] Dashboard de viáticos pendientes
- [ ] Alertas de viáticos sin comprobar
- [ ] Tests de flujo completo

View File

@ -0,0 +1,235 @@
# US-MAI010-004: Aplicar deducciones
**ID:** US-MAI010-004
**Módulo:** MAI-010 (Liquidaciones)
**Prioridad:** Media
**Story Points:** 5
---
## Historia de Usuario
**Como** supervisor de operaciones
**Quiero** aplicar deducciones a operadores por multas, daños o faltantes
**Para** recuperar pérdidas y mantener la disciplina operativa
---
## Criterios de Aceptación
### CA-001: Catálogo de tipos de deducción
**Dado** que hay diferentes causas de deducción
**Cuando** administro el catálogo
**Entonces** tengo tipos como: multa, daño unidad, daño carga, faltante, préstamo
### CA-002: Registrar deducción
**Dado** que ocurrió un evento que amerita deducción
**Cuando** la registro
**Entonces** especifico: tipo, monto, viaje relacionado, evidencia
### CA-003: Requiere aprobación
**Dado** que las deducciones afectan al operador
**Cuando** registro una deducción
**Entonces** queda pendiente hasta que un supervisor apruebe
### CA-004: Plan de pagos
**Dado** que el monto es alto para descontar de una vez
**Cuando** configuro la deducción
**Entonces** puedo establecer un plan (descontar $X por liquidación)
### CA-005: Límite de deducción
**Dado** que hay políticas de límite
**Cuando** las deducciones exceden el % permitido del pago
**Entonces** el sistema alerta y requiere autorización especial
### CA-006: Historial por operador
**Dado** que quiero ver el comportamiento de un operador
**Cuando** consulto su historial
**Entonces** veo todas las deducciones aplicadas
---
## Mockup / UI
```
┌─────────────────────────────────────────────────────────────────┐
│ REGISTRAR DEDUCCIÓN ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Operador: Juan Pérez García │
│ No. Empleado: OP-0025 │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ TIPO DE DEDUCCIÓN │
│ │
│ Tipo: [Multa de tránsito ▼] │
│ ○ Multa de tránsito │
│ ○ Daño a unidad │
│ ○ Daño a carga │
│ ○ Faltante de mercancía │
│ ○ Préstamo/Adelanto │
│ ○ Sobrante de viático │
│ ○ Otro │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ DETALLE │
│ │
│ Viaje relacionado: [VJE-0120 ▼] │
│ Fecha del evento: [2026-01-21] │
│ │
│ Descripción: │
│ [Infracción por exceso de velocidad en carretera 57D ]│
│ [Querétaro. Límite 90 km/h, velocidad 112 km/h. ]│
│ │
│ Monto total: [$1,200.00] │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ EVIDENCIA │
│ │
│ [📷 Agregar foto] [📄 Agregar documento] │
│ │
│ ✓ multa_transito_001.jpg (Foto de infracción) │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ FORMA DE DESCUENTO │
│ │
│ (●) Descontar completo en próxima liquidación │
│ ( ) Plan de pagos: [____] pagos de $[_____] │
│ │
│ [Cancelar] [Enviar a aprobación] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Aprobar Deducción
```
┌─────────────────────────────────────────────────────────────────┐
│ APROBAR DEDUCCIÓN ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ SOLICITUD DE DEDUCCIÓN │
│ │
│ Operador: Juan Pérez García │
│ Tipo: Multa de tránsito │
│ Monto: $1,200.00 │
│ Viaje: VJE-0120 │
│ │
│ Descripción: │
│ Infracción por exceso de velocidad en carretera 57D │
│ Querétaro. Límite 90 km/h, velocidad 112 km/h. │
│ │
│ Evidencia: [📷 Ver foto] │
│ │
│ Registrado por: María González │
│ Fecha solicitud: 2026-01-22 │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ POLÍTICA DE EMPRESA │
│ │
│ Según política, las multas de tránsito se descuentan al │
│ operador en un 100% cuando son por exceso de velocidad. │
│ │
│ Límite de deducción por liquidación: 30% del pago bruto │
│ Pago estimado próxima liquidación: $5,650.00 │
│ Máximo descuento permitido: $1,695.00 │
│ ✓ Esta deducción está dentro del límite │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ DECISIÓN │
│ │
│ (●) Aprobar deducción │
│ ( ) Aprobar con monto ajustado: $[______] │
│ ( ) Rechazar │
│ │
│ Comentario: │
│ [Aprobado según política ]│
│ │
│ [Cancelar] [Confirmar] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Historial de Deducciones
```
┌─────────────────────────────────────────────────────────────────┐
│ HISTORIAL DE DEDUCCIONES - Juan Pérez García │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Periodo: [Últimos 12 meses ▼] │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ RESUMEN │
│ │
│ Total deducciones: 3 │
│ Monto total: $2,450.00 │
│ Promedio mensual: $204.17 │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ DETALLE │
│ │
│ | Fecha | Tipo | Viaje | Monto | Estado | │
│ |----------|-------------|---------|----------|------------| │
│ | 22-ene-26| Multa | VJE-0120| $1,200.00| Descontada | │
│ | 15-dic-25| Daño unidad | VJE-0089| $750.00| Descontada | │
│ | 10-oct-25| Faltante | VJE-0056| $500.00| Descontada | │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ COMPARATIVO CON OTROS OPERADORES │
│ │
│ Juan Pérez: $204/mes (promedio) │
│ Promedio empresa: $180/mes │
│ Posición: 15 de 25 operadores │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Tipos de Deducción
| Tipo | Descripción | % responsabilidad |
|------|-------------|-------------------|
| MULTA_TRANSITO | Infracciones de tránsito | 100% operador |
| DANO_UNIDAD | Daño al vehículo por negligencia | 50-100% |
| DANO_CARGA | Daño a la mercancía | Según caso |
| FALTANTE | Faltante de mercancía | Según caso |
| PRESTAMO | Adelanto de efectivo | 100% |
| SOBRANTE_VIATICO | Viático no comprobado | 100% |
---
## Notas Técnicas
- Tabla: `settlements.deducciones` con estado (pendiente, aprobada, rechazada, aplicada)
- Tabla: `settlements.tipos_deduccion` para catálogo
- Plan de pagos: se crean N registros con monto parcial
- Límite de deducción configurable por tenant (ej: 30% del bruto)
- Auditoría completa de aprobaciones/rechazos
---
## Definición de Done
- [ ] Catálogo de tipos de deducción
- [ ] Registro de deducción con evidencia
- [ ] Flujo de aprobación por supervisor
- [ ] Plan de pagos para montos grandes
- [ ] Validación de límite de deducción
- [ ] Historial de deducciones por operador
- [ ] Tests de flujo de aprobación

View File

@ -0,0 +1,289 @@
# US-MAI010-005: Generar y autorizar liquidación
**ID:** US-MAI010-005
**Módulo:** MAI-010 (Liquidaciones)
**Prioridad:** Alta
**Story Points:** 8
---
## Historia de Usuario
**Como** liquidador
**Quiero** generar la liquidación periódica consolidando todos los conceptos
**Para** pagar al operador de forma clara y trazable
---
## Criterios de Aceptación
### CA-001: Generar liquidación por periodo
**Dado** que llegó la fecha de corte (semanal/quincenal)
**Cuando** genero la liquidación
**Entonces** se consolidan: pagos por viaje, viáticos, bonos, deducciones
### CA-002: Desglose completo
**Dado** que la liquidación fue generada
**Cuando** la consulto
**Entonces** veo cada concepto con su origen (viaje, tipo, monto)
### CA-003: Estado borrador editable
**Dado** que la liquidación está en borrador
**Cuando** detecto un error
**Entonces** puedo editar o agregar conceptos con justificación
### CA-004: Autorización de supervisor
**Dado** que la liquidación está lista
**Cuando** la envío a autorización
**Entonces** el supervisor debe aprobar antes de proceder al pago
### CA-005: Aceptación del operador
**Dado** que la liquidación fue autorizada
**Cuando** el operador la revisa
**Entonces** puede firmar/aceptar digitalmente conforme
### CA-006: Exportar a nómina
**Dado** que la liquidación está autorizada y aceptada
**Cuando** exporto
**Entonces** se genera archivo compatible con sistema de nómina
---
## Mockup / UI
```
┌─────────────────────────────────────────────────────────────────┐
│ GENERAR LIQUIDACIÓN ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ CONFIGURACIÓN DEL CORTE │
│ │
│ Tipo de corte: (●) Semanal ( ) Quincenal │
│ Periodo: [20-ene-2026] al [26-ene-2026] │
│ │
│ Operadores a incluir: │
│ (●) Todos los activos con movimientos │
│ ( ) Seleccionar específicos │
│ │
│ [Generar liquidaciones] │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ RESULTADO │
│ │
│ ✓ 18 liquidaciones generadas │
│ Total a pagar: $89,450.00 │
│ │
│ [Ver listado] [Revisar y autorizar] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Liquidación Individual
```
┌─────────────────────────────────────────────────────────────────┐
│ LIQUIDACIÓN LIQ-2026-W04-025 ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Operador: Juan Pérez García │
│ No. Empleado: OP-0025 │
│ Periodo: Semana 04 (20-ene al 26-ene-2026) │
│ Estado: BORRADOR │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ PERCEPCIONES │
│ │
│ | Concepto | Viaje | Monto | │
│ |-------------------------------------|---------|-----------| │
│ | Pago por flete (25%) | VJE-0120| $1,750.00 | │
│ | Pago por flete (25%) | VJE-0125| $4,550.00 | │
│ | Pago por flete (25%) | VJE-0128| $1,750.00 | │
│ | Bono OTIF | VJE-0120| $800.00 | │
│ | Bono OTIF | VJE-0125| $800.00 | │
│ | Bono OTIF | VJE-0128| $800.00 | │
│ | Bono sin incidencias | VJE-0120| $300.00 | │
│ | Bono sin incidencias | VJE-0125| $300.00 | │
│ | Bono sin incidencias | VJE-0128| $300.00 | │
│ |-------------------------------------|---------|-----------| │
│ | SUBTOTAL PERCEPCIONES | |$11,350.00 | │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ DEDUCCIONES │
│ │
│ | Concepto | Viaje | Monto | │
│ |-------------------------------------|---------|-----------| │
│ | Sobrante viático | VJE-0125| -$940.00 | │
│ | Multa de tránsito | VJE-0120| -$1,200.00| │
│ |-------------------------------------|---------|-----------| │
│ | SUBTOTAL DEDUCCIONES | | -$2,140.00| │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ ═══════════════════════════════════════════════════════════ │
│ NETO A PAGAR: $9,210.00 MXN│
│ ═══════════════════════════════════════════════════════════ │
│ │
│ [Editar] [Agregar concepto] [Enviar a autorización]│
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Autorización de Supervisor
```
┌─────────────────────────────────────────────────────────────────┐
│ AUTORIZAR LIQUIDACIONES │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Periodo: Semana 04 (20-ene al 26-ene-2026) │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ PENDIENTES DE AUTORIZACIÓN │
│ │
│ [☑ Seleccionar todas] │
│ │
│ | Operador | Percepciones | Deducciones | Neto | │
│ |-----------------|--------------|-------------|-----------| │
│ | ☑ Juan Pérez | $11,350.00 | -$2,140.00 | $9,210.00 | │
│ | ☑ Pedro Ramírez | $8,200.00 | -$450.00 | $7,750.00 | │
│ | ☑ Ana López | $6,500.00 | $0.00 | $6,500.00 | │
│ | ☑ Luis García | $9,800.00 | -$800.00 | $9,000.00 | │
│ | ☐ Carlos Méndez | $7,200.00 | -$3,500.00 | $3,700.00 |⚠│
│ | | | | | │
│ |-----------------|--------------|-------------|-----------| │
│ | TOTAL SELEC. | $35,850.00 | -$3,390.00 | $32,460.00| │
│ │
│ ⚠ Carlos Méndez: Deducciones > 30% del bruto. Revisar. │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ Comentarios del supervisor: │
│ [Liquidaciones revisadas y correctas ]│
│ │
│ [Rechazar seleccionadas] [✓ Autorizar seleccionadas]│
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Aceptación del Operador
```
┌─────────────────────────────────────────────────────────────────┐
│ ACEPTAR LIQUIDACIÓN ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Operador: Juan Pérez García │
│ Liquidación: LIQ-2026-W04-025 │
│ Neto a pagar: $9,210.00 MXN │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ Por este medio ACEPTO la liquidación correspondiente al │
│ periodo del 20 al 26 de enero de 2026, declarando que: │
│ │
│ ☑ He revisado el desglose de percepciones │
│ ☑ Estoy de acuerdo con las deducciones aplicadas │
│ ☑ El monto neto a recibir es correcto │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ FIRMA DIGITAL │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ [Área de firma - táctil] │ │
│ │ │ │
│ │ ~~~~~~~~~~~~~~~~~~~~~~ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ [Limpiar firma] │
│ │
│ Fecha: 2026-01-27 10:35:22 │
│ IP: 192.168.1.45 │
│ │
│ [Rechazar - Solicitar revisión] [✓ Firmar y Aceptar]│
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Exportar a Nómina
```
┌─────────────────────────────────────────────────────────────────┐
│ EXPORTAR A NÓMINA ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Periodo: Semana 04 (20-ene al 26-ene-2026) │
│ │
│ Liquidaciones autorizadas y aceptadas: 18 │
│ Total a dispersar: $89,450.00 │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ FORMATO DE EXPORTACIÓN │
│ │
│ ( ) Layout bancario dispersión (TXT) │
│ (●) Excel con desglose │
│ ( ) CSV para sistema de nómina │
│ ( ) XML CFDI recibos de nómina │
│ │
│ Incluir: │
│ ☑ Desglose de conceptos │
│ ☑ Datos bancarios de operadores │
│ ☑ Resumen por centro de costo │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ [Cancelar] [Exportar] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Estados de Liquidación
| Estado | Descripción | Acciones permitidas |
|--------|-------------|---------------------|
| BORRADOR | Generada, editable | Editar, enviar a autorización |
| PENDIENTE | Enviada a supervisor | Autorizar, rechazar |
| AUTORIZADA | Aprobada por supervisor | Enviar a operador, exportar |
| ACEPTADA | Firmada por operador | Exportar, pagar |
| PAGADA | Dispersión realizada | Ver, generar recibo |
| RECHAZADA | Rechazada (supervisor u operador) | Editar, reenviar |
---
## Notas Técnicas
- Tabla: `settlements.liquidaciones` con periodo y estado
- Tabla: `settlements.conceptos_liquidacion` para desglose
- Firma digital se almacena como imagen base64
- Exportación genera archivos según formato seleccionado
- Job automático para generar liquidaciones el día de corte
---
## Definición de Done
- [ ] Generación masiva de liquidaciones por periodo
- [ ] Desglose completo de conceptos
- [ ] Edición de borrador con justificación
- [ ] Flujo de autorización de supervisor
- [ ] Aceptación con firma del operador
- [ ] Exportación a múltiples formatos
- [ ] Tests de flujo completo