251 lines
8.5 KiB
Markdown
251 lines
8.5 KiB
Markdown
# Plan de Migración de Schemas - ERP Suite
|
|
|
|
## Resumen Ejecutivo
|
|
|
|
Este documento detalla el plan de migración para estandarizar los schemas de base de datos en todas las verticales del ERP Suite, alineándolos con el estándar definido en `ESTANDAR-NOMENCLATURA-SCHEMAS.md`.
|
|
|
|
**Fecha**: 2025-12-08
|
|
**Versión**: 1.0.0
|
|
**Estado**: Planificado
|
|
|
|
---
|
|
|
|
## 1. Estado Actual vs Estado Deseado
|
|
|
|
### 1.1 Prefijos de Schema Estandarizados
|
|
|
|
| Proyecto | Prefijo | Estado Actual | Estado Deseado |
|
|
|----------|---------|---------------|----------------|
|
|
| erp-core | `erp_*` | Parcial | 100% |
|
|
| Construcción | `con_*` | No aplicado | 100% |
|
|
| Mecánicas Diesel | `mec_*` | No aplicado | 100% |
|
|
| Clínicas | `cli_*` | Sin DDL | 100% |
|
|
| Retail | `ret_*` | Sin DDL | 100% |
|
|
| Vidrio Templado | `vit_*` | Sin DDL | 100% |
|
|
|
|
### 1.2 Schemas por Vertical
|
|
|
|
#### erp-core (Base)
|
|
```
|
|
erp_auth → Autenticación, usuarios, roles
|
|
erp_core → Entidades base (tenants, companies)
|
|
erp_core_shared → Funciones compartidas
|
|
erp_inventory → Inventario base
|
|
erp_purchase → Compras base
|
|
erp_hr → RRHH base
|
|
erp_financial → Contabilidad base
|
|
```
|
|
|
|
#### Construcción
|
|
```
|
|
con_construction → Obras, lotes, avances
|
|
con_estimates → Estimaciones, anticipos
|
|
con_infonavit → Cumplimiento INFONAVIT
|
|
con_hr → Extensiones RRHH (destajo, cuadrillas)
|
|
con_hse → Seguridad industrial
|
|
```
|
|
|
|
#### Mecánicas Diesel
|
|
```
|
|
mec_workshop → Taller, bahías, órdenes
|
|
mec_diagnostic → Diagnósticos, DTC codes
|
|
mec_inventory → Extensiones inventario (refacciones)
|
|
mec_vehicles → Vehículos, especificaciones
|
|
mec_quotes → Cotizaciones
|
|
```
|
|
|
|
---
|
|
|
|
## 2. Estrategia de Migración
|
|
|
|
### 2.1 Enfoque: Migración Progresiva
|
|
|
|
**No migrar schemas existentes** - Solo aplicar nomenclatura en nuevos desarrollos.
|
|
|
|
Razones:
|
|
1. Evitar downtime en sistemas en producción
|
|
2. No romper código existente
|
|
3. Costo de migración vs beneficio
|
|
|
|
### 2.2 Nuevos Proyectos
|
|
|
|
Para **nuevos proyectos** o **verticales sin código**:
|
|
- Aplicar prefijos desde el inicio
|
|
- Seguir estándar de nomenclatura
|
|
|
|
### 2.3 Proyectos Existentes
|
|
|
|
Para **proyectos con código existente** (Construcción, Mecánicas Diesel):
|
|
- Documentar schemas actuales
|
|
- No renombrar
|
|
- Aplicar prefijo solo a tablas nuevas opcionales
|
|
|
|
---
|
|
|
|
## 3. Orden de Ejecución DDL
|
|
|
|
### 3.1 ERP-Core (Prerequisito)
|
|
|
|
```bash
|
|
# Ejecutar en orden:
|
|
1. 00-extensions.sql # PostGIS, uuid-ossp
|
|
2. 01-auth-schema.sql # auth.tenants, auth.users, auth.roles
|
|
3. 02-core-schema.sql # core.*, core_shared.*
|
|
4. 03-inventory-schema.sql # inventory base
|
|
5. 04-purchase-schema.sql # purchase base
|
|
6. 05-hr-schema.sql # hr base
|
|
7. 06-financial-schema.sql # financial base
|
|
```
|
|
|
|
### 3.2 Construcción (Después de ERP-Core)
|
|
|
|
```bash
|
|
# Ejecutar en orden:
|
|
1. 01-construction-schema-ddl.sql # 24 tablas
|
|
2. 02-hr-schema-ddl.sql # 8 tablas extensión
|
|
3. 03-hse-schema-ddl.sql # 58 tablas
|
|
4. 04-estimates-schema-ddl.sql # 8 tablas
|
|
5. 05-infonavit-schema-ddl.sql # 8 tablas
|
|
6. 06-inventory-ext-schema-ddl.sql # 4 tablas
|
|
7. 07-purchase-ext-schema-ddl.sql # 5 tablas
|
|
```
|
|
|
|
### 3.3 Mecánicas Diesel (Después de ERP-Core)
|
|
|
|
```bash
|
|
# DDL 100% completo - 43 tablas
|
|
1. 01-workshop-schema.sql
|
|
2. 02-diagnostic-schema.sql
|
|
3. 03-vehicles-schema.sql
|
|
4. 04-quotes-schema.sql
|
|
```
|
|
|
|
---
|
|
|
|
## 4. Dependencias entre Schemas
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ erp-core │
|
|
│ ┌──────────┐ ┌──────────┐ ┌───────────┐ ┌────────────┐ │
|
|
│ │ auth │ │ core │ │ inventory │ │ purchase │ │
|
|
│ └────┬─────┘ └────┬─────┘ └─────┬─────┘ └─────┬──────┘ │
|
|
└───────┼─────────────┼──────────────┼──────────────┼─────────┘
|
|
│ │ │ │
|
|
▼ ▼ ▼ ▼
|
|
┌───────────────────────────────────────────────────────────────┐
|
|
│ VERTICAL: Construcción │
|
|
│ ┌─────────────┐ ┌───────────┐ ┌──────────┐ ┌──────────┐ │
|
|
│ │ construction│ │ estimates │ │ infonavit│ │ hse │ │
|
|
│ └──────┬──────┘ └─────┬─────┘ └────┬─────┘ └────┬─────┘ │
|
|
│ │ │ │ │ │
|
|
│ ▼ ▼ ▼ ▼ │
|
|
│ ┌──────────────────────────────────────────────────────────┐│
|
|
│ │ inventory (ext) purchase (ext) ││
|
|
│ └──────────────────────────────────────────────────────────┘│
|
|
└───────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 5. Script de Verificación
|
|
|
|
```sql
|
|
-- Verificar schemas existentes
|
|
SELECT schema_name
|
|
FROM information_schema.schemata
|
|
WHERE schema_name NOT IN ('pg_catalog', 'information_schema', 'public')
|
|
ORDER BY schema_name;
|
|
|
|
-- Verificar tablas por schema
|
|
SELECT
|
|
schemaname,
|
|
COUNT(*) as table_count
|
|
FROM pg_tables
|
|
WHERE schemaname NOT IN ('pg_catalog', 'information_schema', 'public')
|
|
GROUP BY schemaname
|
|
ORDER BY schemaname;
|
|
|
|
-- Verificar dependencias FK
|
|
SELECT
|
|
tc.table_schema || '.' || tc.table_name AS table_name,
|
|
kcu.column_name,
|
|
ccu.table_schema || '.' || ccu.table_name AS references_table
|
|
FROM information_schema.table_constraints AS tc
|
|
JOIN information_schema.key_column_usage AS kcu
|
|
ON tc.constraint_name = kcu.constraint_name
|
|
JOIN information_schema.constraint_column_usage AS ccu
|
|
ON ccu.constraint_name = tc.constraint_name
|
|
WHERE tc.constraint_type = 'FOREIGN KEY'
|
|
AND tc.table_schema NOT IN ('pg_catalog', 'information_schema')
|
|
ORDER BY tc.table_schema, tc.table_name;
|
|
```
|
|
|
|
---
|
|
|
|
## 6. Resumen de Tablas por Vertical
|
|
|
|
### Construcción (Total: 115 tablas)
|
|
|
|
| Schema | Tablas | Módulos |
|
|
|--------|--------|---------|
|
|
| construction | 24 | MAI-002, MAI-003, MAI-005, MAI-009, MAI-012 |
|
|
| hr (ext) | 8 | MAI-007 |
|
|
| hse | 58 | MAA-017 |
|
|
| estimates | 8 | MAI-008 |
|
|
| infonavit | 8 | MAI-010, MAI-011 |
|
|
| inventory (ext) | 4 | MAI-004 |
|
|
| purchase (ext) | 5 | MAI-004 |
|
|
|
|
### Mecánicas Diesel (Total: 43 tablas)
|
|
|
|
| Schema | Tablas | Módulos |
|
|
|--------|--------|---------|
|
|
| workshop | 15 | MMD-001, MMD-002 |
|
|
| diagnostic | 8 | MMD-003 |
|
|
| vehicles | 8 | MMD-005 |
|
|
| inventory (ext) | 6 | MMD-004 |
|
|
| quotes | 6 | MMD-006 |
|
|
|
|
---
|
|
|
|
## 7. Checklist de Migración
|
|
|
|
### Pre-Migración
|
|
- [ ] Backup completo de base de datos
|
|
- [ ] Verificar versión PostgreSQL >= 15
|
|
- [ ] PostGIS instalado
|
|
- [ ] ERP-Core DDL ejecutado
|
|
|
|
### Ejecución
|
|
- [ ] Ejecutar DDL en orden especificado
|
|
- [ ] Verificar cada schema después de creación
|
|
- [ ] Verificar FKs inter-schema
|
|
|
|
### Post-Migración
|
|
- [ ] Ejecutar scripts de verificación
|
|
- [ ] Actualizar MASTER_INVENTORY.yml
|
|
- [ ] Documentar cualquier desviación
|
|
|
|
---
|
|
|
|
## 8. Notas Importantes
|
|
|
|
1. **RLS habilitado**: Todas las tablas usan Row-Level Security con tenant_id
|
|
2. **Soft Delete**: Todas las tablas tienen deleted_at para borrado lógico
|
|
3. **Auditoría**: created_at, created_by, updated_at, updated_by en todas las tablas
|
|
4. **PostGIS**: Requerido para columnas de tipo GEOMETRY
|
|
5. **TIMESTAMPTZ**: Usar siempre con timezone para fechas/horas
|
|
|
|
---
|
|
|
|
## Historial de Cambios
|
|
|
|
| Versión | Fecha | Descripción |
|
|
|---------|-------|-------------|
|
|
| 1.0.0 | 2025-12-08 | Versión inicial |
|
|
|
|
---
|
|
|
|
*Documento generado como parte del análisis de arquitectura ERP-Suite*
|