erp-mecanicas-diesel-database/README.md

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
```