# ═══════════════════════════════════════════════════════════════ # PLAN-FASES-DETALLADO.yml # Trading Platform - Validacion Integral Modelado BD # ═══════════════════════════════════════════════════════════════ version: "1.0.0" fecha: "2026-02-05" tarea: "TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD" metodologia: CAPVED # ═══════════════════════════════════════════════════════════════ # FASE 1: ANALISIS Y PLANIFICACION (COMPLETADA) # ═══════════════════════════════════════════════════════════════ fase_1: id: "FASE-1" nombre: "Analisis y Planificacion" estado: COMPLETADA fecha_inicio: "2026-02-05" fecha_fin: "2026-02-05" entregables: - "ANALISIS-MAESTRO.md" - "PLAN-FASES-DETALLADO.yml (este archivo)" - "GAPS-CONSOLIDADO.yml" resumen: schemas_analizados: 11 tablas_identificadas: 100 tablas_no_documentadas: 19 errores_criticos: 1 conflictos_enum: 3 relaciones_debiles: 4 duplicaciones: 1 # ═══════════════════════════════════════════════════════════════ # FASE 2: VALIDACION DE ESQUEMAS Y OBJETOS DDL # ═══════════════════════════════════════════════════════════════ fase_2: id: "FASE-2" nombre: "Validacion de Esquemas y Objetos DDL" estado: PENDING esfuerzo_total: "30h" esfuerzo_paralelo: "12h" dependencias: ["FASE-1"] subtarea_2_1: id: "ST-2.1" nombre: "Correccion de Errores Criticos DDL" prioridad: P0 esfuerzo: "1h" paralelizable: false dependencias: [] capved: contexto: "price_alerts.sql tiene FK que referencia auth.user_profiles(id) en lugar de auth.users(id)" analisis: "Error en linea 15 de 11-price_alerts.sql impide creacion de tabla" planificacion: "Modificar referencia FK, recrear BD en WSL para verificar" ejecucion: "Editar archivo SQL" validacion: "Ejecutar DDL completo, verificar tabla se crea sin errores" documentacion: "Registrar correccion en changelog de la tarea" tareas: - id: "2.1.1" nombre: "Corregir FK price_alerts" archivo: "apps/database/ddl/schemas/trading/tables/11-price_alerts.sql" accion: "Cambiar auth.user_profiles(id) -> auth.users(id)" esfuerzo: "0.5h" prioridad: P0 dependencias: [] - id: "2.1.2" nombre: "Verificar creacion tabla post-correccion" accion: "Ejecutar DDL en WSL, verificar tabla creada" esfuerzo: "0.5h" prioridad: P0 dependencias: ["2.1.1"] subtarea_2_2: id: "ST-2.2" nombre: "Validacion Schema por Schema" prioridad: P1 esfuerzo: "19.5h" paralelizable: true dependencias: ["ST-2.1"] capved_template: contexto: "Schema {name} tiene {ddl_count} tablas DDL, {inv_count} documentadas" analisis: "Leer cada SQL, comparar con DATABASE_INVENTORY.yml" planificacion: "Crear entradas para tablas faltantes en inventario" ejecucion: "Actualizar DATABASE_INVENTORY.yml" validacion: "Verificar coherencia post-actualizacion" documentacion: "Registrar cambios" tareas: - id: "2.2.1" nombre: "Validar schema auth" schema: auth tablas_ddl: 13 tablas_inventario: 10 gap: 3 tablas_faltantes: ["notifications", "user_push_tokens", "rate_limiting_config"] esfuerzo: "2h" paralelizable: true - id: "2.2.2" nombre: "Validar schema trading" schema: trading tablas_ddl: 13 tablas_inventario: 11 gap: 2 tablas_faltantes: ["drawing_tools", "drawing_templates"] esfuerzo: "2h" paralelizable: true - id: "2.2.3" nombre: "Validar schema education" schema: education tablas_ddl: 19 tablas_inventario: 12 gap: 7 tablas_faltantes: - "instructors" - "course_tags" - "course_tag_assignments" - "review_helpful_votes" - "user_activity_log" - "course_reviews" - "progress" esfuerzo: "4h" paralelizable: true nota: "Schema con peor coherencia (63%)" - id: "2.2.4" nombre: "Validar schema financial" schema: financial tablas_ddl: 11 tablas_inventario: 9 gap: 2 tablas_faltantes: ["refunds", "currency_exchange_rates"] esfuerzo: "2h" paralelizable: true - id: "2.2.5" nombre: "Validar schema investment" schema: investment tablas_ddl: 10 tablas_inventario: 8 gap: 2 tablas_faltantes: ["agent_executions", "risk_questionnaire"] esfuerzo: "2h" paralelizable: true - id: "2.2.6" nombre: "Validar schema ml" schema: ml tablas_ddl: 12 tablas_inventario: 10 gap: 2 tablas_faltantes: ["llm_signals", "prediction_overlays"] esfuerzo: "2h" paralelizable: true - id: "2.2.7" nombre: "Validar schema llm" schema: llm tablas_ddl: 5 tablas_inventario: 4 gap: 1 tablas_faltantes: ["user_preferences"] esfuerzo: "1h" paralelizable: true - id: "2.2.8" nombre: "Validar schema audit" schema: audit tablas_ddl: 7 tablas_inventario: 7 gap: 0 esfuerzo: "0.5h" paralelizable: true nota: "Ya 100% documentado, solo verificar" - id: "2.2.9" nombre: "Validar schema portfolio" schema: portfolio tablas_ddl: 5 tablas_inventario: 4 gap: 1 tablas_faltantes: ["portfolio_snapshots"] esfuerzo: "1h" paralelizable: true - id: "2.2.10" nombre: "Validar schema market_data" schema: market_data tablas_ddl: 4 tablas_inventario: 3 gap: 1 tablas_faltantes: ["staging"] esfuerzo: "1h" paralelizable: true - id: "2.2.11" nombre: "Validar schema feature_flags" schema: feature_flags tablas_ddl: 1 tablas_inventario: 0 gap: 1 tablas_faltantes: ["flags"] esfuerzo: "2h" paralelizable: true nota: "Schema completo sin documentar - peor caso (0%)" subtarea_2_3: id: "ST-2.3" nombre: "Resolucion de Conflictos de Enums" prioridad: P1 esfuerzo: "5h" paralelizable: false dependencias: ["ST-2.2"] tareas: - id: "2.3.1" nombre: "Resolver CONF-E1: transaction_type duplicado" conflicto: "financial.transaction_type vs investment.transaction_type" accion: "Verificar migracion existe, crear si falta" resolucion: "Renombrar a wallet_transaction_type / investment_transaction_type" esfuerzo: "2h" dependencias: ["2.2.4", "2.2.5"] - id: "2.3.2" nombre: "Resolver CONF-E2: risk_profile duplicado" conflicto: "investment.risk_profile vs portfolio.risk_profile" accion: "Crear migracion para consolidar" resolucion: "Mover a public.risk_profile" esfuerzo: "2h" dependencias: ["2.2.5", "2.2.9"] - id: "2.3.3" nombre: "Resolver CONF-E3: timeframe incompleto" conflicto: "market_data.timeframe falta valor '1M'" accion: "Agregar '1M' a market_data, completar migracion a public" resolucion: "Eliminar enums deprecados trading/market_data" esfuerzo: "1h" dependencias: ["2.2.10"] subtarea_2_4: id: "ST-2.4" nombre: "Resolucion de Duplicaciones Funcionales" prioridad: P1 esfuerzo: "4h" paralelizable: false dependencias: ["ST-2.2"] tareas: - id: "2.4.1" nombre: "Analizar consolidacion trading.symbols vs market_data.tickers" conflicto: "DUP-1: Catalogo de simbolos duplicado" accion: "Analizar campos, proponer plan de consolidacion" resolucion: "Plan de migracion con FK de market_data -> trading.symbols" esfuerzo: "4h" dependencias: ["2.2.2", "2.2.10"] entregable: "PLAN-CONSOLIDACION-SYMBOLS.md" # ═══════════════════════════════════════════════════════════════ # FASE 3: AUDITORIA DE INTEGRIDAD Y COHERENCIA # ═══════════════════════════════════════════════════════════════ fase_3: id: "FASE-3" nombre: "Auditoria de Integridad y Coherencia" estado: PENDING esfuerzo_total: "37h" esfuerzo_paralelo: "18h" dependencias: ["FASE-2"] subtarea_3_1: id: "ST-3.1" nombre: "Validacion de Foreign Keys" prioridad: P1 esfuerzo: "11h" paralelizable: true dependencias: ["ST-2.1", "ST-2.2"] tareas: - id: "3.1.1" nombre: "Validar FKs schema auth" scope: "auth -> auth (internal)" tablas: 13 esfuerzo: "1h" paralelizable: true - id: "3.1.2" nombre: "Validar FKs schema trading" scope: "trading -> auth, trading.symbols" tablas: 13 esfuerzo: "1.5h" paralelizable: true - id: "3.1.3" nombre: "Validar FKs schema education" scope: "education -> auth, education (internal)" tablas: 19 esfuerzo: "2h" paralelizable: true - id: "3.1.4" nombre: "Validar FKs schema financial" scope: "financial -> auth, financial (internal)" tablas: 11 esfuerzo: "1.5h" paralelizable: true - id: "3.1.5" nombre: "Validar FKs schema investment" scope: "investment -> auth, investment (internal)" tablas: 10 esfuerzo: "1h" paralelizable: true - id: "3.1.6" nombre: "Validar FKs schemas menores" scope: "ml, llm, portfolio, audit, market_data, feature_flags" tablas: 29 esfuerzo: "2h" paralelizable: true - id: "3.1.7" nombre: "Documentar relaciones faltantes (WEAK-1 a WEAK-4)" scope: "Cross-schema relationships" accion: "Proponer nuevas FKs o documentar decision de no vincular" esfuerzo: "2h" dependencias: ["3.1.1", "3.1.2", "3.1.3", "3.1.4", "3.1.5", "3.1.6"] entregable: "FK-VALIDATION-MATRIX.yml" subtarea_3_2: id: "ST-3.2" nombre: "Validacion de Indices" prioridad: P2 esfuerzo: "6h" dependencias: ["ST-3.1"] tareas: - id: "3.2.1" nombre: "Inventariar todos los indices" esfuerzo: "3h" entregable: "INDEX-INVENTORY.yml" - id: "3.2.2" nombre: "Identificar queries criticas sin indice" esfuerzo: "2h" - id: "3.2.3" nombre: "Proponer indices faltantes" esfuerzo: "1h" entregable: "MISSING-INDEXES.yml" subtarea_3_3: id: "ST-3.3" nombre: "Validacion de Constraints" prioridad: P2 esfuerzo: "6h" paralelizable: true dependencias: ["ST-2.2"] tareas: - id: "3.3.1" nombre: "Validar CHECK constraints" esfuerzo: "3h" - id: "3.3.2" nombre: "Validar UNIQUE constraints" esfuerzo: "1h" - id: "3.3.3" nombre: "Validar NOT NULL criticos" esfuerzo: "1h" - id: "3.3.4" nombre: "Validar DEFAULT values" esfuerzo: "1h" subtarea_3_4: id: "ST-3.4" nombre: "Validacion de Funciones y Triggers" prioridad: P2 esfuerzo: "6h" dependencias: ["ST-2.2"] tareas: - id: "3.4.1" nombre: "Inventariar 17+ funciones" esfuerzo: "2h" entregable: "FUNCTIONS-INVENTORY.yml" - id: "3.4.2" nombre: "Validar funciones en triggers" esfuerzo: "1h" - id: "3.4.3" nombre: "Identificar funciones huerfanas" esfuerzo: "1h" - id: "3.4.4" nombre: "Validar triggers updated_at" esfuerzo: "1h" - id: "3.4.5" nombre: "Validar triggers auditoria" esfuerzo: "1h" subtarea_3_5: id: "ST-3.5" nombre: "Validacion de Relaciones Inter-Schema" prioridad: P1 esfuerzo: "8h" dependencias: ["ST-3.1"] tareas: - id: "3.5.1" nombre: "Mapear dependencias auth -> todos" esfuerzo: "2h" - id: "3.5.2" nombre: "Identificar ciclos de dependencia" esfuerzo: "1h" - id: "3.5.3" nombre: "Validar ON DELETE behavior" esfuerzo: "2h" nota: "financial.wallets usa RESTRICT, revisar implicaciones" - id: "3.5.4" nombre: "Documentar diagrama ER inter-schema" esfuerzo: "3h" entregable: "ER-DIAGRAM-INTER-SCHEMA.md" # ═══════════════════════════════════════════════════════════════ # FASE 4: COHERENCIA DDL-BACKEND # ═══════════════════════════════════════════════════════════════ fase_4: id: "FASE-4" nombre: "Coherencia DDL-Backend" estado: PENDING esfuerzo_total: "45.5h" esfuerzo_paralelo: "20h" dependencias: ["FASE-2"] subtarea_4_1: id: "ST-4.1" nombre: "Mapeo Tablas -> Entities" prioridad: P1 esfuerzo: "16.5h" paralelizable: true tareas: - id: "4.1.1" schema: auth tablas: 13 entities_existentes: 10 gap: 3 esfuerzo: "2h" - id: "4.1.2" schema: trading tablas: 13 entities_existentes: 10 gap: 3 esfuerzo: "2h" - id: "4.1.3" schema: education tablas: 19 entities_existentes: 12 gap: 7 esfuerzo: "3h" - id: "4.1.4" schema: financial tablas: 11 entities_existentes: 9 gap: 2 esfuerzo: "1.5h" - id: "4.1.5" schema: investment tablas: 10 entities_existentes: 7 gap: 3 esfuerzo: "1.5h" - id: "4.1.6" schema: ml tablas: 12 entities_existentes: 10 gap: 2 esfuerzo: "1h" - id: "4.1.7" schema: llm tablas: 5 entities_existentes: 4 gap: 1 esfuerzo: "0.5h" - id: "4.1.8" schema: portfolio tablas: 5 entities_existentes: 3 gap: 2 esfuerzo: "1h" - id: "4.1.9" schema: market_data tablas: 4 entities_existentes: 1 gap: 3 esfuerzo: "1.5h" - id: "4.1.10" schema: audit tablas: 7 entities_existentes: 0 gap: 7 esfuerzo: "2h" - id: "4.1.11" schema: feature_flags tablas: 1 entities_existentes: 0 gap: 1 esfuerzo: "0.5h" subtarea_4_2: id: "ST-4.2" nombre: "Mapeo Entities -> Services" prioridad: P1 esfuerzo: "6h" dependencias: ["ST-4.1"] subtarea_4_3: id: "ST-4.3" nombre: "Mapeo Services -> Controllers" prioridad: P1 esfuerzo: "4h" dependencias: ["ST-4.2"] subtarea_4_4: id: "ST-4.4" nombre: "Consolidacion de Gaps Backend" prioridad: P1 esfuerzo: "7h" dependencias: ["ST-4.3"] entregable: "BACKEND-GAPS-MATRIX.yml" subtarea_4_5: id: "ST-4.5" nombre: "Plan de Entities Faltantes" prioridad: P2 esfuerzo: "12h" dependencias: ["ST-4.4"] entregable: "ENTITIES-CREATION-PLAN.yml" # ═══════════════════════════════════════════════════════════════ # FASE 5: PURGA Y REORGANIZACION DOCUMENTAL # ═══════════════════════════════════════════════════════════════ fase_5: id: "FASE-5" nombre: "Purga y Reorganizacion Documental" estado: PENDING esfuerzo_total: "38.75h" esfuerzo_paralelo: "15h" dependencias: ["FASE-2", "FASE-4"] subtarea_5_1: id: "ST-5.1" nombre: "Purgar Documentacion Obsoleta" prioridad: P2 esfuerzo: "3.25h" archivos_a_purgar: - path: "docs/_archive/04-fase-backlog/" accion: "ELIMINAR" razon: "Links rotos, deprecado" - path: "docs/_archive/00-notas/NOTA-DISCREPANCIA-PUERTOS-2025-12-08.md" accion: "ELIMINAR" razon: "Resuelto 2026-01-07" - path: "orchestration/analisis/coherencia/COHERENCE-BASELINE-2026-01-28.md" accion: "MOVER a _archive" razon: "Superseded por version actual" - path: "orchestration/tareas/2026-01-25/" accion: "VERIFICAR y ARCHIVAR" razon: "Carpeta fecha antigua" - path: "orchestration/tareas/2026-01-27/" accion: "VERIFICAR y ARCHIVAR" razon: "Carpeta fecha antigua" subtarea_5_2: id: "ST-5.2" nombre: "Integrar Definiciones Faltantes" prioridad: P1 esfuerzo: "15h" paralelizable: true definiciones: - id: "5.2.1" tipo: "ET + RF" contenido: "feature_flags schema" modulo: "Transversal" esfuerzo: "3h" - id: "5.2.2" tipo: "ET + US" contenido: "drawing_tools y drawing_templates" modulo: "OQI-003" esfuerzo: "2h" - id: "5.2.3" tipo: "US + RF" contenido: "price_alerts" modulo: "OQI-003" esfuerzo: "2h" - id: "5.2.4" tipo: "ET + US + RF" contenido: "refunds y currency_exchange" modulo: "OQI-005" esfuerzo: "2h" - id: "5.2.5" tipo: "ET + US" contenido: "course_tags e instructors" modulo: "OQI-002" esfuerzo: "2h" - id: "5.2.6" tipo: "ET + US" contenido: "agent_executions" modulo: "OQI-004" esfuerzo: "2h" - id: "5.2.7" tipo: "ET" contenido: "prediction_overlays y llm_signals" modulo: "OQI-006" esfuerzo: "1h" - id: "5.2.8" tipo: "ET" contenido: "portfolio_snapshots" modulo: "OQI-008" esfuerzo: "1h" subtarea_5_3: id: "ST-5.3" nombre: "Actualizar Inventarios" prioridad: P1 esfuerzo: "10h" dependencias: ["ST-2.2", "ST-4.4"] inventarios: - id: "5.3.1" archivo: "DATABASE_INVENTORY.yml" accion: "Actualizar 81 -> 100 tablas, agregar feature_flags schema" esfuerzo: "3h" - id: "5.3.2" archivo: "BACKEND_INVENTORY.yml" accion: "Actualizar con gaps de Fase 4" esfuerzo: "2h" - id: "5.3.3" archivo: "MASTER_INVENTORY.yml" accion: "Sincronizar totales" esfuerzo: "1h" - id: "5.3.4" archivo: "DDL-COMPLETE-MATRIX.yml" accion: "Actualizar 93 -> 100 tablas" esfuerzo: "2h" - id: "5.3.5" archivo: "GAPS-TRACKING.yml" accion: "Agregar gaps nuevos identificados" esfuerzo: "2h" subtarea_5_4: id: "ST-5.4" nombre: "Actualizar Documentacion de Modulos OQI" prioridad: P2 esfuerzo: "10.5h" paralelizable: true dependencias: ["ST-5.2"] # ═══════════════════════════════════════════════════════════════ # FASE 6: PLAN MAESTRO DE REMEDIACION # ═══════════════════════════════════════════════════════════════ fase_6: id: "FASE-6" nombre: "Plan Maestro de Remediacion" estado: PENDING esfuerzo_total: "22.5h" dependencias: ["FASE-3", "FASE-4", "FASE-5"] subtarea_6_1: id: "ST-6.1" nombre: "Priorizar Acciones por Impacto" esfuerzo: "5h" subtarea_6_2: id: "ST-6.2" nombre: "Definir Orden de Ejecucion con Dependencias" esfuerzo: "6h" subtarea_6_3: id: "ST-6.3" nombre: "Estimar Esfuerzo por Subtarea" esfuerzo: "3.5h" subtarea_6_4: id: "ST-6.4" nombre: "Generar Roadmap Actualizado" esfuerzo: "8h" entregables: - "ROADMAP-MODELADO-ACTUALIZADO.yml" - "EXECUTION-PLAN-MODELADO.yml" - "REMEDIATION-CHECKLIST.md" # ═══════════════════════════════════════════════════════════════ # RESUMEN EJECUTIVO # ═══════════════════════════════════════════════════════════════ resumen: total_fases: 6 total_subtareas: 24 total_tareas_atomicas: 68 esfuerzo_secuencial: "173.75h" esfuerzo_paralelo_estimado: "87.5h" orden_ejecucion: inmediato: - "2.1.1: Corregir FK price_alerts (P0)" urgente: - "2.2.1-2.2.11: Documentar tablas faltantes" - "2.3.1-2.3.3: Resolver conflictos enums" - "5.3.1: Actualizar DATABASE_INVENTORY.yml" importante: - "3.1.1-3.1.7: Validar FKs" - "4.1.1-4.1.11: Mapeo tablas -> entities" - "5.1.1-5.1.5: Purgar docs obsoletas" planificado: - "3.2-3.5: Indices, constraints, funciones" - "4.2-4.5: Mapeo completo backend" - "5.2-5.4: Integrar definiciones faltantes" - "6.1-6.4: Plan maestro remediacion" subagentes_recomendados: - id: "SA-DDL-1" rol: "Validador DDL Auth+Trading" tareas: ["2.2.1", "2.2.2", "3.1.1", "3.1.2"] - id: "SA-DDL-2" rol: "Validador DDL Education+Financial" tareas: ["2.2.3", "2.2.4", "3.1.3", "3.1.4"] - id: "SA-DDL-3" rol: "Validador DDL Investment+ML+Rest" tareas: ["2.2.5", "2.2.6", "2.2.7", "2.2.8", "2.2.9", "2.2.10", "2.2.11"] - id: "SA-BACKEND-1" rol: "Mapper Backend Auth+Trading+Education" tareas: ["4.1.1", "4.1.2", "4.1.3"] - id: "SA-BACKEND-2" rol: "Mapper Backend Financial+Investment+Rest" tareas: ["4.1.4", "4.1.5", "4.1.6", "4.1.7", "4.1.8", "4.1.9", "4.1.10", "4.1.11"] - id: "SA-DOCS-1" rol: "Documentador/Purga" tareas: ["5.1.1", "5.1.2", "5.1.3", "5.2.1", "5.2.2", "5.2.3", "5.2.4", "5.2.5", "5.2.6", "5.2.7", "5.2.8"]