# Referencia de Base de Datos - ERP Mecánicas Diesel

**Fecha:** 2025-12-08
**Versión:** 1.1
**Proyecto:** ERP Mecánicas Diesel
**Nivel:** 2B.2 (Proyecto Independiente)

---

## RESUMEN

ERP Mecánicas Diesel es un **proyecto independiente** que implementa y adapta patrones del ERP-Core para el dominio de talleres de reparación de motores diesel. No es una extensión del core, sino un sistema autónomo que:

1. **Implementa** schemas propios para gestión de órdenes de servicio
2. **Adapta** estructuras de inventario para refacciones especializadas
3. **Reutiliza** patrones de autenticación y multi-tenancy
4. **Opera independientemente** como sistema completo

**DDL de Referencia (Core):** `apps/erp-core/database/ddl/`
**DDL Propio:** `database/init/`

---

## ARQUITECTURA DEL PROYECTO

```
┌─────────────────────────────────────────────────────────────────┐
│                    ERP CORE (Referencia)                        │
│  Patrones, specs y estructuras reutilizables                    │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐               │
│  │  auth   │ │  core   │ │inventory│ │  sales   │              │
│  │ patrones│ │ patrones│ │ patrones│ │ patrones │              │
│  └─────────┘ └─────────┘ └─────────┘ └─────────┘               │
└─────────────────────────────────────────────────────────────────┘
                              │
                              │ REFERENCIA / FORK
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│           ERP MECÁNICAS DIESEL (Proyecto Independiente)         │
│                                                                 │
│  ┌───────────────┐ ┌───────────────┐ ┌───────────────┐         │
│  │   service_    │ │    parts_     │ │   vehicle_    │         │
│  │  management   │ │  management   │ │  management   │         │
│  │    18 tbl     │ │    12 tbl     │ │     8 tbl     │         │
│  │  (órdenes)    │ │ (refacciones) │ │  (vehículos)  │         │
│  └───────────────┘ └───────────────┘ └───────────────┘         │
│                                                                 │
│  Schemas propios: 3 | Tablas propias: 38                        │
│  Opera de forma INDEPENDIENTE                                   │
└─────────────────────────────────────────────────────────────────┘
```

---

## PATRONES REUTILIZADOS DEL CORE

Los siguientes patrones del ERP-Core fueron **adaptados e implementados** en este proyecto:

| Patrón del Core | Adaptación en Mecánicas Diesel |
|-----------------|-------------------------------|
| `auth.*` | Multi-tenancy con RLS propio |
| `core.partners` | Clientes, flotas de vehículos |
| `inventory.*` | Refacciones, partes OEM, stock |
| `sales.*` | Cotizaciones, órdenes de servicio |

**Nota:** Este proyecto NO depende del ERP-Core para ejecutarse. Implementa sus propios schemas y puede operar de forma completamente standalone.

---

## SCHEMAS ESPECÍFICOS DE MECÁNICAS DIESEL

### 1. Schema `service_management` (10+ tablas)

**Propósito:** Gestión de órdenes de servicio y diagnósticos

```sql
-- Tablas principales:
service_management.service_orders      -- Órdenes de trabajo
service_management.order_items         -- Líneas (servicios/refacciones)
service_management.work_bays           -- Bahías de trabajo
service_management.diagnostics         -- Diagnósticos
service_management.diagnostic_items    -- Hallazgos
service_management.quotes              -- Cotizaciones
service_management.services            -- Catálogo de servicios
```

**Relaciones con Core:**
- `service_orders.customer_id` -> `core.partners`
- `service_orders.vehicle_id` -> `vehicle_management.vehicles`
- `order_items.part_id` -> `parts_management.parts`

### 2. Schema `parts_management` (12+ tablas)

**Propósito:** Inventario de refacciones especializado

```sql
-- Extiende: inventory schema del core
-- Adiciona campos específicos:
--   OEM numbers, compatibilidad vehicular, garantías

parts_management.parts                 -- Refacciones (extiende inventory.products)
parts_management.part_categories       -- Categorías
parts_management.suppliers             -- Proveedores especializados
parts_management.warehouse_locations   -- Ubicaciones en almacén
parts_management.inventory_movements   -- Kardex
parts_management.inventory_adjustments -- Ajustes
parts_management.part_compatibility    -- Compatibilidad con vehículos
```

