# CHECKPOINTS.yml - Trading Platform # Criterios de validación y gates de calidad para el proyecto # Fecha: 2026-01-27 # Sistema: SIMCO v4.0.0 metadata: proyecto: trading-platform fecha_creacion: 2026-01-27 version: 1.0.0 owner: Claude Opus 4.5 estado_actual: "Desarrollo Activo - Post MVP" completitud_global: 60% coherencia_global_actual: 81.25% coherencia_global_target: 95% # ============================================================================== # VALIDATION GATES - Checkpoints GO/NO-GO # ============================================================================== validation_gates: # --------------------------------------------------------------------------- # CHECKPOINT 01: Resolución de Gaps Bloqueantes (P0) # --------------------------------------------------------------------------- - gate: CP-01 nombre: "Post Gaps P0 - Bloqueantes Resueltos" descripcion: "Todos los gaps bloqueantes (P0) deben estar resueltos" fase: "Post-MVP - Bloqueantes" status: NO_GO fecha_target: "2026-02-03" duracion_estimada: "1.5 semanas (54h)" criterios: - criterio: "0 gaps bloqueantes abiertos" metrica: gaps_p0_count umbral: 0 actual: 3 estado: FAIL detalles: - "GAP-P0-001: Password Recovery sin UI (8h)" - "GAP-P0-002: User Profile sin servicio (6h)" - "GAP-P0-003: Trading Agents sin UI (40h)" - criterio: "Password Recovery funcional" tipo: functional_test metrica: password_recovery_implemented umbral: true actual: false estado: FAIL tests_requeridos: - "E2E: Flujo completo forgot password -> email -> reset" - "Unit: PasswordRecoveryService funcionando" - "Integration: Email service conectado" - criterio: "User Profile servicio implementado" tipo: functional_test metrica: user_profile_service_exists umbral: true actual: false estado: FAIL tests_requeridos: - "GET /users/profile funcional" - "PUT /users/profile actualiza datos" - "Avatar upload funcionando" - criterio: "Trading Agents UI al menos parcial (50%)" tipo: functional_test metrica: trading_agents_ui_coverage umbral: 50 actual: 0 estado: FAIL tests_requeridos: - "Lista de agentes (Atlas, Orion, Nova) visible" - "Configuración básica de agente funcional" - "Status de agente en tiempo real" riesgos: - "Sin CP-01: NO se puede lanzar a producción" - "Password recovery es requerimiento legal/seguridad" - "User profile es feature core de plataforma" # --------------------------------------------------------------------------- # CHECKPOINT 02: Coherencia DDL-Backend >= 95% # --------------------------------------------------------------------------- - gate: CP-02 nombre: "Coherencia DDL-Backend >= 95%" descripcion: "Cobertura de servicios backend para tablas DDL" fase: "Consolidación Backend" status: NO_GO fecha_target: "2026-02-10" duracion_estimada: "1 semana (40h)" criterios: - criterio: "Cobertura servicios >= 95%" metrica: ddl_backend_coverage umbral: 95 actual: 85 estado: FAIL formula: "(tablas_con_servicio / total_tablas) * 100" detalles: - "89 tablas DDL totales" - "76 tablas con servicio (85%)" - "13 tablas faltantes (15%)" - criterio: "Servicios backend críticos implementados" tipo: functional_test metrica: critical_services_coverage umbral: 100 actual: 85 estado: FAIL servicios_faltantes: - "marketData.service.ts (GAP-P1-001) - 16h" - "notifications.service.ts completo (GAP-P1-002) - 20h" - "audit.service.ts (GAP-P2-001) - 32h" - "currencyExchange.service.ts (GAP-P2-002) - 16h" - "riskAssessment.service.ts (GAP-P2-003) - 12h" - criterio: "Endpoints documentados en Swagger" tipo: documentation metrica: swagger_coverage umbral: 100 actual: 70 estado: FAIL riesgos: - "Sin servicios backend: frontend no puede conectarse" - "Market data crítico para charts" - "Notifications core para UX" # --------------------------------------------------------------------------- # CHECKPOINT 03: Coherencia Backend-Frontend >= 90% # --------------------------------------------------------------------------- - gate: CP-03 nombre: "Coherencia Backend-Frontend >= 90%" descripcion: "Frontend consume endpoints backend correctamente" fase: "Consolidación Frontend" status: NO_GO fecha_target: "2026-02-17" duracion_estimada: "1 semana (40h)" criterios: - criterio: "Cobertura consumo endpoints >= 90%" metrica: backend_frontend_coverage umbral: 90 actual: 77.5 estado: FAIL formula: "(endpoints_consumidos / total_endpoints) * 100" detalles: - "187 endpoints totales" - "145 endpoints consumidos (77.5%)" - "42 endpoints sin consumir (22.5%)" - criterio: "ML Chart Overlays implementados" tipo: functional_test metrica: ml_chart_overlays_implemented umbral: true actual: false estado: FAIL esfuerzo: "24h (GAP-P1-003)" - criterio: "Frontend services usando apiClient" tipo: architectural metrica: services_using_apiclient umbral: 100 actual: 64 estado: FAIL servicios_sin_apiclient: - "portfolio.service.ts" - "adminService.ts" - "mlService.ts" - "llmAgentService.ts" - "backtestService.ts" riesgo: "Sin auto-refresh tokens, sin retry logic, sin manejo errores consistente" - criterio: "2FA flujo completo" tipo: functional_test metrica: two_factor_auth_complete umbral: true actual: false estado: FAIL esfuerzo: "16h (GAP-P1-004)" riesgos: - "UX inconsistente sin apiClient" - "Security risk sin 2FA completo" - "ML features no visibles sin overlays" # --------------------------------------------------------------------------- # CHECKPOINT 04: Consolidación Arquitectural # --------------------------------------------------------------------------- - gate: CP-04 nombre: "Consolidación Arquitectural" descripcion: "Acceso consistente a servicios backend y Python" fase: "Refactoring Arquitectural" status: NO_GO fecha_target: "2026-02-24" duracion_estimada: "1 semana (40h)" criterios: - criterio: "Acceso Python centralizado vía Express" tipo: architectural metrica: python_access_via_express umbral: 100 actual: 0 estado: FAIL problema: "Frontend accede directamente a servicios Python sin gateway" 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" solucion: "Migrar todo acceso via Express backend como gateway" - criterio: "100% servicios usando apiClient" tipo: architectural metrica: services_using_apiclient_percentage umbral: 100 actual: 64 estado: FAIL trabajo_requerido: "Migrar 5 servicios a apiClient" - criterio: "Consistencia manejo tokens" tipo: security metrica: token_handling_consistent umbral: true actual: false estado: FAIL problema: "Inconsistencia auth_token vs token (B-004)" status_blocker: "RESUELTO (P1)" riesgos: - "Security vulnerabilities sin gateway centralizado" - "Mantenibilidad baja con acceso directo" # --------------------------------------------------------------------------- # CHECKPOINT 05: Testing y Calidad # --------------------------------------------------------------------------- - gate: CP-05 nombre: "Testing y Calidad" descripcion: "Coverage y tests de integración completos" fase: "Quality Assurance" status: NO_GO fecha_target: "2026-03-03" duracion_estimada: "1 semana (40h)" criterios: - criterio: "Code coverage >= 80%" tipo: quality metrica: code_coverage umbral: 80 actual: 15 estado: FAIL nota: "Actualmente solo 153 E2E tests (video upload)" - criterio: "0 errores lint" tipo: quality metrica: lint_errors umbral: 0 actual: "unknown" estado: UNKNOWN - criterio: "0 errores TypeScript" tipo: quality metrica: type_errors umbral: 0 actual: "unknown" estado: UNKNOWN - criterio: "Tests E2E críticos implementados" tipo: functional_test metrica: e2e_critical_tests_count umbral: 20 actual: 5 estado: FAIL tests_requeridos: - "Login flow completo (email + password + 2FA)" - "Password recovery E2E" - "Trading order placement" - "Payment flow Stripe" - "ML signal generation" - "LLM chat interaction" - "Portfolio creation" - "Investment account wizard" - "Course enrollment + video playback" - "Notification delivery (push + email)" riesgos: - "Bajo coverage = bugs en producción" - "Sin E2E tests = regresiones no detectadas" # ============================================================================== # MÉTRICAS A MONITOREAR # ============================================================================== metricas_monitorear: coherencia_global: descripcion: "Promedio coherencia DDL-Backend-Frontend" actual: 81.25 target: 95 gap: -13.75 formula: "(ddl_backend_coverage + backend_frontend_coverage) / 2" frecuencia_medicion: "Semanal" gaps_por_prioridad: p0_bloqueantes: actual: 3 target: 0 esfuerzo_total: "54h" items: - "GAP-P0-001: Password Recovery (8h)" - "GAP-P0-002: User Profile (6h)" - "GAP-P0-003: Trading Agents UI (40h)" p1_criticos: actual: 4 target: 0 esfuerzo_total: "76h" items: - "GAP-P1-001: Market Data OHLCV (16h)" - "GAP-P1-002: Notifications API (20h)" - "GAP-P1-003: ML Chart Overlays (24h)" - "GAP-P1-004: 2FA completo (16h)" p2_importantes: actual: 5 target: 0 esfuerzo_total: "78h" items: - "GAP-P2-001: Audit system (32h)" - "GAP-P2-002: Currency Exchange (16h)" - "GAP-P2-003: Risk Assessment (12h)" - "GAP-P2-004: Course Reviews (6h)" - "GAP-P2-005: OAuth flows (12h)" coherencia_por_capa: ddl_backend: actual: 85 target: 95 gap: -10 tablas_totales: 89 tablas_con_servicio: 76 tablas_faltantes: 13 backend_frontend: actual: 77.5 target: 90 gap: -12.5 endpoints_totales: 187 endpoints_consumidos: 145 endpoints_faltantes: 42 coherencia_por_epica: oqi_001_auth: ddl: 100 backend: 95 frontend: 85 global: 93 estado: EXCELENTE oqi_002_education: ddl: 100 backend: 90 frontend: 96 global: 95 estado: EXCELENTE oqi_003_trading: ddl: 100 backend: 100 frontend: 95 global: 98 estado: EXCELENTE oqi_004_investment: ddl: 100 backend: 90 frontend: 100 global: 97 estado: EXCELENTE oqi_005_payments: ddl: 100 backend: 85 frontend: 92 global: 92 estado: EXCELENTE oqi_006_ml_signals: ddl: 100 backend: 100 frontend: 47 global: 82 estado: BUENO nota: "Frontend gap en ML overlays" oqi_007_llm_agent: ddl: 100 backend: 100 frontend: 67 global: 89 estado: BUENO nota: "Frontend gap en panels" oqi_008_portfolio: ddl: 100 backend: 100 frontend: 92 global: 97 estado: EXCELENTE oqi_009_mt4: ddl: 0 backend: 0 frontend: 0 global: 0 estado: NO_INICIADO nota: "Feature completa sin implementar" servicios_apiclient: actual: 64 target: 100 gap: -36 servicios_totales: 14 servicios_con_apiclient: 9 servicios_sin_apiclient: 5 acceso_python_directo: actual: 3 target: 0 servicios_con_acceso_directo: - mlService.ts - llmAgentService.ts - backtestService.ts # ============================================================================== # TESTS DE ACEPTACIÓN # ============================================================================== tests_aceptacion: # E2E Tests Críticos e2e_tests: - test: "Login flow E2E" id: E2E-001 tipo: e2e automatizado: false target: true prioridad: P0 escenario: "Usuario ingresa email + password -> recibe token -> accede a dashboard" criterio_exito: "Login exitoso en < 2s" dependencias: ["GAP-P0-002 resuelto"] - test: "Password recovery E2E" id: E2E-002 tipo: e2e automatizado: false target: true prioridad: P0 escenario: "Usuario forgot password -> email -> reset -> login exitoso" criterio_exito: "Email recibido en < 30s, reset exitoso" dependencias: ["GAP-P0-001 resuelto"] - test: "2FA flow E2E" id: E2E-003 tipo: e2e automatizado: false target: true prioridad: P1 escenario: "Usuario enable 2FA -> QR code -> verify TOTP -> login con 2FA" criterio_exito: "2FA funcionando correctamente" dependencias: ["GAP-P1-004 resuelto"] - test: "Trading order placement E2E" id: E2E-004 tipo: e2e automatizado: false target: true prioridad: P0 escenario: "Usuario selecciona symbol -> ingresa order -> confirma -> ejecuta" criterio_exito: "Order aparece en historial, balance actualizado" dependencias: ["GAP-P0-003 parcialmente resuelto"] - test: "ML signal visualization E2E" id: E2E-005 tipo: e2e automatizado: false target: true prioridad: P1 escenario: "Usuario abre chart -> ML overlay visible -> señales actualizadas" criterio_exito: "Overlays renderizados, latencia < 1s" dependencias: ["GAP-P1-003 resuelto"] - test: "Payment flow Stripe E2E" id: E2E-006 tipo: e2e automatizado: false target: true prioridad: P1 escenario: "Usuario selecciona plan -> Stripe checkout -> payment success" criterio_exito: "Payment confirmado, subscription activada" dependencias: ["OQI-005 completo"] - test: "Course enrollment + video playback E2E" id: E2E-007 tipo: e2e automatizado: true target: true prioridad: P2 escenario: "Usuario enrolls en curso -> ve video -> progreso guardado" criterio_exito: "Video reproduce, progreso persiste" dependencias: ["OQI-002 completo"] nota: "153 E2E tests existentes para video upload" - test: "LLM chat interaction E2E" id: E2E-008 tipo: e2e automatizado: false target: true prioridad: P2 escenario: "Usuario abre chat -> envía mensaje -> recibe respuesta LLM" criterio_exito: "Respuesta en < 5s, context mantenido" dependencias: ["OQI-007 completado al 70%"] - test: "Portfolio creation E2E" id: E2E-009 tipo: e2e automatizado: false target: true prioridad: P2 escenario: "Usuario crea portfolio -> agrega assets -> ve balance" criterio_exito: "Portfolio creado, balance calculado correctamente" dependencias: ["OQI-008 completado"] - test: "Notification delivery E2E" id: E2E-010 tipo: e2e automatizado: false target: true prioridad: P1 escenario: "Sistema genera notificación -> usuario recibe push + email" criterio_exito: "Notificación recibida en < 10s" dependencias: ["GAP-P1-002 resuelto"] # Integration Tests integration_tests: - test: "Backend API health check" id: INT-001 tipo: integration automatizado: true target: true prioridad: P0 endpoint: "GET /health" criterio_exito: "Status 200, servicios conectados" - test: "PostgreSQL connection pool" id: INT-002 tipo: integration automatizado: true target: true prioridad: P0 criterio_exito: "Pool activo, queries < 100ms" - test: "Redis cache funcionando" id: INT-003 tipo: integration automatizado: true target: true prioridad: P0 criterio_exito: "Set/Get funcionando, TTL respetado" - test: "ML Engine connection" id: INT-004 tipo: integration automatizado: true target: true prioridad: P1 criterio_exito: "FastAPI responde, modelos cargados" - test: "LLM Agent connection" id: INT-005 tipo: integration automatizado: true target: true prioridad: P2 criterio_exito: "FastAPI responde, Ollama conectado" - test: "Trading Agents connection" id: INT-006 tipo: integration automatizado: true target: true prioridad: P1 criterio_exito: "FastAPI responde, agentes disponibles" # Unit Tests unit_tests: - test: "Auth service unit tests" id: UNIT-001 tipo: unit automatizado: true target: true prioridad: P0 coverage_target: 90 criterio_exito: "Login, register, logout, refresh testeados" - test: "Trading service unit tests" id: UNIT-002 tipo: unit automatizado: true target: true prioridad: P0 coverage_target: 85 criterio_exito: "Order placement, cancellation, history testeados" - test: "Payment service unit tests" id: UNIT-003 tipo: unit automatizado: true target: true prioridad: P1 coverage_target: 80 criterio_exito: "Stripe integration testeado" # ============================================================================== # UMBRALES DE CALIDAD # ============================================================================== umbrales_calidad: codigo: code_coverage: actual: 15 target: 80 umbral_minimo: 70 gap: -65 bloqueante: true nota: "Bloqueante para producción" lint_errors: actual: unknown target: 0 umbral_minimo: 0 bloqueante: true type_errors: actual: unknown target: 0 umbral_minimo: 0 bloqueante: true complexity: cyclomatic_max: 10 cognitive_max: 15 nota: "Refactorizar funciones que excedan" rendimiento: api_response_time: p50: "< 200ms" p95: "< 500ms" p99: "< 1s" frontend_load_time: inicial: "< 2s" interactivo: "< 3s" database_query_time: simple: "< 50ms" complex: "< 200ms" seguridad: vulnerabilities: critical: 0 high: 0 medium: "< 5" dependencies_outdated: critical: 0 all: "< 20%" arquitectura: services_using_apiclient: 100 python_access_via_express: 100 swagger_coverage: 100 endpoints_documented: 100 # ============================================================================== # RUTA CRÍTICA Y DEPENDENCIAS # ============================================================================== ruta_critica: semana_1_2: fecha_inicio: "2026-01-27" fecha_fin: "2026-02-03" objetivo: "Resolver Gaps P0 (Bloqueantes)" checkpoint: CP-01 esfuerzo: "54h" tareas: - tarea: "Implementar Password Recovery UI" id: TASK-P0-001 esfuerzo: "8h" owner: TBD bloqueante: true - tarea: "Crear userService.ts + endpoints" id: TASK-P0-002 esfuerzo: "6h" owner: TBD bloqueante: true - tarea: "Iniciar Trading Agents UI (50%)" id: TASK-P0-003 esfuerzo: "20h" owner: TBD bloqueante: true nota: "40h total, pero 50% suficiente para CP-01" semana_3_4: fecha_inicio: "2026-02-03" fecha_fin: "2026-02-10" objetivo: "Resolver Gaps P1 (Críticos) + Coherencia DDL-Backend" checkpoint: CP-02 esfuerzo: "76h" dependencias: ["CP-01 PASSED"] tareas: - tarea: "Crear marketData.service.ts" id: TASK-P1-001 esfuerzo: "16h" owner: TBD - tarea: "Completar Notifications API" id: TASK-P1-002 esfuerzo: "20h" owner: TBD - tarea: "ML Chart Overlays frontend" id: TASK-P1-003 esfuerzo: "24h" owner: TBD - tarea: "2FA flujo completo" id: TASK-P1-004 esfuerzo: "16h" owner: TBD semana_5_6: fecha_inicio: "2026-02-10" fecha_fin: "2026-02-17" objetivo: "Resolver Gaps P2 + Coherencia Backend-Frontend" checkpoint: CP-03 esfuerzo: "78h" dependencias: ["CP-02 PASSED"] tareas: - tarea: "Audit system servicios" id: TASK-P2-001 esfuerzo: "32h" owner: TBD - tarea: "Currency Exchange service" id: TASK-P2-002 esfuerzo: "16h" owner: TBD - tarea: "Risk Assessment service" id: TASK-P2-003 esfuerzo: "12h" owner: TBD - tarea: "Course Reviews + OAuth flows" id: TASK-P2-004 esfuerzo: "18h" owner: TBD semana_7_8: fecha_inicio: "2026-02-17" fecha_fin: "2026-02-24" objetivo: "Consolidación Arquitectural" checkpoint: CP-04 esfuerzo: "40h" dependencias: ["CP-03 PASSED"] tareas: - tarea: "Migrar acceso Python via Express" id: TASK-ARCH-001 esfuerzo: "16h" owner: TBD impacto: "Security + Consistency" - tarea: "Migrar servicios a apiClient" id: TASK-ARCH-002 esfuerzo: "16h" owner: TBD impacto: "UX + Error handling" - tarea: "Tests de integración" id: TASK-ARCH-003 esfuerzo: "8h" owner: TBD semana_9_10: fecha_inicio: "2026-02-24" fecha_fin: "2026-03-03" objetivo: "Testing y Calidad" checkpoint: CP-05 esfuerzo: "40h" dependencias: ["CP-04 PASSED"] tareas: - tarea: "Implementar E2E tests críticos" id: TASK-QA-001 esfuerzo: "24h" owner: TBD tests: 10 - tarea: "Aumentar code coverage a 80%" id: TASK-QA-002 esfuerzo: "16h" owner: TBD # ============================================================================== # CONDICIONES GO/NO-GO PARA PRODUCCIÓN # ============================================================================== condiciones_produccion: bloqueantes_absolutos: - condicion: "CP-01 PASSED" descripcion: "0 gaps P0 abiertos" estado: FAIL - condicion: "CP-02 PASSED" descripcion: "Coherencia DDL-Backend >= 95%" estado: FAIL - condicion: "Code coverage >= 70%" descripcion: "Coverage mínimo para producción" estado: FAIL - condicion: "0 vulnerabilidades críticas" descripcion: "Security audit passed" estado: UNKNOWN - condicion: "E2E tests críticos passed" descripcion: "Login, trading, payment funcionando" estado: FAIL recomendados: - condicion: "CP-03 PASSED" descripcion: "Coherencia Backend-Frontend >= 90%" estado: FAIL - condicion: "CP-04 PASSED" descripcion: "Arquitectura consolidada" estado: FAIL - condicion: "Code coverage >= 80%" descripcion: "Coverage recomendado" estado: FAIL nice_to_have: - condicion: "CP-05 PASSED" descripcion: "QA completo" estado: FAIL - condicion: "OQI-009 implementado" descripcion: "MT4 Gateway funcional" estado: FAIL # ============================================================================== # TRACKING Y REPORTES # ============================================================================== tracking: frecuencia_revision: "Semanal" responsable: "Project Lead" formato_reporte: "YAML update + Executive summary" metricas_semanales: - coherencia_global - gaps_p0_count - gaps_p1_count - gaps_p2_count - code_coverage - tests_passed - checkpoints_status escalacion: - trigger: "CP-01 no resuelto en fecha target" accion: "Escalar a PM, re-priorizar recursos" - trigger: "Code coverage < 50% a 1 semana de release" accion: "Postponer release, focus en testing" - trigger: "Gaps P0 nuevos descubiertos" accion: "Freeze features, resolver bloqueantes" # ============================================================================== # HISTORIAL DE CAMBIOS # ============================================================================== historial: - fecha: "2026-01-27" version: "1.0.0" cambios: "Creación inicial del archivo de checkpoints" autor: "Claude Opus 4.5" base: "COHERENCE-MASTER-REPORT.md + PROJECT-STATUS.md"