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