325 lines
12 KiB
Markdown
325 lines
12 KiB
Markdown
# 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
|