Create comprehensive TypeScript type definitions for Trading Agents (Atlas, Orion, Nova) in the frontend. - Align with backend trading-agents.client.ts interfaces - Export AgentType, AgentStatus, BotStatus types - Define TradingBot, AgentMetrics, AgentPosition, AgentTrade interfaces - Include utility functions for status mapping and display names - Full JSDoc documentation for all types - Export from main types/index.ts Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1417 lines
46 KiB
YAML
1417 lines
46 KiB
YAML
# ==============================================================================
|
|
# Cross-Validation Gaps Analysis - Trading Platform
|
|
# Validación Cruzada de Gaps entre DDL-Backend y Backend-Frontend
|
|
# Generated: 2026-01-27
|
|
# ==============================================================================
|
|
version: "1.0.0"
|
|
project: "trading-platform"
|
|
generated_at: "2026-01-27T13:00:00Z"
|
|
|
|
metadata:
|
|
descripcion: |
|
|
Análisis consolidado de gaps identificados en las 3 fases de coherencia:
|
|
- FASE 1.1: DDL-Backend Coherence
|
|
- FASE 1.2: Backend-Frontend Coherence (integrado en Master Report)
|
|
- FASE 1.3: Cross-Validation (este documento)
|
|
|
|
fuentes:
|
|
- orchestration/analisis/coherencia/DDL-BACKEND-COHERENCE.yml
|
|
- orchestration/analisis/coherencia/COHERENCE-MASTER-REPORT.md
|
|
- orchestration/analisis/coherencia/GAPS-TRACKING.yml
|
|
|
|
metodologia: |
|
|
1. Identificación de gaps en DDL-Backend (18 gaps)
|
|
2. Identificación de gaps en Backend-Frontend (extraídos de Master Report)
|
|
3. Detección de gaps duplicados entre análisis
|
|
4. Mapeo de cadenas de dependencia críticas
|
|
5. Clasificación por categoría y prioridad
|
|
6. Consolidación de gaps para ejecución
|
|
|
|
# ==============================================================================
|
|
# Resumen Ejecutivo
|
|
# ==============================================================================
|
|
|
|
cross_validation:
|
|
fecha: "2026-01-27"
|
|
total_gaps_identificados: 23
|
|
gaps_ddl_backend: 18
|
|
gaps_backend_frontend: 8
|
|
gaps_duplicados: 3
|
|
cadenas_criticas: 4
|
|
|
|
resumen_coherencia:
|
|
ddl_backend: "85% - BUENO"
|
|
backend_frontend: "77.5% - BUENO"
|
|
coherencia_global: "81.25% - BUENO"
|
|
|
|
gaps_bloqueantes_p0: 3
|
|
gaps_criticos_p1: 4
|
|
gaps_importantes_p2: 12
|
|
gaps_menores_p3: 4
|
|
|
|
# ==============================================================================
|
|
# Gaps Duplicados (Identificados en múltiples análisis)
|
|
# ==============================================================================
|
|
|
|
gaps_duplicados:
|
|
- id: GAP-DUP-001
|
|
titulo: "Notifications sin servicio completo"
|
|
aparece_en:
|
|
- fase: "DDL-Backend"
|
|
tabla: "auth.notifications"
|
|
descripcion: "Tabla de notificaciones sin servicio backend"
|
|
- fase: "Backend-Frontend"
|
|
descripcion: "Notifications API incompleta afecta frontend notification.service.ts"
|
|
consolidado_como: "GAP-P1-002"
|
|
prioridad: "P1"
|
|
impacto: "alto"
|
|
esfuerzo_estimado: "20h"
|
|
|
|
- id: GAP-DUP-002
|
|
titulo: "Market Data OHLCV sin servicio"
|
|
aparece_en:
|
|
- fase: "DDL-Backend"
|
|
tabla: "market_data.ohlcv_5m, market_data.ohlcv_15m"
|
|
descripcion: "Sin servicio backend para consultar OHLCV"
|
|
- fase: "Backend-Frontend"
|
|
descripcion: "Charts frontend necesitan datos OHLCV via API REST"
|
|
consolidado_como: "GAP-P1-001"
|
|
prioridad: "P1"
|
|
impacto: "alto"
|
|
esfuerzo_estimado: "16h"
|
|
|
|
- id: GAP-DUP-003
|
|
titulo: "Trading Agents sin UI"
|
|
aparece_en:
|
|
- fase: "Backend-Frontend"
|
|
descripcion: "Trading Agents (Atlas/Orion/Nova) no tienen interfaz de usuario"
|
|
- fase: "End-to-End"
|
|
descripcion: "Feature core de agentes de trading completamente sin UI"
|
|
consolidado_como: "GAP-P0-003"
|
|
prioridad: "P0"
|
|
impacto: "bloqueante"
|
|
esfuerzo_estimado: "40h"
|
|
|
|
# ==============================================================================
|
|
# Cadenas de Dependencia Críticas
|
|
# ==============================================================================
|
|
|
|
cadenas_criticas:
|
|
- id: CHAIN-001
|
|
nombre: "Market Data Pipeline"
|
|
descripcion: "Datos de mercado desde DDL hasta visualización en charts"
|
|
tipo: "ddl_backend_frontend"
|
|
impacto: "P1"
|
|
componentes:
|
|
- capa: "DDL"
|
|
elemento: "market_data.ohlcv_5m, market_data.ohlcv_15m"
|
|
estado: "OK"
|
|
cobertura: "100%"
|
|
|
|
- capa: "Backend"
|
|
elemento: "marketData.service.ts"
|
|
estado: "FALTA"
|
|
cobertura: "0%"
|
|
gap_id: "GAP-P1-001"
|
|
|
|
- capa: "Backend API"
|
|
elemento: "market-data.controller.ts + endpoints REST"
|
|
estado: "FALTA"
|
|
cobertura: "0%"
|
|
gap_id: "GAP-P1-001"
|
|
|
|
- capa: "Frontend"
|
|
elemento: "Charts component + TradingView integration"
|
|
estado: "BLOQUEADO"
|
|
cobertura: "0%"
|
|
bloqueado_por: "GAP-P1-001"
|
|
|
|
flujo_dependencia: "DDL (OK) -> Backend Service (FALTA) -> API REST (FALTA) -> Frontend Charts (BLOQUEADO)"
|
|
estado_global: "BLOQUEADO"
|
|
accion_requerida: "Implementar marketData.service.ts y endpoints para desbloquear frontend"
|
|
|
|
- id: CHAIN-002
|
|
nombre: "Notifications & Push Tokens"
|
|
descripcion: "Sistema completo de notificaciones desde almacenamiento hasta push"
|
|
tipo: "ddl_backend_frontend"
|
|
impacto: "P1"
|
|
componentes:
|
|
- capa: "DDL"
|
|
elemento: "auth.notifications, auth.user_push_tokens"
|
|
estado: "OK"
|
|
cobertura: "100%"
|
|
|
|
- capa: "Backend"
|
|
elemento: "notification.service.ts, push.service.ts"
|
|
estado: "FALTA"
|
|
cobertura: "0%"
|
|
gap_id: "GAP-P1-002"
|
|
|
|
- capa: "Backend API"
|
|
elemento: "notification.controller.ts + endpoints"
|
|
estado: "FALTA"
|
|
cobertura: "0%"
|
|
gap_id: "GAP-P1-002"
|
|
|
|
- capa: "Frontend"
|
|
elemento: "notification.service.ts consumer + UI components"
|
|
estado: "PARCIAL"
|
|
cobertura: "30%"
|
|
notas: "notification.service.ts existe pero no puede consumir API que no existe"
|
|
|
|
flujo_dependencia: "DDL (OK) -> Backend Service (FALTA) -> API (FALTA) -> Frontend (PARCIAL/BLOQUEADO)"
|
|
estado_global: "BLOQUEADO"
|
|
accion_requerida: "Implementar notification.service.ts backend + push integration (FCM/OneSignal)"
|
|
|
|
- id: CHAIN-003
|
|
nombre: "Trading Agents End-to-End"
|
|
descripcion: "Agentes de trading Atlas/Orion/Nova desde datos hasta UI"
|
|
tipo: "ddl_backend_frontend"
|
|
impacto: "P0"
|
|
componentes:
|
|
- capa: "DDL"
|
|
elemento: "trading.bots"
|
|
estado: "OK"
|
|
cobertura: "100%"
|
|
|
|
- capa: "Backend"
|
|
elemento: "bots.service.ts, paper-trading.service.ts"
|
|
estado: "PARCIAL"
|
|
cobertura: "60%"
|
|
notas: "Servicios existen pero faltan endpoints de gestión"
|
|
|
|
- capa: "Backend API"
|
|
elemento: "trading.controller.ts - bot management endpoints"
|
|
estado: "PARCIAL"
|
|
cobertura: "40%"
|
|
gap_id: "GAP-P0-003"
|
|
|
|
- capa: "Frontend"
|
|
elemento: "BotManager component, BotConfig UI, BotMonitoring dashboard"
|
|
estado: "FALTA"
|
|
cobertura: "0%"
|
|
gap_id: "GAP-P0-003"
|
|
|
|
- capa: "Investment"
|
|
elemento: "investment.accounts linking con bots"
|
|
estado: "FALTA"
|
|
cobertura: "0%"
|
|
dependencia: "OQI-004"
|
|
|
|
flujo_dependencia: "DDL (OK) -> Backend (PARCIAL) -> API (PARCIAL) -> Frontend (FALTA) -> Investment (FALTA)"
|
|
estado_global: "BLOQUEANTE"
|
|
accion_requerida: "Feature core completamente sin UI. Requiere 40h de desarrollo frontend + integración investment accounts"
|
|
|
|
- id: CHAIN-004
|
|
nombre: "User Profile Management"
|
|
descripcion: "Gestión completa de perfil de usuario"
|
|
tipo: "ddl_backend_frontend"
|
|
impacto: "P0"
|
|
componentes:
|
|
- capa: "DDL"
|
|
elemento: "auth.users (campos profile)"
|
|
estado: "OK"
|
|
cobertura: "100%"
|
|
|
|
- capa: "Backend"
|
|
elemento: "userService.ts"
|
|
estado: "FALTA"
|
|
cobertura: "0%"
|
|
gap_id: "GAP-P0-002"
|
|
notas: "auth solo maneja token/sessions, no profile management"
|
|
|
|
- capa: "Backend API"
|
|
elemento: "users.controller.ts + endpoints CRUD"
|
|
estado: "FALTA"
|
|
cobertura: "0%"
|
|
gap_id: "GAP-P0-002"
|
|
|
|
- capa: "Frontend"
|
|
elemento: "ProfileSettings component, userService.ts consumer"
|
|
estado: "FALTA"
|
|
cobertura: "0%"
|
|
gap_id: "GAP-P0-002"
|
|
|
|
flujo_dependencia: "DDL (OK) -> Backend Service (FALTA) -> API (FALTA) -> Frontend (FALTA)"
|
|
estado_global: "BLOQUEANTE"
|
|
accion_requerida: "No hay gestión de perfil. Usuarios no pueden actualizar datos personales. 6h estimadas"
|
|
|
|
# ==============================================================================
|
|
# Gaps Consolidados por Categoría
|
|
# ==============================================================================
|
|
|
|
gaps_consolidados:
|
|
|
|
# --------------------------------------------------------------------------
|
|
# PRIORIDAD P0 - BLOQUEANTES (Impiden producción)
|
|
# --------------------------------------------------------------------------
|
|
|
|
p0_bloqueantes:
|
|
- id: GAP-P0-001
|
|
titulo: "Password Recovery sin UI"
|
|
tipo: "backend_frontend"
|
|
categoria: "Auth"
|
|
origen: ["Master Report"]
|
|
|
|
descripcion: |
|
|
Backend tiene lógica de password recovery (email.service.ts) pero
|
|
frontend no tiene formulario de recuperación. Usuarios no pueden
|
|
recuperar cuentas perdidas.
|
|
|
|
capas_afectadas:
|
|
ddl: "OK - auth.users, auth.email_verifications"
|
|
backend: "PARCIAL - email.service.ts existe pero falta endpoint reset-password"
|
|
frontend: "FALTA - PasswordRecoveryForm component"
|
|
|
|
impacto: "bloqueante"
|
|
prioridad: "P0"
|
|
esfuerzo_estimado: "8h"
|
|
|
|
componentes_faltantes:
|
|
backend:
|
|
- file: "apps/backend/src/modules/auth/controllers/auth.controller.ts"
|
|
agregar: "POST /api/auth/forgot-password, POST /api/auth/reset-password"
|
|
|
|
frontend:
|
|
- file: "apps/frontend/src/pages/auth/PasswordRecovery.tsx"
|
|
tipo: "nuevo"
|
|
descripcion: "Formulario para solicitar reset"
|
|
|
|
- file: "apps/frontend/src/pages/auth/PasswordReset.tsx"
|
|
tipo: "nuevo"
|
|
descripcion: "Formulario con token para nueva contraseña"
|
|
|
|
acceptance_criteria:
|
|
- "[ ] Usuario puede solicitar password recovery via email"
|
|
- "[ ] Email con link de reset se envía correctamente"
|
|
- "[ ] Link con token válido por 1 hora"
|
|
- "[ ] Usuario puede establecer nueva contraseña"
|
|
- "[ ] Validaciones de seguridad (contraseña fuerte)"
|
|
- "[ ] Integración con email.service.ts backend"
|
|
|
|
- id: GAP-P0-002
|
|
titulo: "User Profile sin servicio"
|
|
tipo: "ddl_backend_frontend"
|
|
categoria: "Users"
|
|
origen: ["Master Report"]
|
|
|
|
descripcion: |
|
|
No existe servicio backend para gestión de perfil de usuario.
|
|
Usuarios no pueden actualizar datos personales, avatar, preferencias.
|
|
|
|
capas_afectadas:
|
|
ddl: "OK - auth.users tiene campos profile"
|
|
backend: "FALTA - userService.ts no existe"
|
|
backend_api: "FALTA - users.controller.ts no existe"
|
|
frontend: "FALTA - ProfileSettings component básico"
|
|
|
|
impacto: "bloqueante"
|
|
prioridad: "P0"
|
|
esfuerzo_estimado: "6h"
|
|
|
|
componentes_faltantes:
|
|
backend:
|
|
- file: "apps/backend/src/modules/users/services/user.service.ts"
|
|
tipo: "nuevo"
|
|
methods:
|
|
- getUserProfile(userId)
|
|
- updateProfile(userId, data)
|
|
- uploadAvatar(userId, file)
|
|
- updatePreferences(userId, preferences)
|
|
|
|
- file: "apps/backend/src/modules/users/controllers/users.controller.ts"
|
|
tipo: "nuevo"
|
|
endpoints:
|
|
- "GET /api/users/profile"
|
|
- "PUT /api/users/profile"
|
|
- "POST /api/users/avatar"
|
|
|
|
- file: "apps/backend/src/modules/users/types/user.types.ts"
|
|
tipo: "nuevo"
|
|
|
|
frontend:
|
|
- file: "apps/frontend/src/pages/settings/ProfileSettings.tsx"
|
|
tipo: "nuevo"
|
|
descripcion: "Página de configuración de perfil"
|
|
|
|
- file: "apps/frontend/src/services/userService.ts"
|
|
tipo: "nuevo"
|
|
descripcion: "Servicio consumer de user API"
|
|
|
|
acceptance_criteria:
|
|
- "[ ] Usuario puede ver su perfil completo"
|
|
- "[ ] Usuario puede actualizar nombre, email, teléfono"
|
|
- "[ ] Usuario puede subir avatar"
|
|
- "[ ] Usuario puede configurar preferencias (idioma, moneda, timezone)"
|
|
- "[ ] Validaciones en backend y frontend"
|
|
- "[ ] Tests unitarios >80%"
|
|
|
|
- id: GAP-P0-003
|
|
titulo: "Trading Agents sin UI"
|
|
tipo: "backend_frontend"
|
|
categoria: "Trading"
|
|
origen: ["Master Report", "Backend-Frontend Analysis"]
|
|
|
|
descripcion: |
|
|
Feature core de Atlas/Orion/Nova completamente sin interfaz.
|
|
Backend tiene servicios y lógica de bots pero frontend no tiene
|
|
componentes para gestión ni monitoreo.
|
|
|
|
capas_afectadas:
|
|
ddl: "OK - trading.bots"
|
|
backend: "PARCIAL - bots.service.ts existe (60%)"
|
|
backend_api: "PARCIAL - endpoints básicos (40%)"
|
|
frontend: "FALTA - 0% de UI"
|
|
|
|
impacto: "bloqueante"
|
|
prioridad: "P0"
|
|
esfuerzo_estimado: "40h"
|
|
|
|
componentes_faltantes:
|
|
backend:
|
|
- file: "apps/backend/src/modules/trading/controllers/trading.controller.ts"
|
|
agregar_endpoints:
|
|
- "POST /api/trading/bots"
|
|
- "GET /api/trading/bots/:id"
|
|
- "PUT /api/trading/bots/:id"
|
|
- "DELETE /api/trading/bots/:id"
|
|
- "POST /api/trading/bots/:id/start"
|
|
- "POST /api/trading/bots/:id/stop"
|
|
|
|
frontend:
|
|
- file: "apps/frontend/src/pages/trading/BotManager.tsx"
|
|
tipo: "nuevo"
|
|
descripcion: "Página principal de gestión de bots"
|
|
|
|
- file: "apps/frontend/src/components/trading/BotCard.tsx"
|
|
tipo: "nuevo"
|
|
descripcion: "Card con info y acciones de bot"
|
|
|
|
- file: "apps/frontend/src/components/trading/BotConfigWizard.tsx"
|
|
tipo: "nuevo"
|
|
descripcion: "Wizard para crear/configurar bot"
|
|
|
|
- file: "apps/frontend/src/components/trading/BotMonitoringDashboard.tsx"
|
|
tipo: "nuevo"
|
|
descripcion: "Dashboard con métricas en tiempo real"
|
|
|
|
- file: "apps/frontend/src/services/botService.ts"
|
|
tipo: "nuevo"
|
|
descripcion: "Servicio consumer de bots API"
|
|
|
|
dependencias_cruzadas:
|
|
- modulo: "OQI-004 (Investment Accounts)"
|
|
descripcion: "Bots deben linkear con investment accounts"
|
|
estado: "FALTA"
|
|
|
|
acceptance_criteria:
|
|
- "[ ] Usuario puede ver lista de bots"
|
|
- "[ ] Usuario puede crear bot con wizard (step by step)"
|
|
- "[ ] Usuario puede configurar parámetros (symbol, timeframe, strategy)"
|
|
- "[ ] Usuario puede iniciar/detener bot"
|
|
- "[ ] Dashboard muestra métricas: P&L, win rate, trades, positions"
|
|
- "[ ] Dashboard actualiza en tiempo real (WebSocket/polling)"
|
|
- "[ ] Integración con investment accounts (linking)"
|
|
- "[ ] Validaciones de riesgo antes de start"
|
|
|
|
# --------------------------------------------------------------------------
|
|
# PRIORIDAD P1 - CRÍTICOS (Afectan funcionalidad)
|
|
# --------------------------------------------------------------------------
|
|
|
|
p1_criticos:
|
|
- id: GAP-P1-001
|
|
titulo: "Market Data OHLCV sin servicio"
|
|
tipo: "ddl_backend_frontend"
|
|
categoria: "Market Data"
|
|
origen: ["DDL-Backend", "Backend-Frontend"]
|
|
|
|
descripcion: |
|
|
Tablas OHLCV existen en DDL pero sin servicio backend.
|
|
Charts frontend no pueden obtener datos históricos.
|
|
CHAIN-001 completamente bloqueada.
|
|
|
|
capas_afectadas:
|
|
ddl: "OK - market_data.ohlcv_5m, ohlcv_15m"
|
|
backend: "FALTA - marketData.service.ts"
|
|
backend_api: "FALTA - market-data.controller.ts"
|
|
frontend: "BLOQUEADO - charts necesitan API"
|
|
|
|
impacto: "alto"
|
|
prioridad: "P1"
|
|
esfuerzo_estimado: "16h"
|
|
|
|
componentes_faltantes:
|
|
backend:
|
|
- file: "apps/backend/src/modules/market-data/services/marketData.service.ts"
|
|
tipo: "nuevo"
|
|
methods:
|
|
- getOHLCV(symbol, timeframe, limit?)
|
|
- getLatestCandles(symbol, timeframe)
|
|
- getHistoricalData(symbol, from, to)
|
|
- getCandlesByRange(symbol, timeframe, start, end)
|
|
|
|
- file: "apps/backend/src/modules/market-data/types/market-data.types.ts"
|
|
tipo: "nuevo"
|
|
interfaces:
|
|
- OHLCV
|
|
- Timeframe
|
|
- CandleQueryOptions
|
|
|
|
- file: "apps/backend/src/modules/market-data/controllers/market-data.controller.ts"
|
|
tipo: "nuevo"
|
|
endpoints:
|
|
- "GET /api/market-data/ohlcv/:symbol/:timeframe"
|
|
- "GET /api/market-data/historical/:symbol"
|
|
|
|
- file: "apps/backend/src/modules/market-data/market-data.module.ts"
|
|
tipo: "nuevo"
|
|
|
|
acceptance_criteria:
|
|
- "[ ] Servicio puede consultar ohlcv_5m y ohlcv_15m"
|
|
- "[ ] Endpoint REST responde en <500ms para 100 candles"
|
|
- "[ ] Tipos TypeScript correctamente definidos"
|
|
- "[ ] Tests unitarios cubren >80%"
|
|
- "[ ] Documentación Swagger completa"
|
|
- "[ ] Frontend charts pueden consumir endpoints"
|
|
- "[ ] Cache de datos recientes (Redis)"
|
|
|
|
- id: GAP-P1-002
|
|
titulo: "Notifications sin API completa"
|
|
tipo: "ddl_backend_frontend"
|
|
categoria: "Notifications"
|
|
origen: ["DDL-Backend", "Master Report"]
|
|
|
|
descripcion: |
|
|
Sistema de notificaciones incompleto. DDL OK pero sin servicios backend.
|
|
Push notifications no funcionales. CHAIN-002 bloqueada.
|
|
|
|
capas_afectadas:
|
|
ddl: "OK - auth.notifications, auth.user_push_tokens"
|
|
backend: "FALTA - notification.service.ts, push.service.ts"
|
|
backend_api: "FALTA - notification.controller.ts"
|
|
frontend: "PARCIAL - notification.service.ts consumer existe (30%)"
|
|
|
|
impacto: "alto"
|
|
prioridad: "P1"
|
|
esfuerzo_estimado: "20h"
|
|
|
|
componentes_faltantes:
|
|
backend:
|
|
- file: "apps/backend/src/modules/notifications/services/notification.service.ts"
|
|
tipo: "nuevo"
|
|
methods:
|
|
- getUserNotifications(userId, filters?)
|
|
- markAsRead(notificationId)
|
|
- markAllAsRead(userId)
|
|
- deleteNotification(notificationId)
|
|
- sendNotification(userId, notification)
|
|
|
|
- file: "apps/backend/src/modules/notifications/services/push.service.ts"
|
|
tipo: "nuevo"
|
|
methods:
|
|
- registerPushToken(userId, token, platform)
|
|
- unregisterPushToken(tokenId)
|
|
- sendPushNotification(userId, payload)
|
|
- sendBulkPushNotifications(userIds, payload)
|
|
|
|
- file: "apps/backend/src/modules/notifications/types/notification.types.ts"
|
|
tipo: "nuevo"
|
|
|
|
- file: "apps/backend/src/modules/notifications/controllers/notification.controller.ts"
|
|
tipo: "nuevo"
|
|
endpoints:
|
|
- "GET /api/notifications"
|
|
- "POST /api/notifications/:id/read"
|
|
- "DELETE /api/notifications/:id"
|
|
- "POST /api/notifications/push-token"
|
|
|
|
- file: "apps/backend/src/modules/notifications/notifications.module.ts"
|
|
tipo: "nuevo"
|
|
|
|
dependencias_externas:
|
|
- servicio: "Firebase Cloud Messaging (FCM)"
|
|
uso: "Push notifications iOS/Android"
|
|
- servicio: "OneSignal (alternativa)"
|
|
uso: "Push notifications cross-platform"
|
|
|
|
acceptance_criteria:
|
|
- "[ ] Usuarios pueden ver sus notificaciones"
|
|
- "[ ] Usuarios pueden marcar como leídas"
|
|
- "[ ] Push tokens se registran correctamente"
|
|
- "[ ] Push notifications se envían vía FCM/OneSignal"
|
|
- "[ ] Tests cubren casos principales"
|
|
- "[ ] Frontend notifica en tiempo real"
|
|
- "[ ] WebSocket opcional para notificaciones live"
|
|
|
|
- id: GAP-P1-003
|
|
titulo: "ML Chart Overlays sin UI"
|
|
tipo: "backend_frontend"
|
|
categoria: "ML Signals"
|
|
origen: ["Master Report"]
|
|
|
|
descripcion: |
|
|
Backend ML tiene predicciones y señales pero charts no las visualizan.
|
|
OQI-006 (ML Signals) al 75% pero desconectado de OQI-003 (Charts).
|
|
|
|
capas_afectadas:
|
|
ddl: "OK - ml.predictions, ml.llm_predictions"
|
|
backend: "OK - ml-overlay.service.ts existe"
|
|
backend_api: "OK - ml.controller.ts con endpoints"
|
|
frontend: "FALTA - overlays en charts (0%)"
|
|
|
|
impacto: "alto"
|
|
prioridad: "P1"
|
|
esfuerzo_estimado: "24h"
|
|
|
|
componentes_faltantes:
|
|
frontend:
|
|
- file: "apps/frontend/src/components/charts/overlays/MLPredictionOverlay.tsx"
|
|
tipo: "nuevo"
|
|
descripcion: "Overlay con predicciones ML sobre chart"
|
|
|
|
- file: "apps/frontend/src/components/charts/overlays/SignalMarkers.tsx"
|
|
tipo: "nuevo"
|
|
descripcion: "Markers de señales buy/sell en chart"
|
|
|
|
- file: "apps/frontend/src/components/charts/overlays/ICTConceptsOverlay.tsx"
|
|
tipo: "nuevo"
|
|
descripcion: "Overlay con conceptos ICT (Order Blocks, FVG, etc)"
|
|
|
|
- file: "apps/frontend/src/services/mlOverlayService.ts"
|
|
tipo: "nuevo"
|
|
descripcion: "Servicio para obtener overlay data"
|
|
|
|
integracion:
|
|
- componente: "TradingChart.tsx"
|
|
modificar: "Integrar overlays ML"
|
|
- componente: "ChartSettings.tsx"
|
|
modificar: "Toggle para mostrar/ocultar overlays"
|
|
|
|
acceptance_criteria:
|
|
- "[ ] Predicciones ML se muestran como líneas en chart"
|
|
- "[ ] Señales buy/sell como markers en chart"
|
|
- "[ ] ICT concepts como áreas sombreadas"
|
|
- "[ ] Toggle para activar/desactivar overlays"
|
|
- "[ ] Performance: overlays no afectan rendering de chart"
|
|
- "[ ] Actualización en tiempo real de señales"
|
|
|
|
- id: GAP-P1-004
|
|
titulo: "2FA sin flujo completo"
|
|
tipo: "backend_frontend"
|
|
categoria: "Auth"
|
|
origen: ["Master Report"]
|
|
|
|
descripcion: |
|
|
Backend tiene twofa.service.ts pero frontend no tiene UI para
|
|
activar/desactivar 2FA. Seguridad avanzada no disponible.
|
|
|
|
capas_afectadas:
|
|
ddl: "OK - auth.users.mfa_enabled"
|
|
backend: "OK - twofa.service.ts existe"
|
|
backend_api: "PARCIAL - faltan endpoints setup"
|
|
frontend: "FALTA - TwoFactorSetup component"
|
|
|
|
impacto: "alto"
|
|
prioridad: "P1"
|
|
esfuerzo_estimado: "16h"
|
|
|
|
componentes_faltantes:
|
|
backend:
|
|
- file: "apps/backend/src/modules/auth/controllers/auth.controller.ts"
|
|
agregar_endpoints:
|
|
- "POST /api/auth/2fa/setup"
|
|
- "POST /api/auth/2fa/verify-setup"
|
|
- "POST /api/auth/2fa/disable"
|
|
- "POST /api/auth/2fa/backup-codes"
|
|
|
|
frontend:
|
|
- file: "apps/frontend/src/pages/settings/TwoFactorSetup.tsx"
|
|
tipo: "nuevo"
|
|
descripcion: "Página de configuración 2FA"
|
|
|
|
- file: "apps/frontend/src/components/auth/TwoFactorVerifyModal.tsx"
|
|
tipo: "nuevo"
|
|
descripcion: "Modal para verificar código TOTP en login"
|
|
|
|
- file: "apps/frontend/src/components/auth/BackupCodesDisplay.tsx"
|
|
tipo: "nuevo"
|
|
descripcion: "Mostrar backup codes al activar 2FA"
|
|
|
|
acceptance_criteria:
|
|
- "[ ] Usuario puede activar 2FA (TOTP) con QR code"
|
|
- "[ ] Usuario debe verificar código antes de activar"
|
|
- "[ ] Backup codes se generan y muestran"
|
|
- "[ ] Login requiere código 2FA si está activado"
|
|
- "[ ] Usuario puede desactivar 2FA con código de verificación"
|
|
- "[ ] Compatibilidad con Google Authenticator, Authy, etc"
|
|
|
|
# --------------------------------------------------------------------------
|
|
# PRIORIDAD P2 - IMPORTANTES (Mejoran experiencia)
|
|
# --------------------------------------------------------------------------
|
|
|
|
p2_importantes:
|
|
- id: GAP-P2-001
|
|
titulo: "Audit system sin servicios"
|
|
tipo: "ddl_backend"
|
|
categoria: "Audit"
|
|
origen: ["DDL-Backend"]
|
|
|
|
descripcion: |
|
|
Sistema de auditoría registra logs via triggers pero no hay servicios
|
|
para consultarlos. Admin dashboard sin datos de auditoría.
|
|
|
|
capas_afectadas:
|
|
ddl: "OK - audit.audit_logs, security_events, trading_audit, api_request_logs"
|
|
backend: "FALTA - audit.service.ts, securityAudit.service.ts"
|
|
backend_api: "FALTA - audit.controller.ts"
|
|
frontend: "N/A - admin only feature"
|
|
|
|
impacto: "medio"
|
|
prioridad: "P2"
|
|
esfuerzo_estimado: "32h"
|
|
|
|
esquema_implementacion:
|
|
backend:
|
|
- file: "apps/backend/src/modules/audit/services/audit.service.ts"
|
|
tipo: "nuevo"
|
|
methods:
|
|
- getAuditLogs(filters)
|
|
- getSecurityEvents(filters)
|
|
- getTradingAudit(botId, filters)
|
|
- getAPIRequestLogs(filters)
|
|
- exportAuditReport(from, to)
|
|
|
|
- file: "apps/backend/src/modules/audit/types/audit.types.ts"
|
|
tipo: "nuevo"
|
|
|
|
- file: "apps/backend/src/modules/audit/controllers/audit.controller.ts"
|
|
tipo: "nuevo"
|
|
endpoints:
|
|
- "GET /api/audit/logs"
|
|
- "GET /api/audit/security-events"
|
|
- "GET /api/audit/trading/:botId"
|
|
- "GET /api/audit/export"
|
|
|
|
notas: "Admin only - proteger con role guard"
|
|
|
|
- id: GAP-P2-002
|
|
titulo: "Currency Exchange sin servicio"
|
|
tipo: "ddl_backend"
|
|
categoria: "Financial"
|
|
origen: ["DDL-Backend"]
|
|
|
|
descripcion: |
|
|
Sistema multi-moneda sin servicio de conversión.
|
|
Tabla existe pero sin sincronización de tasas.
|
|
|
|
capas_afectadas:
|
|
ddl: "OK - financial.currency_exchange_rates"
|
|
backend: "FALTA - currencyExchange.service.ts"
|
|
backend_api: "FALTA - endpoints currency"
|
|
|
|
impacto: "medio"
|
|
prioridad: "P2"
|
|
esfuerzo_estimado: "16h"
|
|
|
|
esquema_implementacion:
|
|
backend:
|
|
- file: "apps/backend/src/modules/financial/services/currencyExchange.service.ts"
|
|
tipo: "nuevo"
|
|
methods:
|
|
- getExchangeRate(from, to, date?)
|
|
- convertAmount(amount, from, to)
|
|
- syncRatesFromAPI()
|
|
- getHistoricalRates(from, to, startDate, endDate)
|
|
|
|
- file: "apps/backend/src/modules/financial/types/currency.types.ts"
|
|
tipo: "nuevo"
|
|
|
|
dependencias_externas:
|
|
- api: "CoinGecko / ExchangeRate-API"
|
|
- cron: "Sync diario de tasas"
|
|
|
|
- id: GAP-P2-003
|
|
titulo: "Risk Assessment sin servicio"
|
|
tipo: "ddl_backend"
|
|
categoria: "Investment"
|
|
origen: ["DDL-Backend"]
|
|
|
|
descripcion: |
|
|
Cuestionario de riesgo sin servicio backend.
|
|
Usuarios completan pero no hay cálculo de perfil.
|
|
|
|
capas_afectadas:
|
|
ddl: "OK - investment.risk_questionnaire"
|
|
backend: "FALTA - riskAssessment.service.ts"
|
|
backend_api: "FALTA - endpoints risk assessment"
|
|
|
|
impacto: "medio"
|
|
prioridad: "P2"
|
|
esfuerzo_estimado: "12h"
|
|
|
|
esquema_implementacion:
|
|
backend:
|
|
- file: "apps/backend/src/modules/investment/services/riskAssessment.service.ts"
|
|
tipo: "nuevo"
|
|
methods:
|
|
- submitQuestionnaire(userId, answers)
|
|
- calculateRiskProfile(answers)
|
|
- getUserRiskProfile(userId)
|
|
- retakeQuestionnaire(userId)
|
|
|
|
- id: GAP-P2-004
|
|
titulo: "Course Reviews sin endpoints"
|
|
tipo: "ddl_backend"
|
|
categoria: "Education"
|
|
origen: ["DDL-Backend"]
|
|
|
|
descripcion: "Tabla de reviews sin endpoints para crear/consultar"
|
|
|
|
impacto: "bajo"
|
|
prioridad: "P2"
|
|
esfuerzo_estimado: "6h"
|
|
|
|
esquema_implementacion:
|
|
backend:
|
|
- file: "apps/backend/src/modules/education/services/course.service.ts"
|
|
agregar_methods:
|
|
- createReview(userId, courseId, rating, review)
|
|
- getCourseReviews(courseId, pagination)
|
|
- updateReview(reviewId, data)
|
|
- deleteReview(reviewId)
|
|
|
|
- id: GAP-P2-005
|
|
titulo: "OAuth flows incompletos"
|
|
tipo: "backend_frontend"
|
|
categoria: "Auth"
|
|
origen: ["Master Report"]
|
|
|
|
descripcion: "Login social parcialmente implementado"
|
|
|
|
impacto: "medio"
|
|
prioridad: "P2"
|
|
esfuerzo_estimado: "12h"
|
|
|
|
- id: GAP-P2-006
|
|
titulo: "Login Attempts Tracking"
|
|
tipo: "ddl_backend"
|
|
categoria: "Auth"
|
|
origen: ["DDL-Backend"]
|
|
|
|
descripcion: "Sin consultas para análisis de seguridad"
|
|
|
|
impacto: "bajo"
|
|
prioridad: "P2"
|
|
esfuerzo_estimado: "4h"
|
|
|
|
- id: GAP-P2-007
|
|
titulo: "Wallet Audit Log sin servicio"
|
|
tipo: "ddl_backend"
|
|
categoria: "Financial"
|
|
origen: ["DDL-Backend"]
|
|
|
|
descripcion: "Auditoría de wallets registrada automáticamente pero sin consultas"
|
|
|
|
impacto: "bajo"
|
|
prioridad: "P2"
|
|
esfuerzo_estimado: "4h"
|
|
|
|
# --------------------------------------------------------------------------
|
|
# PRIORIDAD P3 - MENORES (Largo plazo)
|
|
# --------------------------------------------------------------------------
|
|
|
|
p3_menores:
|
|
- id: GAP-P3-001
|
|
titulo: "Distribution Runs Admin"
|
|
tipo: "ddl_backend"
|
|
categoria: "Investment"
|
|
origen: ["DDL-Backend"]
|
|
impacto: "bajo"
|
|
esfuerzo_estimado: "4h"
|
|
|
|
- id: GAP-P3-002
|
|
titulo: "System Events Queries"
|
|
tipo: "ddl_backend"
|
|
categoria: "Audit"
|
|
origen: ["DDL-Backend"]
|
|
impacto: "bajo"
|
|
esfuerzo_estimado: "4h"
|
|
|
|
- id: GAP-P3-003
|
|
titulo: "Compliance Service (KYC/AML)"
|
|
tipo: "ddl_backend"
|
|
categoria: "Audit"
|
|
origen: ["DDL-Backend"]
|
|
impacto: "bajo"
|
|
esfuerzo_estimado: "40h"
|
|
notas: "Futuro feature - no crítico ahora"
|
|
|
|
- id: GAP-P3-004
|
|
titulo: "Rate Limiting Config Admin"
|
|
tipo: "ddl_backend"
|
|
categoria: "Auth"
|
|
origen: ["DDL-Backend"]
|
|
impacto: "bajo"
|
|
esfuerzo_estimado: "4h"
|
|
|
|
# ==============================================================================
|
|
# Inconsistencias Arquitecturales
|
|
# ==============================================================================
|
|
|
|
inconsistencias_arquitecturales:
|
|
- id: ARCH-001
|
|
titulo: "Acceso Directo a Servicios Python (RIESGO ALTO)"
|
|
|
|
descripcion: |
|
|
Algunos servicios frontend acceden directamente a Python sin pasar por Express.
|
|
Esto rompe el patrón de arquitectura y crea riesgos de seguridad.
|
|
|
|
servicios_afectados:
|
|
- mlService.ts -> ML Engine (3083)
|
|
- llmAgentService.ts -> LLM Agent (3085)
|
|
- backtestService.ts -> ML Engine (3083)
|
|
|
|
riesgos:
|
|
- "Sin autenticación centralizada"
|
|
- "CORS issues potenciales"
|
|
- "Sin rate limiting consistente"
|
|
- "Sin retry logic"
|
|
- "Manejo inconsistente de errores"
|
|
|
|
recomendacion: "Consolidar todo acceso via backend Express como gateway"
|
|
prioridad: "P1"
|
|
esfuerzo_estimado: "16h"
|
|
|
|
solucion:
|
|
- "Crear proxy endpoints en Express para ML Engine y LLM Agent"
|
|
- "Migrar servicios frontend para usar apiClient + backend"
|
|
- "Añadir autenticación JWT en llamadas"
|
|
- "Implementar rate limiting en gateway"
|
|
|
|
- id: ARCH-002
|
|
titulo: "Uso Inconsistente de apiClient"
|
|
|
|
descripcion: |
|
|
5 servicios NO usan apiClient centralizado, perdiendo funcionalidades
|
|
de retry, auto-refresh de tokens, y manejo consistente de errores.
|
|
|
|
servicios_afectados:
|
|
- portfolio.service.ts
|
|
- adminService.ts
|
|
- mlService.ts
|
|
- llmAgentService.ts
|
|
- backtestService.ts
|
|
|
|
consecuencias:
|
|
- "Sin auto-refresh de tokens"
|
|
- "Sin retry logic"
|
|
- "Manejo inconsistente de errores"
|
|
- "Código duplicado de HTTP requests"
|
|
|
|
recomendacion: "Migrar todos los servicios a usar apiClient"
|
|
prioridad: "P2"
|
|
esfuerzo_estimado: "8h"
|
|
|
|
solucion:
|
|
- "Refactorizar servicios para usar apiClient"
|
|
- "Eliminar código duplicado de axios"
|
|
- "Estandarizar manejo de errores"
|
|
|
|
# ==============================================================================
|
|
# Análisis de Impacto por Epic
|
|
# ==============================================================================
|
|
|
|
impacto_por_epic:
|
|
OQI-001_Auth:
|
|
cobertura_actual: "93%"
|
|
gaps_identificados:
|
|
- GAP-P0-001 # Password Recovery sin UI
|
|
- GAP-P1-004 # 2FA sin flujo completo
|
|
- GAP-P2-005 # OAuth flows incompletos
|
|
- GAP-P2-006 # Login Attempts Tracking
|
|
- GAP-P3-004 # Rate Limiting Config Admin
|
|
|
|
impacto_gaps: "medio"
|
|
accion_requerida: "Completar P0-001 y P1-004 para alcanzar 100%"
|
|
esfuerzo_total: "36h"
|
|
|
|
OQI-002_Education:
|
|
cobertura_actual: "95%"
|
|
gaps_identificados:
|
|
- GAP-P2-004 # Course Reviews sin endpoints
|
|
|
|
impacto_gaps: "bajo"
|
|
accion_requerida: "P2-004 opcional, epic prácticamente completo"
|
|
esfuerzo_total: "6h"
|
|
|
|
OQI-003_Trading:
|
|
cobertura_actual: "98%"
|
|
gaps_identificados:
|
|
- GAP-P0-003 # Trading Agents sin UI
|
|
- GAP-P1-001 # Market Data OHLCV sin servicio
|
|
- GAP-P1-003 # ML Chart Overlays sin UI
|
|
|
|
impacto_gaps: "crítico"
|
|
accion_requerida: "URGENTE - 3 gaps críticos afectan features core"
|
|
esfuerzo_total: "80h"
|
|
|
|
notas: |
|
|
A pesar de 98% de cobertura backend, la falta de UI para trading agents
|
|
y market data hace que el epic no sea funcional end-to-end.
|
|
|
|
OQI-004_Investment:
|
|
cobertura_actual: "97%"
|
|
gaps_identificados:
|
|
- GAP-P2-003 # Risk Assessment sin servicio
|
|
- GAP-P3-001 # Distribution Runs Admin
|
|
|
|
impacto_gaps: "bajo"
|
|
accion_requerida: "P2-003 deseable, P3-001 opcional"
|
|
esfuerzo_total: "16h"
|
|
|
|
OQI-005_Payments:
|
|
cobertura_actual: "92%"
|
|
gaps_identificados:
|
|
- GAP-P2-002 # Currency Exchange sin servicio
|
|
- GAP-P2-007 # Wallet Audit Log sin servicio
|
|
|
|
impacto_gaps: "medio"
|
|
accion_requerida: "P2-002 necesario para multi-moneda"
|
|
esfuerzo_total: "20h"
|
|
|
|
OQI-006_ML_Signals:
|
|
cobertura_actual: "82%"
|
|
gaps_identificados:
|
|
- GAP-P1-003 # ML Chart Overlays sin UI
|
|
- ARCH-001 # Acceso directo a Python
|
|
|
|
impacto_gaps: "alto"
|
|
accion_requerida: "Completar P1-003 y refactorizar arquitectura"
|
|
esfuerzo_total: "40h"
|
|
|
|
OQI-007_LLM_Agent:
|
|
cobertura_actual: "89%"
|
|
gaps_identificados:
|
|
- ARCH-001 # Acceso directo a Python
|
|
|
|
impacto_gaps: "medio"
|
|
accion_requerida: "Refactorizar para usar gateway Express"
|
|
esfuerzo_total: "16h"
|
|
|
|
OQI-008_Portfolio:
|
|
cobertura_actual: "97%"
|
|
gaps_identificados:
|
|
- ARCH-002 # portfolio.service.ts no usa apiClient
|
|
|
|
impacto_gaps: "bajo"
|
|
accion_requerida: "Refactorizar para consistencia"
|
|
esfuerzo_total: "2h"
|
|
|
|
OQI-009_MT4:
|
|
cobertura_actual: "0%"
|
|
gaps_identificados:
|
|
- "Epic completo sin implementar"
|
|
|
|
impacto_gaps: "N/A"
|
|
accion_requerida: "No iniciado - futuro"
|
|
esfuerzo_total: "200h (estimado)"
|
|
|
|
# ==============================================================================
|
|
# Matriz de Dependencias Cruzadas
|
|
# ==============================================================================
|
|
|
|
matriz_dependencias:
|
|
- gap_origen: "GAP-P1-001"
|
|
nombre: "Market Data OHLCV"
|
|
bloquea:
|
|
- componente: "Charts frontend"
|
|
descripcion: "Charts no pueden mostrar datos históricos"
|
|
- componente: "ML Chart Overlays (GAP-P1-003)"
|
|
descripcion: "Overlays necesitan datos OHLCV para contextualizar señales"
|
|
- componente: "Backtest feature"
|
|
descripcion: "Backtest necesita datos históricos"
|
|
|
|
prioridad_propagada: "P1"
|
|
impacto_cascada: "alto"
|
|
|
|
- gap_origen: "GAP-P0-003"
|
|
nombre: "Trading Agents sin UI"
|
|
bloquea:
|
|
- componente: "OQI-004 Investment Accounts"
|
|
descripcion: "Investment accounts deben linkear con bots"
|
|
- componente: "Bot monitoring dashboard"
|
|
descripcion: "Dashboard de métricas sin datos"
|
|
- componente: "User onboarding"
|
|
descripcion: "Usuarios no pueden usar feature core"
|
|
|
|
prioridad_propagada: "P0"
|
|
impacto_cascada: "crítico"
|
|
|
|
- gap_origen: "GAP-P1-002"
|
|
nombre: "Notifications sin API"
|
|
bloquea:
|
|
- componente: "Trading alerts"
|
|
descripcion: "Alertas de trading no se pueden enviar"
|
|
- componente: "System notifications"
|
|
descripcion: "Notificaciones de sistema no disponibles"
|
|
- componente: "Real-time updates"
|
|
descripcion: "Updates en tiempo real limitados"
|
|
|
|
prioridad_propagada: "P1"
|
|
impacto_cascada: "alto"
|
|
|
|
- gap_origen: "GAP-P0-002"
|
|
nombre: "User Profile sin servicio"
|
|
bloquea:
|
|
- componente: "User onboarding"
|
|
descripcion: "Usuarios no pueden completar perfil"
|
|
- componente: "Settings page"
|
|
descripcion: "Página de settings sin funcionalidad"
|
|
- componente: "Personalization"
|
|
descripcion: "Personalización limitada"
|
|
|
|
prioridad_propagada: "P0"
|
|
impacto_cascada: "alto"
|
|
|
|
- gap_origen: "ARCH-001"
|
|
nombre: "Acceso directo a Python"
|
|
bloquea:
|
|
- componente: "Security audit"
|
|
descripcion: "No se pueden auditar llamadas directas"
|
|
- componente: "Rate limiting ML"
|
|
descripcion: "ML/LLM sin rate limiting consistente"
|
|
- componente: "Token refresh"
|
|
descripcion: "Servicios directos no manejan token expiration"
|
|
|
|
prioridad_propagada: "P1"
|
|
impacto_cascada: "alto"
|
|
|
|
# ==============================================================================
|
|
# Plan de Ejecución Recomendado
|
|
# ==============================================================================
|
|
|
|
plan_ejecucion:
|
|
fase_1_bloqueantes:
|
|
duracion: "2 semanas (54h)"
|
|
prioridad: "P0"
|
|
|
|
gaps:
|
|
- id: "GAP-P0-001"
|
|
titulo: "Password Recovery sin UI"
|
|
esfuerzo: "8h"
|
|
orden: 1
|
|
|
|
- id: "GAP-P0-002"
|
|
titulo: "User Profile sin servicio"
|
|
esfuerzo: "6h"
|
|
orden: 2
|
|
|
|
- id: "GAP-P0-003"
|
|
titulo: "Trading Agents sin UI"
|
|
esfuerzo: "40h"
|
|
orden: 3
|
|
notas: "Iniciar con 20h en Fase 1, completar 20h en Fase 2"
|
|
|
|
criterio_completado: "Todos los gaps P0 resueltos, sin bloqueantes"
|
|
checkpoint: "CP-01"
|
|
|
|
fase_2_criticos:
|
|
duracion: "2 semanas (76h)"
|
|
prioridad: "P1"
|
|
|
|
gaps:
|
|
- id: "GAP-P1-001"
|
|
titulo: "Market Data OHLCV"
|
|
esfuerzo: "16h"
|
|
orden: 1
|
|
dependencias: []
|
|
|
|
- id: "GAP-P1-002"
|
|
titulo: "Notifications API"
|
|
esfuerzo: "20h"
|
|
orden: 2
|
|
dependencias: []
|
|
|
|
- id: "GAP-P1-003"
|
|
titulo: "ML Chart Overlays"
|
|
esfuerzo: "24h"
|
|
orden: 3
|
|
dependencias: ["GAP-P1-001"]
|
|
|
|
- id: "GAP-P1-004"
|
|
titulo: "2FA flujo completo"
|
|
esfuerzo: "16h"
|
|
orden: 4
|
|
dependencias: []
|
|
|
|
- id: "GAP-P0-003 (continuación)"
|
|
titulo: "Trading Agents UI (20h restantes)"
|
|
esfuerzo: "20h"
|
|
orden: 1
|
|
dependencias: []
|
|
|
|
criterio_completado: "Cobertura Backend-Frontend >= 90%"
|
|
checkpoint: "CP-02"
|
|
|
|
fase_3_importantes:
|
|
duracion: "2 semanas (78h seleccionados)"
|
|
prioridad: "P2"
|
|
|
|
gaps_seleccionados:
|
|
- id: "GAP-P2-001"
|
|
titulo: "Audit system"
|
|
esfuerzo: "32h"
|
|
justificacion: "Necesario para admin dashboard"
|
|
|
|
- id: "GAP-P2-002"
|
|
titulo: "Currency Exchange"
|
|
esfuerzo: "16h"
|
|
justificacion: "Multi-moneda requirement"
|
|
|
|
- id: "GAP-P2-003"
|
|
titulo: "Risk Assessment"
|
|
esfuerzo: "12h"
|
|
justificacion: "Investment workflow"
|
|
|
|
- id: "GAP-P2-004"
|
|
titulo: "Course Reviews"
|
|
esfuerzo: "6h"
|
|
justificacion: "Quick win"
|
|
|
|
- id: "GAP-P2-005"
|
|
titulo: "OAuth flows"
|
|
esfuerzo: "12h"
|
|
justificacion: "Completar auth module"
|
|
|
|
criterio_completado: "Cobertura DDL-Backend >= 95%"
|
|
checkpoint: "CP-03"
|
|
|
|
fase_4_consolidacion:
|
|
duracion: "2 semanas"
|
|
prioridad: "Arquitectura + Tests"
|
|
|
|
tareas:
|
|
- id: "ARCH-001"
|
|
titulo: "Migrar acceso Python via Express"
|
|
esfuerzo: "16h"
|
|
|
|
- id: "ARCH-002"
|
|
titulo: "Migrar servicios a apiClient"
|
|
esfuerzo: "8h"
|
|
|
|
- tarea: "Tests de integración E2E"
|
|
esfuerzo: "32h"
|
|
|
|
- tarea: "Performance optimization"
|
|
esfuerzo: "16h"
|
|
|
|
- tarea: "Security audit"
|
|
esfuerzo: "8h"
|
|
|
|
criterio_completado: "Coherencia global >= 95%, arquitectura consistente"
|
|
checkpoint: "CP-04"
|
|
|
|
# ==============================================================================
|
|
# Métricas de Validación
|
|
# ==============================================================================
|
|
|
|
metricas_validacion:
|
|
coherencia_actual:
|
|
ddl_backend: "85%"
|
|
backend_frontend: "77.5%"
|
|
coherencia_global: "81.25%"
|
|
|
|
coherencia_target:
|
|
ddl_backend: "95%"
|
|
backend_frontend: "90%"
|
|
coherencia_global: "95%"
|
|
|
|
gaps_actuales:
|
|
p0: 3
|
|
p1: 4
|
|
p2: 12
|
|
p3: 4
|
|
total: 23
|
|
|
|
gaps_target:
|
|
p0: 0
|
|
p1: 0
|
|
p2: "reducir 50%"
|
|
p3: "mantener"
|
|
|
|
checkpoints:
|
|
CP-01:
|
|
criterio: "Gaps P0 resueltos"
|
|
target: "0 bloqueantes"
|
|
fecha_estimada: "2026-02-10"
|
|
|
|
CP-02:
|
|
criterio: "Cobertura Backend-Frontend >= 90%"
|
|
target: "90%"
|
|
fecha_estimada: "2026-02-24"
|
|
|
|
CP-03:
|
|
criterio: "Cobertura DDL-Backend >= 95%"
|
|
target: "95%"
|
|
fecha_estimada: "2026-03-10"
|
|
|
|
CP-04:
|
|
criterio: "Coherencia global >= 95%"
|
|
target: "95%"
|
|
fecha_estimada: "2026-03-24"
|
|
|
|
CP-05:
|
|
criterio: "Arquitectura consistente"
|
|
target: "100% servicios usando apiClient + gateway"
|
|
fecha_estimada: "2026-03-24"
|
|
|
|
# ==============================================================================
|
|
# Resumen de Esfuerzo
|
|
# ==============================================================================
|
|
|
|
resumen_esfuerzo:
|
|
total_gaps: 23
|
|
total_horas_estimadas: 292
|
|
|
|
por_prioridad:
|
|
P0:
|
|
gaps: 3
|
|
horas: 54
|
|
duracion: "1.5 semanas"
|
|
|
|
P1:
|
|
gaps: 4
|
|
horas: 76
|
|
duracion: "2 semanas"
|
|
|
|
P2:
|
|
gaps: 12
|
|
horas: 144
|
|
duracion: "3.5 semanas"
|
|
|
|
P3:
|
|
gaps: 4
|
|
horas: 52
|
|
duracion: "1.5 semanas"
|
|
|
|
arquitectura_refactor:
|
|
horas: 24
|
|
duracion: "0.5 semanas"
|
|
|
|
tests_e2e:
|
|
horas: 32
|
|
duracion: "1 semana"
|
|
|
|
total_proyecto:
|
|
horas: 348
|
|
semanas: 10
|
|
fecha_inicio_estimada: "2026-01-28"
|
|
fecha_fin_estimada: "2026-04-08"
|
|
|
|
# ==============================================================================
|
|
# Próximas Acciones
|
|
# ==============================================================================
|
|
|
|
proximas_acciones:
|
|
inmediato:
|
|
- accion: "Aprobar plan de ejecución"
|
|
owner: "Product Owner"
|
|
deadline: "2026-01-28"
|
|
|
|
- accion: "Iniciar FASE 1 - Gaps P0"
|
|
owner: "Dev Team"
|
|
deadline: "2026-01-29"
|
|
tareas:
|
|
- "Implementar Password Recovery UI (GAP-P0-001)"
|
|
- "Crear User Profile service (GAP-P0-002)"
|
|
- "Iniciar Trading Agents UI (GAP-P0-003)"
|
|
|
|
corto_plazo:
|
|
- accion: "Completar FASE 1"
|
|
deadline: "2026-02-10"
|
|
checkpoint: "CP-01"
|
|
|
|
- accion: "Iniciar FASE 2 - Gaps P1"
|
|
deadline: "2026-02-11"
|
|
|
|
medio_plazo:
|
|
- accion: "Completar FASE 2 y FASE 3"
|
|
deadline: "2026-03-10"
|
|
checkpoints: ["CP-02", "CP-03"]
|
|
|
|
largo_plazo:
|
|
- accion: "FASE 4 - Consolidación arquitectural"
|
|
deadline: "2026-03-24"
|
|
checkpoint: "CP-04"
|
|
|
|
# ==============================================================================
|
|
# Notas Finales
|
|
# ==============================================================================
|
|
|
|
notas_finales: |
|
|
Este análisis consolidado identifica 23 gaps únicos después de eliminar
|
|
3 duplicados encontrados entre las fases de análisis DDL-Backend y
|
|
Backend-Frontend.
|
|
|
|
Los 3 gaps P0 son BLOQUEANTES y deben resolverse antes de considerar
|
|
el proyecto production-ready. En particular, GAP-P0-003 (Trading Agents
|
|
sin UI) es crítico ya que representa un feature core completamente
|
|
sin interfaz de usuario.
|
|
|
|
Las 4 cadenas de dependencia identificadas (CHAIN-001 a CHAIN-004) muestran
|
|
cómo gaps en una capa (DDL, Backend, Frontend) bloquean funcionalidad
|
|
end-to-end. Resolver estos gaps desbloquea múltiples features.
|
|
|
|
Las 2 inconsistencias arquitecturales (ARCH-001, ARCH-002) deben abordarse
|
|
en FASE 4 para asegurar un sistema robusto, seguro y mantenible.
|
|
|
|
Estimación total: 348 horas (~10 semanas) para alcanzar 95% coherencia global.
|
|
|
|
# ==============================================================================
|
|
# Metadata de Validación
|
|
# ==============================================================================
|
|
|
|
validation:
|
|
metodologia: |
|
|
1. Lectura de DDL-BACKEND-COHERENCE.yml (18 gaps DDL-Backend)
|
|
2. Extracción de gaps Backend-Frontend de COHERENCE-MASTER-REPORT.md
|
|
3. Lectura de GAPS-TRACKING.yml para detalles de implementación
|
|
4. Detección de gaps duplicados entre análisis
|
|
5. Mapeo de cadenas de dependencia críticas (CHAIN-001 a CHAIN-004)
|
|
6. Consolidación de gaps únicos (23 gaps)
|
|
7. Clasificación por tipo, prioridad, impacto
|
|
8. Estimación de esfuerzos y dependencias
|
|
9. Creación de plan de ejecución por fases
|
|
|
|
archivos_validados:
|
|
- orchestration/analisis/coherencia/DDL-BACKEND-COHERENCE.yml
|
|
- orchestration/analisis/coherencia/COHERENCE-MASTER-REPORT.md
|
|
- orchestration/analisis/coherencia/GAPS-TRACKING.yml
|
|
|
|
validation_date: "2026-01-27"
|
|
validated_by: "Claude Opus 4.5 - FASE 4 Cross-Validation"
|
|
next_review: "2026-02-15"
|
|
|
|
criterios_completitud:
|
|
- criterio: "Todos los gaps DDL-Backend identificados"
|
|
estado: "✓ Completo - 18 gaps"
|
|
|
|
- criterio: "Todos los gaps Backend-Frontend identificados"
|
|
estado: "✓ Completo - 8 gaps extraídos de Master Report"
|
|
|
|
- criterio: "Gaps duplicados detectados y consolidados"
|
|
estado: "✓ Completo - 3 duplicados consolidados"
|
|
|
|
- criterio: "Cadenas de dependencia mapeadas"
|
|
estado: "✓ Completo - 4 cadenas críticas"
|
|
|
|
- criterio: "Plan de ejecución definido"
|
|
estado: "✓ Completo - 4 fases + checkpoints"
|
|
|
|
- criterio: "Métricas de validación establecidas"
|
|
estado: "✓ Completo - 5 checkpoints"
|
|
|
|
# ==============================================================================
|
|
# END OF FILE
|
|
# ==============================================================================
|