174 lines
4.0 KiB
Markdown
174 lines
4.0 KiB
Markdown
# Base de Datos - Mecánicas Diesel
|
|
|
|
## Descripción
|
|
|
|
Base de datos PostgreSQL para el sistema de gestión de talleres de mecánica diesel.
|
|
|
|
## Schemas
|
|
|
|
| Schema | Descripción |
|
|
|--------|-------------|
|
|
| `service_management` | Órdenes de servicio, diagnósticos, cotizaciones |
|
|
| `parts_management` | Inventario de refacciones específico del taller |
|
|
| `vehicle_management` | Vehículos diesel, flotas, motores |
|
|
|
|
**NOTA:** Los schemas `auth`, `core`, `inventory` se heredan de erp-core.
|
|
|
|
## Configuración
|
|
|
|
### 1. Variables de Entorno
|
|
|
|
Copiar `.env.example` a `.env` y configurar:
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
# Editar valores en .env
|
|
```
|
|
|
|
### 2. Iniciar con Docker
|
|
|
|
```bash
|
|
# Solo base de datos y Redis
|
|
docker-compose up -d postgres redis
|
|
|
|
# Verificar salud
|
|
docker-compose ps
|
|
|
|
# Ver logs
|
|
docker-compose logs -f postgres
|
|
```
|
|
|
|
### 3. Ejecutar Scripts Manualmente
|
|
|
|
Si no usas Docker, ejecutar en orden:
|
|
|
|
```bash
|
|
psql -U mecanicas_user -d mecanicas_diesel -f database/init/00-extensions.sql
|
|
psql -U mecanicas_user -d mecanicas_diesel -f database/init/01-create-schemas.sql
|
|
psql -U mecanicas_user -d mecanicas_diesel -f database/init/02-rls-functions.sql
|
|
psql -U mecanicas_user -d mecanicas_diesel -f database/init/03-service-management-tables.sql
|
|
psql -U mecanicas_user -d mecanicas_diesel -f database/init/04-parts-management-tables.sql
|
|
psql -U mecanicas_user -d mecanicas_diesel -f database/init/05-vehicle-management-tables.sql
|
|
psql -U mecanicas_user -d mecanicas_diesel -f database/init/06-seed-data.sql
|
|
```
|
|
|
|
## Arquitectura Multi-Tenant
|
|
|
|
### Row-Level Security (RLS)
|
|
|
|
Todas las tablas principales implementan RLS con políticas completas:
|
|
|
|
```sql
|
|
-- Establecer tenant en sesión
|
|
SELECT set_current_tenant_id('uuid-del-tenant');
|
|
|
|
-- Las queries se filtran automáticamente
|
|
SELECT * FROM service_management.service_orders;
|
|
-- Solo retorna órdenes del tenant actual
|
|
```
|
|
|
|
### Crear Políticas RLS
|
|
|
|
Para nuevas tablas:
|
|
|
|
```sql
|
|
-- Automático: crea políticas SELECT, INSERT, UPDATE, DELETE
|
|
SELECT create_tenant_rls_policies('schema_name', 'table_name');
|
|
```
|
|
|
|
## Tablas Principales
|
|
|
|
### service_management
|
|
|
|
- `service_orders` - Órdenes de servicio
|
|
- `order_items` - Líneas de trabajo/refacciones
|
|
- `work_bays` - Bahías de trabajo
|
|
- `diagnostics` - Diagnósticos realizados
|
|
- `diagnostic_items` - Hallazgos del diagnóstico
|
|
- `quotes` - Cotizaciones
|
|
- `services` - Catálogo de servicios
|
|
|
|
### parts_management
|
|
|
|
- `parts` - Refacciones
|
|
- `part_categories` - Categorías
|
|
- `suppliers` - Proveedores
|
|
- `warehouse_locations` - Ubicaciones
|
|
- `inventory_movements` - Kardex
|
|
- `inventory_adjustments` - Ajustes
|
|
|
|
### vehicle_management
|
|
|
|
- `vehicles` - Vehículos registrados
|
|
- `vehicle_engines` - Especificaciones del motor
|
|
- `fleets` - Flotas
|
|
- `engine_catalog` - Catálogo de motores (global)
|
|
- `maintenance_reminders` - Recordatorios
|
|
|
|
## Convenciones
|
|
|
|
### Nombres
|
|
|
|
- Tablas: plural en inglés, snake_case
|
|
- Columnas: snake_case
|
|
- PKs: `id UUID`
|
|
- FKs: `entity_id UUID`
|
|
- Tenant: `tenant_id UUID`
|
|
|
|
### Campos Estándar
|
|
|
|
```sql
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid()
|
|
tenant_id UUID NOT NULL
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
created_by UUID
|
|
```
|
|
|
|
### Soft Delete (opcional)
|
|
|
|
```sql
|
|
deleted_at TIMESTAMP WITH TIME ZONE
|
|
deleted_by UUID
|
|
```
|
|
|
|
## Triggers Automáticos
|
|
|
|
- `trigger_set_updated_at()` - Actualiza `updated_at` en cada UPDATE
|
|
- `update_fleet_vehicle_count()` - Mantiene conteo de vehículos en flotas
|
|
|
|
## Herramientas
|
|
|
|
### Adminer (UI de BD)
|
|
|
|
```bash
|
|
docker-compose --profile tools up -d adminer
|
|
# Acceder en http://localhost:8080
|
|
```
|
|
|
|
### Conexión Directa
|
|
|
|
```bash
|
|
docker-compose exec postgres psql -U mecanicas_user -d mecanicas_diesel
|
|
```
|
|
|
|
## Migraciones
|
|
|
|
Para cambios futuros, usar el sistema de migraciones de tu ORM (Prisma, TypeORM, etc.).
|
|
|
|
Ejemplo con Prisma:
|
|
|
|
```bash
|
|
npx prisma migrate dev --name add_new_field
|
|
```
|
|
|
|
## Backup
|
|
|
|
```bash
|
|
# Backup
|
|
docker-compose exec postgres pg_dump -U mecanicas_user mecanicas_diesel > backup.sql
|
|
|
|
# Restore
|
|
docker-compose exec -T postgres psql -U mecanicas_user -d mecanicas_diesel < backup.sql
|
|
```
|