workspace-v1/orchestration/directivas/simco/SIMCO-SINCRONIZACION-BD.md
rckrdmrd 3a8a459d91 [SIMCO-V38] feat: Implementar sistema SIMCO v3.8.0 completo
## Directivas SIMCO v3.7.0 - Estandarizacion de Documentacion (7)
- SIMCO-DOCUMENTACION-PROYECTO.md
- SIMCO-NOMENCLATURA.md
- SIMCO-ESTRUCTURA-DOCS.md
- SIMCO-INVENTARIOS.md
- SIMCO-TESTING.md
- SIMCO-MIGRACIONES-BD.md
- SIMCO-INTEGRACIONES-EXTERNAS.md

## Directivas SIMCO v3.8.0 - Mantenimiento de Documentacion (2)
- SIMCO-MANTENIMIENTO-DOCUMENTACION.md
- SIMCO-SINCRONIZACION-BD.md

## Templates (4)
- TEMPLATE-INVENTARIO-PROYECTO.md
- TEMPLATE-INTEGRACION-EXTERNA.md
- TEMPLATE-MODULO-ESTANDAR.md
- TEMPLATE-DEPRECACION.md

## Checklists (6)
- CHECKLIST-DOCUMENTACION-PROYECTO.md
- CHECKLIST-INVENTARIOS.md
- CHECKLIST-NOMENCLATURA.md
- CHECKLIST-MANTENIMIENTO-DOCS.md
- CHECKLIST-SINCRONIZACION-BD.md
- _MAP.md

## Perfil de Agente (1)
- PERFIL-DOCUMENTATION-MAINTAINER.md

## Indices
- INDICE-DIRECTIVAS-WORKSPACE.yml actualizado a v3.8.0

## Submodulos actualizados (14)
- gamilit, erp-core, michangarrito, template-saas
- erp-suite, erp-construccion, erp-clinicas
- erp-mecanicas-diesel, erp-retail, erp-vidrio-templado
- trading-platform, betting-analytics
- inmobiliaria-analytics, platform_marketing_content

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 08:55:15 -06:00

642 lines
16 KiB
Markdown

