trading-platform/orchestration/tareas/TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD/analisis/PLAN-FASES-DETALLADO.yml
Adrian Flores Cortes b9098ca91c [TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD] docs: Complete 6-phase database modeling analysis
Comprehensive analysis of 101 DDL tables across 11 schemas:
- Phase 1-2: Schema validation, 37 gaps cataloged (3 resolved)
- Phase 3: Integrity audit (80 FKs, 89 CHECKs, 17 issues: 2 CRIT/5 HIGH)
- Phase 4: DDL-Backend mapping (84% interfaces, 75% services, 61% controllers)
- Phase 5: Documentation purge catalog (201 files analyzed)
- Phase 6: Remediation plan (4 sprints, 204h)

Key finding: Backend uses raw SQL + pg Pool (NOT TypeORM).
13 deliverables + updated inventories to v2.0.0.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 16:48:45 -06:00

778 lines
23 KiB
YAML

# ═══════════════════════════════════════════════════════════════
# 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"]