Structure: - control-plane/: Registries, SIMCO directives, CI/CD templates - projects/: Gamilit, ERP-Suite, Trading-Platform, Betting-Analytics - shared/: Libs catalog, knowledge-base Key features: - Centralized port, domain, database, and service registries - 23 SIMCO directives + 6 fundamental principles - NEXUS agent profiles with delegation rules - Validation scripts for workspace integrity - Dockerfiles for all services - Path aliases for quick reference 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
6.9 KiB
Deuda Técnica: ENUMs Sin Uso (H-034)
Fecha: 2025-11-19 Auditoría: DB-124 Hallazgo: H-034 Prioridad: P2 (Mediana) Estado: 📋 DOCUMENTADO (Backlog)
Resumen
Se identificaron 10 ENUMs sin uso en schemas audit_logging y social_features que tienen tablas implementadas, pero las tablas usan tipos primitivos (TEXT/VARCHAR) con CHECK constraints en lugar de ENUMs.
ENUMs Afectados
audit_logging (6 ENUMs - 0% uso)
| ENUM | Valores | Columna Objetivo | Bloqueador |
|---|---|---|---|
audit_action |
create, update, delete, login, logout, access, export, import | audit_logs.action | ✅ YA IMPLEMENTADO |
alert_severity |
info, warning, error, critical | audit_logs.severity, system_alerts.severity | CHECK constraint + índice WHERE |
alert_status |
active, acknowledged, resolved, ignored | system_alerts.status | CHECK constraint + índice WHERE |
log_level |
debug, info, warning, error, critical | system_logs.log_level | - |
metric_type |
engagement, performance, completion, time_spent, accuracy, streak, social_interaction | performance_metrics.metric_type | - |
aggregation_period |
daily, weekly, monthly, quarterly, yearly | (sin columna) | Sin uso planeado |
social_features (4 ENUMs - 25% uso)
| ENUM | Valores | Columna Objetivo | Bloqueador |
|---|---|---|---|
classroom_role |
teacher, student, assistant | teacher_classrooms.role | ✅ YA IMPLEMENTADO |
team_role |
leader, member, coordinator | team_members.role | ✅ YA IMPLEMENTADO |
friendship_status |
pending, accepted, blocked | friendships.status | Policy RLS |
social_event_type |
competition, collaboration, challenge, tournament, workshop | social_interactions.interaction_type | Requiere análisis |
Total: 10 ENUMs (3 implementados, 7 pendientes)
Problema Técnico
Las tablas usan CHECK constraints en lugar de ENUMs:
-- Ejemplo: system_alerts
ALTER TABLE audit_logging.system_alerts
ADD CONSTRAINT system_alerts_severity_check
CHECK (severity = ANY (ARRAY['low'::text, 'medium'::text, 'high'::text, 'critical'::text]));
ALTER TABLE audit_logging.system_alerts
ADD CONSTRAINT system_alerts_status_check
CHECK (status = ANY (ARRAY['open'::text, 'acknowledged'::text, 'resolved'::text, 'suppressed'::text]));
Además, hay índices con predicados TEXT:
CREATE INDEX idx_alerts_open
ON audit_logging.system_alerts(status, severity)
WHERE status = 'open'::text;
Impacto de migración:
- Requiere DROP constraints (6+ constraints)
- Requiere DROP/CREATE índices con predicados
- Requiere ALTER TYPE con trigger deshabilitado
- Requiere recrear constraints con ENUM values
- ~60-90 minutos de trabajo
Razón de NO Implementación Inmediata
- Tablas vacías: audit_logging tiene 0 registros, social_features solo 5 registros
- Bajo ROI: Trabajo extenso para beneficio mínimo en entorno actual
- CHECK constraints suficientes: Validan datos correctamente
- Índices funcionales: Funcionan correctamente con TEXT
Decisión
Mantener ENUMs definidos y documentar como deuda técnica para refactorización futura.
Razones:
- Los ENUMs ya existen y no causan problemas
- Si en futuro se decide refactorizar, ya están definidos
- Eliminarlos y recrearlos después sería trabajo adicional
Plan de Refactorización Futura
Cuándo ejecutar
Ejecutar cuando se cumpla cualquiera de estas condiciones:
- Alta carga de datos: Tablas superan 10,000 registros
- Performance crítica: Queries de audit_logging/social_features son >10% de carga total
- Migración mayor: Se planea refactorización de schemas completos
- Nuevo proyecto: Se implementa auditoría/social features desde cero
Pasos de migración (CUANDO se ejecute)
-- 1. Desactivar triggers
ALTER TABLE audit_logging.system_alerts DISABLE TRIGGER ALL;
-- 2. DROP CHECK constraints
ALTER TABLE audit_logging.system_alerts
DROP CONSTRAINT system_alerts_severity_check,
DROP CONSTRAINT system_alerts_status_check;
-- 3. DROP índices con predicados TEXT
DROP INDEX audit_logging.idx_alerts_open;
-- 4. ALTER columnas a ENUM
ALTER TABLE audit_logging.system_alerts
ALTER COLUMN severity TYPE audit_logging.alert_severity
USING severity::audit_logging.alert_severity,
ALTER COLUMN status TYPE audit_logging.alert_status
USING CASE
WHEN status = 'open' THEN 'active'::audit_logging.alert_status
WHEN status::text = ANY(ARRAY['active', 'acknowledged', 'resolved', 'ignored'])
THEN status::audit_logging.alert_status
ELSE 'active'::audit_logging.alert_status
END;
-- 5. RECREAR índices con ENUM
CREATE INDEX idx_alerts_open
ON audit_logging.system_alerts(status, severity)
WHERE status = 'active'::audit_logging.alert_status;
-- 6. Reactivar triggers
ALTER TABLE audit_logging.system_alerts ENABLE TRIGGER ALL;
Repetir para todas las tablas afectadas.
Tiempo estimado (cuando se ejecute)
- Análisis de datos existentes: 30 min
- Migración de 6+ tablas: 60-90 min
- Testing: 30 min
- Total: 2-2.5 horas
Beneficios de Migración Futura
- Validación a nivel BD: Imposible insertar valores inválidos
- Performance: Índices más eficientes con ENUMs
- Autocomplete: Herramientas de BD muestran valores permitidos
- Menor storage: ENUMs usan menos espacio que TEXT
- Type safety: APIs y ORMs detectan errores en compile-time
Estado Actual
Implementado:
- ✅ audit_logs.action → audit_action ENUM
- ✅ teacher_classrooms.role → classroom_role ENUM
- ✅ team_members.role → team_role ENUM
Pendiente (backlog):
- ⏳ audit_logs.severity → alert_severity ENUM
- ⏳ system_alerts.severity → alert_severity ENUM
- ⏳ system_alerts.status → alert_status ENUM
- ⏳ system_logs.log_level → log_level ENUM
- ⏳ performance_metrics.metric_type → metric_type ENUM
- ⏳ friendships.status → friendship_status ENUM
- ⏳ social_interactions.interaction_type → social_event_type ENUM (requiere análisis)
Sin uso planeado:
- ❌ aggregation_period → (eliminar si no se usa en 6 meses)
Referencias
- Auditoría: orchestration/database/DB-124/
- Hallazgo: H-034
- Scripts parciales:
ddl/schemas/_migrations/01-implement-enums-audit-social.sql(v1 - fallida)ddl/schemas/_migrations/02-implement-enums-audit-social-v2.sql(v2 - parcial)
- Documentación: Este archivo
Revisión
Próxima revisión: 2025-05 (6 meses) Criterio de cierre:
- Opción A: Migración completa ejecutada
- Opción B: Se decide eliminar ENUMs sin uso si no hay plan de implementación
Responsable: Database Agent Estado: 📋 BACKLOG (Deuda Técnica Documentada)