trading-platform/orchestration/tareas/TASK-2026-02-04-ANALISIS-PLANIFICACION-INTEGRAL/03-PLANIFICACION.md
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

17 KiB

03-PLANIFICACION - Análisis y Planeación Integral

Tarea: TASK-2026-02-04-ANALISIS-PLANIFICACION-INTEGRAL Fase: P (Planificación) Estado: EN PROGRESO Fecha: 2026-02-04 Agente: Claude Code (Opus 4.5)


1. ESTRUCTURA DEL PLAN MAESTRO

1.1 Organización Jerárquica

PLAN-MAESTRO-TRADING-PLATFORM-2026-Q1
│
├── FASE-0: PREPARACIÓN (8h)
│   ├── SUBTAREA-0.1: Purga documentación obsoleta
│   ├── SUBTAREA-0.2: Sincronización inventarios
│   └── SUBTAREA-0.3: Actualización PROJECT-STATUS
│
├── FASE-1: DDL GAPS (16h)
│   ├── SUBTAREA-1.1: education.instructors table
│   ├── SUBTAREA-1.2: education.course_tags field
│   ├── SUBTAREA-1.3: trading.price_alerts table
│   └── SUBTAREA-1.4: Validación DDL post-cambios
│
├── FASE-2: BACKEND SERVICES (48h)
│   ├── SUBTAREA-2.1: Market Data OHLCV Service (P0)
│   ├── SUBTAREA-2.2: Notifications Complete Service (P1)
│   ├── SUBTAREA-2.3: User Profile Service (P0)
│   ├── SUBTAREA-2.4: Audit Service (P2)
│   └── SUBTAREA-2.5: 2FA Complete Flow (P1)
│
├── FASE-3: BACKEND API (24h)
│   ├── SUBTAREA-3.1: Market Data Endpoints
│   ├── SUBTAREA-3.2: Notifications Endpoints
│   ├── SUBTAREA-3.3: User Profile Endpoints
│   ├── SUBTAREA-3.4: Trading Agents Endpoints
│   └── SUBTAREA-3.5: 2FA Setup Endpoints
│
├── FASE-4: FRONTEND INTEGRATION (180h)
│   ├── SPRINT-FE-1: Fundamentos (17 SP)
│   ├── SPRINT-FE-2: Trading Core (60 SP)
│   ├── SPRINT-FE-3: Investment (81 SP)
│   ├── SPRINT-FE-4: Advanced Features (128 SP)
│   └── SPRINT-FE-5: Growth (55 SP)
│
├── FASE-5: ARCHITECTURE REFACTOR (24h)
│   ├── SUBTAREA-5.1: Proxy Python Services (ARCH-001)
│   └── SUBTAREA-5.2: Standardize apiClient (ARCH-002)
│
├── FASE-6: TESTING (40h)
│   ├── SUBTAREA-6.1: Unit Tests Backend
│   ├── SUBTAREA-6.2: Unit Tests Frontend
│   ├── SUBTAREA-6.3: Integration Tests
│   └── SUBTAREA-6.4: E2E Tests
│
└── FASE-7: DOCUMENTACIÓN (16h)
    ├── SUBTAREA-7.1: Guías desarrollo
    ├── SUBTAREA-7.2: API Documentation
    └── SUBTAREA-7.3: Actualización inventarios final

2. DETALLE DE SUBTAREAS - FASE 0: PREPARACIÓN

SUBTAREA-0.1: Purga Documentación Obsoleta

ID: ST-0.1 Prioridad: P0 Esfuerzo: 2h Perfil: PERFIL-ORQUESTADOR Parallelizable:

CAPVED:

  • C: Identificar documentos obsoletos listados en 01-CAPTURA.md
  • A: Verificar que no hay referencias activas
  • P: Plan de archivado/eliminación
  • V: No aplica (no código)
  • E: Mover/eliminar archivos
  • D: Actualizar _INDEX.yml

Acciones:

  1. Mover TASK-2026-02-03-DDL-VALIDATION/ a _archive/2026-02/
  2. Eliminar docs/90-transversal/gaps/ANALISIS-GAPS-DOCUMENTACION.md
  3. Decidir sobre 95-guias-desarrollo/ vacíos