**Relaciones con Core:**
- `parts.base_product_id` -> `inventory.products` (herencia)
- `suppliers.partner_id` -> `core.partners`

### 3. Schema `vehicle_management` (8+ tablas)

**Propósito:** Gestión de vehículos diesel y flotas

```sql
vehicle_management.vehicles            -- Vehículos registrados
vehicle_management.vehicle_engines     -- Especificaciones del motor
vehicle_management.fleets              -- Flotas de clientes
vehicle_management.engine_catalog      -- Catálogo de motores diesel
vehicle_management.maintenance_reminders -- Recordatorios de servicio
```

**Relaciones con Core:**
- `vehicles.customer_id` -> `core.partners`
- `fleets.customer_id` -> `core.partners`

---

## ORDEN DE EJECUCIÓN DDL

Para recrear la base de datos completa:

```bash
# PASO 1: Cargar ERP Core (base)
cd apps/erp-core/database
./scripts/reset-database.sh --force

# PASO 2: Cargar extensiones de Mecánicas Diesel
cd apps/verticales/mecanicas-diesel/database
psql $DATABASE_URL -f init/00-extensions.sql
psql $DATABASE_URL -f init/01-create-schemas.sql
psql $DATABASE_URL -f init/02-rls-functions.sql
psql $DATABASE_URL -f init/03-service-management-tables.sql
psql $DATABASE_URL -f init/04-parts-management-tables.sql
psql $DATABASE_URL -f init/05-vehicle-management-tables.sql
psql $DATABASE_URL -f init/06-seed-data.sql
```

---

## DEPENDENCIAS CRUZADAS

### Tablas de Mecánicas que dependen del Core

| Tabla Mecánicas | Depende de (Core) |
|-----------------|-------------------|
| `service_management.service_orders` | `core.partners` (customer) |
| `service_management.service_orders` | `auth.users` (assigned_to) |
| `parts_management.parts` | `inventory.products` (herencia) |
| `parts_management.suppliers` | `core.partners` |
| `vehicle_management.vehicles` | `core.partners` (owner) |
| `vehicle_management.fleets` | `core.partners` |
| Todas las tablas | `auth.users` (audit) |

---

## SPECS DEL CORE IMPLEMENTADAS

| Spec Core | Aplicación en Mecánicas | Estado |
|-----------|------------------------|--------|
| SPEC-VALORACION-INVENTARIO | Costeo de refacciones | ✅ DDL LISTO |
| SPEC-TRAZABILIDAD-LOTES-SERIES | Garantías de partes | ✅ DDL LISTO |
| SPEC-INVENTARIOS-CICLICOS | Conteos de refacciones | ✅ DDL LISTO |
| SPEC-MAIL-THREAD-TRACKING | Historial de órdenes | PENDIENTE |
| SPEC-TAREAS-RECURRENTES | Mantenimientos preventivos | PENDIENTE |

### Correcciones de DDL Core (2025-12-08)

El DDL del ERP-Core fue corregido para resolver FK inválidas:

1. **stock_valuation_layers**: Campos `journal_entry_id` y `journal_entry_line_id` (antes `account_move_*`)
2. **stock_move_consume_rel**: Nueva tabla de trazabilidad (antes `move_line_consume_rel`)
3. **category_stock_accounts**: FK corregida a `core.product_categories`
4. **product_categories**: ALTERs ahora apuntan a schema `core`

Estas correcciones permiten que el DDL de inventory se ejecute correctamente y habilitan:
- Valoración FIFO/AVCO de refacciones
- Trazabilidad de lotes y números de serie (garantías)
- Conteos cíclicos de inventario con clasificación ABC

### Validación DDL Mecánicas-Diesel (2025-12-08)

**Estado:** ✅ VÁLIDO - Compatible con ERP-Core

| Archivo | Líneas | Tablas | Estado |
|---------|--------|--------|--------|
| `init/00-extensions.sql` | 14 | 0 | ✅ Válido |
| `init/01-create-schemas.sql` | 30 | 0 | ✅ Válido |
| `init/02-rls-functions.sql` | 106 | 0 | ✅ Válido |
| `init/03-service-management-tables.sql` | 567 | ~18 | ✅ Válido |
| `init/04-parts-management-tables.sql` | 398 | ~12 | ✅ Válido |
| `init/05-vehicle-management-tables.sql` | 365 | ~8 | ✅ Válido |