# SIMCO: SINCRONIZACIÓN BASE DE DATOS
**Versión:** 1.0.0
**Alias:** @SYNC_BD
**Fecha:** 2026-01-10
**Categoría:** operaciones_documentacion
**Obligatoria:** SÍ (post-cambio DDL)
---
## RESUMEN EJECUTIVO
> **Principio:** Todo cambio en DDL DEBE reflejarse en scripts, código y documentación. Un DDL sin sincronizar es una bomba de tiempo.
Esta directiva establece el flujo obligatorio de sincronización cuando se realizan cambios en la base de datos.
---
## 1. Propósito
### 1.1 Objetivo
Garantizar coherencia completa entre:
- Archivos DDL (schemas, tablas, funciones)
- Scripts de creación/recreación de BD
- Entities y DTOs del backend
- Types del frontend
- Inventarios de base de datos
- Documentación técnica
### 1.2 Problemas que Resuelve
| Problema | Solución |
|----------|----------|
| Scripts desactualizados | Actualización obligatoria post-DDL |
| Entities desincronizadas | Checklist de sincronización |
| Recreación fallida | Validación de ejecución |
| Inventarios obsoletos | Actualización como paso final |
---
## 2. Triggers de Sincronización
### 2.1 Cuándo Aplicar
| Cambio | Sincronización |
|--------|----------------|
| Nuevo schema | OBLIGATORIA |
| Nueva tabla | OBLIGATORIA |
| Nueva columna | OBLIGATORIA |
| Modificación de tipo de columna | OBLIGATORIA |
| Nuevo constraint (FK, UK, CHECK) | OBLIGATORIA |
| Nuevo índice | OBLIGATORIA |
| Nueva función | OBLIGATORIA |
| Nuevo trigger | OBLIGATORIA |
| Nueva view | OBLIGATORIA |
| Modificación de RLS policy | OBLIGATORIA |
| Cambio en seeds | RECOMENDADA |
### 2.2 Excepciones
- Comentarios en DDL (solo documentación)
- Cambios cosméticos (formato, espacios)
---
## 3. Flujo de Sincronización
### 3.1 Diagrama de Flujo
```
┌─────────────────────────────────────────────────────────────┐
│ FLUJO DE SINCRONIZACIÓN BD │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. MODIFICAR DDL │
│ │ │
│ ▼ │
│ 2. ACTUALIZAR SCRIPTS ──────────────────────┐ │
│ │ │ │
│ ▼ │ │
│ 3. EJECUTAR RECREACIÓN ◄────────────────────┘ │
│ │ │
│ ▼ │
│ 4. SINCRONIZAR BACKEND │
│ │ ├── Entity │
│ │ ├── DTO │
│ │ ├── Repository │
│ │ └── Service/Controller (si aplica) │
│ │ │
│ ▼ │
│ 5. SINCRONIZAR FRONTEND (si API cambia) │
│ │ ├── Types/Interfaces │
│ │ └── Services │
│ │ │
│ ▼ │
│ 6. ACTUALIZAR INVENTARIOS │
│ │ ├── DATABASE_INVENTORY │
│ │ ├── BACKEND_INVENTORY │
│ │ └── MASTER_INVENTORY │
│ │ │
│ ▼ │
│ 7. DOCUMENTAR CAMBIO │
│ │ ├── ADR (si decisión arquitectural) │
│ │ ├── ET-* (spec técnico) │
│ │ └── Changelog │
│ │ │
│ ▼ │
│ 8. EJECUTAR TESTS │
│ │
└─────────────────────────────────────────────────────────────┘
```
### 3.2 Detalle por Paso
#### Paso 1: Modificar DDL
```sql
-- Ubicación típica: database/ddl/ o apps/database/ddl/
-- Ejemplo de cambio
ALTER TABLE schema_name.table_name
ADD COLUMN new_column VARCHAR(100) NOT NULL DEFAULT '';
-- O en archivo DDL nuevo
CREATE TABLE schema_name.new_table (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- ...
);
```
#### Paso 2: Actualizar Scripts
**Scripts a actualizar:**
| Script | Ubicación Típica | Acción |
|--------|------------------|--------|
| create-database.sh | database/ o scripts/ | Agregar nuevo DDL |
| recreate-database.sh | database/ o scripts/ | Misma actualización |
| drop-database.sh | database/ o scripts/ | Si es nueva tabla |
**Estructura esperada del script:**
```bash
#!/bin/bash
# create-database.sh
# 1. Crear extensiones
psql -f ddl/00-extensions.sql
# 2. Crear schemas (en orden)
psql -f ddl/01-schema-auth.sql
psql -f ddl/02-schema-users.sql
# ... agregar nuevo schema aquí si aplica
# 3. Crear tablas (en orden de dependencias)
psql -f ddl/tables/auth/*.sql
psql -f ddl/tables/users/*.sql
# ... agregar nueva tabla aquí
# 4. Crear constraints
psql -f ddl/constraints/*.sql
# 5. Crear índices
psql -f ddl/indexes/*.sql
# 6. Crear funciones
psql -f ddl/functions/*.sql
# 7. Crear triggers
psql -f ddl/triggers/*.sql
# 8. Crear views
psql -f ddl/views/*.sql
# 9. Crear RLS policies
psql -f ddl/policies/*.sql
# 10. Seeds (opcional)
psql -f seeds/*.sql
```
#### Paso 3: Ejecutar Recreación
```bash
# Validar antes de ejecutar
./recreate-database.sh --dry-run # Si está disponible
# Ejecutar recreación
./recreate-database.sh
# Verificar resultado
echo "Verificando schemas..."
psql -c "\dn"
echo "Verificando tablas..."
psql -c "\dt schema_name.*"
echo "Verificando funciones..."
psql -c "\df schema_name.*"
```
**Criterios de éxito:**
- Sin errores de sintaxis SQL
- Todos los objetos creados
- Constraints activos
- Índices creados
- RLS policies activas
#### Paso 4: Sincronizar Backend
**Entity (TypeORM ejemplo):**
```typescript
// src/modules/module-name/entities/table-name.entity.ts
@Entity({ schema: 'schema_name', name: 'table_name' })
export class TableName {
@PrimaryGeneratedColumn('uuid')
id: string;
// Agregar nueva columna
@Column({ type: 'varchar', length: 100, default: '' })
newColumn: string;
// ... resto de columnas
}
```
**DTO:**
```typescript
// src/modules/module-name/dto/create-table-name.dto.ts
export class CreateTableNameDto {
@IsString()
@MaxLength(100)
@IsOptional()
newColumn?: string;
// ... resto de campos
}
```
**Repository (si métodos nuevos):**
```typescript
// src/modules/module-name/repositories/table-name.repository.ts
@Injectable()
export class TableNameRepository {
// Agregar método si la nueva columna requiere queries específicos
async findByNewColumn(value: string): Promise<TableName[]> {
return this.repository.find({ where: { newColumn: value } });
}
}
```
#### Paso 5: Sincronizar Frontend
**Types:**
```typescript
// src/types/table-name.types.ts
export interface TableName {
id: string;
newColumn: string; // Agregar nuevo campo
// ...
}
export interface CreateTableNameDto {
newColumn?: string; // Agregar nuevo campo
// ...
}
```
#### Paso 6: Actualizar Inventarios
**DATABASE_INVENTORY.yml:**
```yaml
schemas:
- name: schema_name
tables:
- name: table_name
columns: 15 # Actualizar conteo
last_modified: "2026-01-10"
changes:
- "2026-01-10: Agregada columna new_column"
```
**BACKEND_INVENTORY.yml:**
```yaml
entities:
- name: TableName
file: "src/modules/module-name/entities/table-name.entity.ts"
columns: 15 # Actualizar
last_modified: "2026-01-10"
```
#### Paso 7: Documentar Cambio
**Si es decisión arquitectural → ADR:**
```markdown
# ADR-NNNN: Agregar columna X a tabla Y
## Contexto
...
## Decisión
...
## Consecuencias
...
```
**Actualizar spec técnico:**
```markdown
# ET-BD-XXX: Schema schema_name
## Cambios Recientes
- 2026-01-10: Agregada columna new_column a table_name
```
#### Paso 8: Ejecutar Tests
```bash
# Tests unitarios
npm run test -- --grep "TableName"
# Tests de integración
npm run test:e2e -- --grep "table-name"
# Verificar build
npm run build
```
---
## 4. Validación de Scripts BD
### 4.1 Estructura de Scripts Requeridos
| Script | Obligatorio | Propósito |
|--------|-------------|-----------|
| create-database.sh | SÍ | Crear BD desde cero |
| recreate-database.sh | SÍ | Drop + Create |
| drop-database.sh | RECOMENDADO | Solo drop |
| seed-database.sh | OPCIONAL | Datos iniciales |
| migrate.sh | SI MIGRATIONS | Ejecutar migraciones |
### 4.2 Checklist Pre-Recreación
```yaml
antes_de_recrear:
- [ ] Backup de BD si tiene datos importantes
- [ ] Verificar no hay conexiones activas
- [ ] Revisar orden de scripts
- [ ] Verificar dependencias entre schemas
- [ ] Confirmar variables de entorno
```
### 4.3 Checklist Post-Recreación
```yaml
despues_de_recrear:
- [ ] Todos los schemas creados
- [ ] Todas las tablas creadas
- [ ] Todos los constraints activos
- [ ] Todos los índices creados
- [ ] Todas las funciones creadas
- [ ] Todos los triggers activos
- [ ] Todas las views creadas
- [ ] RLS policies activas
- [ ] Seeds ejecutados (si aplica)
- [ ] Aplicación puede conectar
```
---
## 5. Matriz de Dependencias DDL
### 5.1 Dependencias de Tablas
```
Tabla Principal
└── FK → Tabla Referenciada (debe existir primero)
└── View que la usa (debe actualizarse)
└── Trigger asociado (debe actualizarse)
└── Función que la referencia (debe actualizarse)
```
### 5.2 Orden de Creación
```
1. Extensions (uuid-ossp, pg_trgm, etc.)
2. Schemas
3. Types/Enums
4. Tablas sin FK
5. Tablas con FK (orden de dependencias)
6. Constraints adicionales
7. Índices
8. Funciones
9. Triggers
10. Views
11. RLS Policies
12. Grants/Permissions
```
### 5.3 Impacto de Cambios
| Cambio | Impacto |
|--------|---------|
| Renombrar columna | Views, funciones, triggers, código |
| Cambiar tipo | Validaciones, DTOs, frontend |
| Agregar NOT NULL | Seeds, tests, código existente |
| Agregar FK | Orden de inserts, deletes |
| Eliminar columna | ALTO - verificar uso en todo el sistema |
---
## 6. Checklist por Tipo de Cambio
### 6.1 Nueva Tabla
```yaml
nueva_tabla:
ddl:
- [ ] Archivo DDL creado en ubicación correcta
- [ ] Schema especificado
- [ ] PK definida (UUID recomendado)
- [ ] Timestamps (created_at, updated_at)
- [ ] Tenant column si multi-tenant
- [ ] Índices necesarios definidos
scripts:
- [ ] create-database.sh actualizado
- [ ] Orden de creación correcto (después de dependencias)
- [ ] recreate-database.sh actualizado
backend:
- [ ] Entity creada
- [ ] DTO Create creado
- [ ] DTO Update creado
- [ ] DTO Response creado
- [ ] Repository creado
- [ ] Service creado
- [ ] Controller creado
- [ ] Module actualizado
tests:
- [ ] Tests de entity
- [ ] Tests de service
- [ ] Tests e2e de endpoints
inventarios:
- [ ] DATABASE_INVENTORY actualizado
- [ ] BACKEND_INVENTORY actualizado
- [ ] MASTER_INVENTORY actualizado
```
### 6.2 Nueva Columna
```yaml
nueva_columna:
ddl:
- [ ] Columna agregada al archivo DDL
- [ ] Tipo de dato correcto
- [ ] Constraints definidos (NOT NULL, DEFAULT, etc.)
- [ ] Índice si será buscada frecuentemente
scripts:
- [ ] Script de creación actualizado
- [ ] Recreación exitosa verificada
backend:
- [ ] Entity actualizada
- [ ] DTOs actualizados
- [ ] Validadores agregados si aplica
frontend:
- [ ] Types actualizados
- [ ] Formularios actualizados si visible
```
### 6.3 Nueva Función/Trigger
```yaml
nueva_funcion:
ddl:
- [ ] Función creada en archivo separado
- [ ] Schema especificado
- [ ] SECURITY DEFINER si accede a otras tablas
- [ ] Documentación inline
scripts:
- [ ] Agregada al script de creación
- [ ] Orden correcto (después de tablas que usa)
trigger:
- [ ] Trigger creado si aplica
- [ ] Evento correcto (BEFORE/AFTER, INSERT/UPDATE/DELETE)
- [ ] FOR EACH ROW si por fila
tests:
- [ ] Test de función
- [ ] Test de trigger si aplica
```
---
## 7. Actualización de Inventarios
### 7.1 DATABASE_INVENTORY.yml
```yaml
# Estructura mínima requerida
database:
name: "{database_name}"
version: "{semver}"
updated: "{YYYY-MM-DD}"
schemas:
- name: "{schema_name}"
tables_count: {N}
functions_count: {N}
triggers_count: {N}
views_count: {N}
tables:
- name: "{table_name}"
columns: {N}
indexes: {N}
has_rls: {true|false}
functions:
- name: "{function_name}"
schema: "{schema_name}"
returns: "{return_type}"
triggers:
- name: "{trigger_name}"
table: "{schema.table}"
event: "{BEFORE|AFTER} {INSERT|UPDATE|DELETE}"
```
### 7.2 Qué Actualizar
| Cambio DDL | Actualizar en Inventario |
|------------|-------------------------|
| Nueva tabla | schemas[].tables[], tables_count |
| Nueva columna | tables[].columns |
| Nuevo índice | tables[].indexes |
| Nueva función | functions[], functions_count |
| Nuevo trigger | triggers[], triggers_count |
| Nueva view | views[], views_count |
| Nuevo schema | schemas[] |
---
## 8. Documentación de Cambios
### 8.1 Cuándo Crear ADR
- Nuevo schema con propósito específico
- Cambio de estrategia de índices
- Implementación de RLS
- Cambio de tipos de datos masivo
- Nueva función compleja
### 8.2 Formato de Registro en Changelog
```markdown
## [{YYYY-MM-DD}] Base de Datos
### Agregado
- Nueva tabla: `schema.nueva_tabla`
- Nueva columna: `schema.tabla.nueva_columna`
- Nueva función: `schema.nueva_funcion()`
### Modificado
- Columna: `schema.tabla.columna` - tipo VARCHAR(50) → VARCHAR(100)
### Deprecado
- Función: `schema.funcion_antigua()` - usar `schema.funcion_nueva()`
### Eliminado
- Tabla: `schema.tabla_obsoleta` (datos migrados a `schema.nueva_tabla`)
```
---
## 9. Errores Comunes
| Error | Consecuencia | Prevención |
|-------|--------------|------------|
| Script no actualizado | Recreación falla | Actualizar SIEMPRE post-DDL |
| Orden incorrecto | FK violations | Respetar dependencias |
| Entity desincronizada | Runtime errors | Sincronizar inmediatamente |
| Inventario obsoleto | Documentación incorrecta | Último paso del ciclo |
| Sin backup | Pérdida de datos | Backup antes de recrear |
---
## 10. Referencia: Checklist Completo
Para validación detallada usar:
**Referencia:** @CHK_SYNC_BD
---
## 11. Referencias
| Alias | Directiva | Uso |
|-------|-----------|-----|
| @MANTENIMIENTO_DOCS | SIMCO-MANTENIMIENTO-DOCUMENTACION.md | Ciclo de mantenimiento |
| @CHK_SYNC_BD | CHECKLIST-SINCRONIZACION-BD.md | Checklist detallado |
| @OP_DDL | SIMCO-DDL.md | Operaciones de BD |
| @INVENTARIOS | SIMCO-INVENTARIOS.md | Estándares de inventarios |
| @MIGRACIONES | SIMCO-MIGRACIONES-BD.md | Migraciones de BD |
---
## 12. Changelog
| Versión | Fecha | Cambios |
|---------|-------|---------|
| 1.0.0 | 2026-01-10 | Versión inicial |
---
**Referencia rápida:**
```
Flujo: DDL → Scripts → Recrear → Backend → Frontend → Inventarios → Docs → Tests
Checklist: @CHK_SYNC_BD
Trigger: Cualquier cambio en DDL
```