diff --git a/docs/_definitions/DATABASE-SCHEMA.md b/docs/_definitions/DATABASE-SCHEMA.md new file mode 100644 index 0000000..fe83587 --- /dev/null +++ b/docs/_definitions/DATABASE-SCHEMA.md @@ -0,0 +1,363 @@ +# DATABASE-SCHEMA.md - ERP Transportistas + +**Version:** 1.0.0 +**Fecha:** 2026-01-26 +**Engine:** PostgreSQL 15+ con PostGIS +**Total Schemas:** 8 especializados + heredados +**Total Tablas:** ~98 propias + heredadas + +--- + +## Resumen de Schemas + +| Schema | Tablas | ENUMs | DDL File | Estado | +|--------|--------|-------|----------|--------| +| transport | ~25 | ~10 | 01-transport-schema-ddl.sql | 100% | +| fleet | ~15 | ~8 | 02-fleet-schema-ddl.sql | 100% | +| tracking | ~10 | ~5 | 03-tracking-schema-ddl.sql | 100% | +| fuel | ~8 | ~4 | 04-fuel-schema-ddl.sql | 100% | +| maintenance | ~12 | ~6 | 05-maintenance-schema-ddl.sql | 100% | +| carriers | ~8 | ~4 | 06-carriers-schema-ddl.sql | 100% | +| billing | ~10 | ~5 | 07-billing-transport-ddl.sql | 100% | +| compliance | ~10 | ~5 | 08-compliance-schema-ddl.sql | 100% | + +--- + +## Schema: transport + +### Descripcion +Ordenes de transporte, embarques, viajes y rutas. + +### Tablas Principales + +```sql +-- Ordenes de Transporte +CREATE TABLE transport.ordenes_transporte ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL REFERENCES auth.tenants(id), + numero VARCHAR(20) NOT NULL, + cliente_id UUID NOT NULL, + status transport.status_ot NOT NULL DEFAULT 'BORRADOR', + fecha_solicitud TIMESTAMPTZ NOT NULL, + fecha_requerida TIMESTAMPTZ, + origen_id UUID NOT NULL, + destino_id UUID NOT NULL, + peso_kg DECIMAL(10,2), + volumen_m3 DECIMAL(10,2), + valor_declarado DECIMAL(12,2), + instrucciones TEXT, + created_at TIMESTAMPTZ DEFAULT NOW(), + updated_at TIMESTAMPTZ DEFAULT NOW() +); + +-- Embarques (agrupacion de OTs) +CREATE TABLE transport.embarques ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL, + numero VARCHAR(20) NOT NULL, + viaje_id UUID, + status transport.status_embarque NOT NULL, + created_at TIMESTAMPTZ DEFAULT NOW() +); + +-- Viajes +CREATE TABLE transport.viajes ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL, + numero VARCHAR(20) NOT NULL, + unidad_id UUID NOT NULL, + operador_id UUID NOT NULL, + remolque_id UUID, + status transport.status_viaje NOT NULL DEFAULT 'PLANEADO', + fecha_salida_programada TIMESTAMPTZ, + fecha_salida_real TIMESTAMPTZ, + fecha_llegada_programada TIMESTAMPTZ, + fecha_llegada_real TIMESTAMPTZ, + km_inicial INTEGER, + km_final INTEGER, + created_at TIMESTAMPTZ DEFAULT NOW() +); + +-- Paradas del viaje +CREATE TABLE transport.paradas_viaje ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + viaje_id UUID NOT NULL REFERENCES transport.viajes(id), + secuencia INTEGER NOT NULL, + tipo transport.tipo_parada NOT NULL, -- ORIGEN, DESTINO, ESCALA + ubicacion_id UUID NOT NULL, + eta TIMESTAMPTZ, + ata TIMESTAMPTZ, -- Actual Time of Arrival + etd TIMESTAMPTZ, + atd TIMESTAMPTZ, -- Actual Time of Departure + status transport.status_parada NOT NULL +); +``` + +### ENUMs + +```sql +CREATE TYPE transport.status_ot AS ENUM ( + 'BORRADOR', 'CONFIRMADA', 'PLANEADA', 'EN_TRANSITO', + 'ENTREGADA', 'FACTURADA', 'CERRADA', 'CANCELADA' +); + +CREATE TYPE transport.status_viaje AS ENUM ( + 'PLANEADO', 'DESPACHADO', 'EN_TRANSITO', 'EN_DESTINO', + 'ENTREGADO', 'CERRADO', 'CANCELADO' +); + +CREATE TYPE transport.tipo_parada AS ENUM ( + 'ORIGEN', 'DESTINO', 'ESCALA', 'CRUCE_FRONTERA' +); +``` + +--- + +## Schema: fleet + +### Descripcion +Unidades, remolques, operadores y documentos. + +### Tablas Principales + +```sql +-- Unidades (tractoras, cajas) +CREATE TABLE fleet.unidades ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL, + numero_economico VARCHAR(20) NOT NULL, + tipo fleet.tipo_unidad NOT NULL, + marca VARCHAR(50), + modelo VARCHAR(50), + ano INTEGER, + placa VARCHAR(15), + numero_serie VARCHAR(50), + capacidad_kg DECIMAL(10,2), + status fleet.status_unidad NOT NULL DEFAULT 'DISPONIBLE', + km_actual INTEGER, + proximo_servicio_km INTEGER, + created_at TIMESTAMPTZ DEFAULT NOW() +); + +-- Operadores +CREATE TABLE fleet.operadores ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL, + numero_empleado VARCHAR(20) NOT NULL, + nombre VARCHAR(100) NOT NULL, + apellido_paterno VARCHAR(50) NOT NULL, + apellido_materno VARCHAR(50), + rfc VARCHAR(13), + curp VARCHAR(18), + licencia_federal VARCHAR(20), + licencia_vencimiento DATE, + status fleet.status_operador NOT NULL DEFAULT 'ACTIVO', + telefono VARCHAR(15), + created_at TIMESTAMPTZ DEFAULT NOW() +); + +-- Documentos de unidades +CREATE TABLE fleet.documentos_unidades ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + unidad_id UUID NOT NULL REFERENCES fleet.unidades(id), + tipo fleet.tipo_documento_unidad NOT NULL, + numero VARCHAR(50), + fecha_emision DATE, + fecha_vencimiento DATE, + archivo_url TEXT, + created_at TIMESTAMPTZ DEFAULT NOW() +); +``` + +### ENUMs + +```sql +CREATE TYPE fleet.tipo_unidad AS ENUM ( + 'TRACTOCAMION', 'RABON', 'TORTON', 'CAJA_SECA', + 'CAJA_REFRIGERADA', 'PLATAFORMA', 'LOWBOY', 'TANQUE' +); + +CREATE TYPE fleet.status_unidad AS ENUM ( + 'DISPONIBLE', 'EN_VIAJE', 'EN_MANTENIMIENTO', + 'FUERA_SERVICIO', 'BAJA' +); + +CREATE TYPE fleet.status_operador AS ENUM ( + 'ACTIVO', 'EN_VIAJE', 'DESCANSO', 'VACACIONES', + 'INCAPACIDAD', 'BAJA' +); +``` + +--- + +## Schema: tracking + +### Descripcion +Eventos GPS, geocercas, alertas, ETA. + +### Tablas Principales + +```sql +-- Eventos de tracking +CREATE TABLE tracking.eventos ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL, + unidad_id UUID NOT NULL, + viaje_id UUID, + tipo tracking.tipo_evento NOT NULL, + latitud DECIMAL(10,7) NOT NULL, + longitud DECIMAL(10,7) NOT NULL, + velocidad_kmh INTEGER, + rumbo INTEGER, + odometro INTEGER, + timestamp_gps TIMESTAMPTZ NOT NULL, + timestamp_server TIMESTAMPTZ DEFAULT NOW(), + datos_extra JSONB +); + +-- Geocercas +CREATE TABLE tracking.geocercas ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL, + nombre VARCHAR(100) NOT NULL, + tipo tracking.tipo_geocerca NOT NULL, + geometria GEOMETRY(POLYGON, 4326), + radio_metros INTEGER, -- para circulares + activa BOOLEAN DEFAULT true, + created_at TIMESTAMPTZ DEFAULT NOW() +); + +-- Alertas +CREATE TABLE tracking.alertas ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL, + viaje_id UUID, + unidad_id UUID, + tipo tracking.tipo_alerta NOT NULL, + severidad tracking.severidad_alerta NOT NULL, + mensaje TEXT NOT NULL, + leida BOOLEAN DEFAULT false, + created_at TIMESTAMPTZ DEFAULT NOW() +); +``` + +--- + +## Schema: fuel + +### Descripcion +Combustible, peajes, gastos de viaje. + +### Tablas Principales + +```sql +-- Cargas de combustible +CREATE TABLE fuel.cargas_combustible ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL, + viaje_id UUID, + unidad_id UUID NOT NULL, + operador_id UUID NOT NULL, + estacion VARCHAR(100), + litros DECIMAL(8,2) NOT NULL, + precio_litro DECIMAL(8,4) NOT NULL, + total DECIMAL(10,2) NOT NULL, + odometro INTEGER, + tipo_pago fuel.tipo_pago NOT NULL, + numero_vale VARCHAR(30), + fecha TIMESTAMPTZ NOT NULL, + latitud DECIMAL(10,7), + longitud DECIMAL(10,7), + created_at TIMESTAMPTZ DEFAULT NOW() +); + +-- Control de rendimiento +CREATE TABLE fuel.control_rendimiento ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + unidad_id UUID NOT NULL, + periodo_inicio DATE NOT NULL, + periodo_fin DATE NOT NULL, + km_recorridos INTEGER NOT NULL, + litros_consumidos DECIMAL(10,2) NOT NULL, + rendimiento_real DECIMAL(6,2) NOT NULL, -- km/litro + rendimiento_esperado DECIMAL(6,2), + variacion_porcentaje DECIMAL(5,2), + alerta_generada BOOLEAN DEFAULT false +); +``` + +--- + +## Schema: compliance + +### Descripcion +Carta Porte CFDI 3.1, HOS, inspecciones. + +### Tablas Principales + +```sql +-- Carta Porte +CREATE TABLE compliance.cartas_porte ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL, + viaje_id UUID NOT NULL, + tipo_cfdi compliance.tipo_cfdi NOT NULL, -- INGRESO, TRASLADO + version_carta_porte VARCHAR(10) DEFAULT '3.1', + uuid_cfdi UUID, + folio_fiscal VARCHAR(50), + fecha_timbrado TIMESTAMPTZ, + status compliance.status_carta_porte NOT NULL, + xml_firmado TEXT, + pdf_url TEXT, + created_at TIMESTAMPTZ DEFAULT NOW() +); + +-- Registro HOS (Horas de Servicio) +CREATE TABLE compliance.registros_hos ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL, + operador_id UUID NOT NULL, + fecha DATE NOT NULL, + horas_conduccion DECIMAL(4,2), + horas_servicio DECIMAL(4,2), + horas_descanso DECIMAL(4,2), + status compliance.status_hos NOT NULL, + notas TEXT +); +``` + +--- + +## Extensiones Requeridas + +```sql +CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; +CREATE EXTENSION IF NOT EXISTS "pgcrypto"; +CREATE EXTENSION IF NOT EXISTS "postgis"; -- Para tracking geografico +CREATE EXTENSION IF NOT EXISTS "pg_trgm"; -- Para busquedas +``` + +--- + +## RLS (Row Level Security) + +Todas las tablas implementan RLS por tenant: + +```sql +ALTER TABLE transport.ordenes_transporte ENABLE ROW LEVEL SECURITY; + +CREATE POLICY tenant_isolation ON transport.ordenes_transporte + USING (tenant_id = current_setting('app.tenant_id')::UUID); +``` + +--- + +## Referencias + +- DDL completo: `database/ddl/` +- Inventario: `orchestration/inventarios/DATABASE_INVENTORY.yml` +- Entities: `ENTITIES-CATALOG.md` + +--- + +*Ultima actualizacion: 2026-01-26* diff --git a/docs/_definitions/ENTITIES-CATALOG.md b/docs/_definitions/ENTITIES-CATALOG.md new file mode 100644 index 0000000..48bc64a --- /dev/null +++ b/docs/_definitions/ENTITIES-CATALOG.md @@ -0,0 +1,219 @@ +# ENTITIES-CATALOG.md - ERP Transportistas + +**Version:** 1.0.0 +**Fecha:** 2026-01-26 +**Total Entities:** 153 (95 heredadas + 58 propias especializadas) + +--- + +## Resumen por Schema + +| Schema | Entities | Estado | +|--------|----------|--------| +| auth | 20 | Heredado 100% | +| catalog | 15 | Heredado + extensiones | +| transport | ~25 | DDL completo | +| fleet | ~15 | DDL completo | +| tracking | ~10 | DDL completo | +| fuel | ~8 | DDL completo | +| maintenance | ~12 | DDL completo | +| carriers | ~8 | DDL completo | +| billing | ~10 | DDL completo | +| compliance | ~10 | DDL completo | + +--- + +## Entities Heredadas (erp-core) + +### Schema: auth (20) +- User, Role, Permission, RefreshToken, Session +- Tenant, Company, Branch +- UserRole, RolePermission +- PasswordReset, TwoFactorAuth +- ApiKey, AuditLog, LoginAttempt +- UserPreference, UserNotification +- OAuthProvider, OAuthToken +- DeviceSession, SecurityEvent + +### Schema: catalog (15) +- Country, State, City, Currency +- PaymentMethod, PaymentTerm +- UnitOfMeasure, TaxRate +- DocumentType, DocumentSequence +- Category, Tag +- Bank, BankAccount +- Warehouse + +--- + +## Entities Propias - Schema: transport (~25) + +### Ordenes de Transporte (MAI-003) + +| Entity | Tabla | Estado | Descripcion | +|--------|-------|--------|-------------| +| OrdenTransporte | ordenes_transporte | Backend 40% | Solicitud de servicio | +| Embarque | embarques | Pendiente | Agrupacion de OTs | +| Parada | paradas | Pendiente | Origenes/destinos | +| RestriccionOT | restricciones_ot | Pendiente | Restricciones logisticas | +| ItemOT | items_ot | Pendiente | Lineas de la OT | + +### Viajes y Rutas (MAI-004, MAI-005) + +| Entity | Tabla | Estado | Descripcion | +|--------|-------|--------|-------------| +| Viaje | viajes | Backend parcial | Ejecucion operativa | +| Ruta | rutas | Pendiente | Trayecto definido | +| ParadaViaje | paradas_viaje | Pendiente | Secuencia de paradas | +| ChecklistPreViaje | checklists_pre_viaje | Pendiente | Inspeccion salida | +| SelloViaje | sellos_viaje | Pendiente | Sellos de seguridad | +| EvidenciaCarga | evidencias_carga | Pendiente | Fotos de carga | + +### POD y Cierre (MAI-007) + +| Entity | Tabla | Estado | Descripcion | +|--------|-------|--------|-------------| +| POD | pods | Pendiente | Proof of Delivery | +| FirmaDigital | firmas_digitales | Pendiente | Firma electronica | +| FotoEntrega | fotos_entrega | Pendiente | Evidencia fotografica | +| TiempoReal | tiempos_reales | Pendiente | Tiempos efectivos | + +### Incidencias (MAI-008) + +| Entity | Tabla | Estado | Descripcion | +|--------|-------|--------|-------------| +| Incidencia | incidencias | Pendiente | Evento inesperado | +| ReclamoCliente | reclamos_clientes | Pendiente | Queja formal | + +--- + +## Entities Propias - Schema: fleet (~15) + +### Unidades y Remolques (MAI-011) + +| Entity | Tabla | Estado | Descripcion | +|--------|-------|--------|-------------| +| Unidad | unidades | Backend 40% | Tractora/caja | +| Remolque | remolques | Pendiente | Semirremolque | +| ConfiguracionVehicular | configuraciones_vehiculares | Pendiente | Combinaciones | +| DocumentoUnidad | documentos_unidades | Pendiente | Permisos, seguros | + +### Operadores (MAI-011) + +| Entity | Tabla | Estado | Descripcion | +|--------|-------|--------|-------------| +| Operador | operadores | Backend 40% | Conductor | +| LicenciaOperador | licencias_operadores | Pendiente | Licencias SCT | +| DocumentoOperador | documentos_operadores | Pendiente | Antidoping, cursos | +| DisponibilidadOperador | disponibilidad_operadores | Pendiente | Horario, descansos | + +--- + +## Entities Propias - Schema: tracking (~10) + +### Eventos GPS (MAI-006) + +| Entity | Tabla | Estado | Descripcion | +|--------|-------|--------|-------------| +| EventoTracking | eventos_tracking | Backend 20% | Posicion GPS | +| Geocerca | geocercas | Backend 20% | Zonas geograficas | +| AlertaTracking | alertas_tracking | Pendiente | Notificaciones | +| ETADinamico | eta_dinamico | Pendiente | Tiempo estimado | +| DispositivoGPS | dispositivos_gps | Pendiente | Hardware tracking | + +--- + +## Entities Propias - Schema: fuel (~8) + +### Combustible (MAI-012) + +| Entity | Tabla | Estado | Descripcion | +|--------|-------|--------|-------------| +| CargaCombustible | cargas_combustible | Backend 50% | Registro de carga | +| CrucePeaje | cruces_peaje | Backend 50% | Peajes IAVE/TAG | +| GastoViaje | gastos_viaje | Backend 50% | Gastos operativos | +| AnticipoViatico | anticipos_viaticos | Backend 50% | Adelantos | +| ControlRendimiento | control_rendimiento | Backend 50% | km/litro | + +--- + +## Entities Propias - Schema: maintenance (~12) + +### Mantenimiento (MAI-013) + +| Entity | Tabla | Estado | Descripcion | +|--------|-------|--------|-------------| +| OrdenTrabajo | ordenes_trabajo | Pendiente | OT mantenimiento | +| ProgramaMantenimiento | programas_mantenimiento | Pendiente | Preventivo | +| RefaccionFlota | refacciones_flota | Pendiente | Inventario partes | +| HistorialMantenimiento | historial_mantenimiento | Pendiente | Registro historico | +| ProveedorMantenimiento | proveedores_mantenimiento | Pendiente | Talleres externos | + +--- + +## Entities Propias - Schema: carriers (~8) + +### Terceros (MAI-014) + +| Entity | Tabla | Estado | Descripcion | +|--------|-------|--------|-------------| +| Carrier | carriers | Pendiente | Transportista externo | +| DocumentoCarrier | documentos_carriers | Pendiente | Permisos, seguros | +| ScorecardCarrier | scorecard_carriers | Pendiente | Evaluacion | +| TarifaCarrier | tarifas_carriers | Pendiente | Precios acordados | + +--- + +## Entities Propias - Schema: billing (~10) + +### Facturacion Transporte (MAI-009) + +| Entity | Tabla | Estado | Descripcion | +|--------|-------|--------|-------------| +| Lane | lanes | Backend 30% | Ruta comercial | +| Tarifa | tarifas | Backend 30% | Precio por lane | +| RecargoCatalogo | recargos_catalogo | Backend 30% | Fuel surcharge, detention | +| FacturaTransporte | facturas_transporte | Backend 30% | Factura servicio | +| LineaFactura | lineas_factura | Backend 30% | Detalle factura | +| FuelSurcharge | fuel_surcharge | Backend 30% | Recargo combustible | + +### Liquidaciones (MAI-010) + +| Entity | Tabla | Estado | Descripcion | +|--------|-------|--------|-------------| +| LiquidacionOperador | liquidaciones_operadores | Pendiente | Pago operador | +| Deduccion | deducciones | Pendiente | Descuentos | + +--- + +## Entities Propias - Schema: compliance (~10) + +### Carta Porte (MAE-016) + +| Entity | Tabla | Estado | Descripcion | +|--------|-------|--------|-------------| +| CartaPorte | cartas_porte | Pendiente | Complemento CFDI | +| UbicacionCartaPorte | ubicaciones_carta_porte | Pendiente | Origenes/destinos | +| MercanciaCartaPorte | mercancias_carta_porte | Pendiente | Detalle carga | +| AutoTransporteFederal | autotransporte_federal | Pendiente | Datos SCT | +| FiguraTransporte | figuras_transporte | Pendiente | Operador, propietario | + +### HOS y Bitacora (MAE-017) + +| Entity | Tabla | Estado | Descripcion | +|--------|-------|--------|-------------| +| RegistroHOS | registros_hos | Pendiente | Horas de servicio | +| Bitacora | bitacoras | Pendiente | Log operador | +| InspeccionUnidad | inspecciones_unidades | Pendiente | Pre/post viaje | + +--- + +## Referencias + +- DDL completo: `database/ddl/` +- Backend Inventory: `orchestration/inventarios/BACKEND_INVENTORY.yml` +- Database Inventory: `orchestration/inventarios/DATABASE_INVENTORY.yml` + +--- + +*Ultima actualizacion: 2026-01-26* diff --git a/docs/_definitions/MODULES-CATALOG.md b/docs/_definitions/MODULES-CATALOG.md new file mode 100644 index 0000000..656d30d --- /dev/null +++ b/docs/_definitions/MODULES-CATALOG.md @@ -0,0 +1,206 @@ +# MODULES-CATALOG.md - ERP Transportistas + +**Version:** 1.0.0 +**Fecha:** 2026-01-26 +**Total Modulos:** 42 (22 heredados + 20 propios) + +--- + +## Resumen + +| Categoria | Cantidad | Estado | +|-----------|----------|--------| +| Heredados de erp-core | 22 | 100% disponibles | +| Propios Fase 1 (MAI) | 15 | DDL 100%, Backend 40% | +| Propios Fase 2 (MAE) | 3 | DDL 100%, Backend 0% | +| Propios Fase 3 (MAA) | 2 | Planificados | + +--- + +## Modulos Heredados (erp-core) + +### Foundation (4) + +| Codigo | Nombre | Entities | Reutilizacion | +|--------|--------|----------|---------------| +| MGN-001 | Auth | 20 | 100% | +| MGN-002 | Users | 3 | 100% | +| MGN-003 | Roles | 4 | 100% | +| MGN-004 | Tenants | 2 | 100% | + +### Core Business (6) + +| Codigo | Nombre | Entities | Reutilizacion | +|--------|--------|----------|---------------| +| MGN-005 | Catalogs | 15 | 80% + extensiones | +| MGN-006 | Settings | 8 | 90% | +| MGN-010 | Partners | 5 | 60% + carriers | +| MGN-011 | Inventory | 14 | 50% (refacciones) | +| MGN-012 | Financial | 15 | 70% + transporte | +| MGN-013 | Purchasing | 10 | 60% | + +### Extended (5) + +| Codigo | Nombre | Entities | Reutilizacion | +|--------|--------|----------|---------------| +| MGN-007 | Audit | 7 | 100% | +| MGN-008 | Notifications | 6 | 100% | +| MGN-009 | Reports | 5 | 50% + KPIs transporte | +| MGN-014 | CRM | 8 | 60% + shippers | +| MGN-015 | Projects | 10 | 30% (viajes como proyectos) | + +### SaaS Platform (4) + +| Codigo | Nombre | Entities | Reutilizacion | +|--------|--------|----------|---------------| +| MGN-016 | Billing | 5 | 100% | +| MGN-017 | Plans | 3 | 100% | +| MGN-018 | Webhooks | 4 | 100% | +| MGN-019 | Feature Flags | 2 | 100% | + +### AI/Intelligence (3) + +| Codigo | Nombre | Entities | Reutilizacion | +|--------|--------|----------|---------------| +| MGN-020 | AI Integration | 7 | 80% + rutas | +| MGN-021 | WhatsApp | 5 | 100% | +| MGN-022 | MCP Server | 2 | 70% + tools transporte | + +--- + +## Modulos Propios - Fase 1 (MAI) + +### MAI-001: Fundamentos +- **Hereda de:** MGN-001 a MGN-004 +- **Estado:** 100% heredado +- **Descripcion:** Auth, RBAC, multi-tenancy + +### MAI-002: Clientes y Tarifas +- **Schema:** transport +- **Entities:** Cliente, Lane, Tarifa, Recargo +- **Estado:** DDL 0%, Backend 0% +- **Descripcion:** Shippers, tarifas por lane, SLAs + +### MAI-003: Ordenes de Transporte +- **Schema:** transport +- **Entities:** OrdenTransporte, Embarque, Parada, Restriccion +- **Estado:** DDL 100%, Backend 40% +- **Descripcion:** Solicitudes de servicio, multi-paradas + +### MAI-004: Planeacion TMS +- **Schema:** transport +- **Entities:** Consolidacion, AsignacionRecurso, CapacidadRuta +- **Estado:** DDL 100%, Backend 0% +- **Descripcion:** Planeacion de carga, capacidad + +### MAI-005: Despacho +- **Schema:** transport +- **Entities:** ChecklistPreViaje, Sello, EvidenciaCarga +- **Estado:** DDL 100%, Backend 0% +- **Descripcion:** Liberacion de viajes + +### MAI-006: Tracking +- **Schema:** tracking +- **Entities:** EventoTracking, Geocerca, AlertaTracking, ETA +- **Estado:** DDL 100%, Backend 20% +- **Descripcion:** GPS, eventos, alertas + +### MAI-007: POD y Cierre +- **Schema:** transport +- **Entities:** POD, FirmaDigital, FotoEntrega, TiempoReal +- **Estado:** DDL 100%, Backend 0% +- **Descripcion:** Proof of Delivery + +### MAI-008: Incidencias +- **Schema:** transport +- **Entities:** Incidencia, ReclamoCliente, ImpactoServicio +- **Estado:** DDL 100%, Backend 0% +- **Descripcion:** Reclamaciones + +### MAI-009: Facturacion Transporte +- **Schema:** billing +- **Entities:** FacturaTransporte, LineaFactura, FuelSurcharge +- **Estado:** DDL 100%, Backend 30% +- **Descripcion:** Facturacion especializada + +### MAI-010: Liquidaciones +- **Schema:** billing +- **Entities:** LiquidacionOperador, Viatico, Deduccion +- **Estado:** DDL 100%, Backend 0% +- **Descripcion:** Pago a operadores + +### MAI-011: Gestion de Flota +- **Schema:** fleet +- **Entities:** Unidad, Remolque, Operador, LicenciaOperador +- **Estado:** DDL 100%, Backend 40% +- **Descripcion:** Control de activos + +### MAI-012: Combustible y Gastos +- **Schema:** fuel +- **Entities:** CargaCombustible, CrucePeaje, GastoViaje, Anticipo +- **Estado:** DDL 100%, Backend 50% +- **Descripcion:** Control antifraude + +### MAI-013: Mantenimiento Flota +- **Schema:** maintenance +- **Entities:** OrdenTrabajo, ProgramaMantenimiento, Refaccion +- **Estado:** DDL 100%, Backend 0% +- **Descripcion:** Preventivo/correctivo + +### MAI-014: Carriers (Terceros) +- **Schema:** carriers +- **Entities:** Carrier, DocumentoCarrier, ScorecardCarrier +- **Estado:** DDL 100%, Backend 0% +- **Descripcion:** Subcontratacion + +### MAI-015: Portal Cliente +- **Schema:** transport +- **Entities:** UsuarioPortal, ConfigPortal +- **Estado:** DDL 100%, Backend 0% +- **Descripcion:** Autoservicio clientes + +--- + +## Modulos Propios - Fase 2 (MAE) + +### MAE-016: Carta Porte CFDI +- **Schema:** compliance +- **Entities:** CartaPorte, ComplementoFiscal, ExpedienteCFDI +- **Estado:** DDL 100%, Backend 0% +- **Descripcion:** Complemento 3.1 obligatorio + +### MAE-017: HOS y Bitacora +- **Schema:** compliance +- **Entities:** RegistroHOS, Bitacora, InspeccionUnidad +- **Estado:** DDL 100%, Backend 0% +- **Descripcion:** Horas de servicio, NOM-087 + +### MAE-018: Reportes y KPIs +- **Schema:** analytics +- **Entities:** KPITransporte, ReporteOTIF, DashboardConfig +- **Estado:** DDL 100%, Backend 0% +- **Descripcion:** Metricas de desempeno + +--- + +## Modulos Propios - Fase 3 (MAA) + +### MAA-019: Optimizacion Rutas +- **Estado:** Planificado +- **Descripcion:** ML para optimizacion, prediccion ETA + +### MAA-020: Integraciones EDI +- **Estado:** Planificado +- **Descripcion:** Intercambio electronico datos + +--- + +## Referencias + +- Inventario Backend: `orchestration/inventarios/BACKEND_INVENTORY.yml` +- Inventario Database: `orchestration/inventarios/DATABASE_INVENTORY.yml` +- CLAUDE.md: `CLAUDE.md` + +--- + +*Ultima actualizacion: 2026-01-26* diff --git a/docs/_definitions/SERVICES-CATALOG.md b/docs/_definitions/SERVICES-CATALOG.md new file mode 100644 index 0000000..4b9fc02 --- /dev/null +++ b/docs/_definitions/SERVICES-CATALOG.md @@ -0,0 +1,195 @@ +# SERVICES-CATALOG.md - ERP Transportistas + +**Version:** 1.0.0 +**Fecha:** 2026-01-26 +**Total Services:** ~80 (50 heredados + 30 propios) + +--- + +## Resumen + +| Categoria | Services | Estado | +|-----------|----------|--------| +| Heredados erp-core | ~50 | 100% disponibles | +| Propios transporte | ~30 | 40% implementados | + +--- + +## Services Heredados (erp-core) + +### Auth & Users +- AuthService +- UsersService +- RolesService +- PermissionsService +- SessionsService + +### Tenancy +- TenantsService +- CompaniesService +- BranchesService + +### Core +- CatalogsService +- SettingsService +- AuditService +- NotificationsService + +### Financial +- FinancialService +- InvoicesService +- PaymentsService +- AccountingService + +### Partners +- PartnersService +- CustomersService +- SuppliersService + +### AI/Intelligence +- AIService +- WhatsAppService +- MCPService + +--- + +## Services Propios - Transporte + +### OrdenesTransporteService (MAI-003) +- **Path:** `backend/src/modules/ordenes-transporte/services/` +- **Estado:** 40% implementado +- **Metodos:** + - `create(dto)` - Crear OT + - `findAll(filters)` - Listar OTs + - `findById(id)` - Obtener OT + - `update(id, dto)` - Actualizar OT + - `delete(id)` - Eliminar OT + - `changeStatus(id, status)` - Cambiar estado + - `assignToViaje(otId, viajeId)` - Asignar a viaje + +### ViajesService (MAI-004, MAI-005) +- **Path:** `backend/src/modules/viajes/services/` +- **Estado:** Pendiente +- **Metodos:** + - `create(dto)` - Crear viaje + - `planificar(viajeId, recursos)` - Planificar recursos + - `despachar(viajeId, checklist)` - Liberar viaje + - `cerrar(viajeId, pod)` - Cerrar con POD + +### TrackingService (MAI-006) +- **Path:** `backend/src/modules/tracking/services/` +- **Estado:** 20% implementado +- **Metodos:** + - `registrarEvento(dto)` - Registrar posicion GPS + - `getUltimaPosicion(unidadId)` - Ultima ubicacion + - `getHistorial(viajeId)` - Historial de eventos + - `calcularETA(viajeId)` - ETA dinamico + - `verificarGeocercas(lat, lng)` - Check geocercas + - `generarAlerta(tipo, datos)` - Crear alerta + +### FlotaService (MAI-011) +- **Path:** `backend/src/modules/gestion-flota/services/` +- **Estado:** 40% implementado +- **Metodos:** + - `getUnidades(filters)` - Listar unidades + - `getOperadores(filters)` - Listar operadores + - `getDisponibilidad(fecha)` - Recursos disponibles + - `asignarOperador(unidadId, operadorId)` - Asignar + - `verificarDocumentos(recursoId)` - Validar vigencia + +### CombustibleService (MAI-012) +- **Path:** `backend/src/modules/combustible-gastos/services/` +- **Estado:** 50% implementado +- **Metodos:** + - `registrarCarga(dto)` - Registrar carga combustible + - `registrarPeaje(dto)` - Registrar cruce peaje + - `registrarGasto(dto)` - Registrar gasto + - `generarAnticipo(operadorId, monto)` - Crear anticipo + - `calcularRendimiento(unidadId, periodo)` - km/litro + - `detectarAnomalias(viajeId)` - Alertas fraude + +### FacturacionTransporteService (MAI-009) +- **Path:** `backend/src/modules/facturacion-transporte/services/` +- **Estado:** 30% implementado +- **Metodos:** + - `calcularTarifa(lane, peso, volumen)` - Calcular precio + - `aplicarRecargos(facturaId, recargos)` - Agregar recargos + - `generarFactura(viajeId)` - Crear factura + - `calcularFuelSurcharge(fecha)` - Recargo combustible + +### CartaPorteService (MAE-016) +- **Path:** `backend/src/modules/carta-porte/services/` +- **Estado:** Pendiente +- **Metodos:** + - `generarComplemento(viajeId)` - Crear XML + - `validarDatos(dto)` - Validar requeridos + - `timbrar(cartaPorteId)` - Enviar a PAC + - `generarPDF(cartaPorteId)` - PDF para impresion + - `cancelar(cartaPorteId, motivo)` - Cancelar CFDI + +### MantenimientoService (MAI-013) +- **Path:** `backend/src/modules/mantenimiento/services/` +- **Estado:** Pendiente +- **Metodos:** + - `crearOrdenTrabajo(dto)` - Crear OT manto + - `programarPreventivo(unidadId)` - Programar + - `registrarRefaccion(otId, refaccion)` - Agregar parte + - `getProximosMantenimientos()` - Alertas vencimiento + +### CarriersService (MAI-014) +- **Path:** `backend/src/modules/carriers/services/` +- **Estado:** Pendiente +- **Metodos:** + - `registrarCarrier(dto)` - Alta tercero + - `validarDocumentos(carrierId)` - Verificar vigencia + - `calcularScorecard(carrierId)` - Evaluar desempeno + - `asignarViaje(carrierId, viajeId)` - Subcontratar + +--- + +## Integraciones Externas + +### GPSIntegrationService +- **Estado:** Planificado +- **Proveedores:** + - Geotab + - Samsara + - Omnitracs +- **Metodos:** + - `conectar(proveedor, credentials)` + - `getPosicion(deviceId)` + - `getEventos(desde, hasta)` + +### PACIntegrationService +- **Estado:** Planificado +- **Proveedores:** + - Finkok + - Facturama + - SW Sapien +- **Metodos:** + - `timbrar(xml)` + - `cancelar(uuid, motivo)` + - `getStatus(uuid)` + +### MapasService +- **Estado:** Planificado +- **Proveedores:** + - Google Maps + - HERE + - Mapbox +- **Metodos:** + - `geocodificar(direccion)` + - `calcularRuta(origen, destino)` + - `getDistanciaTiempo(puntos)` + +--- + +## Referencias + +- Backend: `backend/src/modules/` +- Entities: `ENTITIES-CATALOG.md` +- API: `_quick/QUICK-API.yml` + +--- + +*Ultima actualizacion: 2026-01-26* diff --git a/docs/_definitions/_INDEX.yml b/docs/_definitions/_INDEX.yml new file mode 100644 index 0000000..ea4b55e --- /dev/null +++ b/docs/_definitions/_INDEX.yml @@ -0,0 +1,39 @@ +# _INDEX.yml - Indice de Definiciones Canonicas +# ERP Transportistas +# Version: 1.0.0 +# Fecha: 2026-01-26 + +name: "Definiciones Canonicas - ERP Transportistas" +description: "Single Source of Truth para entidades, servicios y base de datos" + +catalogs: + - file: "MODULES-CATALOG.md" + description: "Catalogo de modulos del sistema" + priority: 1 + + - file: "ENTITIES-CATALOG.md" + description: "Catalogo de entidades backend" + priority: 2 + + - file: "SERVICES-CATALOG.md" + description: "Catalogo de servicios backend" + priority: 3 + + - file: "DATABASE-SCHEMA.md" + description: "Esquema de base de datos" + priority: 4 + +usage: | + Estos archivos son la fuente unica de verdad. + Antes de crear entidad/servicio nuevo: + 1. Verificar si existe en catalogo + 2. Si existe: USAR + 3. Si no existe: CREAR y DOCUMENTAR aqui + +sync_with: + - "orchestration/inventarios/MASTER_INVENTORY.yml" + - "orchestration/inventarios/BACKEND_INVENTORY.yml" + - "orchestration/inventarios/DATABASE_INVENTORY.yml" + +last_updated: "2026-01-26" +updated_by: "claude-code-orquestador" diff --git a/docs/_quick/QUICK-API.yml b/docs/_quick/QUICK-API.yml new file mode 100644 index 0000000..2cc574a --- /dev/null +++ b/docs/_quick/QUICK-API.yml @@ -0,0 +1,224 @@ +# QUICK-API.yml - API Endpoints ERP Transportistas +# Version: 1.0.0 +# Fecha: 2026-01-26 + +base_url: "http://localhost:3014/api/v1" +auth_header: "Authorization: Bearer {token}" +tenant_header: "X-Tenant-ID: {tenant_uuid}" + +endpoints: + auth: + prefix: "/auth" + routes: + - method: "POST" + path: "/login" + description: "Autenticacion" + body: "{ email, password }" + + - method: "POST" + path: "/refresh" + description: "Refrescar token" + + - method: "POST" + path: "/logout" + description: "Cerrar sesion" + + ordenes_transporte: + prefix: "/ordenes-transporte" + status: "40% implementado" + routes: + - method: "GET" + path: "/" + description: "Listar OTs" + query: "?status=CONFIRMADA&cliente_id=uuid" + + - method: "GET" + path: "/:id" + description: "Obtener OT" + + - method: "POST" + path: "/" + description: "Crear OT" + body: "CreateOrdenTransporteDto" + + - method: "PATCH" + path: "/:id" + description: "Actualizar OT" + + - method: "PATCH" + path: "/:id/status" + description: "Cambiar status" + body: "{ status: 'CONFIRMADA' }" + + - method: "DELETE" + path: "/:id" + description: "Eliminar OT" + + viajes: + prefix: "/viajes" + status: "Pendiente" + routes: + - method: "GET" + path: "/" + description: "Listar viajes" + + - method: "POST" + path: "/" + description: "Crear viaje" + + - method: "POST" + path: "/:id/despachar" + description: "Despachar viaje" + + - method: "POST" + path: "/:id/cerrar" + description: "Cerrar con POD" + + tracking: + prefix: "/tracking" + status: "20% implementado" + routes: + - method: "POST" + path: "/eventos" + description: "Registrar evento GPS" + body: "{ unidad_id, lat, lng, velocidad, timestamp }" + + - method: "GET" + path: "/unidades/:id/posicion" + description: "Ultima posicion" + + - method: "GET" + path: "/viajes/:id/historial" + description: "Historial de eventos" + + - method: "GET" + path: "/viajes/:id/eta" + description: "ETA dinamico" + + flota: + prefix: "/flota" + status: "40% implementado" + routes: + - method: "GET" + path: "/unidades" + description: "Listar unidades" + + - method: "GET" + path: "/operadores" + description: "Listar operadores" + + - method: "GET" + path: "/disponibilidad" + description: "Recursos disponibles" + query: "?fecha=2026-01-26" + + combustible: + prefix: "/combustible" + status: "50% implementado" + routes: + - method: "POST" + path: "/cargas" + description: "Registrar carga" + + - method: "GET" + path: "/rendimiento/:unidad_id" + description: "Rendimiento km/litro" + + - method: "GET" + path: "/anomalias" + description: "Alertas de fraude" + + facturacion: + prefix: "/facturacion" + status: "30% implementado" + routes: + - method: "GET" + path: "/tarifas" + description: "Listar tarifas" + query: "?lane=origen-destino" + + - method: "POST" + path: "/facturas" + description: "Generar factura" + + - method: "GET" + path: "/fuel-surcharge" + description: "Recargo combustible actual" + + carta_porte: + prefix: "/carta-porte" + status: "Pendiente" + routes: + - method: "POST" + path: "/" + description: "Generar complemento" + body: "{ viaje_id }" + + - method: "POST" + path: "/:id/timbrar" + description: "Timbrar con PAC" + + - method: "GET" + path: "/:id/pdf" + description: "Descargar PDF" + + - method: "POST" + path: "/:id/cancelar" + description: "Cancelar CFDI" + + carriers: + prefix: "/carriers" + status: "Pendiente" + routes: + - method: "GET" + path: "/" + description: "Listar carriers" + + - method: "GET" + path: "/:id/scorecard" + description: "Evaluacion" + + mantenimiento: + prefix: "/mantenimiento" + status: "Pendiente" + routes: + - method: "GET" + path: "/proximos" + description: "Proximos mantenimientos" + + - method: "POST" + path: "/ordenes-trabajo" + description: "Crear OT mantenimiento" + +response_format: + success: + example: | + { + "success": true, + "data": { ... }, + "meta": { + "total": 100, + "page": 1, + "limit": 20 + } + } + + error: + example: | + { + "success": false, + "error": { + "code": "VALIDATION_ERROR", + "message": "Campo requerido", + "details": [ ... ] + } + } + +pagination: + query_params: + - "limit (default: 20, max: 100)" + - "offset (default: 0)" + - "sort (campo)" + - "order (asc|desc)" + +last_updated: "2026-01-26" diff --git a/docs/_quick/QUICK-DATABASE.yml b/docs/_quick/QUICK-DATABASE.yml new file mode 100644 index 0000000..9126119 --- /dev/null +++ b/docs/_quick/QUICK-DATABASE.yml @@ -0,0 +1,155 @@ +# QUICK-DATABASE.yml - Base de Datos ERP Transportistas +# Version: 1.0.0 +# Fecha: 2026-01-26 + +summary: + engine: "PostgreSQL 15+ con PostGIS" + total_schemas: 8 + total_tables: "~98" + total_enums: "~47" + ddl_status: "100%" + +schemas: + transport: + description: "Ordenes de transporte, embarques, viajes" + ddl_file: "01-transport-schema-ddl.sql" + lines: "~13,500" + tables: + - "ordenes_transporte" + - "embarques" + - "viajes" + - "paradas_viaje" + - "items_ot" + - "restricciones_ot" + - "checklists_pre_viaje" + - "sellos_viaje" + - "evidencias_carga" + - "pods" + - "firmas_digitales" + - "incidencias" + + fleet: + description: "Unidades, remolques, operadores" + ddl_file: "02-fleet-schema-ddl.sql" + lines: "~12,200" + tables: + - "unidades" + - "remolques" + - "operadores" + - "licencias_operadores" + - "documentos_unidades" + - "documentos_operadores" + - "disponibilidad_operadores" + - "configuraciones_vehiculares" + + tracking: + description: "GPS, eventos, geocercas, alertas" + ddl_file: "03-tracking-schema-ddl.sql" + lines: "~11,600" + tables: + - "eventos" + - "geocercas" + - "alertas" + - "eta_dinamico" + - "dispositivos_gps" + + fuel: + description: "Combustible, peajes, gastos" + ddl_file: "04-fuel-schema-ddl.sql" + lines: "~9,300" + tables: + - "cargas_combustible" + - "cruces_peaje" + - "gastos_viaje" + - "anticipos_viaticos" + - "control_rendimiento" + + maintenance: + description: "Mantenimiento preventivo/correctivo" + ddl_file: "05-maintenance-schema-ddl.sql" + lines: "~9,600" + tables: + - "ordenes_trabajo" + - "programas_mantenimiento" + - "refacciones_flota" + - "historial_mantenimiento" + - "proveedores_mantenimiento" + + carriers: + description: "Transportistas terceros" + ddl_file: "06-carriers-schema-ddl.sql" + lines: "~10,600" + tables: + - "carriers" + - "documentos_carriers" + - "scorecard_carriers" + - "tarifas_carriers" + + billing: + description: "Facturacion transporte" + ddl_file: "07-billing-transport-ddl.sql" + lines: "~10,700" + tables: + - "lanes" + - "tarifas" + - "recargos_catalogo" + - "facturas_transporte" + - "lineas_factura" + - "fuel_surcharge" + - "liquidaciones_operadores" + - "deducciones" + + compliance: + description: "Carta Porte, HOS, inspecciones" + ddl_file: "08-compliance-schema-ddl.sql" + lines: "~14,700" + tables: + - "cartas_porte" + - "ubicaciones_carta_porte" + - "mercancias_carta_porte" + - "autotransporte_federal" + - "figuras_transporte" + - "registros_hos" + - "bitacoras" + - "inspecciones_unidades" + +key_enums: + transport: + - "status_ot" + - "status_viaje" + - "tipo_parada" + - "status_embarque" + + fleet: + - "tipo_unidad" + - "status_unidad" + - "status_operador" + - "tipo_documento_unidad" + + tracking: + - "tipo_evento" + - "tipo_geocerca" + - "tipo_alerta" + - "severidad_alerta" + + compliance: + - "tipo_cfdi" + - "status_carta_porte" + - "status_hos" + +extensions: + - "uuid-ossp" + - "pgcrypto" + - "postgis" + - "pg_trgm" + +rls_enabled: true +rls_policy: "tenant_isolation" + +credentials: + database: "erp_transportistas_db" + user: "erp_admin" + password: "erp_dev_2026" + port: 5432 + +last_updated: "2026-01-26" diff --git a/docs/_quick/QUICK-INDEX.yml b/docs/_quick/QUICK-INDEX.yml new file mode 100644 index 0000000..2cf3e44 --- /dev/null +++ b/docs/_quick/QUICK-INDEX.yml @@ -0,0 +1,53 @@ +# QUICK-INDEX.yml - Navegacion Rapida ERP Transportistas +# Version: 1.0.0 +# Fecha: 2026-01-26 + +name: "Guias Rapidas - ERP Transportistas" +description: "Indice de documentos de referencia rapida" + +guides: + - file: "QUICK-MODULES.yml" + description: "Modulos del sistema y estado" + use_when: "Necesitas ver que modulos existen y su progreso" + + - file: "QUICK-DATABASE.yml" + description: "Schemas y tablas principales" + use_when: "Necesitas consultar estructura de BD" + + - file: "QUICK-API.yml" + description: "Endpoints principales" + use_when: "Necesitas ver rutas de API" + +quick_links: + documentacion: + vision: "docs/00-vision-general/VISION-ERP-TRANSPORTISTAS.md" + requerimientos: "docs/03-requerimientos/REQ-GIRO-TRANSPORTISTA.md" + modulos: "docs/02-definicion-modulos/" + + inventarios: + master: "orchestration/inventarios/MASTER_INVENTORY.yml" + backend: "orchestration/inventarios/BACKEND_INVENTORY.yml" + database: "orchestration/inventarios/DATABASE_INVENTORY.yml" + + catalogos: + modules: "_definitions/MODULES-CATALOG.md" + entities: "_definitions/ENTITIES-CATALOG.md" + services: "_definitions/SERVICES-CATALOG.md" + database: "_definitions/DATABASE-SCHEMA.md" + + ddl: + transport: "database/ddl/01-transport-schema-ddl.sql" + fleet: "database/ddl/02-fleet-schema-ddl.sql" + tracking: "database/ddl/03-tracking-schema-ddl.sql" + fuel: "database/ddl/04-fuel-schema-ddl.sql" + maintenance: "database/ddl/05-maintenance-schema-ddl.sql" + carriers: "database/ddl/06-carriers-schema-ddl.sql" + billing: "database/ddl/07-billing-transport-ddl.sql" + compliance: "database/ddl/08-compliance-schema-ddl.sql" + + orchestration: + status: "PROJECT-STATUS.md" + proxima: "orchestration/PROXIMA-ACCION.md" + herencia: "orchestration/00-guidelines/HERENCIA-ERP-CORE.md" + +last_updated: "2026-01-26" diff --git a/docs/_quick/QUICK-MODULES.yml b/docs/_quick/QUICK-MODULES.yml new file mode 100644 index 0000000..e4482a5 --- /dev/null +++ b/docs/_quick/QUICK-MODULES.yml @@ -0,0 +1,219 @@ +# QUICK-MODULES.yml - Modulos ERP Transportistas +# Version: 1.0.0 +# Fecha: 2026-01-26 + +summary: + total: 42 + heredados: 22 + propios: 20 + implementados: 8 + pendientes: 12 + +heredados: + foundation: + - code: "MGN-001" + name: "Auth" + status: "100%" + - code: "MGN-002" + name: "Users" + status: "100%" + - code: "MGN-003" + name: "Roles" + status: "100%" + - code: "MGN-004" + name: "Tenants" + status: "100%" + + core_business: + - code: "MGN-005" + name: "Catalogs" + status: "80%" + notes: "Extendido con catalogos transporte" + - code: "MGN-010" + name: "Partners" + status: "60%" + notes: "Extendido con carriers" + - code: "MGN-012" + name: "Financial" + status: "70%" + notes: "Extendido con facturacion transporte" + + saas: + - code: "MGN-016" + name: "Billing" + status: "100%" + - code: "MGN-017" + name: "Plans" + status: "100%" + - code: "MGN-018" + name: "Webhooks" + status: "100%" + - code: "MGN-019" + name: "Feature Flags" + status: "100%" + + ai: + - code: "MGN-020" + name: "AI Integration" + status: "80%" + - code: "MGN-021" + name: "WhatsApp" + status: "100%" + - code: "MGN-022" + name: "MCP Server" + status: "70%" + +propios: + fase_1_mai: + - code: "MAI-001" + name: "Fundamentos" + ddl: "-" + backend: "100%" + frontend: "0%" + priority: "Heredado" + + - code: "MAI-002" + name: "Clientes y Tarifas" + ddl: "0%" + backend: "0%" + frontend: "0%" + priority: "ALTA" + + - code: "MAI-003" + name: "Ordenes de Transporte" + ddl: "100%" + backend: "40%" + frontend: "0%" + priority: "CRITICA" + + - code: "MAI-004" + name: "Planeacion TMS" + ddl: "100%" + backend: "0%" + frontend: "0%" + priority: "ALTA" + + - code: "MAI-005" + name: "Despacho" + ddl: "100%" + backend: "0%" + frontend: "0%" + priority: "ALTA" + + - code: "MAI-006" + name: "Tracking" + ddl: "100%" + backend: "20%" + frontend: "0%" + priority: "CRITICA" + + - code: "MAI-007" + name: "POD y Cierre" + ddl: "100%" + backend: "0%" + frontend: "0%" + priority: "ALTA" + + - code: "MAI-008" + name: "Incidencias" + ddl: "100%" + backend: "0%" + frontend: "0%" + priority: "MEDIA" + + - code: "MAI-009" + name: "Facturacion Transporte" + ddl: "100%" + backend: "30%" + frontend: "0%" + priority: "ALTA" + + - code: "MAI-010" + name: "Liquidaciones" + ddl: "100%" + backend: "0%" + frontend: "0%" + priority: "MEDIA" + + - code: "MAI-011" + name: "Gestion de Flota" + ddl: "100%" + backend: "40%" + frontend: "0%" + priority: "CRITICA" + + - code: "MAI-012" + name: "Combustible y Gastos" + ddl: "100%" + backend: "50%" + frontend: "0%" + priority: "MEDIA" + + - code: "MAI-013" + name: "Mantenimiento Flota" + ddl: "100%" + backend: "0%" + frontend: "0%" + priority: "MEDIA" + + - code: "MAI-014" + name: "Carriers (Terceros)" + ddl: "100%" + backend: "0%" + frontend: "0%" + priority: "MEDIA" + + - code: "MAI-015" + name: "Portal Cliente" + ddl: "100%" + backend: "0%" + frontend: "0%" + priority: "BAJA" + + fase_2_mae: + - code: "MAE-016" + name: "Carta Porte CFDI" + ddl: "100%" + backend: "0%" + frontend: "0%" + priority: "CRITICA" + notes: "Complemento 3.1 obligatorio" + + - code: "MAE-017" + name: "HOS y Bitacora" + ddl: "100%" + backend: "0%" + frontend: "0%" + priority: "ALTA" + + - code: "MAE-018" + name: "Reportes y KPIs" + ddl: "100%" + backend: "0%" + frontend: "0%" + priority: "MEDIA" + + fase_3_maa: + - code: "MAA-019" + name: "Optimizacion Rutas" + ddl: "-" + backend: "0%" + frontend: "0%" + priority: "BAJA" + notes: "Fase futura" + + - code: "MAA-020" + name: "Integraciones EDI" + ddl: "-" + backend: "0%" + frontend: "0%" + priority: "BAJA" + notes: "Fase futura" + +critical_path: + - "MAI-003: Ordenes de Transporte" + - "MAI-006: Tracking" + - "MAI-011: Gestion de Flota" + - "MAE-016: Carta Porte CFDI" + +last_updated: "2026-01-26" diff --git a/orchestration/00-guidelines/HERENCIA-ERP-CORE.md b/orchestration/00-guidelines/HERENCIA-ERP-CORE.md new file mode 100644 index 0000000..5e795b8 --- /dev/null +++ b/orchestration/00-guidelines/HERENCIA-ERP-CORE.md @@ -0,0 +1,201 @@ +# Herencia ERP-Core - ERP Transportistas + +**Version:** 1.0.0 +**Fecha:** 2026-01-26 +**Tipo:** CONSUMER (Nivel 2) + +--- + +## Relacion de Herencia + +``` +template-saas (PROVIDER - L0) + │ + ▼ +erp-core (INTERMEDIATE - L1) + │ + ├── erp-construccion + ├── erp-mecanicas-diesel + ├── erp-clinicas + ├── erp-retail + ├── erp-vidrio-templado + └── erp-transportistas ◀── ESTE PROYECTO +``` + +--- + +## Modulos Heredados de erp-core + +### Foundation (100% Heredado) + +| Modulo | Codigo Core | Reutilizacion | Modificaciones | +|--------|-------------|---------------|----------------| +| Auth | MGN-001 | 100% | Ninguna | +| Users | MGN-002 | 100% | Ninguna | +| Roles | MGN-003 | 100% | Roles adicionales transporte | +| Tenants | MGN-004 | 100% | Ninguna | + +### Core Business (60-70% Heredado) + +| Modulo | Codigo Core | Reutilizacion | Extensiones | +|--------|-------------|---------------|-------------| +| Catalogs | MGN-005 | 80% | Catalogos vehiculares | +| Settings | MGN-006 | 90% | Config GPS/tracking | +| Financial | MGN-012 | 70% | Facturacion transporte | +| Inventory | MGN-011 | 50% | Combustible, refacciones | +| Partners | MGN-010 | 60% | Clientes, carriers | + +### SaaS Features (100% Heredado) + +| Modulo | Codigo Core | Reutilizacion | +|--------|-------------|---------------| +| Billing | MGN-016 | 100% | +| Plans | MGN-017 | 100% | +| Webhooks | MGN-018 | 100% | +| Feature Flags | MGN-019 | 100% | + +### AI/Intelligence (80% Heredado) + +| Modulo | Codigo Core | Reutilizacion | Extensiones | +|--------|-------------|---------------|-------------| +| AI Integration | MGN-020 | 80% | Optimizacion rutas | +| WhatsApp | MGN-021 | 100% | - | +| MCP Server | MGN-022 | 70% | Tools transporte | + +--- + +## Modulos Especificos de Transporte (MAI/MAE/MAA) + +### Fase 1 - MAI (Modulo Aplicacion Inicial) + +| Codigo | Nombre | Herencia Core | Status | +|--------|--------|---------------|--------| +| MAI-001 | Fundamentos | MGN-001 a 004 | Heredado | +| MAI-002 | Clientes y Tarifas | MGN-010 ext | Nuevo 30% | +| MAI-003 | Ordenes de Transporte | - | Nuevo 100% | +| MAI-004 | Planeacion TMS | - | Nuevo 100% | +| MAI-005 | Despacho | - | Nuevo 100% | +| MAI-006 | Tracking | - | Nuevo 100% | +| MAI-007 | POD y Cierre | - | Nuevo 100% | +| MAI-008 | Incidencias | - | Nuevo 100% | +| MAI-009 | Facturacion Transporte | MGN-012 ext | Nuevo 60% | +| MAI-010 | Liquidaciones | - | Nuevo 100% | +| MAI-011 | Gestion de Flota | - | Nuevo 100% | +| MAI-012 | Combustible y Gastos | MGN-011 ext | Nuevo 70% | +| MAI-013 | Mantenimiento Flota | - | Nuevo 100% | +| MAI-014 | Carriers (Terceros) | - | Nuevo 100% | +| MAI-015 | Portal Cliente | - | Nuevo 100% | + +### Fase 2 - MAE (Modulo Aplicacion Extendido) + +| Codigo | Nombre | Herencia Core | Status | +|--------|--------|---------------|--------| +| MAE-016 | Carta Porte CFDI | MGN-012 ext | Nuevo 80% | +| MAE-017 | HOS y Bitacora | - | Nuevo 100% | +| MAE-018 | Reportes y KPIs | MGN-006 ext | Nuevo 50% | + +### Fase 3 - MAA (Modulo Aplicacion Avanzado) + +| Codigo | Nombre | Herencia Core | Status | +|--------|--------|---------------|--------| +| MAA-019 | Optimizacion Rutas | MGN-020 ext | Futuro | +| MAA-020 | Integraciones EDI | - | Futuro | + +--- + +## Patrones Reutilizados + +### Desde erp-core + +1. **Multi-Tenancy con RLS** + - Aislamiento por tenant_id + - Politicas RLS en todas las tablas + - Header X-Tenant-ID + +2. **Estructura de Modulos Backend** + ``` + module/ + ├── entities/ + ├── services/ + ├── controllers/ + ├── dto/ + └── index.ts + ``` + +3. **Naming Conventions** + - Entities: PascalCase singular + - Tables: snake_case plural + - Services: PascalCase + Service + - Controllers: PascalCase + Controller + +4. **API REST Standards** + - Versionado: /api/v1/ + - Pagination: limit, offset + - Sorting: sort, order + - Filtering: field=value + +--- + +## Schemas de Base de Datos + +### Heredados de erp-core +- auth +- catalog +- settings +- billing +- ai + +### Especificos de Transporte +- transport (ordenes, embarques, viajes) +- fleet (unidades, operadores) +- tracking (eventos, geofences) +- fuel (cargas combustible) +- maintenance (mantenimiento flota) +- carriers (transportistas terceros) +- billing_transport (facturacion especializada) +- compliance (HOS, carta porte) + +--- + +## Directivas Heredadas + +1. `DIRECTIVA-MULTI-TENANT.md` - Obligatoria +2. `DIRECTIVA-EXTENSION-VERTICALES.md` - Obligatoria +3. `ESTANDARES-API-REST-GENERICO.md` - Obligatoria +4. `TRIGGER-COHERENCIA-CAPAS.md` - Obligatoria +5. `TRIGGER-INVENTARIOS.md` - Obligatoria + +--- + +## Propagacion de Cambios + +### Desde erp-core + +| Tipo Cambio | Propagacion | SLA | +|-------------|-------------|-----| +| Security Fix | FORZADA | 24h | +| Bug Fix Critico | INMEDIATA | 48h | +| Feature Nuevo | EVALUADA | 2 semanas | +| Breaking Change | PLANIFICADA | 1 mes | +| Docs | INMEDIATA | 1 dia | + +### Proceso + +1. Monitorear cambios en erp-core +2. Evaluar impacto en modulos heredados +3. Aplicar cambios manteniendo extensiones locales +4. Validar build + lint + tests +5. Documentar en PROPAGATION-LOG + +--- + +## Referencias + +- `workspace-v2/orchestration/directivas/simco/PROPAGATION-RULES.md` +- `workspace-v2/orchestration/inventarios/REUSABLE-CODE-INVENTORY.yml` +- `erp-core/orchestration/directivas/DIRECTIVA-EXTENSION-VERTICALES.md` + +--- + +*Ultima actualizacion: 2026-01-26* +*Agente: claude-code-orquestador* diff --git a/orchestration/directivas/README.md b/orchestration/directivas/README.md new file mode 100644 index 0000000..67aa181 --- /dev/null +++ b/orchestration/directivas/README.md @@ -0,0 +1,28 @@ +# Directivas Locales - ERP Transportistas + +## Herencia + +Este proyecto hereda directivas de: +1. `workspace-v2/orchestration/directivas/` - Directivas globales SIMCO +2. `erp-core/orchestration/directivas/` - Directivas ERP genericas + +## Directivas Heredadas (Obligatorias) + +| Directiva | Ubicacion | Proposito | +|-----------|-----------|-----------| +| DIRECTIVA-MULTI-TENANT | erp-core | Aislamiento por tenant | +| DIRECTIVA-EXTENSION-VERTICALES | erp-core | Patron de extension | +| ESTANDARES-API-REST-GENERICO | erp-core | Estandares API | +| TRIGGER-COHERENCIA-CAPAS | erp-core | DDL-Entity-Controller | +| TRIGGER-INVENTARIOS | erp-core | Sincronizacion inventarios | + +## Directivas Locales + +Crear aqui directivas especificas de transporte: +- DIRECTIVA-CARTA-PORTE.md +- DIRECTIVA-TRACKING-GPS.md +- DIRECTIVA-INTEGRACIONES-EDI.md + +--- + +*Creado: 2026-01-26* diff --git a/orchestration/trazas/README.md b/orchestration/trazas/README.md new file mode 100644 index 0000000..4665bd3 --- /dev/null +++ b/orchestration/trazas/README.md @@ -0,0 +1,26 @@ +# Trazas - ERP Transportistas + +## Proposito + +Carpeta para tracking de actividades de agentes y tareas en progreso. + +## Archivos de Traza + +| Archivo | Proposito | +|---------|-----------| +| TRAZA-TAREAS-BACKEND.md | Historial tareas backend | +| TRAZA-TAREAS-DATABASE.md | Historial tareas DDL | +| TRAZA-TAREAS-FRONTEND.md | Historial tareas frontend | +| ACTIVE-FILES.yml | Archivos en edicion activa (multi-agente) | +| BLOCKED-TASKS.yml | Tareas bloqueadas | + +## Uso + +Los agentes deben actualizar las trazas al: +- Iniciar una tarea +- Completar una tarea +- Encontrar un bloqueo + +--- + +*Creado: 2026-01-26*