131 lines
5.1 KiB
Markdown
131 lines
5.1 KiB
Markdown
# Modelo de Datos - Mecanicas Diesel
|
|
|
|
## Vision General
|
|
|
|
El modelo de datos esta organizado en 3 schemas PostgreSQL propios, mas la integracion con erp-core para autenticacion y tenants. Implementa arquitectura multi-tenant con Row-Level Security (RLS) completo.
|
|
|
|
## Arquitectura de Schemas
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────┐
|
|
│ erp-core (heredado) │
|
|
├─────────────────────────────────────────────────────────────────────┤
|
|
│ auth │ Usuarios, sesiones, tokens │
|
|
│ core │ Tenants, partners, configuracion │
|
|
├─────────────────────────────────────────────────────────────────────┤
|
|
│ mecanicas-diesel (propio) │
|
|
├─────────────────────────────────────────────────────────────────────┤
|
|
│ service_management│ Ordenes, diagnosticos, cotizaciones (~18 tab) │
|
|
│ parts_management │ Inventario, refacciones (~12 tablas) │
|
|
│ vehicle_management│ Vehiculos, flotas, motores (~8 tablas) │
|
|
└─────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## Documentos
|
|
|
|
### Schemas Propios
|
|
- [SCHEMA-SERVICE-MANAGEMENT.md](./SCHEMA-SERVICE-MANAGEMENT.md) - Gestion de servicios
|
|
- [SCHEMA-PARTS-MANAGEMENT.md](./SCHEMA-PARTS-MANAGEMENT.md) - Inventario
|
|
- [SCHEMA-VEHICLE-MANAGEMENT.md](./SCHEMA-VEHICLE-MANAGEMENT.md) - Vehiculos
|
|
|
|
### Integracion
|
|
- [INTEGRACION-ERP-CORE.md](./INTEGRACION-ERP-CORE.md) - Relacion con erp-core
|
|
|
|
## Row-Level Security (RLS)
|
|
|
|
Todas las tablas con datos de tenant implementan RLS completo:
|
|
|
|
```sql
|
|
-- Funcion macro que genera politicas SELECT, INSERT, UPDATE, DELETE
|
|
SELECT create_tenant_rls_policies('service_management', 'service_orders');
|
|
|
|
-- Equivale a:
|
|
-- CREATE POLICY ... FOR SELECT USING (tenant_id = get_current_tenant_id());
|
|
-- CREATE POLICY ... FOR INSERT WITH CHECK (tenant_id = get_current_tenant_id());
|
|
-- CREATE POLICY ... FOR UPDATE USING (...) WITH CHECK (...);
|
|
-- CREATE POLICY ... FOR DELETE USING (...);
|
|
```
|
|
|
|
## Convenciones
|
|
|
|
### Nombres de Tablas
|
|
- Plural en ingles: `service_orders`, `vehicles`
|
|
- Snake_case: `order_items`, `inventory_movements`
|
|
- Prefijo de schema implicito
|
|
|
|
### Columnas Estandar
|
|
|
|
```sql
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid()
|
|
tenant_id UUID NOT NULL -- Referencia a core.tenants
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
created_by UUID -- Referencia a auth.users
|
|
```
|
|
|
|
### CHECK Constraints
|
|
|
|
Todos los campos de tipo enum usan CHECK constraints:
|
|
|
|
```sql
|
|
status VARCHAR(20) DEFAULT 'pending'
|
|
CHECK (status IN ('pending', 'in_progress', 'completed', 'cancelled'))
|
|
```
|
|
|
|
### Soft Delete (donde aplique)
|
|
|
|
```sql
|
|
deleted_at TIMESTAMP WITH TIME ZONE
|
|
deleted_by UUID
|
|
```
|
|
|
|
## Diagrama ER Simplificado
|
|
|
|
```
|
|
erp-core
|
|
│
|
|
├── core.tenants ────────────────────────┐
|
|
│ │
|
|
├── core.partners ───────┐ │
|
|
│ │ │
|
|
└── auth.users ─────────┐│ │
|
|
││ │
|
|
mecanicas-diesel ││ │
|
|
▼▼ ▼
|
|
vehicle_management.vehicles ◄── tenant_id
|
|
│
|
|
├── vehicle_engines
|
|
│
|
|
└── fleets
|
|
│
|
|
service_management.service_orders ◄───────┘
|
|
│
|
|
├── order_items
|
|
├── diagnostics ── diagnostic_items
|
|
└── quotes ─────── quote_items
|
|
│
|
|
parts_management.parts
|
|
│
|
|
├── part_locations
|
|
├── inventory_movements
|
|
└── stock_alerts
|
|
```
|
|
|
|
## Scripts de Inicializacion
|
|
|
|
Orden de ejecucion en `/database/init/`:
|
|
|
|
1. `00-extensions.sql` - uuid-ossp, pgcrypto
|
|
2. `01-create-schemas.sql` - Schemas propios
|
|
3. `02-rls-functions.sql` - Funciones RLS
|
|
4. `03-service-management-tables.sql`
|
|
5. `04-parts-management-tables.sql`
|
|
6. `05-vehicle-management-tables.sql`
|
|
7. `06-seed-data.sql` - Datos iniciales (motores, tipos de prueba)
|
|
|
|
---
|
|
|
|
**Creado por:** Requirements-Analyst
|
|
**Fecha:** 2025-12-06
|
|
**Actualizado:** 2025-12-06 (Alineacion con erp-core, RLS completo)
|