erp-suite/docs/PLAN-MIGRACION-SCHEMAS.md

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*