143 lines
4.4 KiB
Markdown
143 lines
4.4 KiB
Markdown
# 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
|