Criterios Aceptación:

  • No existen archivos obsoletos identificados
  • _INDEX.yml actualizado
  • Sin referencias rotas

SUBTAREA-0.2: Sincronización Inventarios

ID: ST-0.2 Prioridad: P0 Esfuerzo: 4h Perfil: PERFIL-ORQUESTADOR Parallelizable: Parcial

CAPVED:

  • C: Leer inventarios actuales y código real
  • A: Identificar discrepancias específicas
  • P: Lista de correcciones por inventario
  • V: Verificar conteos con grep/find
  • E: Actualizar YAML files
  • D: Commit con changelog

Acciones:

  1. BACKEND_INVENTORY.yml: Actualizar conteo 57→79 endpoints
  2. FRONTEND_INVENTORY.yml: Actualizar conteo 90→146 componentes
  3. DATABASE_INVENTORY.yml: Resolver duplicación notifications

Criterios Aceptación:

  • Todos los inventarios >95% sincronizados
  • Sin duplicaciones en DDL registry
  • Conteos verificados automáticamente

SUBTAREA-0.3: Actualización PROJECT-STATUS

ID: ST-0.3 Prioridad: P0 Esfuerzo: 2h Perfil: PERFIL-ORQUESTADOR Parallelizable:

CAPVED:

  • C: Leer PROJECT-STATUS.md actual (2026-01-30)
  • A: Comparar con estado real del proyecto
  • P: Lista de secciones a actualizar
  • V: No aplica
  • E: Editar PROJECT-STATUS.md y PROXIMA-ACCION.md
  • D: Commit

Criterios Aceptación:

  • PROJECT-STATUS.md con fecha actual
  • PROXIMA-ACCION.md refleja tarea actual
  • Métricas actualizadas

3. DETALLE DE SUBTAREAS - FASE 1: DDL GAPS

SUBTAREA-1.1: education.instructors Table

ID: ST-1.1 Prioridad: P1 Esfuerzo: 4h Perfil: PERFIL-DATABASE-POSTGRESQL Parallelizable: Sí (con ST-1.2, ST-1.3) Depende de: ST-0.2

CAPVED:

  • C: Revisar requerimientos OQI-002 para instructores
  • A: Diseñar schema de tabla con campos necesarios
  • P: DDL script con constraints y índices
  • V: Validar FK hacia auth.user_profiles
  • E: Crear DDL y ejecutar en WSL
  • D: Actualizar DATABASE_INVENTORY.yml

DDL Propuesto:

