# Integracion con ERP-Core ## Descripcion Este documento describe como mecanicas-diesel se integra con el modulo base `erp-core` para reutilizar funcionalidades comunes y mantener consistencia en la arquitectura multi-tenant. ## Schemas Heredados de erp-core Los siguientes schemas son proporcionados por erp-core y NO deben duplicarse en mecanicas-diesel: | Schema | Descripcion | Tablas principales | |--------|-------------|-------------------| | `auth` | Autenticacion y usuarios | `users`, `sessions`, `tokens` | | `core` | Tenants y configuracion | `tenants`, `partners`, `settings` | | `audit` | Logs de auditoria | `activity_log` | ## Schemas Propios de mecanicas-diesel Los siguientes schemas son especificos de la vertical mecanicas-diesel: | Schema | Descripcion | |--------|-------------| | `service_management` | Ordenes de servicio, diagnosticos, cotizaciones | | `parts_management` | Inventario de refacciones | | `vehicle_management` | Vehiculos, flotas, motores | ## Mapeo de Conceptos ### Tenants ``` erp-core mecanicas-diesel ───────────────────────────────────────────── core.tenants.id → tenant_id (en todas las tablas) ``` El concepto de "taller" en mecanicas-diesel se mapea a un tenant de erp-core. Cada taller es un tenant aislado con sus propios datos. ### Usuarios ``` erp-core mecanicas-diesel ───────────────────────────────────────────── auth.users.id → created_by, assigned_to, performed_by, etc. ``` Todos los campos que referencian usuarios utilizan UUIDs que apuntan a `auth.users` de erp-core. ### Clientes/Partners ``` erp-core mecanicas-diesel ───────────────────────────────────────────── core.partners.id → customer_id (en service_orders, quotes, vehicles) ``` Los clientes del taller se gestionan como partners en erp-core, con campos adicionales especificos del taller si es necesario. ## Configuracion de RLS ### Funcion de Tenant Actual erp-core provee la funcion `get_current_tenant_id()` que retorna el UUID del tenant activo en la sesion: ```sql -- Uso tipico en vistas WHERE tenant_id = get_current_tenant_id() ``` ### Politicas RLS Todas las tablas de mecanicas-diesel utilizan la funcion `create_tenant_rls_policies()` de erp-core que genera politicas completas: ```sql -- Genera SELECT, INSERT, UPDATE, DELETE policies SELECT create_tenant_rls_policies('service_management', 'service_orders'); ``` Esto garantiza: - SELECT: Solo registros del tenant actual - INSERT: Solo puede insertar con su tenant_id - UPDATE: Solo puede modificar registros de su tenant - DELETE: Solo puede eliminar registros de su tenant ## Orden de Inicializacion Al desplegar mecanicas-diesel, los scripts deben ejecutarse en este orden: 1. **erp-core** (debe existir previamente) - Extensions - Schemas auth, core - Funciones RLS 2. **mecanicas-diesel** - `00-extensions.sql` - Extensions adicionales (si las hay) - `01-create-schemas.sql` - service_management, parts_management, vehicle_management - `02-rls-functions.sql` - Funciones RLS (usa las de erp-core si existen) - `03-service-management-tables.sql` - `04-parts-management-tables.sql` - `05-vehicle-management-tables.sql` - `06-seed-data.sql` ## Variables de Entorno La configuracion de base de datos esta separada de erp-core: ```bash # mecanicas-diesel usa su propia base de datos DB_NAME=mecanicas_diesel DB_USER=mecanicas_user # O puede compartir la misma BD si se prefiere # En ese caso, solo cambiar los schemas ``` ## Ejemplo de Query Cross-Schema ```sql -- Obtener ordenes con datos del cliente (partner de erp-core) SELECT so.order_number, so.status, p.name as customer_name, p.email as customer_email FROM service_management.service_orders so JOIN core.partners p ON so.customer_id = p.id WHERE so.tenant_id = get_current_tenant_id(); ``` ## Consideraciones de Migracion Si se migra de una instalacion standalone a una integrada con erp-core: 1. Exportar datos de usuarios locales 2. Importar a auth.users de erp-core 3. Actualizar referencias en tablas de mecanicas-diesel 4. Eliminar tablas duplicadas (users, tenants, etc.) --- **Creado por:** Requirements-Analyst **Fecha:** 2025-12-06