workspace/projects/gamilit/docs/90-transversal/inventarios-database/MAPA-INCIDENCIAS-BASE-DATOS.md
rckrdmrd ea1879f4ad feat: Initial workspace structure with multi-level Git configuration
- Configure workspace Git repository with comprehensive .gitignore
- Add Odoo as submodule for ERP reference code
- Include documentation: SETUP.md, GIT-STRUCTURE.md
- Add gitignore templates for projects (backend, frontend, database)
- Structure supports independent repos per project/subproject level

Workspace includes:
- core/ - Reusable patterns, modules, orchestration system
- projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.)
- knowledge-base/ - Reference code and patterns (includes Odoo submodule)
- devtools/ - Development tools and templates
- customers/ - Client implementations template

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-08 10:44:23 -06:00

1238 lines
45 KiB
Markdown

# Mapa Maestro de Incidencias - Base de Datos GAMILIT
**Fecha creación:** 2025-11-07
**Versión:** 1.0
**Sistema:** SIMCO (Sistema Indexado Modular por Contexto)
**Propósito:** Documento maestro de rastreo para correcciones de base de datos
**Para:** Agente especializado en análisis de base de datos
---
## 📋 Índice Rápido
- [1. Resumen Ejecutivo](#1-resumen-ejecutivo)
- [2. Incidencias por Tipo](#2-incidencias-por-tipo)
- [3. Mapa de Referencias](#3-mapa-de-referencias)
- [4. Estado de Correcciones](#4-estado-de-correcciones)
- [5. Incidencias Detalladas](#5-incidencias-detalladas)
- [6. Contexto para Siguiente Agente](#6-contexto-para-siguiente-agente)
---
## 1. Resumen Ejecutivo
### 1.1 Estado General
| Categoría | Total | Completado | Pendiente | % |
|-----------|-------|------------|-----------|---|
| Duplicaciones | 13 | 5 | 8 | 38% |
| ENUMs mal ubicados | 33 | 5 | 28 | 15% |
| Tablas mal ubicadas | 9 | 0 | 9 | 0% |
| Triggers duplicados | 10 | 0 | 10 | 0% |
| Índices mal ubicados | 64 | 0 | 64 | 0% |
| Funciones mal ubicadas | 7 | 0 | 7 | 0% |
| Vistas mal ubicadas | 3 | 0 | 3 | 0% |
| **TOTAL** | **142** | **8** | **134** | **5.6%** |
### 1.2 Principio Establecido
**"Documentación como Fuente de Verdad"**
- Cuando hay conflicto: Documentación > Código
- Especificaciones en `docs/02-especificaciones-tecnicas/` son autoritativas
### 1.3 Documentos Base
| Documento | Ubicación | Propósito |
|-----------|-----------|-----------|
| Tracking Principal | `apps/database/docs/TRACKING-CORRECCIONES.md` | Estado general de correcciones |
| Tipos Notifications | `docs/02-especificaciones-tecnicas/tipos-compartidos/TYPES-NOTIFICATIONS.md` | Especificación NotificationType |
| Tipos Gamification | `docs/02-especificaciones-tecnicas/tipos-compartidos/TYPES-GAMIFICATION.md` | Especificación MayaRank, Achievements, Transactions |
| Análisis ENUMs | `apps/database/docs/ANALISIS-ENUMS-GAMIFICATION-2025-11-07.md` | Análisis detallado de ENUMs gamification |
| Fuente de Verdad | `apps/database/docs/REPORTE-FUENTE-DE-VERDAD-2025-11-07.md` | Plan de correcciones detallado |
---
## 2. Incidencias por Tipo
### 2.1 DUPLICACIONES (13 incidencias)
#### 2.1.1 Tablas Duplicadas (3) - ✅ RESUELTAS (Falsos Positivos)
| ID | Tabla | Schemas Reportados | Estado | Hallazgo Real |
|----|-------|-------------------|--------|---------------|
| C1.1 | classrooms | social_features vs public | ✅ FALSO POSITIVO | Solo existe en social_features |
| C1.2 | classroom_members/students | social_features vs public | ✅ FALSO POSITIVO | Solo existe en social_features |
| C1.3 | notifications | gamification_system vs public | ✅ FALSO POSITIVO | Solo existe en gamification_system |
**Referencias:**
- Reporte: `apps/database/docs/REPORTE-VALIDACION-DUPLICACIONES-2025-11-07.md`
- DDL classrooms: `apps/database/ddl/schemas/social_features/tables/03-classrooms.sql`
- DDL notifications: `apps/database/ddl/schemas/gamification_system/tables/08-notifications.sql`
---
#### 2.1.2 ENUMs Duplicados (2) - ✅ COMPLETADAS
| ID | ENUM | Schemas | Estado | Fecha Corrección |
|----|------|---------|--------|------------------|
| C2.1 | maya_rank | gamification_system vs public | ✅ COMPLETADO | 2025-11-07 (sesión anterior) |
| C2.2 | rango_maya | public (legacy) | ✅ COMPLETADO | 2025-11-07 (sesión anterior) |
**Referencias:**
- DDL correcto: `apps/database/ddl/schemas/gamification_system/enums/maya_rank.sql`
- Valores: `'Ajaw', 'Nacom', 'Ah K''in', 'Halach Uinic', 'K''uk''ulkan'`
---
#### 2.1.3 Triggers Duplicados (10) - ⏳ PENDIENTE
Todos los triggers duplicados están en `public` vs schema correcto debido a que las tablas estaban duplicadas (falso positivo).
| ID | Trigger | Schemas | Acción |
|----|---------|---------|--------|
| C3.1 | trg_classroom_members_updated_at | social_features vs public | ⚠️ VALIDAR si public tiene trigger legacy |
| C3.2 | trg_update_classroom_count | social_features vs public | ⚠️ VALIDAR |
| C3.3 | trg_classrooms_updated_at | social_features vs public | ⚠️ VALIDAR |
| C3.4 | trg_schools_updated_at | social_features vs public | ⚠️ VALIDAR |
| C3.5 | trg_teams_updated_at | social_features vs public | ⚠️ VALIDAR |
| C3.6 | trg_feature_flags_updated_at | system_configuration vs public | ⚠️ VALIDAR |
| C3.7 | trg_system_settings_updated_at | system_configuration vs public | ⚠️ VALIDAR |
| C3.8 | 21-trg_update_user_stats_on_exercise | progress_tracking vs public | ⚠️ VALIDAR |
| C3.9 | 22-exercise_submissions_updated_at | progress_tracking vs public | ⚠️ VALIDAR |
| C3.10 | 23-trg_module_progress_updated_at | progress_tracking vs public | ⚠️ VALIDAR |
**Acción sugerida:** Ejecutar query para verificar triggers en public schema:
```sql
SELECT schemaname, tablename, trigger_name
FROM information_schema.triggers
WHERE schemaname = 'public'
ORDER BY tablename;
```
**Referencias:**
- DDL triggers social_features: `apps/database/ddl/schemas/social_features/triggers/`
- DDL triggers public: `apps/database/ddl/schemas/public/triggers/`
---
### 2.2 ENUMs MAL UBICADOS (33 incidencias)
#### 2.2.1 ENUMs → gamification_system (12 ENUMs)
| ID | ENUM | Estado | DDL Ubicación Actual | Uso en Tabla | Prioridad |
|----|------|--------|---------------------|--------------|-----------|
| P1.1.1 | achievement_category | ✅ COMPLETADO | gamification_system | achievements | P0 |
| P1.1.2 | achievement_type | ✅ COMPLETADO | gamification_system | *(no usado)* | P0 |
| P1.1.3 | comodin_type | ⏳ PENDIENTE | **public** | exercises (ARRAY) | P1 |
| P1.1.4 | transaction_type | ⏳ PENDIENTE | **public** + TEXT+CHECK | ml_coins_transactions | P0 |
| P1.1.5 | notification_type | ✅ COMPLETADO | gamification_system | notifications | P0 |
| P1.1.6 | notification_priority | ⏳ PENDIENTE | public | *(no usado - huérfano)* | P2 |
| P1.1.7 | notification_channel | ⏳ PENDIENTE | public | *(no usado - huérfano)* | P2 |
| P1.1.8 | metric_type | ⏳ PENDIENTE | public | performance_metrics | P2 |
| P1.1.9 | aggregation_period | ⏳ PENDIENTE | public | leaderboard_metadata | P2 |
| P1.1.10 | social_event_type | ⏳ PENDIENTE | public | user_activity | P2 |
| P1.1.11 | maya_rank | ✅ COMPLETADO | gamification_system | user_ranks | - |
| P1.1.12 | rango_maya | ✅ COMPLETADO | *(eliminado)* | - | - |
**Referencias detalladas P1.1.3 - comodin_type:**
- DDL ENUM: `apps/database/ddl/schemas/public/enums/comodin_type.sql`
- Valores: `'pistas', 'vision_lectora', 'segunda_oportunidad'`
- Uso: `educational_content.exercises.comodines_allowed public.comodin_type[]`
- DDL tabla: `apps/database/ddl/schemas/educational_content/tables/02-exercises.sql:46`
- Acción: Crear `gamification_system.comodin_type`, migrar columna ARRAY
- Complejidad: MEDIA (tipo ARRAY requiere conversión especial)
**Referencias detalladas P1.1.4 - transaction_type:**
- DDL ENUM public: `apps/database/ddl/schemas/public/enums/transaction_type.sql` (10 valores legacy)
- DDL ENUM correcto: `apps/database/ddl/schemas/gamification_system/enums/transaction_type.sql`**YA CREADO** (14 valores)
- DDL tabla: `apps/database/ddl/schemas/gamification_system/tables/05-ml_coins_transactions.sql`**YA ACTUALIZADO**
- Problema: Tabla usa `transaction_type TEXT` con CHECK constraint (12 valores)
- Valores correctos (14): Ver `TYPES-GAMIFICATION.md:217-230`
- Acción: Crear migration para convertir TEXT→ENUM
- Migration: ⏳ PENDIENTE crear `2025-11-0X-sync-transaction-type-enum.sql`
- Complejidad: ALTA (desincronización entre 3 fuentes, mapeo de valores legacy)
**Mapeo de valores legacy transaction_type:**
```
public.transaction_type (10 valores legacy) → gamification_system.transaction_type (14 valores)
MANTENER:
- earned_exercise → earned_exercise
- earned_achievement → earned_achievement
- spent_hint → spent_hint
- refund → refund
- admin_adjustment → admin_adjustment
MAPEAR:
- earned_daily_bonus → earned_daily
- earned_rank_promotion → earned_rank
- spent_unlock_content → spent_powerup (o admin_adjustment según contexto)
- spent_customization → spent_powerup (o admin_adjustment según contexto)
- gift → bonus
AGREGAR (nuevos en v2.0):
- earned_module (nuevo)
- earned_streak (nuevo)
- earned_bonus (nuevo)
- spent_powerup (nuevo)
- spent_retry (nuevo)
- welcome_bonus (nuevo)
```
**Referencias detalladas P1.1.6 y P1.1.7 - notification_priority/channel:**
- DDL: `apps/database/ddl/schemas/public/enums/notification_priority.sql`
- DDL: `apps/database/ddl/schemas/public/enums/notification_channel.sql`
- Estado: ENUMs huérfanos (NO usados en ninguna tabla)
- Tabla notifications: NO tiene columnas priority ni channel
- Decisión requerida:
1. Verificar en `TYPES-NOTIFICATIONS.md` si deben existir
2. Si SÍ: Agregar columnas a tabla notifications + migrar ENUMs
3. Si NO: Eliminar ENUMs huérfanos
- Acción: Consultar documentación oficial primero
---
#### 2.2.2 ENUMs → educational_content (8 ENUMs)
| ID | ENUM | Ubicación Actual | Debe ir a | Tablas Afectadas | Estado |
|----|------|-----------------|-----------|------------------|--------|
| P1.2.1 | exercise_type | public | educational_content | exercises | ⏳ PENDIENTE |
| P1.2.2 | cognitive_level | public | educational_content | exercises | ⏳ PENDIENTE |
| P1.2.3 | difficulty_level | public | educational_content | exercises, achievements | ⏳ PENDIENTE |
| P1.2.4 | module_status | public | educational_content | modules | ⏳ PENDIENTE |
| P1.2.5 | progress_status | public | progress_tracking | module_progress | ⏳ PENDIENTE |
| P1.2.6 | attempt_status | public | progress_tracking | exercise_attempts | ⏳ PENDIENTE |
| P1.2.7 | attempt_result | public | progress_tracking | exercise_attempts | ⏳ PENDIENTE |
| P1.2.8 | processing_status | public | content_management | media_files | ⏳ PENDIENTE |
**Nota:** difficulty_level es usado por dos schemas (educational_content.exercises y gamification_system.achievements). Decidir ubicación final o mantener en public.
---
#### 2.2.3 ENUMs → content_management (4 ENUMs)
| ID | ENUM | Ubicación Actual | Debe ir a | Tablas Afectadas | Estado |
|----|------|-----------------|-----------|------------------|--------|
| P1.3.1 | content_type | public | content_management | content_items | ⏳ PENDIENTE |
| P1.3.2 | content_status | public | content_management | content_items | ⏳ PENDIENTE |
| P1.3.3 | media_type | public | content_management o storage | media_files | ⏳ PENDIENTE |
| P1.3.4 | processing_status | public | content_management | *(duplicado de P1.2.8)* | ⏳ PENDIENTE |
---
#### 2.2.4 ENUMs → auth_management / social_features (6 ENUMs)
| ID | ENUM | Ubicación Actual | Debe ir a | Tablas Afectadas | Estado |
|----|------|-----------------|-----------|------------------|--------|
| P1.4.1 | gamilit_role | public | auth_management | user_roles | ⏳ PENDIENTE |
| P1.4.2 | user_status | public | auth_management | users | ⏳ PENDIENTE |
| P1.4.3 | classroom_role | public | social_features | classroom_members | ⏳ PENDIENTE |
| P1.4.4 | team_role | public | social_features | team_members | ⏳ PENDIENTE |
| P1.4.5 | friendship_status | public | social_features | friendships | ⏳ PENDIENTE |
| P1.4.6 | setting_type | public | system_configuration | system_settings | ⏳ PENDIENTE |
---
#### 2.2.5 ENUMs → audit_logging (4 ENUMs)
| ID | ENUM | Ubicación Actual | Debe ir a | Tablas Afectadas | Estado |
|----|------|-----------------|-----------|------------------|--------|
| P1.5.1 | audit_action | public | audit_logging | audit_logs | ⏳ PENDIENTE |
| P1.5.2 | log_level | public | audit_logging | system_logs | ⏳ PENDIENTE |
| P1.5.3 | alert_severity | public | audit_logging | system_alerts | ⏳ PENDIENTE |
| P1.5.4 | alert_status | public | audit_logging | system_alerts | ⏳ PENDIENTE |
---
### 2.3 TABLAS MAL UBICADAS (9 incidencias)
#### 2.3.1 Sistema de Assignments (6 tablas) - public → educational_content
| ID | Tabla | Ubicación Actual | Debe ir a | Razón | Estado |
|----|-------|-----------------|-----------|-------|--------|
| P2.1 | assignments | public | educational_content | Funcionalidad educativa | ⏳ PENDIENTE |
| P2.2 | assignment_classrooms | public | educational_content | Relación con assignments | ⏳ PENDIENTE |
| P2.3 | assignment_exercises | public | educational_content | Relación con assignments | ⏳ PENDIENTE |
| P2.4 | assignment_students | public | educational_content | Relación con assignments | ⏳ PENDIENTE |
| P2.5 | assignment_submissions | public | educational_content | Relación con assignments | ⏳ PENDIENTE |
| P2.9 | teacher_notes | public | educational_content | Funcionalidad educativa | ⏳ PENDIENTE |
**Referencias:**
- DDL: `apps/database/ddl/schemas/public/tables/assignments.sql`
- DDL: `apps/database/ddl/schemas/public/tables/assignment_classrooms.sql`
- DDL: `apps/database/ddl/schemas/public/tables/assignment_exercises.sql`
- DDL: `apps/database/ddl/schemas/public/tables/assignment_students.sql`
- DDL: `apps/database/ddl/schemas/public/tables/assignment_submissions.sql`
- DDL: `apps/database/ddl/schemas/public/tables/teacher_notes.sql`
**Acción:** Mover todo el sistema de assignments en bloque (6 tablas + índices + triggers relacionados)
**Complejidad:** ALTA
- 6 tablas con relaciones FK entre ellas
- Índices asociados
- Posibles triggers
- Backend entities a actualizar
**Prioridad:** P1 - ALTO (arquitectura inconsistente)
---
#### 2.3.2 Tablas Duplicadas (3 tablas) - ✅ FALSOS POSITIVOS
Documentadas en sección 2.1.1
---
### 2.4 CONTRADICCIONES CRÍTICAS RESUELTAS
#### CC1: NotificationType - 3 Definiciones Diferentes ✅ COMPLETADO
**Problema:** 0% de coincidencia entre 3 fuentes
- DDL: 7 valores legacy + TEXT con CHECK (6 valores incorrectos)
- Backend Constants: 6 valores incompletos
- Entity: Definición local desactualizada
**Solución aplicada:**
- ✅ DDL ENUM: `apps/database/ddl/schemas/public/enums/notification_type.sql` → 11 valores
- ✅ DDL tabla: `apps/database/ddl/schemas/gamification_system/tables/08-notifications.sql` → usa ENUM
- ✅ Migration: `apps/database/migrations/2025-11-07-align-notification-type-with-docs.sql`
- ✅ Constants: `apps/backend/src/shared/constants/enums.constants.ts` → NotificationTypeEnum (11)
- ✅ Entity: `apps/backend/src/modules/notifications/entities/notification.entity.ts` → usa constants
**Valores finales (11):**
```typescript
'achievement_unlocked', 'rank_up', 'friend_request', 'guild_invitation',
'mission_completed', 'level_up', 'message_received', 'system_announcement',
'ml_coins_earned', 'streak_milestone', 'exercise_feedback'
```
**Documentación:** `docs/02-especificaciones-tecnicas/tipos-compartidos/TYPES-NOTIFICATIONS.md`
---
#### CC2: Notification Entity Duplicada ✅ COMPLETADO
**Problema:** Entity en 2 ubicaciones
- `/modules/notifications/entities/notification.entity.ts` (correcta)
- `/modules/gamification/entities/notification.entity.ts` (duplicada)
**Solución:** Ya eliminada en sesión anterior, validado 2025-11-07
---
#### CC3: MayaRank - Documentación Desactualizada ✅ COMPLETADO
**Problema:** Docs advertían migración pendiente pero ya estaba corregida (2025-11-03)
**Solución aplicada:**
- ✅ Docs actualizados: `docs/02-especificaciones-tecnicas/tipos-compartidos/TYPES-GAMIFICATION.md`
- ✅ Estado actual: DDL correcto desde 2025-11-03
- ✅ Valores: `'Ajaw', 'Nacom', 'Ah K''in', 'Halach Uinic', 'K''uk''ulkan'`
---
#### CC4: Guild vs Team Terminology ⏳ PENDIENTE (P1)
**Problema:** Documentación usa "Guild", código usa "Team"
**Afectados:** 21+ archivos
- Tablas: `teams`, `team_members`, `team_challenges`, `team_role`
- ENUM: notification_type valor `guild_invitation` ✅ ya corregido en notification
- Pero tablas de teams aún usan "team"
**Decisión:** P1-ALTO, requiere refactoring mayor (8-12 horas estimadas)
**Plan detallado:** Ver `apps/database/docs/REPORTE-FUENTE-DE-VERDAD-2025-11-07.md` sección C4
**Prioridad:** P1 - Breaking changes
---
## 3. Mapa de Referencias
### 3.1 Estructura de Directorios
```
apps/database/
├── ddl/
│ ├── 00-prerequisites.sql # ENUMs base (algunos desactualizados)
│ └── schemas/
│ ├── public/
│ │ ├── enums/ # 26 ENUMs (20 activos, 2 migrados, 4+ huérfanos)
│ │ │ ├── _MAP.md # ✅ ACTUALIZADO con migraciones
│ │ │ ├── notification_type.sql # ✅ ACTUALIZADO v2.0
│ │ │ ├── comodin_type.sql # ⏳ MIGRAR
│ │ │ ├── transaction_type.sql # ⏳ MIGRAR (legacy 10 valores)
│ │ │ └── ...
│ │ └── tables/ # 6 tablas de assignments
│ │ ├── assignments.sql
│ │ ├── assignment_*.sql
│ │ └── teacher_notes.sql
│ ├── gamification_system/
│ │ ├── enums/
│ │ │ ├── maya_rank.sql # ✅ CORRECTO
│ │ │ ├── achievement_category.sql # ✅ CREADO
│ │ │ ├── achievement_type.sql # ✅ CREADO
│ │ │ └── transaction_type.sql # ✅ CREADO (14 valores)
│ │ └── tables/
│ │ ├── 03-achievements.sql # ✅ ACTUALIZADO usa gamification_system ENUMs
│ │ ├── 05-ml_coins_transactions.sql # ✅ ACTUALIZADO usa transaction_type ENUM
│ │ ├── 07-comodines_inventory.sql
│ │ └── 08-notifications.sql # ✅ ACTUALIZADO usa notification_type ENUM
│ ├── educational_content/
│ │ └── tables/
│ │ └── 02-exercises.sql # Usa public.comodin_type[] ⏳ PENDIENTE
│ └── ...
├── migrations/
│ ├── 2025-11-07-align-notification-type-with-docs.sql # ✅ COMPLETO
│ ├── 2025-11-07-fix-achievement-enums-schema.sql # ✅ COMPLETO
│ └── 2025-11-0X-sync-transaction-type-enum.sql # ⏳ PENDIENTE CREAR
└── docs/
├── TRACKING-CORRECCIONES.md # ✅ v1.4 - Tracking principal
├── REPORTE-VALIDACION-2025-11-07.md
├── REPORTE-CONTRADICCIONES-CRITICAS-2025-11-07.md
├── REPORTE-FUENTE-DE-VERDAD-2025-11-07.md
├── REPORTE-VALIDACION-DUPLICACIONES-2025-11-07.md
├── RESUMEN-EJECUTIVO-SESION-2025-11-07.md
├── ANALISIS-ENUMS-GAMIFICATION-2025-11-07.md # ✅ Análisis detallado ENUMs
└── MAPA-INCIDENCIAS-BASE-DATOS.md # 📍 ESTE DOCUMENTO
docs/02-especificaciones-tecnicas/
├── tipos-compartidos/
│ ├── TYPES-NOTIFICATIONS.md # 📖 Fuente verdad NotificationType (11 valores)
│ └── TYPES-GAMIFICATION.md # 📖 Fuente verdad TransactionType (14 valores)
└── trazabilidad/
└── 05-realtime-notifications.md # 📖 Arquitectura notifications
apps/backend/src/
├── shared/constants/
│ └── enums.constants.ts # ✅ ACTUALIZADO NotificationTypeEnum (11)
└── modules/
├── notifications/entities/
│ └── notification.entity.ts # ✅ ACTUALIZADO usa constants
└── gamification/entities/
├── achievement.entity.ts # ⏳ VALIDAR usa gamification_system ENUMs
└── ml-coins-transaction.entity.ts # ⏳ VALIDAR transaction_type
```
### 3.2 Índice de Archivos por Incidencia
#### NotificationType (CC1) - ✅ COMPLETADO
```
DDL:
apps/database/ddl/schemas/public/enums/notification_type.sql ✅
apps/database/ddl/schemas/gamification_system/tables/08-notifications.sql ✅
Migration:
apps/database/migrations/2025-11-07-align-notification-type-with-docs.sql ✅
Backend:
apps/backend/src/shared/constants/enums.constants.ts ✅
apps/backend/src/modules/notifications/entities/notification.entity.ts ✅
Docs:
docs/02-especificaciones-tecnicas/tipos-compartidos/TYPES-NOTIFICATIONS.md 📖
```
#### Achievement ENUMs (P1.1.1, P1.1.2) - ✅ COMPLETADO
```
DDL:
apps/database/ddl/schemas/gamification_system/enums/achievement_category.sql ✅
apps/database/ddl/schemas/gamification_system/enums/achievement_type.sql ✅
apps/database/ddl/schemas/gamification_system/tables/03-achievements.sql ✅
apps/database/ddl/schemas/public/enums/_MAP.md ✅ (marcado como migrado)
Migration:
apps/database/migrations/2025-11-07-fix-achievement-enums-schema.sql ✅
Backend:
apps/backend/src/modules/gamification/entities/achievement.entity.ts ⏳ VALIDAR
Docs:
docs/02-especificaciones-tecnicas/tipos-compartidos/TYPES-GAMIFICATION.md 📖
```
#### TransactionType (P1.1.4) - ⏳ DDL LISTO, FALTA MIGRATION
```
DDL:
apps/database/ddl/schemas/public/enums/transaction_type.sql (legacy 10 valores)
apps/database/ddl/schemas/gamification_system/enums/transaction_type.sql ✅ NUEVO (14)
apps/database/ddl/schemas/gamification_system/tables/05-ml_coins_transactions.sql ✅
Migration:
apps/database/migrations/2025-11-0X-sync-transaction-type-enum.sql ⏳ CREAR
Backend:
apps/backend/src/modules/gamification/entities/ml-coins-transaction.entity.ts ⏳ VALIDAR
Docs:
docs/02-especificaciones-tecnicas/tipos-compartidos/TYPES-GAMIFICATION.md:217-230 📖
apps/database/docs/ANALISIS-ENUMS-GAMIFICATION-2025-11-07.md 📋
```
#### ComodinType (P1.1.3) - ⏳ PENDIENTE
```
DDL:
apps/database/ddl/schemas/public/enums/comodin_type.sql (3 valores)
apps/database/ddl/schemas/educational_content/tables/02-exercises.sql:46 (usa ARRAY)
Migration:
⏳ CREAR: 2025-11-0X-migrate-comodin-type-enum.sql
Backend:
apps/backend/src/modules/exercises/entities/exercise.entity.ts ⏳ VALIDAR
Docs:
docs/02-especificaciones-tecnicas/tipos-compartidos/TYPES-GAMIFICATION.md 📖
```
#### Assignments (P2.1-P2.5, P2.9) - ⏳ PENDIENTE
```
DDL:
apps/database/ddl/schemas/public/tables/assignments.sql
apps/database/ddl/schemas/public/tables/assignment_classrooms.sql
apps/database/ddl/schemas/public/tables/assignment_exercises.sql
apps/database/ddl/schemas/public/tables/assignment_students.sql
apps/database/ddl/schemas/public/tables/assignment_submissions.sql
apps/database/ddl/schemas/public/tables/teacher_notes.sql
Migration:
⏳ CREAR: 2025-11-XX-migrate-assignments-to-educational-content.sql
Backend:
⏳ BUSCAR entities de assignments
```
---
## 4. Estado de Correcciones
### 4.1 Completadas (8)
| ID | Incidencia | Tipo | Fecha | Archivos |
|----|-----------|------|-------|----------|
| C2.1 | maya_rank duplicado | ENUM | 2025-11-07 | 1 migration |
| C2.2 | rango_maya legacy | ENUM | 2025-11-07 | - |
| C1.1 | classrooms duplicado | Tabla | 2025-11-07 | Falso positivo |
| C1.2 | classroom_members duplicado | Tabla | 2025-11-07 | Falso positivo |
| C1.3 | notifications duplicado | Tabla | 2025-11-07 | Falso positivo |
| P1.1.5 | notification_type sincronización | ENUM | 2025-11-07 | 5 archivos |
| P1.1.1 | achievement_category referencia | ENUM | 2025-11-07 | 4 archivos |
| P1.1.2 | achievement_type validación | ENUM | 2025-11-07 | 2 archivos |
### 4.2 En Progreso (1)
| ID | Incidencia | Tipo | Estado Actual | Falta |
|----|-----------|------|---------------|-------|
| P1.1.4 | transaction_type | ENUM | DDL listo | Migration |
### 4.3 Pendientes P0-Críticas (0)
Todas las P0 completadas o en progreso.
### 4.4 Pendientes P1-Alto (3)
| ID | Incidencia | Complejidad | Estimado |
|----|-----------|-------------|----------|
| P1.1.3 | comodin_type migración | MEDIA | 2-3h |
| P2.1-P2.9 | Assignments migración | ALTA | 6-8h |
| CC4 | Guild vs Team refactoring | MUY ALTA | 8-12h |
### 4.5 Pendientes P2-Medio (28 ENUMs)
Ver secciones 2.2.2, 2.2.3, 2.2.4, 2.2.5 para lista completa
---
## 5. Incidencias Detalladas
### 5.1 CRÍTICO: transaction_type - Desincronización entre 3 fuentes
**ID:** P1.1.4
**Tipo:** ENUM mal ubicado + Desincronización
**Prioridad:** P0 - CRÍTICO
**Estado:** ⏳ DDL listo, falta migration
**Problema:**
1. ENUM en `public.transaction_type` con 10 valores legacy
2. Tabla usa `TEXT` con CHECK constraint de 12 valores
3. Documentación especifica 14 valores oficiales
4. 0% de coincidencia entre las 3 fuentes
**Fuentes:**
**A) public.transaction_type (10 valores - legacy):**
```sql
-- apps/database/ddl/schemas/public/enums/transaction_type.sql
'earned_exercise', 'earned_achievement', 'earned_daily_bonus', 'earned_rank_promotion',
'spent_hint', 'spent_unlock_content', 'spent_customization',
'refund', 'admin_adjustment', 'gift'
```
**B) ml_coins_transactions CHECK constraint (12 valores - tabla):**
```sql
-- apps/database/ddl/schemas/gamification_system/tables/05-ml_coins_transactions.sql:47
'earned_exercise', 'earned_module', 'earned_achievement', 'earned_rank', 'earned_streak',
'spent_powerup', 'spent_hint', 'spent_retry',
'admin_adjustment', 'refund', 'bonus', 'welcome_bonus'
```
**C) TYPES-GAMIFICATION.md (14 valores - documentación oficial):**
```typescript
// docs/02-especificaciones-tecnicas/tipos-compartidos/TYPES-GAMIFICATION.md:217-230
'earned_exercise', 'earned_module', 'earned_achievement', 'earned_rank', 'earned_streak',
'earned_daily', 'earned_bonus',
'spent_powerup', 'spent_hint', 'spent_retry',
'admin_adjustment', 'refund', 'bonus', 'welcome_bonus'
```
**Solución implementada:**
**1. Creado ENUM correcto (14 valores):**
```
apps/database/ddl/schemas/gamification_system/enums/transaction_type.sql
```
**2. Actualizado DDL tabla:**
```
apps/database/ddl/schemas/gamification_system/tables/05-ml_coins_transactions.sql
- Cambiado: transaction_type text → transaction_type gamification_system.transaction_type
- Eliminado: CHECK constraint
```
**3. FALTA: Migration script**
```
Crear: apps/database/migrations/2025-11-0X-sync-transaction-type-enum.sql
Debe incluir:
- Pre-validación de valores actuales en tabla
- Mapeo de valores legacy (ver mapeo en sección 2.2.1)
- Conversión TEXT → ENUM
- Eliminación CHECK constraint
- Post-validación
- Rollback documentado
```
**Mapeo de valores legacy → v2.0:**
```sql
-- Valores que se mantienen igual (5):
'earned_exercise' 'earned_exercise'
'earned_achievement' 'earned_achievement'
'spent_hint' 'spent_hint'
'refund' 'refund'
'admin_adjustment' 'admin_adjustment'
-- Valores a mapear (5):
'earned_daily_bonus' 'earned_daily'
'earned_rank_promotion' 'earned_rank'
'spent_unlock_content' 'spent_powerup' (o 'admin_adjustment' según metadata)
'spent_customization' 'spent_powerup' (o 'admin_adjustment' según metadata)
'gift' 'bonus'
-- Valores del CHECK constraint ya compatibles (7):
'earned_module', 'earned_rank', 'earned_streak', 'spent_powerup', 'spent_retry', 'bonus', 'welcome_bonus'
-- Valores nuevos en v2.0 (no requieren mapeo, son futuros):
'earned_daily', 'earned_bonus'
```
**Query de pre-validación sugerida:**
```sql
-- Ver distribución actual de valores
SELECT transaction_type, COUNT(*) as count
FROM gamification_system.ml_coins_transactions
GROUP BY transaction_type
ORDER BY count DESC;
-- Verificar valores que NO están en v2.0
SELECT DISTINCT transaction_type
FROM gamification_system.ml_coins_transactions
WHERE transaction_type NOT IN (
'earned_exercise', 'earned_module', 'earned_achievement', 'earned_rank', 'earned_streak',
'earned_daily', 'earned_bonus',
'spent_powerup', 'spent_hint', 'spent_retry',
'admin_adjustment', 'refund', 'bonus', 'welcome_bonus'
);
```
**Archivos a validar en backend:**
```
apps/backend/src/modules/gamification/entities/ml-coins-transaction.entity.ts
apps/backend/src/modules/gamification/services/ml-coins.service.ts
apps/backend/src/shared/constants/enums.constants.ts (crear TransactionTypeEnum)
```
**Estimado:** 3-4 horas (migration + validación + testing)
---
### 5.2 ALTO: comodin_type - Migración con ARRAY type
**ID:** P1.1.3
**Tipo:** ENUM mal ubicado
**Prioridad:** P1 - ALTO
**Estado:** ⏳ PENDIENTE
**Problema:**
- ENUM en `public.comodin_type` pero debe estar en `gamification_system`
- Usado en `exercises.comodines_allowed` como **ARRAY type** (`public.comodin_type[]`)
- Conversión ARRAY requiere estrategia especial
**Ubicación actual:**
```sql
-- apps/database/ddl/schemas/public/enums/comodin_type.sql
CREATE TYPE public.comodin_type AS ENUM ('pistas', 'vision_lectora', 'segunda_oportunidad');
```
**Uso:**
```sql
-- apps/database/ddl/schemas/educational_content/tables/02-exercises.sql:46
comodines_allowed public.comodin_type[] DEFAULT ARRAY['pistas'::public.comodin_type, 'vision_lectora'::public.comodin_type, 'segunda_oportunidad'::public.comodin_type]
```
**Solución:**
1. **Crear ENUM en gamification_system:**
```sql
CREATE TYPE gamification_system.comodin_type AS ENUM ('pistas', 'vision_lectora', 'segunda_oportunidad');
```
2. **Migration con conversión ARRAY:**
```sql
-- Paso 1: Convertir a text[]
ALTER TABLE educational_content.exercises
ALTER COLUMN comodines_allowed TYPE text[]
USING comodines_allowed::text[];
-- Paso 2: Aplicar nuevo ENUM
ALTER TABLE educational_content.exercises
ALTER COLUMN comodines_allowed TYPE gamification_system.comodin_type[]
USING comodines_allowed::text[]::gamification_system.comodin_type[];
-- Paso 3: Eliminar public.comodin_type
DROP TYPE IF EXISTS public.comodin_type CASCADE;
```
3. **Actualizar DDL:**
```
apps/database/ddl/schemas/gamification_system/enums/comodin_type.sql (crear)
apps/database/ddl/schemas/educational_content/tables/02-exercises.sql (actualizar referencia)
```
**Archivos a validar en backend:**
```
apps/backend/src/modules/exercises/entities/exercise.entity.ts
```
**Complejidad:** MEDIA (conversión ARRAY)
**Estimado:** 2-3 horas
---
### 5.3 ALTO: Assignments - Sistema completo a migrar
**ID:** P2.1-P2.9
**Tipo:** Tablas mal ubicadas
**Prioridad:** P1 - ALTO
**Estado:** ⏳ PENDIENTE
**Problema:**
- 6 tablas del sistema de assignments en `public` schema
- Funcionalidad educativa → debe estar en `educational_content`
- Rompe arquitectura modular
**Tablas a migrar:**
1. `assignments` - Tabla principal
2. `assignment_classrooms` - Relación N:N assignments ↔ classrooms
3. `assignment_exercises` - Relación N:N assignments ↔ exercises
4. `assignment_students` - Relación N:N assignments ↔ students
5. `assignment_submissions` - Entregas de estudiantes
6. `teacher_notes` - Notas de profesores
**DDL ubicaciones actuales:**
```
apps/database/ddl/schemas/public/tables/assignments.sql
apps/database/ddl/schemas/public/tables/assignment_classrooms.sql
apps/database/ddl/schemas/public/tables/assignment_exercises.sql
apps/database/ddl/schemas/public/tables/assignment_students.sql
apps/database/ddl/schemas/public/tables/assignment_submissions.sql
apps/database/ddl/schemas/public/tables/teacher_notes.sql
```
**Objetos relacionados:**
- Índices: `apps/database/ddl/schemas/public/indexes/idx_assignment_*.sql`
- Triggers: Posiblemente `trg_assignment_*.sql`
- Vistas: `apps/database/ddl/schemas/public/views/01-assignment_submission_stats.sql`
**Complejidad:** ALTA
- 6 tablas con FKs entre ellas
- FK a otras schemas (classrooms → social_features, students → auth_management)
- Índices y triggers asociados
- Vista materializada posible
- Backend entities
**Estrategia de migración:**
1. Crear tablas en `educational_content` schema
2. Copiar datos (INSERT SELECT)
3. Actualizar FKs en otras tablas que apuntan a assignments
4. Actualizar backend entities
5. Testing exhaustivo
6. Deprecar tablas en public
7. Eliminar después de período de gracia
**Migration script:** `2025-11-XX-migrate-assignments-to-educational-content.sql`
**Estimado:** 6-8 horas (alta complejidad por FKs y datos)
---
### 5.4 MEDIO: notification_priority y notification_channel - ENUMs huérfanos
**ID:** P1.1.6, P1.1.7
**Tipo:** ENUMs huérfanos (no usados)
**Prioridad:** P2 - MEDIO
**Estado:** ⏳ REQUIERE DECISIÓN
**Problema:**
- ENUMs existen en public pero NO son usados por ninguna tabla
- Tabla `notifications` NO tiene columnas `priority` ni `channel`
- Decisión requerida: ¿eliminar o implementar?
**Ubicación actual:**
```sql
-- apps/database/ddl/schemas/public/enums/notification_priority.sql
CREATE TYPE public.notification_priority AS ENUM ('low', 'medium', 'high', 'critical');
-- apps/database/ddl/schemas/public/enums/notification_channel.sql
CREATE TYPE public.notification_channel AS ENUM ('in_app', 'email', 'push', 'sms');
```
**Verificación:**
```sql
-- Tabla notifications NO tiene estas columnas
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'gamification_system'
AND table_name = 'notifications';
-- Resultado: id, user_id, type, title, message, data, read, created_at, updated_at
-- NO hay: priority, channel
```
**Opciones:**
**Opción A: Eliminar ENUMs huérfanos**
- Si no están en `TYPES-NOTIFICATIONS.md`
- Si no se planea sistema multi-canal
- Limpiar deuda técnica
**Opción B: Implementar funcionalidad**
- Si están en especificación oficial
- Agregar columnas a tabla notifications
- Migration para agregar columnas + valores default
- Migrar ENUMs a gamification_system
**Opción C: Mantener para futuro**
- Si funcionalidad está planeada
- Migrar a gamification_system pero no usar aún
- Documentar como "futuro"
**Acción inmediata:**
1. Consultar `TYPES-NOTIFICATIONS.md` y `05-realtime-notifications.md`
2. Verificar si NotificationPriority o NotificationChannel están especificados
3. Decidir opción A, B o C
**Referencias a verificar:**
```
docs/02-especificaciones-tecnicas/tipos-compartidos/TYPES-NOTIFICATIONS.md
docs/02-especificaciones-tecnicas/trazabilidad/05-realtime-notifications.md
```
**Si Opción B (implementar):**
```sql
-- Migration agregar columnas
ALTER TABLE gamification_system.notifications
ADD COLUMN priority gamification_system.notification_priority DEFAULT 'medium',
ADD COLUMN channel gamification_system.notification_channel DEFAULT 'in_app';
-- Crear índices
CREATE INDEX idx_notifications_priority ON gamification_system.notifications(priority);
CREATE INDEX idx_notifications_channel ON gamification_system.notifications(channel);
```
**Estimado:** 1-2 horas (decisión + implementación si aplica)
---
## 6. Contexto para Siguiente Agente
### 6.1 Trabajo Completado (Sesión 2025-11-07)
**Principio establecido:**
- "Documentación como Fuente de Verdad"
- Cuando hay conflicto: Docs > Código
**Correcciones P0 completadas:**
1. ✅ NotificationType: Sincronizado DDL ↔ Constants ↔ Entity ↔ Docs (11 valores)
2. ✅ Achievement ENUMs: Corregidas referencias de public a gamification_system
3. ✅ MayaRank: Documentación actualizada
4. ✅ Validación duplicaciones: 3 falsos positivos identificados
**ENUMs migrados (5):**
- notification_type (11 valores)
- achievement_category (7 valores)
- achievement_type (4 valores)
- maya_rank (5 valores) - sesión anterior
- rango_maya (eliminado)
**DDL actualizados:**
- notification_type.sql (ENUM)
- notifications.sql (tabla)
- achievement_category.sql (ENUM)
- achievement_type.sql (ENUM)
- achievements.sql (tabla)
- transaction_type.sql (ENUM) - NUEVO 14 valores
- ml_coins_transactions.sql (tabla) - usa ENUM
**Migrations creados (2):**
1. 2025-11-07-align-notification-type-with-docs.sql (completo y probado lógicamente)
2. 2025-11-07-fix-achievement-enums-schema.sql (completo y probado lógicamente)
**Documentación creada (6 reportes):**
1. REPORTE-VALIDACION-2025-11-07.md
2. REPORTE-CONTRADICCIONES-CRITICAS-2025-11-07.md
3. REPORTE-FUENTE-DE-VERDAD-2025-11-07.md
4. REPORTE-VALIDACION-DUPLICACIONES-2025-11-07.md
5. RESUMEN-EJECUTIVO-SESION-2025-11-07.md
6. ANALISIS-ENUMS-GAMIFICATION-2025-11-07.md
---
### 6.2 Próximos Pasos Recomendados (Prioridad)
#### **PASO 1: Completar transaction_type (P0)**
**Estimado:** 3-4 horas
**Estado:** DDL listo, falta migration
**Tareas:**
1. Crear migration: `2025-11-0X-sync-transaction-type-enum.sql`
- Pre-validación con query de distribución actual
- Mapeo de valores legacy (ver sección 5.1)
- Conversión TEXT → ENUM
- Eliminación CHECK constraint
- Post-validación
- Rollback documentado
2. Actualizar backend:
- Crear `TransactionTypeEnum` en constants
- Actualizar entity ml-coins-transaction.entity.ts
- Validar services que usan transaction_type
3. Testing en staging
**Archivos:**
```
CREAR: apps/database/migrations/2025-11-0X-sync-transaction-type-enum.sql
VALIDAR: apps/backend/src/modules/gamification/entities/ml-coins-transaction.entity.ts
CREAR: apps/backend/src/shared/constants/enums.constants.ts (agregar TransactionTypeEnum)
```
**Referencias:**
- Sección 5.1 de este documento (mapeo detallado)
- `ANALISIS-ENUMS-GAMIFICATION-2025-11-07.md`
- `TYPES-GAMIFICATION.md:217-230`
---
#### **PASO 2: Decidir sobre notification_priority/channel (P2)**
**Estimado:** 1-2 horas
**Estado:** Requiere decisión
**Tareas:**
1. Leer `TYPES-NOTIFICATIONS.md` completo
2. Leer `05-realtime-notifications.md` (trazabilidad)
3. Determinar si priority/channel son parte de especificación
4. Elegir Opción A (eliminar), B (implementar), o C (mantener futuro)
5. Implementar decisión
**Si Opción A (eliminar):**
```sql
-- Verificar que nadie usa
SELECT COUNT(*) FROM information_schema.columns
WHERE udt_name IN ('notification_priority', 'notification_channel');
-- Si 0, eliminar
DROP TYPE IF EXISTS public.notification_priority;
DROP TYPE IF EXISTS public.notification_channel;
```
**Si Opción B (implementar):**
- Ver sección 5.4 para migration de agregar columnas
- Migrar ENUMs a gamification_system
- Actualizar entity
**Referencias:**
- Sección 5.4 de este documento
- `TYPES-NOTIFICATIONS.md`
- `05-realtime-notifications.md`
---
#### **PASO 3: Migrar comodin_type (P1)**
**Estimado:** 2-3 horas
**Estado:** Pendiente, complejidad media (ARRAY type)
**Tareas:**
1. Crear ENUM en gamification_system
2. Crear migration con conversión ARRAY
3. Actualizar DDL exercises.sql
4. Validar backend entity
**Archivos:**
```
CREAR: apps/database/ddl/schemas/gamification_system/enums/comodin_type.sql
CREAR: apps/database/migrations/2025-11-0X-migrate-comodin-type-enum.sql
ACTUALIZAR: apps/database/ddl/schemas/educational_content/tables/02-exercises.sql
VALIDAR: apps/backend/src/modules/exercises/entities/exercise.entity.ts
```
**Referencias:**
- Sección 5.2 de este documento (estrategia ARRAY)
- `ANALISIS-ENUMS-GAMIFICATION-2025-11-07.md`
---
#### **PASO 4: Migrar sistema assignments (P1)**
**Estimado:** 6-8 horas
**Estado:** Pendiente, complejidad alta
**Tareas:**
1. Analizar FKs y dependencias
2. Crear DDL en educational_content
3. Crear migration completo (6 tablas)
4. Validar backend entities
5. Testing exhaustivo
**Archivos:**
```
CREAR: apps/database/ddl/schemas/educational_content/tables/*.sql (6 tablas)
CREAR: apps/database/migrations/2025-11-XX-migrate-assignments-to-educational-content.sql
BUSCAR: Backend entities de assignments
```
**Referencias:**
- Sección 5.3 de este documento
- `TRACKING-CORRECCIONES.md` sección P2.1-P2.9
---
#### **PASO 5: Resto de ENUMs (P2)**
**Estimado:** Variable, 20-30 horas total
**Estado:** 28 ENUMs pendientes
**Priorizar en orden:**
1. ENUMs de gamification_system (metric_type, aggregation_period, social_event_type)
2. ENUMs de educational_content (exercise_type, cognitive_level, difficulty_level, module_status)
3. ENUMs de auth/social (gamilit_role, user_status, classroom_role, team_role, friendship_status)
4. ENUMs de audit (audit_action, log_level, alert_severity, alert_status)
**Estrategia:** Migrar por grupos temáticos (todos los de un schema en un mismo sprint)
**Referencias:**
- Secciones 2.2.2, 2.2.3, 2.2.4, 2.2.5 de este documento
- `TRACKING-CORRECCIONES.md`
---
### 6.3 Herramientas y Comandos Útiles
#### Verificar ENUMs en BD actual:
```sql
SELECT n.nspname as schema, t.typname as enum_name, e.enumlabel as value
FROM pg_type t
JOIN pg_enum e ON t.oid = e.enumtypid
JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
WHERE n.nspname IN ('public', 'gamification_system', 'educational_content', 'auth_management')
ORDER BY schema, enum_name, e.enumsortorder;
```
#### Ver qué columnas usan un ENUM:
```sql
SELECT
c.table_schema,
c.table_name,
c.column_name,
c.udt_schema,
c.udt_name
FROM information_schema.columns c
WHERE c.udt_name = 'transaction_type'; -- cambiar por ENUM deseado
```
#### Verificar triggers duplicados:
```sql
SELECT schemaname, tablename, trigger_name
FROM information_schema.triggers
WHERE schemaname = 'public'
ORDER BY tablename;
```
#### Ver distribución de valores en columna:
```sql
SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name
ORDER BY COUNT(*) DESC;
```
#### Inventarios automáticos:
```bash
# Regenerar inventarios
cd apps/database/scripts/inventory
./generate-all-inventories.sh
# Ver ENUMs
cat apps/database/docs/inventarios/03-ENUMS-INVENTORY.md
# Ver tablas
cat apps/database/docs/inventarios/02-TABLES-INVENTORY.md
```
---
### 6.4 Puntos de Atención
#### ⚠️ No ejecutar migrations en producción directamente
- Siempre probar en staging primero
- Hacer backup completo antes de cualquier migration
- Validar que post-migration queries no fallen
#### ⚠️ Verificar backend entities después de cambios DDL
- TypeORM entities pueden tener decoradores específicos de schema
- Ejemplo: `@Column({ type: 'enum', enum: NotificationTypeEnum })`
- Si se cambia schema del ENUM, entity debe especificarlo
#### ⚠️ Values en ENUMs son case-sensitive
- PostgreSQL ENUMs distinguen mayúsculas
- Mapeo debe ser exacto
- Ejemplo: `'earned_exercise'``'EARNED_EXERCISE'`
#### ⚠️ ARRAY types requieren conversión especial
- No se puede cambiar `type[]` directamente
- Requiere conversión a text[] intermedia
- Ver sección 5.2 para estrategia
#### ⚠️ CHECK constraints y ENUMs no pueden coexistir
- Si tabla tiene CHECK constraint, eliminarlo al convertir a ENUM
- ENUM ya provee validación type-safe
- No necesitar ambos
---
### 6.5 Métricas de Progreso
**Para tracking continuo:**
Actualizar `TRACKING-CORRECCIONES.md` después de cada corrección:
1. Cambiar estado de [PENDIENTE] a [COMPLETADO] ✅
2. Agregar fecha de corrección
3. Listar archivos modificados
4. Actualizar dashboard de progreso (tabla de %)
5. Actualizar sección de "Métricas de Progreso" semanal
**Formato de actualización:**
```markdown
| P1.1.X | enum_name | public | dest_schema | tabla | [COMPLETADO] ✅ | P1 - Completado YYYY-MM-DD |
```
---
## 7. Checklist de Validación
### Pre-Migration
- [ ] Backup de BD staging
- [ ] Backup de BD producción (si aplica)
- [ ] Leer documentación oficial relacionada
- [ ] Verificar uso actual del ENUM/tabla con queries
- [ ] Identificar funciones/triggers/vistas que usan objeto
- [ ] Notificar al equipo
### Durante Migration
- [ ] Crear branch git: `db/corrections-YYYY-MM-DD-nombre`
- [ ] Migration tiene pre-validación
- [ ] Migration tiene post-validación
- [ ] Migration tiene rollback documentado
- [ ] Testing en staging exitoso
- [ ] Validar datos migrados correctamente
- [ ] No hay valores NULL inesperados
- [ ] Distribución de valores es coherente
### Post-Migration
- [ ] Actualizar DDL files
- [ ] Actualizar backend entities si aplica
- [ ] Actualizar constants si aplica
- [ ] Actualizar TRACKING-CORRECCIONES.md
- [ ] Actualizar _MAP.md si es ENUM
- [ ] Commit con mensaje descriptivo
- [ ] Testing integration/e2e si es posible
- [ ] Deploy a producción (con plan de rollback)
---
## 8. Glosario y Abreviaciones
| Término | Significado |
|---------|-------------|
| DDL | Data Definition Language (CREATE, ALTER, DROP) |
| ENUM | Enumerated Type (tipo de dato con valores fijos) |
| FK | Foreign Key (llave foránea) |
| SIMCO | Sistema Indexado Modular por Contexto |
| P0 | Prioridad 0 - Crítico |
| P1 | Prioridad 1 - Alto |
| P2 | Prioridad 2 - Medio |
| CHECK constraint | Constraint que valida valores con condición SQL |
| RLS | Row Level Security (políticas de seguridad a nivel fila) |
| Migration | Script SQL para evolucionar schema de BD |
| Rollback | Deshacer cambios (revertir migration) |
| Huérfano | ENUM/objeto que no es usado por ninguna tabla |
---
## 9. Contactos y Referencias
### Documentación Oficial (Fuentes de Verdad)
```
docs/02-especificaciones-tecnicas/tipos-compartidos/
├── TYPES-NOTIFICATIONS.md # 11 notification types
├── TYPES-GAMIFICATION.md # MayaRank, Achievements, Transactions (14 types)
└── ...
docs/02-especificaciones-tecnicas/trazabilidad/
└── 05-realtime-notifications.md # Arquitectura notifications
```
### Reportes Generados (Esta Sesión)
```
apps/database/docs/
├── TRACKING-CORRECCIONES.md # Tracking principal (v1.4)
├── REPORTE-VALIDACION-2025-11-07.md
├── REPORTE-CONTRADICCIONES-CRITICAS-2025-11-07.md
├── REPORTE-FUENTE-DE-VERDAD-2025-11-07.md
├── REPORTE-VALIDACION-DUPLICACIONES-2025-11-07.md
├── RESUMEN-EJECUTIVO-SESION-2025-11-07.md
├── ANALISIS-ENUMS-GAMIFICATION-2025-11-07.md
└── MAPA-INCIDENCIAS-BASE-DATOS.md # Este documento
```
### Scripts Útiles
```bash
# Inventarios
apps/database/scripts/inventory/generate-all-inventories.sh
apps/database/scripts/inventory/list-enums.sh
apps/database/scripts/inventory/list-tables.sh
# DDL
apps/database/ddl/00-prerequisites.sql # ENUMs base
# Migrations
apps/database/migrations/2025-11-07-*.sql
```
---
**Documento generado:** 2025-11-07
**Versión:** 1.0
**Para:** Agente especializado en base de datos
**Próxima revisión:** Después de completar Pasos 1-3
**Mantenedor:** Actualizar después de cada corrección
---
**FIN DEL MAPA DE INCIDENCIAS**
Este documento debe ser actualizado cada vez que se complete una corrección para mantener el tracking preciso.