# ============================================================================== # 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 # ==============================================================================