Cambios incluidos: - INDICE-DIRECTIVAS-WORKSPACE.yml actualizado - Perfiles de agentes: PERFIL-ML.md, PERFIL-SECURITY.md - Directivas SIMCO actualizadas: - SIMCO-ASIGNACION-PERFILES.md - SIMCO-CCA-SUBAGENTE.md - SIMCO-CONTEXT-ENGINEERING.md - SIMCO-CONTEXT-RESOLUTION.md - SIMCO-DELEGACION-PARALELA.md - Inventarios actualizados: DEVENV-MASTER, DEVENV-PORTS - Documentos de analisis agregados: - Analisis y planes de fix student portal - Analisis scripts BD - Analisis achievements, duplicados, gamification - Auditoria documentacion gamilit - Backlog discrepancias NEXUS - Planes maestros de resolucion - Reportes de ejecucion agregados - Knowledge base gamilit README actualizado - Referencia submodulo gamilit actualizada (commit beb94f7) Validaciones: - Plan validado contra directivas SIMCO-GIT - Dependencias verificadas - Build gamilit: EXITOSO
6.2 KiB
ANALISIS DE TABLAS DE AUDITORIA
Proyecto GAMILIT - Fase B1
Fecha: 2026-01-07 Estado: ANALISIS COMPLETADO
RESUMEN EJECUTIVO
| Metrica | Valor |
|---|---|
| Tablas analizadas | 8 |
| Tablas con solapamiento critico | 3 |
| Tablas a mantener separadas | 3 |
| Tabla deprecated | 1 |
| Reduccion propuesta | 37.5% (8 -> 5) |
LAS 8 TABLAS ANALIZADAS
| # | Tabla | Proposito | Lineas | Estado |
|---|---|---|---|---|
| 1 | audit_logs | Auditoria completa de acciones | 124 | Activa |
| 2 | performance_metrics | Metricas de rendimiento | 102 | Activa |
| 3 | system_alerts | Alertas del sistema | 131 | Activa |
| 4 | system_logs | Logs del sistema | 115 | Activa |
| 5 | user_activity_logs | Analytics de usuarios (educativo) | 119 | Activa |
| 6 | activity_log | Admin dashboard | 219 | Activa |
| 7 | user_activity | Actividad simplificada | 43 | DEPRECATED |
| 8 | pending_user_initialization | Retry de inicializacion | 136 | Activa |
SOLAPAMIENTOS IDENTIFICADOS
CRITICO: user_activity (DEPRECATED)
Problema: Tabla user_activity duplica exactamente la funcionalidad de activity_log
| Aspecto | user_activity | activity_log |
|---|---|---|
| Columnas | 8 | 10 |
| Proposito | Activity logging | Activity logging |
| Estado | DEPRECATED | Activa |
| Referencias backend | 13+ | Principal |
Recomendacion: ELIMINAR user_activity, migrar referencias a activity_log
ALTO: audit_logs + system_logs
Solapamiento: 70%
| Columna Compartida | audit_logs | system_logs |
|---|---|---|
| tenant_id | Si | Si |
| actor/user_id | Si | Si |
| request_id | Si | Si |
| correlation_id | Si | Si |
| error_code | Si | Si |
| error_message | Si | Si |
| stack_trace | Si | Si |
| timestamps | Si | Si |
Diferencias:
audit_logs: old_values, new_values, changes (cambios de datos)system_logs: line_number, execution_time_ms, memory_usage (ejecucion)
Recomendacion: Consolidar en audit_logs_unified con campo discriminador
MEDIO: user_activity_logs + activity_log
Solapamiento: 60%
| Columna Compartida | user_activity_logs | activity_log |
|---|---|---|
| user_id | Si | Si |
| activity/action_type | Si | Si |
| description | Si | Si |
| metadata | Si | Si |
| ip_address | Si | Si |
| user_agent | Si | Si |
Diferencias:
user_activity_logs: module_id, exercise_id, classroom_id (educativo)activity_log: entity_type, entity_id (generico)
Recomendacion: Consolidar en user_event_log con JSONB flexible
TABLAS A MANTENER SEPARADAS
| Tabla | Razon |
|---|---|
| performance_metrics | Datos operacionales (time-series), no eventos |
| system_alerts | Logica especifica (escalamiento, resolucion) |
| pending_user_initialization | Proposito muy especifico (retry mechanism) |
OPCIONES DE CONSOLIDACION
Opcion A: Conservadora (Recomendada para inicio)
Acciones:
- Eliminar
user_activity(deprecated) - Mantener resto de tablas
- Planificar consolidacion futura
Esfuerzo: 5-10 horas Riesgo: Bajo
Opcion B: Moderada (Recomendada a mediano plazo)
Acciones:
- Eliminar
user_activity - Crear
audit_logs_unified(audit_logs + system_logs) - Crear
user_event_log(user_activity_logs + activity_log)
Tablas finales: 5 (reduccion 37.5%) Esfuerzo: 25-30 horas Riesgo: Medio
Opcion C: Agresiva (No recomendada)
Acciones:
- Consolidar todas en 2 tablas
- Migracion masiva de datos
Esfuerzo: 40-60 horas Riesgo: Alto
PLAN DE ACCION RECOMENDADO
Fase Inmediata (Esta semana)
Tarea B1.1: Eliminar tabla user_activity (deprecated)
Pasos:
- Auditar 13+ referencias en backend
- Actualizar imports a
activity_log - Ejecutar tests
- DROP TABLE
Esfuerzo: 4-6 horas Riesgo: Bajo (tabla ya deprecated)
Fase Posterior (Siguiente sprint)
Tarea B1.2: Consolidar audit_logs + system_logs
Pasos:
- Crear tabla
audit_logs_unified - Migrar datos historicos
- Actualizar aplicacion
- Validar y DROP antiguas
Esfuerzo: 15-20 horas Riesgo: Medio
ESTRUCTURA PROPUESTA: audit_logs_unified
CREATE TABLE audit_logging.audit_logs_unified (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL,
-- Discriminador
log_source VARCHAR(20) NOT NULL, -- 'audit' | 'application' | 'system'
-- Clasificacion
event_type TEXT NOT NULL,
log_level VARCHAR(20), -- TRACE/DEBUG/INFO/WARN/ERROR/FATAL
severity VARCHAR(20), -- debug/info/warning/error/critical
-- Actor
actor_id UUID,
actor_type VARCHAR(20) DEFAULT 'system',
actor_ip INET,
actor_user_agent TEXT,
session_id TEXT,
-- Tracking
request_id TEXT,
correlation_id TEXT,
-- Contexto
module_name TEXT,
function_name TEXT,
resource_type TEXT,
resource_id UUID,
-- Cambios (para audit)
old_values JSONB,
new_values JSONB,
-- Descripcion
message TEXT,
description TEXT,
-- Errores
error_code TEXT,
error_message TEXT,
stack_trace TEXT,
-- Datos flexibles
metadata JSONB DEFAULT '{}',
-- Status
status VARCHAR(20),
-- Timestamp
created_at TIMESTAMPTZ DEFAULT gamilit.now_mexico(),
CONSTRAINT log_source_check CHECK (log_source IN ('audit', 'application', 'system'))
);
-- Indices
CREATE INDEX idx_audit_unified_created ON audit_logging.audit_logs_unified(created_at DESC);
CREATE INDEX idx_audit_unified_source ON audit_logging.audit_logs_unified(log_source);
CREATE INDEX idx_audit_unified_tenant ON audit_logging.audit_logs_unified(tenant_id);
CREATE INDEX idx_audit_unified_actor ON audit_logging.audit_logs_unified(actor_id) WHERE actor_id IS NOT NULL;
CREATE INDEX idx_audit_unified_errors ON audit_logging.audit_logs_unified(log_level, created_at DESC)
WHERE log_level IN ('ERROR', 'FATAL');
CONCLUSION
Recomendacion: Comenzar con Opcion A (eliminar deprecated) y planificar Opcion B para siguiente sprint.
Siguiente paso: Auditar referencias de user_activity en backend para preparar eliminacion.
Documento generado: 2026-01-07 Responsable: Arquitecto de Datos