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