# 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