CREATE TABLE education.instructors (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID NOT NULL REFERENCES auth.user_profiles(id),
    bio TEXT,
    specializations TEXT[],
    rating DECIMAL(3,2) DEFAULT 0,
    total_courses INTEGER DEFAULT 0,
    total_students INTEGER DEFAULT 0,
    is_verified BOOLEAN DEFAULT false,
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX idx_instructors_user_id ON education.instructors(user_id);
CREATE INDEX idx_instructors_rating ON education.instructors(rating DESC);

Criterios Aceptación:

  • Tabla creada en schema education
  • FK válida hacia auth.user_profiles
  • Índices creados
  • DDL documentado en apps/database/

SUBTAREA-1.2: education.course_tags Field

ID: ST-1.2 Prioridad: P1 Esfuerzo: 2h Perfil: PERFIL-DATABASE-POSTGRESQL Parallelizable: Sí (con ST-1.1, ST-1.3) Depende de: ST-0.2

CAPVED:

  • C: Revisar OQI-002 para filtrado por tags
  • A: Decidir: campo TEXT[] o tabla de relación
  • P: DDL para campo o tabla
  • V: Compatibilidad con queries existentes
  • E: Ejecutar DDL en WSL
  • D: Actualizar inventario

Decisión Arquitectural: Usar tabla de relación education.course_tag_assignments (ya existe tag.service.ts)

Criterios Aceptación:

  • Tags pueden asignarse a cursos
  • Queries de filtrado funcionan
  • Coherencia con tag.service.ts existente

SUBTAREA-1.3: trading.price_alerts Table

ID: ST-1.3 Prioridad: P0 Esfuerzo: 4h Perfil: PERFIL-DATABASE-POSTGRESQL Parallelizable: Sí (con ST-1.1, ST-1.2) Depende de: ST-0.2

CAPVED:

  • C: Revisar OQI-003 para alertas de precio
  • A: Diseñar schema con tipos de alerta
  • P: DDL con enum y tabla
  • V: FK hacia trading.symbols
  • E: Ejecutar DDL
  • D: Documentar

DDL Propuesto:

CREATE TYPE trading.alert_type AS ENUM ('price_above', 'price_below', 'percent_change', 'volume_spike');
CREATE TYPE trading.alert_status AS ENUM ('active', 'triggered', 'expired', 'cancelled');

CREATE TABLE trading.price_alerts (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID NOT NULL REFERENCES auth.user_profiles(id),
    symbol_id UUID NOT NULL REFERENCES trading.symbols(id),
    alert_type trading.alert_type NOT NULL,
    target_price DECIMAL(18,8),
    percent_threshold DECIMAL(5,2),
    status trading.alert_status DEFAULT 'active',
    triggered_at TIMESTAMPTZ,
    expires_at TIMESTAMPTZ,
    notification_channels TEXT[] DEFAULT ARRAY['push', 'email'],
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX idx_price_alerts_user ON trading.price_alerts(user_id);
CREATE INDEX idx_price_alerts_symbol ON trading.price_alerts(symbol_id);
CREATE INDEX idx_price_alerts_active ON trading.price_alerts(status) WHERE status = 'active';

Criterios Aceptación:

  • Tabla creada con enums
  • FKs válidas
  • Índice parcial para alertas activas
  • Compatible con notification service

SUBTAREA-1.4: Validación DDL Post-Cambios

ID: ST-1.4 Prioridad: P0 Esfuerzo: 2h Perfil: PERFIL-DATABASE-POSTGRESQL Parallelizable: No Depende de: ST-1.1, ST-1.2, ST-1.3

CAPVED:

  • C: Lista de cambios DDL realizados
  • A: Verificar integridad referencial
  • P: Script de validación
  • V: Ejecutar validaciones
  • E: Corregir si hay errores
  • D: Actualizar DDL-VALIDATION-MATRIX.yml

Criterios Aceptación:

  • Todas las FK válidas
  • Índices optimizados
  • Sin conflictos de nombres
  • Script recreate-db funciona

4. DETALLE DE SUBTAREAS - FASE 2: BACKEND SERVICES

SUBTAREA-2.1: Market Data OHLCV Service (CRÍTICO)

ID: ST-2.1 Prioridad: P0 Esfuerzo: 16h Perfil: PERFIL-BACKEND-NESTJS Parallelizable: No (bloquea CHAIN-001) Depende de: ST-1.4

CAPVED:

  • C: Leer especificaciones OQI-003 para datos de mercado
  • A: Diseñar service con cache Redis
  • P: Estructura de archivos y endpoints
  • V: Validar contra DDL market_data
  • E: Implementar service + controller
  • D: Swagger docs

Estructura:

apps/backend/src/modules/market-data/
├── market-data.module.ts
├── market-data.controller.ts
├── market-data.service.ts
├── interfaces/
│   ├── ohlcv.interface.ts
│   └── ticker.interface.ts
├── dto/
│   ├── get-ohlcv.dto.ts
│   └── get-ticker.dto.ts
└── index.ts

Endpoints:

  • GET /api/market-data/ohlcv/:symbol
  • GET /api/market-data/tickers
  • GET /api/market-data/ticker/:symbol
  • WS /ws/market-data/stream

Criterios Aceptación:

  • Service implementado con caching
  • Endpoints funcionando
  • WebSocket stream activo
  • Swagger documentado
  • Tests unitarios

SUBTAREA-2.2: Notifications Complete Service

ID: ST-2.2 Prioridad: P1 Esfuerzo: 12h Perfil: PERFIL-BACKEND-NESTJS Parallelizable: Sí (con ST-2.3) Depende de: ST-1.4

CAPVED:

  • C: Revisar notification.service.ts existente (parcial)
  • A: Identificar funcionalidad faltante
  • P: Completar service + controller + push
  • V: Validar contra DDL auth.notifications
  • E: Implementar
  • D: Documentar

Funcionalidad Faltante:

  • Push notifications (web push)
  • Email notifications
  • In-app notifications API
  • User preferences

Criterios Aceptación:

  • Push notifications funcionando
  • Preferences guardadas
  • API completa
  • Tests

SUBTAREA-2.3: User Profile Service

ID: ST-2.3 Prioridad: P0 Esfuerzo: 6h Perfil: PERFIL-BACKEND-NESTJS Parallelizable: Sí (con ST-2.2) Depende de: NINGUNA

CAPVED:

  • C: Revisar auth.user_profiles DDL
  • A: Diseñar CRUD operations
  • P: Service + Controller
  • V: Validar auth guards
  • E: Implementar
  • D: Swagger

Estructura:

apps/backend/src/modules/users/
├── users.module.ts
├── users.controller.ts
├── users.service.ts
├── dto/
│   ├── update-profile.dto.ts
│   └── change-password.dto.ts
└── index.ts

Criterios Aceptación:

  • CRUD de perfil
  • Cambio de password
  • Avatar upload
  • Guards aplicados

SUBTAREA-2.4: Audit Service

ID: ST-2.4 Prioridad: P2 Esfuerzo: 8h Perfil: PERFIL-BACKEND-NESTJS Parallelizable:Depende de: ST-1.4

CAPVED:

  • C: Revisar audit.service.ts existente (parcial)
  • A: Evaluar reutilización de template-saas
  • P: Completar queries y endpoints
  • V: Validar DDL audit schema
  • E: Implementar
  • D: Documentar

Criterios Aceptación:

  • Log de eventos
  • Queries por usuario/fecha
  • Export capability
  • Admin endpoints

SUBTAREA-2.5: 2FA Complete Flow

ID: ST-2.5 Prioridad: P1 Esfuerzo: 8h Perfil: PERFIL-BACKEND-NESTJS Parallelizable:Depende de: NINGUNA

CAPVED:

  • C: Revisar twofa.service.ts existente
  • A: Identificar endpoints faltantes
  • P: Setup + Verify + Backup codes
  • V: Tests de seguridad
  • E: Implementar endpoints
  • D: Documentar flujo

Endpoints Faltantes:

  • POST /api/auth/2fa/setup
  • POST /api/auth/2fa/verify
  • POST /api/auth/2fa/disable
  • GET /api/auth/2fa/backup-codes

Criterios Aceptación:

  • Setup con QR code
  • Verify con TOTP
  • Backup codes generados
  • Disable con password confirm

5. DETALLE DE SUBTAREAS - FASE 3: BACKEND API

(Resumen - detalles similares a FASE 2)

ID Subtarea Esfuerzo Depende de
ST-3.1 Market Data Endpoints 4h ST-2.1
ST-3.2 Notifications Endpoints 4h ST-2.2
ST-3.3 User Profile Endpoints 4h ST-2.3
ST-3.4 Trading Agents Endpoints 8h DDL trading
ST-3.5 2FA Setup Endpoints 4h ST-2.5

6. DETALLE DE SUBTAREAS - FASE 4: FRONTEND

SPRINT-FE-1: Fundamentos (17 SP)

ID Subtarea SP Depende de
SUBTASK-001 Routing y Huérfanos 4 NINGUNA
SUBTASK-002 OQI-001 Auth Completar 13 ST-2.5, ST-3.3

SPRINT-FE-2: Trading Core (60 SP)

ID Subtarea SP Depende de
SUBTASK-003 OQI-003 Trading 44 ST-3.1, ST-3.4
SUBTASK-004 OQI-006 ML 16 ST-3.1

SPRINT-FE-3: Investment (81 SP)

ID Subtarea SP Depende de
SUBTASK-005 OQI-004 Investment 68 Backend investment
SUBTASK-006 OQI-005 Payments 13 Backend payments

SPRINT-FE-4: Advanced Features (128 SP)

ID Subtarea SP Depende de
SUBTASK-007 OQI-002 Education 21 ST-1.1, ST-1.2
SUBTASK-008 OQI-007 LLM 44 Backend LLM
SUBTASK-009 OQI-008 Portfolio 63 Backend portfolio

SPRINT-FE-5: Growth (55 SP)

ID Subtarea SP Depende de
SUBTASK-010 OQI-009 Marketplace 42 Docs OQI-009
SUBTASK-011 Migración Docs 8 NINGUNA
SUBTASK-012 Inventarios Sync 5 NINGUNA

7. PLAN DE EJECUCIÓN ORDENADO

Semana 1: Preparación + DDL

Día Subtareas Paralelismo Horas
D1 ST-0.1, ST-0.2, ST-0.3 3 parallel 8h
D2 ST-1.1, ST-1.2, ST-1.3 3 parallel 8h
D3 ST-1.4 Secuencial 2h

Entregables Semana 1:

  • Documentación purgada
  • Inventarios sincronizados
  • DDL gaps resueltos

Semana 2-3: Backend Services

Día Subtareas Paralelismo Horas
D4-D5 ST-2.1 (Market Data) Critical path 16h
D6 ST-2.2, ST-2.3 2 parallel 12h
D7 ST-2.4, ST-2.5 2 parallel 16h
D8 ST-3.1, ST-3.2 2 parallel 8h
D9 ST-3.3, ST-3.4, ST-3.5 3 parallel 16h

Entregables Semana 2-3:

  • Market Data Service completo (CHAIN-001 desbloqueado)
  • Notifications completo
  • User Profile completo
  • 2FA completo

Semana 4-8: Frontend Sprints

Sprint Duración Subtareas Paralelismo
FE-1 3 días SUBTASK-001, 002 2 parallel
FE-2 5 días SUBTASK-003, 004 2 parallel
FE-3 6 días SUBTASK-005, 006 2 parallel
FE-4 10 días SUBTASK-007-009 3 parallel
FE-5 4 días SUBTASK-010-012 3 parallel

Semana 9-10: Refactor + Testing

Día Subtareas Horas
D1-D2 ST-5.1 (ARCH-001) 16h
D3 ST-5.2 (ARCH-002) 8h
D4-D7 ST-6.1-6.4 Tests 40h
D8-D9 ST-7.1-7.3 Docs 16h

8. ASIGNACIÓN DE PERFILES POR SUBTAREA

Subtarea Perfil Principal Perfil Backup
ST-0.* PERFIL-ORQUESTADOR -
ST-1.* PERFIL-DATABASE-POSTGRESQL PERFIL-DATABASE-COMPACT
ST-2.* PERFIL-BACKEND-NESTJS PERFIL-BACKEND-COMPACT
ST-3.* PERFIL-BACKEND-NESTJS -
SUBTASK-* PERFIL-FRONTEND-REACT PERFIL-GENERIC-SUBAGENT
ST-5.* PERFIL-BACKEND-NESTJS -
ST-6.* PERFIL-QA-TESTER PERFIL-BACKEND-NESTJS
ST-7.* PERFIL-DOCUMENTACION PERFIL-ORQUESTADOR

9. CRITERIOS DE ÉXITO DEL PLAN

Métricas Objetivo

Métrica Actual Objetivo Incremento
Coherencia Global 81.25% 95% +13.75%
DDL-Backend 85% 98% +13%
Backend-Frontend 77.5% 92% +14.5%
Test Coverage 15% 40% +25%
Gaps P0 3 0 -3
Gaps P1 6 2 -4

Hitos de Validación

Hito Semana Criterio
M1 1 DDL 100% sincronizado
M2 3 CHAIN-001 desbloqueado
M3 5 Frontend Sprint 2 completado
M4 8 Frontend MVP completado
M5 10 Tests 40%+ coverage

10. PLAN DE CONTINGENCIA

Riesgos y Mitigaciones

Riesgo Trigger Mitigación
Bloqueo en Market Data >3 días delay Usar mock service temporal
Tests lentos >8h por suite Paralelizar CI
Dependencia externa API down Cache agresivo
Scope creep +20% SP Congelar scope Sprint

Escalation Path

  1. Blocker técnico → Consultar ARCH-001/002 solutions
  2. Blocker de dependencia → Reordenar subtareas
  3. Blocker de recurso → Solicitar subagente adicional

Siguiente Fase: E (Ejecución) - Delegación a subagentes