# 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)