**Enfoque de FK:** Este proyecto usa **referencias comentadas** en lugar de FK explícitas:

```sql
-- Usa columnas sin FK explícitas:
tenant_id UUID NOT NULL,  -- Referencia conceptual: auth.tenants
customer_id UUID NOT NULL,  -- Referencia conceptual: core.partners
assigned_to UUID,  -- Referencia conceptual: auth.users
```

**Ventajas:**
- ✅ No depende del schema específico de ERP-Core
- ✅ Puede operar standalone o integrado
- ✅ Sin discrepancias con cambios en auth/core

**Desventajas:**
- ⚠️ No hay integridad referencial a nivel de BD
- ⚠️ La integridad debe garantizarse a nivel de aplicación

**Recomendación para integración completa:**
Si se requiere integridad referencial estricta, agregar FK explícitas a `auth.tenants` y `auth.users` (no `core.*`).

---

## MAPEO DE NOMENCLATURA

| Core | Mecánicas Diesel |
|------|------------------|
| `core.partners` | Clientes, Flotas |
| `inventory.products` | Refacciones base |
| `inventory.locations` | Warehouse locations |
| `sales.sale_orders` | Base para cotizaciones |
| `purchase.purchase_orders` | Compras de refacciones |

---

## CATÁLOGO DE MOTORES DIESEL

El schema `vehicle_management` incluye un catálogo de motores diesel preconfigurado:

| Marca | Modelos |
|-------|---------|
| Cummins | ISX15, ISB6.7, X15 |
| Detroit | DD15, DD13 |
| Paccar | MX-13, MX-11 |
| International | A26 |
| Volvo | D13, D11 |
| Navistar | N13 |

---

## VALIDACIÓN DE HERENCIA

### Verificar schemas heredados

```sql
-- Verificar que existen los schemas del core
SELECT schema_name
FROM information_schema.schemata
WHERE schema_name IN ('auth', 'core', 'financial', 'inventory',
                      'purchase', 'sales', 'analytics', 'system');
```

### Verificar extensiones de mecánicas

```sql
-- Verificar schemas específicos
SELECT schema_name
FROM information_schema.schemata
WHERE schema_name IN ('service_management', 'parts_management', 'vehicle_management');

-- Contar tablas por schema
SELECT schemaname, COUNT(*) as tables
FROM pg_tables
WHERE schemaname LIKE '%_management'
GROUP BY schemaname;
```

---

## SPECS DEL CORE APLICABLES

Según el [MAPEO-SPECS-VERTICALES.md](../../../../erp-core/docs/04-modelado/MAPEO-SPECS-VERTICALES.md):

| Categoría | Total | Obligatorias | Opcionales | No Aplican |
|-----------|-------|--------------|------------|------------|
| **Mecánicas-Diesel** | 30 | 23 | 2 | 5 |

### SPECS Críticas para Mecánicas-Diesel

| SPEC | Aplicación | Estado DDL |
|------|------------|------------|
| SPEC-VALORACION-INVENTARIO | Costeo de refacciones | ✅ DDL LISTO |
| SPEC-TRAZABILIDAD-LOTES-SERIES | Garantías de partes | ✅ DDL LISTO |
| SPEC-INVENTARIOS-CICLICOS | Conteos de refacciones | ✅ DDL LISTO |
| SPEC-PRICING-RULES | Precios por tipo de servicio | PENDIENTE |
| SPEC-MAIL-THREAD-TRACKING | Historial de órdenes | PENDIENTE |

### SPECS No Aplicables

- `SPEC-INTEGRACION-CALENDAR` - No requiere calendario externo
- `SPEC-PROYECTOS-DEPENDENCIAS-BURNDOWN` - No aplica a taller mecánico
- `SPEC-FIRMA-ELECTRONICA-NOM151` - Opcional
- `SPEC-OAUTH2-SOCIAL-LOGIN` - Opcional
- `SPEC-CONSOLIDACION-FINANCIERA` - Opcional

---

## REFERENCIAS

- ERP Core DDL: `apps/erp-core/database/ddl/`
- ERP Core README: `apps/erp-core/database/README.md`
- MAPEO-SPECS-VERTICALES: `apps/erp-core/docs/04-modelado/MAPEO-SPECS-VERTICALES.md`
- DATABASE_INVENTORY.yml: `orchestration/inventarios/`

---

**Documento de herencia oficial**
**Última actualización:** 2025-12-08
