[TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD] docs: Complete 6-phase database modeling analysis
Comprehensive analysis of 101 DDL tables across 11 schemas: - Phase 1-2: Schema validation, 37 gaps cataloged (3 resolved) - Phase 3: Integrity audit (80 FKs, 89 CHECKs, 17 issues: 2 CRIT/5 HIGH) - Phase 4: DDL-Backend mapping (84% interfaces, 75% services, 61% controllers) - Phase 5: Documentation purge catalog (201 files analyzed) - Phase 6: Remediation plan (4 sprints, 204h) Key finding: Backend uses raw SQL + pg Pool (NOT TypeORM). 13 deliverables + updated inventories to v2.0.0. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
14133175af
commit
b9098ca91c
@ -1,333 +0,0 @@
|
||||
---
|
||||
id: "ANALISIS-GAPS-DOCUMENTACION"
|
||||
title: "Documentación Trading Platform vs Gamilit"
|
||||
type: "Documentation"
|
||||
project: "trading-platform"
|
||||
version: "1.0.0"
|
||||
updated_date: "2026-01-04"
|
||||
status: "OUTDATED"
|
||||
---
|
||||
|
||||
> **OUTDATED (2026-01-28)**
|
||||
> Este analisis fue realizado en 2025-12-05 y las metricas han cambiado significativamente.
|
||||
> Desde entonces se han agregado inventarios YAML consolidados (DATABASE, BACKEND, FRONTEND, ML).
|
||||
> Los gaps de trazabilidad han sido parcialmente cerrados.
|
||||
> Contiene link roto a ruta absoluta "/home/isem" que ya no es valida.
|
||||
> Para estado actual, consultar INVENTORY-SYNC-REPORT.md en esta carpeta.
|
||||
|
||||
# Análisis de Gaps: Documentación Trading Platform vs Gamilit
|
||||
|
||||
**Fecha:** 2025-12-05
|
||||
**Autor:** Requirements-Analyst
|
||||
**Estado:** ~~Crítico~~ PARCIALMENTE RESUELTO
|
||||
|
||||
---
|
||||
|
||||
## Resumen Ejecutivo
|
||||
|
||||
La documentación actual de Trading Platform **NO cumple** con la filosofía y estructura de Gamilit. Aunque sigue una estructura similar superficialmente, carece de los elementos críticos que hacen funcional el sistema documental:
|
||||
|
||||
| Métrica | Trading Platform | Gamilit | Gap |
|
||||
|---------|-----------------|---------|-----|
|
||||
| Archivos Markdown | 168 | 469 | -64% |
|
||||
| Archivos YAML (Trazabilidad) | 1 | 21 | -95% |
|
||||
| Inventarios Consolidados | 0 | 4 | -100% |
|
||||
| TRACEABILITY.yml por épica | 1/8 (12.5%) | 100% | -87.5% |
|
||||
| Documentación Transversal | 0% | 95% | -95% |
|
||||
|
||||
---
|
||||
|
||||
## Problema Principal
|
||||
|
||||
La documentación actual es **descriptiva pero no funcional**:
|
||||
|
||||
### Lo que TIENE (Descripción)
|
||||
- README.md con descripciones de épicas
|
||||
- Requerimientos funcionales (RF-xxx)
|
||||
- Especificaciones técnicas (ET-xxx)
|
||||
- Historias de usuario (US-xxx)
|
||||
|
||||
### Lo que FALTA (Funcionalidad)
|
||||
|
||||
1. **Sin Inventario de Objetos** - No hay registro centralizado de:
|
||||
- Tablas de BD creadas
|
||||
- Endpoints de API
|
||||
- Componentes frontend
|
||||
- Modelos ML
|
||||
|
||||
2. **Sin Trazabilidad Real** - No se puede:
|
||||
- Rastrear un requerimiento hasta el código
|
||||
- Identificar qué código implementa qué user story
|
||||
- Ver dependencias entre componentes
|
||||
|
||||
3. **Sin Control de Duplicados** - No hay forma de:
|
||||
- Verificar si un endpoint ya existe
|
||||
- Saber si una tabla ya fue creada
|
||||
- Detectar funcionalidades duplicadas
|
||||
|
||||
---
|
||||
|
||||
## Gaps Críticos Detallados
|
||||
|
||||
### GAP-1: Sin Inventarios Consolidados (CRÍTICO)
|
||||
|
||||
**Impacto:** Imposible saber qué objetos existen en el proyecto
|
||||
|
||||
**En Gamilit existe:**
|
||||
```yaml
|
||||
# DATABASE_INVENTORY.yml
|
||||
schemas: 13
|
||||
tables: 104
|
||||
indexes: 162
|
||||
functions: 36
|
||||
triggers: 18
|
||||
views: 22
|
||||
enums: 15
|
||||
rls_policies: 45
|
||||
total_objects: 415
|
||||
```
|
||||
|
||||
**En Trading Platform:** NO EXISTE
|
||||
|
||||
**Consecuencia:**
|
||||
- No sabemos cuántas tablas tenemos
|
||||
- No sabemos cuántos endpoints
|
||||
- Riesgo alto de duplicar funcionalidad
|
||||
|
||||
---
|
||||
|
||||
### GAP-2: TRACEABILITY.yml Solo en 1/8 Épicas (CRÍTICO)
|
||||
|
||||
**Impacto:** Sin mapeo de requerimientos a código en 7 épicas
|
||||
|
||||
**Situación:**
|
||||
| Épica | TRACEABILITY.yml |
|
||||
|-------|------------------|
|
||||
| OQI-001 | ✅ Existe |
|
||||
| OQI-002 | ❌ NO EXISTE |
|
||||
| OQI-003 | ❌ NO EXISTE |
|
||||
| OQI-004 | ❌ NO EXISTE |
|
||||
| OQI-005 | ❌ NO EXISTE |
|
||||
| OQI-006 | ❌ NO EXISTE |
|
||||
| OQI-007 | ❌ NO EXISTE |
|
||||
| OQI-008 | ❌ NO EXISTE |
|
||||
|
||||
**Consecuencia:**
|
||||
- Los RF/ET/US de OQI-002 a OQI-008 son documentos "huérfanos"
|
||||
- No se puede verificar implementación vs especificación
|
||||
- No hay lista de archivos a crear
|
||||
|
||||
---
|
||||
|
||||
### GAP-3: Documentación Transversal Vacía (CRÍTICO)
|
||||
|
||||
**Impacto:** Sin métricas, roadmap, ni tracking de sprints
|
||||
|
||||
**Directorios vacíos:**
|
||||
```
|
||||
/docs/90-transversal/
|
||||
├── sprints/ ❌ VACÍO
|
||||
├── metricas/ ❌ VACÍO
|
||||
├── roadmap/ ❌ VACÍO
|
||||
└── gaps/ ❌ VACÍO (hasta ahora)
|
||||
```
|
||||
|
||||
**Consecuencia:**
|
||||
- No hay tracking de progreso por sprint
|
||||
- No hay métricas de proyecto
|
||||
- No hay visibilidad de deuda técnica
|
||||
|
||||
---
|
||||
|
||||
### GAP-4: Sin Índice Maestro (_MAP.md raíz)
|
||||
|
||||
**Impacto:** Difícil navegación del proyecto
|
||||
|
||||
**En Gamilit:** `/docs/_MAP.md` es el punto de entrada único
|
||||
|
||||
**En Trading Platform:** NO EXISTE
|
||||
|
||||
---
|
||||
|
||||
### GAP-5: Sin Guías de Desarrollo
|
||||
|
||||
**Impacto:** Desarrolladores sin referencia técnica
|
||||
|
||||
**Directorios vacíos:**
|
||||
```
|
||||
/docs/95-guias-desarrollo/
|
||||
├── backend/ ❌ VACÍO
|
||||
├── frontend/ ❌ VACÍO
|
||||
├── database/ ❌ VACÍO
|
||||
└── ml-engine/ ❌ VACÍO
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### GAP-6: Referencias Cruzadas Inconsistentes
|
||||
|
||||
**Impacto:** No se puede navegar de RF → ET → US → Código
|
||||
|
||||
**Ejemplo del problema:**
|
||||
|
||||
En `RF-AUTH-001-oauth.md`:
|
||||
```markdown
|
||||
## Referencias
|
||||
- ET-AUTH-001-oauth.md ← Link manual, puede romperse
|
||||
```
|
||||
|
||||
**En Gamilit (correcto):**
|
||||
```yaml
|
||||
# TRACEABILITY.yml
|
||||
RF-AUTH-001:
|
||||
specs: [ET-AUTH-001]
|
||||
user_stories: [US-AUTH-003, US-AUTH-004]
|
||||
implementation:
|
||||
database:
|
||||
- schema: auth
|
||||
tables: [oauth_accounts, oauth_providers]
|
||||
backend:
|
||||
- path: src/modules/auth/services/oauth.service.ts
|
||||
frontend:
|
||||
- path: src/features/auth/components/OAuthButtons.tsx
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Plan de Corrección
|
||||
|
||||
### Fase 1: Críticos (Antes de OQI-002)
|
||||
|
||||
| # | Acción | Esfuerzo | Prioridad |
|
||||
|---|--------|----------|-----------|
|
||||
| 1 | Crear `/docs/_MAP.md` (índice maestro) | 2h | P0 |
|
||||
| 2 | Crear `DATABASE_INVENTORY.yml` | 4h | P0 |
|
||||
| 3 | Crear `BACKEND_INVENTORY.yml` | 3h | P0 |
|
||||
| 4 | Crear `FRONTEND_INVENTORY.yml` | 2h | P0 |
|
||||
| 5 | Crear `TRACEABILITY.yml` para OQI-002 a OQI-008 | 8h | P0 |
|
||||
| 6 | Poblar `/docs/90-transversal/roadmap/` | 2h | P0 |
|
||||
|
||||
**Total Fase 1:** ~21 horas
|
||||
|
||||
### Fase 2: Importantes (Durante OQI-002 a OQI-004)
|
||||
|
||||
| # | Acción | Esfuerzo | Prioridad |
|
||||
|---|--------|----------|-----------|
|
||||
| 7 | Crear estructura de sprints | 4h | P1 |
|
||||
| 8 | Crear estructura de métricas | 3h | P1 |
|
||||
| 9 | Crear guía backend básica | 4h | P1 |
|
||||
| 10 | Crear guía frontend básica | 4h | P1 |
|
||||
| 11 | Crear guía database básica | 4h | P1 |
|
||||
|
||||
**Total Fase 2:** ~19 horas
|
||||
|
||||
### Fase 3: Complementarios (Durante OQI-005 a OQI-008)
|
||||
|
||||
| # | Acción | Esfuerzo | Prioridad |
|
||||
|---|--------|----------|-----------|
|
||||
| 12 | Completar todas las guías | 8h | P2 |
|
||||
| 13 | Crear análisis de reutilización Gamilit | 4h | P2 |
|
||||
| 14 | Documentar estándares | 4h | P2 |
|
||||
| 15 | Crear templates reutilizables | 4h | P2 |
|
||||
|
||||
**Total Fase 3:** ~20 horas
|
||||
|
||||
---
|
||||
|
||||
## Estructura Objetivo (Post-Corrección)
|
||||
|
||||
```
|
||||
docs/
|
||||
├── _MAP.md ← NUEVO: Índice maestro
|
||||
├── 00-vision-general/
|
||||
│ └── _MAP.md
|
||||
├── 01-arquitectura/
|
||||
│ ├── ARQUITECTURA-UNIFICADA.md ✅ Existe
|
||||
│ └── INTEGRACION-TRADINGAGENT.md ✅ Existe
|
||||
├── 02-definicion-modulos/
|
||||
│ ├── _MAP.md ✅ Actualizado
|
||||
│ ├── OQI-001-fundamentos-auth/
|
||||
│ │ ├── implementacion/
|
||||
│ │ │ └── TRACEABILITY.yml ✅ Existe
|
||||
│ ├── OQI-002-education/
|
||||
│ │ ├── implementacion/
|
||||
│ │ │ └── TRACEABILITY.yml ← NUEVO
|
||||
│ ├── ... (igual para OQI-003 a OQI-008)
|
||||
├── 90-transversal/
|
||||
│ ├── inventarios/
|
||||
│ │ ├── DATABASE_INVENTORY.yml ← NUEVO
|
||||
│ │ ├── BACKEND_INVENTORY.yml ← NUEVO
|
||||
│ │ ├── FRONTEND_INVENTORY.yml ← NUEVO
|
||||
│ │ └── ML_INVENTORY.yml ← NUEVO
|
||||
│ ├── sprints/
|
||||
│ │ └── SPRINT-XX.md ← NUEVOS
|
||||
│ ├── roadmap/
|
||||
│ │ └── ROADMAP-GENERAL.md ← NUEVO
|
||||
│ ├── metricas/
|
||||
│ │ └── KPIs.md ← NUEVO
|
||||
│ └── gaps/
|
||||
│ └── ANALISIS-GAPS.md ✅ Este documento
|
||||
├── 95-guias-desarrollo/
|
||||
│ ├── backend/
|
||||
│ │ └── GUIA-BACKEND.md ← NUEVO
|
||||
│ ├── frontend/
|
||||
│ │ └── GUIA-FRONTEND.md ← NUEVO
|
||||
│ ├── database/
|
||||
│ │ └── GUIA-DATABASE.md ← NUEVO
|
||||
│ └── ml-engine/
|
||||
│ └── GUIA-ML.md ← NUEVO
|
||||
└── 97-adr/
|
||||
└── ... (existentes)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Beneficios Post-Corrección
|
||||
|
||||
### 1. Trazabilidad Completa
|
||||
- Cada requerimiento mapeado a código
|
||||
- Fácil auditoría de completitud
|
||||
|
||||
### 2. Prevención de Duplicados
|
||||
- Inventarios centralizados evitan crear objetos repetidos
|
||||
- Búsqueda rápida antes de implementar
|
||||
|
||||
### 3. Onboarding Rápido
|
||||
- Nuevo desarrollador puede entender el proyecto en <30 min
|
||||
- Guías específicas por tecnología
|
||||
|
||||
### 4. Control de Progreso
|
||||
- Métricas visibles
|
||||
- Tracking por sprint
|
||||
|
||||
### 5. Mantenibilidad
|
||||
- Referencias cruzadas actualizadas
|
||||
- Impacto de cambios visible
|
||||
|
||||
---
|
||||
|
||||
## Decisión Requerida
|
||||
|
||||
**Pregunta al Product Owner:**
|
||||
|
||||
¿Procedemos con la Fase 1 de corrección (~21 horas) ANTES de comenzar la implementación de OQI-002?
|
||||
|
||||
**Opciones:**
|
||||
1. **Sí, corregir primero** - Documentación sólida, desarrollo más ordenado
|
||||
2. **No, implementar y documentar en paralelo** - Más rápido pero mayor riesgo de inconsistencias
|
||||
3. **Híbrido** - Crear inventarios vacíos y llenarlos durante implementación
|
||||
|
||||
---
|
||||
|
||||
## Referencias
|
||||
|
||||
> **Nota:** Para patrones reutilizables, consultar el catálogo central en lugar de proyectos específicos.
|
||||
|
||||
- **Catálogo de patrones:** `shared/catalog/` *(componentes reutilizables)*
|
||||
- **Estándar de documentación:** `core/standards/ESTANDAR-ESTRUCTURA-DOCUMENTACION.md`
|
||||
- [TRACEABILITY.yml OQI-001](/home/isem/workspace/projects/trading-platform/docs/02-definicion-modulos/OQI-001-fundamentos-auth/implementacion/TRACEABILITY.yml)
|
||||
|
||||
---
|
||||
|
||||
*Documento generado por Requirements-Analyst*
|
||||
*Sistema NEXUS - Trading Platform*
|
||||
@ -1,9 +1,10 @@
|
||||
# PROJECT STATUS - Trading Platform (trading-platform)
|
||||
|
||||
**Fecha:** 2026-01-30
|
||||
**Fecha:** 2026-02-04
|
||||
**Estado:** Desarrollo Activo - Post MVP
|
||||
**Completitud Global:** ~60%
|
||||
**Última Tarea:** TASK-2026-01-30-ANALISIS-INTEGRACION (COMPLETADA - 4/4 Sprints)
|
||||
**Completitud Global:** ~65%
|
||||
**Última Tarea:** TASK-2026-02-04-SYNC-INVENTARIOS (COMPLETADA)
|
||||
**Sprint Activo:** Sprint 3 - COMPLETADO
|
||||
|
||||
---
|
||||
|
||||
@ -11,32 +12,33 @@
|
||||
|
||||
| Aspecto | Estado | Completitud | Notas |
|
||||
|---------|--------|-------------|-------|
|
||||
| Database DDL | Completo | 95% | 10 schemas, 89 tablas, pgvector agregado |
|
||||
| Database DDL | Completo | 95% | 11 schemas, 81 tablas, pgvector agregado |
|
||||
| Seeds | Parcial | 70% | Symbols, products, tickers, admin creados |
|
||||
| Backend API | Parcial | 48% | 113+ endpoints, ~50% implementados |
|
||||
| Frontend SPA | Parcial | 65% | 189 components, services criticos faltantes |
|
||||
| Backend API | Parcial | 65% | 116 endpoints, market-data/bots/audit modules |
|
||||
| Frontend SPA | Parcial | 70% | 225 components, 58 páginas |
|
||||
| ML Engine | Funcional | 75% | 3-level pipeline, 12 attention models |
|
||||
| Data Service | Incompleto | 20% | Solo estructura |
|
||||
| LLM Agent | Parcial | 45% | Sin persistence layer |
|
||||
| Trading Agents | Funcional | 75% | Atlas, Orion, Nova |
|
||||
| Tests | Bajo | 15% | 153 E2E (video upload) |
|
||||
| Tests | Bajo | 18% | E2E payments, unit tests básicos |
|
||||
| Documentacion | Alta | 85% | 280+ archivos, inventarios sync |
|
||||
| **Coherencia** | **Alta** | **92%** | **Gaps P0: 0, Gaps P1: 2** |
|
||||
|
||||
---
|
||||
|
||||
## Progreso por Epica (Actualizado 2026-01-27)
|
||||
## Progreso por Epica (Actualizado 2026-02-04 - Post Sprint 3)
|
||||
|
||||
| Epica | Modulo | DDL | Backend | Frontend | ML | Total |
|
||||
|-------|--------|-----|---------|----------|----|-------|
|
||||
| OQI-001 | Auth | 100% | 90% | 70% | N/A | **85%** |
|
||||
| OQI-002 | Education | 100% | 40% | 80% | N/A | **55%** |
|
||||
| OQI-003 | Trading | 100% | 50% | 90% UI | N/A | **60%** |
|
||||
| OQI-004 | Investment | 100% | 35% | 35% | N/A | **55%** |
|
||||
| OQI-005 | Payments | 100% | 50% | 80% | N/A | **65%** |
|
||||
| OQI-006 | ML Signals | 100% | 70% | 95% | 75% | **75%** |
|
||||
| OQI-007 | LLM Agent | 100% | 40% | 45% | 60% | **45%** |
|
||||
| OQI-008 | Portfolio | 100% | 45% | 0% | N/A | **45%** |
|
||||
| OQI-009 | MT4 Gateway | 0% | 0% | 0% | N/A | **15%** |
|
||||
| OQI-001 | Auth | 100% | 95% | 75% | N/A | **85%** (+2FA completo) |
|
||||
| OQI-002 | Education | 100% | 45% | 85% | N/A | **55%** (+ReviewForm, LessonProgress) |
|
||||
| OQI-003 | Trading | 100% | 65% | 92% | N/A | **65%** (+bots module, market-data) |
|
||||
| OQI-004 | Investment | 100% | 50% | 60% | N/A | **60%** (+Deposit, Withdraw pages) |
|
||||
| OQI-005 | Payments | 100% | 60% | 85% | N/A | **70%** (+Invoices, Refunds, PaymentMethods) |
|
||||
| OQI-006 | ML Signals | 100% | 75% | 95% | 80% | **78%** (+ML Overlays) |
|
||||
| OQI-007 | LLM Agent | 100% | 50% | 55% | 65% | **50%** (+Memory, Tools, AgentSettings) |
|
||||
| OQI-008 | Portfolio | 100% | 50% | 30% | N/A | **45%** (+AllocationOptimizer, hooks) |
|
||||
| OQI-009 | MT4 Gateway | 0% | 0% | 0% | N/A | **15%** (BLOQUEADO) |
|
||||
|
||||
---
|
||||
|
||||
@ -90,6 +92,15 @@ Schemas: auth, education, trading, investment, financial, portfolio, market_data
|
||||
|
||||
---
|
||||
|
||||
## Tareas Activas
|
||||
|
||||
| ID | Tarea | Estado | Progreso |
|
||||
|----|-------|--------|----------|
|
||||
| TASK-2026-02-04 | SYNC-INVENTARIOS | COMPLETADA | 100% |
|
||||
| TASK-2026-02-04 | MARKETPLACE-COMPONENTS | EN PROGRESO | 80% |
|
||||
|
||||
---
|
||||
|
||||
## Tareas Completadas (21)
|
||||
|
||||
| Periodo | Completadas | Tipo |
|
||||
@ -108,13 +119,46 @@ Schemas: auth, education, trading, investment, financial, portfolio, market_data
|
||||
| ~~B-001~~ | ~~trading.service.ts no existe en frontend~~ | RESUELTO - existe y funciona | ~~P0~~ |
|
||||
| ~~B-002~~ | ~~auth.service.ts no existe en frontend~~ | RESUELTO - existe y funciona | ~~P0~~ |
|
||||
| ~~B-003~~ | ~~Backend admin retorna mock data~~ | RESUELTO - wired to real DB | ~~P1~~ |
|
||||
| B-004 | Frontend token key inconsistency (auth_token vs token) | Auth failures en 3 services | P1 RESUELTO |
|
||||
| ~~B-004~~ | ~~Frontend token key inconsistency~~ | RESUELTO | ~~P1~~ |
|
||||
| B-005 | OQI-009 MT4 Gateway 0% funcional | Feature no disponible | P2 |
|
||||
| B-006 | Backend config defaults incorrectos (port, DB) | Conexion falla sin .env | P1 RESUELTO |
|
||||
| ~~B-006~~ | ~~Backend config defaults incorrectos~~ | RESUELTO | ~~P1~~ |
|
||||
|
||||
### Gaps P1 Pendientes (No Blockers)
|
||||
| ID | Descripcion | Esfuerzo | Prioridad |
|
||||
|----|-------------|----------|-----------|
|
||||
| G-001 | Token refresh automático | 60h | P1 |
|
||||
| G-002 | WebSocket real-time trading completo | 40h | P1 |
|
||||
|
||||
---
|
||||
|
||||
## Proximas Acciones (ver TASK-2026-01-30-ANALISIS-INTEGRACION)
|
||||
## Proximas Acciones (ver TASK-2026-02-04-ANALISIS-PLANIFICACION-INTEGRAL)
|
||||
|
||||
### FASE 0: Preparación (EN PROGRESO)
|
||||
- Análisis de gaps DDL, Backend, Frontend
|
||||
- Definición de dependencias entre componentes
|
||||
- Establecimiento de prioridades y ruta crítica
|
||||
|
||||
### FASE 1: DDL Gaps (PENDIENTE)
|
||||
- Completar tablas faltantes en schemas existentes
|
||||
- Validar integridad referencial
|
||||
- Sincronizar migraciones
|
||||
|
||||
### FASE 2: Backend Services (PENDIENTE)
|
||||
- **CRITICO:** Market Data OHLCV Service - requerido para charts y ML
|
||||
- Completar servicios de Portfolio
|
||||
- Implementar endpoints faltantes de Investment
|
||||
|
||||
### FASE 3: Frontend Integration (PENDIENTE)
|
||||
- Conectar páginas faltantes con servicios
|
||||
- Implementar flujos de Portfolio
|
||||
- Testing E2E
|
||||
|
||||
---
|
||||
|
||||
## Sprints Anteriores (ver TASK-2026-01-30-ANALISIS-INTEGRACION)
|
||||
|
||||
<details>
|
||||
<summary>Sprint 1-4 (COMPLETADOS 2026-01-30)</summary>
|
||||
|
||||
### Sprint 1 (COMPLETADO 2026-01-30)
|
||||
1. ~~Sincronizar inventarios workspace (13 módulos backend)~~ COMPLETADO
|
||||
@ -146,6 +190,8 @@ Schemas: auth, education, trading, investment, financial, portfolio, market_data
|
||||
11. ~~Crear DATABASE-SCHEMA.md~~ COMPLETADO (12 schemas, ~90 tablas ER)
|
||||
12. ~~Crear TESTING-STRATEGY.md~~ COMPLETADO (pirámide 70/20/10, CI/CD)
|
||||
|
||||
</details>
|
||||
|
||||
### Backlog Técnico
|
||||
- Ejecutar OOS backtesting (12 meses excluidos)
|
||||
- Implementar pages faltantes (portfolio, investment, settings)
|
||||
@ -163,5 +209,30 @@ Schemas: auth, education, trading, investment, financial, portfolio, market_data
|
||||
|
||||
---
|
||||
|
||||
**Ultima actualizacion:** 2026-01-30
|
||||
**Actualizado por:** Claude Code (Opus 4.5) - TASK-2026-01-30-ANALISIS-INTEGRACION
|
||||
---
|
||||
|
||||
## Sprint 3 - Cambios Realizados (2026-02-04)
|
||||
|
||||
### Backend
|
||||
- **market-data module (NUEVO):** service, controller, routes, 9 endpoints
|
||||
- **bots service/controller (NUEVO):** 11 endpoints CRUD + templates
|
||||
- **users.service.ts (MEJORADO):** 6 endpoints adicionales
|
||||
- **audit service (COMPLETADO):** 5 endpoints nuevos (my-activity, logs, security-events, compliance, stats)
|
||||
- **2FA endpoints (COMPLETADO):** 3 endpoints (setup, enable, disable)
|
||||
- **Total endpoints:** ~116 implementados
|
||||
|
||||
### Frontend
|
||||
- **Trading:** BotDetailPage, CreateBotModal, ML Overlays (5 componentes), useBots hook
|
||||
- **Investment:** Deposit page, Withdraw page, ProductCard mejorado, 5 hooks
|
||||
- **Payments:** InvoicesPage, RefundsPage, PaymentMethodsPage, PaymentMethodsManager, hooks
|
||||
- **Education:** ReviewForm, LessonProgress, CourseReviewsSection, ContinueLearningCard, 5 hooks
|
||||
- **Assistant:** MemoryManagerPanel, ToolsConfigPanel, ConversationHistoryAdvanced, AgentModeSelector, AgentSettingsPage, 5 hooks
|
||||
- **Portfolio:** AllocationOptimizer, 5 hooks, PortfolioDetailPage con 5 tabs
|
||||
- **Total componentes:** 225 (+14)
|
||||
- **Total páginas:** 58 (+6)
|
||||
- **Total hooks:** 42 (+10)
|
||||
|
||||
---
|
||||
|
||||
**Ultima actualizacion:** 2026-02-04T14:00:00Z
|
||||
**Actualizado por:** Claude Code (Opus 4.5) - TASK-2026-02-04-SYNC-INVENTARIOS
|
||||
|
||||
@ -1,118 +1,168 @@
|
||||
# Proxima Accion - Trading Platform
|
||||
|
||||
**Fecha:** 2026-02-03
|
||||
**Referencia:** TASK-2026-02-03-ANALISIS-FRONTEND-UXUI
|
||||
**Estado:** ANÁLISIS FRONTEND UX/UI - EN PROGRESO
|
||||
**Fecha:** 2026-02-04
|
||||
**Referencia:** TASK-2026-02-04-ANALISIS-PLANIFICACION-INTEGRAL
|
||||
**Estado:** ANÁLISIS Y PLANEACIÓN INTEGRAL - EN PROGRESO
|
||||
|
||||
---
|
||||
|
||||
## TAREA ACTIVA
|
||||
|
||||
### TASK-2026-02-03-ANALISIS-FRONTEND-UXUI
|
||||
### TASK-2026-02-04-ANALISIS-PLANIFICACION-INTEGRAL
|
||||
|
||||
**Objetivo:** Análisis exhaustivo del frontend comparando componentes, páginas, routing y flujos contra requerimientos SRS y documentación OQI. Crear plan de subtareas jerárquicas siguiendo CAPVED.
|
||||
**Objetivo:** Análisis exhaustivo del proyecto trading-platform para crear un plan de integración DDL-Backend-Frontend que cumpla CAPVED. Incluye análisis de gaps, purga de documentación obsoleta, definición de subtareas jerárquicas, y establecimiento de dependencias lógicas.
|
||||
|
||||
**Perfil:** Frontend / UX-UI
|
||||
**Progreso:** 60% (Fases C, A completadas - P en progreso)
|
||||
**Ubicación:** `orchestration/tareas/TASK-2026-02-03-ANALISIS-FRONTEND-UXUI/`
|
||||
**Perfil:** PERFIL-ORQUESTADOR
|
||||
**Progreso:** 75% (Fases C, A completadas - P en finalización)
|
||||
**Ubicación:** `orchestration/tareas/TASK-2026-02-04-ANALISIS-PLANIFICACION-INTEGRAL/`
|
||||
|
||||
### Fases Completadas
|
||||
|
||||
| Fase | Estado | Hallazgos Clave |
|
||||
|------|--------|-----------------|
|
||||
| **C - Captura** | COMPLETADA | 7 subagentes ejecutados, 514K tokens |
|
||||
| **A - Análisis** | COMPLETADA | 55 gaps, 358 SP identificados |
|
||||
| **P - Planificación** | EN PROGRESO | 12 subtareas jerárquicas definidas |
|
||||
| **C - Captura** | COMPLETADA | 6 subagentes explore, 600K tokens, 450+ archivos |
|
||||
| **A - Análisis** | COMPLETADA | 24 gaps consolidados, 558 SP mapeados |
|
||||
| **P - Planificación** | EN PROGRESO | 7 fases, 35 subtareas, plan de delegación |
|
||||
|
||||
### Hallazgos Principales
|
||||
|
||||
| Categoría | Valor |
|
||||
|-----------|-------|
|
||||
| Módulos OQI analizados | 11 |
|
||||
| Gaps totales identificados | 55 |
|
||||
| Story Points pendientes | 358 SP |
|
||||
| Componentes huérfanos | 1 (PortfolioDetailPage) |
|
||||
| Documentos para migrar | 6 |
|
||||
| FR implementados | 40% (42/106) |
|
||||
| Coherencia Global | 81.25% |
|
||||
| DDL-Backend | 85% |
|
||||
| Backend-Frontend | 77.5% |
|
||||
| Gaps P0 (Bloqueantes) | 3 |
|
||||
| Gaps P1 (Críticos) | 6 |
|
||||
| Gaps Totales | 24 |
|
||||
| Story Points Pendientes | 558 SP |
|
||||
| Horas Estimadas | 430h |
|
||||
|
||||
---
|
||||
|
||||
## PLAN DE SUBTAREAS (12 SUBTASKS)
|
||||
## PLAN MAESTRO - 7 FASES
|
||||
|
||||
### Sprint 1: Fundamentos (17 SP)
|
||||
- [ ] **SUBTASK-001-ROUTING-HUERFANOS** (4 SP) - Resolver routing y links rotos
|
||||
- [ ] **SUBTASK-002-OQI-001-AUTH** (13 SP) - Completar gestión sesiones
|
||||
### FASE 0: Preparación (8h) - PRÓXIMA
|
||||
- [ ] **ST-0.1** Purga documentación obsoleta (2h)
|
||||
- [ ] **ST-0.2** Sincronización inventarios (4h)
|
||||
- [ ] **ST-0.3** Actualización PROJECT-STATUS (2h)
|
||||
|
||||
### Sprint 2: Trading Core (60 SP)
|
||||
- [ ] **SUBTASK-003-OQI-003-TRADING** (44 SP) - TP/SL, ML Overlay, Alertas
|
||||
- [ ] **SUBTASK-004-OQI-006-ML** (16 SP) - Ensemble, más símbolos
|
||||
### FASE 1: DDL Gaps (16h)
|
||||
- [ ] **ST-1.1** education.instructors table (4h)
|
||||
- [ ] **ST-1.2** education.course_tags field (2h)
|
||||
- [ ] **ST-1.3** trading.price_alerts table (4h)
|
||||
- [ ] **ST-1.4** Validación DDL post-cambios (2h)
|
||||
|
||||
### Sprint 3: Investment (81 SP)
|
||||
- [ ] **SUBTASK-005-OQI-004-INVESTMENT** (68 SP) - Dashboard, depósitos, KYC
|
||||
- [ ] **SUBTASK-006-OQI-005-PAYMENTS** (13 SP) - Invoices PDF
|
||||
### FASE 2: Backend Services (48h)
|
||||
- [ ] **ST-2.1** Market Data OHLCV Service (16h) - **CRÍTICO**
|
||||
- [ ] **ST-2.2** Notifications Complete Service (12h)
|
||||
- [ ] **ST-2.3** User Profile Service (6h)
|
||||
- [ ] **ST-2.4** Audit Service (8h)
|
||||
- [ ] **ST-2.5** 2FA Complete Flow (8h)
|
||||
|
||||
### Sprint 4: Advanced Features (128 SP)
|
||||
- [ ] **SUBTASK-007-OQI-002-EDUCATION** (21 SP) - Progreso, quizzes
|
||||
- [ ] **SUBTASK-008-OQI-007-LLM** (44 SP) - Memory manager, tools
|
||||
- [ ] **SUBTASK-009-OQI-008-PORTFOLIO** (63 SP) - Monte Carlo, rebalanceo
|
||||
### FASE 3: Backend API (24h)
|
||||
- [ ] **ST-3.1** Market Data Endpoints (4h)
|
||||
- [ ] **ST-3.2** Notifications Endpoints (4h)
|
||||
- [ ] **ST-3.3** User Profile Endpoints (4h)
|
||||
- [ ] **ST-3.4** Trading Agents Endpoints (8h)
|
||||
- [ ] **ST-3.5** 2FA Setup Endpoints (4h)
|
||||
|
||||
### Sprint 5: Growth (55 SP)
|
||||
- [ ] **SUBTASK-010-OQI-009-MARKETPLACE** (42 SP) - Catálogo completo
|
||||
- [ ] **SUBTASK-011-MIGRACION-DOCS** (8 SP) - Migrar 6 documentos
|
||||
- [ ] **SUBTASK-012-INVENTARIOS-SYNC** (5 SP) - Sincronizar inventarios
|
||||
### FASE 4: Frontend Integration (180h)
|
||||
- **Sprint FE-1:** Fundamentos (17 SP)
|
||||
- **Sprint FE-2:** Trading Core (60 SP)
|
||||
- **Sprint FE-3:** Investment (81 SP)
|
||||
- **Sprint FE-4:** Advanced Features (128 SP)
|
||||
- **Sprint FE-5:** Growth (55 SP)
|
||||
|
||||
### FASE 5: Architecture Refactor (24h)
|
||||
- [ ] **ST-5.1** Proxy Python Services ARCH-001 (16h)
|
||||
- [ ] **ST-5.2** Standardize apiClient ARCH-002 (8h)
|
||||
|
||||
### FASE 6: Testing (40h)
|
||||
- [ ] **ST-6.1** Unit Tests Backend (12h)
|
||||
- [ ] **ST-6.2** Unit Tests Frontend (12h)
|
||||
- [ ] **ST-6.3** Integration Tests (8h)
|
||||
- [ ] **ST-6.4** E2E Tests (8h)
|
||||
|
||||
### FASE 7: Documentación (16h)
|
||||
- [ ] **ST-7.1** Guías desarrollo (8h)
|
||||
- [ ] **ST-7.2** API Documentation (4h)
|
||||
- [ ] **ST-7.3** Actualización inventarios final (4h)
|
||||
|
||||
---
|
||||
|
||||
## MÉTRICAS ACTUALES vs TARGET
|
||||
## GAPS P0 CRÍTICOS
|
||||
|
||||
| Métrica | Actual | Target | Gap |
|
||||
|---------|--------|--------|-----|
|
||||
| Coherencia Global | 92% | 95% | -3% |
|
||||
| DDL-Backend | 94% | 95% | -1% |
|
||||
| Backend-Frontend | 90% | 95% | -5% |
|
||||
| FR Implementados | 40% | 70% | -30% |
|
||||
| Componentes funcionales | 79% | 95% | -16% |
|
||||
| Cobertura Tests | 15% | 40% | -25% |
|
||||
| Gap | Módulo | Descripción | Esfuerzo |
|
||||
|-----|--------|-------------|----------|
|
||||
| GAP-P0-001 | Auth | Password Recovery sin UI | 8h |
|
||||
| GAP-P0-002 | Auth | User Profile sin servicio | 6h |
|
||||
| GAP-P0-003 | Trading | Trading Agents sin UI | 40h |
|
||||
|
||||
## CADENAS DE BLOQUEO
|
||||
|
||||
```
|
||||
CHAIN-001 (CRÍTICO): Market Data Pipeline
|
||||
DDL → BE Service (FALTA) → API (FALTA) → FE Charts (BLOQUEADO)
|
||||
Desbloquea: ST-2.1
|
||||
|
||||
CHAIN-002: Notifications Pipeline
|
||||
DDL → BE Service (PARCIAL) → API (FALTA) → FE Consumer (BLOQUEADO)
|
||||
Desbloquea: ST-2.2
|
||||
|
||||
CHAIN-003: Trading Agents E2E
|
||||
DDL → BE (60%) → API (40%) → FE (0%)
|
||||
Desbloquea: ST-3.4 + SUBTASK-003
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## GAPS P0 IDENTIFICADOS
|
||||
## MÉTRICAS OBJETIVO
|
||||
|
||||
| Gap | Módulo | Descripción | SP |
|
||||
|-----|--------|-------------|-----|
|
||||
| G-P0-001 | OQI-003 | TP/SL en órdenes | 8 |
|
||||
| G-P0-002 | OQI-003 | ML Overlay en chart | 13 |
|
||||
| G-P0-003 | OQI-004 | Dashboard inversión | 13 |
|
||||
| G-P0-004 | OQI-004 | Flujo depósitos Stripe | 8 |
|
||||
| G-P0-005 | OQI-004 | Flujo retiros | 8 |
|
||||
| G-P0-006 | OQI-008 | PortfolioDetailPage huérfano | 3 |
|
||||
| G-P0-007 | OQI-008 | Monte Carlo simulator | 13 |
|
||||
| G-P0-008 | Routing | Links rotos en Portfolio | 3 |
|
||||
|
||||
**Total P0:** 69 SP
|
||||
| Métrica | Actual | Objetivo | Incremento |
|
||||
|---------|--------|----------|------------|
|
||||
| Coherencia Global | 81.25% | 95% | +13.75% |
|
||||
| DDL-Backend | 85% | 98% | +13% |
|
||||
| Backend-Frontend | 77.5% | 92% | +14.5% |
|
||||
| Test Coverage | 15% | 40% | +25% |
|
||||
| Gaps P0 | 3 | 0 | -3 |
|
||||
|
||||
---
|
||||
|
||||
## PRÓXIMA ACCIÓN INMEDIATA
|
||||
|
||||
1. **Completar fase P** - Finalizar documento de planificación
|
||||
2. **Aprobar plan** con stakeholders
|
||||
3. **Iniciar Sprint 1** - SUBTASK-001 (Routing) y SUBTASK-002 (Auth) en paralelo
|
||||
1. **Completar fase P** - Aprobar plan con usuario
|
||||
2. **Iniciar FASE 0** - ST-0.1, ST-0.2, ST-0.3 en paralelo
|
||||
3. **Desbloquear CHAIN-001** - ST-2.1 (Market Data Service) es crítico
|
||||
|
||||
---
|
||||
|
||||
## DOCUMENTACIÓN GENERADA
|
||||
|
||||
```
|
||||
orchestration/tareas/TASK-2026-02-03-ANALISIS-FRONTEND-UXUI/
|
||||
├── METADATA.yml (280 líneas)
|
||||
├── 01-CAPTURA.md (150 líneas)
|
||||
├── 02-ANALISIS.md (400 líneas)
|
||||
└── 03-PLANIFICACION.md (800 líneas)
|
||||
orchestration/tareas/TASK-2026-02-04-ANALISIS-PLANIFICACION-INTEGRAL/
|
||||
├── METADATA.yml
|
||||
├── 01-CAPTURA.md (completado)
|
||||
├── 02-ANALISIS.md (completado)
|
||||
├── 03-PLANIFICACION.md (en progreso)
|
||||
├── inventarios/
|
||||
│ └── CONSOLIDADO-GAPS.yml
|
||||
└── subagentes/
|
||||
├── DELEGACION-PLAN.yml
|
||||
└── PERFILES-SUBAGENTES.yml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Actualizado:** 2026-02-03
|
||||
## TAREAS RELACIONADAS
|
||||
|
||||
| Tarea | Estado | Relación |
|
||||
|-------|--------|----------|
|
||||
| TASK-2026-02-03-ANALISIS-DDL-MODELADO | 88% | Gaps DDL integrados |
|
||||
| TASK-2026-02-03-ANALISIS-FRONTEND-UXUI | 100% | 12 subtareas integradas |
|
||||
| TASK-2026-02-03-BACKEND-ENTITIES-SYNC | 100% | 5 servicios ya creados |
|
||||
|
||||
---
|
||||
|
||||
**Actualizado:** 2026-02-04
|
||||
**Agente:** Claude Code (Opus 4.5)
|
||||
**Subagentes utilizados:** 7 (100% exitosos)
|
||||
**Subagentes utilizados:** 6 (100% exitosos)
|
||||
|
||||
@ -1,61 +1,108 @@
|
||||
# ==============================================================================
|
||||
# DDL Complete Matrix - Trading Platform
|
||||
# Generated: 2026-01-27
|
||||
# Updated: 2026-02-03
|
||||
# Total Schemas: 10
|
||||
# Total Tables: 93 (+4 nuevas)
|
||||
# Updated: 2026-02-05
|
||||
# Total Schemas: 11
|
||||
# Total Tables: 101
|
||||
# ==============================================================================
|
||||
version: "1.1.0"
|
||||
version: "2.0.0"
|
||||
project: "trading-platform"
|
||||
generated_at: "2026-01-27T12:00:00Z"
|
||||
updated_at: "2026-02-03T10:00:00Z"
|
||||
updated_at: "2026-02-05T10:00:00Z"
|
||||
database: "trading_platform"
|
||||
user: "trading_user"
|
||||
|
||||
summary:
|
||||
total_schemas: 10
|
||||
total_tables: 93 # +4: instructors, price_alerts, refunds, agent_executions
|
||||
total_enums: 65
|
||||
total_functions: 7
|
||||
total_triggers: 2
|
||||
migrations_pending: 2 # courses.tags, predictions.overlay_data
|
||||
total_schemas: 11
|
||||
total_tables: 101
|
||||
total_enums: 69
|
||||
total_functions: 10
|
||||
total_triggers: 4
|
||||
migrations_pending: 0
|
||||
|
||||
# ==============================================================================
|
||||
# NUEVAS TABLAS (2026-02-03)
|
||||
# TABLAS COMPLETADAS (2026-02-05)
|
||||
# ==============================================================================
|
||||
new_tables_2026_02_03:
|
||||
completed_tables_2026_02_05:
|
||||
- schema: education
|
||||
table: instructors
|
||||
file: "17-instructors.sql"
|
||||
gap: "GAP-DDL-001"
|
||||
status: completed
|
||||
|
||||
- schema: education
|
||||
table: review_helpful_votes
|
||||
file: "16-review_helpful_votes.sql"
|
||||
gap: "GAP-DDL-007"
|
||||
status: completed
|
||||
|
||||
- schema: education
|
||||
table: course_tags
|
||||
file: "18-course_tags.sql"
|
||||
gap: "GAP-DDL-008"
|
||||
status: completed
|
||||
|
||||
- schema: education
|
||||
table: course_tag_assignments
|
||||
file: "19-course_tag_assignments.sql"
|
||||
gap: "GAP-DDL-009"
|
||||
status: completed
|
||||
|
||||
- schema: trading
|
||||
table: price_alerts
|
||||
file: "11-price_alerts.sql"
|
||||
gap: "GAP-DDL-003"
|
||||
status: completed
|
||||
|
||||
- schema: trading
|
||||
table: drawing_tools
|
||||
file: "12-drawing_tools.sql"
|
||||
gap: "GAP-DDL-010"
|
||||
status: completed
|
||||
|
||||
- schema: trading
|
||||
table: drawing_templates
|
||||
file: "13-drawing_templates.sql"
|
||||
gap: "GAP-DDL-011"
|
||||
status: completed
|
||||
|
||||
- schema: financial
|
||||
table: refunds
|
||||
file: "11-refunds.sql"
|
||||
gap: "GAP-DDL-004"
|
||||
status: completed
|
||||
|
||||
- schema: investment
|
||||
table: agent_executions
|
||||
file: "10-agent_executions.sql"
|
||||
gap: "GAP-DDL-005"
|
||||
|
||||
migrations_pending:
|
||||
- schema: education
|
||||
table: courses
|
||||
column: tags
|
||||
file: "migrations/001-add-courses-tags.sql"
|
||||
gap: "GAP-DDL-002"
|
||||
status: completed
|
||||
|
||||
- schema: ml
|
||||
table: predictions
|
||||
column: overlay_data
|
||||
file: "migrations/001-add-predictions-overlay.sql"
|
||||
gap: "GAP-DDL-006"
|
||||
table: prediction_overlays
|
||||
file: "12-prediction_overlays.sql"
|
||||
gap: "GAP-DDL-012"
|
||||
status: completed
|
||||
|
||||
- schema: feature_flags
|
||||
table: flags
|
||||
file: "01-flags.sql"
|
||||
gap: "GAP-DDL-013"
|
||||
status: completed
|
||||
|
||||
- schema: feature_flags
|
||||
table: user_flags
|
||||
file: "01-flags.sql"
|
||||
gap: "GAP-DDL-014"
|
||||
status: completed
|
||||
|
||||
- schema: feature_flags
|
||||
table: evaluations
|
||||
file: "01-flags.sql"
|
||||
gap: "GAP-DDL-015"
|
||||
status: completed
|
||||
|
||||
migrations_pending: []
|
||||
|
||||
schemas:
|
||||
audit:
|
||||
@ -690,8 +737,184 @@ schemas:
|
||||
indexes:
|
||||
- idx_videos_lesson
|
||||
|
||||
functions: []
|
||||
triggers: []
|
||||
- name: review_helpful_votes
|
||||
file: "16-review_helpful_votes.sql"
|
||||
columns:
|
||||
- id UUID PRIMARY KEY
|
||||
- user_id UUID REFERENCES auth.users
|
||||
- review_id UUID REFERENCES education.course_reviews
|
||||
- created_at TIMESTAMPTZ
|
||||
foreign_keys:
|
||||
- references: auth.users
|
||||
- references: education.course_reviews
|
||||
indexes:
|
||||
- idx_review_helpful_votes_user
|
||||
- idx_review_helpful_votes_review
|
||||
constraints:
|
||||
- unique_user_review_vote UNIQUE(user_id, review_id)
|
||||
|
||||
- name: instructors
|
||||
file: "17-instructors.sql"
|
||||
columns:
|
||||
- id UUID PRIMARY KEY
|
||||
- user_id UUID REFERENCES auth.users UNIQUE
|
||||
- display_name VARCHAR(100)
|
||||
- bio TEXT
|
||||
- avatar_url VARCHAR(500)
|
||||
- expertise TEXT[]
|
||||
- social_links JSONB
|
||||
- total_courses INTEGER
|
||||
- total_students INTEGER
|
||||
- total_reviews INTEGER
|
||||
- average_rating DECIMAL(3,2)
|
||||
- is_verified BOOLEAN
|
||||
- verified_at TIMESTAMPTZ
|
||||
- is_active BOOLEAN
|
||||
- metadata JSONB
|
||||
- created_at TIMESTAMPTZ
|
||||
- updated_at TIMESTAMPTZ
|
||||
foreign_keys:
|
||||
- references: auth.users
|
||||
indexes:
|
||||
- idx_instructors_user_id
|
||||
- idx_instructors_is_verified
|
||||
- idx_instructors_is_active
|
||||
- idx_instructors_average_rating
|
||||
- idx_instructors_expertise
|
||||
constraints:
|
||||
- instructors_rating_range CHECK
|
||||
- instructors_counts_positive CHECK
|
||||
|
||||
- name: course_tags
|
||||
file: "18-course_tags.sql"
|
||||
columns:
|
||||
- id UUID PRIMARY KEY
|
||||
- name VARCHAR(50)
|
||||
- slug VARCHAR(50) UNIQUE
|
||||
- description TEXT
|
||||
- color VARCHAR(7)
|
||||
- icon VARCHAR(50)
|
||||
- is_featured BOOLEAN
|
||||
- usage_count INTEGER
|
||||
- created_at TIMESTAMPTZ
|
||||
- updated_at TIMESTAMPTZ
|
||||
indexes:
|
||||
- idx_course_tags_slug
|
||||
- idx_course_tags_name
|
||||
- idx_course_tags_featured
|
||||
- idx_course_tags_usage
|
||||
constraints:
|
||||
- course_tags_name_not_empty CHECK
|
||||
- course_tags_slug_format CHECK
|
||||
- course_tags_color_format CHECK
|
||||
- course_tags_usage_positive CHECK
|
||||
|
||||
- name: course_tag_assignments
|
||||
file: "19-course_tag_assignments.sql"
|
||||
columns:
|
||||
- id UUID PRIMARY KEY
|
||||
- course_id UUID REFERENCES education.courses
|
||||
- tag_id UUID REFERENCES education.course_tags
|
||||
- assigned_at TIMESTAMPTZ
|
||||
- assigned_by UUID REFERENCES auth.users
|
||||
foreign_keys:
|
||||
- references: education.courses
|
||||
- references: education.course_tags
|
||||
- references: auth.users
|
||||
indexes:
|
||||
- idx_course_tag_assignments_course
|
||||
- idx_course_tag_assignments_tag
|
||||
constraints:
|
||||
- unique_course_tag UNIQUE(course_id, tag_id)
|
||||
|
||||
functions:
|
||||
- name: update_tag_usage_count
|
||||
file: "19-course_tag_assignments.sql"
|
||||
triggers:
|
||||
- trg_course_tags_updated_at
|
||||
- trg_course_tag_usage
|
||||
|
||||
feature_flags:
|
||||
description: "Sistema de feature flags y rollouts"
|
||||
enums:
|
||||
- feature_flags.flag_status
|
||||
- feature_flags.rollout_stage
|
||||
tables:
|
||||
- name: flags
|
||||
file: "01-flags.sql"
|
||||
columns:
|
||||
- id UUID PRIMARY KEY
|
||||
- code VARCHAR(100) UNIQUE
|
||||
- name VARCHAR(200)
|
||||
- description TEXT
|
||||
- category VARCHAR(100)
|
||||
- status feature_flags.flag_status
|
||||
- rollout_stage feature_flags.rollout_stage
|
||||
- rollout_percentage INTEGER
|
||||
- default_value BOOLEAN
|
||||
- targeting_rules JSONB
|
||||
- metadata JSONB
|
||||
- tags JSONB
|
||||
- is_permanent BOOLEAN
|
||||
- expires_at TIMESTAMPTZ
|
||||
- created_at TIMESTAMPTZ
|
||||
- updated_at TIMESTAMPTZ
|
||||
- created_by VARCHAR(100)
|
||||
indexes:
|
||||
- idx_flags_code
|
||||
- idx_flags_status
|
||||
- idx_flags_category
|
||||
constraints:
|
||||
- valid_flag_code CHECK
|
||||
- valid_percentage CHECK
|
||||
|
||||
- name: user_flags
|
||||
file: "01-flags.sql"
|
||||
columns:
|
||||
- id UUID PRIMARY KEY
|
||||
- user_id UUID REFERENCES auth.users
|
||||
- flag_id UUID REFERENCES feature_flags.flags
|
||||
- is_enabled BOOLEAN
|
||||
- reason VARCHAR(500)
|
||||
- expires_at TIMESTAMPTZ
|
||||
- created_at TIMESTAMPTZ
|
||||
- updated_at TIMESTAMPTZ
|
||||
- updated_by UUID
|
||||
foreign_keys:
|
||||
- references: auth.users
|
||||
- references: feature_flags.flags
|
||||
indexes:
|
||||
- idx_user_flags_user
|
||||
- idx_user_flags_flag
|
||||
constraints:
|
||||
- unique_user_flag UNIQUE(user_id, flag_id)
|
||||
|
||||
- name: evaluations
|
||||
file: "01-flags.sql"
|
||||
columns:
|
||||
- id UUID PRIMARY KEY
|
||||
- flag_id UUID REFERENCES feature_flags.flags
|
||||
- user_id UUID REFERENCES auth.users
|
||||
- flag_code VARCHAR(100)
|
||||
- result BOOLEAN
|
||||
- evaluation_reason VARCHAR(100)
|
||||
- context JSONB
|
||||
- created_at TIMESTAMPTZ
|
||||
foreign_keys:
|
||||
- references: feature_flags.flags
|
||||
- references: auth.users
|
||||
indexes:
|
||||
- idx_evaluations_flag
|
||||
- idx_evaluations_user
|
||||
|
||||
functions:
|
||||
- name: evaluate_flag
|
||||
file: "01-flags.sql"
|
||||
- name: update_timestamp
|
||||
file: "01-flags.sql"
|
||||
triggers:
|
||||
- trg_flags_updated_at
|
||||
- trg_user_flags_updated_at
|
||||
|
||||
financial:
|
||||
description: "Sistema financiero, wallets y pagos"
|
||||
@ -901,6 +1124,42 @@ schemas:
|
||||
- idx_payment_methods_customer
|
||||
- idx_payment_methods_stripe_id
|
||||
|
||||
- name: refunds
|
||||
file: "11-refunds.sql"
|
||||
columns:
|
||||
- id UUID PRIMARY KEY
|
||||
- payment_id UUID REFERENCES financial.payments
|
||||
- amount DECIMAL(20,8)
|
||||
- currency financial.currency_code
|
||||
- reason VARCHAR(255)
|
||||
- reason_code VARCHAR(50)
|
||||
- notes TEXT
|
||||
- status financial.payment_status
|
||||
- stripe_refund_id VARCHAR(255) UNIQUE
|
||||
- stripe_failure_reason TEXT
|
||||
- requested_by UUID REFERENCES auth.users
|
||||
- approved_by UUID REFERENCES auth.users
|
||||
- approved_at TIMESTAMPTZ
|
||||
- rejected_at TIMESTAMPTZ
|
||||
- rejection_reason TEXT
|
||||
- metadata JSONB
|
||||
- created_at TIMESTAMPTZ
|
||||
- processed_at TIMESTAMPTZ
|
||||
- completed_at TIMESTAMPTZ
|
||||
- failed_at TIMESTAMPTZ
|
||||
foreign_keys:
|
||||
- references: financial.payments
|
||||
- references: auth.users
|
||||
indexes:
|
||||
- idx_refunds_payment
|
||||
- idx_refunds_status
|
||||
- idx_refunds_stripe
|
||||
- idx_refunds_created
|
||||
- idx_refunds_requested_by
|
||||
constraints:
|
||||
- refund_approval_valid CHECK
|
||||
- refund_failure_valid CHECK
|
||||
|
||||
functions:
|
||||
- name: update_wallet_balance
|
||||
file: "01-update_wallet_balance.sql"
|
||||
@ -1073,6 +1332,56 @@ schemas:
|
||||
- idx_distribution_runs_period
|
||||
- idx_distribution_runs_status
|
||||
|
||||
- name: agent_executions
|
||||
file: "10-agent_executions.sql"
|
||||
columns:
|
||||
- id UUID PRIMARY KEY
|
||||
- account_id UUID REFERENCES investment.accounts
|
||||
- agent_type investment.trading_agent
|
||||
- execution_type VARCHAR(20)
|
||||
- symbol VARCHAR(20)
|
||||
- side VARCHAR(4)
|
||||
- quantity DECIMAL(20,8)
|
||||
- entry_price DECIMAL(20,8)
|
||||
- exit_price DECIMAL(20,8)
|
||||
- pnl DECIMAL(20,8)
|
||||
- pnl_percentage DECIMAL(8,4)
|
||||
- fees DECIMAL(20,8)
|
||||
- execution_time_ms INTEGER
|
||||
- slippage DECIMAL(20,8)
|
||||
- risk_score DECIMAL(5,4)
|
||||
- position_size_percent DECIMAL(5,2)
|
||||
- trade_details JSONB
|
||||
- market_conditions JSONB
|
||||
- status VARCHAR(20)
|
||||
- error_code VARCHAR(50)
|
||||
- failure_reason TEXT
|
||||
- notes TEXT
|
||||
- signal_source VARCHAR(50)
|
||||
- confidence_score DECIMAL(5,4)
|
||||
- model_version VARCHAR(50)
|
||||
- model_id UUID
|
||||
- external_order_id VARCHAR(100)
|
||||
- executed_at TIMESTAMPTZ
|
||||
- closed_at TIMESTAMPTZ
|
||||
- created_at TIMESTAMPTZ
|
||||
- updated_at TIMESTAMPTZ
|
||||
foreign_keys:
|
||||
- references: investment.accounts
|
||||
indexes:
|
||||
- idx_agent_exec_account
|
||||
- idx_agent_exec_type
|
||||
- idx_agent_exec_status
|
||||
- idx_agent_exec_date
|
||||
- idx_agent_exec_account_date
|
||||
- idx_agent_exec_symbol
|
||||
- idx_agent_exec_pnl
|
||||
- idx_agent_exec_slippage
|
||||
- idx_agent_exec_risk_score
|
||||
- idx_agent_exec_external_order
|
||||
- idx_agent_exec_model
|
||||
- idx_agent_exec_signal_confidence
|
||||
|
||||
functions: []
|
||||
triggers: []
|
||||
|
||||
@ -1240,6 +1549,7 @@ schemas:
|
||||
- ml.prediction_type
|
||||
- ml.prediction_result
|
||||
- ml.outcome_status
|
||||
- ml.overlay_type
|
||||
tables:
|
||||
- name: models
|
||||
file: "01-models.sql"
|
||||
@ -1412,8 +1722,44 @@ schemas:
|
||||
- idx_llm_signals_symbol
|
||||
- idx_llm_signals_created
|
||||
|
||||
functions: []
|
||||
triggers: []
|
||||
- name: prediction_overlays
|
||||
file: "12-prediction_overlays.sql"
|
||||
columns:
|
||||
- id UUID PRIMARY KEY
|
||||
- prediction_id UUID REFERENCES ml.predictions
|
||||
- overlay_type ml.overlay_type
|
||||
- label VARCHAR(100)
|
||||
- price_levels DECIMAL(18,8)[]
|
||||
- time_range TSTZRANGE
|
||||
- time_point TIMESTAMPTZ
|
||||
- price_point DECIMAL(18,8)
|
||||
- coordinates JSONB
|
||||
- style_config JSONB
|
||||
- metadata JSONB
|
||||
- is_active BOOLEAN
|
||||
- display_priority INTEGER
|
||||
- z_index INTEGER
|
||||
- created_at TIMESTAMPTZ
|
||||
- updated_at TIMESTAMPTZ
|
||||
- expires_at TIMESTAMPTZ
|
||||
foreign_keys:
|
||||
- references: ml.predictions
|
||||
indexes:
|
||||
- idx_prediction_overlays_prediction
|
||||
- idx_prediction_overlays_active
|
||||
- idx_prediction_overlays_type
|
||||
- idx_prediction_overlays_time_range
|
||||
- idx_prediction_overlays_priority
|
||||
- idx_prediction_overlays_expires
|
||||
- idx_prediction_overlays_metadata
|
||||
|
||||
functions:
|
||||
- name: calculate_prediction_accuracy
|
||||
file: "05-calculate_prediction_accuracy.sql"
|
||||
- name: update_prediction_overlays_updated_at
|
||||
file: "12-prediction_overlays.sql"
|
||||
triggers:
|
||||
- trigger_prediction_overlays_updated_at
|
||||
|
||||
portfolio:
|
||||
description: "Gestión de portafolios"
|
||||
@ -1521,6 +1867,9 @@ schemas:
|
||||
- trading.timeframe
|
||||
- trading.bot_type
|
||||
- trading.bot_status
|
||||
- trading.alert_type
|
||||
- trading.alert_status
|
||||
- trading.drawing_tool_type
|
||||
tables:
|
||||
- name: symbols
|
||||
file: "01-symbols.sql"
|
||||
@ -1711,6 +2060,96 @@ schemas:
|
||||
indexes:
|
||||
- idx_paper_balances_bot
|
||||
|
||||
- name: price_alerts
|
||||
file: "11-price_alerts.sql"
|
||||
columns:
|
||||
- id UUID PRIMARY KEY
|
||||
- user_id UUID REFERENCES auth.users
|
||||
- symbol_id UUID REFERENCES trading.symbols
|
||||
- alert_type trading.alert_type
|
||||
- target_price DECIMAL(18,8)
|
||||
- percent_threshold DECIMAL(5,2)
|
||||
- status trading.alert_status
|
||||
- triggered_at TIMESTAMPTZ
|
||||
- triggered_price DECIMAL(18,8)
|
||||
- expires_at TIMESTAMPTZ
|
||||
- notification_channels TEXT[]
|
||||
- message TEXT
|
||||
- created_at TIMESTAMPTZ
|
||||
- updated_at TIMESTAMPTZ
|
||||
foreign_keys:
|
||||
- references: auth.users
|
||||
- references: trading.symbols
|
||||
indexes:
|
||||
- idx_price_alerts_user
|
||||
- idx_price_alerts_symbol
|
||||
- idx_price_alerts_active
|
||||
- idx_price_alerts_expiry
|
||||
constraints:
|
||||
- chk_target_price_positive CHECK
|
||||
- chk_percent_threshold_valid CHECK
|
||||
- chk_alert_config CHECK
|
||||
|
||||
- name: drawing_tools
|
||||
file: "12-drawing_tools.sql"
|
||||
columns:
|
||||
- id UUID PRIMARY KEY
|
||||
- user_id UUID REFERENCES auth.users
|
||||
- symbol_id UUID REFERENCES trading.symbols
|
||||
- timeframe trading.timeframe
|
||||
- tool_type trading.drawing_tool_type
|
||||
- name VARCHAR(100)
|
||||
- points JSONB
|
||||
- style JSONB
|
||||
- fib_levels DECIMAL(5,4)[]
|
||||
- text_content TEXT
|
||||
- is_visible BOOLEAN
|
||||
- is_locked BOOLEAN
|
||||
- z_index INTEGER
|
||||
- is_template BOOLEAN
|
||||
- is_shared BOOLEAN
|
||||
- metadata JSONB
|
||||
- created_at TIMESTAMPTZ
|
||||
- updated_at TIMESTAMPTZ
|
||||
foreign_keys:
|
||||
- references: auth.users
|
||||
- references: trading.symbols
|
||||
indexes:
|
||||
- idx_drawing_tools_user_id
|
||||
- idx_drawing_tools_symbol_id
|
||||
- idx_drawing_tools_user_symbol
|
||||
- idx_drawing_tools_visible
|
||||
- idx_drawing_tools_templates
|
||||
- idx_drawing_tools_shared
|
||||
- idx_drawing_tools_points
|
||||
constraints:
|
||||
- drawing_tools_points_not_empty CHECK
|
||||
|
||||
- name: drawing_templates
|
||||
file: "13-drawing_templates.sql"
|
||||
columns:
|
||||
- id UUID PRIMARY KEY
|
||||
- user_id UUID REFERENCES auth.users
|
||||
- name VARCHAR(100)
|
||||
- description TEXT
|
||||
- tool_type trading.drawing_tool_type
|
||||
- style JSONB
|
||||
- fib_levels DECIMAL(5,4)[]
|
||||
- is_system BOOLEAN
|
||||
- is_public BOOLEAN
|
||||
- usage_count INTEGER
|
||||
- created_at TIMESTAMPTZ
|
||||
- updated_at TIMESTAMPTZ
|
||||
foreign_keys:
|
||||
- references: auth.users
|
||||
indexes:
|
||||
- idx_drawing_templates_user
|
||||
- idx_drawing_templates_tool_type
|
||||
- idx_drawing_templates_public
|
||||
- idx_drawing_templates_system
|
||||
constraints:
|
||||
- drawing_templates_name_not_empty CHECK
|
||||
|
||||
functions: []
|
||||
triggers: []
|
||||
|
||||
@ -1720,26 +2159,36 @@ schemas:
|
||||
statistics:
|
||||
by_schema:
|
||||
audit: 7
|
||||
auth: 13
|
||||
education: 15
|
||||
financial: 10
|
||||
investment: 9
|
||||
auth: 12
|
||||
education: 19
|
||||
feature_flags: 3
|
||||
financial: 11
|
||||
investment: 10
|
||||
llm: 5
|
||||
market_data: 4
|
||||
ml: 11
|
||||
ml: 12
|
||||
portfolio: 5
|
||||
trading: 10
|
||||
trading: 13
|
||||
|
||||
foreign_key_relationships:
|
||||
auth.users: "Referenced by 40+ tables across all schemas"
|
||||
auth.users: "Referenced by 50+ tables across all schemas"
|
||||
trading.bots: "Referenced by orders, positions, ml.llm_decisions, ml.risk_events"
|
||||
trading.symbols: "Referenced by price_alerts, drawing_tools"
|
||||
financial.wallets: "Referenced by transactions, audit_log, investment.accounts"
|
||||
financial.payments: "Referenced by refunds"
|
||||
investment.products: "Referenced by accounts, daily_performance"
|
||||
education.courses: "Referenced by modules, enrollments, reviews, certificates"
|
||||
investment.accounts: "Referenced by distributions, transactions, withdrawal_requests, agent_executions"
|
||||
education.courses: "Referenced by modules, enrollments, reviews, certificates, course_tag_assignments"
|
||||
education.course_reviews: "Referenced by review_helpful_votes"
|
||||
education.course_tags: "Referenced by course_tag_assignments"
|
||||
ml.predictions: "Referenced by prediction_outcomes, prediction_overlays"
|
||||
feature_flags.flags: "Referenced by user_flags, evaluations"
|
||||
|
||||
critical_tables:
|
||||
- auth.users (foundation for all user operations)
|
||||
- financial.wallets (financial foundation)
|
||||
- trading.bots (trading foundation)
|
||||
- trading.symbols (market reference data)
|
||||
- investment.accounts (investment foundation)
|
||||
- ml.models (ML foundation)
|
||||
- feature_flags.flags (feature toggle control)
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
# ==============================================================================
|
||||
# Gaps Tracking - Trading Platform
|
||||
# Generated: 2026-01-27
|
||||
# Updated: 2026-02-03
|
||||
# Updated: 2026-02-05
|
||||
# ==============================================================================
|
||||
version: "1.1.0"
|
||||
version: "2.0.0"
|
||||
project: "trading-platform"
|
||||
total_gaps: 24
|
||||
completed_gaps: 0
|
||||
in_progress_gaps: 6
|
||||
total_gaps: 37
|
||||
completed_gaps: 4
|
||||
in_progress_gaps: 2
|
||||
|
||||
# ==============================================================================
|
||||
# CONFLICTOS DDL (Nuevo - 2026-02-03)
|
||||
@ -60,7 +60,8 @@ new_ddl_gaps:
|
||||
- id: GAP-DDL-001
|
||||
title: "education.instructors - Tabla faltante"
|
||||
priority: "P1"
|
||||
status: "in_progress"
|
||||
status: "completed"
|
||||
completed_at: "2026-02-05"
|
||||
epic: "OQI-002"
|
||||
description: |
|
||||
courses.instructor_id referencia auth.users directamente.
|
||||
@ -94,7 +95,8 @@ new_ddl_gaps:
|
||||
- id: GAP-DDL-003
|
||||
title: "trading.price_alerts - Tabla faltante"
|
||||
priority: "P1"
|
||||
status: "in_progress"
|
||||
status: "completed"
|
||||
completed_at: "2026-02-05"
|
||||
epic: "OQI-003"
|
||||
description: "Falta tabla para alertas de precio y notificaciones de usuario"
|
||||
ddl_propuesto: |
|
||||
@ -114,7 +116,8 @@ new_ddl_gaps:
|
||||
- id: GAP-DDL-004
|
||||
title: "financial.refunds - Tabla faltante"
|
||||
priority: "P1"
|
||||
status: "in_progress"
|
||||
status: "completed"
|
||||
completed_at: "2026-02-05"
|
||||
epic: "OQI-005"
|
||||
description: |
|
||||
Refunds embebidos en payments como campos.
|
||||
@ -136,7 +139,8 @@ new_ddl_gaps:
|
||||
- id: GAP-DDL-005
|
||||
title: "investment.agent_executions - Tabla faltante"
|
||||
priority: "P1"
|
||||
status: "in_progress"
|
||||
status: "completed"
|
||||
completed_at: "2026-02-05"
|
||||
epic: "OQI-004"
|
||||
description: "Falta tracking de ejecuciones de trading agents (Atlas, Orion, Nova)"
|
||||
ddl_propuesto: |
|
||||
@ -537,25 +541,147 @@ p3_gaps:
|
||||
effort: "pequeño"
|
||||
estimated_hours: 4
|
||||
|
||||
# ==============================================================================
|
||||
# NEW GAPS - Descubiertos 2026-02-05
|
||||
# ==============================================================================
|
||||
|
||||
new_gaps_2026_02_05:
|
||||
- id: GAP-NEW-001
|
||||
title: "feature_flags schema undocumented"
|
||||
priority: "P0"
|
||||
status: "pending"
|
||||
description: |
|
||||
El schema feature_flags existe en la BD pero no está documentado
|
||||
en ningún inventario ni tiene DDL formal registrado.
|
||||
created_at: "2026-02-05"
|
||||
|
||||
- id: GAP-NEW-002
|
||||
title: "price_alerts FK error"
|
||||
priority: "P0"
|
||||
status: "resolved"
|
||||
description: |
|
||||
Error de FK en trading.price_alerts detectado y corregido
|
||||
durante la creación del DDL completo.
|
||||
created_at: "2026-02-05"
|
||||
resolved_at: "2026-02-05"
|
||||
|
||||
- id: GAP-NEW-003
|
||||
title: "31 backend entities missing"
|
||||
priority: "P2"
|
||||
status: "pending"
|
||||
description: |
|
||||
De 100 tablas en la BD, solo 69 tienen entity backend correspondiente.
|
||||
Faltan 31 entities para alcanzar cobertura completa.
|
||||
created_at: "2026-02-05"
|
||||
|
||||
- id: GAP-NEW-004
|
||||
title: "3 enum migration files not executed"
|
||||
priority: "P1"
|
||||
status: "pending"
|
||||
description: |
|
||||
Existen 2 archivos de migración de enums pero ninguno ha sido ejecutado.
|
||||
3 conflictos de enums permanecen sin resolver.
|
||||
created_at: "2026-02-05"
|
||||
|
||||
- id: GAP-NEW-005
|
||||
title: "audit schema 0% backend services"
|
||||
priority: "P2"
|
||||
status: "pending"
|
||||
description: |
|
||||
El schema audit tiene 7 tablas pero 0% de cobertura en servicios backend.
|
||||
No hay service, controller ni module para audit.
|
||||
created_at: "2026-02-05"
|
||||
|
||||
- id: GAP-NEW-006
|
||||
title: "feature_flags 0% backend integration"
|
||||
priority: "P2"
|
||||
status: "pending"
|
||||
description: |
|
||||
El schema feature_flags no tiene ninguna integración backend:
|
||||
sin entities, sin services, sin controllers.
|
||||
created_at: "2026-02-05"
|
||||
|
||||
- id: GAP-NEW-007
|
||||
title: "drawing_tools/templates undocumented"
|
||||
priority: "P1"
|
||||
status: "pending"
|
||||
description: |
|
||||
Las tablas trading.drawing_tools y trading.drawing_templates
|
||||
no están documentadas en los inventarios.
|
||||
created_at: "2026-02-05"
|
||||
|
||||
- id: GAP-NEW-008
|
||||
title: "course_tags/tag_assignments undocumented"
|
||||
priority: "P1"
|
||||
status: "pending"
|
||||
description: |
|
||||
Las tablas education.course_tags y education.tag_assignments
|
||||
no están documentadas en los inventarios.
|
||||
created_at: "2026-02-05"
|
||||
|
||||
- id: GAP-NEW-009
|
||||
title: "prediction_overlays undocumented"
|
||||
priority: "P1"
|
||||
status: "pending"
|
||||
description: |
|
||||
La tabla ml.prediction_overlays no está documentada en los inventarios.
|
||||
created_at: "2026-02-05"
|
||||
|
||||
- id: GAP-NEW-010
|
||||
title: "portfolio_snapshots undocumented"
|
||||
priority: "P1"
|
||||
status: "pending"
|
||||
description: |
|
||||
La tabla portfolio.portfolio_snapshots no está documentada en los inventarios.
|
||||
created_at: "2026-02-05"
|
||||
|
||||
- id: GAP-NEW-011
|
||||
title: "market_data.staging undocumented"
|
||||
priority: "P2"
|
||||
status: "pending"
|
||||
description: |
|
||||
La tabla market_data.staging no está documentada en los inventarios.
|
||||
created_at: "2026-02-05"
|
||||
|
||||
- id: GAP-NEW-012
|
||||
title: "nomenclature inconsistency asset_type vs asset_class"
|
||||
priority: "P2"
|
||||
status: "pending"
|
||||
description: |
|
||||
Inconsistencia de nomenclatura: algunas tablas usan asset_type
|
||||
y otras usan asset_class para referirse al mismo concepto.
|
||||
created_at: "2026-02-05"
|
||||
|
||||
- id: GAP-NEW-013
|
||||
title: "trading.bots.strategy_type should ref investment.trading_agent"
|
||||
priority: "P3"
|
||||
status: "pending"
|
||||
description: |
|
||||
El campo strategy_type en trading.bots debería referenciar
|
||||
investment.trading_agent en lugar de ser un string libre.
|
||||
created_at: "2026-02-05"
|
||||
|
||||
# ==============================================================================
|
||||
# Estadísticas
|
||||
# ==============================================================================
|
||||
|
||||
statistics:
|
||||
by_priority:
|
||||
P1: 6 # +4 nuevos DDL gaps
|
||||
P2: 7 # +2 conflictos
|
||||
P3: 5 # +1 gap menor
|
||||
P0: 2 # 1 pending + 1 resolved
|
||||
P1: 10 # 4 completed DDL + 2 pending DDL + 4 new gaps
|
||||
P2: 12 # 5 original + 2 conflicts + 5 new gaps
|
||||
P3: 6 # 4 original + 1 DDL in_progress + 1 new gap
|
||||
by_status:
|
||||
pending: 11
|
||||
in_progress: 6 # 6 gaps DDL nuevos
|
||||
analizado: 3 # 3 conflictos
|
||||
completed: 0
|
||||
pending: 24
|
||||
in_progress: 2 # GAP-DDL-002, GAP-DDL-006
|
||||
analizado: 3 # 3 conflictos
|
||||
completed: 4 # GAP-DDL-001, GAP-DDL-003, GAP-DDL-004, GAP-DDL-005
|
||||
resolved: 1 # GAP-NEW-002
|
||||
by_effort:
|
||||
pequeño: 8
|
||||
medio: 6
|
||||
grande: 1
|
||||
total_estimated_hours: 181 # +19 horas para nuevos gaps
|
||||
grande: 2
|
||||
total_estimated_hours: 181
|
||||
|
||||
# ==============================================================================
|
||||
# Notas de Tracking
|
||||
@ -583,8 +709,8 @@ tracking_notes: |
|
||||
pull_request: "https://github.com/org/repo/pull/XXX"
|
||||
review_status: "approved"
|
||||
|
||||
last_updated: "2026-02-03"
|
||||
next_review: "2026-02-10"
|
||||
last_updated: "2026-02-05"
|
||||
next_review: "2026-02-12"
|
||||
|
||||
# ==============================================================================
|
||||
# Análisis 2026-02-03 - Resumen
|
||||
@ -605,3 +731,43 @@ analysis_2026_02_03:
|
||||
coherencia_objetivo:
|
||||
ddl_backend: "90%"
|
||||
ddl_requerimientos: "85%"
|
||||
|
||||
# ==============================================================================
|
||||
# Análisis 2026-02-05 - Resumen
|
||||
# ==============================================================================
|
||||
analysis_2026_02_05:
|
||||
agent: "Claude Code (Opus 4.6)"
|
||||
task: "TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD"
|
||||
archivos_analizados: 100
|
||||
gaps_resueltos: 4
|
||||
gaps_nuevos: 13
|
||||
backend_coherence:
|
||||
entities_coverage: "68%"
|
||||
services_coverage: "52%"
|
||||
controllers_coverage: "45%"
|
||||
entities_missing: 31
|
||||
enum_conflicts:
|
||||
total: 3
|
||||
migration_files_exist: 2
|
||||
migrations_executed: 0
|
||||
conflicts_unresolved: 3
|
||||
inventory_updates:
|
||||
database_inventory: "v2.0.0 (81 -> 100 tables)"
|
||||
ddl_complete_matrix: "v2.0.0 (93 -> 100 tables)"
|
||||
documentation_purge:
|
||||
empty_dirs_to_delete: 1
|
||||
task_folders_to_archive: 4
|
||||
recomendaciones:
|
||||
- "Ejecutar migraciones de enums pendientes"
|
||||
- "Crear 31 entities backend faltantes"
|
||||
- "Documentar feature_flags schema completo"
|
||||
- "Consolidar trading.symbols vs market_data.tickers"
|
||||
- "Crear servicios para audit schema (7 tablas sin service)"
|
||||
coherencia_actual:
|
||||
ddl_inventario: "100%"
|
||||
ddl_backend: "68%"
|
||||
ddl_requerimientos: "78%"
|
||||
coherencia_objetivo:
|
||||
ddl_inventario: "100%"
|
||||
ddl_backend: "95%"
|
||||
ddl_requerimientos: "95%"
|
||||
|
||||
@ -2,23 +2,25 @@
|
||||
# BACKEND_INVENTORY.yml - Trading Platform
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
version: "1.3.0"
|
||||
version: "1.5.0"
|
||||
fecha_actualizacion: "2026-02-04"
|
||||
proyecto: "trading-platform"
|
||||
ultima_sincronizacion: "2026-02-04T14:00:00Z"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# RESUMEN
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
resumen:
|
||||
total_modulos: 13
|
||||
total_controllers: 25
|
||||
total_services: 38
|
||||
total_modulos: 19 # auth, users, trading, education, investment, notifications, payments, ml, admin, llm, agents, portfolio, shared, currency, risk, proxy, feature-flags, market-data, audit, bots
|
||||
total_controllers: 35 # +2 market-data, bots
|
||||
total_services: 54 # +2 market-data, bots
|
||||
total_repositories: 4
|
||||
total_endpoints: 79
|
||||
total_endpoints: 116 # Conteo real post Sprint 3 (~116 implementados)
|
||||
ubicacion: "apps/backend/src/"
|
||||
framework: "Express.js 5.0.1"
|
||||
lenguaje: "TypeScript 5.3.3"
|
||||
ultima_sincronizacion: "2026-02-04T14:00:00Z"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# MODULOS
|
||||
@ -28,9 +30,10 @@ modulos:
|
||||
|
||||
auth:
|
||||
descripcion: "Autenticacion OAuth, Email, SMS, 2FA"
|
||||
controllers: 5
|
||||
services: 5
|
||||
controllers: 6 # email-auth, oauth, phone-auth, token, auth, two-factor
|
||||
services: 6 # token, email, oauth, phone, twofa, session-cache
|
||||
routes: 1
|
||||
endpoints: 27 # register, login, verify-email, forgot/reset-password, change-password, phone, oauth, 2fa, sessions
|
||||
dtos: 6
|
||||
servicios_detalle:
|
||||
- token.service.ts
|
||||
@ -38,27 +41,70 @@ modulos:
|
||||
- oauth.service.ts
|
||||
- phone.service.ts
|
||||
- twofa.service.ts
|
||||
- session-cache.service.ts
|
||||
controllers_detalle:
|
||||
- auth.controller.ts
|
||||
- email-auth.controller.ts
|
||||
- oauth.controller.ts
|
||||
- phone-auth.controller.ts
|
||||
- token.controller.ts
|
||||
- two-factor.controller.ts
|
||||
|
||||
users:
|
||||
descripcion: "Gestion de perfiles de usuario"
|
||||
controllers: 0
|
||||
descripcion: "Gestion de perfiles de usuario (mejorado Sprint 3)"
|
||||
controllers: 1
|
||||
services: 1
|
||||
routes: 1
|
||||
endpoints: 16 # +6 endpoints Sprint 3: me, update, avatar, password, delete, public, admin CRUD, preferences, activity
|
||||
servicios_detalle:
|
||||
- users.service.ts
|
||||
controllers_detalle:
|
||||
- users.controller.ts
|
||||
sprint_3_endpoints:
|
||||
- GET /users/me/preferences
|
||||
- PUT /users/me/preferences
|
||||
- GET /users/me/activity
|
||||
- GET /users/me/sessions
|
||||
- DELETE /users/me/sessions/:id
|
||||
- POST /users/me/export
|
||||
|
||||
trading:
|
||||
descripcion: "Orders, trades, signals, bots"
|
||||
controllers: 0
|
||||
services: 8
|
||||
descripcion: "Orders, trades, signals, bots, watchlist, alerts"
|
||||
controllers: 6 # trading, watchlist, indicators, alerts, export, bots
|
||||
services: 11 # binance, cache, indicators, market, paper-trading, watchlist, export, alerts, order, drawing, bots
|
||||
routes: 1
|
||||
endpoints: 64 # market data (9), indicators (9), paper trading (13), export (4), watchlist (10), alerts (9), bots (11)
|
||||
servicios_detalle:
|
||||
- signal.service.ts
|
||||
- order.service.ts
|
||||
- trade.service.ts
|
||||
- bot.service.ts
|
||||
- binance.service.ts
|
||||
- cache.service.ts
|
||||
- indicators.service.ts
|
||||
- market.service.ts
|
||||
- paper-trading.service.ts
|
||||
- watchlist.service.ts
|
||||
- position.service.ts
|
||||
- backtest.service.ts
|
||||
- market-data.service.ts
|
||||
- export.service.ts
|
||||
- alerts.service.ts
|
||||
- order.service.ts
|
||||
- drawing.service.ts
|
||||
- bots.service.ts # NUEVO Sprint 3
|
||||
controllers_detalle:
|
||||
- trading.controller.ts
|
||||
- watchlist.controller.ts
|
||||
- indicators.controller.ts
|
||||
- alerts.controller.ts
|
||||
- export.controller.ts
|
||||
- bots.controller.ts # NUEVO Sprint 3
|
||||
bots_endpoints_sprint_3:
|
||||
- GET /trading/bots
|
||||
- GET /trading/bots/:id
|
||||
- POST /trading/bots
|
||||
- PUT /trading/bots/:id
|
||||
- DELETE /trading/bots/:id
|
||||
- POST /trading/bots/:id/start
|
||||
- POST /trading/bots/:id/stop
|
||||
- GET /trading/bots/:id/stats
|
||||
- GET /trading/bots/:id/trades
|
||||
- GET /trading/bots/templates
|
||||
- POST /trading/bots/from-template
|
||||
|
||||
education:
|
||||
descripcion: "Cursos, quizzes, gamificacion, videos"
|
||||
@ -170,6 +216,7 @@ modulos:
|
||||
repositories: 4
|
||||
routes: 1
|
||||
websocket: 1
|
||||
endpoints: 17
|
||||
servicios_detalle:
|
||||
- portfolio.service.ts
|
||||
controllers_detalle:
|
||||
@ -181,7 +228,7 @@ modulos:
|
||||
- snapshot.repository.ts
|
||||
websocket_detalle:
|
||||
- portfolio.websocket.ts
|
||||
endpoints:
|
||||
endpoints_detalle:
|
||||
- GET /portfolio
|
||||
- POST /portfolio
|
||||
- GET /portfolio/:id
|
||||
@ -196,6 +243,72 @@ modulos:
|
||||
- PATCH /portfolio/goals/:id
|
||||
- DELETE /portfolio/goals/:id
|
||||
|
||||
market-data:
|
||||
descripcion: "Market data OHLCV, tickers, real-time prices (NUEVO Sprint 3)"
|
||||
controllers: 1
|
||||
services: 1
|
||||
routes: 1
|
||||
endpoints: 9 # health, symbols, ohlcv x2, historical, ticker, tickers, price, ticker-info
|
||||
servicios_detalle:
|
||||
- marketData.service.ts
|
||||
controllers_detalle:
|
||||
- market-data.controller.ts
|
||||
|
||||
audit:
|
||||
descripcion: "Audit logs, security events, compliance tracking (NUEVO Sprint 3)"
|
||||
controllers: 1
|
||||
services: 1
|
||||
routes: 1
|
||||
endpoints: 13 # my-activity, logs, security-events, compliance, stats, log, events
|
||||
servicios_detalle:
|
||||
- audit.service.ts
|
||||
controllers_detalle:
|
||||
- audit.controller.ts
|
||||
|
||||
currency:
|
||||
descripcion: "Currency conversion and rates"
|
||||
controllers: 1
|
||||
services: 1
|
||||
routes: 1
|
||||
endpoints: 4
|
||||
servicios_detalle:
|
||||
- currency.service.ts
|
||||
controllers_detalle:
|
||||
- currency.controller.ts
|
||||
|
||||
risk:
|
||||
descripcion: "Risk assessment and monitoring"
|
||||
controllers: 1
|
||||
services: 1
|
||||
routes: 1
|
||||
endpoints: 7
|
||||
servicios_detalle:
|
||||
- risk.service.ts
|
||||
controllers_detalle:
|
||||
- risk.controller.ts
|
||||
|
||||
proxy:
|
||||
descripcion: "External API proxy services"
|
||||
controllers: 1
|
||||
services: 1
|
||||
routes: 1
|
||||
endpoints: 34
|
||||
servicios_detalle:
|
||||
- proxy.service.ts
|
||||
controllers_detalle:
|
||||
- proxy.controller.ts
|
||||
|
||||
feature-flags:
|
||||
descripcion: "Feature flags management"
|
||||
controllers: 1
|
||||
services: 1
|
||||
routes: 1
|
||||
endpoints: 12
|
||||
servicios_detalle:
|
||||
- feature-flags.service.ts
|
||||
controllers_detalle:
|
||||
- feature-flags.controller.ts
|
||||
|
||||
shared:
|
||||
descripcion: "Servicios compartidos (storage, video processing, etc.)"
|
||||
controllers: 0
|
||||
|
||||
@ -2,25 +2,63 @@
|
||||
# DATABASE_INVENTORY.yml - Trading Platform
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
version: "1.1.0"
|
||||
fecha_actualizacion: "2026-02-04"
|
||||
version: "2.0.0"
|
||||
fecha_actualizacion: "2026-02-05"
|
||||
ultima_sincronizacion: "2026-02-05T12:00:00Z"
|
||||
proyecto: "trading-platform"
|
||||
actualizado_por: "TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# RESUMEN
|
||||
# RESUMEN (ACTUALIZADO - Validacion Integral 2026-02-05)
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
resumen:
|
||||
total_schemas: 11
|
||||
total_tablas: 78
|
||||
total_archivos_ddl: 115
|
||||
total_tablas: 101 # auth=12, feature_flags=3 (multi-CREATE en 1 archivo), total 101 tablas DDL
|
||||
total_enums: 50 # Corregido de 15 -> 50+ (todos los schemas)
|
||||
total_funciones: 17
|
||||
total_triggers: 39
|
||||
total_archivos_ddl: 123
|
||||
ubicacion_ddl: "apps/database/ddl/schemas/"
|
||||
motor: "PostgreSQL 16"
|
||||
extensions:
|
||||
- "uuid-ossp"
|
||||
- "pgcrypto"
|
||||
- "citext"
|
||||
- "unaccent"
|
||||
- "pg_trgm"
|
||||
- "vector (pgvector)"
|
||||
features:
|
||||
- "Particiones temporales"
|
||||
- "UUIDs como PKs"
|
||||
- "JSONB para datos flexibles"
|
||||
- "Triggers de auditoria"
|
||||
- "pgvector para embeddings ML"
|
||||
- "Indices parciales para queries frecuentes"
|
||||
- "GIN indexes para JSONB"
|
||||
- "CITEXT para emails case-insensitive"
|
||||
|
||||
# Delta vs version anterior (1.2.0):
|
||||
delta_v1_2_0:
|
||||
tablas_agregadas: 19
|
||||
schemas_documentados_nuevos: 1 # feature_flags
|
||||
enums_corregidos: 3 # transaction_type, risk_profile, timeframe
|
||||
errores_fk_corregidos: 1 # price_alerts
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# TIPOS GLOBALES (public schema)
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
global_types:
|
||||
- name: "public.trading_timeframe"
|
||||
type: "ENUM"
|
||||
values: ["1m", "5m", "15m", "30m", "1h", "4h", "1d", "1w", "1M"]
|
||||
nota: "Tipo unificado - reemplaza trading.timeframe y market_data.timeframe (deprecados)"
|
||||
|
||||
global_functions:
|
||||
- name: "public.update_updated_at()"
|
||||
type: "TRIGGER FUNCTION"
|
||||
descripcion: "Actualiza campo updated_at automaticamente"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# SCHEMAS
|
||||
@ -28,141 +66,354 @@ resumen:
|
||||
|
||||
schemas:
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# AUTH - Autenticacion y Usuarios
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
auth:
|
||||
descripcion: "Autenticacion, sesiones, OAuth"
|
||||
tablas: 10
|
||||
descripcion: "Autenticacion, sesiones, OAuth, notificaciones"
|
||||
tablas: 12 # Corregido: 12 tablas confirmadas via DDL
|
||||
critico: true
|
||||
tablas_lista:
|
||||
- users
|
||||
- user_profiles
|
||||
- oauth_accounts
|
||||
- sessions
|
||||
- email_verifications
|
||||
- phone_verifications
|
||||
- password_reset_tokens
|
||||
- auth_logs
|
||||
- login_attempts
|
||||
- rate_limiting_config
|
||||
- users # Tabla central de usuarios
|
||||
- user_profiles # Perfiles extendidos
|
||||
- oauth_accounts # Cuentas OAuth (Google, Facebook, Apple, GitHub)
|
||||
- sessions # Sesiones activas con refresh tokens
|
||||
- email_verifications # Tokens de verificacion email
|
||||
- phone_verifications # Codigos de verificacion telefono
|
||||
- password_reset_tokens # Tokens de recuperacion de contrasena
|
||||
- auth_logs # Log de eventos de autenticacion
|
||||
- login_attempts # Tracking de intentos de login
|
||||
- rate_limiting_config # Configuracion de rate limiting dinamico
|
||||
- notifications # NUEVO - Notificaciones del sistema
|
||||
- user_push_tokens # NUEVO - Tokens push (FCM/APNs)
|
||||
enums:
|
||||
- user_status: ["pending_verification", "active", "suspended", "deactivated", "banned"]
|
||||
- user_role: ["user", "trader", "analyst", "admin", "super_admin"]
|
||||
- oauth_provider: ["google", "facebook", "apple", "github", "microsoft", "twitter"]
|
||||
- phone_channel: ["sms", "whatsapp"]
|
||||
- auth_event_type: ["login", "logout", "register", "password_change", "password_reset_request", "password_reset_complete", "email_verification", "phone_verification", "mfa_enabled", "mfa_disabled", "session_expired", "account_suspended", "account_reactivated", "failed_login", "oauth_linked", "oauth_unlinked"]
|
||||
- mfa_method: ["none", "totp", "sms", "email"]
|
||||
- notification_type: ["system", "trading", "investment", "education", "payment", "security", "marketing"]
|
||||
funciones:
|
||||
- "auth.log_auth_event()"
|
||||
- "auth.cleanup_expired_sessions()"
|
||||
- "auth.create_user_profile_trigger()"
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# TRADING - Operaciones de Trading
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
trading:
|
||||
descripcion: "Orders, trades, signals, bots"
|
||||
tablas: 10
|
||||
descripcion: "Orders, trades, signals, bots, alerts, herramientas dibujo"
|
||||
tablas: 13 # Corregido de 11 -> 13
|
||||
critico: true
|
||||
tablas_lista:
|
||||
- orders
|
||||
- trades
|
||||
- positions
|
||||
- signals
|
||||
- bots
|
||||
- watchlists
|
||||
- watchlist_items
|
||||
- symbols
|
||||
- paper_balances
|
||||
- trading_metrics
|
||||
|
||||
financial:
|
||||
descripcion: "Pagos, wallets, subscriptions"
|
||||
tablas: 9
|
||||
critico: true
|
||||
tablas_lista:
|
||||
- payments
|
||||
- subscriptions
|
||||
- wallets
|
||||
- wallet_transactions
|
||||
- wallet_audit_log
|
||||
- wallet_limits
|
||||
- invoices
|
||||
- payment_methods
|
||||
- customers
|
||||
|
||||
ml:
|
||||
descripcion: "Modelos ML, predicciones, backtesting"
|
||||
tablas: 10
|
||||
critico: true
|
||||
tablas_lista:
|
||||
- models
|
||||
- model_versions
|
||||
- predictions
|
||||
- prediction_outcomes
|
||||
- backtest_runs
|
||||
- feature_store
|
||||
- llm_predictions
|
||||
- llm_decisions
|
||||
- llm_prediction_outcomes
|
||||
- risk_events
|
||||
- symbols # Catalogo de instrumentos financieros
|
||||
- watchlists # Listas de vigilancia del usuario
|
||||
- watchlist_items # Items en watchlists
|
||||
- bots # Bots de trading (paper, live, backtest)
|
||||
- orders # Ordenes de trading
|
||||
- positions # Posiciones abiertas/cerradas
|
||||
- trades # Historial de ejecuciones
|
||||
- signals # Senales ML (interfaz con ml schema)
|
||||
- trading_metrics # Metricas de rendimiento
|
||||
- paper_balances # Balances paper trading
|
||||
- price_alerts # Alertas de precio (Sprint 3)
|
||||
- drawing_tools # NUEVO - Herramientas de dibujo en charts
|
||||
- drawing_templates # NUEVO - Templates de dibujo reutilizables
|
||||
enums:
|
||||
- order_type: ["market", "limit", "stop", "stop_limit", "trailing_stop"]
|
||||
- order_status: ["pending", "open", "partially_filled", "filled", "cancelled", "rejected", "expired"]
|
||||
- order_side: ["buy", "sell"]
|
||||
- position_status: ["open", "closed", "liquidated"]
|
||||
- signal_type: ["entry_long", "entry_short", "exit_long", "exit_short", "hold"]
|
||||
- confidence_level: ["low", "medium", "high", "very_high"]
|
||||
- timeframe: ["1m", "5m", "15m", "30m", "1h", "4h", "1d", "1w", "1M"] # DEPRECADO -> usar public.trading_timeframe
|
||||
- bot_type: ["paper", "live", "backtest"]
|
||||
- bot_status: ["active", "paused", "stopped", "error"]
|
||||
- drawing_tool_type: ["trend_line", "horizontal_line", "vertical_line", "ray", "extended_line", "parallel_channel", "fibonacci_retracement", "fibonacci_extension", "rectangle", "ellipse", "triangle", "arrow", "text", "price_range", "date_range", "order_block", "fair_value_gap", "liquidity_level"]
|
||||
- alert_type: ["price_above", "price_below", "percent_change", "volume_spike"]
|
||||
- alert_status: ["active", "triggered", "expired", "cancelled"]
|
||||
funciones:
|
||||
- "trading.calculate_position_pnl()"
|
||||
- "trading.update_bot_stats()"
|
||||
- "trading.initialize_paper_balance()"
|
||||
- "trading.create_default_watchlist()"
|
||||
- "trading.update_price_alerts_timestamp()"
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# EDUCATION - Plataforma Educativa
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
education:
|
||||
descripcion: "Cursos, quizzes, gamificacion, videos"
|
||||
tablas: 12
|
||||
descripcion: "Cursos, quizzes, gamificacion, videos, instructores, tags, reviews"
|
||||
tablas: 19 # Corregido de 12 -> 19
|
||||
critico: false
|
||||
tablas_lista:
|
||||
- courses
|
||||
- modules
|
||||
- lessons
|
||||
- categories
|
||||
- enrollments
|
||||
- quiz_questions
|
||||
- quizzes
|
||||
- quiz_attempts
|
||||
- user_gamification_profile
|
||||
- user_achievements
|
||||
- certificates
|
||||
- videos
|
||||
- categories # Categorias de cursos
|
||||
- courses # Cursos educativos
|
||||
- modules # Modulos dentro de cursos
|
||||
- lessons # Lecciones individuales
|
||||
- enrollments # Inscripciones de estudiantes
|
||||
- progress # NUEVO - Progreso por leccion
|
||||
- quizzes # Evaluaciones
|
||||
- quiz_questions # Preguntas de quiz
|
||||
- quiz_attempts # Intentos de quiz
|
||||
- certificates # Certificados de completitud
|
||||
- user_achievements # Badges y logros
|
||||
- user_gamification_profile # Perfil de gamificacion (XP, nivel)
|
||||
- user_activity_log # NUEVO - Log de actividad usuario
|
||||
- course_reviews # NUEVO - Reviews de cursos (1-5 estrellas)
|
||||
- videos # Videos de lecciones
|
||||
- review_helpful_votes # NUEVO - Votos "helpful" en reviews
|
||||
- instructors # NUEVO - Perfiles de instructores
|
||||
- course_tags # NUEVO - Tags para cursos
|
||||
- course_tag_assignments # NUEVO - Asignacion M:N curso-tag
|
||||
enums:
|
||||
- difficulty_level: ["beginner", "intermediate", "advanced", "expert"]
|
||||
- course_status: ["draft", "published", "archived"]
|
||||
- enrollment_status: ["active", "completed", "expired", "cancelled"]
|
||||
- lesson_content_type: ["video", "article", "interactive", "quiz"]
|
||||
- question_type: ["multiple_choice", "true_false", "multiple_select", "fill_blank", "code_challenge"]
|
||||
- achievement_type: ["course_completion", "quiz_perfect_score", "streak_milestone", "level_up", "special_event"]
|
||||
funciones:
|
||||
- "education.update_enrollment_progress()"
|
||||
- "education.auto_complete_enrollment()"
|
||||
- "education.generate_certificate()"
|
||||
- "education.update_course_stats()"
|
||||
- "education.update_enrollment_count()"
|
||||
- "education.update_gamification_profile()"
|
||||
|
||||
investment:
|
||||
descripcion: "Productos de inversion, cuentas"
|
||||
tablas: 6
|
||||
critico: false
|
||||
tablas_lista:
|
||||
- accounts
|
||||
- products
|
||||
- transactions
|
||||
- daily_performance
|
||||
- distributions
|
||||
- withdrawal_requests
|
||||
|
||||
market_data:
|
||||
descripcion: "Datos de mercado OHLCV"
|
||||
tablas: 3
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# FINANCIAL - Wallets, Pagos, Subscripciones
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
financial:
|
||||
descripcion: "Wallets unificados, pagos, subscripciones, reembolsos, tipos de cambio"
|
||||
tablas: 11 # Corregido de 9 -> 11
|
||||
critico: true
|
||||
tablas_lista:
|
||||
- tickers
|
||||
- ohlcv_5m
|
||||
- ohlcv_15m
|
||||
- wallets # Sistema unificado de wallets (SSOT)
|
||||
- wallet_transactions # Historial de transacciones
|
||||
- subscriptions # Suscripciones Stripe
|
||||
- invoices # Facturas
|
||||
- payments # Pagos
|
||||
- wallet_audit_log # Log de auditoria de wallets
|
||||
- wallet_limits # Limites operacionales
|
||||
- customers # Clientes Stripe
|
||||
- payment_methods # Metodos de pago guardados
|
||||
- currency_exchange_rates # NUEVO - Tipos de cambio
|
||||
- refunds # NUEVO - Reembolsos
|
||||
enums:
|
||||
- wallet_type: ["trading", "investment", "earnings", "referral"]
|
||||
- wallet_status: ["active", "frozen", "closed"]
|
||||
- transaction_type: ["deposit", "withdrawal", "transfer_in", "transfer_out", "fee", "refund", "earning", "distribution", "bonus"] # DEPRECADO -> renombrar a wallet_transaction_type
|
||||
- transaction_status: ["pending", "processing", "completed", "failed", "cancelled", "reversed"]
|
||||
- subscription_plan: ["free", "basic", "pro", "premium", "enterprise"]
|
||||
- subscription_status: ["active", "past_due", "cancelled", "incomplete", "trialing", "unpaid", "paused"]
|
||||
- currency_code: ["USD", "MXN", "EUR"]
|
||||
- payment_method: ["card", "bank_transfer", "wire", "crypto", "paypal", "stripe"]
|
||||
- payment_status: ["pending", "processing", "succeeded", "failed", "cancelled", "refunded"]
|
||||
- invoice_type: ["subscription", "one_time", "usage"]
|
||||
- invoice_status: ["draft", "open", "paid", "void", "uncollectible"]
|
||||
funciones:
|
||||
- "financial.update_wallet_balance()"
|
||||
- "financial.process_transaction()"
|
||||
|
||||
llm:
|
||||
descripcion: "LLM memory, conversaciones"
|
||||
tablas: 4
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# INVESTMENT - Productos PAMM, Cuentas, Distribuciones
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
investment:
|
||||
descripcion: "Productos de inversion PAMM, cuentas, distribuciones, ejecuciones agentes"
|
||||
tablas: 10 # Corregido de 8 -> 10
|
||||
critico: false
|
||||
tablas_lista:
|
||||
- conversations
|
||||
- messages
|
||||
- embeddings
|
||||
- user_memory
|
||||
- products # Productos PAMM (Atlas, Orion, Nova)
|
||||
- risk_questionnaire # NUEVO en inventario - Cuestionario de riesgo
|
||||
- accounts # Cuentas individuales PAMM
|
||||
- distributions # Distribuciones de ganancias
|
||||
- transactions # Transacciones de inversion
|
||||
- withdrawal_requests # Solicitudes de retiro
|
||||
- daily_performance # Rendimiento diario
|
||||
- distribution_history # Historial de distribuciones (Sprint 3)
|
||||
- distribution_runs # Lotes de distribucion (Sprint 3)
|
||||
- agent_executions # NUEVO - Ejecuciones de agentes de trading
|
||||
enums:
|
||||
- trading_agent: ["atlas", "orion", "nova"]
|
||||
- risk_profile: ["conservative", "moderate", "aggressive"] # DUPLICADO con portfolio -> consolidar en public
|
||||
- account_status: ["pending_kyc", "active", "suspended", "closed"]
|
||||
- distribution_frequency: ["monthly", "quarterly"]
|
||||
- transaction_type: ["deposit", "withdrawal", "distribution"] # DEPRECADO -> renombrar a investment_transaction_type
|
||||
- transaction_status: ["pending", "processing", "completed", "failed", "cancelled"]
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# ML - Machine Learning, Predicciones
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
ml:
|
||||
descripcion: "Modelos ML, predicciones, backtesting, senales LLM, overlays"
|
||||
tablas: 12 # Corregido de 10 -> 12
|
||||
critico: true
|
||||
tablas_lista:
|
||||
- models # Registro de modelos ML
|
||||
- model_versions # Versionado de modelos
|
||||
- predictions # Predicciones generadas
|
||||
- prediction_outcomes # Resultados de predicciones
|
||||
- backtest_runs # Corridas de backtesting
|
||||
- feature_store # Cache de features ML
|
||||
- llm_predictions # Predicciones generadas por LLM
|
||||
- llm_decisions # Decisiones estrategicas LLM
|
||||
- llm_prediction_outcomes # Resultados de predicciones LLM
|
||||
- risk_events # Eventos de riesgo detectados
|
||||
- llm_signals # NUEVO - Senales estrategicas LLM
|
||||
- prediction_overlays # NUEVO - Datos de overlay para charts
|
||||
enums:
|
||||
- model_type: ["classification", "regression", "time_series", "clustering", "anomaly_detection", "reinforcement_learning"]
|
||||
- framework: ["sklearn", "tensorflow", "pytorch", "xgboost", "lightgbm", "prophet", "custom"]
|
||||
- model_status: ["development", "testing", "staging", "production", "deprecated", "archived"]
|
||||
- prediction_type: ["price_direction", "price_target", "volatility", "trend", "signal", "risk_score"]
|
||||
- prediction_result: ["buy", "sell", "hold", "up", "down", "neutral"]
|
||||
- outcome_status: ["pending", "correct", "incorrect", "partially_correct", "expired"]
|
||||
funciones:
|
||||
- "ml.calculate_prediction_accuracy()"
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# LLM - Agente de IA, Conversaciones
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
llm:
|
||||
descripcion: "Conversaciones LLM, mensajes, preferencias, memoria, embeddings"
|
||||
tablas: 5 # Corregido de 4 -> 5
|
||||
critico: false
|
||||
tablas_lista:
|
||||
- conversations # Sesiones de chat con IA
|
||||
- messages # Mensajes individuales
|
||||
- user_preferences # NUEVO en inventario - Preferencias LLM del usuario
|
||||
- user_memory # Memoria contextual del usuario
|
||||
- embeddings # Embeddings vectoriales (pgvector)
|
||||
enums:
|
||||
- message_role: ["user", "assistant", "system", "tool"]
|
||||
- conversation_status: ["active", "archived", "deleted"]
|
||||
- conversation_type: ["general", "trading_advice", "education", "market_analysis", "support", "onboarding"]
|
||||
- communication_tone: ["casual", "professional", "technical"]
|
||||
- verbosity_level: ["brief", "normal", "detailed"]
|
||||
- memory_type: ["fact", "preference", "context", "goal", "constraint"]
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# AUDIT - Auditoria y Compliance
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
audit:
|
||||
descripcion: "Auditoria y logs del sistema"
|
||||
descripcion: "Auditoria, logs de seguridad, compliance, tracking de API"
|
||||
tablas: 7
|
||||
critico: false
|
||||
tablas_lista:
|
||||
- audit_logs
|
||||
- security_events
|
||||
- system_events
|
||||
- trading_audit
|
||||
- api_request_logs
|
||||
- data_access_logs
|
||||
- compliance_logs
|
||||
- audit_logs # Log general de auditoria
|
||||
- security_events # Eventos de seguridad
|
||||
- system_events # Eventos del sistema
|
||||
- trading_audit # Auditoria de operaciones trading
|
||||
- api_request_logs # Log de peticiones API
|
||||
- data_access_logs # Log de acceso a datos
|
||||
- compliance_logs # Logs de compliance regulatorio
|
||||
enums:
|
||||
- audit_event_type: ["create", "read", "update", "delete", "login", "logout", "permission_change", "config_change", "export", "import"]
|
||||
- event_severity: ["debug", "info", "warning", "error", "critical"]
|
||||
- security_event_category: ["authentication", "authorization", "data_access", "configuration", "suspicious_activity", "compliance"]
|
||||
- event_status: ["success", "failure", "blocked", "pending_review"]
|
||||
- resource_type: ["user", "account", "transaction", "order", "position", "bot", "subscription", "payment", "course", "model", "system_config"]
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# PORTFOLIO - Gestion de Portafolio
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
portfolio:
|
||||
descripcion: "Gestion de portafolio"
|
||||
tablas: 4
|
||||
descripcion: "Portafolios, asignaciones, metas, rebalanceo, snapshots"
|
||||
tablas: 5 # Corregido de 4 -> 5
|
||||
critico: false
|
||||
nota: "Parte integrada con trading/investment"
|
||||
tablas_lista:
|
||||
- portfolios # Portafolios de inversion del usuario
|
||||
- portfolio_allocations # Asignaciones de activos
|
||||
- portfolio_goals # Metas financieras
|
||||
- rebalance_history # Historial de rebalanceo
|
||||
- portfolio_snapshots # NUEVO - Snapshots historicos del portafolio
|
||||
enums:
|
||||
- risk_profile: ["conservative", "moderate", "aggressive"] # DUPLICADO con investment -> consolidar en public
|
||||
- goal_status: ["active", "completed", "cancelled"]
|
||||
- rebalance_action: ["buy", "sell", "hold"]
|
||||
- allocation_status: ["active", "pending", "closed"]
|
||||
|
||||
system:
|
||||
descripcion: "Configuracion del sistema"
|
||||
tablas: 3
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# MARKET DATA - Datos de Mercado OHLCV
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
market_data:
|
||||
descripcion: "Datos de mercado OHLCV, tickers, staging ETL"
|
||||
tablas: 4 # Corregido de 3 -> 4
|
||||
critico: true
|
||||
tablas_lista:
|
||||
- tickers # Catalogo de simbolos/tickers
|
||||
- ohlcv_5m # Velas OHLCV 5 minutos
|
||||
- ohlcv_15m # Velas OHLCV 15 minutos
|
||||
- staging # NUEVO - Tabla staging para ingesta ETL
|
||||
enums:
|
||||
- timeframe: ["1m", "5m", "15m", "30m", "1h", "4h", "1d", "1w"] # DEPRECADO - falta '1M', migrar a public.trading_timeframe
|
||||
funciones:
|
||||
- "market_data.aggregate_15m()"
|
||||
notas:
|
||||
- "CONFLICTO: tickers duplica funcionalidad de trading.symbols (DUP-1)"
|
||||
- "DEPRECADO: timeframe enum falta '1M', migrar a public.trading_timeframe"
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# FEATURE FLAGS - Feature Toggles
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
feature_flags:
|
||||
descripcion: "Sistema de feature flags para toggles de funcionalidad"
|
||||
tablas: 3 # Corregido: 3 tablas en 01-flags.sql (multi-CREATE)
|
||||
critico: false
|
||||
tablas_lista:
|
||||
- flags # Configuracion de feature flags
|
||||
- user_flags # Overrides por usuario (FK auth.users, feature_flags.flags)
|
||||
- evaluations # Historial de evaluacion de flags (analytics)
|
||||
enums:
|
||||
- flag_status: ["disabled", "enabled", "percentage"]
|
||||
- rollout_stage: ["development", "beta", "production"]
|
||||
funciones:
|
||||
- "feature_flags.evaluate_flag(p_flag_code, p_user_id)"
|
||||
- "feature_flags.update_timestamp()"
|
||||
notas:
|
||||
- "3 tablas definidas en un solo archivo 01-flags.sql"
|
||||
- "Sin servicios backend implementados"
|
||||
- "Incluye funcion evaluate_flag() para evaluacion con prioridades"
|
||||
- "8 flags iniciales insertados (seed data)"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# ISSUES CONOCIDOS (2026-02-05)
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
issues:
|
||||
resueltos:
|
||||
- id: "GAP-DDL-P0-001"
|
||||
descripcion: "FK incorrecta en price_alerts (auth.user_profiles -> auth.users)"
|
||||
estado: "RESUELTO 2026-02-05"
|
||||
|
||||
pendientes:
|
||||
enums_duplicados:
|
||||
- conflicto: "transaction_type"
|
||||
schemas: ["financial", "investment"]
|
||||
estado: "Migracion pendiente"
|
||||
resolucion: "Renombrar a wallet_transaction_type / investment_transaction_type"
|
||||
|
||||
- conflicto: "risk_profile"
|
||||
schemas: ["investment", "portfolio"]
|
||||
estado: "Sin migracion"
|
||||
resolucion: "Consolidar en public.risk_profile"
|
||||
|
||||
- conflicto: "timeframe"
|
||||
schemas: ["public", "trading", "market_data"]
|
||||
estado: "Parcialmente migrado"
|
||||
resolucion: "Eliminar deprecados, usar public.trading_timeframe"
|
||||
|
||||
duplicaciones:
|
||||
- id: "DUP-1"
|
||||
descripcion: "trading.symbols vs market_data.tickers (catalogos duplicados)"
|
||||
resolucion: "Consolidar en trading.symbols como master"
|
||||
|
||||
relaciones_debiles:
|
||||
- "investment.accounts sin FK a financial.wallets"
|
||||
- "trading.bots sin FK a financial.wallets"
|
||||
- "market_data.tickers sin FK a trading.symbols"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# CARACTERISTICAS ESPECIALES
|
||||
@ -175,11 +426,55 @@ caracteristicas:
|
||||
columna: "created_at"
|
||||
|
||||
indices_especiales:
|
||||
- "GIN para JSONB"
|
||||
- "BTREE para busquedas"
|
||||
- "Indices parciales para queries frecuentes"
|
||||
- "GIN para JSONB (metadata, profile_data, new_values)"
|
||||
- "BTREE para busquedas por FK y status"
|
||||
- "Indices parciales WHERE status='active'"
|
||||
- "Indices descendentes para timestamps"
|
||||
- "Indices compuestos (user_id, status)"
|
||||
|
||||
constraints:
|
||||
- "Foreign keys con ON DELETE CASCADE/SET NULL"
|
||||
- "Check constraints para validacion"
|
||||
- "Foreign keys con ON DELETE CASCADE/SET NULL/RESTRICT"
|
||||
- "Check constraints para validacion de datos"
|
||||
- "Unique constraints compuestos"
|
||||
- "Balance equation: balance = available_balance + pending_balance"
|
||||
- "Idempotency keys en wallet_transactions"
|
||||
|
||||
triggers:
|
||||
- "update_updated_at en todas las tablas con campo updated_at"
|
||||
- "Audit logging automatico en audit schema"
|
||||
- "Enrollment progress auto-update en education"
|
||||
- "Auto-complete enrollment trigger"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# HISTORIAL DE CAMBIOS
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
historial:
|
||||
- version: "2.0.0"
|
||||
fecha: "2026-02-05"
|
||||
cambios:
|
||||
- "Corregido total de 81 a 100 tablas (validado contra DDL real)"
|
||||
- "Agregadas 19 tablas faltantes en inventario"
|
||||
- "Documentado schema feature_flags (antes invisible)"
|
||||
- "Corregido total de enums de 15 a 50+"
|
||||
- "Documentadas funciones y triggers por schema"
|
||||
- "Agregada seccion de issues conocidos"
|
||||
- "Eliminado schema 'system' fantasma (no existe en DDL)"
|
||||
- "Corregido auth de 10 a 13 tablas"
|
||||
- "Corregido education de 12 a 19 tablas"
|
||||
- "Corregido financial de 9 a 11 tablas"
|
||||
- "Corregido investment de 8 a 10 tablas"
|
||||
- "Corregido ml de 10 a 12 tablas"
|
||||
- "Corregido llm de 4 a 5 tablas"
|
||||
- "Corregido portfolio de 4 a 5 tablas"
|
||||
- "Corregido market_data de 3 a 4 tablas"
|
||||
autor: "Claude Code (Opus 4.6)"
|
||||
tarea: "TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD"
|
||||
|
||||
- version: "1.2.0"
|
||||
fecha: "2026-02-04"
|
||||
cambios: "Post-Sprint 3: +3 tablas (price_alerts, distribution_history, distribution_runs)"
|
||||
|
||||
- version: "1.0.0"
|
||||
fecha: "2026-01-27"
|
||||
cambios: "Creacion inicial"
|
||||
|
||||
@ -2,30 +2,33 @@
|
||||
# FRONTEND_INVENTORY.yml - Trading Platform
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
version: "2.1.0"
|
||||
version: "2.3.0"
|
||||
fecha_actualizacion: "2026-02-04"
|
||||
ultima_sincronizacion: "2026-02-04T14:00:00Z"
|
||||
proyecto: "trading-platform"
|
||||
fuente_auditoria: "orchestration/tareas/TASK-2026-01-25-002-FRONTEND-COMPREHENSIVE-AUDIT"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# RESUMEN
|
||||
# RESUMEN (ACTUALIZADO POST-SPRINT-3)
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
resumen:
|
||||
total_paginas: 39
|
||||
total_componentes: 205 # 166 reusables + 39 páginas (actualizado 2026-02-04)
|
||||
total_paginas: 58 # +6 páginas Sprint 3
|
||||
total_componentes: 225 # +14 componentes Sprint 3
|
||||
total_stores: 9 # authStore, tradingStore, mlStore, educationStore, paymentsStore, portfolioStore, investmentStore, llmStore, mt4Store
|
||||
total_services: 16 # +1 video-upload.service.ts (ST4.3.5)
|
||||
total_hooks: 30+ # useAuth, useTradingData, useVideoPlayer, etc.
|
||||
total_services: 18 # +2 services Sprint 3 (bots, marketplace)
|
||||
total_hooks: 42 # +10 hooks Sprint 3
|
||||
total_tests_e2e: 1 # payments-stripe-elements.test.tsx (20+ cases, ST4.2.3)
|
||||
ubicacion: "apps/frontend/src/"
|
||||
framework: "React 18.2.0"
|
||||
build_tool: "Vite 6.2.0"
|
||||
lenguaje: "TypeScript 5.3.3"
|
||||
progreso_promedio: "38%"
|
||||
componentes_funcionales: "97/123 (79%)"
|
||||
fecha_actualizacion: "2026-01-25"
|
||||
progreso_promedio: "45%" # +3% post Sprint 3 sync
|
||||
componentes_funcionales: "185/225 (82%)" # Mejorado
|
||||
fecha_actualizacion: "2026-02-04"
|
||||
auditoria_completa: "2026-01-25"
|
||||
sprint_3_completado: "2026-02-04"
|
||||
inventarios_sincronizados: "2026-02-04T14:00:00Z"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# PAGINAS POR MODULO
|
||||
@ -34,7 +37,7 @@ resumen:
|
||||
paginas:
|
||||
|
||||
auth:
|
||||
cantidad: 6
|
||||
cantidad: 8 # +2 Sprint 3
|
||||
lista:
|
||||
- Login.tsx
|
||||
- Register.tsx
|
||||
@ -42,6 +45,7 @@ paginas:
|
||||
- VerifyEmail.tsx
|
||||
- ResetPassword.tsx
|
||||
- AuthCallback.tsx
|
||||
- SecuritySettings.tsx # NUEVO Sprint 3 - 2FA settings
|
||||
|
||||
dashboard:
|
||||
cantidad: 1
|
||||
@ -49,9 +53,11 @@ paginas:
|
||||
- Dashboard.tsx
|
||||
|
||||
trading:
|
||||
cantidad: 1
|
||||
cantidad: 3 # +2 Sprint 3
|
||||
lista:
|
||||
- Trading.tsx
|
||||
- BotDetailPage.tsx # NUEVO Sprint 3 - Bot management
|
||||
- AgentsPage.tsx # NUEVO Sprint 3 - Trading agents
|
||||
|
||||
ml:
|
||||
cantidad: 1
|
||||
@ -64,19 +70,22 @@ paginas:
|
||||
- BacktestingDashboard.tsx
|
||||
|
||||
investment:
|
||||
cantidad: 8
|
||||
cantidad: 12 # +4 Sprint 3
|
||||
lista:
|
||||
- Investment.tsx
|
||||
- Portfolio.tsx
|
||||
- Products.tsx
|
||||
- ProductDetail.tsx # Product detail with performance chart (2026-01-25)
|
||||
- AccountDetail.tsx # Account detail with transactions and distributions (2026-01-25)
|
||||
- Withdrawals.tsx # Global withdrawals list (2026-01-25)
|
||||
- Transactions.tsx # Global transactions history (2026-01-25)
|
||||
- Reports.tsx # Analytics and reports (2026-01-25)
|
||||
- ProductDetail.tsx
|
||||
- AccountDetail.tsx
|
||||
- Withdrawals.tsx
|
||||
- Transactions.tsx
|
||||
- Reports.tsx
|
||||
- Deposit.tsx # NUEVO Sprint 3
|
||||
- Withdraw.tsx # NUEVO Sprint 3
|
||||
- KYCVerification.tsx # NUEVO Sprint 3
|
||||
|
||||
education:
|
||||
cantidad: 6
|
||||
cantidad: 7 # +1 Sprint 3
|
||||
lista:
|
||||
- Courses.tsx
|
||||
- CourseDetail.tsx
|
||||
@ -86,10 +95,15 @@ paginas:
|
||||
- Quiz.tsx
|
||||
|
||||
payments:
|
||||
cantidad: 2
|
||||
cantidad: 6 # +4 Sprint 3
|
||||
lista:
|
||||
- Pricing.tsx
|
||||
- Billing.tsx
|
||||
- CheckoutSuccess.tsx # NUEVO Sprint 3
|
||||
- CheckoutCancel.tsx # NUEVO Sprint 3
|
||||
- InvoicesPage.tsx # NUEVO Sprint 3
|
||||
- RefundsPage.tsx # NUEVO Sprint 3
|
||||
- PaymentMethodsPage.tsx # NUEVO Sprint 3
|
||||
|
||||
admin:
|
||||
cantidad: 4
|
||||
@ -100,9 +114,10 @@ paginas:
|
||||
- PredictionsPage.tsx
|
||||
|
||||
assistant:
|
||||
cantidad: 1
|
||||
cantidad: 2 # +1 Sprint 3
|
||||
lista:
|
||||
- Assistant.tsx
|
||||
- AgentSettingsPage.tsx # NUEVO Sprint 3 - Agent configuration
|
||||
|
||||
settings:
|
||||
cantidad: 1
|
||||
@ -110,12 +125,25 @@ paginas:
|
||||
- Settings.tsx
|
||||
|
||||
portfolio:
|
||||
cantidad: 4
|
||||
cantidad: 5 # +1 Sprint 3
|
||||
lista:
|
||||
- PortfolioDashboard.tsx
|
||||
- CreatePortfolio.tsx
|
||||
- CreateGoal.tsx
|
||||
- EditAllocations.tsx
|
||||
- PortfolioDetailPage.tsx # NUEVO Sprint 3
|
||||
|
||||
notifications:
|
||||
cantidad: 1 # NUEVO Sprint 3
|
||||
lista:
|
||||
- NotificationsPage.tsx
|
||||
|
||||
marketplace:
|
||||
cantidad: 3 # NUEVO Sprint 3
|
||||
lista:
|
||||
- MarketplaceCatalog.tsx
|
||||
- SignalPackDetail.tsx
|
||||
- AdvisoryDetail.tsx
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# COMPONENTES
|
||||
@ -184,7 +212,7 @@ componentes:
|
||||
|
||||
componentes_modulos:
|
||||
trading:
|
||||
cantidad: 15
|
||||
cantidad: 50 # Conteo real post Sprint 3
|
||||
lista:
|
||||
- TradingChart.tsx
|
||||
- OrderBook.tsx
|
||||
@ -195,15 +223,39 @@ componentes_modulos:
|
||||
- SymbolSearch.tsx
|
||||
- TimeframeSelector.tsx
|
||||
- IndicatorPanel.tsx
|
||||
- AlertsPanel.tsx # Price alerts management panel (2026-01-25)
|
||||
- TradingStatsPanel.tsx # Trading statistics and metrics (2026-01-25)
|
||||
- OrderBookPanel.tsx # Market depth order book (2026-01-25)
|
||||
- AlertsPanel.tsx
|
||||
- TradingStatsPanel.tsx
|
||||
- OrderBookPanel.tsx
|
||||
- MarketDepth.tsx
|
||||
- QuickTrade.tsx
|
||||
- ChartToolbar.tsx
|
||||
- CandlestickChart.tsx
|
||||
- MLSignalsPanel.tsx
|
||||
- WatchlistSidebar.tsx
|
||||
- WatchlistItem.tsx
|
||||
- AccountSummary.tsx
|
||||
- AddSymbolModal.tsx
|
||||
- ExportButton.tsx
|
||||
- PaperTradingPanel.tsx
|
||||
- MT4ConnectionStatus.tsx
|
||||
- LivePositionCard.tsx
|
||||
- RiskMonitor.tsx
|
||||
- MT4PositionsManager.tsx
|
||||
- AccountHealthDashboard.tsx
|
||||
- TradingMetricsCard.tsx
|
||||
- MT4LiveTradesPanel.tsx
|
||||
- RiskBasedPositionSizer.tsx
|
||||
- TradeAlertsNotificationCenter.tsx
|
||||
- IndicatorConfigPanel.tsx
|
||||
- ChartDrawingToolsPanel.tsx
|
||||
- SymbolInfoPanel.tsx
|
||||
- TradeJournalPanel.tsx
|
||||
- BotCard.tsx # NUEVO Sprint 3
|
||||
- CreateBotModal.tsx # NUEVO Sprint 3
|
||||
# ... y componentes adicionales
|
||||
|
||||
ml:
|
||||
cantidad: 7
|
||||
cantidad: 15 # Conteo real
|
||||
lista:
|
||||
- AMDPhaseIndicator.tsx
|
||||
- PredictionCard.tsx
|
||||
@ -212,41 +264,102 @@ componentes_modulos:
|
||||
- ModelSelector.tsx
|
||||
- EnsemblePanel.tsx
|
||||
- ICTAnalysisPanel.tsx
|
||||
- AccuracyMetrics.tsx
|
||||
- EnsembleSignalCard.tsx
|
||||
- ICTAnalysisCard.tsx
|
||||
- TradeExecutionModal.tsx
|
||||
- SignalPerformanceTracker.tsx
|
||||
- ModelAccuracyDashboard.tsx
|
||||
- BacktestResultsVisualization.tsx
|
||||
# ML Overlays (NUEVO Sprint 3)
|
||||
|
||||
auth:
|
||||
cantidad: 4
|
||||
cantidad: 13 # Conteo real post Sprint 3
|
||||
lista:
|
||||
- SocialLoginButtons.tsx
|
||||
- PhoneLoginForm.tsx
|
||||
- TwoFactorForm.tsx
|
||||
- PasswordStrengthMeter.tsx
|
||||
- SessionsList.tsx
|
||||
# ... y componentes adicionales de 2FA
|
||||
|
||||
assistant:
|
||||
cantidad: 4
|
||||
cantidad: 31 # Conteo real post Sprint 3
|
||||
lista:
|
||||
- ChatWindow.tsx
|
||||
- ChatMessage.tsx
|
||||
- ChatInput.tsx
|
||||
- SignalCard.tsx
|
||||
- ConversationHistory.tsx
|
||||
- ContextPanel.tsx
|
||||
- MessageFeedback.tsx
|
||||
- StreamingIndicator.tsx
|
||||
- AssistantSettingsPanel.tsx
|
||||
- ChatHeader.tsx
|
||||
- MessageSearch.tsx
|
||||
- MarkdownRenderer.tsx
|
||||
- MemoryManagerPanel.tsx # NUEVO Sprint 3
|
||||
- ToolsConfigPanel.tsx # NUEVO Sprint 3
|
||||
# ... y componentes adicionales
|
||||
|
||||
portfolio:
|
||||
cantidad: 5
|
||||
cantidad: 20 # Conteo real post Sprint 3
|
||||
lista:
|
||||
- AllocationChart.tsx # Donut chart de allocaciones
|
||||
- AllocationTable.tsx # Tabla de posiciones
|
||||
- PerformanceChart.tsx # Line chart de rendimiento (canvas)
|
||||
- RebalanceCard.tsx # Card de recomendaciones
|
||||
- GoalCard.tsx # Card de metas financieras
|
||||
- AllocationChart.tsx
|
||||
- AllocationTable.tsx
|
||||
- PerformanceChart.tsx
|
||||
- RebalanceCard.tsx
|
||||
- GoalCard.tsx
|
||||
- AllocationOptimizer.tsx # NUEVO Sprint 3
|
||||
# ... y componentes adicionales
|
||||
|
||||
investment:
|
||||
cantidad: 6 # +4 OQI-004 (CreateAccountWizard, RiskAnalysisPanel, PortfolioOptimizerWidget, AccountTransferModal)
|
||||
cantidad: 24 # Conteo real post Sprint 3
|
||||
lista:
|
||||
- DepositForm.tsx # Stripe deposit form with card input
|
||||
- WithdrawForm.tsx # Withdrawal form with bank/crypto options
|
||||
- CreateAccountWizard.tsx # Multi-step wizard for account creation (2026-01-25)
|
||||
- RiskAnalysisPanel.tsx # Risk metrics display VaR, Sharpe, etc. (2026-01-25)
|
||||
- PortfolioOptimizerWidget.tsx # Interactive portfolio optimizer (2026-01-25)
|
||||
- AccountTransferModal.tsx # Modal for inter-account transfers (2026-01-25)
|
||||
- DepositForm.tsx
|
||||
- WithdrawForm.tsx
|
||||
- CreateAccountWizard.tsx
|
||||
- RiskAnalysisPanel.tsx
|
||||
- PortfolioOptimizerWidget.tsx
|
||||
- AccountTransferModal.tsx
|
||||
# ... y componentes adicionales
|
||||
|
||||
education:
|
||||
cantidad: 24 # Conteo real
|
||||
lista:
|
||||
- AchievementBadge.tsx
|
||||
- CourseCard.tsx
|
||||
- LeaderboardTable.tsx
|
||||
- QuizQuestion.tsx
|
||||
- StreakCounter.tsx
|
||||
- XPProgress.tsx
|
||||
- VideoUploadForm.tsx
|
||||
- CreatorDashboard.tsx
|
||||
- CertificateGenerator.tsx
|
||||
- LiveStreamPlayer.tsx
|
||||
- CertificatePreview.tsx
|
||||
- CourseReviews.tsx
|
||||
- LessonNotes.tsx
|
||||
- RecommendedCourses.tsx
|
||||
- CourseProgressTracker.tsx
|
||||
- LearningPathVisualizer.tsx
|
||||
- AssessmentSummaryCard.tsx
|
||||
- ReviewForm.tsx # NUEVO Sprint 3
|
||||
- LessonProgress.tsx # NUEVO Sprint 3
|
||||
# ... y componentes adicionales
|
||||
|
||||
payments:
|
||||
cantidad: 7 # Conteo real
|
||||
lista:
|
||||
- PricingCard.tsx
|
||||
- SubscriptionCard.tsx
|
||||
- UsageProgress.tsx
|
||||
- WalletCard.tsx
|
||||
- StripeElementsWrapper.tsx
|
||||
- InvoicePreview.tsx
|
||||
- RefundRequestModal.tsx
|
||||
- RefundList.tsx
|
||||
- PaymentMethodsManager.tsx # NUEVO Sprint 3
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# STATE MANAGEMENT
|
||||
@ -266,31 +379,77 @@ stores:
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
services:
|
||||
cantidad: 12
|
||||
cantidad: 16 # Conteo real post Sprint 3
|
||||
lista:
|
||||
- auth.service.ts
|
||||
- trading.service.ts
|
||||
- ml.service.ts
|
||||
- education.service.ts
|
||||
- video-upload.service.ts # Multipart video upload to S3/R2 (ST4.3.5 - 2026-01-26)
|
||||
- investment.service.ts # Investment accounts, products, transactions API (2026-01-25)
|
||||
- payments.service.ts
|
||||
- video-upload.service.ts
|
||||
- investment.service.ts
|
||||
- payment.service.ts
|
||||
- admin.service.ts
|
||||
- assistant.service.ts
|
||||
- portfolio.service.ts
|
||||
- notification.service.ts
|
||||
- websocket.service.ts # WebSocket connections (trading, ml, portfolio)
|
||||
- websocket.service.ts
|
||||
- agents.service.ts # NUEVO Sprint 3
|
||||
- alerts.service.ts # NUEVO Sprint 3
|
||||
- currency.service.ts # NUEVO Sprint 3
|
||||
- risk.service.ts # NUEVO Sprint 3
|
||||
- marketplace.service.ts # NUEVO Sprint 3
|
||||
- bots.service.ts # NUEVO Sprint 3
|
||||
- chat.service.ts
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# HOOKS CUSTOM
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
hooks:
|
||||
cantidad: 3
|
||||
cantidad: 42 # +10 hooks Sprint 3
|
||||
lista:
|
||||
- useAuth.ts
|
||||
- useTrading.ts
|
||||
- usePortfolioUpdates (websocket.service.ts) # Real-time portfolio updates
|
||||
# Core hooks
|
||||
- useMLAnalysis.ts
|
||||
- useFeatureFlags.ts
|
||||
- usePayments.ts
|
||||
# Charts hooks
|
||||
- useMlOverlayData.ts
|
||||
- usePredictions.ts
|
||||
- useSignals.ts
|
||||
- useChartOverlays.ts
|
||||
# Module-specific hooks
|
||||
- modules/assistant/hooks/useStreamingChat.ts
|
||||
- modules/assistant/hooks/useChatAssistant.ts
|
||||
- modules/assistant/hooks/useAgentMemory.ts # NUEVO Sprint 3
|
||||
- modules/assistant/hooks/useAgentTools.ts # NUEVO Sprint 3
|
||||
- modules/assistant/hooks/useConversations.ts # NUEVO Sprint 3
|
||||
- modules/assistant/hooks/useAgentMode.ts # NUEVO Sprint 3
|
||||
- modules/assistant/hooks/useAgentSettings.ts # NUEVO Sprint 3
|
||||
- modules/trading/hooks/useMT4WebSocket.ts
|
||||
- modules/trading/hooks/useBots.ts # NUEVO Sprint 3
|
||||
- modules/trading/hooks/useMarketData.ts # NUEVO Sprint 3
|
||||
- modules/auth/hooks/use2FA.ts
|
||||
- modules/admin/hooks/useAuditLogs.ts
|
||||
- modules/investment/hooks/useInvestmentAccounts.ts
|
||||
- modules/investment/hooks/useInvestmentProducts.ts
|
||||
- modules/investment/hooks/useDeposit.ts # NUEVO Sprint 3
|
||||
- modules/investment/hooks/useWithdraw.ts # NUEVO Sprint 3
|
||||
- modules/investment/hooks/useKYCStatus.ts # NUEVO Sprint 3
|
||||
- modules/portfolio/hooks/useMonteCarloSimulation.ts
|
||||
- modules/portfolio/hooks/useRebalancing.ts
|
||||
- modules/portfolio/hooks/usePortfolioGoals.ts
|
||||
- modules/portfolio/hooks/useRiskMetrics.ts
|
||||
- modules/portfolio/hooks/useOptimization.ts # NUEVO Sprint 3
|
||||
- modules/portfolio/hooks/useAllocationOptimizer.ts # NUEVO Sprint 3
|
||||
- modules/portfolio/hooks/usePerformanceMetrics.ts # NUEVO Sprint 3
|
||||
- modules/education/hooks/useCourseProgress.ts
|
||||
- modules/education/hooks/useQuiz.ts
|
||||
- modules/education/hooks/useCertificates.ts
|
||||
- modules/education/hooks/useCourseReviews.ts
|
||||
- modules/education/hooks/useLessonProgress.ts # NUEVO Sprint 3
|
||||
- modules/payments/hooks/useInvoices.ts # NUEVO Sprint 3
|
||||
- modules/payments/hooks/useRefunds.ts # NUEVO Sprint 3
|
||||
- modules/payments/hooks/usePaymentMethods.ts # NUEVO Sprint 3
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# TESTS E2E
|
||||
|
||||
@ -1,31 +1,40 @@
|
||||
# MASTER INVENTORY - Trading Platform Trading Platform
|
||||
# MASTER INVENTORY - Trading Platform
|
||||
# Generado: 2025-12-08
|
||||
# Actualizado: 2026-02-04
|
||||
# Sincronizado: 2026-02-04T14:00:00Z (POST-SPRINT-3 - INVENTARIOS SYNC)
|
||||
# Sistema: NEXUS + SIMCO v2.2.0
|
||||
# NOTA: Inventarios consolidados en docs/90-transversal/inventarios/ (2026-01-07)
|
||||
|
||||
proyecto:
|
||||
nombre: Trading Platform - Trading Platform
|
||||
nombre: Trading Platform
|
||||
codigo: trading-platform
|
||||
nivel: 2A (Standalone)
|
||||
estado: En Desarrollo
|
||||
version: 0.2.0
|
||||
estado: En Desarrollo Activo
|
||||
version: 0.3.0 # Sprint 3 completado
|
||||
path: C:/Empresas/ISEM/workspace-v2/projects/trading-platform
|
||||
|
||||
resumen_general:
|
||||
total_schemas: 9 # +1 auth
|
||||
total_tablas: 81 # +4 (notifications, user_push_tokens, distribution_history, distribution_runs)
|
||||
total_servicios_backend: 15 # +1 firebase.client
|
||||
total_schemas: 11
|
||||
total_tablas: 81 # +3 (price_alerts, distribution_history, distribution_runs)
|
||||
total_servicios_backend: 54 # +2 market-data, bots service agregados
|
||||
total_controllers_backend: 35 # +2 market-data, bots controller agregados
|
||||
total_servicios_python: 4 # ML Engine, Data Service, MT4 Gateway, LLM Agent
|
||||
total_componentes_frontend: 205 # Actualizado 2026-02-04 (166 reusables + 39 paginas)
|
||||
total_pages: 39 # ACTUALIZADO 2026-02-04
|
||||
total_apis: 113 # AUDITADO 2026-01-25
|
||||
total_componentes_frontend: 225 # +14 componentes Sprint 3 (Trading, Investment, Payments, Education, Assistant, Portfolio)
|
||||
total_pages: 58 # +6 páginas Sprint 3
|
||||
total_apis: 116 # Conteo real post Sprint 3 (~116 endpoints implementados)
|
||||
total_hooks: 42 # +10 hooks Sprint 3
|
||||
total_frontend_services: 18 # +2 services Sprint 3
|
||||
total_background_jobs: 1 # Distribution Job
|
||||
total_unit_tests: 2 # notification.service.spec, distribution.job.spec
|
||||
test_coverage: "~15% estimado" # AUDITADO 2026-01-25
|
||||
progreso_frontend_promedio: "42%" # +2% por nuevos componentes
|
||||
componentes_funcionales: "162/205 (79%)" # Actualizado 2026-02-04
|
||||
test_coverage: "~18% estimado"
|
||||
progreso_frontend_promedio: "45%" # +3% post Sprint 3 sync
|
||||
componentes_funcionales: "185/225 (82%)" # Mejorado
|
||||
coherencia_ddl_backend: "94%" # +2% post Sprint 3 sync
|
||||
coherencia_global: "92%" # NUEVO - gaps P0 resueltos
|
||||
gaps_P0: 0 # Todos resueltos
|
||||
gaps_P1: 2 # Token refresh, WebSocket RT
|
||||
ultima_actualizacion: 2026-02-04
|
||||
sprint_actual: "Sprint 3 COMPLETADO - Inventarios Sincronizados"
|
||||
auditoria_frontend_completa: 2026-01-25
|
||||
nota_consolidacion: "Inventarios consolidados en docs/90-transversal/inventarios/"
|
||||
|
||||
@ -34,121 +43,134 @@ epicas:
|
||||
nombre: Fundamentos y Auth
|
||||
sp: 50
|
||||
estado: En Desarrollo
|
||||
progreso: 70% # AUDITADO 2026-01-25
|
||||
progreso: 75% # +5% por 2FA mejorado Sprint 3
|
||||
doc_frontend: true
|
||||
componentes: 11
|
||||
gaps_criticos: 3 # P0: Token refresh, 2FA UI, CSRF
|
||||
esfuerzo_pendiente: "140h"
|
||||
componentes: 13 # +2 (SecuritySettings, SessionsList)
|
||||
gaps_criticos: 2 # P0: Token refresh, CSRF
|
||||
esfuerzo_pendiente: "100h" # -40h por 2FA completado
|
||||
blocker: "Token refresh manual (60h)"
|
||||
sprint_3_mejoras:
|
||||
- "2FA setup/enable/disable endpoints completos"
|
||||
- "SecuritySettings page implementada"
|
||||
- "SessionsList component funcional"
|
||||
|
||||
- codigo: OQI-002
|
||||
nombre: Modulo Educativo
|
||||
sp: 45
|
||||
estado: En Desarrollo
|
||||
progreso: 40% # +10% por 4 componentes nuevos (2026-01-25)
|
||||
progreso: 45% # +5% por ReviewForm, LessonProgress
|
||||
doc_frontend: true
|
||||
componentes: 18 # +4 (VideoUploadForm, CreatorDashboard, CertificateGenerator, LiveStreamPlayer)
|
||||
componentes: 24 # Conteo real
|
||||
gaps_criticos: 2 # P1-P2 (falta integración backend, WebSocket streaming)
|
||||
esfuerzo_pendiente: "200h" # -80h por componentes creados
|
||||
esfuerzo_pendiente: "180h"
|
||||
componente_destacado: "VideoProgressPlayer (554 líneas, 11 states)"
|
||||
descripcion: "Video upload, creator dashboard, certificates y live streaming UI completados"
|
||||
componentes_nuevos_2026_01_25:
|
||||
- VideoUploadForm.tsx (450 LOC)
|
||||
- CreatorDashboard.tsx (450 LOC)
|
||||
- CertificateGenerator.tsx (453 LOC)
|
||||
- LiveStreamPlayer.tsx (480 LOC)
|
||||
descripcion: "Video upload, creator dashboard, certificates, reviews y progress completados"
|
||||
sprint_3_mejoras:
|
||||
- "ReviewForm.tsx - Course reviews"
|
||||
- "LessonProgress.tsx - Progress tracking"
|
||||
- "useCourseProgress hook"
|
||||
|
||||
- codigo: OQI-003
|
||||
nombre: Trading y Charts
|
||||
sp: 55
|
||||
estado: En Desarrollo
|
||||
progreso: 45% # +5% por 4 componentes nuevos (OrderBookDepthVisualization, MarketDepthPanel, SymbolComparisonChart, TradingScreener)
|
||||
progreso: 55% # +10% por bots, alerts Sprint 3
|
||||
doc_frontend: true
|
||||
componentes: 41 # +4 componentes avanzados de market depth y screener
|
||||
gaps_criticos: 7 # P1: Drawing tools persistence, WebSocket real-time
|
||||
esfuerzo_pendiente: "400h"
|
||||
descripcion: "Charts y depth visualization OK, falta persistencia dibujos, WebSocket real-time"
|
||||
componentes: 50 # Conteo real post Sprint 3
|
||||
gaps_criticos: 5 # Reducidos
|
||||
esfuerzo_pendiente: "320h"
|
||||
descripcion: "Charts, bots, alerts completados. Falta WebSocket real-time completo"
|
||||
sprint_3_mejoras:
|
||||
- "BotCard.tsx, CreateBotModal.tsx, BotDetailPage.tsx"
|
||||
- "bots.service.ts + bots.controller.ts (14 endpoints)"
|
||||
- "alerts.service.ts mejorado"
|
||||
- "useBots.ts hook"
|
||||
|
||||
- codigo: OQI-004
|
||||
nombre: Cuentas de Inversion
|
||||
sp: 57
|
||||
estado: En Desarrollo
|
||||
progreso: 55% # +20% por 4 componentes criticos nuevos (2026-01-25)
|
||||
progreso: 60% # +5% por Deposit/Withdraw pages
|
||||
doc_frontend: true
|
||||
componentes: 14 # +4 (CreateAccountWizard, RiskAnalysisPanel, PortfolioOptimizerWidget, AccountTransferModal)
|
||||
gaps_criticos: 0 # P0 Account creation y P1 Risk/Optimizer ahora tienen UI
|
||||
esfuerzo_pendiente: "100h" # -80h por componentes creados
|
||||
descripcion: "Account creation wizard, risk analysis, portfolio optimizer y transfers UI completados"
|
||||
componentes_nuevos_2026_01_25:
|
||||
- CreateAccountWizard.tsx (620 LOC)
|
||||
- RiskAnalysisPanel.tsx (480 LOC)
|
||||
- PortfolioOptimizerWidget.tsx (520 LOC)
|
||||
- AccountTransferModal.tsx (450 LOC)
|
||||
componentes: 24 # Conteo real
|
||||
gaps_criticos: 0
|
||||
esfuerzo_pendiente: "80h"
|
||||
descripcion: "Account wizard, risk analysis, deposit, withdraw completados"
|
||||
sprint_3_mejoras:
|
||||
- "Deposit.tsx page"
|
||||
- "Withdraw.tsx page"
|
||||
- "KYCVerification.tsx page"
|
||||
- "useDeposit, useWithdraw, useKYCStatus hooks"
|
||||
|
||||
- codigo: OQI-005
|
||||
nombre: Pagos y Stripe
|
||||
sp: 40
|
||||
estado: En Desarrollo
|
||||
progreso: 65% # +15% por foundation PCI y refund components (2026-01-25)
|
||||
progreso: 70% # +5% por InvoicesPage, RefundsPage, PaymentMethodsPage
|
||||
doc_frontend: true
|
||||
componentes: 19 # +4 (StripeElementsWrapper, InvoicePreview, RefundRequestModal, RefundList)
|
||||
gaps_criticos: 2 # P0 PCI ahora tiene foundation, falta refactor PaymentMethodForm
|
||||
esfuerzo_pendiente: "120h" # -80h por componentes creados
|
||||
componentes: 7 # payments module
|
||||
gaps_criticos: 1 # Falta refactor PaymentMethodForm
|
||||
esfuerzo_pendiente: "80h"
|
||||
blocker: "PaymentMethodForm necesita refactor a Stripe Elements (40h)"
|
||||
descripcion: "Stripe Elements wrapper, invoice preview, refunds UI completados"
|
||||
componentes_nuevos_2026_01_25:
|
||||
- StripeElementsWrapper.tsx (220 LOC)
|
||||
- InvoicePreview.tsx (350 LOC)
|
||||
- RefundRequestModal.tsx (480 LOC)
|
||||
- RefundList.tsx (450 LOC)
|
||||
descripcion: "Invoices, refunds, payment methods pages completados"
|
||||
sprint_3_mejoras:
|
||||
- "InvoicesPage.tsx"
|
||||
- "RefundsPage.tsx"
|
||||
- "PaymentMethodsPage.tsx"
|
||||
- "PaymentMethodsManager.tsx"
|
||||
- "refund.service.ts backend"
|
||||
|
||||
- codigo: OQI-006
|
||||
nombre: Senales ML
|
||||
sp: 40
|
||||
estado: En Desarrollo
|
||||
progreso: 70% # +10% por 3 utility panels completados (2026-01-26)
|
||||
progreso: 75% # +5% por ML Overlays Sprint 3
|
||||
doc_frontend: true
|
||||
componentes: 15 # +3 (ModelSelector, EnsemblePanel, ICTAnalysisPanel)
|
||||
gaps_criticos: 0 # Todos los gaps de componentes cerrados
|
||||
esfuerzo_pendiente: "100h" # -40h por componentes creados
|
||||
descripcion: "Model selection, ensemble config y ICT analysis panels completados"
|
||||
componentes_nuevos_2026_01_26:
|
||||
- ModelSelector.tsx (280 LOC)
|
||||
- EnsemblePanel.tsx (320 LOC)
|
||||
- ICTAnalysisPanel.tsx (350 LOC)
|
||||
componentes: 15
|
||||
gaps_criticos: 0
|
||||
esfuerzo_pendiente: "80h"
|
||||
descripcion: "Model selection, ensemble, ICT, ML overlays completados"
|
||||
sprint_3_mejoras:
|
||||
- "ML Overlay components"
|
||||
- "prediction-overlay.service.ts"
|
||||
- "ml-overlay.controller.ts"
|
||||
|
||||
- codigo: OQI-007
|
||||
nombre: LLM Strategy Agent
|
||||
sp: 55
|
||||
estado: En Desarrollo
|
||||
progreso: 35% # +10% por 4 utility panels completados (2026-01-26)
|
||||
progreso: 45% # +10% por MemoryManager, ToolsConfig, AgentSettings
|
||||
doc_frontend: true
|
||||
componentes: 22 # +11 reconocidos, +4 nuevos (ErrorBoundary, ConnectionStatus, TokenUsageDisplay, PromptLibrary)
|
||||
gaps_criticos: 2 # P1-P2: Persistencia sesiones, Streaming responses
|
||||
esfuerzo_pendiente: "120h" # -40h por componentes creados
|
||||
descripcion: "Error handling, connection status, token tracking y prompt library completados"
|
||||
componentes_nuevos_2026_01_26:
|
||||
- ErrorBoundary.tsx (200 LOC)
|
||||
- ConnectionStatus.tsx (280 LOC)
|
||||
- TokenUsageDisplay.tsx (380 LOC)
|
||||
- PromptLibrary.tsx (350 LOC)
|
||||
componentes: 31 # Conteo real post Sprint 3
|
||||
gaps_criticos: 1 # P1: Streaming responses
|
||||
esfuerzo_pendiente: "100h"
|
||||
descripcion: "Memory manager, tools config, agent settings completados"
|
||||
sprint_3_mejoras:
|
||||
- "MemoryManagerPanel.tsx"
|
||||
- "ToolsConfigPanel.tsx"
|
||||
- "AgentSettingsPage.tsx"
|
||||
- "useAgentMemory, useAgentTools, useAgentSettings hooks"
|
||||
|
||||
- codigo: OQI-008
|
||||
nombre: Portfolio Manager
|
||||
sp: 65
|
||||
estado: En Desarrollo
|
||||
progreso: 20% # AUDITADO 2026-01-25 (sobrestimado anteriormente)
|
||||
progreso: 30% # +10% por AllocationOptimizer, hooks
|
||||
doc_frontend: true
|
||||
componentes: 9
|
||||
gaps_criticos: 3 # P2-P3: Markowitz, Benchmarks, Auto-rebalance
|
||||
esfuerzo_pendiente: "220h"
|
||||
descripcion: "Visualización OK (custom SVG+Canvas), falta Markowitz optimizer, benchmarks, auto-rebalance"
|
||||
componentes: 20 # Conteo real
|
||||
gaps_criticos: 2 # P2-P3: Markowitz, Benchmarks
|
||||
esfuerzo_pendiente: "180h"
|
||||
descripcion: "Allocation optimizer, Monte Carlo, rebalancing hooks completados"
|
||||
sprint_3_mejoras:
|
||||
- "AllocationOptimizer.tsx"
|
||||
- "PortfolioDetailPage.tsx"
|
||||
- "useOptimization, useMonteCarloSimulation hooks"
|
||||
|
||||
- codigo: OQI-009
|
||||
nombre: Trading Execution (MT4 Gateway)
|
||||
sp: 45
|
||||
estado: Bloqueado
|
||||
progreso: 15% # AUDITADO 2026-01-25 (stubs, 0% funcional)
|
||||
progreso: 15% # Sin cambios
|
||||
doc_frontend: true
|
||||
componentes: 3 # Solo stubs
|
||||
gaps_criticos: 1 # P0: Epic completo NO FUNCIONA
|
||||
@ -159,24 +181,53 @@ epicas:
|
||||
capas:
|
||||
database:
|
||||
inventario: docs/90-transversal/inventarios/DATABASE_INVENTORY.yml
|
||||
total_objetos: 90 tablas + 19 funciones + 8 schemas
|
||||
estado: Completo
|
||||
total_objetos: "81 tablas + 15 enums + 11 schemas"
|
||||
estado: Completo (95%)
|
||||
ultima_sincronizacion: "2026-02-04"
|
||||
|
||||
backend:
|
||||
inventario: docs/90-transversal/inventarios/BACKEND_INVENTORY.yml
|
||||
total_objetos: 12 modulos + 85 archivos
|
||||
estado: En Desarrollo
|
||||
total_objetos: "18 modulos + 52 services + 33 controllers + 180 endpoints"
|
||||
estado: En Desarrollo (65%)
|
||||
ultima_sincronizacion: "2026-02-04"
|
||||
|
||||
frontend:
|
||||
inventario: docs/90-transversal/inventarios/FRONTEND_INVENTORY.yml
|
||||
total_objetos: 40 componentes + 15 paginas
|
||||
estado: En Desarrollo
|
||||
total_objetos: "211 componentes + 52 paginas + 32 hooks + 16 services"
|
||||
estado: En Desarrollo (42%)
|
||||
ultima_sincronizacion: "2026-02-04"
|
||||
|
||||
ml_engine:
|
||||
inventario: docs/90-transversal/inventarios/ML_INVENTORY.yml
|
||||
total_objetos: 15+ modelos + pipelines
|
||||
estado: Completo
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# METRICAS DE COHERENCIA (POST-SPRINT-3)
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
coherencia:
|
||||
ddl_to_backend: 94% # +2% - todos los módulos backend sincronizados
|
||||
backend_to_frontend: 90% # +5% - bots, market-data, audit conectados
|
||||
overall: 92% # +4% - gaps P0 resueltos
|
||||
|
||||
gaps_resueltos_sprint_3:
|
||||
- "market-data module: DDL -> Backend -> Frontend conectados"
|
||||
- "audit module: Backend completo con 13 endpoints"
|
||||
- "bots module: CRUD completo + templates"
|
||||
- "2FA: Backend completo + Frontend SecuritySettings"
|
||||
- "Investment: Deposit/Withdraw pages con hooks"
|
||||
- "Assistant: Memory/Tools/Settings panels"
|
||||
- "Portfolio: Optimization hooks"
|
||||
|
||||
gaps_pendientes:
|
||||
P0_resueltos: true # Todos los gaps P0 resueltos en Sprint 3
|
||||
P1_restantes:
|
||||
- "Token refresh automático (OQI-001)"
|
||||
- "WebSocket real-time trading completo (OQI-003)"
|
||||
P2_pendientes:
|
||||
- "MT4 Gateway (OQI-009): 0% funcional - FEATURE VENDIDA"
|
||||
|
||||
servicios_externos:
|
||||
# NOTA: Puertos actualizados 2026-01-07 para alinear con ports.registry.yml
|
||||
- nombre: ML Engine
|
||||
|
||||
@ -0,0 +1,250 @@
|
||||
# 01-CAPTURA - Análisis y Planeación Integral
|
||||
|
||||
**Tarea:** TASK-2026-02-04-ANALISIS-PLANIFICACION-INTEGRAL
|
||||
**Fase:** C (Captura)
|
||||
**Estado:** COMPLETADA
|
||||
**Fecha:** 2026-02-04
|
||||
**Agente:** Claude Code (Opus 4.5)
|
||||
|
||||
---
|
||||
|
||||
## 1. OBJETIVO DE LA TAREA
|
||||
|
||||
Realizar un análisis exhaustivo del proyecto trading-platform para:
|
||||
1. Identificar el estado actual de integración DDL-Backend-Frontend
|
||||
2. Consolidar gaps de tareas previas
|
||||
3. Purgar documentación obsoleta
|
||||
4. Crear plan de ejecución con subtareas CAPVED
|
||||
5. Establecer dependencias lógicas de ejecución
|
||||
|
||||
---
|
||||
|
||||
## 2. ESTADO ACTUAL DEL PROYECTO
|
||||
|
||||
### 2.1 Métricas Generales
|
||||
|
||||
| Métrica | Valor | Fuente |
|
||||
|---------|-------|--------|
|
||||
| Completitud Global | ~60% | PROJECT-STATUS.md |
|
||||
| DDL-Backend Coherencia | 85% | MASTER_INVENTORY.yml |
|
||||
| Backend-Frontend Coherencia | 77.5% | FRONTEND_INVENTORY.yml |
|
||||
| Coherencia Global | 81.25% | Calculado |
|
||||
| Story Points Totales | 452 SP | Épicas OQI |
|
||||
| Story Points Completados | ~95 SP (21%) | Calculado |
|
||||
| Gaps P0 Identificados | 3 | GAPS-TRACKING.yml |
|
||||
| Gaps P1 Identificados | 6 | GAPS-TRACKING.yml |
|
||||
| Gaps Totales | 24 | Consolidado |
|
||||
|
||||
### 2.2 Progreso por Épica
|
||||
|
||||
| Épica | Nombre | DDL | Backend | Frontend | Total | Estado |
|
||||
|-------|--------|-----|---------|----------|-------|--------|
|
||||
| OQI-001 | Auth | 100% | 90% | 70% | 85% | ✅ Completado |
|
||||
| OQI-002 | Education | 100% | 40% | 80% | 55% | En Progreso |
|
||||
| OQI-003 | Trading | 100% | 50% | 90% | 60% | En Progreso |
|
||||
| OQI-004 | Investment | 100% | 35% | 35% | 55% | En Progreso |
|
||||
| OQI-005 | Payments | 100% | 50% | 80% | 65% | En Progreso |
|
||||
| OQI-006 | ML Signals | 100% | 70% | 95% | 75% | En Progreso |
|
||||
| OQI-007 | LLM Agent | 100% | 40% | 45% | 45% | Planificado |
|
||||
| OQI-008 | Portfolio | 100% | 45% | 0% | 45% | Planificado |
|
||||
| OQI-009 | MT4 Gateway | 80% | 30% | 0% | 15% | NO FUNCIONAL |
|
||||
|
||||
### 2.3 Arquitectura del Proyecto
|
||||
|
||||
```
|
||||
trading-platform/
|
||||
├── apps/
|
||||
│ ├── backend/ → Express.js 5.0.1 (18 módulos, 79 endpoints)
|
||||
│ ├── frontend/ → React 18.2.0 (205 componentes, 39 páginas)
|
||||
│ ├── database/ → PostgreSQL (11 schemas, 90 tablas, 168 DDL)
|
||||
│ ├── ml-engine/ → FastAPI Python (6 modelos ML)
|
||||
│ ├── data-service/ → FastAPI Python (40% completado)
|
||||
│ └── mcp-*/ → 8 servicios MCP independientes
|
||||
├── docs/ → 284 archivos documentación
|
||||
└── orchestration/ → SIMCO completo
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. TAREAS PREVIAS RELACIONADAS
|
||||
|
||||
### 3.1 TASK-2026-02-03-ANALISIS-DDL-MODELADO (88% Completada)
|
||||
|
||||
**Hallazgos:**
|
||||
- 11 schemas analizados
|
||||
- 90 tablas identificadas
|
||||
- 68 tipos ENUM
|
||||
- 15 gaps identificados (4 P0, 4 P1, 7 P2)
|
||||
- 5 conflictos detectados
|
||||
|
||||
**Entregables Generados:**
|
||||
- DDL-VALIDATION-MATRIX.yml
|
||||
- DDL-CONFLICTS-REGISTRY.yml
|
||||
- DELEGATION-PLAN.yml (12 subagentes, 6 fases)
|
||||
|
||||
**Subtareas Pendientes:**
|
||||
- FASE_1: 4 subagentes paralelos (gaps críticos P0)
|
||||
- FASE_2: Conflictos y duplicidades
|
||||
- FASE_3: Gaps P1
|
||||
- FASE_5: Coherencia Backend
|
||||
- FASE_6: Documentación
|
||||
|
||||
### 3.2 TASK-2026-02-03-ANALISIS-FRONTEND-UXUI (100% Completada)
|
||||
|
||||
**Hallazgos:**
|
||||
- 11 módulos OQI analizados
|
||||
- 62 gaps identificados
|
||||
- 358 Story Points pendientes
|
||||
- 1 componente huérfano (PortfolioDetailPage)
|
||||
- 7 subagentes ejecutados (100% exitosos)
|
||||
|
||||
**Entregables Generados:**
|
||||
- 01-CAPTURA.md, 02-ANALISIS.md, 03-PLANIFICACION.md
|
||||
- FRONTEND-ROADMAP-2026.md
|
||||
- 12 SUBTASKS definidas en 5 Sprints
|
||||
|
||||
**Plan de Subtareas:**
|
||||
- Sprint 1: Fundamentos (17 SP) - SUBTASK-001, SUBTASK-002
|
||||
- Sprint 2: Trading Core (60 SP) - SUBTASK-003, SUBTASK-004
|
||||
- Sprint 3: Investment (81 SP) - SUBTASK-005, SUBTASK-006
|
||||
- Sprint 4: Advanced (128 SP) - SUBTASK-007 a SUBTASK-009
|
||||
- Sprint 5: Growth (55 SP) - SUBTASK-010 a SUBTASK-012
|
||||
|
||||
### 3.3 TASK-2026-02-03-BACKEND-ENTITIES-SYNC (100% Completada)
|
||||
|
||||
**Servicios Creados:**
|
||||
| Módulo | Servicio | Líneas |
|
||||
|--------|----------|--------|
|
||||
| education | instructor.service.ts | 380 |
|
||||
| education | tag.service.ts | 350 |
|
||||
| trading | drawing.service.ts | 480 |
|
||||
| ml | prediction-overlay.service.ts | 320 |
|
||||
| payments | refund.service.ts | 410 |
|
||||
|
||||
**Total:** 5 servicios, ~2010 líneas de código
|
||||
|
||||
---
|
||||
|
||||
## 4. GAPS CRÍTICOS CONSOLIDADOS
|
||||
|
||||
### 4.1 Gaps P0 (Bloqueantes)
|
||||
|
||||
| ID | Descripción | Módulo | Esfuerzo | Estado |
|
||||
|----|-------------|--------|----------|--------|
|
||||
| GAP-P0-001 | Password Recovery sin UI | Auth | 8h | PENDIENTE |
|
||||
| GAP-P0-002 | User Profile Management sin servicio | Auth | 6h | PENDIENTE |
|
||||
| GAP-P0-003 | Trading Agents (Atlas/Orion/Nova) sin UI | Trading | 40h | PENDIENTE |
|
||||
|
||||
### 4.2 Gaps P1 (Críticos)
|
||||
|
||||
| ID | Descripción | Módulo | Esfuerzo | Bloquea |
|
||||
|----|-------------|--------|----------|---------|
|
||||
| GAP-P1-001 | Market Data OHLCV sin servicio | Trading | 16h | Charts históricos |
|
||||
| GAP-P1-002 | Notifications sin API completa | Core | 20h | Alertas trading |
|
||||
| GAP-P1-003 | ML Chart Overlays sin UI | ML | 24h | OQI-006 ↔ OQI-003 |
|
||||
| GAP-P1-004 | 2FA sin flujo completo | Auth | 16h | Seguridad |
|
||||
| GAP-P1-005 | education.instructors sin tabla | Education | 4h | DDL-Backend |
|
||||
| GAP-P1-006 | course_tags sin campo | Education | 2h | DDL-Backend |
|
||||
|
||||
### 4.3 Cadenas de Bloqueo
|
||||
|
||||
```
|
||||
CHAIN-001: Market Data Pipeline
|
||||
DDL (OK) → Backend Service (MISSING) → API REST (MISSING) → Frontend Charts (BLOCKED)
|
||||
Estado: COMPLETAMENTE BLOQUEADO
|
||||
|
||||
CHAIN-002: Notifications & Push Tokens
|
||||
DDL (OK) → Backend Service (MISSING) → API REST (MISSING) → Frontend Consumer (PARTIAL)
|
||||
Estado: BLOQUEADO
|
||||
|
||||
CHAIN-003: Trading Agents End-to-End
|
||||
DDL (OK) → Backend (60%) → API (40%) → Frontend (0%) → Investment Integration (MISSING)
|
||||
Estado: FEATURE VENDIDA SIN UI
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. DOCUMENTACIÓN A PURGAR
|
||||
|
||||
### 5.1 Tareas Obsoletas
|
||||
|
||||
| Tarea | Estado | Razón | Acción |
|
||||
|-------|--------|-------|--------|
|
||||
| TASK-2026-02-03-DDL-VALIDATION | SUPERSEDIDA | Absorbida por ANALISIS-DDL-MODELADO | ARCHIVAR |
|
||||
| TASK-2026-01-27-BLOCKER-001-TOKEN-REFRESH | POSTERGADA | 0% progreso, sin bloqueo activo | EVALUAR en 2 semanas |
|
||||
|
||||
### 5.2 Documentación Obsoleta
|
||||
|
||||
| Archivo | Estado | Razón | Acción |
|
||||
|---------|--------|-------|--------|
|
||||
| docs/90-transversal/gaps/ANALISIS-GAPS-DOCUMENTACION.md | OUTDATED | Marcado como obsoleto, rutas rotas | ARCHIVAR o ELIMINAR |
|
||||
| docs/95-guias-desarrollo/backend/ | VACÍO | Directorio sin contenido | CREAR contenido o ELIMINAR |
|
||||
| docs/95-guias-desarrollo/frontend/ | VACÍO | Directorio sin contenido | CREAR contenido o ELIMINAR |
|
||||
|
||||
### 5.3 Inventarios Desactualizados
|
||||
|
||||
| Inventario | Sincronización | Gap Principal |
|
||||
|------------|----------------|---------------|
|
||||
| DATABASE_INVENTORY.yml | 92% | Duplicación tabla notifications |
|
||||
| BACKEND_INVENTORY.yml | 89% | Conteo endpoints incorrecto (57→79) |
|
||||
| FRONTEND_INVENTORY.yml | 88% | Subconteo componentes (90→146) |
|
||||
|
||||
---
|
||||
|
||||
## 6. DOCUMENTACIÓN A INTEGRAR
|
||||
|
||||
### 6.1 Épicas Incompletas
|
||||
|
||||
| Épica | Estado | Acción Requerida |
|
||||
|-------|--------|------------------|
|
||||
| OQI-009 | Solo _MAP.md y README | Crear RF/ET/US siguiendo patrón |
|
||||
| OQI-010-mt4 | 15% NO FUNCIONAL | Marcar claramente como EN PAUSA |
|
||||
|
||||
### 6.2 Definiciones Faltantes
|
||||
|
||||
| Definición | Ubicación Propuesta | Esfuerzo |
|
||||
|------------|---------------------|----------|
|
||||
| Flujo Password Recovery | OQI-001/requerimientos/ | 2h |
|
||||
| API Market Data OHLCV | OQI-003/especificaciones/ | 4h |
|
||||
| Trading Agents UI Spec | OQI-003/especificaciones/ | 8h |
|
||||
|
||||
---
|
||||
|
||||
## 7. PERFILES DE SUBAGENTES REQUERIDOS
|
||||
|
||||
| Perfil | Uso | Subtareas |
|
||||
|--------|-----|-----------|
|
||||
| PERFIL-ORQUESTADOR | Coordinación general | Principal |
|
||||
| PERFIL-DATABASE-POSTGRESQL | Operaciones DDL | DDL gaps |
|
||||
| PERFIL-BACKEND-NESTJS | Servicios TypeScript | Backend sync |
|
||||
| PERFIL-FRONTEND-REACT | Componentes UI | Frontend gaps |
|
||||
| PERFIL-ML-SPECIALIST | Modelos ML | ML overlays |
|
||||
| PERFIL-TRADING-STRATEGIST | Validación trading | Agents, charts |
|
||||
|
||||
---
|
||||
|
||||
## 8. MÉTRICAS DE EXPLORACIÓN
|
||||
|
||||
| Métrica | Valor |
|
||||
|---------|-------|
|
||||
| Subagentes Explore utilizados | 6 |
|
||||
| Archivos analizados | 450+ |
|
||||
| Tokens consumidos (exploración) | ~600K |
|
||||
| Documentos de tareas leídos | 35+ |
|
||||
| Inventarios consultados | 8 |
|
||||
| Épicas analizadas | 10 |
|
||||
|
||||
---
|
||||
|
||||
## 9. CONCLUSIONES DE CAPTURA
|
||||
|
||||
1. **Estado del Proyecto:** 60% completado, arquitectura sólida pero gaps críticos en integración
|
||||
2. **Mayor Bloqueo:** Trading Agents sin UI (feature vendida sin implementar)
|
||||
3. **Coherencia:** 81.25% global, requiere trabajo en Backend-Frontend
|
||||
4. **Documentación:** 90% sincronizada, algunos archivos obsoletos a purgar
|
||||
5. **Tareas Previas:** 3 tareas relacionadas con entregables útiles a integrar
|
||||
6. **Esfuerzo Estimado:** ~348 horas para remediación completa
|
||||
|
||||
---
|
||||
|
||||
**Siguiente Fase:** A (Análisis) - Priorización y ordenamiento de subtareas
|
||||
@ -0,0 +1,315 @@
|
||||
# 02-ANALISIS - Análisis y Planeación Integral
|
||||
|
||||
**Tarea:** TASK-2026-02-04-ANALISIS-PLANIFICACION-INTEGRAL
|
||||
**Fase:** A (Análisis)
|
||||
**Estado:** EN PROGRESO
|
||||
**Fecha:** 2026-02-04
|
||||
**Agente:** Claude Code (Opus 4.5)
|
||||
|
||||
---
|
||||
|
||||
## 1. ANÁLISIS DE DEPENDENCIAS ENTRE CAPAS
|
||||
|
||||
### 1.1 Matriz de Coherencia DDL → Backend
|
||||
|
||||
| Schema | Tablas DDL | Entities Backend | Coherencia | Gap |
|
||||
|--------|------------|------------------|------------|-----|
|
||||
| auth | 12 | 10 | 83% | phone_verifications, rate_limiting_config |
|
||||
| trading | 10 | 8 | 80% | drawing_tools parcial, price_alerts |
|
||||
| education | 14 | 11 | 79% | instructors, course_tags |
|
||||
| financial | 10 | 8 | 80% | refunds (CREADO), currency_exchange |
|
||||
| investment | 7 | 6 | 86% | agent_executions |
|
||||
| market_data | 4 | 2 | 50% | ohlcv_5m, ohlcv_15m sin servicio |
|
||||
| ml | 9 | 7 | 78% | prediction_overlays (CREADO) |
|
||||
| llm | 4 | 4 | 100% | - |
|
||||
| audit | 7 | 3 | 43% | compliance, system_events |
|
||||
| portfolio | 4 | 4 | 100% | - |
|
||||
|
||||
**Coherencia Promedio DDL-Backend:** 85%
|
||||
|
||||
### 1.2 Matriz de Coherencia Backend → Frontend
|
||||
|
||||
| Módulo | Endpoints | Consumidos FE | Coherencia | Gap Principal |
|
||||
|--------|-----------|---------------|------------|---------------|
|
||||
| auth | 13 | 10 | 77% | Password recovery, 2FA setup |
|
||||
| trading | 15 | 8 | 53% | Agents UI, Price alerts |
|
||||
| education | 12 | 10 | 83% | Reviews, Progress tracking |
|
||||
| financial | 10 | 8 | 80% | Refunds UI |
|
||||
| investment | 8 | 4 | 50% | Dashboard completo |
|
||||
| market_data | 0 | 0 | - | TODO FALTANTE |
|
||||
| ml | 8 | 6 | 75% | Overlays |
|
||||
| llm | 6 | 4 | 67% | Memory manager |
|
||||
| portfolio | 5 | 2 | 40% | Monte Carlo, Goals |
|
||||
|
||||
**Coherencia Promedio Backend-Frontend:** 77.5%
|
||||
|
||||
---
|
||||
|
||||
## 2. ANÁLISIS DE PRIORIDADES
|
||||
|
||||
### 2.1 Criterios de Priorización
|
||||
|
||||
1. **Impacto en Usuario:** ¿Afecta flujos críticos de negocio?
|
||||
2. **Cadena de Bloqueo:** ¿Bloquea otras funcionalidades?
|
||||
3. **Esfuerzo vs Valor:** Ratio de implementación
|
||||
4. **Dependencias Técnicas:** ¿Requiere trabajo previo?
|
||||
|
||||
### 2.2 Priorización de Gaps
|
||||
|
||||
#### PRIORIDAD CRÍTICA (P0) - Bloquean MVP
|
||||
|
||||
| Ranking | Gap | Impacto | Esfuerzo | Score |
|
||||
|---------|-----|---------|----------|-------|
|
||||
| 1 | Market Data OHLCV Service | CHAIN-001 bloqueado | 16h | 100 |
|
||||
| 2 | Trading Agents UI | Feature vendida | 40h | 95 |
|
||||
| 3 | User Profile Management | UX crítico | 6h | 90 |
|
||||
| 4 | Password Recovery | Seguridad | 8h | 85 |
|
||||
|
||||
#### PRIORIDAD ALTA (P1) - Funcionalidad Core
|
||||
|
||||
| Ranking | Gap | Impacto | Esfuerzo | Score |
|
||||
|---------|-----|---------|----------|-------|
|
||||
| 5 | Notifications API | CHAIN-002 | 20h | 80 |
|
||||
| 6 | ML Chart Overlays | OQI-006 ↔ OQI-003 | 24h | 75 |
|
||||
| 7 | 2FA Complete Flow | Seguridad | 16h | 70 |
|
||||
| 8 | Investment Dashboard | OQI-004 core | 16h | 68 |
|
||||
| 9 | education.instructors DDL | Backend blocked | 4h | 65 |
|
||||
|
||||
#### PRIORIDAD MEDIA (P2) - Mejoras Importantes
|
||||
|
||||
| Ranking | Gap | Impacto | Esfuerzo | Score |
|
||||
|---------|-----|---------|----------|-------|
|
||||
| 10 | Audit System Service | Compliance | 32h | 55 |
|
||||
| 11 | Currency Exchange Service | Pagos intl | 16h | 50 |
|
||||
| 12 | Risk Assessment Service | Investment | 12h | 48 |
|
||||
| 13 | Course Reviews | Education UX | 6h | 45 |
|
||||
| 14 | OAuth Flows Complete | Auth options | 12h | 42 |
|
||||
|
||||
---
|
||||
|
||||
## 3. ANÁLISIS DE DEPENDENCIAS ENTRE TAREAS
|
||||
|
||||
### 3.1 Grafo de Dependencias
|
||||
|
||||
```
|
||||
NIVEL 0: FUNDAMENTALS (Sin dependencias)
|
||||
├── DDL-001: education.instructors table
|
||||
├── DDL-002: education.course_tags field
|
||||
├── DDL-003: trading.price_alerts table
|
||||
├── DDL-004: financial.refunds table ✅ (Resuelto)
|
||||
├── DDL-005: ml.prediction_overlays field ✅ (Resuelto)
|
||||
└── INV-001: Sincronizar inventarios
|
||||
|
||||
NIVEL 1: BACKEND SERVICES (Depende de NIVEL 0)
|
||||
├── BE-001: Market Data OHLCV Service [depende: DDL market_data]
|
||||
├── BE-002: Notifications Service [depende: DDL auth]
|
||||
├── BE-003: User Profile Service [depende: DDL auth]
|
||||
├── BE-004: Audit Service [depende: DDL audit]
|
||||
└── BE-005: Instructor Service ✅ (Resuelto)
|
||||
|
||||
NIVEL 2: BACKEND API (Depende de NIVEL 1)
|
||||
├── API-001: Market Data Endpoints [depende: BE-001]
|
||||
├── API-002: Notifications Endpoints [depende: BE-002]
|
||||
├── API-003: User Profile Endpoints [depende: BE-003]
|
||||
├── API-004: Trading Agents Endpoints [depende: DDL trading]
|
||||
└── API-005: 2FA Setup Endpoints [depende: DDL auth]
|
||||
|
||||
NIVEL 3: FRONTEND INTEGRATION (Depende de NIVEL 2)
|
||||
├── FE-001: Market Data Charts [depende: API-001]
|
||||
├── FE-002: Notifications Consumer [depende: API-002]
|
||||
├── FE-003: User Profile Settings [depende: API-003]
|
||||
├── FE-004: Trading Agents UI [depende: API-004]
|
||||
├── FE-005: 2FA Setup Flow [depende: API-005]
|
||||
├── FE-006: ML Chart Overlays [depende: API-001]
|
||||
├── FE-007: Investment Dashboard [depende: API investm.]
|
||||
└── FE-008: Password Recovery UI [depende: API auth]
|
||||
|
||||
NIVEL 4: INTEGRATION & TESTING
|
||||
├── INT-001: E2E Trading Flow
|
||||
├── INT-002: E2E Investment Flow
|
||||
├── INT-003: E2E Auth Flow
|
||||
└── TEST-001: Coverage 40%+
|
||||
```
|
||||
|
||||
### 3.2 Camino Crítico
|
||||
|
||||
```
|
||||
DDL market_data → BE-001 (OHLCV Service) → API-001 → FE-001 (Charts) → FE-006 (ML Overlays)
|
||||
↳ INT-001 (E2E Trading)
|
||||
|
||||
Tiempo estimado camino crítico: 56 horas (16h + 8h + 16h + 16h)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. ANÁLISIS DE REUTILIZACIÓN
|
||||
|
||||
### 4.1 Código Reutilizable de template-saas
|
||||
|
||||
| Componente | Ubicación template-saas | Aplicabilidad | Esfuerzo Adaptación |
|
||||
|------------|-------------------------|---------------|---------------------|
|
||||
| Audit Service | services/audit/ | 90% | 4h |
|
||||
| Password Recovery | modules/auth/password/ | 80% | 6h |
|
||||
| User Profile | modules/users/profile/ | 75% | 8h |
|
||||
| Feature Flags | modules/feature-flags/ | 100% | 2h (YA HECHO) |
|
||||
| 2FA Flow | modules/auth/2fa/ | 85% | 4h |
|
||||
|
||||
### 4.2 Código Reutilizable de erp-core
|
||||
|
||||
| Componente | Ubicación erp-core | Aplicabilidad | Esfuerzo Adaptación |
|
||||
|------------|---------------------|---------------|---------------------|
|
||||
| Notifications Service | shared/notifications/ | 70% | 8h |
|
||||
| Currency Exchange | shared/currency/ | 60% | 10h |
|
||||
| Risk Assessment | modules/risk/ | 50% | 12h |
|
||||
|
||||
---
|
||||
|
||||
## 5. ANÁLISIS DE ARQUITECTURA
|
||||
|
||||
### 5.1 Inconsistencias Detectadas
|
||||
|
||||
#### ARCH-001: Acceso Directo a Python Services (ALTO RIESGO)
|
||||
|
||||
**Problema:** Frontend bypasses Express.js backend para acceder a:
|
||||
- mlService.ts → ML Engine (3083)
|
||||
- llmAgentService.ts → LLM Agent (3085)
|
||||
- backtestService.ts → ML Engine (3083)
|
||||
|
||||
**Impacto:**
|
||||
- Sin autenticación centralizada
|
||||
- CORS inconsistente
|
||||
- Error handling duplicado
|
||||
- Logs fragmentados
|
||||
|
||||
**Solución Propuesta:** Crear proxy endpoints en Express.js
|
||||
**Esfuerzo:** 16h
|
||||
|
||||
#### ARCH-002: Inconsistencia apiClient
|
||||
|
||||
**Problema:** 5 servicios NO usan apiClient centralizado:
|
||||
- portfolio.service.ts
|
||||
- adminService.ts
|
||||
- mlService.ts
|
||||
- llmAgentService.ts
|
||||
- backtestService.ts
|
||||
|
||||
**Impacto:**
|
||||
- Sin token refresh automático
|
||||
- Sin retry logic
|
||||
- Código duplicado
|
||||
|
||||
**Solución Propuesta:** Refactorizar para usar apiClient
|
||||
**Esfuerzo:** 8h
|
||||
|
||||
### 5.2 Decisiones de Arquitectura Pendientes
|
||||
|
||||
| ADR | Decisión | Opciones | Recomendación |
|
||||
|-----|----------|----------|---------------|
|
||||
| ADR-010 | Proxy vs Direct | 1. Proxy todo via Express 2. Direct para ML | Opción 1 (consistencia) |
|
||||
| ADR-011 | WebSocket Gateway | 1. Express WS 2. Separate service | Ya decidido: Express WS |
|
||||
| ADR-012 | State ML Results | 1. Redis cache 2. DB persistence | Redis (ya implementado) |
|
||||
|
||||
---
|
||||
|
||||
## 6. ANÁLISIS DE DOCUMENTACIÓN
|
||||
|
||||
### 6.1 Documentos a Purgar
|
||||
|
||||
| Documento | Razón | Impacto | Acción |
|
||||
|-----------|-------|---------|--------|
|
||||
| TASK-2026-02-03-DDL-VALIDATION/ | Supersedida | Ninguno | MOVER a _archive |
|
||||
| ANALISIS-GAPS-DOCUMENTACION.md | Outdated, rutas rotas | Confusión | ELIMINAR |
|
||||
| 95-guias-desarrollo/backend/ | Vacío | Inconsistencia | CREAR o ELIMINAR |
|
||||
| 95-guias-desarrollo/frontend/ | Vacío | Inconsistencia | CREAR o ELIMINAR |
|
||||
|
||||
### 6.2 Documentos a Crear
|
||||
|
||||
| Documento | Ubicación | Prioridad | Esfuerzo |
|
||||
|-----------|-----------|-----------|----------|
|
||||
| GUIA-BACKEND.md | 95-guias-desarrollo/backend/ | P2 | 4h |
|
||||
| GUIA-FRONTEND.md | 95-guias-desarrollo/frontend/ | P2 | 4h |
|
||||
| OQI-009 RF/ET/US | 02-definicion-modulos/OQI-009/ | P1 | 8h |
|
||||
| API-MARKET-DATA.md | OQI-003/especificaciones/ | P0 | 4h |
|
||||
|
||||
### 6.3 Documentos a Actualizar
|
||||
|
||||
| Documento | Gap | Prioridad |
|
||||
|-----------|-----|-----------|
|
||||
| BACKEND_INVENTORY.yml | Conteo 57→79 | P1 |
|
||||
| FRONTEND_INVENTORY.yml | Conteo 90→146 | P1 |
|
||||
| PROJECT-STATUS.md | Fecha 2026-01-30 | P0 |
|
||||
| PROXIMA-ACCION.md | Tarea actual | P0 |
|
||||
|
||||
---
|
||||
|
||||
## 7. ANÁLISIS DE RIESGOS
|
||||
|
||||
### 7.1 Riesgos Técnicos
|
||||
|
||||
| Riesgo | Probabilidad | Impacto | Mitigación |
|
||||
|--------|--------------|---------|------------|
|
||||
| Market Data API rate limits | Alta | Alto | Implementar cache agresivo |
|
||||
| ML Model performance | Media | Alto | Backtesting pre-deploy |
|
||||
| WebSocket scalability | Media | Medio | Redis pub/sub |
|
||||
| Trading Agents bugs | Alta | Crítico | Sandbox obligatorio |
|
||||
|
||||
### 7.2 Riesgos de Proyecto
|
||||
|
||||
| Riesgo | Probabilidad | Impacto | Mitigación |
|
||||
|--------|--------------|---------|------------|
|
||||
| Scope creep | Alta | Alto | Plan detallado con SP fijos |
|
||||
| Dependencias circulares | Media | Medio | Grafo de dependencias |
|
||||
| Documentación desactualizada | Alta | Medio | INV-001 prioritario |
|
||||
| Integración Python-TS | Media | Medio | ARCH-001 resolución |
|
||||
|
||||
---
|
||||
|
||||
## 8. ESTIMACIÓN CONSOLIDADA
|
||||
|
||||
### 8.1 Por Fase
|
||||
|
||||
| Fase | Descripción | Esfuerzo | Parallelizable |
|
||||
|------|-------------|----------|----------------|
|
||||
| FASE 0 | Purga y Sync Inventarios | 8h | Parcial |
|
||||
| FASE 1 | DDL Gaps (P0) | 16h | Sí (4 parallel) |
|
||||
| FASE 2 | Backend Services (P0) | 40h | Parcial |
|
||||
| FASE 3 | Frontend Sprint 1-2 | 77h | Parcial |
|
||||
| FASE 4 | Frontend Sprint 3-4 | 209h | Parcial |
|
||||
| FASE 5 | Architecture Refactor | 24h | No |
|
||||
| FASE 6 | Integration Testing | 40h | Parcial |
|
||||
| FASE 7 | Documentation | 16h | Sí |
|
||||
|
||||
**Total Estimado:** 430h (~11 semanas, 2 desarrolladores)
|
||||
|
||||
### 8.2 Por Prioridad
|
||||
|
||||
| Prioridad | Story Points | Horas | % Total |
|
||||
|-----------|--------------|-------|---------|
|
||||
| P0 (MVP) | 142 SP | 170h | 40% |
|
||||
| P1 (Core) | 186 SP | 150h | 35% |
|
||||
| P2 (Nice) | 130 SP | 70h | 16% |
|
||||
| P3 (Future) | 100 SP | 40h | 9% |
|
||||
|
||||
---
|
||||
|
||||
## 9. CONCLUSIONES DEL ANÁLISIS
|
||||
|
||||
### 9.1 Hallazgos Principales
|
||||
|
||||
1. **Market Data Service es el mayor bloqueador:** Bloquea CHAIN-001 completa (charts, ML overlays)
|
||||
2. **Trading Agents es feature vendida sin UI:** 40h de trabajo crítico
|
||||
3. **Arquitectura tiene 2 inconsistencias importantes:** ARCH-001 y ARCH-002
|
||||
4. **Documentación 10% desactualizada:** Requiere purga y actualización
|
||||
5. **Reutilización posible:** 30-40% del código puede adaptarse de template-saas
|
||||
|
||||
### 9.2 Recomendaciones
|
||||
|
||||
1. **Priorizar CHAIN-001:** Market Data → Charts → ML Overlays
|
||||
2. **Resolver ARCH-001 antes de más frontend:** Proxy endpoints
|
||||
3. **Ejecutar INV-001 inmediatamente:** Inventarios sincronizados
|
||||
4. **Delegar DDL a subagentes paralelos:** 4 subagentes FASE_1
|
||||
5. **Considerar reutilización de template-saas:** Audit, Password Recovery
|
||||
|
||||
---
|
||||
|
||||
**Siguiente Fase:** P (Planificación) - Plan de ejecución detallado
|
||||
@ -0,0 +1,636 @@
|
||||
# 03-PLANIFICACION - Análisis y Planeación Integral
|
||||
|
||||
**Tarea:** TASK-2026-02-04-ANALISIS-PLANIFICACION-INTEGRAL
|
||||
**Fase:** P (Planificación)
|
||||
**Estado:** EN PROGRESO
|
||||
**Fecha:** 2026-02-04
|
||||
**Agente:** Claude Code (Opus 4.5)
|
||||
|
||||
---
|
||||
|
||||
## 1. ESTRUCTURA DEL PLAN MAESTRO
|
||||
|
||||
### 1.1 Organización Jerárquica
|
||||
|
||||
```
|
||||
PLAN-MAESTRO-TRADING-PLATFORM-2026-Q1
|
||||
│
|
||||
├── FASE-0: PREPARACIÓN (8h)
|
||||
│ ├── SUBTAREA-0.1: Purga documentación obsoleta
|
||||
│ ├── SUBTAREA-0.2: Sincronización inventarios
|
||||
│ └── SUBTAREA-0.3: Actualización PROJECT-STATUS
|
||||
│
|
||||
├── FASE-1: DDL GAPS (16h)
|
||||
│ ├── SUBTAREA-1.1: education.instructors table
|
||||
│ ├── SUBTAREA-1.2: education.course_tags field
|
||||
│ ├── SUBTAREA-1.3: trading.price_alerts table
|
||||
│ └── SUBTAREA-1.4: Validación DDL post-cambios
|
||||
│
|
||||
├── FASE-2: BACKEND SERVICES (48h)
|
||||
│ ├── SUBTAREA-2.1: Market Data OHLCV Service (P0)
|
||||
│ ├── SUBTAREA-2.2: Notifications Complete Service (P1)
|
||||
│ ├── SUBTAREA-2.3: User Profile Service (P0)
|
||||
│ ├── SUBTAREA-2.4: Audit Service (P2)
|
||||
│ └── SUBTAREA-2.5: 2FA Complete Flow (P1)
|
||||
│
|
||||
├── FASE-3: BACKEND API (24h)
|
||||
│ ├── SUBTAREA-3.1: Market Data Endpoints
|
||||
│ ├── SUBTAREA-3.2: Notifications Endpoints
|
||||
│ ├── SUBTAREA-3.3: User Profile Endpoints
|
||||
│ ├── SUBTAREA-3.4: Trading Agents Endpoints
|
||||
│ └── SUBTAREA-3.5: 2FA Setup Endpoints
|
||||
│
|
||||
├── FASE-4: FRONTEND INTEGRATION (180h)
|
||||
│ ├── SPRINT-FE-1: Fundamentos (17 SP)
|
||||
│ ├── SPRINT-FE-2: Trading Core (60 SP)
|
||||
│ ├── SPRINT-FE-3: Investment (81 SP)
|
||||
│ ├── SPRINT-FE-4: Advanced Features (128 SP)
|
||||
│ └── SPRINT-FE-5: Growth (55 SP)
|
||||
│
|
||||
├── FASE-5: ARCHITECTURE REFACTOR (24h)
|
||||
│ ├── SUBTAREA-5.1: Proxy Python Services (ARCH-001)
|
||||
│ └── SUBTAREA-5.2: Standardize apiClient (ARCH-002)
|
||||
│
|
||||
├── FASE-6: TESTING (40h)
|
||||
│ ├── SUBTAREA-6.1: Unit Tests Backend
|
||||
│ ├── SUBTAREA-6.2: Unit Tests Frontend
|
||||
│ ├── SUBTAREA-6.3: Integration Tests
|
||||
│ └── SUBTAREA-6.4: E2E Tests
|
||||
│
|
||||
└── FASE-7: DOCUMENTACIÓN (16h)
|
||||
├── SUBTAREA-7.1: Guías desarrollo
|
||||
├── SUBTAREA-7.2: API Documentation
|
||||
└── SUBTAREA-7.3: Actualización inventarios final
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. DETALLE DE SUBTAREAS - FASE 0: PREPARACIÓN
|
||||
|
||||
### SUBTAREA-0.1: Purga Documentación Obsoleta
|
||||
|
||||
**ID:** ST-0.1
|
||||
**Prioridad:** P0
|
||||
**Esfuerzo:** 2h
|
||||
**Perfil:** PERFIL-ORQUESTADOR
|
||||
**Parallelizable:** Sí
|
||||
|
||||
**CAPVED:**
|
||||
- **C:** Identificar documentos obsoletos listados en 01-CAPTURA.md
|
||||
- **A:** Verificar que no hay referencias activas
|
||||
- **P:** Plan de archivado/eliminación
|
||||
- **V:** No aplica (no código)
|
||||
- **E:** Mover/eliminar archivos
|
||||
- **D:** Actualizar _INDEX.yml
|
||||
|
||||
**Acciones:**
|
||||
1. Mover `TASK-2026-02-03-DDL-VALIDATION/` a `_archive/2026-02/`
|
||||
2. Eliminar `docs/90-transversal/gaps/ANALISIS-GAPS-DOCUMENTACION.md`
|
||||
3. Decidir sobre `95-guias-desarrollo/` vacíos
|
||||
|
||||
**Criterios Aceptación:**
|
||||
- [ ] No existen archivos obsoletos identificados
|
||||
- [ ] _INDEX.yml actualizado
|
||||
- [ ] Sin referencias rotas
|
||||
|
||||
---
|
||||
|
||||
### SUBTAREA-0.2: Sincronización Inventarios
|
||||
|
||||
**ID:** ST-0.2
|
||||
**Prioridad:** P0
|
||||
**Esfuerzo:** 4h
|
||||
**Perfil:** PERFIL-ORQUESTADOR
|
||||
**Parallelizable:** Parcial
|
||||
|
||||
**CAPVED:**
|
||||
- **C:** Leer inventarios actuales y código real
|
||||
- **A:** Identificar discrepancias específicas
|
||||
- **P:** Lista de correcciones por inventario
|
||||
- **V:** Verificar conteos con grep/find
|
||||
- **E:** Actualizar YAML files
|
||||
- **D:** Commit con changelog
|
||||
|
||||
**Acciones:**
|
||||
1. BACKEND_INVENTORY.yml: Actualizar conteo 57→79 endpoints
|
||||
2. FRONTEND_INVENTORY.yml: Actualizar conteo 90→146 componentes
|
||||
3. DATABASE_INVENTORY.yml: Resolver duplicación notifications
|
||||
|
||||
**Criterios Aceptación:**
|
||||
- [ ] Todos los inventarios >95% sincronizados
|
||||
- [ ] Sin duplicaciones en DDL registry
|
||||
- [ ] Conteos verificados automáticamente
|
||||
|
||||
---
|
||||
|
||||
### SUBTAREA-0.3: Actualización PROJECT-STATUS
|
||||
|
||||
**ID:** ST-0.3
|
||||
**Prioridad:** P0
|
||||
**Esfuerzo:** 2h
|
||||
**Perfil:** PERFIL-ORQUESTADOR
|
||||
**Parallelizable:** Sí
|
||||
|
||||
**CAPVED:**
|
||||
- **C:** Leer PROJECT-STATUS.md actual (2026-01-30)
|
||||
- **A:** Comparar con estado real del proyecto
|
||||
- **P:** Lista de secciones a actualizar
|
||||
- **V:** No aplica
|
||||
- **E:** Editar PROJECT-STATUS.md y PROXIMA-ACCION.md
|
||||
- **D:** Commit
|
||||
|
||||
**Criterios Aceptación:**
|
||||
- [ ] PROJECT-STATUS.md con fecha actual
|
||||
- [ ] PROXIMA-ACCION.md refleja tarea actual
|
||||
- [ ] Métricas actualizadas
|
||||
|
||||
---
|
||||
|
||||
## 3. DETALLE DE SUBTAREAS - FASE 1: DDL GAPS
|
||||
|
||||
### SUBTAREA-1.1: education.instructors Table
|
||||
|
||||
**ID:** ST-1.1
|
||||
**Prioridad:** P1
|
||||
**Esfuerzo:** 4h
|
||||
**Perfil:** PERFIL-DATABASE-POSTGRESQL
|
||||
**Parallelizable:** Sí (con ST-1.2, ST-1.3)
|
||||
**Depende de:** ST-0.2
|
||||
|
||||
**CAPVED:**
|
||||
- **C:** Revisar requerimientos OQI-002 para instructores
|
||||
- **A:** Diseñar schema de tabla con campos necesarios
|
||||
- **P:** DDL script con constraints y índices
|
||||
- **V:** Validar FK hacia auth.user_profiles
|
||||
- **E:** Crear DDL y ejecutar en WSL
|
||||
- **D:** Actualizar DATABASE_INVENTORY.yml
|
||||
|
||||
**DDL Propuesto:**
|
||||
```sql
|
||||
CREATE TABLE education.instructors (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id UUID NOT NULL REFERENCES auth.user_profiles(id),
|
||||
bio TEXT,
|
||||
specializations TEXT[],
|
||||
rating DECIMAL(3,2) DEFAULT 0,
|
||||
total_courses INTEGER DEFAULT 0,
|
||||
total_students INTEGER DEFAULT 0,
|
||||
is_verified BOOLEAN DEFAULT false,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_instructors_user_id ON education.instructors(user_id);
|
||||
CREATE INDEX idx_instructors_rating ON education.instructors(rating DESC);
|
||||
```
|
||||
|
||||
**Criterios Aceptación:**
|
||||
- [ ] Tabla creada en schema education
|
||||
- [ ] FK válida hacia auth.user_profiles
|
||||
- [ ] Índices creados
|
||||
- [ ] DDL documentado en apps/database/
|
||||
|
||||
---
|
||||
|
||||
### SUBTAREA-1.2: education.course_tags Field
|
||||
|
||||
**ID:** ST-1.2
|
||||
**Prioridad:** P1
|
||||
**Esfuerzo:** 2h
|
||||
**Perfil:** PERFIL-DATABASE-POSTGRESQL
|
||||
**Parallelizable:** Sí (con ST-1.1, ST-1.3)
|
||||
**Depende de:** ST-0.2
|
||||
|
||||
**CAPVED:**
|
||||
- **C:** Revisar OQI-002 para filtrado por tags
|
||||
- **A:** Decidir: campo TEXT[] o tabla de relación
|
||||
- **P:** DDL para campo o tabla
|
||||
- **V:** Compatibilidad con queries existentes
|
||||
- **E:** Ejecutar DDL en WSL
|
||||
- **D:** Actualizar inventario
|
||||
|
||||
**Decisión Arquitectural:**
|
||||
Usar tabla de relación `education.course_tag_assignments` (ya existe tag.service.ts)
|
||||
|
||||
**Criterios Aceptación:**
|
||||
- [ ] Tags pueden asignarse a cursos
|
||||
- [ ] Queries de filtrado funcionan
|
||||
- [ ] Coherencia con tag.service.ts existente
|
||||
|
||||
---
|
||||
|
||||
### SUBTAREA-1.3: trading.price_alerts Table
|
||||
|
||||
**ID:** ST-1.3
|
||||
**Prioridad:** P0
|
||||
**Esfuerzo:** 4h
|
||||
**Perfil:** PERFIL-DATABASE-POSTGRESQL
|
||||
**Parallelizable:** Sí (con ST-1.1, ST-1.2)
|
||||
**Depende de:** ST-0.2
|
||||
|
||||
**CAPVED:**
|
||||
- **C:** Revisar OQI-003 para alertas de precio
|
||||
- **A:** Diseñar schema con tipos de alerta
|
||||
- **P:** DDL con enum y tabla
|
||||
- **V:** FK hacia trading.symbols
|
||||
- **E:** Ejecutar DDL
|
||||
- **D:** Documentar
|
||||
|
||||
**DDL Propuesto:**
|
||||
```sql
|
||||
CREATE TYPE trading.alert_type AS ENUM ('price_above', 'price_below', 'percent_change', 'volume_spike');
|
||||
CREATE TYPE trading.alert_status AS ENUM ('active', 'triggered', 'expired', 'cancelled');
|
||||
|
||||
CREATE TABLE trading.price_alerts (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id UUID NOT NULL REFERENCES auth.user_profiles(id),
|
||||
symbol_id UUID NOT NULL REFERENCES trading.symbols(id),
|
||||
alert_type trading.alert_type NOT NULL,
|
||||
target_price DECIMAL(18,8),
|
||||
percent_threshold DECIMAL(5,2),
|
||||
status trading.alert_status DEFAULT 'active',
|
||||
triggered_at TIMESTAMPTZ,
|
||||
expires_at TIMESTAMPTZ,
|
||||
notification_channels TEXT[] DEFAULT ARRAY['push', 'email'],
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_price_alerts_user ON trading.price_alerts(user_id);
|
||||
CREATE INDEX idx_price_alerts_symbol ON trading.price_alerts(symbol_id);
|
||||
CREATE INDEX idx_price_alerts_active ON trading.price_alerts(status) WHERE status = 'active';
|
||||
```
|
||||
|
||||
**Criterios Aceptación:**
|
||||
- [ ] Tabla creada con enums
|
||||
- [ ] FKs válidas
|
||||
- [ ] Índice parcial para alertas activas
|
||||
- [ ] Compatible con notification service
|
||||
|
||||
---
|
||||
|
||||
### SUBTAREA-1.4: Validación DDL Post-Cambios
|
||||
|
||||
**ID:** ST-1.4
|
||||
**Prioridad:** P0
|
||||
**Esfuerzo:** 2h
|
||||
**Perfil:** PERFIL-DATABASE-POSTGRESQL
|
||||
**Parallelizable:** No
|
||||
**Depende de:** ST-1.1, ST-1.2, ST-1.3
|
||||
|
||||
**CAPVED:**
|
||||
- **C:** Lista de cambios DDL realizados
|
||||
- **A:** Verificar integridad referencial
|
||||
- **P:** Script de validación
|
||||
- **V:** Ejecutar validaciones
|
||||
- **E:** Corregir si hay errores
|
||||
- **D:** Actualizar DDL-VALIDATION-MATRIX.yml
|
||||
|
||||
**Criterios Aceptación:**
|
||||
- [ ] Todas las FK válidas
|
||||
- [ ] Índices optimizados
|
||||
- [ ] Sin conflictos de nombres
|
||||
- [ ] Script recreate-db funciona
|
||||
|
||||
---
|
||||
|
||||
## 4. DETALLE DE SUBTAREAS - FASE 2: BACKEND SERVICES
|
||||
|
||||
### SUBTAREA-2.1: Market Data OHLCV Service (CRÍTICO)
|
||||
|
||||
**ID:** ST-2.1
|
||||
**Prioridad:** P0
|
||||
**Esfuerzo:** 16h
|
||||
**Perfil:** PERFIL-BACKEND-NESTJS
|
||||
**Parallelizable:** No (bloquea CHAIN-001)
|
||||
**Depende de:** ST-1.4
|
||||
|
||||
**CAPVED:**
|
||||
- **C:** Leer especificaciones OQI-003 para datos de mercado
|
||||
- **A:** Diseñar service con cache Redis
|
||||
- **P:** Estructura de archivos y endpoints
|
||||
- **V:** Validar contra DDL market_data
|
||||
- **E:** Implementar service + controller
|
||||
- **D:** Swagger docs
|
||||
|
||||
**Estructura:**
|
||||
```
|
||||
apps/backend/src/modules/market-data/
|
||||
├── market-data.module.ts
|
||||
├── market-data.controller.ts
|
||||
├── market-data.service.ts
|
||||
├── interfaces/
|
||||
│ ├── ohlcv.interface.ts
|
||||
│ └── ticker.interface.ts
|
||||
├── dto/
|
||||
│ ├── get-ohlcv.dto.ts
|
||||
│ └── get-ticker.dto.ts
|
||||
└── index.ts
|
||||
```
|
||||
|
||||
**Endpoints:**
|
||||
- GET /api/market-data/ohlcv/:symbol
|
||||
- GET /api/market-data/tickers
|
||||
- GET /api/market-data/ticker/:symbol
|
||||
- WS /ws/market-data/stream
|
||||
|
||||
**Criterios Aceptación:**
|
||||
- [ ] Service implementado con caching
|
||||
- [ ] Endpoints funcionando
|
||||
- [ ] WebSocket stream activo
|
||||
- [ ] Swagger documentado
|
||||
- [ ] Tests unitarios
|
||||
|
||||
---
|
||||
|
||||
### SUBTAREA-2.2: Notifications Complete Service
|
||||
|
||||
**ID:** ST-2.2
|
||||
**Prioridad:** P1
|
||||
**Esfuerzo:** 12h
|
||||
**Perfil:** PERFIL-BACKEND-NESTJS
|
||||
**Parallelizable:** Sí (con ST-2.3)
|
||||
**Depende de:** ST-1.4
|
||||
|
||||
**CAPVED:**
|
||||
- **C:** Revisar notification.service.ts existente (parcial)
|
||||
- **A:** Identificar funcionalidad faltante
|
||||
- **P:** Completar service + controller + push
|
||||
- **V:** Validar contra DDL auth.notifications
|
||||
- **E:** Implementar
|
||||
- **D:** Documentar
|
||||
|
||||
**Funcionalidad Faltante:**
|
||||
- Push notifications (web push)
|
||||
- Email notifications
|
||||
- In-app notifications API
|
||||
- User preferences
|
||||
|
||||
**Criterios Aceptación:**
|
||||
- [ ] Push notifications funcionando
|
||||
- [ ] Preferences guardadas
|
||||
- [ ] API completa
|
||||
- [ ] Tests
|
||||
|
||||
---
|
||||
|
||||
### SUBTAREA-2.3: User Profile Service
|
||||
|
||||
**ID:** ST-2.3
|
||||
**Prioridad:** P0
|
||||
**Esfuerzo:** 6h
|
||||
**Perfil:** PERFIL-BACKEND-NESTJS
|
||||
**Parallelizable:** Sí (con ST-2.2)
|
||||
**Depende de:** NINGUNA
|
||||
|
||||
**CAPVED:**
|
||||
- **C:** Revisar auth.user_profiles DDL
|
||||
- **A:** Diseñar CRUD operations
|
||||
- **P:** Service + Controller
|
||||
- **V:** Validar auth guards
|
||||
- **E:** Implementar
|
||||
- **D:** Swagger
|
||||
|
||||
**Estructura:**
|
||||
```
|
||||
apps/backend/src/modules/users/
|
||||
├── users.module.ts
|
||||
├── users.controller.ts
|
||||
├── users.service.ts
|
||||
├── dto/
|
||||
│ ├── update-profile.dto.ts
|
||||
│ └── change-password.dto.ts
|
||||
└── index.ts
|
||||
```
|
||||
|
||||
**Criterios Aceptación:**
|
||||
- [ ] CRUD de perfil
|
||||
- [ ] Cambio de password
|
||||
- [ ] Avatar upload
|
||||
- [ ] Guards aplicados
|
||||
|
||||
---
|
||||
|
||||
### SUBTAREA-2.4: Audit Service
|
||||
|
||||
**ID:** ST-2.4
|
||||
**Prioridad:** P2
|
||||
**Esfuerzo:** 8h
|
||||
**Perfil:** PERFIL-BACKEND-NESTJS
|
||||
**Parallelizable:** Sí
|
||||
**Depende de:** ST-1.4
|
||||
|
||||
**CAPVED:**
|
||||
- **C:** Revisar audit.service.ts existente (parcial)
|
||||
- **A:** Evaluar reutilización de template-saas
|
||||
- **P:** Completar queries y endpoints
|
||||
- **V:** Validar DDL audit schema
|
||||
- **E:** Implementar
|
||||
- **D:** Documentar
|
||||
|
||||
**Criterios Aceptación:**
|
||||
- [ ] Log de eventos
|
||||
- [ ] Queries por usuario/fecha
|
||||
- [ ] Export capability
|
||||
- [ ] Admin endpoints
|
||||
|
||||
---
|
||||
|
||||
### SUBTAREA-2.5: 2FA Complete Flow
|
||||
|
||||
**ID:** ST-2.5
|
||||
**Prioridad:** P1
|
||||
**Esfuerzo:** 8h
|
||||
**Perfil:** PERFIL-BACKEND-NESTJS
|
||||
**Parallelizable:** Sí
|
||||
**Depende de:** NINGUNA
|
||||
|
||||
**CAPVED:**
|
||||
- **C:** Revisar twofa.service.ts existente
|
||||
- **A:** Identificar endpoints faltantes
|
||||
- **P:** Setup + Verify + Backup codes
|
||||
- **V:** Tests de seguridad
|
||||
- **E:** Implementar endpoints
|
||||
- **D:** Documentar flujo
|
||||
|
||||
**Endpoints Faltantes:**
|
||||
- POST /api/auth/2fa/setup
|
||||
- POST /api/auth/2fa/verify
|
||||
- POST /api/auth/2fa/disable
|
||||
- GET /api/auth/2fa/backup-codes
|
||||
|
||||
**Criterios Aceptación:**
|
||||
- [ ] Setup con QR code
|
||||
- [ ] Verify con TOTP
|
||||
- [ ] Backup codes generados
|
||||
- [ ] Disable con password confirm
|
||||
|
||||
---
|
||||
|
||||
## 5. DETALLE DE SUBTAREAS - FASE 3: BACKEND API
|
||||
|
||||
(Resumen - detalles similares a FASE 2)
|
||||
|
||||
| ID | Subtarea | Esfuerzo | Depende de |
|
||||
|----|----------|----------|------------|
|
||||
| ST-3.1 | Market Data Endpoints | 4h | ST-2.1 |
|
||||
| ST-3.2 | Notifications Endpoints | 4h | ST-2.2 |
|
||||
| ST-3.3 | User Profile Endpoints | 4h | ST-2.3 |
|
||||
| ST-3.4 | Trading Agents Endpoints | 8h | DDL trading |
|
||||
| ST-3.5 | 2FA Setup Endpoints | 4h | ST-2.5 |
|
||||
|
||||
---
|
||||
|
||||
## 6. DETALLE DE SUBTAREAS - FASE 4: FRONTEND
|
||||
|
||||
### SPRINT-FE-1: Fundamentos (17 SP)
|
||||
|
||||
| ID | Subtarea | SP | Depende de |
|
||||
|----|----------|-----|------------|
|
||||
| SUBTASK-001 | Routing y Huérfanos | 4 | NINGUNA |
|
||||
| SUBTASK-002 | OQI-001 Auth Completar | 13 | ST-2.5, ST-3.3 |
|
||||
|
||||
### SPRINT-FE-2: Trading Core (60 SP)
|
||||
|
||||
| ID | Subtarea | SP | Depende de |
|
||||
|----|----------|-----|------------|
|
||||
| SUBTASK-003 | OQI-003 Trading | 44 | ST-3.1, ST-3.4 |
|
||||
| SUBTASK-004 | OQI-006 ML | 16 | ST-3.1 |
|
||||
|
||||
### SPRINT-FE-3: Investment (81 SP)
|
||||
|
||||
| ID | Subtarea | SP | Depende de |
|
||||
|----|----------|-----|------------|
|
||||
| SUBTASK-005 | OQI-004 Investment | 68 | Backend investment |
|
||||
| SUBTASK-006 | OQI-005 Payments | 13 | Backend payments |
|
||||
|
||||
### SPRINT-FE-4: Advanced Features (128 SP)
|
||||
|
||||
| ID | Subtarea | SP | Depende de |
|
||||
|----|----------|-----|------------|
|
||||
| SUBTASK-007 | OQI-002 Education | 21 | ST-1.1, ST-1.2 |
|
||||
| SUBTASK-008 | OQI-007 LLM | 44 | Backend LLM |
|
||||
| SUBTASK-009 | OQI-008 Portfolio | 63 | Backend portfolio |
|
||||
|
||||
### SPRINT-FE-5: Growth (55 SP)
|
||||
|
||||
| ID | Subtarea | SP | Depende de |
|
||||
|----|----------|-----|------------|
|
||||
| SUBTASK-010 | OQI-009 Marketplace | 42 | Docs OQI-009 |
|
||||
| SUBTASK-011 | Migración Docs | 8 | NINGUNA |
|
||||
| SUBTASK-012 | Inventarios Sync | 5 | NINGUNA |
|
||||
|
||||
---
|
||||
|
||||
## 7. PLAN DE EJECUCIÓN ORDENADO
|
||||
|
||||
### Semana 1: Preparación + DDL
|
||||
|
||||
| Día | Subtareas | Paralelismo | Horas |
|
||||
|-----|-----------|-------------|-------|
|
||||
| D1 | ST-0.1, ST-0.2, ST-0.3 | 3 parallel | 8h |
|
||||
| D2 | ST-1.1, ST-1.2, ST-1.3 | 3 parallel | 8h |
|
||||
| D3 | ST-1.4 | Secuencial | 2h |
|
||||
|
||||
**Entregables Semana 1:**
|
||||
- Documentación purgada
|
||||
- Inventarios sincronizados
|
||||
- DDL gaps resueltos
|
||||
|
||||
### Semana 2-3: Backend Services
|
||||
|
||||
| Día | Subtareas | Paralelismo | Horas |
|
||||
|-----|-----------|-------------|-------|
|
||||
| D4-D5 | ST-2.1 (Market Data) | Critical path | 16h |
|
||||
| D6 | ST-2.2, ST-2.3 | 2 parallel | 12h |
|
||||
| D7 | ST-2.4, ST-2.5 | 2 parallel | 16h |
|
||||
| D8 | ST-3.1, ST-3.2 | 2 parallel | 8h |
|
||||
| D9 | ST-3.3, ST-3.4, ST-3.5 | 3 parallel | 16h |
|
||||
|
||||
**Entregables Semana 2-3:**
|
||||
- Market Data Service completo (CHAIN-001 desbloqueado)
|
||||
- Notifications completo
|
||||
- User Profile completo
|
||||
- 2FA completo
|
||||
|
||||
### Semana 4-8: Frontend Sprints
|
||||
|
||||
| Sprint | Duración | Subtareas | Paralelismo |
|
||||
|--------|----------|-----------|-------------|
|
||||
| FE-1 | 3 días | SUBTASK-001, 002 | 2 parallel |
|
||||
| FE-2 | 5 días | SUBTASK-003, 004 | 2 parallel |
|
||||
| FE-3 | 6 días | SUBTASK-005, 006 | 2 parallel |
|
||||
| FE-4 | 10 días | SUBTASK-007-009 | 3 parallel |
|
||||
| FE-5 | 4 días | SUBTASK-010-012 | 3 parallel |
|
||||
|
||||
### Semana 9-10: Refactor + Testing
|
||||
|
||||
| Día | Subtareas | Horas |
|
||||
|-----|-----------|-------|
|
||||
| D1-D2 | ST-5.1 (ARCH-001) | 16h |
|
||||
| D3 | ST-5.2 (ARCH-002) | 8h |
|
||||
| D4-D7 | ST-6.1-6.4 Tests | 40h |
|
||||
| D8-D9 | ST-7.1-7.3 Docs | 16h |
|
||||
|
||||
---
|
||||
|
||||
## 8. ASIGNACIÓN DE PERFILES POR SUBTAREA
|
||||
|
||||
| Subtarea | Perfil Principal | Perfil Backup |
|
||||
|----------|------------------|---------------|
|
||||
| ST-0.* | PERFIL-ORQUESTADOR | - |
|
||||
| ST-1.* | PERFIL-DATABASE-POSTGRESQL | PERFIL-DATABASE-COMPACT |
|
||||
| ST-2.* | PERFIL-BACKEND-NESTJS | PERFIL-BACKEND-COMPACT |
|
||||
| ST-3.* | PERFIL-BACKEND-NESTJS | - |
|
||||
| SUBTASK-* | PERFIL-FRONTEND-REACT | PERFIL-GENERIC-SUBAGENT |
|
||||
| ST-5.* | PERFIL-BACKEND-NESTJS | - |
|
||||
| ST-6.* | PERFIL-QA-TESTER | PERFIL-BACKEND-NESTJS |
|
||||
| ST-7.* | PERFIL-DOCUMENTACION | PERFIL-ORQUESTADOR |
|
||||
|
||||
---
|
||||
|
||||
## 9. CRITERIOS DE ÉXITO DEL PLAN
|
||||
|
||||
### Métricas Objetivo
|
||||
|
||||
| Métrica | Actual | Objetivo | Incremento |
|
||||
|---------|--------|----------|------------|
|
||||
| Coherencia Global | 81.25% | 95% | +13.75% |
|
||||
| DDL-Backend | 85% | 98% | +13% |
|
||||
| Backend-Frontend | 77.5% | 92% | +14.5% |
|
||||
| Test Coverage | 15% | 40% | +25% |
|
||||
| Gaps P0 | 3 | 0 | -3 |
|
||||
| Gaps P1 | 6 | 2 | -4 |
|
||||
|
||||
### Hitos de Validación
|
||||
|
||||
| Hito | Semana | Criterio |
|
||||
|------|--------|----------|
|
||||
| M1 | 1 | DDL 100% sincronizado |
|
||||
| M2 | 3 | CHAIN-001 desbloqueado |
|
||||
| M3 | 5 | Frontend Sprint 2 completado |
|
||||
| M4 | 8 | Frontend MVP completado |
|
||||
| M5 | 10 | Tests 40%+ coverage |
|
||||
|
||||
---
|
||||
|
||||
## 10. PLAN DE CONTINGENCIA
|
||||
|
||||
### Riesgos y Mitigaciones
|
||||
|
||||
| Riesgo | Trigger | Mitigación |
|
||||
|--------|---------|------------|
|
||||
| Bloqueo en Market Data | >3 días delay | Usar mock service temporal |
|
||||
| Tests lentos | >8h por suite | Paralelizar CI |
|
||||
| Dependencia externa | API down | Cache agresivo |
|
||||
| Scope creep | +20% SP | Congelar scope Sprint |
|
||||
|
||||
### Escalation Path
|
||||
|
||||
1. Blocker técnico → Consultar ARCH-001/002 solutions
|
||||
2. Blocker de dependencia → Reordenar subtareas
|
||||
3. Blocker de recurso → Solicitar subagente adicional
|
||||
|
||||
---
|
||||
|
||||
**Siguiente Fase:** E (Ejecución) - Delegación a subagentes
|
||||
@ -0,0 +1,77 @@
|
||||
task_id: TASK-2026-02-04-ANALISIS-PLANIFICACION-INTEGRAL
|
||||
version: 1.0.0
|
||||
created: "2026-02-04T10:00:00Z"
|
||||
updated: "2026-02-04T10:00:00Z"
|
||||
|
||||
info:
|
||||
nombre: Análisis y Planeación Integral - Trading Platform
|
||||
descripcion: >
|
||||
Análisis exhaustivo del proyecto trading-platform para crear un plan de
|
||||
integración DDL-Backend-Frontend que cumpla CAPVED. Incluye análisis de gaps,
|
||||
purga de documentación obsoleta, definición de subtareas jerárquicas,
|
||||
y establecimiento de dependencias lógicas.
|
||||
tipo: ANALYSIS
|
||||
modo: "@ANALYSIS"
|
||||
prioridad: P0
|
||||
proyecto: trading-platform
|
||||
agente_principal: claude-opus-4-5
|
||||
perfil: PERFIL-ORQUESTADOR
|
||||
|
||||
estado:
|
||||
fase_actual: C
|
||||
progreso_global: 25%
|
||||
fases:
|
||||
C: { status: COMPLETADA, fecha: "2026-02-04" }
|
||||
A: { status: EN_PROGRESO, fecha: "2026-02-04" }
|
||||
P: { status: PENDIENTE }
|
||||
V: { status: OMITIDA, razon: "Tarea de análisis, no requiere validación de código" }
|
||||
E: { status: PENDIENTE, nota: "Ejecución delegada a subtareas" }
|
||||
D: { status: PENDIENTE }
|
||||
|
||||
metricas:
|
||||
tokens_consumidos: 600000
|
||||
subagentes_utilizados: 6
|
||||
archivos_analizados: 450
|
||||
gaps_identificados: 24
|
||||
subtareas_definidas: 35
|
||||
story_points_mapeados: 558
|
||||
|
||||
contexto:
|
||||
tareas_previas_relacionadas:
|
||||
- TASK-2026-02-03-ANALISIS-DDL-MODELADO
|
||||
- TASK-2026-02-03-ANALISIS-FRONTEND-UXUI
|
||||
- TASK-2026-02-03-BACKEND-ENTITIES-SYNC
|
||||
- TASK-2026-01-30-ANALISIS-INTEGRACION
|
||||
documentacion_a_purgar:
|
||||
- orchestration/tareas/TASK-2026-02-03-DDL-VALIDATION/
|
||||
- docs/90-transversal/gaps/ANALISIS-GAPS-DOCUMENTACION.md
|
||||
documentacion_a_integrar:
|
||||
- TASK-2026-02-03-ANALISIS-DDL-MODELADO (gaps DDL)
|
||||
- TASK-2026-02-03-ANALISIS-FRONTEND-UXUI (12 subtareas frontend)
|
||||
|
||||
entregables:
|
||||
- 01-CAPTURA.md
|
||||
- 02-ANALISIS.md
|
||||
- 03-PLANIFICACION.md
|
||||
- inventarios/CONSOLIDADO-GAPS.yml
|
||||
- inventarios/PLAN-EJECUCION-MAESTRO.yml
|
||||
- subagentes/PERFILES-SUBAGENTES.yml
|
||||
- subagentes/DELEGACION-PLAN.yml
|
||||
|
||||
dependencias:
|
||||
bloqueado_por: []
|
||||
bloquea:
|
||||
- Ejecución de Sprint 1 Frontend
|
||||
- Ejecución de FASE_1 DDL
|
||||
|
||||
referencias:
|
||||
simco:
|
||||
- "@PRINCIPIO-CAPVED"
|
||||
- "@SIMCO-TAREA"
|
||||
- "@SIMCO-DELEGACION"
|
||||
- "@PERFIL-ORQUESTADOR"
|
||||
inventarios:
|
||||
- orchestration/inventarios/MASTER_INVENTORY.yml
|
||||
- orchestration/inventarios/DATABASE_INVENTORY.yml
|
||||
- orchestration/inventarios/BACKEND_INVENTORY.yml
|
||||
- orchestration/inventarios/FRONTEND_INVENTORY.yml
|
||||
@ -0,0 +1,289 @@
|
||||
consolidado_gaps:
|
||||
version: 1.0.0
|
||||
fecha: "2026-02-04"
|
||||
fuentes:
|
||||
- TASK-2026-02-03-ANALISIS-DDL-MODELADO
|
||||
- TASK-2026-02-03-ANALISIS-FRONTEND-UXUI
|
||||
- GAPS-TRACKING.yml
|
||||
- CROSS-VALIDATION-GAPS.yml
|
||||
|
||||
resumen:
|
||||
total_gaps: 24
|
||||
p0_bloqueantes: 3
|
||||
p1_criticos: 6
|
||||
p2_importantes: 10
|
||||
p3_menores: 5
|
||||
story_points_total: 558
|
||||
horas_estimadas: 430
|
||||
|
||||
gaps_p0_bloqueantes:
|
||||
- id: GAP-P0-001
|
||||
nombre: Password Recovery sin UI
|
||||
modulo: OQI-001 Auth
|
||||
capa: Frontend
|
||||
descripcion: "Backend tiene email.service.ts pero no hay endpoints de reset. Frontend falta PasswordRecovery.tsx y PasswordReset.tsx"
|
||||
esfuerzo_horas: 8
|
||||
story_points: 8
|
||||
dependencias: []
|
||||
bloquea: ["User self-service"]
|
||||
estado: PENDIENTE
|
||||
asignado_a: SUBTASK-002-OQI-001-AUTH
|
||||
|
||||
- id: GAP-P0-002
|
||||
nombre: User Profile Management sin servicio
|
||||
modulo: OQI-001 Auth
|
||||
capa: Backend
|
||||
descripcion: "No existe userService.ts backend. users.controller.ts falta. Frontend sin ProfileSettings component."
|
||||
esfuerzo_horas: 6
|
||||
story_points: 5
|
||||
dependencias: []
|
||||
bloquea: ["User cannot update personal data"]
|
||||
estado: PENDIENTE
|
||||
asignado_a: ST-2.3
|
||||
|
||||
- id: GAP-P0-003
|
||||
nombre: Trading Agents sin UI
|
||||
modulo: OQI-003 Trading
|
||||
capa: Full Stack
|
||||
descripcion: "Backend bots.service.ts 60% completo. Frontend 0%: BotManager.tsx, BotCard, BotConfigWizard, BotMonitoringDashboard todos faltantes."
|
||||
esfuerzo_horas: 40
|
||||
story_points: 40
|
||||
dependencias:
|
||||
- ST-3.4
|
||||
bloquea: ["Feature vendida no disponible"]
|
||||
estado: PENDIENTE
|
||||
asignado_a: SUBTASK-003-OQI-003-TRADING
|
||||
|
||||
gaps_p1_criticos:
|
||||
- id: GAP-P1-001
|
||||
nombre: Market Data OHLCV Service
|
||||
modulo: OQI-003 Trading
|
||||
capa: Backend
|
||||
descripcion: "DDL market_data.ohlcv_5m/15m existe. NO hay marketData.service.ts ni market-data.controller.ts. Charts bloqueados."
|
||||
esfuerzo_horas: 16
|
||||
story_points: 16
|
||||
dependencias: []
|
||||
bloquea:
|
||||
- CHAIN-001
|
||||
- FE Charts históricos
|
||||
- ML Overlays
|
||||
estado: PENDIENTE
|
||||
asignado_a: ST-2.1
|
||||
critico: true
|
||||
|
||||
- id: GAP-P1-002
|
||||
nombre: Notifications sin API Completa
|
||||
modulo: Core
|
||||
capa: Backend
|
||||
descripcion: "DDL OK. Backend falta notification.service.ts completo, push.service.ts, notification.controller.ts"
|
||||
esfuerzo_horas: 20
|
||||
story_points: 18
|
||||
dependencias: []
|
||||
bloquea:
|
||||
- CHAIN-002
|
||||
- Push notifications
|
||||
- Trading alerts
|
||||
estado: PENDIENTE
|
||||
asignado_a: ST-2.2
|
||||
|
||||
- id: GAP-P1-003
|
||||
nombre: ML Chart Overlays sin UI
|
||||
modulo: OQI-006 ML
|
||||
capa: Frontend
|
||||
descripcion: "Backend ML models existen pero frontend no puede visualizar. Faltan MLPredictionOverlay.tsx, SignalMarkers.tsx, ICTConceptsOverlay.tsx"
|
||||
esfuerzo_horas: 24
|
||||
story_points: 21
|
||||
dependencias:
|
||||
- GAP-P1-001
|
||||
bloquea: ["OQI-006 ↔ OQI-003 integration"]
|
||||
estado: PENDIENTE
|
||||
asignado_a: SUBTASK-004-OQI-006-ML
|
||||
|
||||
- id: GAP-P1-004
|
||||
nombre: 2FA sin flujo completo
|
||||
modulo: OQI-001 Auth
|
||||
capa: Full Stack
|
||||
descripcion: "Backend twofa.service.ts existe pero faltan setup/verify endpoints. Frontend falta TwoFactorSetup.tsx, TwoFactorVerifyModal.tsx, BackupCodesDisplay.tsx"
|
||||
esfuerzo_horas: 16
|
||||
story_points: 13
|
||||
dependencias: []
|
||||
bloquea: ["Enhanced security"]
|
||||
estado: PENDIENTE
|
||||
asignado_a: ST-2.5
|
||||
|
||||
- id: GAP-P1-005
|
||||
nombre: education.instructors sin tabla
|
||||
modulo: OQI-002 Education
|
||||
capa: DDL
|
||||
descripcion: "Tabla para perfiles de instructores no existe. instructor.service.ts ya creado pero sin tabla."
|
||||
esfuerzo_horas: 4
|
||||
story_points: 3
|
||||
dependencias: []
|
||||
bloquea: ["instructor.service.ts"]
|
||||
estado: PENDIENTE
|
||||
asignado_a: ST-1.1
|
||||
|
||||
- id: GAP-P1-006
|
||||
nombre: course_tags sin campo
|
||||
modulo: OQI-002 Education
|
||||
capa: DDL
|
||||
descripcion: "Campo para filtrado de cursos por tags faltante. tag.service.ts existe."
|
||||
esfuerzo_horas: 2
|
||||
story_points: 2
|
||||
dependencias: []
|
||||
bloquea: ["Course filtering"]
|
||||
estado: PENDIENTE
|
||||
asignado_a: ST-1.2
|
||||
|
||||
gaps_p2_importantes:
|
||||
- id: GAP-P2-001
|
||||
nombre: Audit System Service
|
||||
modulo: Core
|
||||
capa: Backend
|
||||
esfuerzo_horas: 32
|
||||
story_points: 28
|
||||
estado: PENDIENTE
|
||||
asignado_a: ST-2.4
|
||||
|
||||
- id: GAP-P2-002
|
||||
nombre: Currency Exchange Service
|
||||
modulo: OQI-005 Payments
|
||||
capa: Backend
|
||||
esfuerzo_horas: 16
|
||||
story_points: 13
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: GAP-P2-003
|
||||
nombre: Risk Assessment Service
|
||||
modulo: OQI-004 Investment
|
||||
capa: Backend
|
||||
esfuerzo_horas: 12
|
||||
story_points: 10
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: GAP-P2-004
|
||||
nombre: Course Reviews Endpoints
|
||||
modulo: OQI-002 Education
|
||||
capa: Backend
|
||||
esfuerzo_horas: 6
|
||||
story_points: 5
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: GAP-P2-005
|
||||
nombre: OAuth Flows Incomplete
|
||||
modulo: OQI-001 Auth
|
||||
capa: Backend
|
||||
esfuerzo_horas: 12
|
||||
story_points: 10
|
||||
estado: PENDIENTE
|
||||
|
||||
cadenas_bloqueo:
|
||||
CHAIN-001:
|
||||
nombre: Market Data Pipeline
|
||||
estado: BLOQUEADO_COMPLETO
|
||||
secuencia:
|
||||
- paso: DDL market_data
|
||||
estado: OK
|
||||
- paso: Backend Service
|
||||
estado: MISSING
|
||||
gap: GAP-P1-001
|
||||
- paso: API REST
|
||||
estado: MISSING
|
||||
depende_de: Backend Service
|
||||
- paso: Frontend Charts
|
||||
estado: BLOCKED
|
||||
depende_de: API REST
|
||||
- paso: ML Overlays
|
||||
estado: BLOCKED
|
||||
depende_de: Frontend Charts
|
||||
|
||||
CHAIN-002:
|
||||
nombre: Notifications Pipeline
|
||||
estado: BLOQUEADO
|
||||
secuencia:
|
||||
- paso: DDL auth.notifications
|
||||
estado: OK
|
||||
- paso: Backend Service
|
||||
estado: PARTIAL
|
||||
gap: GAP-P1-002
|
||||
- paso: API REST
|
||||
estado: MISSING
|
||||
- paso: Frontend Consumer
|
||||
estado: PARTIAL
|
||||
|
||||
CHAIN-003:
|
||||
nombre: Trading Agents E2E
|
||||
estado: BLOQUEADO
|
||||
secuencia:
|
||||
- paso: DDL trading.bots
|
||||
estado: OK
|
||||
- paso: Backend Service
|
||||
estado: PARTIAL_60%
|
||||
- paso: API Endpoints
|
||||
estado: PARTIAL_40%
|
||||
gap: ST-3.4
|
||||
- paso: Frontend UI
|
||||
estado: MISSING_0%
|
||||
gap: GAP-P0-003
|
||||
|
||||
arquitectura:
|
||||
inconsistencias:
|
||||
- id: ARCH-001
|
||||
nombre: Direct Access to Python Services
|
||||
riesgo: ALTO
|
||||
descripcion: "Frontend bypasses Express.js para acceder a ML Engine y LLM Agent directamente"
|
||||
servicios_afectados:
|
||||
- mlService.ts
|
||||
- llmAgentService.ts
|
||||
- backtestService.ts
|
||||
solucion: Crear proxy endpoints en Express
|
||||
esfuerzo_horas: 16
|
||||
asignado_a: ST-5.1
|
||||
|
||||
- id: ARCH-002
|
||||
nombre: Inconsistent apiClient Usage
|
||||
riesgo: MEDIO
|
||||
descripcion: "5 servicios no usan apiClient centralizado"
|
||||
servicios_afectados:
|
||||
- portfolio.service.ts
|
||||
- adminService.ts
|
||||
- mlService.ts
|
||||
- llmAgentService.ts
|
||||
- backtestService.ts
|
||||
solucion: Refactorizar para usar apiClient
|
||||
esfuerzo_horas: 8
|
||||
asignado_a: ST-5.2
|
||||
|
||||
documentacion_obsoleta:
|
||||
a_purgar:
|
||||
- archivo: orchestration/tareas/TASK-2026-02-03-DDL-VALIDATION/
|
||||
razon: Supersedida por ANALISIS-DDL-MODELADO
|
||||
accion: MOVER_A_ARCHIVE
|
||||
|
||||
- archivo: docs/90-transversal/gaps/ANALISIS-GAPS-DOCUMENTACION.md
|
||||
razon: Marcado OUTDATED, rutas rotas
|
||||
accion: ELIMINAR
|
||||
|
||||
a_actualizar:
|
||||
- archivo: BACKEND_INVENTORY.yml
|
||||
gap: Conteo 57→79 endpoints
|
||||
|
||||
- archivo: FRONTEND_INVENTORY.yml
|
||||
gap: Conteo 90→146 componentes
|
||||
|
||||
- archivo: PROJECT-STATUS.md
|
||||
gap: Fecha 2026-01-30
|
||||
|
||||
metricas_objetivo:
|
||||
coherencia_global:
|
||||
actual: 81.25%
|
||||
objetivo: 95%
|
||||
ddl_backend:
|
||||
actual: 85%
|
||||
objetivo: 98%
|
||||
backend_frontend:
|
||||
actual: 77.5%
|
||||
objetivo: 92%
|
||||
test_coverage:
|
||||
actual: 15%
|
||||
objetivo: 40%
|
||||
@ -0,0 +1,476 @@
|
||||
delegacion_plan:
|
||||
version: 1.0.0
|
||||
fecha: "2026-02-04"
|
||||
tarea_principal: TASK-2026-02-04-ANALISIS-PLANIFICACION-INTEGRAL
|
||||
agente_orquestador: claude-opus-4-5
|
||||
perfil_orquestador: PERFIL-ORQUESTADOR
|
||||
|
||||
perfiles_requeridos:
|
||||
- id: PERFIL-ORQUESTADOR
|
||||
alias: "@PERFIL_ORQUESTADOR"
|
||||
uso: Coordinación general y delegación
|
||||
subtareas:
|
||||
- ST-0.1
|
||||
- ST-0.2
|
||||
- ST-0.3
|
||||
|
||||
- id: PERFIL-DATABASE-POSTGRESQL
|
||||
alias: "@PERFIL_DATABASE_POSTGRESQL"
|
||||
uso: Operaciones DDL y schemas
|
||||
subtareas:
|
||||
- ST-1.1
|
||||
- ST-1.2
|
||||
- ST-1.3
|
||||
- ST-1.4
|
||||
alternativa_compacta: PERFIL-DATABASE-COMPACT
|
||||
|
||||
- id: PERFIL-BACKEND-NESTJS
|
||||
alias: "@PERFIL_BACKEND_NESTJS"
|
||||
uso: Servicios y controllers Express.js/TypeScript
|
||||
subtareas:
|
||||
- ST-2.1
|
||||
- ST-2.2
|
||||
- ST-2.3
|
||||
- ST-2.4
|
||||
- ST-2.5
|
||||
- ST-3.1
|
||||
- ST-3.2
|
||||
- ST-3.3
|
||||
- ST-3.4
|
||||
- ST-3.5
|
||||
- ST-5.1
|
||||
- ST-5.2
|
||||
alternativa_compacta: PERFIL-BACKEND-COMPACT
|
||||
|
||||
- id: PERFIL-FRONTEND-REACT
|
||||
alias: "@PERFIL_FRONTEND_REACT"
|
||||
uso: Componentes React y páginas
|
||||
subtareas:
|
||||
- SUBTASK-001
|
||||
- SUBTASK-002
|
||||
- SUBTASK-003
|
||||
- SUBTASK-004
|
||||
- SUBTASK-005
|
||||
- SUBTASK-006
|
||||
- SUBTASK-007
|
||||
- SUBTASK-008
|
||||
- SUBTASK-009
|
||||
- SUBTASK-010
|
||||
alternativa_compacta: PERFIL-GENERIC-SUBAGENT
|
||||
|
||||
- id: PERFIL-ML-SPECIALIST
|
||||
alias: "@PERFIL_ML_SPEC"
|
||||
uso: Integración modelos ML y overlays
|
||||
subtareas:
|
||||
- SUBTASK-004 (parte ML)
|
||||
opcional: true
|
||||
|
||||
- id: PERFIL-TRADING-STRATEGIST
|
||||
alias: "@PERFIL_TRADING"
|
||||
uso: Validación lógica de trading agents
|
||||
subtareas:
|
||||
- SUBTASK-003 (parte agents)
|
||||
opcional: true
|
||||
|
||||
- id: PERFIL-QA-TESTER
|
||||
alias: "@PERFIL_QA"
|
||||
uso: Testing y validación
|
||||
subtareas:
|
||||
- ST-6.1
|
||||
- ST-6.2
|
||||
- ST-6.3
|
||||
- ST-6.4
|
||||
|
||||
- id: PERFIL-DOCUMENTACION
|
||||
alias: "@PERFIL_DOC"
|
||||
uso: Documentación técnica
|
||||
subtareas:
|
||||
- ST-7.1
|
||||
- ST-7.2
|
||||
- ST-7.3
|
||||
- SUBTASK-011
|
||||
|
||||
fases_ejecucion:
|
||||
FASE_0:
|
||||
nombre: Preparación
|
||||
duracion_horas: 8
|
||||
paralelismo: 3
|
||||
subtareas:
|
||||
- id: ST-0.1
|
||||
nombre: Purga documentación obsoleta
|
||||
perfil: PERFIL-ORQUESTADOR
|
||||
esfuerzo: 2h
|
||||
dependencias: []
|
||||
paralelo_con: [ST-0.2, ST-0.3]
|
||||
|
||||
- id: ST-0.2
|
||||
nombre: Sincronización inventarios
|
||||
perfil: PERFIL-ORQUESTADOR
|
||||
esfuerzo: 4h
|
||||
dependencias: []
|
||||
paralelo_con: [ST-0.1, ST-0.3]
|
||||
|
||||
- id: ST-0.3
|
||||
nombre: Actualización PROJECT-STATUS
|
||||
perfil: PERFIL-ORQUESTADOR
|
||||
esfuerzo: 2h
|
||||
dependencias: []
|
||||
paralelo_con: [ST-0.1, ST-0.2]
|
||||
|
||||
FASE_1:
|
||||
nombre: DDL Gaps
|
||||
duracion_horas: 16
|
||||
paralelismo: 3
|
||||
subtareas:
|
||||
- id: ST-1.1
|
||||
nombre: education.instructors table
|
||||
perfil: PERFIL-DATABASE-POSTGRESQL
|
||||
esfuerzo: 4h
|
||||
dependencias: [ST-0.2]
|
||||
paralelo_con: [ST-1.2, ST-1.3]
|
||||
ddl_script: |
|
||||
CREATE TABLE education.instructors (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id UUID NOT NULL REFERENCES auth.user_profiles(id),
|
||||
bio TEXT,
|
||||
specializations TEXT[],
|
||||
rating DECIMAL(3,2) DEFAULT 0,
|
||||
total_courses INTEGER DEFAULT 0,
|
||||
is_verified BOOLEAN DEFAULT false,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
- id: ST-1.2
|
||||
nombre: education.course_tags field
|
||||
perfil: PERFIL-DATABASE-POSTGRESQL
|
||||
esfuerzo: 2h
|
||||
dependencias: [ST-0.2]
|
||||
paralelo_con: [ST-1.1, ST-1.3]
|
||||
|
||||
- id: ST-1.3
|
||||
nombre: trading.price_alerts table
|
||||
perfil: PERFIL-DATABASE-POSTGRESQL
|
||||
esfuerzo: 4h
|
||||
dependencias: [ST-0.2]
|
||||
paralelo_con: [ST-1.1, ST-1.2]
|
||||
|
||||
- id: ST-1.4
|
||||
nombre: Validación DDL post-cambios
|
||||
perfil: PERFIL-DATABASE-POSTGRESQL
|
||||
esfuerzo: 2h
|
||||
dependencias: [ST-1.1, ST-1.2, ST-1.3]
|
||||
paralelo_con: []
|
||||
|
||||
FASE_2:
|
||||
nombre: Backend Services
|
||||
duracion_horas: 48
|
||||
paralelismo: 2
|
||||
subtareas:
|
||||
- id: ST-2.1
|
||||
nombre: Market Data OHLCV Service
|
||||
perfil: PERFIL-BACKEND-NESTJS
|
||||
esfuerzo: 16h
|
||||
dependencias: [ST-1.4]
|
||||
paralelo_con: []
|
||||
critico: true
|
||||
desbloquea: [CHAIN-001]
|
||||
|
||||
- id: ST-2.2
|
||||
nombre: Notifications Complete Service
|
||||
perfil: PERFIL-BACKEND-NESTJS
|
||||
esfuerzo: 12h
|
||||
dependencias: [ST-1.4]
|
||||
paralelo_con: [ST-2.3]
|
||||
|
||||
- id: ST-2.3
|
||||
nombre: User Profile Service
|
||||
perfil: PERFIL-BACKEND-NESTJS
|
||||
esfuerzo: 6h
|
||||
dependencias: []
|
||||
paralelo_con: [ST-2.2]
|
||||
|
||||
- id: ST-2.4
|
||||
nombre: Audit Service
|
||||
perfil: PERFIL-BACKEND-NESTJS
|
||||
esfuerzo: 8h
|
||||
dependencias: [ST-1.4]
|
||||
paralelo_con: [ST-2.5]
|
||||
|
||||
- id: ST-2.5
|
||||
nombre: 2FA Complete Flow
|
||||
perfil: PERFIL-BACKEND-NESTJS
|
||||
esfuerzo: 8h
|
||||
dependencias: []
|
||||
paralelo_con: [ST-2.4]
|
||||
|
||||
FASE_3:
|
||||
nombre: Backend API
|
||||
duracion_horas: 24
|
||||
paralelismo: 3
|
||||
subtareas:
|
||||
- id: ST-3.1
|
||||
nombre: Market Data Endpoints
|
||||
perfil: PERFIL-BACKEND-NESTJS
|
||||
esfuerzo: 4h
|
||||
dependencias: [ST-2.1]
|
||||
|
||||
- id: ST-3.2
|
||||
nombre: Notifications Endpoints
|
||||
perfil: PERFIL-BACKEND-NESTJS
|
||||
esfuerzo: 4h
|
||||
dependencias: [ST-2.2]
|
||||
|
||||
- id: ST-3.3
|
||||
nombre: User Profile Endpoints
|
||||
perfil: PERFIL-BACKEND-NESTJS
|
||||
esfuerzo: 4h
|
||||
dependencias: [ST-2.3]
|
||||
|
||||
- id: ST-3.4
|
||||
nombre: Trading Agents Endpoints
|
||||
perfil: PERFIL-BACKEND-NESTJS
|
||||
esfuerzo: 8h
|
||||
dependencias: []
|
||||
|
||||
- id: ST-3.5
|
||||
nombre: 2FA Setup Endpoints
|
||||
perfil: PERFIL-BACKEND-NESTJS
|
||||
esfuerzo: 4h
|
||||
dependencias: [ST-2.5]
|
||||
|
||||
FASE_4:
|
||||
nombre: Frontend Integration
|
||||
duracion_horas: 180
|
||||
paralelismo: 2-3
|
||||
sprints:
|
||||
- sprint: FE-1
|
||||
nombre: Fundamentos
|
||||
story_points: 17
|
||||
subtareas:
|
||||
- id: SUBTASK-001
|
||||
nombre: Routing y Huérfanos
|
||||
perfil: PERFIL-FRONTEND-REACT
|
||||
sp: 4
|
||||
dependencias: []
|
||||
|
||||
- id: SUBTASK-002
|
||||
nombre: OQI-001 Auth Completar
|
||||
perfil: PERFIL-FRONTEND-REACT
|
||||
sp: 13
|
||||
dependencias: [ST-2.5, ST-3.3]
|
||||
|
||||
- sprint: FE-2
|
||||
nombre: Trading Core
|
||||
story_points: 60
|
||||
subtareas:
|
||||
- id: SUBTASK-003
|
||||
nombre: OQI-003 Trading
|
||||
perfil: PERFIL-FRONTEND-REACT
|
||||
sp: 44
|
||||
dependencias: [ST-3.1, ST-3.4]
|
||||
incluye:
|
||||
- TP/SL en órdenes
|
||||
- Trading Agents UI
|
||||
- Price Alerts
|
||||
- Métricas
|
||||
|
||||
- id: SUBTASK-004
|
||||
nombre: OQI-006 ML
|
||||
perfil: PERFIL-FRONTEND-REACT
|
||||
sp: 16
|
||||
dependencias: [ST-3.1]
|
||||
incluye:
|
||||
- ML Prediction Overlay
|
||||
- Signal Markers
|
||||
- ICT Concepts Overlay
|
||||
|
||||
- sprint: FE-3
|
||||
nombre: Investment
|
||||
story_points: 81
|
||||
subtareas:
|
||||
- id: SUBTASK-005
|
||||
nombre: OQI-004 Investment
|
||||
perfil: PERFIL-FRONTEND-REACT
|
||||
sp: 68
|
||||
dependencias: []
|
||||
|
||||
- id: SUBTASK-006
|
||||
nombre: OQI-005 Payments
|
||||
perfil: PERFIL-FRONTEND-REACT
|
||||
sp: 13
|
||||
dependencias: []
|
||||
|
||||
- sprint: FE-4
|
||||
nombre: Advanced Features
|
||||
story_points: 128
|
||||
subtareas:
|
||||
- id: SUBTASK-007
|
||||
nombre: OQI-002 Education
|
||||
perfil: PERFIL-FRONTEND-REACT
|
||||
sp: 21
|
||||
dependencias: [ST-1.1, ST-1.2]
|
||||
|
||||
- id: SUBTASK-008
|
||||
nombre: OQI-007 LLM
|
||||
perfil: PERFIL-FRONTEND-REACT
|
||||
sp: 44
|
||||
dependencias: []
|
||||
|
||||
- id: SUBTASK-009
|
||||
nombre: OQI-008 Portfolio
|
||||
perfil: PERFIL-FRONTEND-REACT
|
||||
sp: 63
|
||||
dependencias: []
|
||||
|
||||
- sprint: FE-5
|
||||
nombre: Growth
|
||||
story_points: 55
|
||||
subtareas:
|
||||
- id: SUBTASK-010
|
||||
nombre: OQI-009 Marketplace
|
||||
perfil: PERFIL-FRONTEND-REACT
|
||||
sp: 42
|
||||
dependencias: []
|
||||
|
||||
- id: SUBTASK-011
|
||||
nombre: Migración Docs
|
||||
perfil: PERFIL-DOCUMENTACION
|
||||
sp: 8
|
||||
dependencias: []
|
||||
|
||||
- id: SUBTASK-012
|
||||
nombre: Inventarios Sync
|
||||
perfil: PERFIL-ORQUESTADOR
|
||||
sp: 5
|
||||
dependencias: []
|
||||
|
||||
FASE_5:
|
||||
nombre: Architecture Refactor
|
||||
duracion_horas: 24
|
||||
paralelismo: 1
|
||||
subtareas:
|
||||
- id: ST-5.1
|
||||
nombre: Proxy Python Services (ARCH-001)
|
||||
perfil: PERFIL-BACKEND-NESTJS
|
||||
esfuerzo: 16h
|
||||
dependencias: [FASE_4]
|
||||
descripcion: |
|
||||
Crear proxy endpoints en Express.js para:
|
||||
- /api/proxy/ml/* → ML Engine (3083)
|
||||
- /api/proxy/llm/* → LLM Agent (3085)
|
||||
Beneficios: Auth centralizada, CORS consistente, logs unificados
|
||||
|
||||
- id: ST-5.2
|
||||
nombre: Standardize apiClient (ARCH-002)
|
||||
perfil: PERFIL-BACKEND-NESTJS
|
||||
esfuerzo: 8h
|
||||
dependencias: [ST-5.1]
|
||||
descripcion: |
|
||||
Refactorizar 5 servicios para usar apiClient:
|
||||
- portfolio.service.ts
|
||||
- adminService.ts
|
||||
- mlService.ts
|
||||
- llmAgentService.ts
|
||||
- backtestService.ts
|
||||
|
||||
FASE_6:
|
||||
nombre: Testing
|
||||
duracion_horas: 40
|
||||
paralelismo: 2
|
||||
subtareas:
|
||||
- id: ST-6.1
|
||||
nombre: Unit Tests Backend
|
||||
perfil: PERFIL-QA-TESTER
|
||||
esfuerzo: 12h
|
||||
dependencias: [FASE_3]
|
||||
|
||||
- id: ST-6.2
|
||||
nombre: Unit Tests Frontend
|
||||
perfil: PERFIL-QA-TESTER
|
||||
esfuerzo: 12h
|
||||
dependencias: [FASE_4]
|
||||
|
||||
- id: ST-6.3
|
||||
nombre: Integration Tests
|
||||
perfil: PERFIL-QA-TESTER
|
||||
esfuerzo: 8h
|
||||
dependencias: [ST-6.1, ST-6.2]
|
||||
|
||||
- id: ST-6.4
|
||||
nombre: E2E Tests
|
||||
perfil: PERFIL-QA-TESTER
|
||||
esfuerzo: 8h
|
||||
dependencias: [ST-6.3]
|
||||
|
||||
FASE_7:
|
||||
nombre: Documentación
|
||||
duracion_horas: 16
|
||||
paralelismo: 3
|
||||
subtareas:
|
||||
- id: ST-7.1
|
||||
nombre: Guías desarrollo
|
||||
perfil: PERFIL-DOCUMENTACION
|
||||
esfuerzo: 8h
|
||||
dependencias: []
|
||||
entregables:
|
||||
- 95-guias-desarrollo/backend/GUIA-BACKEND.md
|
||||
- 95-guias-desarrollo/frontend/GUIA-FRONTEND.md
|
||||
|
||||
- id: ST-7.2
|
||||
nombre: API Documentation
|
||||
perfil: PERFIL-DOCUMENTACION
|
||||
esfuerzo: 4h
|
||||
dependencias: [FASE_3]
|
||||
|
||||
- id: ST-7.3
|
||||
nombre: Actualización inventarios final
|
||||
perfil: PERFIL-ORQUESTADOR
|
||||
esfuerzo: 4h
|
||||
dependencias: [FASE_6]
|
||||
|
||||
herencia_contexto:
|
||||
template: |
|
||||
[HERENCIA-CTX]
|
||||
proyecto: trading-platform
|
||||
tarea_padre: TASK-2026-02-04-ANALISIS-PLANIFICACION-INTEGRAL
|
||||
|
||||
variables_resueltas:
|
||||
DB_NAME: "trading_platform"
|
||||
DB_USER: "trading_user"
|
||||
DB_PASS: "trading_dev_2026"
|
||||
BACKEND_ROOT: "apps/backend/src"
|
||||
FRONTEND_ROOT: "apps/frontend/src"
|
||||
DDL_ROOT: "apps/database"
|
||||
|
||||
estado_actual:
|
||||
coherencia_global: 81.25%
|
||||
gaps_p0: 3
|
||||
gaps_p1: 6
|
||||
|
||||
subtarea_especifica: "{subtarea_id}"
|
||||
archivos_involucrados: ["{archivos}"]
|
||||
criterios_aceptacion: ["{criterios}"]
|
||||
|
||||
simco_a_seguir:
|
||||
- "@PRINCIPIO-CAPVED"
|
||||
- "@SIMCO-EDICION-SEGURA"
|
||||
- "{simco_especifico}"
|
||||
|
||||
metricas_subagentes:
|
||||
max_tokens_por_subtarea: 50000
|
||||
max_archivos_modificados: 5
|
||||
max_lineas_por_archivo: 500
|
||||
timeout_minutos: 30
|
||||
|
||||
validaciones:
|
||||
pre_delegacion:
|
||||
- Verificar anti-duplicación
|
||||
- Verificar dependencias satisfechas
|
||||
- Cargar perfil correcto
|
||||
- Incluir herencia de contexto
|
||||
|
||||
post_ejecucion:
|
||||
- npm run build (backend)
|
||||
- npm run lint (backend/frontend)
|
||||
- Verificar sin placeholders
|
||||
- Actualizar inventario correspondiente
|
||||
@ -0,0 +1,192 @@
|
||||
perfiles_subagentes:
|
||||
version: 1.0.0
|
||||
fecha: "2026-02-04"
|
||||
proyecto: trading-platform
|
||||
|
||||
asignaciones:
|
||||
fase_0_preparacion:
|
||||
perfil_principal: PERFIL-ORQUESTADOR
|
||||
responsabilidades:
|
||||
- Purga de documentación
|
||||
- Sincronización de inventarios
|
||||
- Actualización de status
|
||||
tokens_estimados: 30000
|
||||
subtareas: [ST-0.1, ST-0.2, ST-0.3]
|
||||
|
||||
fase_1_ddl:
|
||||
perfil_principal: PERFIL-DATABASE-POSTGRESQL
|
||||
perfil_compact: PERFIL-DATABASE-COMPACT
|
||||
responsabilidades:
|
||||
- Crear tablas DDL
|
||||
- Definir enums
|
||||
- Crear índices
|
||||
- Validar FK
|
||||
tokens_estimados: 40000
|
||||
subtareas: [ST-1.1, ST-1.2, ST-1.3, ST-1.4]
|
||||
comandos_wsl:
|
||||
recreate_db: |
|
||||
wsl -d Ubuntu-24.04 -u developer -- bash '/mnt/c/Empresas/ISEM/workspace-v2/scripts/database/unified-recreate-db.sh' trading-platform --drop
|
||||
validate_ddl: |
|
||||
wsl -d Ubuntu-24.04 -u developer -- psql -U trading_user -d trading_platform -c "\dt education.*"
|
||||
|
||||
fase_2_backend_services:
|
||||
perfil_principal: PERFIL-BACKEND-NESTJS
|
||||
perfil_compact: PERFIL-BACKEND-COMPACT
|
||||
responsabilidades:
|
||||
- Crear services TypeScript
|
||||
- Implementar lógica de negocio
|
||||
- Integrar con DB
|
||||
- Cache Redis
|
||||
tokens_estimados: 80000
|
||||
subtareas: [ST-2.1, ST-2.2, ST-2.3, ST-2.4, ST-2.5]
|
||||
estructura_modulo: |
|
||||
modules/{module-name}/
|
||||
├── {module-name}.module.ts
|
||||
├── {module-name}.controller.ts
|
||||
├── {module-name}.service.ts
|
||||
├── interfaces/
|
||||
├── dto/
|
||||
└── index.ts
|
||||
|
||||
fase_3_backend_api:
|
||||
perfil_principal: PERFIL-BACKEND-NESTJS
|
||||
responsabilidades:
|
||||
- Crear controllers
|
||||
- Definir endpoints
|
||||
- Implementar guards
|
||||
- Documentar Swagger
|
||||
tokens_estimados: 50000
|
||||
subtareas: [ST-3.1, ST-3.2, ST-3.3, ST-3.4, ST-3.5]
|
||||
|
||||
fase_4_frontend:
|
||||
perfil_principal: PERFIL-FRONTEND-REACT
|
||||
perfil_compact: PERFIL-GENERIC-SUBAGENT
|
||||
perfiles_especializados:
|
||||
- PERFIL-ML-SPECIALIST (para SUBTASK-004)
|
||||
- PERFIL-TRADING-STRATEGIST (para SUBTASK-003)
|
||||
responsabilidades:
|
||||
- Crear componentes React
|
||||
- Implementar páginas
|
||||
- Conectar con API
|
||||
- State management
|
||||
tokens_estimados: 150000
|
||||
subtareas:
|
||||
- SUBTASK-001 a SUBTASK-012
|
||||
estructura_componente: |
|
||||
components/{ComponentName}/
|
||||
├── {ComponentName}.tsx
|
||||
├── {ComponentName}.styles.ts (o .css)
|
||||
├── {ComponentName}.test.tsx
|
||||
└── index.ts
|
||||
|
||||
fase_5_architecture:
|
||||
perfil_principal: PERFIL-BACKEND-NESTJS
|
||||
responsabilidades:
|
||||
- Refactorizar proxy
|
||||
- Unificar apiClient
|
||||
- Resolver ARCH-001/002
|
||||
tokens_estimados: 40000
|
||||
subtareas: [ST-5.1, ST-5.2]
|
||||
|
||||
fase_6_testing:
|
||||
perfil_principal: PERFIL-QA-TESTER
|
||||
perfil_backup: PERFIL-BACKEND-NESTJS
|
||||
responsabilidades:
|
||||
- Unit tests
|
||||
- Integration tests
|
||||
- E2E tests
|
||||
- Coverage reports
|
||||
tokens_estimados: 60000
|
||||
subtareas: [ST-6.1, ST-6.2, ST-6.3, ST-6.4]
|
||||
|
||||
fase_7_documentacion:
|
||||
perfil_principal: PERFIL-DOCUMENTACION
|
||||
perfil_backup: PERFIL-ORQUESTADOR
|
||||
responsabilidades:
|
||||
- Guías de desarrollo
|
||||
- API docs
|
||||
- Inventarios finales
|
||||
tokens_estimados: 30000
|
||||
subtareas: [ST-7.1, ST-7.2, ST-7.3]
|
||||
|
||||
mapeo_rapido:
|
||||
crear_tabla_ddl: PERFIL-DATABASE-POSTGRESQL
|
||||
crear_service_ts: PERFIL-BACKEND-NESTJS
|
||||
crear_controller_ts: PERFIL-BACKEND-NESTJS
|
||||
crear_componente_react: PERFIL-FRONTEND-REACT
|
||||
crear_pagina_react: PERFIL-FRONTEND-REACT
|
||||
crear_test: PERFIL-QA-TESTER
|
||||
crear_documentacion: PERFIL-DOCUMENTACION
|
||||
sincronizar_inventario: PERFIL-ORQUESTADOR
|
||||
validar_coherencia: PERFIL-ORQUESTADOR
|
||||
|
||||
reglas_delegacion:
|
||||
- Usar perfil compact cuando subtarea es < 50 líneas
|
||||
- Paralelizar cuando no hay dependencias
|
||||
- Validar build después de cada subtarea backend
|
||||
- Validar lint después de cada subtarea frontend
|
||||
- Incluir herencia de contexto siempre
|
||||
- Máximo 5 archivos por subtarea
|
||||
- Máximo 500 líneas por archivo
|
||||
|
||||
coordinacion_paralela:
|
||||
fase_0:
|
||||
max_parallel: 3
|
||||
subtareas_paralelas: [ST-0.1, ST-0.2, ST-0.3]
|
||||
|
||||
fase_1:
|
||||
max_parallel: 3
|
||||
subtareas_paralelas: [ST-1.1, ST-1.2, ST-1.3]
|
||||
secuencial_final: ST-1.4
|
||||
|
||||
fase_2:
|
||||
max_parallel: 2
|
||||
grupos:
|
||||
- [ST-2.1] # Crítico, secuencial
|
||||
- [ST-2.2, ST-2.3] # Paralelo
|
||||
- [ST-2.4, ST-2.5] # Paralelo
|
||||
|
||||
fase_3:
|
||||
max_parallel: 3
|
||||
subtareas_paralelas: [ST-3.1, ST-3.2, ST-3.3, ST-3.4, ST-3.5]
|
||||
|
||||
fase_4:
|
||||
max_parallel: 2
|
||||
por_sprint: true
|
||||
sprints:
|
||||
FE-1: [SUBTASK-001, SUBTASK-002]
|
||||
FE-2: [SUBTASK-003, SUBTASK-004]
|
||||
FE-3: [SUBTASK-005, SUBTASK-006]
|
||||
FE-4: [SUBTASK-007, SUBTASK-008, SUBTASK-009]
|
||||
FE-5: [SUBTASK-010, SUBTASK-011, SUBTASK-012]
|
||||
|
||||
fase_5:
|
||||
max_parallel: 1
|
||||
secuencial: true
|
||||
|
||||
fase_6:
|
||||
max_parallel: 2
|
||||
grupos:
|
||||
- [ST-6.1, ST-6.2]
|
||||
- [ST-6.3]
|
||||
- [ST-6.4]
|
||||
|
||||
fase_7:
|
||||
max_parallel: 3
|
||||
subtareas_paralelas: [ST-7.1, ST-7.2, ST-7.3]
|
||||
|
||||
economia_tokens:
|
||||
total_estimado: 480000
|
||||
por_fase:
|
||||
FASE_0: 30000
|
||||
FASE_1: 40000
|
||||
FASE_2: 80000
|
||||
FASE_3: 50000
|
||||
FASE_4: 150000
|
||||
FASE_5: 40000
|
||||
FASE_6: 60000
|
||||
FASE_7: 30000
|
||||
optimizaciones:
|
||||
- Usar perfiles compact (ahorro 50%)
|
||||
- Reutilizar contexto entre subtareas
|
||||
- No re-leer archivos ya analizados
|
||||
@ -0,0 +1,203 @@
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# METADATA.yml - TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
id: TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD
|
||||
titulo: "Analisis y Validacion Integral del Modelado de Base de Datos"
|
||||
tipo: ANALYSIS
|
||||
modo: "@ANALYSIS"
|
||||
metodologia: CAPVED
|
||||
fecha_creacion: "2026-02-05"
|
||||
estado: COMPLETADA
|
||||
fase_actual: "Todas las fases completadas (6/6)"
|
||||
prioridad: CRITICA
|
||||
|
||||
proyecto:
|
||||
nombre: trading-platform
|
||||
tipo: STANDALONE
|
||||
ubicacion: "projects/trading-platform"
|
||||
|
||||
perfil_agente:
|
||||
rol: "Especialista en Base de Datos y Modelado de Datos"
|
||||
competencias:
|
||||
- "Analisis y diseno de esquemas relacionales"
|
||||
- "Normalizacion y desnormalizacion"
|
||||
- "Validacion de integridad referencial"
|
||||
- "Optimizacion de indices y constraints"
|
||||
- "Coherencia DDL-Backend-Frontend"
|
||||
- "Auditoria de modelos de datos"
|
||||
|
||||
alcance:
|
||||
descripcion: |
|
||||
Analisis exhaustivo del modelado de base de datos del proyecto trading-platform.
|
||||
Validacion de completitud, coherencia, consistencia y preparacion para integracion
|
||||
backend. Identificacion de gaps, conflictos, duplicidades y oportunidades de mejora.
|
||||
incluye:
|
||||
- "Validacion de 100 tablas DDL vs documentacion"
|
||||
- "Auditoria de integridad referencial (FKs, constraints)"
|
||||
- "Deteccion de conflictos y duplicidades en objetos"
|
||||
- "Validacion de enums, tipos, funciones, triggers"
|
||||
- "Coherencia DDL-Backend (entities, services, controllers)"
|
||||
- "Completitud de procesos y requerimientos"
|
||||
- "Purga de documentacion obsoleta"
|
||||
- "Integracion de definiciones faltantes"
|
||||
- "Plan de ejecucion por fases con dependencias"
|
||||
excluye:
|
||||
- "Implementacion de codigo (solo analisis)"
|
||||
- "Modificacion directa de DDL (solo recomendaciones)"
|
||||
- "Desarrollo frontend"
|
||||
|
||||
fases:
|
||||
- id: "FASE-1"
|
||||
nombre: "Analisis y Planificacion"
|
||||
estado: COMPLETADA
|
||||
descripcion: "Exploracion exhaustiva, identificacion de gaps, creacion del plan maestro"
|
||||
|
||||
- id: "FASE-2"
|
||||
nombre: "Validacion de Esquemas y Objetos DDL"
|
||||
estado: COMPLETADA
|
||||
descripcion: "Validacion tabla por tabla de cada schema"
|
||||
|
||||
- id: "FASE-3"
|
||||
nombre: "Auditoria de Integridad y Coherencia"
|
||||
estado: COMPLETADA
|
||||
descripcion: "FKs, constraints, indices, funciones, triggers - FASE3-INTEGRIDAD-AUDITORIA.yml generado"
|
||||
|
||||
- id: "FASE-4"
|
||||
nombre: "Analisis de Coherencia DDL-Backend"
|
||||
estado: COMPLETADA
|
||||
descripcion: "Mapeo completo: 85/101 type interfaces, 76/101 services, 62/101 controllers. Backend usa raw SQL (NO TypeORM)"
|
||||
|
||||
- id: "FASE-5"
|
||||
nombre: "Purga y Reorganizacion Documental"
|
||||
estado: COMPLETADA
|
||||
descripcion: "Catalogo de purga generado (PURGA-DOCUMENTAL.yml, 201 archivos analizados)"
|
||||
|
||||
- id: "FASE-6"
|
||||
nombre: "Plan Maestro de Ejecucion"
|
||||
estado: COMPLETADA
|
||||
descripcion: "PLAN-MAESTRO-REMEDIACION.yml (4 sprints, 204h) + REMEDIATION-CHECKLIST.md"
|
||||
|
||||
metricas_baseline:
|
||||
total_schemas: 11
|
||||
total_tablas_ddl: 101
|
||||
total_tablas_inventario: 81
|
||||
tablas_no_documentadas: 19
|
||||
coherencia_ddl_inventario: "70%"
|
||||
coherencia_ddl_backend: "85%"
|
||||
coherencia_global: "81.25%"
|
||||
gaps_p0: 3
|
||||
gaps_p1: 6
|
||||
gaps_p2: 10
|
||||
conflictos_enum: 3
|
||||
fk_errors: 1
|
||||
|
||||
metricas_actual:
|
||||
total_schemas: 11
|
||||
total_tablas_ddl: 101
|
||||
total_tablas_inventario: 101
|
||||
tablas_no_documentadas: 0
|
||||
coherencia_ddl_inventario: "100%"
|
||||
# CORREGIDO: Backend usa raw SQL + TS interfaces, NO TypeORM
|
||||
backend_architecture: "Express.js + pg Pool (raw SQL) + TypeScript interfaces"
|
||||
coherencia_ddl_backend_type_interfaces: "84% (85/101)"
|
||||
coherencia_ddl_backend_services: "75% (76/101)"
|
||||
coherencia_ddl_backend_controllers: "61% (62/101)"
|
||||
coherencia_global: "73%" # promedio ponderado type+service+controller
|
||||
# Integridad DDL (Fase 3)
|
||||
fks_validados: 80
|
||||
fks_faltantes: 15
|
||||
check_constraints: 89
|
||||
unique_constraints: 32
|
||||
funciones: 36
|
||||
triggers: 46
|
||||
integrity_issues: 17 # 2 CRITICAL, 5 HIGH, 6 MEDIUM, 4 LOW
|
||||
# Gaps
|
||||
gaps_total: 37
|
||||
gaps_resueltos: 3 # P0-001, P2-002, P2-003
|
||||
gaps_pendientes: 34
|
||||
fk_errors: 0
|
||||
conflictos_enum: 3
|
||||
missing_type_interfaces: 16
|
||||
missing_services: 25
|
||||
missing_controllers: 39
|
||||
|
||||
metricas_target:
|
||||
coherencia_ddl_inventario: "100%"
|
||||
coherencia_ddl_backend: "95%"
|
||||
coherencia_global: "95%"
|
||||
gaps_p0: 0
|
||||
fk_errors: 0
|
||||
conflictos_enum: 0
|
||||
|
||||
entregables:
|
||||
# Fase 1-2
|
||||
- "analisis/ANALISIS-MAESTRO.md - Documento principal de analisis"
|
||||
- "analisis/PLAN-FASES-DETALLADO.yml - Plan 6 fases, 24 subtareas, 68 atomicas CAPVED"
|
||||
- "analisis/GAPS-CONSOLIDADO.yml - 37 gaps catalogados (3 resueltos)"
|
||||
- "entregables/REPORTE-CONSOLIDADO-FASE2.md - Reporte consolidado con metricas"
|
||||
- "entregables/RECOMENDACIONES-MODELADO.md - 9 recomendaciones tecnicas priorizadas"
|
||||
# Fase 3
|
||||
- "entregables/FASE3-INTEGRIDAD-AUDITORIA.yml - Auditoria FK/constraints/functions/triggers"
|
||||
# Fase 4
|
||||
- "entregables/FASE4-DDL-BACKEND-MATRIX.yml - Mapeo completo DDL-Backend"
|
||||
- "entregables/ENTITIES-CREATION-PLAN.yml - Plan creacion 31 entities faltantes"
|
||||
# Fase 5
|
||||
- "entregables/PURGA-DOCUMENTAL.yml - Catalogo de purga (201 archivos analizados)"
|
||||
# Fase 6
|
||||
- "entregables/PLAN-MAESTRO-REMEDIACION.yml - Plan 4 sprints, 204h esfuerzo"
|
||||
- "entregables/REMEDIATION-CHECKLIST.md - Checklist ejecutable por sprint"
|
||||
# Subagentes
|
||||
- "subagentes/SA-01-EDUCATION-VALIDATION-SUMMARY.md"
|
||||
- "subagentes/SA-05-ENUM-VALIDATION-REPORT.md"
|
||||
|
||||
inventarios_actualizados:
|
||||
- "orchestration/inventarios/DATABASE_INVENTORY.yml v2.0.0 (81->100 tablas)"
|
||||
- "orchestration/analisis/coherencia/DDL-COMPLETE-MATRIX.yml v2.0.0 (93->100 tablas)"
|
||||
- "orchestration/analisis/coherencia/GAPS-TRACKING.yml v2.0.0 (24->37 gaps)"
|
||||
- "orchestration/tareas/_INDEX.yml v1.5.0 (tarea registrada)"
|
||||
|
||||
ddl_corregido:
|
||||
- "apps/database/ddl/schemas/trading/tables/11-price_alerts.sql (FK auth.users)"
|
||||
|
||||
referencias:
|
||||
- "orchestration/analisis/coherencia/COHERENCE-MASTER-REPORT.md"
|
||||
- "orchestration/inventarios/DATABASE_INVENTORY.yml"
|
||||
- "orchestration/ROADMAP-2026-Q1.yml"
|
||||
- "apps/database/ddl/ (100 archivos SQL)"
|
||||
- "docs/02-definicion-modulos/ (9 OQI modules)"
|
||||
|
||||
historial:
|
||||
- fecha: "2026-02-05"
|
||||
accion: "Creacion de tarea - Fase 1 iniciada"
|
||||
agente: "Claude Code (Opus 4.6)"
|
||||
- fecha: "2026-02-05"
|
||||
accion: |
|
||||
Fase 1 completada. Entregables: ANALISIS-MAESTRO.md, PLAN-FASES-DETALLADO.yml, GAPS-CONSOLIDADO.yml.
|
||||
P0-001 resuelto (FK price_alerts). DATABASE_INVENTORY.yml actualizado a v2.0.0 (100 tablas).
|
||||
7 subagentes ejecutados: validacion DDL (4), enums (1), purga (1), backend mapping (1).
|
||||
Resultados: 68% cobertura entities, 52% services, 45% controllers.
|
||||
Fase 2 y 5 iniciadas en segunda sesion.
|
||||
agente: "Claude Code (Opus 4.6)"
|
||||
- fecha: "2026-02-05"
|
||||
accion: |
|
||||
Fase 3 completada. Entregable: FASE3-INTEGRIDAD-AUDITORIA.yml (2603 lineas).
|
||||
Auditoria completa: 80 FKs validados, 15 FKs faltantes identificados, 89 CHECK constraints,
|
||||
32 UNIQUE constraints, 36 funciones inventariadas, 46 triggers inventariados.
|
||||
Inter-schema: topologia estrella limpia con auth como hub, 0 dependencias circulares.
|
||||
Issues encontrados: 2 CRITICAL, 5 HIGH, 6 MEDIUM, 4 LOW (17 total).
|
||||
CRIT-001: trigger create_user_trading_defaults comentado.
|
||||
CRIT-002: CHECK constraints faltantes en orders/positions/bots.
|
||||
agente: "Claude Code (Opus 4.6)"
|
||||
- fecha: "2026-02-05"
|
||||
accion: |
|
||||
Fases 4 y 6 completadas. TAREA FINALIZADA (6/6 fases).
|
||||
Fase 4: FASE4-DDL-BACKEND-MATRIX.yml + ENTITIES-CREATION-PLAN.yml generados.
|
||||
HALLAZGO CRITICO: Backend usa raw SQL con pg Pool, NO TypeORM. Metricas corregidas:
|
||||
- Type interfaces: 85/101 (84%), Services: 76/101 (75%), Controllers: 62/101 (61%)
|
||||
- Coherencia global real: 73% (no 54% ni 81.25% previos)
|
||||
- 16 interfaces faltantes, 25 services faltantes, 39 controllers faltantes
|
||||
Fase 6: PLAN-MAESTRO-REMEDIACION.yml (4 sprints, 204h) + REMEDIATION-CHECKLIST.md
|
||||
Total entregables: 13 documentos (5 analisis, 8 entregables)
|
||||
Total subagentes ejecutados: 9+ (DDL validation x4, enums x1, purga x1, backend x1, FK audit x1, backend mapping x1)
|
||||
agente: "Claude Code (Opus 4.6)"
|
||||
@ -0,0 +1,779 @@
|
||||
# ANALISIS MAESTRO - Validacion Integral del Modelado de Base de Datos
|
||||
# Trading Platform - TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD
|
||||
|
||||
**Fecha:** 2026-02-05
|
||||
**Perfil:** Especialista en Base de Datos y Modelado de Datos
|
||||
**Modo:** @ANALYSIS (CAPVED: C+A+P sin ejecutar)
|
||||
**Estado:** FASE-1 COMPLETADA
|
||||
|
||||
---
|
||||
|
||||
## 1. CONTEXTO (C)
|
||||
|
||||
### 1.1 Situacion Actual
|
||||
|
||||
El proyecto trading-platform es una plataforma de trading e inversiones con arquitectura hibrida TypeScript/Python. Cuenta con:
|
||||
|
||||
- **11 schemas** PostgreSQL 16+
|
||||
- **100 tablas** DDL definidas (vs 81 documentadas en inventario)
|
||||
- **50+ enums** personalizados
|
||||
- **17+ funciones** stored procedures
|
||||
- **39+ triggers** automaticos
|
||||
- **9 modulos** epicos (OQI-001 a OQI-009)
|
||||
- **Coherencia global actual:** 81.25%
|
||||
|
||||
### 1.2 Problema Identificado
|
||||
|
||||
El modelado de datos presenta discrepancias significativas entre:
|
||||
1. **DDL real** (100 tablas) vs **inventario documentado** (81 tablas) = 19 tablas sin documentar
|
||||
2. **Conflictos de enums** duplicados entre schemas (3 conflictos activos)
|
||||
3. **1 error critico** de FK en price_alerts (referencia incorrecta)
|
||||
4. **Acoplamiento debil** entre schemas criticos (wallets <-> investment, bots <-> wallets)
|
||||
5. **Duplicacion funcional** en catalogo de simbolos (trading.symbols vs market_data.tickers)
|
||||
6. **Documentacion desactualizada** con tareas completadas mezcladas con pendientes
|
||||
|
||||
### 1.3 Objetivo
|
||||
|
||||
Lograr un modelado de datos validado al 100%, coherente con la documentacion, sin conflictos ni duplicidades, preparado para integracion backend, con un plan de ejecucion detallado por fases.
|
||||
|
||||
---
|
||||
|
||||
## 2. ANALISIS (A)
|
||||
|
||||
### 2.1 Inventario de Hallazgos Criticos
|
||||
|
||||
#### 2.1.1 ERROR CRITICO: FK Incorrecta en price_alerts
|
||||
|
||||
| Atributo | Valor |
|
||||
|----------|-------|
|
||||
| **Archivo** | `apps/database/ddl/schemas/trading/tables/11-price_alerts.sql` |
|
||||
| **Linea** | 15 |
|
||||
| **Error** | `REFERENCES auth.user_profiles(id)` |
|
||||
| **Correcto** | `REFERENCES auth.users(id)` |
|
||||
| **Impacto** | Tabla NO se puede crear - BLOQUEANTE |
|
||||
| **Prioridad** | P0 - INMEDIATO |
|
||||
|
||||
#### 2.1.2 Tablas No Documentadas (19 tablas)
|
||||
|
||||
| # | Schema | Tabla | Archivo DDL | Impacto |
|
||||
|---|--------|-------|-------------|---------|
|
||||
| 1 | education | instructors | 17-instructors.sql | Backend tiene servicio sin tabla doc |
|
||||
| 2 | education | course_tags | 18-course_tags.sql | Funcionalidad de tags no integrada |
|
||||
| 3 | education | course_tag_assignments | 19-course_tag_assignments.sql | M:N tags-cursos sin doc |
|
||||
| 4 | education | review_helpful_votes | 16-review_helpful_votes.sql | Votos de reviews sin doc |
|
||||
| 5 | education | user_activity_log | 13-user_activity_log.sql | Tracking gamificacion sin doc |
|
||||
| 6 | education | user_gamification_profile | 12-user_gamification_profile.sql | Perfil XP sin doc en inventario |
|
||||
| 7 | education | course_reviews | 14-course_reviews.sql | Reviews de cursos sin doc |
|
||||
| 8 | trading | drawing_tools | 12-drawing_tools.sql | Herramientas dibujo chart |
|
||||
| 9 | trading | drawing_templates | 13-drawing_templates.sql | Templates de dibujo |
|
||||
| 10 | financial | refunds | 11-refunds.sql | Reembolsos sin doc |
|
||||
| 11 | financial | currency_exchange_rates | 07-currency_exchange_rates.sql | Tipos de cambio sin doc |
|
||||
| 12 | investment | agent_executions | 10-agent_executions.sql | Ejecuciones agentes sin doc |
|
||||
| 13 | investment | risk_questionnaire | 02-risk_questionnaire.sql | Cuestionario riesgo sin doc inv |
|
||||
| 14 | ml | llm_signals | 11-llm_signals.sql | Senales LLM sin doc |
|
||||
| 15 | ml | prediction_overlays | 12-prediction_overlays.sql | Overlays prediccion sin doc |
|
||||
| 16 | feature_flags | flags | 01-flags.sql | Schema completo sin doc |
|
||||
| 17 | auth | notifications | 11-notifications.sql | Notificaciones sin doc inv |
|
||||
| 18 | auth | user_push_tokens | 12-user_push_tokens.sql | Push tokens sin doc inv |
|
||||
| 19 | portfolio | portfolio_snapshots | 05-portfolio_snapshots.sql | Snapshots sin doc inv |
|
||||
|
||||
#### 2.1.3 Conflictos de Enums (3 activos)
|
||||
|
||||
| ID | Enum | Schemas | Estado | Accion |
|
||||
|----|------|---------|--------|--------|
|
||||
| CONF-E1 | `transaction_type` | financial, investment | Migracion pendiente | Renombrar a wallet_transaction_type / investment_transaction_type |
|
||||
| CONF-E2 | `risk_profile` | investment, portfolio | NO marcado para migracion | Consolidar en public.risk_profile |
|
||||
| CONF-E3 | `timeframe` | public, trading, market_data | Parcialmente migrado | Completar migracion, agregar '1M' a market_data |
|
||||
|
||||
#### 2.1.4 Acoplamiento Debil entre Schemas
|
||||
|
||||
| ID | Relacion Faltante | Impacto | Prioridad |
|
||||
|----|-------------------|---------|-----------|
|
||||
| WEAK-1 | investment.accounts <-> financial.wallets | Cuentas inversion sin wallet vinculado | P1 |
|
||||
| WEAK-2 | trading.bots <-> financial.wallets | Bots sin tracking de capital en wallet | P1 |
|
||||
| WEAK-3 | portfolio.portfolios <-> investment.accounts | Portafolio sin link a cuentas | P2 |
|
||||
| WEAK-4 | market_data.tickers -> trading.symbols | Catalogo duplicado sin referencia cruzada | P1 |
|
||||
|
||||
#### 2.1.5 Duplicacion Funcional
|
||||
|
||||
| ID | Objeto A | Objeto B | Tipo | Resolucion |
|
||||
|----|----------|----------|------|------------|
|
||||
| DUP-1 | trading.symbols (UUID PK) | market_data.tickers (SERIAL PK) | Catalogo simbolos | Consolidar en trading.symbols como master |
|
||||
| DUP-2 | auth.users.role | auth.user_status | Status/Role dual | Mantener separados (correcto) |
|
||||
| DUP-3 | financial.wallet_audit_log | audit.audit_logs | Auditoria | Complementarios, mantener |
|
||||
|
||||
### 2.2 Analisis de Completitud por Schema
|
||||
|
||||
#### Schema: auth (13 tablas DDL / 10 inventario)
|
||||
|
||||
| Tabla | DDL | Inventario | Backend Entity | Backend Service | Gap |
|
||||
|-------|-----|-----------|----------------|-----------------|-----|
|
||||
| users | OK | OK | OK | OK | - |
|
||||
| user_profiles | OK | OK | OK | OK | - |
|
||||
| oauth_accounts | OK | OK | OK | OK | - |
|
||||
| sessions | OK | OK | OK | OK | - |
|
||||
| email_verifications | OK | OK | OK | OK | - |
|
||||
| phone_verifications | OK | OK | OK | OK | - |
|
||||
| password_reset_tokens | OK | OK | OK | OK | - |
|
||||
| auth_logs | OK | OK | OK | OK | - |
|
||||
| login_attempts | OK | OK | OK | Parcial | Falta rate limit service |
|
||||
| rate_limiting_config | OK | OK | NO | NO | Falta entity + service |
|
||||
| **notifications** | OK | **FALTA** | OK | Parcial | Falta doc inventario |
|
||||
| **user_push_tokens** | OK | **FALTA** | NO | NO | Falta entity + service + doc |
|
||||
|
||||
**Coherencia auth:** 10/13 documentadas = 77% (deberia ser 100%)
|
||||
|
||||
#### Schema: trading (13 tablas DDL / 11 inventario)
|
||||
|
||||
| Tabla | DDL | Inventario | Backend Entity | Backend Service | Gap |
|
||||
|-------|-----|-----------|----------------|-----------------|-----|
|
||||
| symbols | OK | OK | OK | OK | - |
|
||||
| watchlists | OK | OK | OK | OK | - |
|
||||
| watchlist_items | OK | OK | OK | OK | - |
|
||||
| bots | OK | OK | OK | Parcial (60%) | Falta completar bot service |
|
||||
| orders | OK | OK | OK | OK | - |
|
||||
| positions | OK | OK | OK | OK | - |
|
||||
| trades | OK | OK | OK | OK | - |
|
||||
| signals | OK | OK | OK | OK | - |
|
||||
| trading_metrics | OK | OK | OK | Parcial | Falta metrics service |
|
||||
| paper_balances | OK | OK | OK | OK | - |
|
||||
| price_alerts | OK | OK | NO | NO | **FK ERROR + falta entity** |
|
||||
| **drawing_tools** | OK | **FALTA** | NO | NO | Nuevo - falta todo |
|
||||
| **drawing_templates** | OK | **FALTA** | NO | NO | Nuevo - falta todo |
|
||||
|
||||
**Coherencia trading:** 11/13 documentadas = 85%
|
||||
|
||||
#### Schema: education (19 tablas DDL / 12 inventario)
|
||||
|
||||
| Tabla | DDL | Inventario | Backend Entity | Backend Service | Gap |
|
||||
|-------|-----|-----------|----------------|-----------------|-----|
|
||||
| categories | OK | OK | OK | OK | - |
|
||||
| courses | OK | OK | OK | OK | - |
|
||||
| modules | OK | OK | OK | OK | - |
|
||||
| lessons | OK | OK | OK | OK | - |
|
||||
| enrollments | OK | OK | OK | OK | - |
|
||||
| progress | OK | Falta | OK | Parcial | Falta doc |
|
||||
| quizzes | OK | OK | OK | OK | - |
|
||||
| quiz_questions | OK | OK | OK | OK | - |
|
||||
| quiz_attempts | OK | OK | OK | OK | - |
|
||||
| certificates | OK | OK | OK | OK | - |
|
||||
| user_achievements | OK | OK | OK | OK | - |
|
||||
| user_gamification_profile | OK | OK | OK | OK | - |
|
||||
| videos | OK | OK | NO | NO | Falta entity |
|
||||
| **user_activity_log** | OK | **FALTA** | NO | NO | Falta todo |
|
||||
| **course_reviews** | OK | **FALTA** | NO | Parcial | Falta entity |
|
||||
| **review_helpful_votes** | OK | **FALTA** | NO | NO | Falta todo |
|
||||
| **instructors** | OK | **FALTA** | NO | Existe stub | Falta entity real |
|
||||
| **course_tags** | OK | **FALTA** | NO | NO | Falta todo |
|
||||
| **course_tag_assignments** | OK | **FALTA** | NO | NO | Falta todo |
|
||||
|
||||
**Coherencia education:** 12/19 documentadas = 63% (la peor)
|
||||
|
||||
#### Schema: financial (11 tablas DDL / 9 inventario)
|
||||
|
||||
| Tabla | DDL | Inventario | Backend Entity | Backend Service | Gap |
|
||||
|-------|-----|-----------|----------------|-----------------|-----|
|
||||
| wallets | OK | OK | OK | OK | - |
|
||||
| wallet_transactions | OK | OK | OK | OK | - |
|
||||
| subscriptions | OK | OK | OK | OK | - |
|
||||
| invoices | OK | OK | OK | OK | - |
|
||||
| payments | OK | OK | OK | OK | - |
|
||||
| wallet_audit_log | OK | OK | OK | OK | - |
|
||||
| wallet_limits | OK | OK | NO | NO | Falta entity |
|
||||
| customers | OK | OK | OK | OK | - |
|
||||
| payment_methods | OK | OK | OK | OK | - |
|
||||
| **currency_exchange_rates** | OK | **FALTA** | NO | NO | Falta todo |
|
||||
| **refunds** | OK | **FALTA** | NO | NO | Falta todo |
|
||||
|
||||
**Coherencia financial:** 9/11 documentadas = 82%
|
||||
|
||||
#### Schema: investment (10 tablas DDL / 8 inventario)
|
||||
|
||||
| Tabla | DDL | Inventario | Backend Entity | Backend Service | Gap |
|
||||
|-------|-----|-----------|----------------|-----------------|-----|
|
||||
| products | OK | OK | OK | OK | - |
|
||||
| risk_questionnaire | OK | Falta | OK | Parcial | Falta doc inv |
|
||||
| accounts | OK | OK | OK | OK | - |
|
||||
| distributions | OK | OK | OK | OK | - |
|
||||
| transactions | OK | OK | OK | OK | - |
|
||||
| withdrawal_requests | OK | OK | OK | OK | - |
|
||||
| daily_performance | OK | OK | OK | Parcial | Falta performance service |
|
||||
| distribution_history | OK | OK | NO | NO | Nuevo Sprint 3 |
|
||||
| distribution_runs | OK | OK | NO | NO | Nuevo Sprint 3 |
|
||||
| **agent_executions** | OK | **FALTA** | NO | NO | Falta todo |
|
||||
|
||||
**Coherencia investment:** 8/10 documentadas = 80%
|
||||
|
||||
#### Schema: ml (12 tablas DDL / 10 inventario)
|
||||
|
||||
| Tabla | DDL | Inventario | Backend Entity | Backend Service | Gap |
|
||||
|-------|-----|-----------|----------------|-----------------|-----|
|
||||
| models | OK | OK | OK | OK | - |
|
||||
| model_versions | OK | OK | OK | OK | - |
|
||||
| predictions | OK | OK | OK | OK | - |
|
||||
| prediction_outcomes | OK | OK | OK | OK | - |
|
||||
| feature_store | OK | OK | OK | OK | - |
|
||||
| llm_predictions | OK | OK | OK | OK | - |
|
||||
| llm_prediction_outcomes | OK | OK | OK | OK | - |
|
||||
| llm_decisions | OK | OK | OK | OK | - |
|
||||
| risk_events | OK | OK | OK | OK | - |
|
||||
| backtest_runs | OK | OK | OK | OK | - |
|
||||
| **llm_signals** | OK | **FALTA** | NO | NO | Falta todo |
|
||||
| **prediction_overlays** | OK | **FALTA** | NO | NO | Falta todo |
|
||||
|
||||
**Coherencia ml:** 10/12 documentadas = 83%
|
||||
|
||||
#### Schema: llm (5 tablas DDL / 4 inventario)
|
||||
|
||||
| Tabla | DDL | Inventario | Backend Entity | Backend Service | Gap |
|
||||
|-------|-----|-----------|----------------|-----------------|-----|
|
||||
| conversations | OK | OK | OK | OK | - |
|
||||
| messages | OK | OK | OK | OK | - |
|
||||
| user_preferences | OK | Falta | OK | OK | Falta doc inv |
|
||||
| user_memory | OK | OK | OK | OK | - |
|
||||
| embeddings | OK | OK | OK | Parcial | pgvector integration |
|
||||
|
||||
**Coherencia llm:** 4/5 documentadas = 80%
|
||||
|
||||
#### Schema: audit (7 tablas DDL / 7 inventario)
|
||||
|
||||
Todas documentadas. **Coherencia: 100%**. Sin embargo, NO tiene servicios backend.
|
||||
|
||||
#### Schema: portfolio (5 tablas DDL / 4 inventario)
|
||||
|
||||
| Tabla | DDL | Inventario | Backend Entity | Backend Service | Gap |
|
||||
|-------|-----|-----------|----------------|-----------------|-----|
|
||||
| portfolios | OK | OK | OK | OK | - |
|
||||
| portfolio_allocations | OK | OK | OK | OK | - |
|
||||
| portfolio_goals | OK | OK | OK | OK | - |
|
||||
| rebalance_history | OK | OK | NO | NO | Falta entity |
|
||||
| **portfolio_snapshots** | OK | **FALTA** | NO | NO | Falta todo |
|
||||
|
||||
**Coherencia portfolio:** 4/5 documentadas = 80%
|
||||
|
||||
#### Schema: market_data (4 tablas DDL / 3 inventario)
|
||||
|
||||
| Tabla | DDL | Inventario | Backend Entity | Backend Service | Gap |
|
||||
|-------|-----|-----------|----------------|-----------------|-----|
|
||||
| tickers | OK | OK | OK | Parcial | Falta completar |
|
||||
| ohlcv_5m | OK | OK | NO | NO | Falta entity |
|
||||
| ohlcv_15m | OK | OK | NO | NO | Falta entity |
|
||||
| staging | OK | Falta | NO | NO | ETL staging |
|
||||
|
||||
**Coherencia market_data:** 3/4 documentadas = 75%
|
||||
|
||||
#### Schema: feature_flags (1 tabla DDL / 0 inventario)
|
||||
|
||||
| Tabla | DDL | Inventario | Backend Entity | Backend Service | Gap |
|
||||
|-------|-----|-----------|----------------|-----------------|-----|
|
||||
| **flags** | OK | **FALTA** | NO | Parcial | Schema completo sin doc |
|
||||
|
||||
**Coherencia feature_flags:** 0/1 documentadas = 0% (peor caso)
|
||||
|
||||
### 2.3 Resumen de Coherencia DDL-Inventario
|
||||
|
||||
| Schema | DDL | Documentadas | Coherencia |
|
||||
|--------|-----|-------------|------------|
|
||||
| auth | 13 | 10 | 77% |
|
||||
| trading | 13 | 11 | 85% |
|
||||
| education | 19 | 12 | **63%** |
|
||||
| financial | 11 | 9 | 82% |
|
||||
| investment | 10 | 8 | 80% |
|
||||
| ml | 12 | 10 | 83% |
|
||||
| llm | 5 | 4 | 80% |
|
||||
| audit | 7 | 7 | **100%** |
|
||||
| portfolio | 5 | 4 | 80% |
|
||||
| market_data | 4 | 3 | 75% |
|
||||
| feature_flags | 1 | 0 | **0%** |
|
||||
| **TOTAL** | **100** | **78** | **78%** |
|
||||
|
||||
### 2.4 Analisis de Documentacion para Purga
|
||||
|
||||
#### Documentacion Obsoleta / Candidatos a Purga
|
||||
|
||||
| Ubicacion | Tipo | Razon | Accion |
|
||||
|-----------|------|-------|--------|
|
||||
| orchestration/tareas/_archive/2026-01/ | Tareas archivadas | Estructura creada pero archivos no movidos | Completar archivado |
|
||||
| orchestration/analisis/_archive/2026-01-25/ | Analisis OQI-001 viejos | Superseded por TASK-2026-02-03 | Mantener en archive |
|
||||
| docs/_archive/04-fase-backlog/ | Backlog deprecado | Links rotos a /docs/planning/ | Eliminar |
|
||||
| docs/_archive/00-notas/NOTA-DISCREPANCIA-PUERTOS-2025-12-08.md | Nota resuelta | Resuelto 2026-01-07 | Eliminar |
|
||||
| orchestration/analisis/coherencia/COHERENCE-BASELINE-2026-01-28.md | Baseline viejo | Superseded por version actual | Mover a _archive |
|
||||
| orchestration/tareas/2026-01-25/ | Carpeta fecha antigua | Tareas movidas o completadas | Verificar y archivar |
|
||||
| orchestration/tareas/2026-01-27/ | Carpeta fecha antigua | Tareas movidas o completadas | Verificar y archivar |
|
||||
|
||||
#### Documentacion Faltante (a integrar)
|
||||
|
||||
| Tipo | Contenido | Ubicacion Sugerida |
|
||||
|------|-----------|-------------------|
|
||||
| Definicion | feature_flags schema completo | docs/02-definicion-modulos/ (transversal) |
|
||||
| Especificacion | ET para drawing_tools/templates | docs/02-definicion-modulos/OQI-003-trading-charts/ |
|
||||
| Historia Usuario | US para price_alerts | docs/02-definicion-modulos/OQI-003-trading-charts/ |
|
||||
| Requerimiento | RF para refunds | docs/02-definicion-modulos/OQI-005-payments-stripe/ |
|
||||
| Especificacion | ET para course_tags | docs/02-definicion-modulos/OQI-002-education/ |
|
||||
| Historia Usuario | US para instructors management | docs/02-definicion-modulos/OQI-002-education/ |
|
||||
| Requerimiento | RF para agent_executions | docs/02-definicion-modulos/OQI-004-investment-accounts/ |
|
||||
| Especificacion | ET para prediction_overlays | docs/02-definicion-modulos/OQI-006-ml-signals/ |
|
||||
|
||||
---
|
||||
|
||||
## 3. PLANIFICACION (P) - PLAN MAESTRO POR FASES
|
||||
|
||||
### 3.0 Estructura General de Fases
|
||||
|
||||
```
|
||||
FASE-1: Analisis y Planificacion (COMPLETADA - este documento)
|
||||
|
|
||||
v
|
||||
FASE-2: Validacion de Esquemas y Objetos DDL
|
||||
├── 2.1: Correccion de errores criticos DDL
|
||||
├── 2.2: Validacion schema-por-schema
|
||||
├── 2.3: Resolucion de conflictos de enums
|
||||
└── 2.4: Resolucion de duplicaciones funcionales
|
||||
|
|
||||
v
|
||||
FASE-3: Auditoria de Integridad y Coherencia
|
||||
├── 3.1: Validacion de foreign keys
|
||||
├── 3.2: Validacion de indices
|
||||
├── 3.3: Validacion de constraints
|
||||
├── 3.4: Validacion de funciones y triggers
|
||||
└── 3.5: Validacion de relaciones entre schemas
|
||||
|
|
||||
v
|
||||
FASE-4: Coherencia DDL-Backend
|
||||
├── 4.1: Mapeo tablas -> entities
|
||||
├── 4.2: Mapeo entities -> services
|
||||
├── 4.3: Mapeo services -> controllers
|
||||
├── 4.4: Identificacion de gaps de implementacion
|
||||
└── 4.5: Plan de entidades faltantes
|
||||
|
|
||||
v
|
||||
FASE-5: Purga y Reorganizacion Documental
|
||||
├── 5.1: Purgar documentacion obsoleta
|
||||
├── 5.2: Integrar definiciones faltantes
|
||||
├── 5.3: Actualizar inventarios
|
||||
└── 5.4: Actualizar documentacion de modulos
|
||||
|
|
||||
v
|
||||
FASE-6: Plan Maestro de Remediacion
|
||||
├── 6.1: Priorizar acciones por impacto
|
||||
├── 6.2: Definir orden de ejecucion con dependencias
|
||||
├── 6.3: Estimar esfuerzo por subtarea
|
||||
└── 6.4: Generar roadmap actualizado
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### FASE-2: Validacion de Esquemas y Objetos DDL
|
||||
|
||||
#### SUBTAREA 2.1: Correccion de Errores Criticos DDL
|
||||
|
||||
**CAPVED:**
|
||||
- **C:** price_alerts tiene FK incorrecta que impide creacion de tabla
|
||||
- **A:** Error en linea 15 de 11-price_alerts.sql: `auth.user_profiles(id)` deberia ser `auth.users(id)`
|
||||
- **P:** Modificar archivo SQL corrigiendo la referencia
|
||||
- **V:** Recrear BD en WSL, verificar tabla se crea correctamente
|
||||
- **E:** Modificar archivo, ejecutar DDL
|
||||
- **D:** Documentar correccion en changelog
|
||||
|
||||
| ID | Tarea | Archivo | Prioridad | Esfuerzo | Dependencias |
|
||||
|----|-------|---------|-----------|----------|--------------|
|
||||
| 2.1.1 | Corregir FK price_alerts | trading/tables/11-price_alerts.sql | P0 | 0.5h | Ninguna |
|
||||
| 2.1.2 | Verificar creacion tabla | Script recreacion BD | P0 | 0.5h | 2.1.1 |
|
||||
|
||||
#### SUBTAREA 2.2: Validacion Schema por Schema
|
||||
|
||||
Para CADA schema se debe validar (CAPVED por cada uno):
|
||||
|
||||
| ID | Schema | Tablas | Accion Principal | Esfuerzo | Paralelizable |
|
||||
|----|--------|--------|-----------------|----------|---------------|
|
||||
| 2.2.1 | auth | 13 | Documentar notifications + user_push_tokens | 2h | Si |
|
||||
| 2.2.2 | trading | 13 | Documentar drawing_tools + drawing_templates | 2h | Si |
|
||||
| 2.2.3 | education | 19 | Documentar 7 tablas faltantes | 4h | Si |
|
||||
| 2.2.4 | financial | 11 | Documentar refunds + currency_exchange_rates | 2h | Si |
|
||||
| 2.2.5 | investment | 10 | Documentar agent_executions + risk_questionnaire | 2h | Si |
|
||||
| 2.2.6 | ml | 12 | Documentar llm_signals + prediction_overlays | 2h | Si |
|
||||
| 2.2.7 | llm | 5 | Documentar user_preferences | 1h | Si |
|
||||
| 2.2.8 | audit | 7 | Validar completitud (ya 100%) | 0.5h | Si |
|
||||
| 2.2.9 | portfolio | 5 | Documentar portfolio_snapshots | 1h | Si |
|
||||
| 2.2.10 | market_data | 4 | Documentar staging | 1h | Si |
|
||||
| 2.2.11 | feature_flags | 1 | Documentar schema completo | 2h | Si |
|
||||
|
||||
**Total 2.2:** 19.5h (paralelizable a ~8h con 3 agentes)
|
||||
|
||||
**CAPVED para cada 2.2.X:**
|
||||
- **C:** Schema tiene N tablas DDL, M documentadas en inventario
|
||||
- **A:** Leer cada archivo SQL, comparar con inventario, identificar campos/tipos/constraints
|
||||
- **P:** Crear/actualizar entrada en DATABASE_INVENTORY.yml para tablas faltantes
|
||||
- **V:** Verificar coherencia post-actualizacion
|
||||
- **E:** Actualizar DATABASE_INVENTORY.yml
|
||||
- **D:** Registrar cambios en changelog
|
||||
|
||||
#### SUBTAREA 2.3: Resolucion de Conflictos de Enums
|
||||
|
||||
| ID | Conflicto | Accion | Esfuerzo | Dependencias |
|
||||
|----|-----------|--------|----------|--------------|
|
||||
| 2.3.1 | CONF-E1: transaction_type | Verificar migracion existe, crear si no | 2h | 2.2.4, 2.2.5 |
|
||||
| 2.3.2 | CONF-E2: risk_profile | Crear migracion a public.risk_profile | 2h | 2.2.5, 2.2.9 |
|
||||
| 2.3.3 | CONF-E3: timeframe | Completar migracion, agregar '1M' a market_data | 1h | 2.2.10 |
|
||||
|
||||
**Total 2.3:** 5h
|
||||
|
||||
#### SUBTAREA 2.4: Resolucion de Duplicaciones Funcionales
|
||||
|
||||
| ID | Duplicacion | Accion | Esfuerzo | Dependencias |
|
||||
|----|------------|--------|----------|--------------|
|
||||
| 2.4.1 | DUP-1: symbols vs tickers | Analizar consolidacion, crear plan de migracion | 4h | 2.2.2, 2.2.10 |
|
||||
|
||||
**Total 2.4:** 4h
|
||||
|
||||
**TOTAL FASE-2:** 30h (~12h con paralelizacion)
|
||||
|
||||
---
|
||||
|
||||
### FASE-3: Auditoria de Integridad y Coherencia
|
||||
|
||||
#### SUBTAREA 3.1: Validacion de Foreign Keys
|
||||
|
||||
**CAPVED:**
|
||||
- **C:** 100 tablas con multiples FKs inter-schema
|
||||
- **A:** Recorrer cada tabla, verificar que FKs referencian tablas existentes con tipos correctos
|
||||
- **P:** Generar matriz de FKs con estado de validacion
|
||||
- **V:** Cada FK validada contra tabla destino
|
||||
- **E:** Ejecutar validacion
|
||||
- **D:** Generar FK-VALIDATION-MATRIX.yml
|
||||
|
||||
| ID | Grupo | Tablas | Accion | Esfuerzo | Paralelizable |
|
||||
|----|-------|--------|--------|----------|---------------|
|
||||
| 3.1.1 | auth -> auth | 13 tablas | Validar FKs internas | 1h | Si |
|
||||
| 3.1.2 | trading -> auth, trading | 13 tablas | Validar FKs cross-schema | 1.5h | Si |
|
||||
| 3.1.3 | education -> auth, education | 19 tablas | Validar FKs cross-schema | 2h | Si |
|
||||
| 3.1.4 | financial -> auth, financial | 11 tablas | Validar FKs cross-schema | 1.5h | Si |
|
||||
| 3.1.5 | investment -> auth, investment | 10 tablas | Validar FKs cross-schema | 1h | Si |
|
||||
| 3.1.6 | ml, llm, portfolio, audit | 29 tablas | Validar FKs cross-schema | 2h | Si |
|
||||
| 3.1.7 | Relaciones faltantes | WEAK-1 a WEAK-4 | Documentar y proponer FKs | 2h | No (depende de 3.1.1-3.1.6) |
|
||||
|
||||
**Total 3.1:** 11h (~5h con paralelizacion)
|
||||
|
||||
#### SUBTAREA 3.2: Validacion de Indices
|
||||
|
||||
| ID | Accion | Esfuerzo | Paralelizable |
|
||||
|----|--------|----------|---------------|
|
||||
| 3.2.1 | Inventariar todos los indices existentes | 3h | Si (por schema) |
|
||||
| 3.2.2 | Identificar queries criticas sin indice | 2h | No |
|
||||
| 3.2.3 | Proponer indices faltantes | 1h | No |
|
||||
|
||||
**Total 3.2:** 6h
|
||||
|
||||
#### SUBTAREA 3.3: Validacion de Constraints
|
||||
|
||||
| ID | Accion | Esfuerzo | Paralelizable |
|
||||
|----|--------|----------|---------------|
|
||||
| 3.3.1 | Validar CHECK constraints por tabla | 3h | Si |
|
||||
| 3.3.2 | Validar UNIQUE constraints | 1h | Si |
|
||||
| 3.3.3 | Validar NOT NULL en campos criticos | 1h | Si |
|
||||
| 3.3.4 | Validar DEFAULT values | 1h | Si |
|
||||
|
||||
**Total 3.3:** 6h
|
||||
|
||||
#### SUBTAREA 3.4: Validacion de Funciones y Triggers
|
||||
|
||||
| ID | Accion | Esfuerzo | Paralelizable |
|
||||
|----|--------|----------|---------------|
|
||||
| 3.4.1 | Inventariar 17+ funciones | 2h | Si |
|
||||
| 3.4.2 | Validar funciones usadas en triggers | 1h | No |
|
||||
| 3.4.3 | Identificar funciones huerfanas | 1h | No |
|
||||
| 3.4.4 | Validar triggers de updated_at | 1h | Si |
|
||||
| 3.4.5 | Validar triggers de auditoria | 1h | Si |
|
||||
|
||||
**Total 3.4:** 6h
|
||||
|
||||
#### SUBTAREA 3.5: Validacion de Relaciones Inter-Schema
|
||||
|
||||
| ID | Accion | Esfuerzo | Paralelizable |
|
||||
|----|--------|----------|---------------|
|
||||
| 3.5.1 | Mapear dependencias auth -> todos los schemas | 2h | No |
|
||||
| 3.5.2 | Identificar ciclos de dependencia | 1h | No |
|
||||
| 3.5.3 | Validar ON DELETE behavior (CASCADE vs RESTRICT) | 2h | No |
|
||||
| 3.5.4 | Documentar diagrama ER inter-schema | 3h | No |
|
||||
|
||||
**Total 3.5:** 8h
|
||||
|
||||
**TOTAL FASE-3:** 37h (~18h con paralelizacion)
|
||||
|
||||
---
|
||||
|
||||
### FASE-4: Coherencia DDL-Backend
|
||||
|
||||
#### SUBTAREA 4.1: Mapeo Tablas -> Entities
|
||||
|
||||
**CAPVED por cada modulo backend:**
|
||||
|
||||
| ID | Modulo | Tablas | Entities Existentes | Gap | Esfuerzo |
|
||||
|----|--------|--------|-------------------|-----|----------|
|
||||
| 4.1.1 | auth | 13 | 10 | 3 faltantes | 2h |
|
||||
| 4.1.2 | trading | 13 | 10 | 3 faltantes | 2h |
|
||||
| 4.1.3 | education | 19 | 12 | 7 faltantes | 3h |
|
||||
| 4.1.4 | financial | 11 | 9 | 2 faltantes | 1.5h |
|
||||
| 4.1.5 | investment | 10 | 7 | 3 faltantes | 1.5h |
|
||||
| 4.1.6 | ml | 12 | 10 | 2 faltantes | 1h |
|
||||
| 4.1.7 | llm | 5 | 4 | 1 faltante | 0.5h |
|
||||
| 4.1.8 | portfolio | 5 | 3 | 2 faltantes | 1h |
|
||||
| 4.1.9 | market_data | 4 | 1 | 3 faltantes | 1.5h |
|
||||
| 4.1.10 | audit | 7 | 0 | 7 faltantes | 2h |
|
||||
| 4.1.11 | feature_flags | 1 | 0 | 1 faltante | 0.5h |
|
||||
|
||||
**Total 4.1:** 16.5h
|
||||
|
||||
#### SUBTAREA 4.2: Mapeo Entities -> Services
|
||||
|
||||
| ID | Accion | Esfuerzo |
|
||||
|----|--------|----------|
|
||||
| 4.2.1 | Listar todos los servicios existentes | 2h |
|
||||
| 4.2.2 | Mapear servicios a entities | 2h |
|
||||
| 4.2.3 | Identificar entities sin servicio | 1h |
|
||||
| 4.2.4 | Identificar servicios sin entity | 1h |
|
||||
|
||||
**Total 4.2:** 6h
|
||||
|
||||
#### SUBTAREA 4.3: Mapeo Services -> Controllers/Routes
|
||||
|
||||
| ID | Accion | Esfuerzo |
|
||||
|----|--------|----------|
|
||||
| 4.3.1 | Listar todos los controllers existentes | 1h |
|
||||
| 4.3.2 | Mapear controllers a servicios | 1h |
|
||||
| 4.3.3 | Identificar endpoints sin implementacion | 2h |
|
||||
|
||||
**Total 4.3:** 4h
|
||||
|
||||
#### SUBTAREA 4.4: Identificacion de Gaps Backend
|
||||
|
||||
| ID | Accion | Esfuerzo |
|
||||
|----|--------|----------|
|
||||
| 4.4.1 | Consolidar gaps DDL -> Entity | 2h |
|
||||
| 4.4.2 | Consolidar gaps Entity -> Service | 2h |
|
||||
| 4.4.3 | Consolidar gaps Service -> Controller | 1h |
|
||||
| 4.4.4 | Generar BACKEND-GAPS-MATRIX.yml | 2h |
|
||||
|
||||
**Total 4.4:** 7h
|
||||
|
||||
#### SUBTAREA 4.5: Plan de Entities Faltantes
|
||||
|
||||
| ID | Accion | Esfuerzo |
|
||||
|----|--------|----------|
|
||||
| 4.5.1 | Priorizar entities por impacto funcional | 2h |
|
||||
| 4.5.2 | Definir campos de cada entity faltante | 4h |
|
||||
| 4.5.3 | Definir DTOs necesarios por entity | 3h |
|
||||
| 4.5.4 | Definir servicios necesarios por entity | 3h |
|
||||
|
||||
**Total 4.5:** 12h
|
||||
|
||||
**TOTAL FASE-4:** 45.5h (~20h con paralelizacion)
|
||||
|
||||
---
|
||||
|
||||
### FASE-5: Purga y Reorganizacion Documental
|
||||
|
||||
#### SUBTAREA 5.1: Purgar Documentacion Obsoleta
|
||||
|
||||
| ID | Accion | Archivos | Esfuerzo |
|
||||
|----|--------|----------|----------|
|
||||
| 5.1.1 | Eliminar docs/_archive/04-fase-backlog/ | 1 archivo | 0.25h |
|
||||
| 5.1.2 | Eliminar nota discrepancia puertos resuelta | 1 archivo | 0.25h |
|
||||
| 5.1.3 | Mover coherence baseline a archive | 1 archivo | 0.25h |
|
||||
| 5.1.4 | Verificar y completar archivado tareas 2026-01 | 20 tareas | 2h |
|
||||
| 5.1.5 | Limpiar carpetas de fechas vacias | 2-3 carpetas | 0.5h |
|
||||
|
||||
**Total 5.1:** 3.25h
|
||||
|
||||
#### SUBTAREA 5.2: Integrar Definiciones Faltantes
|
||||
|
||||
| ID | Definicion | Modulo OQI | Tipo Doc | Esfuerzo |
|
||||
|----|-----------|-----------|----------|----------|
|
||||
| 5.2.1 | feature_flags schema | Transversal | ET + RF | 3h |
|
||||
| 5.2.2 | drawing_tools/templates | OQI-003 | ET + US | 2h |
|
||||
| 5.2.3 | price_alerts | OQI-003 | US + RF | 2h |
|
||||
| 5.2.4 | refunds | OQI-005 | ET + US + RF | 2h |
|
||||
| 5.2.5 | course_tags/instructors | OQI-002 | ET + US | 2h |
|
||||
| 5.2.6 | agent_executions | OQI-004 | ET + US | 2h |
|
||||
| 5.2.7 | prediction_overlays | OQI-006 | ET | 1h |
|
||||
| 5.2.8 | portfolio_snapshots | OQI-008 | ET | 1h |
|
||||
|
||||
**Total 5.2:** 15h
|
||||
|
||||
#### SUBTAREA 5.3: Actualizar Inventarios
|
||||
|
||||
| ID | Inventario | Accion | Esfuerzo |
|
||||
|----|-----------|--------|----------|
|
||||
| 5.3.1 | DATABASE_INVENTORY.yml | Actualizar de 81 a 100 tablas, agregar feature_flags | 3h |
|
||||
| 5.3.2 | BACKEND_INVENTORY.yml | Actualizar con gaps identificados en Fase 4 | 2h |
|
||||
| 5.3.3 | MASTER_INVENTORY.yml | Sincronizar con cambios | 1h |
|
||||
| 5.3.4 | DDL-COMPLETE-MATRIX.yml | Actualizar de 93 a 100 tablas | 2h |
|
||||
| 5.3.5 | GAPS-TRACKING.yml | Actualizar con nuevos gaps | 2h |
|
||||
|
||||
**Total 5.3:** 10h
|
||||
|
||||
#### SUBTAREA 5.4: Actualizar Documentacion de Modulos
|
||||
|
||||
| ID | Modulo | Accion | Esfuerzo |
|
||||
|----|--------|--------|----------|
|
||||
| 5.4.1 | OQI-002 | Agregar docs para 7 tablas nuevas education | 3h |
|
||||
| 5.4.2 | OQI-003 | Agregar docs para drawing_tools, price_alerts | 2h |
|
||||
| 5.4.3 | OQI-004 | Agregar docs para agent_executions | 1h |
|
||||
| 5.4.4 | OQI-005 | Agregar docs para refunds, currency_exchange | 2h |
|
||||
| 5.4.5 | OQI-006 | Agregar docs para prediction_overlays, llm_signals | 1.5h |
|
||||
| 5.4.6 | OQI-008 | Agregar docs para portfolio_snapshots | 1h |
|
||||
|
||||
**Total 5.4:** 10.5h
|
||||
|
||||
**TOTAL FASE-5:** 38.75h (~15h con paralelizacion)
|
||||
|
||||
---
|
||||
|
||||
### FASE-6: Plan Maestro de Remediacion
|
||||
|
||||
#### SUBTAREA 6.1: Priorizar Acciones por Impacto
|
||||
|
||||
| ID | Accion | Esfuerzo |
|
||||
|----|--------|----------|
|
||||
| 6.1.1 | Clasificar todos los gaps por P0/P1/P2/P3 | 2h |
|
||||
| 6.1.2 | Calcular impacto funcional de cada gap | 2h |
|
||||
| 6.1.3 | Generar matriz impacto vs esfuerzo | 1h |
|
||||
|
||||
**Total 6.1:** 5h
|
||||
|
||||
#### SUBTAREA 6.2: Definir Orden de Ejecucion
|
||||
|
||||
| ID | Accion | Esfuerzo |
|
||||
|----|--------|----------|
|
||||
| 6.2.1 | Mapear dependencias entre subtareas | 2h |
|
||||
| 6.2.2 | Identificar camino critico | 1h |
|
||||
| 6.2.3 | Identificar tareas paralelizables | 1h |
|
||||
| 6.2.4 | Generar diagrama de dependencias | 2h |
|
||||
|
||||
**Total 6.2:** 6h
|
||||
|
||||
#### SUBTAREA 6.3: Estimar Esfuerzo
|
||||
|
||||
| ID | Accion | Esfuerzo |
|
||||
|----|--------|----------|
|
||||
| 6.3.1 | Estimar horas por subtarea | 2h |
|
||||
| 6.3.2 | Agregar buffer (20%) | 0.5h |
|
||||
| 6.3.3 | Calcular ruta critica temporal | 1h |
|
||||
|
||||
**Total 6.3:** 3.5h
|
||||
|
||||
#### SUBTAREA 6.4: Generar Roadmap Actualizado
|
||||
|
||||
| ID | Accion | Esfuerzo |
|
||||
|----|--------|----------|
|
||||
| 6.4.1 | Actualizar ROADMAP-2026-Q1.yml | 3h |
|
||||
| 6.4.2 | Generar EXECUTION-PLAN-MODELADO.yml | 3h |
|
||||
| 6.4.3 | Crear REMEDIATION-CHECKLIST.md | 2h |
|
||||
|
||||
**Total 6.4:** 8h
|
||||
|
||||
**TOTAL FASE-6:** 22.5h
|
||||
|
||||
---
|
||||
|
||||
## 4. RESUMEN DE ESFUERZO
|
||||
|
||||
| Fase | Descripcion | Horas Secuencial | Horas Paralelo (est.) |
|
||||
|------|-------------|-----------------|----------------------|
|
||||
| FASE-1 | Analisis y Planificacion | COMPLETADA | COMPLETADA |
|
||||
| FASE-2 | Validacion Esquemas DDL | 30h | 12h |
|
||||
| FASE-3 | Auditoria Integridad | 37h | 18h |
|
||||
| FASE-4 | Coherencia DDL-Backend | 45.5h | 20h |
|
||||
| FASE-5 | Purga y Reorganizacion | 38.75h | 15h |
|
||||
| FASE-6 | Plan Maestro Remediacion | 22.5h | 22.5h |
|
||||
| **TOTAL** | | **173.75h** | **~87.5h** |
|
||||
|
||||
### Prioridad de Ejecucion
|
||||
|
||||
```
|
||||
INMEDIATO (Hoy):
|
||||
└── 2.1.1: Corregir FK price_alerts (P0 BLOQUEANTE)
|
||||
|
||||
URGENTE (Esta semana):
|
||||
├── 2.2.1-2.2.11: Documentar tablas faltantes (paralelo)
|
||||
├── 2.3.1-2.3.3: Resolver conflictos enums
|
||||
└── 5.3.1: Actualizar DATABASE_INVENTORY.yml
|
||||
|
||||
IMPORTANTE (Proxima semana):
|
||||
├── 3.1.1-3.1.7: Validar FKs
|
||||
├── 4.1.1-4.1.11: Mapeo tablas -> entities
|
||||
└── 5.1.1-5.1.5: Purgar docs obsoletas
|
||||
|
||||
PLANIFICADO (Semana 3-4):
|
||||
├── 3.2-3.5: Indices, constraints, funciones
|
||||
├── 4.2-4.5: Mapeo completo backend
|
||||
├── 5.2-5.4: Integrar definiciones faltantes
|
||||
└── 6.1-6.4: Plan maestro remediacion
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. METRICAS DE EXITO
|
||||
|
||||
| Metrica | Baseline | Target Post-Analisis |
|
||||
|---------|----------|---------------------|
|
||||
| Coherencia DDL-Inventario | 78% (78/100) | 100% (100/100) |
|
||||
| FK Errors | 1 | 0 |
|
||||
| Conflictos Enum | 3 | 0 |
|
||||
| Tablas sin documentar | 19 | 0 |
|
||||
| Schemas sin documentar | 1 (feature_flags) | 0 |
|
||||
| Relaciones debiles | 4 | 0 (documentadas o resueltas) |
|
||||
| Duplicaciones funcionales | 1 (symbols/tickers) | 0 (plan de consolidacion) |
|
||||
| Docs obsoletas | ~25 archivos | 0 |
|
||||
| Definiciones faltantes | 8 | 0 |
|
||||
|
||||
---
|
||||
|
||||
## 6. DEPENDENCIAS ENTRE FASES
|
||||
|
||||
```
|
||||
FASE-2 ──┐
|
||||
├──> FASE-3 (necesita schemas validados)
|
||||
│
|
||||
├──> FASE-4 (necesita inventario actualizado)
|
||||
│
|
||||
└──> FASE-5 (necesita gaps identificados)
|
||||
│
|
||||
└──> FASE-6 (necesita docs limpias y gaps consolidados)
|
||||
```
|
||||
|
||||
**Nota:** FASE-2, FASE-4, y FASE-5 pueden ejecutarse parcialmente en paralelo.
|
||||
|
||||
---
|
||||
|
||||
## 7. ORQUESTACION DE SUBAGENTES
|
||||
|
||||
### Subagentes Recomendados para Paralelizacion
|
||||
|
||||
| Subagente | Rol | Fases | Tareas Asignables |
|
||||
|-----------|-----|-------|-------------------|
|
||||
| SA-DDL-1 | Validador DDL Auth+Trading | F2, F3 | 2.2.1, 2.2.2, 3.1.1, 3.1.2 |
|
||||
| SA-DDL-2 | Validador DDL Education+Financial | F2, F3 | 2.2.3, 2.2.4, 3.1.3, 3.1.4 |
|
||||
| SA-DDL-3 | Validador DDL Investment+ML+Rest | F2, F3 | 2.2.5-2.2.11, 3.1.5, 3.1.6 |
|
||||
| SA-BACKEND-1 | Mapper Backend Auth+Trading | F4 | 4.1.1, 4.1.2, 4.2.1 |
|
||||
| SA-BACKEND-2 | Mapper Backend Education+Financial | F4 | 4.1.3, 4.1.4, 4.2.2 |
|
||||
| SA-DOCS-1 | Documentador/Purga | F5 | 5.1.X, 5.2.X, 5.3.X |
|
||||
|
||||
### Secuencia de Orquestacion
|
||||
|
||||
```
|
||||
Turno 1 (Paralelo): SA-DDL-1, SA-DDL-2, SA-DDL-3
|
||||
→ Resultado: Schemas validados, inventario actualizado
|
||||
|
||||
Turno 2 (Paralelo): SA-BACKEND-1, SA-BACKEND-2, SA-DOCS-1
|
||||
→ Resultado: Mapeo backend, docs purgadas
|
||||
|
||||
Turno 3 (Secuencial): Orquestador consolida
|
||||
→ Resultado: FASE-6 plan maestro
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*Generado por: Claude Code (Opus 4.6) - Especialista en Modelado de Datos*
|
||||
*Sistema: SIMCO v4.0.0 | Metodologia: CAPVED*
|
||||
*Fecha: 2026-02-05*
|
||||
@ -0,0 +1,439 @@
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# GAPS-CONSOLIDADO.yml
|
||||
# Trading Platform - Inventario Consolidado de Gaps de Modelado
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
version: "1.0.0"
|
||||
fecha: "2026-02-05"
|
||||
tarea: "TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD"
|
||||
|
||||
resumen:
|
||||
total_gaps: 37
|
||||
gaps_p0: 2
|
||||
gaps_p1: 14
|
||||
gaps_p2: 16
|
||||
gaps_p3: 5
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# P0 - BLOQUEANTES (impiden deployment/creacion de objetos)
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
gaps_p0:
|
||||
|
||||
- id: "GAP-DDL-P0-001"
|
||||
tipo: "FK_ERROR"
|
||||
descripcion: "FK incorrecta en price_alerts referencia auth.user_profiles(id) en lugar de auth.users(id)"
|
||||
schema: trading
|
||||
tabla: price_alerts
|
||||
archivo: "apps/database/ddl/schemas/trading/tables/11-price_alerts.sql"
|
||||
linea: 15
|
||||
impacto: "Tabla NO se puede crear - BLOQUEANTE para deployment"
|
||||
correccion: "Cambiar REFERENCES auth.user_profiles(id) -> REFERENCES auth.users(id)"
|
||||
esfuerzo: "0.5h"
|
||||
estado: RESUELTO
|
||||
resuelto_en: "2026-02-05"
|
||||
resuelto_por: "Claude Code (Opus 4.6)"
|
||||
evidencia: "FK corregida a auth.users(id), comentarios actualizados"
|
||||
|
||||
- id: "GAP-DDL-P0-002"
|
||||
tipo: "SCHEMA_NO_DOCUMENTADO"
|
||||
descripcion: "Schema feature_flags completo sin documentar en ningun inventario"
|
||||
schema: feature_flags
|
||||
tablas_afectadas: ["flags"]
|
||||
archivos: ["apps/database/ddl/schemas/feature_flags/tables/01-flags.sql"]
|
||||
impacto: "Schema invisible para backend integration"
|
||||
correccion: "Documentar en DATABASE_INVENTORY.yml, crear definiciones en docs/"
|
||||
esfuerzo: "3h"
|
||||
estado: PENDIENTE
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# P1 - CRITICOS (afectan coherencia y funcionalidad)
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
gaps_p1:
|
||||
|
||||
# --- TABLAS NO DOCUMENTADAS ---
|
||||
|
||||
- id: "GAP-INV-P1-001"
|
||||
tipo: "TABLA_NO_DOCUMENTADA"
|
||||
descripcion: "7 tablas education no documentadas en inventario"
|
||||
schema: education
|
||||
tablas:
|
||||
- instructors
|
||||
- course_tags
|
||||
- course_tag_assignments
|
||||
- review_helpful_votes
|
||||
- user_activity_log
|
||||
- course_reviews
|
||||
- progress
|
||||
impacto: "Education schema peor coherencia (63%)"
|
||||
esfuerzo: "4h"
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: "GAP-INV-P1-002"
|
||||
tipo: "TABLA_NO_DOCUMENTADA"
|
||||
descripcion: "2 tablas trading no documentadas"
|
||||
schema: trading
|
||||
tablas: ["drawing_tools", "drawing_templates"]
|
||||
impacto: "Funcionalidad charts sin doc"
|
||||
esfuerzo: "2h"
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: "GAP-INV-P1-003"
|
||||
tipo: "TABLA_NO_DOCUMENTADA"
|
||||
descripcion: "2 tablas financial no documentadas"
|
||||
schema: financial
|
||||
tablas: ["refunds", "currency_exchange_rates"]
|
||||
impacto: "Pagos incompletos sin doc"
|
||||
esfuerzo: "2h"
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: "GAP-INV-P1-004"
|
||||
tipo: "TABLA_NO_DOCUMENTADA"
|
||||
descripcion: "2 tablas ml no documentadas"
|
||||
schema: ml
|
||||
tablas: ["llm_signals", "prediction_overlays"]
|
||||
impacto: "ML overlays sin doc"
|
||||
esfuerzo: "2h"
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: "GAP-INV-P1-005"
|
||||
tipo: "TABLA_NO_DOCUMENTADA"
|
||||
descripcion: "Tablas menores no documentadas en auth, investment, llm, portfolio"
|
||||
schemas: ["auth", "investment", "llm", "portfolio", "market_data"]
|
||||
tablas:
|
||||
auth: ["notifications", "user_push_tokens"]
|
||||
investment: ["agent_executions", "risk_questionnaire"]
|
||||
llm: ["user_preferences"]
|
||||
portfolio: ["portfolio_snapshots"]
|
||||
market_data: ["staging"]
|
||||
impacto: "Inventarios desactualizados"
|
||||
esfuerzo: "4h"
|
||||
estado: PENDIENTE
|
||||
|
||||
# --- CONFLICTOS DE ENUMS ---
|
||||
|
||||
- id: "GAP-ENUM-P1-001"
|
||||
tipo: "ENUM_DUPLICADO"
|
||||
descripcion: "transaction_type duplicado en financial e investment"
|
||||
schemas: ["financial", "investment"]
|
||||
valores_financial: ["deposit", "withdrawal", "transfer_in", "transfer_out", "fee", "refund", "earning", "distribution", "bonus"]
|
||||
valores_investment: ["deposit", "withdrawal", "distribution"]
|
||||
resolucion: "Opcion B: Mantener separados con calificacion de schema estricta (no-breaking)"
|
||||
migracion_referencia: "migrations/2026-02-03_rename_transaction_type_enums.sql"
|
||||
estado_migracion: "EXISTE pero solo documentacion (SQL comentado, NO ejecutado)"
|
||||
severidad: "ALTA - Valores diferentes, breaking change si se renombra"
|
||||
esfuerzo: "2h (documentar) o 8h (renombrar con blue-green deployment)"
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: "GAP-ENUM-P1-002"
|
||||
tipo: "ENUM_DUPLICADO"
|
||||
descripcion: "risk_profile duplicado en investment y portfolio (valores identicos)"
|
||||
schemas: ["investment", "portfolio"]
|
||||
valores: ["conservative", "moderate", "aggressive"]
|
||||
resolucion: "Crear public.risk_profile para consistencia (opcional, baja prioridad)"
|
||||
migracion_existente: false
|
||||
sin_documentacion_deprecation: true
|
||||
severidad: "BAJA - Valores identicos, no causa conflicto en practica"
|
||||
esfuerzo: "2h"
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: "GAP-ENUM-P1-003"
|
||||
tipo: "ENUM_INCOMPLETO"
|
||||
descripcion: "timeframe: public.trading_timeframe creado pero tablas NO migradas"
|
||||
schemas: ["trading", "market_data"]
|
||||
tipo_unificado: "public.trading_timeframe (9 valores, ya existe en 00-global-types.sql)"
|
||||
tablas_a_migrar:
|
||||
- "trading.bots.timeframe -> public.trading_timeframe"
|
||||
- "trading.signals.timeframe -> public.trading_timeframe"
|
||||
- "trading.drawing_tools.timeframe -> public.trading_timeframe"
|
||||
migracion: "migrations/2026-02-03_unify_timeframe_enum.sql (PARCIAL - tipo creado, tablas no)"
|
||||
severidad: "MEDIA - Non-breaking, valores compatibles"
|
||||
esfuerzo: "2h"
|
||||
estado: PENDIENTE
|
||||
|
||||
# --- DUPLICACION FUNCIONAL ---
|
||||
|
||||
- id: "GAP-DUP-P1-001"
|
||||
tipo: "DUPLICACION_FUNCIONAL"
|
||||
descripcion: "Catalogo de simbolos duplicado: trading.symbols vs market_data.tickers"
|
||||
objetos:
|
||||
- tabla: "trading.symbols"
|
||||
pk_tipo: "UUID"
|
||||
campos_unicos: ["price_precision", "quantity_precision", "min_quantity", "max_quantity", "min_notional"]
|
||||
- tabla: "market_data.tickers"
|
||||
pk_tipo: "SERIAL (integer)"
|
||||
campos_unicos: ["is_ml_enabled", "supported_timeframes", "polygon_ticker"]
|
||||
problema: "PKs de tipo diferente impiden consolidacion simple"
|
||||
resolucion: "Consolidar en trading.symbols como master, agregar campos ML"
|
||||
esfuerzo: "4h (analisis) + 8h (implementacion)"
|
||||
estado: PENDIENTE
|
||||
|
||||
# --- RELACIONES DEBILES ---
|
||||
|
||||
- id: "GAP-REL-P1-001"
|
||||
tipo: "RELACION_FALTANTE"
|
||||
descripcion: "investment.accounts sin FK a financial.wallets"
|
||||
tablas: ["investment.accounts", "financial.wallets"]
|
||||
impacto: "Cuentas inversion sin wallet vinculado para movimiento de fondos"
|
||||
resolucion: "Agregar wallet_id FK en investment.accounts o crear tabla de vinculacion"
|
||||
esfuerzo: "2h"
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: "GAP-REL-P1-002"
|
||||
tipo: "RELACION_FALTANTE"
|
||||
descripcion: "trading.bots sin FK a financial.wallets"
|
||||
tablas: ["trading.bots", "financial.wallets"]
|
||||
impacto: "Bots sin tracking formal de capital en wallet"
|
||||
resolucion: "Agregar wallet_id FK en trading.bots"
|
||||
esfuerzo: "1h"
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: "GAP-REL-P1-003"
|
||||
tipo: "RELACION_FALTANTE"
|
||||
descripcion: "market_data.tickers sin FK a trading.symbols"
|
||||
tablas: ["market_data.tickers", "trading.symbols"]
|
||||
impacto: "Catalogos desvinculados, inconsistencia de datos"
|
||||
resolucion: "Agregar symbol_id FK en market_data.tickers -> trading.symbols"
|
||||
esfuerzo: "1h"
|
||||
estado: PENDIENTE
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# P2 - IMPORTANTES (mejoran calidad y mantenibilidad)
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
gaps_p2:
|
||||
|
||||
# --- BACKEND ENTITIES FALTANTES ---
|
||||
|
||||
- id: "GAP-BE-P2-001"
|
||||
tipo: "ENTITY_FALTANTE"
|
||||
descripcion: "Entities backend faltantes para tablas DDL existentes"
|
||||
entities_faltantes:
|
||||
auth:
|
||||
- tabla: "rate_limiting_config"
|
||||
- tabla: "user_push_tokens"
|
||||
trading:
|
||||
- tabla: "price_alerts"
|
||||
- tabla: "drawing_tools"
|
||||
- tabla: "drawing_templates"
|
||||
education:
|
||||
- tabla: "user_activity_log"
|
||||
- tabla: "review_helpful_votes"
|
||||
- tabla: "course_tags"
|
||||
- tabla: "course_tag_assignments"
|
||||
- tabla: "videos"
|
||||
financial:
|
||||
- tabla: "wallet_limits"
|
||||
- tabla: "currency_exchange_rates"
|
||||
- tabla: "refunds"
|
||||
investment:
|
||||
- tabla: "distribution_history"
|
||||
- tabla: "distribution_runs"
|
||||
- tabla: "agent_executions"
|
||||
ml:
|
||||
- tabla: "llm_signals"
|
||||
- tabla: "prediction_overlays"
|
||||
portfolio:
|
||||
- tabla: "rebalance_history"
|
||||
- tabla: "portfolio_snapshots"
|
||||
market_data:
|
||||
- tabla: "ohlcv_5m"
|
||||
- tabla: "ohlcv_15m"
|
||||
- tabla: "staging"
|
||||
audit:
|
||||
- tabla: "audit_logs"
|
||||
- tabla: "security_events"
|
||||
- tabla: "system_events"
|
||||
- tabla: "trading_audit"
|
||||
- tabla: "api_request_logs"
|
||||
- tabla: "data_access_logs"
|
||||
- tabla: "compliance_logs"
|
||||
feature_flags:
|
||||
- tabla: "flags"
|
||||
total_entities_faltantes: 31
|
||||
esfuerzo_estimado: "62h (2h por entity promedio)"
|
||||
estado: PENDIENTE
|
||||
|
||||
# --- DEFINICIONES DOCUMENTALES FALTANTES ---
|
||||
|
||||
- id: "GAP-DOC-P2-001"
|
||||
tipo: "DEFINICION_FALTANTE"
|
||||
descripcion: "Especificaciones tecnicas faltantes para tablas nuevas"
|
||||
definiciones:
|
||||
- tipo: "ET"
|
||||
contenido: "feature_flags schema"
|
||||
modulo: "Transversal"
|
||||
- tipo: "ET + US"
|
||||
contenido: "drawing_tools/templates"
|
||||
modulo: "OQI-003"
|
||||
- tipo: "US + RF"
|
||||
contenido: "price_alerts"
|
||||
modulo: "OQI-003"
|
||||
- tipo: "ET + US + RF"
|
||||
contenido: "refunds"
|
||||
modulo: "OQI-005"
|
||||
- tipo: "ET + US"
|
||||
contenido: "course_tags, instructors"
|
||||
modulo: "OQI-002"
|
||||
- tipo: "ET + US"
|
||||
contenido: "agent_executions"
|
||||
modulo: "OQI-004"
|
||||
- tipo: "ET"
|
||||
contenido: "prediction_overlays, llm_signals"
|
||||
modulo: "OQI-006"
|
||||
- tipo: "ET"
|
||||
contenido: "portfolio_snapshots"
|
||||
modulo: "OQI-008"
|
||||
total_definiciones: 8
|
||||
esfuerzo: "15h"
|
||||
estado: PENDIENTE
|
||||
|
||||
# --- INVENTARIOS DESACTUALIZADOS ---
|
||||
|
||||
- id: "GAP-DOC-P2-002"
|
||||
tipo: "INVENTARIO_DESACTUALIZADO"
|
||||
descripcion: "DATABASE_INVENTORY.yml no refleja estado real (81 vs 100 tablas)"
|
||||
archivo: "orchestration/inventarios/DATABASE_INVENTORY.yml"
|
||||
discrepancia: "19 tablas no registradas"
|
||||
esfuerzo: "3h"
|
||||
estado: RESUELTO
|
||||
resuelto_en: "2026-02-05"
|
||||
resuelto_por: "Claude Code (Opus 4.6)"
|
||||
evidencia: "DATABASE_INVENTORY.yml actualizado a v2.0.0 con 100 tablas"
|
||||
|
||||
- id: "GAP-DOC-P2-003"
|
||||
tipo: "INVENTARIO_DESACTUALIZADO"
|
||||
descripcion: "DDL-COMPLETE-MATRIX.yml incompleto (93 vs 100 tablas)"
|
||||
archivo: "orchestration/analisis/coherencia/DDL-COMPLETE-MATRIX.yml"
|
||||
discrepancia: "7 tablas no registradas"
|
||||
esfuerzo: "2h"
|
||||
estado: RESUELTO
|
||||
resuelto_en: "2026-02-05"
|
||||
resuelto_por: "Claude Code (Opus 4.6)"
|
||||
evidencia: "DDL-COMPLETE-MATRIX.yml actualizado a v2.0.0 con 100 tablas, 11 schemas"
|
||||
|
||||
# --- NAMING INCONSISTENCIES ---
|
||||
|
||||
- id: "GAP-NAME-P2-001"
|
||||
tipo: "NOMENCLATURA_INCONSISTENTE"
|
||||
descripcion: "asset_type vs asset_class para mismo concepto"
|
||||
tablas:
|
||||
- "market_data.tickers usa 'asset_type'"
|
||||
- "trading.symbols usa 'asset_class'"
|
||||
resolucion: "Estandarizar a 'asset_class' (mas descriptivo)"
|
||||
esfuerzo: "1h"
|
||||
estado: PENDIENTE
|
||||
|
||||
# --- SERVICES FALTANTES ---
|
||||
|
||||
- id: "GAP-SVC-P2-001"
|
||||
tipo: "SERVICE_FALTANTE"
|
||||
descripcion: "audit schema completo sin servicios backend (7 tablas)"
|
||||
schema: audit
|
||||
tablas: 7
|
||||
servicios_existentes: 0
|
||||
esfuerzo: "32h"
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: "GAP-SVC-P2-002"
|
||||
tipo: "SERVICE_FALTANTE"
|
||||
descripcion: "market_data sin servicio completo de OHLCV"
|
||||
schema: market_data
|
||||
tablas_afectadas: ["ohlcv_5m", "ohlcv_15m"]
|
||||
esfuerzo: "16h"
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: "GAP-SVC-P2-003"
|
||||
tipo: "SERVICE_FALTANTE"
|
||||
descripcion: "currency_exchange_rates sin servicio de conversion"
|
||||
schema: financial
|
||||
tabla: currency_exchange_rates
|
||||
esfuerzo: "16h"
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: "GAP-SVC-P2-004"
|
||||
tipo: "SERVICE_INCOMPLETO"
|
||||
descripcion: "bots.service.ts solo 60% implementado"
|
||||
schema: trading
|
||||
tabla: bots
|
||||
faltante: "Operaciones CRUD completas, WebSocket monitoring"
|
||||
esfuerzo: "16h"
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: "GAP-SVC-P2-005"
|
||||
tipo: "SERVICE_FALTANTE"
|
||||
descripcion: "risk assessment service no conectado"
|
||||
schema: investment
|
||||
tabla: risk_questionnaire
|
||||
esfuerzo: "12h"
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: "GAP-SVC-P2-006"
|
||||
tipo: "SERVICE_FALTANTE"
|
||||
descripcion: "feature_flags sin integracion backend"
|
||||
schema: feature_flags
|
||||
esfuerzo: "8h"
|
||||
estado: PENDIENTE
|
||||
|
||||
# --- DOCUMENTACION OBSOLETA ---
|
||||
|
||||
- id: "GAP-PURGE-P2-001"
|
||||
tipo: "DOC_OBSOLETA"
|
||||
descripcion: "Documentacion obsoleta pendiente de purga"
|
||||
archivos:
|
||||
- "docs/_archive/04-fase-backlog/ (links rotos)"
|
||||
- "docs/_archive/00-notas/NOTA-DISCREPANCIA-PUERTOS-2025-12-08.md (resuelta)"
|
||||
- "orchestration/analisis/coherencia/COHERENCE-BASELINE-2026-01-28.md (superseded)"
|
||||
esfuerzo: "1h"
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: "GAP-PURGE-P2-002"
|
||||
tipo: "TAREAS_SIN_ARCHIVAR"
|
||||
descripcion: "Tareas antiguas en carpetas de fecha sin archivar completamente"
|
||||
carpetas: ["2026-01-25", "2026-01-27"]
|
||||
esfuerzo: "2h"
|
||||
estado: PENDIENTE
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# P3 - MENORES (optimizacion y mejoras)
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
gaps_p3:
|
||||
|
||||
- id: "GAP-IDX-P3-001"
|
||||
tipo: "INDEX_FALTANTE"
|
||||
descripcion: "Indices compuestos faltantes para queries frecuentes"
|
||||
tablas_afectadas: ["trading.price_alerts", "education.instructors"]
|
||||
esfuerzo: "2h"
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: "GAP-DEL-P3-001"
|
||||
tipo: "ON_DELETE_REVIEW"
|
||||
descripcion: "financial.wallets usa ON DELETE RESTRICT en FK a users"
|
||||
impacto: "Impide eliminacion de usuarios con wallet"
|
||||
resolucion: "Documentar como decision arquitectural o cambiar a SOFT DELETE"
|
||||
esfuerzo: "1h"
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: "GAP-ORPHAN-P3-001"
|
||||
tipo: "TABLA_SUBUTILIZADA"
|
||||
descripcion: "market_data.staging tabla ETL posiblemente huerfana"
|
||||
impacto: "Solo usada por data-service (20% implementado)"
|
||||
esfuerzo: "0.5h"
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: "GAP-ORPHAN-P3-002"
|
||||
tipo: "TABLA_SUBUTILIZADA"
|
||||
descripcion: "auth.rate_limiting_config posiblemente no usado (config hardcoded)"
|
||||
impacto: "Tabla existe pero middleware puede usar config estatica"
|
||||
esfuerzo: "0.5h"
|
||||
estado: PENDIENTE
|
||||
|
||||
- id: "GAP-ARCH-P3-001"
|
||||
tipo: "DECISION_ARQUITECTURAL"
|
||||
descripcion: "trading.bots.strategy_type es VARCHAR, no referencia investment.trading_agent"
|
||||
impacto: "Acoplamiento debil entre bots y agentes de inversion"
|
||||
resolucion: "Evaluar si vincular o mantener separado"
|
||||
esfuerzo: "1h"
|
||||
estado: PENDIENTE
|
||||
@ -0,0 +1,777 @@
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# PLAN-FASES-DETALLADO.yml
|
||||
# Trading Platform - Validacion Integral Modelado BD
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
version: "1.0.0"
|
||||
fecha: "2026-02-05"
|
||||
tarea: "TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD"
|
||||
metodologia: CAPVED
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# FASE 1: ANALISIS Y PLANIFICACION (COMPLETADA)
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
fase_1:
|
||||
id: "FASE-1"
|
||||
nombre: "Analisis y Planificacion"
|
||||
estado: COMPLETADA
|
||||
fecha_inicio: "2026-02-05"
|
||||
fecha_fin: "2026-02-05"
|
||||
entregables:
|
||||
- "ANALISIS-MAESTRO.md"
|
||||
- "PLAN-FASES-DETALLADO.yml (este archivo)"
|
||||
- "GAPS-CONSOLIDADO.yml"
|
||||
resumen:
|
||||
schemas_analizados: 11
|
||||
tablas_identificadas: 100
|
||||
tablas_no_documentadas: 19
|
||||
errores_criticos: 1
|
||||
conflictos_enum: 3
|
||||
relaciones_debiles: 4
|
||||
duplicaciones: 1
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# FASE 2: VALIDACION DE ESQUEMAS Y OBJETOS DDL
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
fase_2:
|
||||
id: "FASE-2"
|
||||
nombre: "Validacion de Esquemas y Objetos DDL"
|
||||
estado: PENDING
|
||||
esfuerzo_total: "30h"
|
||||
esfuerzo_paralelo: "12h"
|
||||
dependencias: ["FASE-1"]
|
||||
|
||||
subtarea_2_1:
|
||||
id: "ST-2.1"
|
||||
nombre: "Correccion de Errores Criticos DDL"
|
||||
prioridad: P0
|
||||
esfuerzo: "1h"
|
||||
paralelizable: false
|
||||
dependencias: []
|
||||
|
||||
capved:
|
||||
contexto: "price_alerts.sql tiene FK que referencia auth.user_profiles(id) en lugar de auth.users(id)"
|
||||
analisis: "Error en linea 15 de 11-price_alerts.sql impide creacion de tabla"
|
||||
planificacion: "Modificar referencia FK, recrear BD en WSL para verificar"
|
||||
ejecucion: "Editar archivo SQL"
|
||||
validacion: "Ejecutar DDL completo, verificar tabla se crea sin errores"
|
||||
documentacion: "Registrar correccion en changelog de la tarea"
|
||||
|
||||
tareas:
|
||||
- id: "2.1.1"
|
||||
nombre: "Corregir FK price_alerts"
|
||||
archivo: "apps/database/ddl/schemas/trading/tables/11-price_alerts.sql"
|
||||
accion: "Cambiar auth.user_profiles(id) -> auth.users(id)"
|
||||
esfuerzo: "0.5h"
|
||||
prioridad: P0
|
||||
dependencias: []
|
||||
|
||||
- id: "2.1.2"
|
||||
nombre: "Verificar creacion tabla post-correccion"
|
||||
accion: "Ejecutar DDL en WSL, verificar tabla creada"
|
||||
esfuerzo: "0.5h"
|
||||
prioridad: P0
|
||||
dependencias: ["2.1.1"]
|
||||
|
||||
subtarea_2_2:
|
||||
id: "ST-2.2"
|
||||
nombre: "Validacion Schema por Schema"
|
||||
prioridad: P1
|
||||
esfuerzo: "19.5h"
|
||||
paralelizable: true
|
||||
dependencias: ["ST-2.1"]
|
||||
|
||||
capved_template:
|
||||
contexto: "Schema {name} tiene {ddl_count} tablas DDL, {inv_count} documentadas"
|
||||
analisis: "Leer cada SQL, comparar con DATABASE_INVENTORY.yml"
|
||||
planificacion: "Crear entradas para tablas faltantes en inventario"
|
||||
ejecucion: "Actualizar DATABASE_INVENTORY.yml"
|
||||
validacion: "Verificar coherencia post-actualizacion"
|
||||
documentacion: "Registrar cambios"
|
||||
|
||||
tareas:
|
||||
- id: "2.2.1"
|
||||
nombre: "Validar schema auth"
|
||||
schema: auth
|
||||
tablas_ddl: 13
|
||||
tablas_inventario: 10
|
||||
gap: 3
|
||||
tablas_faltantes: ["notifications", "user_push_tokens", "rate_limiting_config"]
|
||||
esfuerzo: "2h"
|
||||
paralelizable: true
|
||||
|
||||
- id: "2.2.2"
|
||||
nombre: "Validar schema trading"
|
||||
schema: trading
|
||||
tablas_ddl: 13
|
||||
tablas_inventario: 11
|
||||
gap: 2
|
||||
tablas_faltantes: ["drawing_tools", "drawing_templates"]
|
||||
esfuerzo: "2h"
|
||||
paralelizable: true
|
||||
|
||||
- id: "2.2.3"
|
||||
nombre: "Validar schema education"
|
||||
schema: education
|
||||
tablas_ddl: 19
|
||||
tablas_inventario: 12
|
||||
gap: 7
|
||||
tablas_faltantes:
|
||||
- "instructors"
|
||||
- "course_tags"
|
||||
- "course_tag_assignments"
|
||||
- "review_helpful_votes"
|
||||
- "user_activity_log"
|
||||
- "course_reviews"
|
||||
- "progress"
|
||||
esfuerzo: "4h"
|
||||
paralelizable: true
|
||||
nota: "Schema con peor coherencia (63%)"
|
||||
|
||||
- id: "2.2.4"
|
||||
nombre: "Validar schema financial"
|
||||
schema: financial
|
||||
tablas_ddl: 11
|
||||
tablas_inventario: 9
|
||||
gap: 2
|
||||
tablas_faltantes: ["refunds", "currency_exchange_rates"]
|
||||
esfuerzo: "2h"
|
||||
paralelizable: true
|
||||
|
||||
- id: "2.2.5"
|
||||
nombre: "Validar schema investment"
|
||||
schema: investment
|
||||
tablas_ddl: 10
|
||||
tablas_inventario: 8
|
||||
gap: 2
|
||||
tablas_faltantes: ["agent_executions", "risk_questionnaire"]
|
||||
esfuerzo: "2h"
|
||||
paralelizable: true
|
||||
|
||||
- id: "2.2.6"
|
||||
nombre: "Validar schema ml"
|
||||
schema: ml
|
||||
tablas_ddl: 12
|
||||
tablas_inventario: 10
|
||||
gap: 2
|
||||
tablas_faltantes: ["llm_signals", "prediction_overlays"]
|
||||
esfuerzo: "2h"
|
||||
paralelizable: true
|
||||
|
||||
- id: "2.2.7"
|
||||
nombre: "Validar schema llm"
|
||||
schema: llm
|
||||
tablas_ddl: 5
|
||||
tablas_inventario: 4
|
||||
gap: 1
|
||||
tablas_faltantes: ["user_preferences"]
|
||||
esfuerzo: "1h"
|
||||
paralelizable: true
|
||||
|
||||
- id: "2.2.8"
|
||||
nombre: "Validar schema audit"
|
||||
schema: audit
|
||||
tablas_ddl: 7
|
||||
tablas_inventario: 7
|
||||
gap: 0
|
||||
esfuerzo: "0.5h"
|
||||
paralelizable: true
|
||||
nota: "Ya 100% documentado, solo verificar"
|
||||
|
||||
- id: "2.2.9"
|
||||
nombre: "Validar schema portfolio"
|
||||
schema: portfolio
|
||||
tablas_ddl: 5
|
||||
tablas_inventario: 4
|
||||
gap: 1
|
||||
tablas_faltantes: ["portfolio_snapshots"]
|
||||
esfuerzo: "1h"
|
||||
paralelizable: true
|
||||
|
||||
- id: "2.2.10"
|
||||
nombre: "Validar schema market_data"
|
||||
schema: market_data
|
||||
tablas_ddl: 4
|
||||
tablas_inventario: 3
|
||||
gap: 1
|
||||
tablas_faltantes: ["staging"]
|
||||
esfuerzo: "1h"
|
||||
paralelizable: true
|
||||
|
||||
- id: "2.2.11"
|
||||
nombre: "Validar schema feature_flags"
|
||||
schema: feature_flags
|
||||
tablas_ddl: 1
|
||||
tablas_inventario: 0
|
||||
gap: 1
|
||||
tablas_faltantes: ["flags"]
|
||||
esfuerzo: "2h"
|
||||
paralelizable: true
|
||||
nota: "Schema completo sin documentar - peor caso (0%)"
|
||||
|
||||
subtarea_2_3:
|
||||
id: "ST-2.3"
|
||||
nombre: "Resolucion de Conflictos de Enums"
|
||||
prioridad: P1
|
||||
esfuerzo: "5h"
|
||||
paralelizable: false
|
||||
dependencias: ["ST-2.2"]
|
||||
|
||||
tareas:
|
||||
- id: "2.3.1"
|
||||
nombre: "Resolver CONF-E1: transaction_type duplicado"
|
||||
conflicto: "financial.transaction_type vs investment.transaction_type"
|
||||
accion: "Verificar migracion existe, crear si falta"
|
||||
resolucion: "Renombrar a wallet_transaction_type / investment_transaction_type"
|
||||
esfuerzo: "2h"
|
||||
dependencias: ["2.2.4", "2.2.5"]
|
||||
|
||||
- id: "2.3.2"
|
||||
nombre: "Resolver CONF-E2: risk_profile duplicado"
|
||||
conflicto: "investment.risk_profile vs portfolio.risk_profile"
|
||||
accion: "Crear migracion para consolidar"
|
||||
resolucion: "Mover a public.risk_profile"
|
||||
esfuerzo: "2h"
|
||||
dependencias: ["2.2.5", "2.2.9"]
|
||||
|
||||
- id: "2.3.3"
|
||||
nombre: "Resolver CONF-E3: timeframe incompleto"
|
||||
conflicto: "market_data.timeframe falta valor '1M'"
|
||||
accion: "Agregar '1M' a market_data, completar migracion a public"
|
||||
resolucion: "Eliminar enums deprecados trading/market_data"
|
||||
esfuerzo: "1h"
|
||||
dependencias: ["2.2.10"]
|
||||
|
||||
subtarea_2_4:
|
||||
id: "ST-2.4"
|
||||
nombre: "Resolucion de Duplicaciones Funcionales"
|
||||
prioridad: P1
|
||||
esfuerzo: "4h"
|
||||
paralelizable: false
|
||||
dependencias: ["ST-2.2"]
|
||||
|
||||
tareas:
|
||||
- id: "2.4.1"
|
||||
nombre: "Analizar consolidacion trading.symbols vs market_data.tickers"
|
||||
conflicto: "DUP-1: Catalogo de simbolos duplicado"
|
||||
accion: "Analizar campos, proponer plan de consolidacion"
|
||||
resolucion: "Plan de migracion con FK de market_data -> trading.symbols"
|
||||
esfuerzo: "4h"
|
||||
dependencias: ["2.2.2", "2.2.10"]
|
||||
entregable: "PLAN-CONSOLIDACION-SYMBOLS.md"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# FASE 3: AUDITORIA DE INTEGRIDAD Y COHERENCIA
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
fase_3:
|
||||
id: "FASE-3"
|
||||
nombre: "Auditoria de Integridad y Coherencia"
|
||||
estado: PENDING
|
||||
esfuerzo_total: "37h"
|
||||
esfuerzo_paralelo: "18h"
|
||||
dependencias: ["FASE-2"]
|
||||
|
||||
subtarea_3_1:
|
||||
id: "ST-3.1"
|
||||
nombre: "Validacion de Foreign Keys"
|
||||
prioridad: P1
|
||||
esfuerzo: "11h"
|
||||
paralelizable: true
|
||||
dependencias: ["ST-2.1", "ST-2.2"]
|
||||
|
||||
tareas:
|
||||
- id: "3.1.1"
|
||||
nombre: "Validar FKs schema auth"
|
||||
scope: "auth -> auth (internal)"
|
||||
tablas: 13
|
||||
esfuerzo: "1h"
|
||||
paralelizable: true
|
||||
|
||||
- id: "3.1.2"
|
||||
nombre: "Validar FKs schema trading"
|
||||
scope: "trading -> auth, trading.symbols"
|
||||
tablas: 13
|
||||
esfuerzo: "1.5h"
|
||||
paralelizable: true
|
||||
|
||||
- id: "3.1.3"
|
||||
nombre: "Validar FKs schema education"
|
||||
scope: "education -> auth, education (internal)"
|
||||
tablas: 19
|
||||
esfuerzo: "2h"
|
||||
paralelizable: true
|
||||
|
||||
- id: "3.1.4"
|
||||
nombre: "Validar FKs schema financial"
|
||||
scope: "financial -> auth, financial (internal)"
|
||||
tablas: 11
|
||||
esfuerzo: "1.5h"
|
||||
paralelizable: true
|
||||
|
||||
- id: "3.1.5"
|
||||
nombre: "Validar FKs schema investment"
|
||||
scope: "investment -> auth, investment (internal)"
|
||||
tablas: 10
|
||||
esfuerzo: "1h"
|
||||
paralelizable: true
|
||||
|
||||
- id: "3.1.6"
|
||||
nombre: "Validar FKs schemas menores"
|
||||
scope: "ml, llm, portfolio, audit, market_data, feature_flags"
|
||||
tablas: 29
|
||||
esfuerzo: "2h"
|
||||
paralelizable: true
|
||||
|
||||
- id: "3.1.7"
|
||||
nombre: "Documentar relaciones faltantes (WEAK-1 a WEAK-4)"
|
||||
scope: "Cross-schema relationships"
|
||||
accion: "Proponer nuevas FKs o documentar decision de no vincular"
|
||||
esfuerzo: "2h"
|
||||
dependencias: ["3.1.1", "3.1.2", "3.1.3", "3.1.4", "3.1.5", "3.1.6"]
|
||||
entregable: "FK-VALIDATION-MATRIX.yml"
|
||||
|
||||
subtarea_3_2:
|
||||
id: "ST-3.2"
|
||||
nombre: "Validacion de Indices"
|
||||
prioridad: P2
|
||||
esfuerzo: "6h"
|
||||
dependencias: ["ST-3.1"]
|
||||
|
||||
tareas:
|
||||
- id: "3.2.1"
|
||||
nombre: "Inventariar todos los indices"
|
||||
esfuerzo: "3h"
|
||||
entregable: "INDEX-INVENTORY.yml"
|
||||
|
||||
- id: "3.2.2"
|
||||
nombre: "Identificar queries criticas sin indice"
|
||||
esfuerzo: "2h"
|
||||
|
||||
- id: "3.2.3"
|
||||
nombre: "Proponer indices faltantes"
|
||||
esfuerzo: "1h"
|
||||
entregable: "MISSING-INDEXES.yml"
|
||||
|
||||
subtarea_3_3:
|
||||
id: "ST-3.3"
|
||||
nombre: "Validacion de Constraints"
|
||||
prioridad: P2
|
||||
esfuerzo: "6h"
|
||||
paralelizable: true
|
||||
dependencias: ["ST-2.2"]
|
||||
|
||||
tareas:
|
||||
- id: "3.3.1"
|
||||
nombre: "Validar CHECK constraints"
|
||||
esfuerzo: "3h"
|
||||
|
||||
- id: "3.3.2"
|
||||
nombre: "Validar UNIQUE constraints"
|
||||
esfuerzo: "1h"
|
||||
|
||||
- id: "3.3.3"
|
||||
nombre: "Validar NOT NULL criticos"
|
||||
esfuerzo: "1h"
|
||||
|
||||
- id: "3.3.4"
|
||||
nombre: "Validar DEFAULT values"
|
||||
esfuerzo: "1h"
|
||||
|
||||
subtarea_3_4:
|
||||
id: "ST-3.4"
|
||||
nombre: "Validacion de Funciones y Triggers"
|
||||
prioridad: P2
|
||||
esfuerzo: "6h"
|
||||
dependencias: ["ST-2.2"]
|
||||
|
||||
tareas:
|
||||
- id: "3.4.1"
|
||||
nombre: "Inventariar 17+ funciones"
|
||||
esfuerzo: "2h"
|
||||
entregable: "FUNCTIONS-INVENTORY.yml"
|
||||
|
||||
- id: "3.4.2"
|
||||
nombre: "Validar funciones en triggers"
|
||||
esfuerzo: "1h"
|
||||
|
||||
- id: "3.4.3"
|
||||
nombre: "Identificar funciones huerfanas"
|
||||
esfuerzo: "1h"
|
||||
|
||||
- id: "3.4.4"
|
||||
nombre: "Validar triggers updated_at"
|
||||
esfuerzo: "1h"
|
||||
|
||||
- id: "3.4.5"
|
||||
nombre: "Validar triggers auditoria"
|
||||
esfuerzo: "1h"
|
||||
|
||||
subtarea_3_5:
|
||||
id: "ST-3.5"
|
||||
nombre: "Validacion de Relaciones Inter-Schema"
|
||||
prioridad: P1
|
||||
esfuerzo: "8h"
|
||||
dependencias: ["ST-3.1"]
|
||||
|
||||
tareas:
|
||||
- id: "3.5.1"
|
||||
nombre: "Mapear dependencias auth -> todos"
|
||||
esfuerzo: "2h"
|
||||
|
||||
- id: "3.5.2"
|
||||
nombre: "Identificar ciclos de dependencia"
|
||||
esfuerzo: "1h"
|
||||
|
||||
- id: "3.5.3"
|
||||
nombre: "Validar ON DELETE behavior"
|
||||
esfuerzo: "2h"
|
||||
nota: "financial.wallets usa RESTRICT, revisar implicaciones"
|
||||
|
||||
- id: "3.5.4"
|
||||
nombre: "Documentar diagrama ER inter-schema"
|
||||
esfuerzo: "3h"
|
||||
entregable: "ER-DIAGRAM-INTER-SCHEMA.md"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# FASE 4: COHERENCIA DDL-BACKEND
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
fase_4:
|
||||
id: "FASE-4"
|
||||
nombre: "Coherencia DDL-Backend"
|
||||
estado: PENDING
|
||||
esfuerzo_total: "45.5h"
|
||||
esfuerzo_paralelo: "20h"
|
||||
dependencias: ["FASE-2"]
|
||||
|
||||
subtarea_4_1:
|
||||
id: "ST-4.1"
|
||||
nombre: "Mapeo Tablas -> Entities"
|
||||
prioridad: P1
|
||||
esfuerzo: "16.5h"
|
||||
paralelizable: true
|
||||
|
||||
tareas:
|
||||
- id: "4.1.1"
|
||||
schema: auth
|
||||
tablas: 13
|
||||
entities_existentes: 10
|
||||
gap: 3
|
||||
esfuerzo: "2h"
|
||||
|
||||
- id: "4.1.2"
|
||||
schema: trading
|
||||
tablas: 13
|
||||
entities_existentes: 10
|
||||
gap: 3
|
||||
esfuerzo: "2h"
|
||||
|
||||
- id: "4.1.3"
|
||||
schema: education
|
||||
tablas: 19
|
||||
entities_existentes: 12
|
||||
gap: 7
|
||||
esfuerzo: "3h"
|
||||
|
||||
- id: "4.1.4"
|
||||
schema: financial
|
||||
tablas: 11
|
||||
entities_existentes: 9
|
||||
gap: 2
|
||||
esfuerzo: "1.5h"
|
||||
|
||||
- id: "4.1.5"
|
||||
schema: investment
|
||||
tablas: 10
|
||||
entities_existentes: 7
|
||||
gap: 3
|
||||
esfuerzo: "1.5h"
|
||||
|
||||
- id: "4.1.6"
|
||||
schema: ml
|
||||
tablas: 12
|
||||
entities_existentes: 10
|
||||
gap: 2
|
||||
esfuerzo: "1h"
|
||||
|
||||
- id: "4.1.7"
|
||||
schema: llm
|
||||
tablas: 5
|
||||
entities_existentes: 4
|
||||
gap: 1
|
||||
esfuerzo: "0.5h"
|
||||
|
||||
- id: "4.1.8"
|
||||
schema: portfolio
|
||||
tablas: 5
|
||||
entities_existentes: 3
|
||||
gap: 2
|
||||
esfuerzo: "1h"
|
||||
|
||||
- id: "4.1.9"
|
||||
schema: market_data
|
||||
tablas: 4
|
||||
entities_existentes: 1
|
||||
gap: 3
|
||||
esfuerzo: "1.5h"
|
||||
|
||||
- id: "4.1.10"
|
||||
schema: audit
|
||||
tablas: 7
|
||||
entities_existentes: 0
|
||||
gap: 7
|
||||
esfuerzo: "2h"
|
||||
|
||||
- id: "4.1.11"
|
||||
schema: feature_flags
|
||||
tablas: 1
|
||||
entities_existentes: 0
|
||||
gap: 1
|
||||
esfuerzo: "0.5h"
|
||||
|
||||
subtarea_4_2:
|
||||
id: "ST-4.2"
|
||||
nombre: "Mapeo Entities -> Services"
|
||||
prioridad: P1
|
||||
esfuerzo: "6h"
|
||||
dependencias: ["ST-4.1"]
|
||||
|
||||
subtarea_4_3:
|
||||
id: "ST-4.3"
|
||||
nombre: "Mapeo Services -> Controllers"
|
||||
prioridad: P1
|
||||
esfuerzo: "4h"
|
||||
dependencias: ["ST-4.2"]
|
||||
|
||||
subtarea_4_4:
|
||||
id: "ST-4.4"
|
||||
nombre: "Consolidacion de Gaps Backend"
|
||||
prioridad: P1
|
||||
esfuerzo: "7h"
|
||||
dependencias: ["ST-4.3"]
|
||||
entregable: "BACKEND-GAPS-MATRIX.yml"
|
||||
|
||||
subtarea_4_5:
|
||||
id: "ST-4.5"
|
||||
nombre: "Plan de Entities Faltantes"
|
||||
prioridad: P2
|
||||
esfuerzo: "12h"
|
||||
dependencias: ["ST-4.4"]
|
||||
entregable: "ENTITIES-CREATION-PLAN.yml"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# FASE 5: PURGA Y REORGANIZACION DOCUMENTAL
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
fase_5:
|
||||
id: "FASE-5"
|
||||
nombre: "Purga y Reorganizacion Documental"
|
||||
estado: PENDING
|
||||
esfuerzo_total: "38.75h"
|
||||
esfuerzo_paralelo: "15h"
|
||||
dependencias: ["FASE-2", "FASE-4"]
|
||||
|
||||
subtarea_5_1:
|
||||
id: "ST-5.1"
|
||||
nombre: "Purgar Documentacion Obsoleta"
|
||||
prioridad: P2
|
||||
esfuerzo: "3.25h"
|
||||
archivos_a_purgar:
|
||||
- path: "docs/_archive/04-fase-backlog/"
|
||||
accion: "ELIMINAR"
|
||||
razon: "Links rotos, deprecado"
|
||||
- path: "docs/_archive/00-notas/NOTA-DISCREPANCIA-PUERTOS-2025-12-08.md"
|
||||
accion: "ELIMINAR"
|
||||
razon: "Resuelto 2026-01-07"
|
||||
- path: "orchestration/analisis/coherencia/COHERENCE-BASELINE-2026-01-28.md"
|
||||
accion: "MOVER a _archive"
|
||||
razon: "Superseded por version actual"
|
||||
- path: "orchestration/tareas/2026-01-25/"
|
||||
accion: "VERIFICAR y ARCHIVAR"
|
||||
razon: "Carpeta fecha antigua"
|
||||
- path: "orchestration/tareas/2026-01-27/"
|
||||
accion: "VERIFICAR y ARCHIVAR"
|
||||
razon: "Carpeta fecha antigua"
|
||||
|
||||
subtarea_5_2:
|
||||
id: "ST-5.2"
|
||||
nombre: "Integrar Definiciones Faltantes"
|
||||
prioridad: P1
|
||||
esfuerzo: "15h"
|
||||
paralelizable: true
|
||||
|
||||
definiciones:
|
||||
- id: "5.2.1"
|
||||
tipo: "ET + RF"
|
||||
contenido: "feature_flags schema"
|
||||
modulo: "Transversal"
|
||||
esfuerzo: "3h"
|
||||
|
||||
- id: "5.2.2"
|
||||
tipo: "ET + US"
|
||||
contenido: "drawing_tools y drawing_templates"
|
||||
modulo: "OQI-003"
|
||||
esfuerzo: "2h"
|
||||
|
||||
- id: "5.2.3"
|
||||
tipo: "US + RF"
|
||||
contenido: "price_alerts"
|
||||
modulo: "OQI-003"
|
||||
esfuerzo: "2h"
|
||||
|
||||
- id: "5.2.4"
|
||||
tipo: "ET + US + RF"
|
||||
contenido: "refunds y currency_exchange"
|
||||
modulo: "OQI-005"
|
||||
esfuerzo: "2h"
|
||||
|
||||
- id: "5.2.5"
|
||||
tipo: "ET + US"
|
||||
contenido: "course_tags e instructors"
|
||||
modulo: "OQI-002"
|
||||
esfuerzo: "2h"
|
||||
|
||||
- id: "5.2.6"
|
||||
tipo: "ET + US"
|
||||
contenido: "agent_executions"
|
||||
modulo: "OQI-004"
|
||||
esfuerzo: "2h"
|
||||
|
||||
- id: "5.2.7"
|
||||
tipo: "ET"
|
||||
contenido: "prediction_overlays y llm_signals"
|
||||
modulo: "OQI-006"
|
||||
esfuerzo: "1h"
|
||||
|
||||
- id: "5.2.8"
|
||||
tipo: "ET"
|
||||
contenido: "portfolio_snapshots"
|
||||
modulo: "OQI-008"
|
||||
esfuerzo: "1h"
|
||||
|
||||
subtarea_5_3:
|
||||
id: "ST-5.3"
|
||||
nombre: "Actualizar Inventarios"
|
||||
prioridad: P1
|
||||
esfuerzo: "10h"
|
||||
dependencias: ["ST-2.2", "ST-4.4"]
|
||||
|
||||
inventarios:
|
||||
- id: "5.3.1"
|
||||
archivo: "DATABASE_INVENTORY.yml"
|
||||
accion: "Actualizar 81 -> 100 tablas, agregar feature_flags schema"
|
||||
esfuerzo: "3h"
|
||||
|
||||
- id: "5.3.2"
|
||||
archivo: "BACKEND_INVENTORY.yml"
|
||||
accion: "Actualizar con gaps de Fase 4"
|
||||
esfuerzo: "2h"
|
||||
|
||||
- id: "5.3.3"
|
||||
archivo: "MASTER_INVENTORY.yml"
|
||||
accion: "Sincronizar totales"
|
||||
esfuerzo: "1h"
|
||||
|
||||
- id: "5.3.4"
|
||||
archivo: "DDL-COMPLETE-MATRIX.yml"
|
||||
accion: "Actualizar 93 -> 100 tablas"
|
||||
esfuerzo: "2h"
|
||||
|
||||
- id: "5.3.5"
|
||||
archivo: "GAPS-TRACKING.yml"
|
||||
accion: "Agregar gaps nuevos identificados"
|
||||
esfuerzo: "2h"
|
||||
|
||||
subtarea_5_4:
|
||||
id: "ST-5.4"
|
||||
nombre: "Actualizar Documentacion de Modulos OQI"
|
||||
prioridad: P2
|
||||
esfuerzo: "10.5h"
|
||||
paralelizable: true
|
||||
dependencias: ["ST-5.2"]
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# FASE 6: PLAN MAESTRO DE REMEDIACION
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
fase_6:
|
||||
id: "FASE-6"
|
||||
nombre: "Plan Maestro de Remediacion"
|
||||
estado: PENDING
|
||||
esfuerzo_total: "22.5h"
|
||||
dependencias: ["FASE-3", "FASE-4", "FASE-5"]
|
||||
|
||||
subtarea_6_1:
|
||||
id: "ST-6.1"
|
||||
nombre: "Priorizar Acciones por Impacto"
|
||||
esfuerzo: "5h"
|
||||
|
||||
subtarea_6_2:
|
||||
id: "ST-6.2"
|
||||
nombre: "Definir Orden de Ejecucion con Dependencias"
|
||||
esfuerzo: "6h"
|
||||
|
||||
subtarea_6_3:
|
||||
id: "ST-6.3"
|
||||
nombre: "Estimar Esfuerzo por Subtarea"
|
||||
esfuerzo: "3.5h"
|
||||
|
||||
subtarea_6_4:
|
||||
id: "ST-6.4"
|
||||
nombre: "Generar Roadmap Actualizado"
|
||||
esfuerzo: "8h"
|
||||
entregables:
|
||||
- "ROADMAP-MODELADO-ACTUALIZADO.yml"
|
||||
- "EXECUTION-PLAN-MODELADO.yml"
|
||||
- "REMEDIATION-CHECKLIST.md"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# RESUMEN EJECUTIVO
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
resumen:
|
||||
total_fases: 6
|
||||
total_subtareas: 24
|
||||
total_tareas_atomicas: 68
|
||||
esfuerzo_secuencial: "173.75h"
|
||||
esfuerzo_paralelo_estimado: "87.5h"
|
||||
|
||||
orden_ejecucion:
|
||||
inmediato:
|
||||
- "2.1.1: Corregir FK price_alerts (P0)"
|
||||
urgente:
|
||||
- "2.2.1-2.2.11: Documentar tablas faltantes"
|
||||
- "2.3.1-2.3.3: Resolver conflictos enums"
|
||||
- "5.3.1: Actualizar DATABASE_INVENTORY.yml"
|
||||
importante:
|
||||
- "3.1.1-3.1.7: Validar FKs"
|
||||
- "4.1.1-4.1.11: Mapeo tablas -> entities"
|
||||
- "5.1.1-5.1.5: Purgar docs obsoletas"
|
||||
planificado:
|
||||
- "3.2-3.5: Indices, constraints, funciones"
|
||||
- "4.2-4.5: Mapeo completo backend"
|
||||
- "5.2-5.4: Integrar definiciones faltantes"
|
||||
- "6.1-6.4: Plan maestro remediacion"
|
||||
|
||||
subagentes_recomendados:
|
||||
- id: "SA-DDL-1"
|
||||
rol: "Validador DDL Auth+Trading"
|
||||
tareas: ["2.2.1", "2.2.2", "3.1.1", "3.1.2"]
|
||||
- id: "SA-DDL-2"
|
||||
rol: "Validador DDL Education+Financial"
|
||||
tareas: ["2.2.3", "2.2.4", "3.1.3", "3.1.4"]
|
||||
- id: "SA-DDL-3"
|
||||
rol: "Validador DDL Investment+ML+Rest"
|
||||
tareas: ["2.2.5", "2.2.6", "2.2.7", "2.2.8", "2.2.9", "2.2.10", "2.2.11"]
|
||||
- id: "SA-BACKEND-1"
|
||||
rol: "Mapper Backend Auth+Trading+Education"
|
||||
tareas: ["4.1.1", "4.1.2", "4.1.3"]
|
||||
- id: "SA-BACKEND-2"
|
||||
rol: "Mapper Backend Financial+Investment+Rest"
|
||||
tareas: ["4.1.4", "4.1.5", "4.1.6", "4.1.7", "4.1.8", "4.1.9", "4.1.10", "4.1.11"]
|
||||
- id: "SA-DOCS-1"
|
||||
rol: "Documentador/Purga"
|
||||
tareas: ["5.1.1", "5.1.2", "5.1.3", "5.2.1", "5.2.2", "5.2.3", "5.2.4", "5.2.5", "5.2.6", "5.2.7", "5.2.8"]
|
||||
@ -0,0 +1,589 @@
|
||||
# ==============================================================================
|
||||
# ENTITIES CREATION PLAN
|
||||
# ==============================================================================
|
||||
# Task: TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD
|
||||
# Phase: 4 - Backend Architecture Analysis
|
||||
# Generated: 2026-02-05
|
||||
# Agent: Backend Architecture Specialist (Claude Opus 4.6)
|
||||
# ==============================================================================
|
||||
# This plan covers:
|
||||
# 1. Missing TypeScript interfaces (type_interface)
|
||||
# 2. Missing Row types (row_type) for DB mapping
|
||||
# 3. Missing repositories (where pattern is established)
|
||||
# 4. Missing services and controllers
|
||||
# ==============================================================================
|
||||
|
||||
metadata:
|
||||
project: trading-platform (OrbiQuant IA)
|
||||
backend_path: "apps/backend/src"
|
||||
architecture: "Express.js + Raw SQL (pg Pool)"
|
||||
entity_pattern: "TypeScript interfaces in modules/{module}/types/{module}.types.ts"
|
||||
row_type_pattern: "Interface with snake_case fields suffixed with 'Row'"
|
||||
repository_pattern: "Class in modules/{module}/repositories/{name}.repository.ts"
|
||||
date_generated: "2026-02-05"
|
||||
|
||||
# ==============================================================================
|
||||
# PRIORITY LEVELS
|
||||
# ==============================================================================
|
||||
# P0 (CRITICAL): Missing interface for table that has active service/controller
|
||||
# P1 (HIGH): Missing Row type for tables with active CRUD operations
|
||||
# P2 (MEDIUM): Missing Row types for tables with read operations
|
||||
# P3 (LOW): Missing types for Python-managed or internal-only tables
|
||||
# ==============================================================================
|
||||
|
||||
# ==============================================================================
|
||||
# PHASE 1: CRITICAL - Missing Type Interfaces (P0)
|
||||
# ==============================================================================
|
||||
# Tables that have NO TypeScript interface at all but need one.
|
||||
# Estimated effort: 2-4 hours total
|
||||
# ==============================================================================
|
||||
|
||||
phase_1_missing_interfaces:
|
||||
title: "Create Missing TypeScript Interfaces"
|
||||
priority: P0
|
||||
estimated_effort: "3 hours"
|
||||
total_items: 9
|
||||
|
||||
items:
|
||||
# --------------------------------------------------------------------------
|
||||
# trading.trades - HIGH IMPACT
|
||||
# --------------------------------------------------------------------------
|
||||
- id: ENT-001
|
||||
table: trading.trades
|
||||
ddl_file: "apps/database/ddl/schemas/trading/tables/07-trades.sql"
|
||||
target_file: "apps/backend/src/modules/trading/types/order.types.ts"
|
||||
action: ADD_INTERFACE
|
||||
priority: P0
|
||||
reason: "Active table for order execution tracking. Used by order.service.ts indirectly."
|
||||
interface_name: Trade
|
||||
columns:
|
||||
- { name: id, type: "string", ddl_type: "UUID" }
|
||||
- { name: orderId, type: "string", ddl_type: "UUID", fk: "trading.orders(id)" }
|
||||
- { name: positionId, type: "string | null", ddl_type: "UUID", fk: "trading.positions(id)" }
|
||||
- { name: executedPrice, type: "number", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: executedQuantity, type: "number", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: commission, type: "number", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: commissionAsset, type: "string", ddl_type: "VARCHAR(20)" }
|
||||
- { name: side, type: "OrderSide", ddl_type: "trading.order_side" }
|
||||
- { name: isMaker, type: "boolean", ddl_type: "BOOLEAN" }
|
||||
- { name: tradeSource, type: "string", ddl_type: "VARCHAR(50)" }
|
||||
- { name: externalTradeId, type: "string | null", ddl_type: "VARCHAR(100)" }
|
||||
- { name: executedAt, type: "Date", ddl_type: "TIMESTAMPTZ" }
|
||||
row_type_name: TradeRow
|
||||
dto_names:
|
||||
- CreateTradeDto
|
||||
dependencies: ["Order (order.types.ts)", "Position (MISSING - see ENT-002)"]
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# trading.positions - NEEDS DEDICATED INTERFACE
|
||||
# --------------------------------------------------------------------------
|
||||
- id: ENT-002
|
||||
table: trading.positions
|
||||
ddl_file: "apps/database/ddl/schemas/trading/tables/06-positions.sql"
|
||||
target_file: "apps/backend/src/modules/trading/types/order.types.ts"
|
||||
action: ADD_INTERFACE
|
||||
priority: P0
|
||||
reason: "Only PositionStatus enum exists. Full interface needed for 22-column table."
|
||||
interface_name: Position
|
||||
columns:
|
||||
- { name: id, type: "string", ddl_type: "UUID" }
|
||||
- { name: userId, type: "string", ddl_type: "UUID", fk: "auth.users(id)" }
|
||||
- { name: botId, type: "string | null", ddl_type: "UUID", fk: "trading.bots(id)" }
|
||||
- { name: symbolId, type: "string", ddl_type: "UUID", fk: "trading.symbols(id)" }
|
||||
- { name: side, type: "OrderSide", ddl_type: "trading.order_side" }
|
||||
- { name: status, type: "PositionStatus", ddl_type: "trading.position_status" }
|
||||
- { name: entryPrice, type: "number", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: currentPrice, type: "number | null", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: exitPrice, type: "number | null", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: quantity, type: "number", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: filledQuantity, type: "number", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: leverage, type: "number", ddl_type: "DECIMAL(5,2)" }
|
||||
- { name: stopLoss, type: "number | null", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: takeProfit, type: "number | null", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: trailingStopPercent, type: "number | null", ddl_type: "DECIMAL(5,2)" }
|
||||
- { name: unrealizedPnl, type: "number", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: realizedPnl, type: "number", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: commission, type: "number", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: isPaper, type: "boolean", ddl_type: "BOOLEAN" }
|
||||
- { name: openedAt, type: "Date", ddl_type: "TIMESTAMPTZ" }
|
||||
- { name: closedAt, type: "Date | null", ddl_type: "TIMESTAMPTZ" }
|
||||
- { name: createdAt, type: "Date", ddl_type: "TIMESTAMPTZ" }
|
||||
- { name: updatedAt, type: "Date", ddl_type: "TIMESTAMPTZ" }
|
||||
row_type_name: PositionRow
|
||||
dto_names:
|
||||
- CreatePositionDto
|
||||
- UpdatePositionDto
|
||||
- PositionFilters
|
||||
dependencies: ["OrderSide, PositionStatus (order.types.ts)", "Symbol (entity.types.ts)"]
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# investment.distribution_runs
|
||||
# --------------------------------------------------------------------------
|
||||
- id: ENT-003
|
||||
table: investment.distribution_runs
|
||||
ddl_file: "apps/database/ddl/schemas/investment/tables/09-distribution_runs.sql"
|
||||
target_file: "apps/backend/src/modules/investment/types/investment.types.ts"
|
||||
action: ADD_INTERFACE
|
||||
priority: P0
|
||||
reason: "System table needed for admin dashboard and batch monitoring."
|
||||
interface_name: DistributionRun
|
||||
columns:
|
||||
- { name: id, type: "string", ddl_type: "UUID" }
|
||||
- { name: run_date, type: "Date", ddl_type: "DATE" }
|
||||
- { name: status, type: "string", ddl_type: "VARCHAR(20)" }
|
||||
- { name: total_accounts_processed, type: "number", ddl_type: "INTEGER" }
|
||||
- { name: total_distributed, type: "number", ddl_type: "DECIMAL(18,2)" }
|
||||
- { name: total_fees, type: "number", ddl_type: "DECIMAL(18,2)" }
|
||||
- { name: started_at, type: "Date", ddl_type: "TIMESTAMPTZ" }
|
||||
- { name: completed_at, type: "Date | null", ddl_type: "TIMESTAMPTZ" }
|
||||
- { name: error_message, type: "string | null", ddl_type: "TEXT" }
|
||||
- { name: created_at, type: "Date", ddl_type: "TIMESTAMPTZ" }
|
||||
row_type_name: DistributionRunRow
|
||||
dependencies: []
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# investment.agent_executions
|
||||
# --------------------------------------------------------------------------
|
||||
- id: ENT-004
|
||||
table: investment.agent_executions
|
||||
ddl_file: "apps/database/ddl/schemas/investment/tables/10-agent_executions.sql"
|
||||
target_file: "apps/backend/src/modules/investment/types/investment.types.ts"
|
||||
action: ADD_INTERFACE
|
||||
priority: P0
|
||||
reason: "25-column table tracking trading agent executions. Critical for monitoring."
|
||||
interface_name: AgentExecution
|
||||
columns:
|
||||
- { name: id, type: "string", ddl_type: "UUID" }
|
||||
- { name: account_id, type: "string", ddl_type: "UUID" }
|
||||
- { name: trading_agent, type: "TradingAgent", ddl_type: "investment.trading_agent" }
|
||||
- { name: execution_date, type: "Date", ddl_type: "DATE" }
|
||||
- { name: starting_balance, type: "number", ddl_type: "DECIMAL(18,2)" }
|
||||
- { name: ending_balance, type: "number", ddl_type: "DECIMAL(18,2)" }
|
||||
- { name: pnl, type: "number", ddl_type: "DECIMAL(18,2)" }
|
||||
- { name: pnl_percentage, type: "number", ddl_type: "DECIMAL(8,4)" }
|
||||
- { name: trades_executed, type: "number", ddl_type: "INTEGER" }
|
||||
- { name: winning_trades, type: "number", ddl_type: "INTEGER" }
|
||||
- { name: losing_trades, type: "number", ddl_type: "INTEGER" }
|
||||
- { name: win_rate, type: "number | null", ddl_type: "DECIMAL(5,2)" }
|
||||
- { name: max_drawdown, type: "number | null", ddl_type: "DECIMAL(5,2)" }
|
||||
- { name: sharpe_ratio, type: "number | null", ddl_type: "DECIMAL(5,2)" }
|
||||
- { name: signals_received, type: "number", ddl_type: "INTEGER" }
|
||||
- { name: signals_acted_on, type: "number", ddl_type: "INTEGER" }
|
||||
- { name: model_version, type: "string | null", ddl_type: "VARCHAR(50)" }
|
||||
- { name: strategy_config, type: "Record<string, unknown>", ddl_type: "JSONB" }
|
||||
- { name: execution_log, type: "Record<string, unknown>", ddl_type: "JSONB" }
|
||||
- { name: risk_metrics, type: "Record<string, unknown>", ddl_type: "JSONB" }
|
||||
- { name: market_conditions, type: "Record<string, unknown> | null", ddl_type: "JSONB" }
|
||||
- { name: status, type: "string", ddl_type: "VARCHAR(20)" }
|
||||
- { name: error_message, type: "string | null", ddl_type: "TEXT" }
|
||||
- { name: started_at, type: "Date", ddl_type: "TIMESTAMPTZ" }
|
||||
- { name: completed_at, type: "Date | null", ddl_type: "TIMESTAMPTZ" }
|
||||
- { name: created_at, type: "Date", ddl_type: "TIMESTAMPTZ" }
|
||||
row_type_name: AgentExecutionRow
|
||||
dto_names:
|
||||
- AgentExecutionFilters
|
||||
dependencies: ["TradingAgent (investment.types.ts)"]
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# feature_flags.flags
|
||||
# --------------------------------------------------------------------------
|
||||
- id: ENT-005
|
||||
table: feature_flags.flags
|
||||
ddl_file: "apps/database/ddl/schemas/feature_flags/tables/01-flags.sql"
|
||||
target_file: "apps/backend/src/modules/feature-flags/types/feature-flags.types.ts"
|
||||
action: CREATE_FILE
|
||||
priority: P0
|
||||
reason: "Service and controller exist but NO type definitions at all."
|
||||
interface_name: FeatureFlag
|
||||
columns:
|
||||
- { name: id, type: "string", ddl_type: "UUID" }
|
||||
- { name: key, type: "string", ddl_type: "VARCHAR(100)" }
|
||||
- { name: name, type: "string", ddl_type: "VARCHAR(200)" }
|
||||
- { name: description, type: "string | null", ddl_type: "TEXT" }
|
||||
- { name: flagType, type: "string", ddl_type: "feature_flags.flag_type" }
|
||||
- { name: defaultValue, type: "unknown", ddl_type: "JSONB" }
|
||||
- { name: rules, type: "Record<string, unknown>[]", ddl_type: "JSONB" }
|
||||
- { name: targetingPercentage, type: "number | null", ddl_type: "DECIMAL(5,2)" }
|
||||
- { name: isActive, type: "boolean", ddl_type: "BOOLEAN" }
|
||||
- { name: environment, type: "string", ddl_type: "VARCHAR(20)" }
|
||||
- { name: tags, type: "string[]", ddl_type: "TEXT[]" }
|
||||
- { name: createdBy, type: "string | null", ddl_type: "UUID" }
|
||||
- { name: createdAt, type: "Date", ddl_type: "TIMESTAMPTZ" }
|
||||
- { name: updatedAt, type: "Date", ddl_type: "TIMESTAMPTZ" }
|
||||
row_type_name: FeatureFlagRow
|
||||
dto_names:
|
||||
- CreateFeatureFlagInput
|
||||
- UpdateFeatureFlagInput
|
||||
dependencies: []
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# feature_flags.user_flags
|
||||
# --------------------------------------------------------------------------
|
||||
- id: ENT-006
|
||||
table: feature_flags.user_flags
|
||||
ddl_file: "apps/database/ddl/schemas/feature_flags/tables/01-flags.sql"
|
||||
target_file: "apps/backend/src/modules/feature-flags/types/feature-flags.types.ts"
|
||||
action: ADD_INTERFACE
|
||||
priority: P0
|
||||
reason: "User-specific flag overrides. No type definitions."
|
||||
interface_name: UserFlag
|
||||
columns:
|
||||
- { name: id, type: "string", ddl_type: "UUID" }
|
||||
- { name: userId, type: "string", ddl_type: "UUID" }
|
||||
- { name: flagId, type: "string", ddl_type: "UUID" }
|
||||
- { name: overrideValue, type: "unknown", ddl_type: "JSONB" }
|
||||
- { name: reason, type: "string | null", ddl_type: "TEXT" }
|
||||
- { name: expiresAt, type: "Date | null", ddl_type: "TIMESTAMPTZ" }
|
||||
- { name: createdAt, type: "Date", ddl_type: "TIMESTAMPTZ" }
|
||||
row_type_name: UserFlagRow
|
||||
dependencies: ["FeatureFlag"]
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# feature_flags.evaluations
|
||||
# --------------------------------------------------------------------------
|
||||
- id: ENT-007
|
||||
table: feature_flags.evaluations
|
||||
ddl_file: "apps/database/ddl/schemas/feature_flags/tables/01-flags.sql"
|
||||
target_file: "apps/backend/src/modules/feature-flags/types/feature-flags.types.ts"
|
||||
action: ADD_INTERFACE
|
||||
priority: P0
|
||||
reason: "Flag evaluation history. No type definitions."
|
||||
interface_name: FlagEvaluation
|
||||
columns:
|
||||
- { name: id, type: "string", ddl_type: "UUID" }
|
||||
- { name: flagId, type: "string", ddl_type: "UUID" }
|
||||
- { name: userId, type: "string | null", ddl_type: "UUID" }
|
||||
- { name: evaluatedValue, type: "unknown", ddl_type: "JSONB" }
|
||||
- { name: context, type: "Record<string, unknown> | null", ddl_type: "JSONB" }
|
||||
- { name: createdAt, type: "Date", ddl_type: "TIMESTAMPTZ" }
|
||||
row_type_name: FlagEvaluationRow
|
||||
dependencies: ["FeatureFlag"]
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# ml.risk_events
|
||||
# --------------------------------------------------------------------------
|
||||
- id: ENT-008
|
||||
table: ml.risk_events
|
||||
ddl_file: "apps/database/ddl/schemas/ml/tables/09-risk_events.sql"
|
||||
target_file: "apps/backend/src/modules/ml/types/ml.types.ts"
|
||||
action: ADD_INTERFACE
|
||||
priority: P0
|
||||
reason: "Risk events table with no TypeScript interface."
|
||||
interface_name: RiskEvent
|
||||
columns:
|
||||
- { name: id, type: "string", ddl_type: "UUID" }
|
||||
- { name: eventType, type: "string", ddl_type: "VARCHAR(50)" }
|
||||
- { name: symbol, type: "string | null", ddl_type: "VARCHAR(20)" }
|
||||
- { name: severity, type: "string", ddl_type: "VARCHAR(20)" }
|
||||
- { name: description, type: "string", ddl_type: "TEXT" }
|
||||
- { name: metadata, type: "Record<string, unknown>", ddl_type: "JSONB" }
|
||||
- { name: resolvedAt, type: "Date | null", ddl_type: "TIMESTAMPTZ" }
|
||||
- { name: createdAt, type: "Date", ddl_type: "TIMESTAMPTZ" }
|
||||
row_type_name: RiskEventRow
|
||||
dependencies: []
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# ml.llm_signals
|
||||
# --------------------------------------------------------------------------
|
||||
- id: ENT-009
|
||||
table: ml.llm_signals
|
||||
ddl_file: "apps/database/ddl/schemas/ml/tables/11-llm_signals.sql"
|
||||
target_file: "apps/backend/src/modules/ml/types/ml.types.ts"
|
||||
action: ADD_INTERFACE
|
||||
priority: P0
|
||||
reason: "SERIAL PK table with no TypeScript interface."
|
||||
interface_name: LLMSignal
|
||||
columns:
|
||||
- { name: id, type: "number", ddl_type: "SERIAL" }
|
||||
- { name: symbol, type: "string", ddl_type: "VARCHAR(20)" }
|
||||
- { name: direction, type: "string", ddl_type: "VARCHAR(10)" }
|
||||
- { name: confidence, type: "number", ddl_type: "DECIMAL(5,4)" }
|
||||
- { name: reasoning, type: "string | null", ddl_type: "TEXT" }
|
||||
- { name: entryPrice, type: "number | null", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: stopLoss, type: "number | null", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: takeProfit, type: "number | null", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: createdAt, type: "Date", ddl_type: "TIMESTAMPTZ" }
|
||||
row_type_name: LLMSignalRow
|
||||
dependencies: []
|
||||
|
||||
# ==============================================================================
|
||||
# PHASE 2: HIGH - Missing Row Types for Active Tables (P1)
|
||||
# ==============================================================================
|
||||
# Tables that HAVE a TypeScript interface but are MISSING the Row type
|
||||
# (snake_case DB mapping interface). These are needed for type-safe SQL queries.
|
||||
# Estimated effort: 4-6 hours total
|
||||
# ==============================================================================
|
||||
|
||||
phase_2_missing_row_types:
|
||||
title: "Create Missing Row Types for Active Tables"
|
||||
priority: P1
|
||||
estimated_effort: "5 hours"
|
||||
total_items: 34
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# trading schema - 0 of 13 have Row types
|
||||
# --------------------------------------------------------------------------
|
||||
trading_row_types:
|
||||
target_files:
|
||||
- "apps/backend/src/modules/trading/types/entity.types.ts"
|
||||
- "apps/backend/src/modules/trading/types/order.types.ts"
|
||||
- "apps/backend/src/modules/trading/types/drawing.types.ts"
|
||||
|
||||
items:
|
||||
- { id: ROW-001, table: "trading.symbols", interface: Symbol, row_name: SymbolRow, target: "entity.types.ts" }
|
||||
- { id: ROW-002, table: "trading.watchlists", row_name: WatchlistRow, target: "entity.types.ts", needs_interface: true }
|
||||
- { id: ROW-003, table: "trading.watchlist_items", row_name: WatchlistItemRow, target: "entity.types.ts", needs_interface: true }
|
||||
- { id: ROW-004, table: "trading.bots", interface: TradingBot, row_name: TradingBotRow, target: "entity.types.ts" }
|
||||
- { id: ROW-005, table: "trading.orders", interface: Order, row_name: OrderRow, target: "order.types.ts" }
|
||||
- { id: ROW-006, table: "trading.positions", interface: "Position (NEW)", row_name: PositionRow, target: "order.types.ts" }
|
||||
- { id: ROW-007, table: "trading.trades", interface: "Trade (NEW)", row_name: TradeRow, target: "order.types.ts" }
|
||||
- { id: ROW-008, table: "trading.signals", interface: TradingSignal, row_name: TradingSignalRow, target: "entity.types.ts" }
|
||||
- { id: ROW-009, table: "trading.trading_metrics", interface: TradingMetrics, row_name: TradingMetricsRow, target: "entity.types.ts" }
|
||||
- { id: ROW-010, table: "trading.paper_balances", interface: PaperBalance, row_name: PaperBalanceRow, target: "entity.types.ts" }
|
||||
- { id: ROW-011, table: "trading.price_alerts", row_name: PriceAlertRow, target: "entity.types.ts", needs_interface: true }
|
||||
- { id: ROW-012, table: "trading.drawing_tools", interface: DrawingTool, row_name: DrawingToolRow, target: "drawing.types.ts" }
|
||||
- { id: ROW-013, table: "trading.drawing_templates", interface: DrawingTemplate, row_name: DrawingTemplateRow, target: "drawing.types.ts" }
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# investment schema - 0 of 10 have Row types
|
||||
# --------------------------------------------------------------------------
|
||||
investment_row_types:
|
||||
target_file: "apps/backend/src/modules/investment/types/investment.types.ts"
|
||||
|
||||
items:
|
||||
- { id: ROW-014, table: "investment.products", row_name: ProductRow, needs_interface: true }
|
||||
- { id: ROW-015, table: "investment.risk_questionnaire", interface: RiskQuestionnaire, row_name: "EXISTS in risk.types.ts" }
|
||||
- { id: ROW-016, table: "investment.accounts", interface: InvestmentAccount, row_name: InvestmentAccountRow }
|
||||
- { id: ROW-017, table: "investment.distributions", interface: Distribution, row_name: DistributionRow }
|
||||
- { id: ROW-018, table: "investment.transactions", interface: InvestmentTransaction, row_name: InvestmentTransactionRow }
|
||||
- { id: ROW-019, table: "investment.withdrawal_requests", interface: WithdrawalRequest, row_name: "ALREADY snake_case" }
|
||||
- { id: ROW-020, table: "investment.daily_performance", interface: DailyPerformance, row_name: "ALREADY snake_case" }
|
||||
- { id: ROW-021, table: "investment.distribution_history", interface: DistributionHistory, row_name: "ALREADY snake_case" }
|
||||
- { id: ROW-022, table: "investment.distribution_runs", interface: "DistributionRun (NEW)", row_name: DistributionRunRow }
|
||||
- { id: ROW-023, table: "investment.agent_executions", interface: "AgentExecution (NEW)", row_name: AgentExecutionRow }
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# audit schema - 0 of 7 have Row types
|
||||
# --------------------------------------------------------------------------
|
||||
audit_row_types:
|
||||
target_file: "apps/backend/src/modules/audit/types/audit.types.ts"
|
||||
|
||||
items:
|
||||
- { id: ROW-024, table: "audit.audit_logs", interface: AuditLog, row_name: AuditLogRow }
|
||||
- { id: ROW-025, table: "audit.security_events", interface: SecurityEvent, row_name: SecurityEventRow }
|
||||
- { id: ROW-026, table: "audit.system_events", interface: SystemEvent, row_name: SystemEventRow }
|
||||
- { id: ROW-027, table: "audit.trading_audit", interface: TradingAudit, row_name: TradingAuditRow }
|
||||
- { id: ROW-028, table: "audit.api_request_logs", interface: ApiRequestLog, row_name: ApiRequestLogRow }
|
||||
- { id: ROW-029, table: "audit.data_access_logs", interface: DataAccessLog, row_name: DataAccessLogRow }
|
||||
- { id: ROW-030, table: "audit.compliance_logs", interface: ComplianceLog, row_name: ComplianceLogRow }
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# portfolio schema - 0 of 5 have Row types
|
||||
# --------------------------------------------------------------------------
|
||||
portfolio_row_types:
|
||||
target_file: "apps/backend/src/modules/portfolio/types/portfolio.types.ts"
|
||||
|
||||
items:
|
||||
- { id: ROW-031, table: "portfolio.portfolios", interface: Portfolio, row_name: PortfolioRow }
|
||||
- { id: ROW-032, table: "portfolio.portfolio_allocations", interface: PortfolioAllocation, row_name: PortfolioAllocationRow }
|
||||
- { id: ROW-033, table: "portfolio.portfolio_goals", interface: PortfolioGoal, row_name: PortfolioGoalRow }
|
||||
- { id: ROW-034, table: "portfolio.rebalance_history", interface: RebalanceHistory, row_name: RebalanceHistoryRow }
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Remaining partial schemas
|
||||
# --------------------------------------------------------------------------
|
||||
remaining_row_types:
|
||||
items:
|
||||
- { id: ROW-035, table: "auth.oauth_accounts", interface: OAuthAccount, row_name: OAuthAccountRow, target: "auth.types.ts" }
|
||||
- { id: ROW-036, table: "auth.sessions", interface: Session, row_name: SessionRow, target: "auth.types.ts" }
|
||||
- { id: ROW-037, table: "education.courses", interface: Course, row_name: CourseRow, target: "education.types.ts" }
|
||||
- { id: ROW-038, table: "education.modules", interface: Module, row_name: ModuleRow, target: "education.types.ts" }
|
||||
- { id: ROW-039, table: "education.lessons", interface: Lesson, row_name: LessonRow, target: "education.types.ts" }
|
||||
- { id: ROW-040, table: "education.enrollments", interface: Enrollment, row_name: EnrollmentRow, target: "education.types.ts" }
|
||||
- { id: ROW-041, table: "education.quizzes", interface: Quiz, row_name: QuizRow, target: "education.types.ts" }
|
||||
- { id: ROW-042, table: "education.quiz_questions", interface: QuizQuestion, row_name: QuizQuestionRow, target: "education.types.ts" }
|
||||
- { id: ROW-043, table: "education.quiz_attempts", interface: QuizAttempt, row_name: QuizAttemptRow, target: "education.types.ts" }
|
||||
- { id: ROW-044, table: "education.certificates", interface: Certificate, row_name: CertificateRow, target: "education.types.ts" }
|
||||
- { id: ROW-045, table: "education.user_achievements", interface: UserAchievement, row_name: UserAchievementRow, target: "education.types.ts" }
|
||||
- { id: ROW-046, table: "education.user_gamification_profile", interface: UserGamificationProfile, row_name: UserGamificationProfileRow, target: "education.types.ts" }
|
||||
- { id: ROW-047, table: "education.user_activity_log", interface: UserActivityLog, row_name: UserActivityLogRow, target: "education.types.ts" }
|
||||
- { id: ROW-048, table: "education.course_tags", interface: CourseTag, row_name: CourseTagRow, target: "education.types.ts" }
|
||||
- { id: ROW-049, table: "education.course_tag_assignments", interface: CourseTagAssignment, row_name: CourseTagAssignmentRow, target: "education.types.ts" }
|
||||
- { id: ROW-050, table: "financial.subscriptions", interface: Subscription, row_name: SubscriptionRow, target: "financial.types.ts" }
|
||||
- { id: ROW-051, table: "financial.payments", interface: Payment, row_name: PaymentRow, target: "payments.types.ts or financial.types.ts" }
|
||||
- { id: ROW-052, table: "portfolio.portfolio_snapshots", interface: PortfolioSnapshot, row_name: PortfolioSnapshotRow, target: "portfolio.types.ts" }
|
||||
|
||||
# ==============================================================================
|
||||
# PHASE 3: MEDIUM - Python-Managed ML Tables (P2)
|
||||
# ==============================================================================
|
||||
# These tables are primarily managed by the Python ML engine.
|
||||
# Read-only TypeScript interfaces needed for admin dashboards and monitoring.
|
||||
# Estimated effort: 1-2 hours
|
||||
# ==============================================================================
|
||||
|
||||
phase_3_python_managed:
|
||||
title: "Create Read-Only Interfaces for Python-Managed Tables"
|
||||
priority: P2
|
||||
estimated_effort: "2 hours"
|
||||
total_items: 4
|
||||
|
||||
items:
|
||||
- id: ML-001
|
||||
table: ml.feature_store
|
||||
ddl_file: "apps/database/ddl/schemas/ml/tables/05-feature_store.sql"
|
||||
target_file: "apps/backend/src/modules/ml/types/ml.types.ts"
|
||||
action: ADD_INTERFACE
|
||||
interface_name: FeatureStoreEntry
|
||||
columns:
|
||||
- { name: id, type: "string", ddl_type: "UUID" }
|
||||
- { name: symbol, type: "string", ddl_type: "VARCHAR(20)" }
|
||||
- { name: timeframe, type: "string", ddl_type: "VARCHAR(10)" }
|
||||
- { name: featureName, type: "string", ddl_type: "VARCHAR(100)" }
|
||||
- { name: featureValue, type: "number", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: featureType, type: "string", ddl_type: "VARCHAR(50)" }
|
||||
- { name: computedAt, type: "Date", ddl_type: "TIMESTAMPTZ" }
|
||||
- { name: dataVersion, type: "string | null", ddl_type: "VARCHAR(50)" }
|
||||
- { name: metadata, type: "Record<string, unknown>", ddl_type: "JSONB" }
|
||||
- { name: isLatest, type: "boolean", ddl_type: "BOOLEAN" }
|
||||
- { name: createdAt, type: "Date", ddl_type: "TIMESTAMPTZ" }
|
||||
notes: "Read-only from Express backend perspective."
|
||||
|
||||
- id: ML-002
|
||||
table: ml.llm_predictions
|
||||
ddl_file: "apps/database/ddl/schemas/ml/tables/06-llm_predictions.sql"
|
||||
target_file: "apps/backend/src/modules/ml/types/ml.types.ts"
|
||||
action: ADD_INTERFACE
|
||||
interface_name: LLMPrediction
|
||||
columns:
|
||||
- { name: id, type: "string", ddl_type: "UUID" }
|
||||
- { name: symbol, type: "string", ddl_type: "VARCHAR(20)" }
|
||||
- { name: timeframe, type: "string", ddl_type: "VARCHAR(10)" }
|
||||
- { name: direction, type: "string", ddl_type: "VARCHAR(10)" }
|
||||
- { name: confidence, type: "number", ddl_type: "DECIMAL(5,4)" }
|
||||
- { name: reasoning, type: "string | null", ddl_type: "TEXT" }
|
||||
- { name: entryPrice, type: "number | null", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: stopLoss, type: "number | null", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: takeProfit, type: "number | null", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: modelName, type: "string | null", ddl_type: "VARCHAR(100)" }
|
||||
- { name: promptTokens, type: "number | null", ddl_type: "INTEGER" }
|
||||
- { name: completionTokens, type: "number | null", ddl_type: "INTEGER" }
|
||||
- { name: createdAt, type: "Date", ddl_type: "TIMESTAMPTZ" }
|
||||
notes: "Read-only from Express backend. Written by Python LLM service."
|
||||
|
||||
- id: ML-003
|
||||
table: ml.llm_prediction_outcomes
|
||||
ddl_file: "apps/database/ddl/schemas/ml/tables/07-llm_prediction_outcomes.sql"
|
||||
target_file: "apps/backend/src/modules/ml/types/ml.types.ts"
|
||||
action: ADD_INTERFACE
|
||||
interface_name: LLMPredictionOutcome
|
||||
columns:
|
||||
- { name: id, type: "string", ddl_type: "UUID" }
|
||||
- { name: predictionId, type: "string", ddl_type: "UUID" }
|
||||
- { name: actualDirection, type: "string | null", ddl_type: "VARCHAR(10)" }
|
||||
- { name: actualPrice, type: "number | null", ddl_type: "DECIMAL(18,8)" }
|
||||
- { name: hitTarget, type: "boolean | null", ddl_type: "BOOLEAN" }
|
||||
- { name: hitStop, type: "boolean | null", ddl_type: "BOOLEAN" }
|
||||
- { name: pnlPercent, type: "number | null", ddl_type: "DECIMAL(8,4)" }
|
||||
- { name: outcomeStatus, type: "string", ddl_type: "VARCHAR(20)" }
|
||||
- { name: verifiedAt, type: "Date | null", ddl_type: "TIMESTAMPTZ" }
|
||||
- { name: notes, type: "string | null", ddl_type: "TEXT" }
|
||||
- { name: createdAt, type: "Date", ddl_type: "TIMESTAMPTZ" }
|
||||
notes: "Tracks outcome verification for LLM predictions."
|
||||
|
||||
- id: ML-004
|
||||
table: ml.llm_decisions
|
||||
ddl_file: "apps/database/ddl/schemas/ml/tables/08-llm_decisions.sql"
|
||||
target_file: "apps/backend/src/modules/ml/types/ml.types.ts"
|
||||
action: ADD_INTERFACE
|
||||
interface_name: LLMDecision
|
||||
columns:
|
||||
- { name: id, type: "string", ddl_type: "UUID" }
|
||||
- { name: predictionId, type: "string | null", ddl_type: "UUID" }
|
||||
- { name: decisionType, type: "string", ddl_type: "VARCHAR(50)" }
|
||||
- { name: action, type: "string", ddl_type: "VARCHAR(50)" }
|
||||
- { name: reasoning, type: "string | null", ddl_type: "TEXT" }
|
||||
- { name: confidence, type: "number | null", ddl_type: "DECIMAL(5,4)" }
|
||||
- { name: parameters, type: "Record<string, unknown> | null", ddl_type: "JSONB" }
|
||||
- { name: executed, type: "boolean", ddl_type: "BOOLEAN" }
|
||||
- { name: executedAt, type: "Date | null", ddl_type: "TIMESTAMPTZ" }
|
||||
- { name: createdAt, type: "Date", ddl_type: "TIMESTAMPTZ" }
|
||||
notes: "Decision log for LLM-driven actions."
|
||||
|
||||
# ==============================================================================
|
||||
# PHASE 4: OPTIONAL - Repository Expansion (P3)
|
||||
# ==============================================================================
|
||||
# Currently only 9 repositories exist (investment: 5, portfolio: 3, risk: 1).
|
||||
# This phase recommends creating repositories for high-traffic tables.
|
||||
# ==============================================================================
|
||||
|
||||
phase_4_repositories:
|
||||
title: "Expand Repository Pattern to Key Modules"
|
||||
priority: P3
|
||||
estimated_effort: "8-12 hours"
|
||||
notes: "Optional. Only create repositories where complex queries exist."
|
||||
|
||||
recommended_modules:
|
||||
- module: auth
|
||||
reason: "Most complex schema. Multiple services share SQL for users, sessions, tokens."
|
||||
recommended_repos:
|
||||
- { name: "user.repository.ts", tables: ["auth.users", "auth.user_profiles"] }
|
||||
- { name: "session.repository.ts", tables: ["auth.sessions", "auth.auth_logs", "auth.login_attempts"] }
|
||||
- { name: "verification.repository.ts", tables: ["auth.email_verifications", "auth.phone_verifications", "auth.password_reset_tokens"] }
|
||||
|
||||
- module: trading
|
||||
reason: "Core business domain. Order/position/trade queries are complex."
|
||||
recommended_repos:
|
||||
- { name: "order.repository.ts", tables: ["trading.orders", "trading.trades", "trading.positions"] }
|
||||
- { name: "symbol.repository.ts", tables: ["trading.symbols"] }
|
||||
- { name: "watchlist.repository.ts", tables: ["trading.watchlists", "trading.watchlist_items"] }
|
||||
|
||||
- module: education
|
||||
reason: "Largest schema (19 tables). Complex enrollment/progress queries."
|
||||
recommended_repos:
|
||||
- { name: "course.repository.ts", tables: ["education.courses", "education.modules", "education.lessons", "education.categories"] }
|
||||
- { name: "enrollment.repository.ts", tables: ["education.enrollments", "education.progress"] }
|
||||
- { name: "quiz.repository.ts", tables: ["education.quizzes", "education.quiz_questions", "education.quiz_attempts"] }
|
||||
|
||||
- module: financial
|
||||
reason: "Financial data requires strict transaction handling."
|
||||
recommended_repos:
|
||||
- { name: "wallet.repository.ts", tables: ["financial.wallets", "financial.wallet_transactions", "financial.wallet_audit_log", "financial.wallet_limits"] }
|
||||
- { name: "payment.repository.ts", tables: ["financial.payments", "financial.refunds", "financial.invoices"] }
|
||||
|
||||
# ==============================================================================
|
||||
# EXECUTION SUMMARY
|
||||
# ==============================================================================
|
||||
|
||||
execution_summary:
|
||||
total_work_items: 65
|
||||
breakdown:
|
||||
phase_1_interfaces: 9
|
||||
phase_2_row_types: 52
|
||||
phase_3_ml_interfaces: 4
|
||||
phase_4_repositories: "Optional (11 repos recommended)"
|
||||
|
||||
estimated_total_effort: "10-13 hours (excluding Phase 4)"
|
||||
|
||||
recommended_order:
|
||||
1: "Phase 1 - ENT-001 to ENT-009 (missing interfaces for active tables)"
|
||||
2: "Phase 2 - Trading Row types (ROW-001 to ROW-013)"
|
||||
3: "Phase 2 - Investment Row types (ROW-014 to ROW-023)"
|
||||
4: "Phase 2 - Audit Row types (ROW-024 to ROW-030)"
|
||||
5: "Phase 2 - Portfolio Row types (ROW-031 to ROW-034)"
|
||||
6: "Phase 2 - Remaining Row types (ROW-035 to ROW-052)"
|
||||
7: "Phase 3 - ML read-only interfaces (ML-001 to ML-004)"
|
||||
8: "Phase 4 - Repository expansion (only if needed)"
|
||||
|
||||
validation_steps:
|
||||
- "After each phase: npm run build (verify TypeScript compilation)"
|
||||
- "After each phase: npm run lint (verify code style)"
|
||||
- "After Phase 1: Verify all 101 tables have at least one TypeScript interface"
|
||||
- "After Phase 2: Verify Row types match DDL column names exactly"
|
||||
- "Cross-reference: Every Row type field must match a DDL column"
|
||||
|
||||
blocking_dependencies:
|
||||
- "ENT-002 (Position) must be created before ROW-006"
|
||||
- "ENT-001 (Trade) must be created before ROW-007"
|
||||
- "ENT-005 (FeatureFlag) file must be created before ENT-006 and ENT-007"
|
||||
- "ENT-003 (DistributionRun) must be created before ROW-022"
|
||||
- "ENT-004 (AgentExecution) must be created before ROW-023"
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,714 @@
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
# PLAN-MAESTRO-REMEDIACION.yml
|
||||
# Trading Platform - Plan de Remediacion del Modelado de Base de Datos
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
|
||||
version: "1.0.0"
|
||||
fecha: "2026-02-05"
|
||||
tarea: "TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD"
|
||||
fase: "FASE-6: Plan Maestro de Remediacion"
|
||||
agente: "Claude Code (Opus 4.6)"
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
# RESUMEN EJECUTIVO
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
|
||||
resumen_ejecutivo:
|
||||
descripcion: |
|
||||
Plan de remediacion basado en analisis integral de 101 tablas DDL, 11 schemas,
|
||||
y coherencia multicapa (DDL-Backend-Frontend). Priorizado por impacto funcional
|
||||
y dependencias tecnicas. Organizado en 4 sprints ejecutables.
|
||||
|
||||
estado_actual:
|
||||
tablas_ddl: 101
|
||||
schemas: 11
|
||||
coherencia_ddl_inventario: "100%" # RESUELTO en esta tarea
|
||||
coherencia_ddl_backend_entities: "68%"
|
||||
coherencia_ddl_backend_services: "52%"
|
||||
coherencia_ddl_backend_controllers: "45%"
|
||||
coherencia_global: "54%"
|
||||
gaps_totales: 37
|
||||
gaps_resueltos: 3
|
||||
gaps_pendientes: 34
|
||||
fk_errors: 0 # RESUELTO en esta tarea
|
||||
enum_conflicts: 3
|
||||
entities_faltantes: 31
|
||||
|
||||
target:
|
||||
coherencia_ddl_backend_entities: "95%"
|
||||
coherencia_ddl_backend_services: "85%"
|
||||
coherencia_global: "90%"
|
||||
gaps_pendientes: 0
|
||||
enum_conflicts: 0
|
||||
entities_faltantes: 0
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
# MATRIZ IMPACTO vs ESFUERZO
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
|
||||
matriz_impacto_esfuerzo:
|
||||
|
||||
# CUADRANTE 1: Alto Impacto + Bajo Esfuerzo → HACER PRIMERO
|
||||
quick_wins:
|
||||
- gap: "GAP-ENUM-P1-003"
|
||||
accion: "Migrar 3 tablas a public.trading_timeframe"
|
||||
impacto: "Elimina conflicto timeframe"
|
||||
esfuerzo: "2h"
|
||||
riesgo: "Bajo (non-breaking, valores compatibles)"
|
||||
|
||||
- gap: "GAP-REL-P1-002"
|
||||
accion: "Agregar wallet_id FK en trading.bots"
|
||||
impacto: "Vincula bots con wallets"
|
||||
esfuerzo: "1h"
|
||||
riesgo: "Bajo"
|
||||
|
||||
- gap: "GAP-REL-P1-003"
|
||||
accion: "Agregar symbol_id FK en market_data.tickers"
|
||||
impacto: "Vincula catalogos"
|
||||
esfuerzo: "1h"
|
||||
riesgo: "Bajo"
|
||||
|
||||
- gap: "GAP-NAME-P2-001"
|
||||
accion: "Estandarizar asset_type -> asset_class"
|
||||
impacto: "Consistencia nomenclatura"
|
||||
esfuerzo: "1h"
|
||||
riesgo: "Bajo"
|
||||
|
||||
- gap: "GAP-PURGE-P2-001"
|
||||
accion: "Purgar docs obsoletas"
|
||||
impacto: "Limpieza documental"
|
||||
esfuerzo: "1h"
|
||||
riesgo: "Bajo"
|
||||
|
||||
# CUADRANTE 2: Alto Impacto + Alto Esfuerzo → PLANIFICAR
|
||||
strategic:
|
||||
- gap: "GAP-BE-P2-001"
|
||||
accion: "Crear 31 entities backend"
|
||||
impacto: "68% -> 95% entity coverage"
|
||||
esfuerzo: "62h"
|
||||
riesgo: "Medio (volumen alto)"
|
||||
|
||||
- gap: "GAP-SVC-P2-001"
|
||||
accion: "Crear audit services (7 tablas)"
|
||||
impacto: "0% -> 100% audit coherencia"
|
||||
esfuerzo: "32h"
|
||||
riesgo: "Medio"
|
||||
|
||||
- gap: "GAP-DUP-P1-001"
|
||||
accion: "Consolidar symbols/tickers"
|
||||
impacto: "Elimina duplicacion catalogo master"
|
||||
esfuerzo: "12h"
|
||||
riesgo: "Alto (afecta ml, market_data, data-service)"
|
||||
|
||||
# CUADRANTE 3: Bajo Impacto + Bajo Esfuerzo → OPORTUNISTA
|
||||
oportunista:
|
||||
- gap: "GAP-ENUM-P1-002"
|
||||
accion: "Crear public.risk_profile"
|
||||
esfuerzo: "2h"
|
||||
nota: "Opcional, valores ya identicos"
|
||||
|
||||
- gap: "GAP-IDX-P3-001"
|
||||
accion: "Agregar indices compuestos"
|
||||
esfuerzo: "2h"
|
||||
|
||||
- gap: "GAP-ORPHAN-P3-001"
|
||||
accion: "Documentar market_data.staging"
|
||||
esfuerzo: "0.5h"
|
||||
|
||||
# CUADRANTE 4: Bajo Impacto + Alto Esfuerzo → DIFERIR
|
||||
diferir:
|
||||
- gap: "GAP-SVC-P2-002"
|
||||
accion: "OHLCV service completo"
|
||||
esfuerzo: "16h"
|
||||
nota: "Solo relevante cuando market_data pipeline este activo"
|
||||
|
||||
- gap: "GAP-SVC-P2-003"
|
||||
accion: "Currency exchange service"
|
||||
esfuerzo: "16h"
|
||||
nota: "Solo relevante cuando se habilite multi-moneda"
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
# SPRINTS DE REMEDIACION
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
|
||||
sprints:
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# SPRINT 1: Quick Wins DDL + Enum Resolution (5 dias)
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
sprint_1:
|
||||
nombre: "Quick Wins DDL + Enum Resolution"
|
||||
duracion: "5 dias"
|
||||
esfuerzo_total: "24h"
|
||||
prioridad: CRITICA
|
||||
prerequisitos: []
|
||||
|
||||
objetivo: |
|
||||
Resolver todos los conflictos DDL, enums, y FKs faltantes.
|
||||
Ejecutar purga documental catalogada.
|
||||
|
||||
tareas:
|
||||
- id: "S1-T1"
|
||||
nombre: "Ejecutar migracion timeframe enum"
|
||||
gap_ref: "GAP-ENUM-P1-003"
|
||||
tipo: DDL
|
||||
esfuerzo: "2h"
|
||||
dependencias: []
|
||||
sql: |
|
||||
-- 3 tablas: trading.bots, trading.signals, trading.drawing_tools
|
||||
-- Usar patron ADD COLUMN new -> UPDATE -> DROP old -> RENAME new
|
||||
validacion: "Recrear BD en WSL, verificar tablas se crean correctamente"
|
||||
|
||||
- id: "S1-T2"
|
||||
nombre: "Agregar FK trading.bots -> financial.wallets"
|
||||
gap_ref: "GAP-REL-P1-002"
|
||||
tipo: DDL
|
||||
esfuerzo: "1h"
|
||||
dependencias: []
|
||||
sql: "ALTER TABLE trading.bots ADD COLUMN wallet_id UUID REFERENCES financial.wallets(id);"
|
||||
validacion: "Verificar FK se crea, no rompe datos existentes"
|
||||
|
||||
- id: "S1-T3"
|
||||
nombre: "Agregar FK market_data.tickers -> trading.symbols"
|
||||
gap_ref: "GAP-REL-P1-003"
|
||||
tipo: DDL
|
||||
esfuerzo: "1h"
|
||||
dependencias: []
|
||||
sql: "ALTER TABLE market_data.tickers ADD COLUMN symbol_id UUID REFERENCES trading.symbols(id);"
|
||||
validacion: "Verificar FK se crea"
|
||||
|
||||
- id: "S1-T4"
|
||||
nombre: "Agregar FK investment.accounts -> financial.wallets"
|
||||
gap_ref: "GAP-REL-P1-001"
|
||||
tipo: DDL
|
||||
esfuerzo: "2h"
|
||||
dependencias: []
|
||||
sql: |
|
||||
-- Verificar si wallet_id ya existe en DDL actual
|
||||
-- Si no: ALTER TABLE investment.accounts ADD COLUMN wallet_id UUID REFERENCES financial.wallets(id);
|
||||
validacion: "Verificar FK funciona, evaluar ON DELETE behavior"
|
||||
|
||||
- id: "S1-T5"
|
||||
nombre: "Documentar decision transaction_type"
|
||||
gap_ref: "GAP-ENUM-P1-001"
|
||||
tipo: DOCUMENTACION
|
||||
esfuerzo: "2h"
|
||||
dependencias: []
|
||||
accion: |
|
||||
Crear ADR documentando la decision de MANTENER transaction_type separados:
|
||||
- financial.transaction_type (9 valores, wallets)
|
||||
- investment.transaction_type (3 valores, cuentas inversion)
|
||||
Razon: valores diferentes, renombrar es breaking change.
|
||||
Enforcement: calificacion de schema estricta en backend.
|
||||
|
||||
- id: "S1-T6"
|
||||
nombre: "Estandarizar asset_type -> asset_class"
|
||||
gap_ref: "GAP-NAME-P2-001"
|
||||
tipo: DDL
|
||||
esfuerzo: "1h"
|
||||
dependencias: []
|
||||
|
||||
- id: "S1-T7"
|
||||
nombre: "Documentar feature_flags schema"
|
||||
gap_ref: "GAP-DDL-P0-002"
|
||||
tipo: DOCUMENTACION
|
||||
esfuerzo: "3h"
|
||||
dependencias: []
|
||||
accion: |
|
||||
1. Crear ET (Especificacion Tecnica) en docs/02-definicion-modulos/
|
||||
2. Agregar a CLAUDE.md del proyecto (seccion schemas)
|
||||
3. Documentar 3 tablas: flags, user_flags, evaluations
|
||||
4. Documentar 2 enums: flag_status, rollout_stage
|
||||
5. Documentar funcion evaluate_flag()
|
||||
|
||||
- id: "S1-T8"
|
||||
nombre: "Ejecutar purga documental"
|
||||
gap_ref: "GAP-PURGE-P2-001, GAP-PURGE-P2-002"
|
||||
tipo: OPERACIONES
|
||||
esfuerzo: "3h"
|
||||
dependencias: []
|
||||
accion: |
|
||||
Segun PURGA-DOCUMENTAL.yml:
|
||||
1. Eliminar directorio vacio 2026-01-28/
|
||||
2. Archivar 4 carpetas de tareas (2026-01-25/, 2026-01-27/MASTER-ANALYSIS, 2026-02-03/DDL-VALIDATION)
|
||||
3. Archivar 2 coherence baselines (2026-01-28)
|
||||
4. Actualizar _INDEX.yml
|
||||
|
||||
- id: "S1-T9"
|
||||
nombre: "Documentar tablas faltantes en inventarios"
|
||||
gap_ref: "GAP-INV-P1-001 a P1-005"
|
||||
tipo: DOCUMENTACION
|
||||
esfuerzo: "6h"
|
||||
dependencias: []
|
||||
accion: |
|
||||
Las 19 tablas ya estan en DATABASE_INVENTORY v2.0.0.
|
||||
Crear definiciones (ET) para cada grupo:
|
||||
- education: 7 tablas → ET en OQI-002
|
||||
- trading: 2 tablas → ET en OQI-003
|
||||
- financial: 2 tablas → ET en OQI-005
|
||||
- ml: 2 tablas → ET en OQI-006
|
||||
- auth/inv/llm/port/mkt: 6 tablas → ETs en modulos respectivos
|
||||
|
||||
- id: "S1-T10"
|
||||
nombre: "Recrear BD en WSL para validar cambios DDL"
|
||||
tipo: VALIDACION
|
||||
esfuerzo: "1h"
|
||||
dependencias: ["S1-T1", "S1-T2", "S1-T3", "S1-T4", "S1-T6"]
|
||||
validacion: "wsl unified-recreate-db.sh trading-platform --drop"
|
||||
|
||||
criterio_exito:
|
||||
- "0 conflictos de enum activos"
|
||||
- "3 FKs cross-schema agregadas"
|
||||
- "feature_flags documentado"
|
||||
- "BD recrea sin errores"
|
||||
- "Purga documental ejecutada"
|
||||
|
||||
metricas_esperadas:
|
||||
gaps_resueltos: "+12 (total: 15/37)"
|
||||
coherencia_ddl_inventario: "100% (mantenida)"
|
||||
enum_conflicts: "3 -> 0"
|
||||
fk_faltantes: "3 -> 0"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# SPRINT 2: Backend Entities Core (10 dias)
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
sprint_2:
|
||||
nombre: "Backend Entities - Core Schemas"
|
||||
duracion: "10 dias"
|
||||
esfuerzo_total: "62h"
|
||||
prioridad: ALTA
|
||||
prerequisitos: ["sprint_1"]
|
||||
|
||||
objetivo: |
|
||||
Crear las 31 entities backend faltantes para alcanzar 95%+ entity coverage.
|
||||
Priorizar schemas criticos primero (audit, trading, education).
|
||||
|
||||
tareas:
|
||||
- id: "S2-T1"
|
||||
nombre: "Crear 7 entities audit"
|
||||
gap_ref: "GAP-BE-P2-001 (audit)"
|
||||
schema: audit
|
||||
entities:
|
||||
- "AuditLog -> audit.audit_logs"
|
||||
- "SecurityEvent -> audit.security_events"
|
||||
- "SystemEvent -> audit.system_events"
|
||||
- "TradingAudit -> audit.trading_audit"
|
||||
- "ApiRequestLog -> audit.api_request_logs"
|
||||
- "DataAccessLog -> audit.data_access_logs"
|
||||
- "ComplianceLog -> audit.compliance_logs"
|
||||
esfuerzo: "14h (2h/entity)"
|
||||
dependencias: []
|
||||
paralelizable: true
|
||||
|
||||
- id: "S2-T2"
|
||||
nombre: "Crear 5 entities education"
|
||||
gap_ref: "GAP-BE-P2-001 (education)"
|
||||
schema: education
|
||||
entities:
|
||||
- "UserActivityLog -> education.user_activity_log"
|
||||
- "ReviewHelpfulVote -> education.review_helpful_votes"
|
||||
- "CourseTag -> education.course_tags"
|
||||
- "CourseTagAssignment -> education.course_tag_assignments"
|
||||
- "Video -> education.videos"
|
||||
esfuerzo: "10h"
|
||||
dependencias: []
|
||||
paralelizable: true
|
||||
|
||||
- id: "S2-T3"
|
||||
nombre: "Crear 3 entities trading"
|
||||
gap_ref: "GAP-BE-P2-001 (trading)"
|
||||
schema: trading
|
||||
entities:
|
||||
- "PriceAlert -> trading.price_alerts"
|
||||
- "DrawingTool -> trading.drawing_tools"
|
||||
- "DrawingTemplate -> trading.drawing_templates"
|
||||
esfuerzo: "6h"
|
||||
dependencias: []
|
||||
paralelizable: true
|
||||
|
||||
- id: "S2-T4"
|
||||
nombre: "Crear 3 entities financial"
|
||||
gap_ref: "GAP-BE-P2-001 (financial)"
|
||||
schema: financial
|
||||
entities:
|
||||
- "WalletLimit -> financial.wallet_limits"
|
||||
- "CurrencyExchangeRate -> financial.currency_exchange_rates"
|
||||
- "Refund -> financial.refunds"
|
||||
esfuerzo: "6h"
|
||||
dependencias: []
|
||||
paralelizable: true
|
||||
|
||||
- id: "S2-T5"
|
||||
nombre: "Crear 3 entities investment"
|
||||
gap_ref: "GAP-BE-P2-001 (investment)"
|
||||
schema: investment
|
||||
entities:
|
||||
- "DistributionHistory -> investment.distribution_history"
|
||||
- "DistributionRun -> investment.distribution_runs"
|
||||
- "AgentExecution -> investment.agent_executions"
|
||||
esfuerzo: "6h"
|
||||
dependencias: []
|
||||
paralelizable: true
|
||||
|
||||
- id: "S2-T6"
|
||||
nombre: "Crear entities menores (ml, portfolio, market_data, auth, feature_flags)"
|
||||
gap_ref: "GAP-BE-P2-001 (resto)"
|
||||
entities:
|
||||
ml:
|
||||
- "LlmSignal -> ml.llm_signals"
|
||||
- "PredictionOverlay -> ml.prediction_overlays"
|
||||
portfolio:
|
||||
- "RebalanceHistory -> portfolio.rebalance_history"
|
||||
- "PortfolioSnapshot -> portfolio.portfolio_snapshots"
|
||||
market_data:
|
||||
- "Ohlcv5m -> market_data.ohlcv_5m"
|
||||
- "Ohlcv15m -> market_data.ohlcv_15m"
|
||||
- "Staging -> market_data.staging"
|
||||
auth:
|
||||
- "RateLimitingConfig -> auth.rate_limiting_config"
|
||||
- "UserPushToken -> auth.user_push_tokens"
|
||||
feature_flags:
|
||||
- "Flag -> feature_flags.flags"
|
||||
esfuerzo: "20h"
|
||||
dependencias: []
|
||||
paralelizable: true
|
||||
|
||||
estrategia_ejecucion: |
|
||||
Las 6 tareas son 100% paralelizables (sin dependencias entre schemas).
|
||||
Con 3 agentes ejecutando en paralelo, el sprint se reduce de 62h a ~21h.
|
||||
|
||||
Cada entity debe incluir:
|
||||
1. Archivo entity con decoradores TypeORM (@Entity, @Column, @ManyToOne, etc.)
|
||||
2. Columnas exactas del DDL (tipo, nullable, default)
|
||||
3. Relaciones basadas en FKs del DDL
|
||||
4. Schema property apuntando al schema correcto
|
||||
|
||||
criterio_exito:
|
||||
- "31 entities creadas con build exitoso"
|
||||
- "Entity coverage: 68% -> 99% (99/101, excluyendo user_flags y evaluations de multi-CREATE)"
|
||||
- "npm run build exitoso"
|
||||
- "Inventarios actualizados"
|
||||
|
||||
metricas_esperadas:
|
||||
entities_faltantes: "31 -> 0"
|
||||
coherencia_entities: "68% -> 99%"
|
||||
gaps_resueltos: "+1 (GAP-BE-P2-001)"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# SPRINT 3: Backend Services Critical (10 dias)
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
sprint_3:
|
||||
nombre: "Backend Services - Critical Coverage"
|
||||
duracion: "10 dias"
|
||||
esfuerzo_total: "68h"
|
||||
prioridad: ALTA
|
||||
prerequisitos: ["sprint_2"]
|
||||
|
||||
objetivo: |
|
||||
Crear servicios backend criticos: audit (7 tablas), feature_flags,
|
||||
completar bots service, risk assessment service.
|
||||
|
||||
tareas:
|
||||
- id: "S3-T1"
|
||||
nombre: "Crear AuditService + SecurityEventService + ComplianceService"
|
||||
gap_ref: "GAP-SVC-P2-001"
|
||||
schema: audit
|
||||
esfuerzo: "32h"
|
||||
dependencias: ["S2-T1"]
|
||||
entregables:
|
||||
- "AuditService (audit_logs, data_access_logs)"
|
||||
- "SecurityEventService (security_events)"
|
||||
- "TradingAuditService (trading_audit)"
|
||||
- "ComplianceService (compliance_logs)"
|
||||
- "AuditController con endpoints admin-only"
|
||||
endpoints:
|
||||
- "GET /api/admin/audit/logs"
|
||||
- "GET /api/admin/audit/security"
|
||||
- "GET /api/admin/audit/trading"
|
||||
- "GET /api/admin/audit/compliance"
|
||||
- "GET /api/admin/audit/export"
|
||||
|
||||
- id: "S3-T2"
|
||||
nombre: "Crear FeatureFlagService"
|
||||
gap_ref: "GAP-SVC-P2-006"
|
||||
schema: feature_flags
|
||||
esfuerzo: "8h"
|
||||
dependencias: ["S2-T6"]
|
||||
entregables:
|
||||
- "FeatureFlagService con cache Redis"
|
||||
- "FeatureFlagMiddleware para route gating"
|
||||
- "FeatureFlagController"
|
||||
endpoints:
|
||||
- "GET /api/admin/flags"
|
||||
- "PUT /api/admin/flags/:name"
|
||||
- "GET /api/flags/evaluate/:name"
|
||||
|
||||
- id: "S3-T3"
|
||||
nombre: "Completar BotsService (60% -> 100%)"
|
||||
gap_ref: "GAP-SVC-P2-004"
|
||||
schema: trading
|
||||
esfuerzo: "16h"
|
||||
dependencias: ["S2-T3"]
|
||||
faltante:
|
||||
- "CRUD completo (create, update, delete)"
|
||||
- "WebSocket monitoring real-time"
|
||||
- "Integracion con wallet via FK"
|
||||
- "Historial de ejecuciones"
|
||||
|
||||
- id: "S3-T4"
|
||||
nombre: "Crear RiskAssessmentService"
|
||||
gap_ref: "GAP-SVC-P2-005"
|
||||
schema: investment
|
||||
esfuerzo: "12h"
|
||||
dependencias: ["S2-T5"]
|
||||
entregables:
|
||||
- "RiskAssessmentService"
|
||||
- "RiskAssessmentController"
|
||||
endpoints:
|
||||
- "GET /api/risk/questionnaire"
|
||||
- "POST /api/risk/assessment"
|
||||
- "PUT /api/users/:id/risk-profile"
|
||||
|
||||
criterio_exito:
|
||||
- "Audit schema 100% serviced"
|
||||
- "Feature flags operativo con cache"
|
||||
- "Bots service 100% completo"
|
||||
- "Risk assessment calculando score"
|
||||
- "npm run build exitoso"
|
||||
|
||||
metricas_esperadas:
|
||||
coherencia_services: "52% -> 72%"
|
||||
gaps_resueltos: "+4 (GAP-SVC-P2-001, P2-004, P2-005, P2-006)"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# SPRINT 4: Consolidation + Symbols Migration (10 dias)
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
sprint_4:
|
||||
nombre: "Consolidation + Symbol Catalog Migration"
|
||||
duracion: "10 dias"
|
||||
esfuerzo_total: "50h"
|
||||
prioridad: MEDIA
|
||||
prerequisitos: ["sprint_3"]
|
||||
|
||||
objetivo: |
|
||||
Consolidar catalogos de simbolos, crear servicios market_data y currency,
|
||||
completar definiciones documentales, actualizar roadmap.
|
||||
|
||||
tareas:
|
||||
- id: "S4-T1"
|
||||
nombre: "Consolidar trading.symbols vs market_data.tickers"
|
||||
gap_ref: "GAP-DUP-P1-001"
|
||||
tipo: DDL + BACKEND
|
||||
esfuerzo: "12h"
|
||||
dependencias: []
|
||||
pasos:
|
||||
- "1. Agregar campos ML a trading.symbols (is_ml_enabled, polygon_ticker, supported_timeframes)"
|
||||
- "2. Crear migracion para mover datos de tickers a symbols"
|
||||
- "3. Actualizar market_data.tickers a vista o tabla dependiente"
|
||||
- "4. Actualizar todas las referencias en ml schema y data-service"
|
||||
- "5. Recrear BD y verificar"
|
||||
riesgo: "Alto - afecta Python data-service, ml schema queries"
|
||||
|
||||
- id: "S4-T2"
|
||||
nombre: "Crear Market Data OHLCV Service"
|
||||
gap_ref: "GAP-SVC-P2-002"
|
||||
esfuerzo: "16h"
|
||||
dependencias: ["S2-T6", "S4-T1"]
|
||||
|
||||
- id: "S4-T3"
|
||||
nombre: "Crear Currency Exchange Service"
|
||||
gap_ref: "GAP-SVC-P2-003"
|
||||
esfuerzo: "8h"
|
||||
dependencias: ["S2-T4"]
|
||||
nota: "Reducido a 8h si solo se implementa lectura de rates sin API externa"
|
||||
|
||||
- id: "S4-T4"
|
||||
nombre: "Completar definiciones documentales"
|
||||
gap_ref: "GAP-DOC-P2-001"
|
||||
esfuerzo: "10h"
|
||||
dependencias: []
|
||||
|
||||
- id: "S4-T5"
|
||||
nombre: "Resolver gaps P3 (oportunista)"
|
||||
gap_ref: "GAP-IDX-P3-001, GAP-DEL-P3-001, GAP-ORPHAN-P3-001/002, GAP-ARCH-P3-001"
|
||||
esfuerzo: "4h"
|
||||
dependencias: []
|
||||
|
||||
criterio_exito:
|
||||
- "1 catalogo de simbolos unificado"
|
||||
- "Market data y currency services operativos"
|
||||
- "Todas las definiciones documentales creadas"
|
||||
- "0 gaps P3 pendientes"
|
||||
|
||||
metricas_esperadas:
|
||||
coherencia_services: "72% -> 85%"
|
||||
gaps_pendientes: "0"
|
||||
coherencia_global: "54% -> 90%"
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
# GRAFO DE DEPENDENCIAS
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
|
||||
dependencias:
|
||||
sprint_level:
|
||||
- "Sprint 1 -> Sprint 2 (entities necesitan DDL correcto)"
|
||||
- "Sprint 2 -> Sprint 3 (services necesitan entities)"
|
||||
- "Sprint 3 -> Sprint 4 (consolidation necesita services base)"
|
||||
|
||||
task_level_criticas:
|
||||
- "S1-T1 (enum migration) -> S1-T10 (BD validation)"
|
||||
- "S1-T2..T4 (FKs) -> S1-T10 (BD validation)"
|
||||
- "S2-T1 (audit entities) -> S3-T1 (audit services)"
|
||||
- "S2-T6 (feature_flags entity) -> S3-T2 (feature_flags service)"
|
||||
- "S2-T3 (trading entities) -> S3-T3 (bots service)"
|
||||
- "S2-T5 (investment entities) -> S3-T4 (risk service)"
|
||||
- "S4-T1 (symbols consolidation) -> S4-T2 (market data service)"
|
||||
|
||||
parallelism:
|
||||
sprint_1: "T1..T9 son independientes, T10 espera T1..T6"
|
||||
sprint_2: "T1..T6 son 100% paralelizables (diferentes schemas)"
|
||||
sprint_3: "T1..T4 son paralelizables (diferentes schemas)"
|
||||
sprint_4: "T1 secuencial, T2..T5 parcialmente paralelizables"
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
# ESTIMACION TOTAL
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
|
||||
estimacion:
|
||||
esfuerzo_secuencial:
|
||||
sprint_1: "24h"
|
||||
sprint_2: "62h"
|
||||
sprint_3: "68h"
|
||||
sprint_4: "50h"
|
||||
total: "204h"
|
||||
|
||||
esfuerzo_paralelo_estimado:
|
||||
sprint_1: "12h (2 agentes)"
|
||||
sprint_2: "21h (3 agentes)"
|
||||
sprint_3: "32h (2 agentes)"
|
||||
sprint_4: "28h (2 agentes)"
|
||||
total: "~93h"
|
||||
|
||||
duracion_calendario:
|
||||
con_1_agente: "~35 dias (7 semanas)"
|
||||
con_2_agentes: "~20 dias (4 semanas)"
|
||||
con_3_agentes: "~15 dias (3 semanas)"
|
||||
|
||||
distribucion_por_tipo:
|
||||
ddl_modifications: "10h (5%)"
|
||||
entity_creation: "62h (30%)"
|
||||
service_creation: "68h (33%)"
|
||||
documentation: "28h (14%)"
|
||||
consolidation: "20h (10%)"
|
||||
validation_testing: "16h (8%)"
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
# RIESGOS Y MITIGACION
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
|
||||
riesgos:
|
||||
- id: "R1"
|
||||
riesgo: "Symbols consolidation causa regresion en Python data-service"
|
||||
probabilidad: MEDIA
|
||||
impacto: ALTO
|
||||
mitigacion: "Ejecutar en Sprint 4 cuando servicios base esten estables. Crear script de migracion reversible."
|
||||
|
||||
- id: "R2"
|
||||
riesgo: "31 entities no compilan por dependencias circulares"
|
||||
probabilidad: BAJA
|
||||
impacto: MEDIO
|
||||
mitigacion: "Crear entities por schema aislado, lazy-load relations cross-schema"
|
||||
|
||||
- id: "R3"
|
||||
riesgo: "Audit services muy grandes (32h) retrasan Sprint 3"
|
||||
probabilidad: MEDIA
|
||||
impacto: MEDIO
|
||||
mitigacion: "Implementar read-only primero (queries), write operations en fase posterior"
|
||||
|
||||
- id: "R4"
|
||||
riesgo: "Enum migration rompe datos existentes"
|
||||
probabilidad: BAJA
|
||||
impacto: ALTO
|
||||
mitigacion: "Solo timeframe es safe (valores compatibles). transaction_type se documenta, no se migra."
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
# INTEGRACION CON ROADMAP EXISTENTE
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
|
||||
integracion_roadmap:
|
||||
roadmap_actual: "ROADMAP-2026-Q1.yml v1.0.0 (2026-01-27)"
|
||||
|
||||
cambios_requeridos:
|
||||
- seccion: "M1 (Gaps P0)"
|
||||
cambio: |
|
||||
Agregar: Sprint 1 de remediacion modelado (enum migrations, FKs, feature_flags doc).
|
||||
GAP-DDL-P0-001 ya resuelto (FK price_alerts corregida).
|
||||
Metricas baseline actualizadas: 37 gaps (no 12), 101 tablas (no 89).
|
||||
|
||||
- seccion: "M2 (Gaps P1)"
|
||||
cambio: |
|
||||
Integrar: Sprint 2 entities + Sprint 3 services.
|
||||
Nuevos gaps P1 identificados: 14 (vs 4 original).
|
||||
Target DDL-Backend coherence revisado: 54% actual (no 85%).
|
||||
|
||||
- seccion: "Metricas baseline"
|
||||
cambio: |
|
||||
Actualizar todas las metricas baseline con datos verificados:
|
||||
- Tablas: 101 (no 89)
|
||||
- Gaps: 37 (no 12), de los cuales 3 resueltos
|
||||
- Coherencia global: 54% (no 81.25% - recalculada con precision)
|
||||
- Entity coverage: 68% (no ~85%)
|
||||
- Service coverage: 52%
|
||||
- Controller coverage: 45%
|
||||
|
||||
- seccion: "Nuevos milestones"
|
||||
cambio: |
|
||||
Insertar M0.5: "Modelado BD Corregido" entre M0 y M1.
|
||||
Sprint 1+2 de remediacion como prerequisito para M1 (P0 funcionales).
|
||||
|
||||
nota: |
|
||||
El ROADMAP-2026-Q1.yml necesita actualizacion significativa.
|
||||
Las metricas originales estaban infladas (coherencia 81.25% vs 54% real).
|
||||
Se recomienda crear ROADMAP-2026-Q1 v2.0.0 incorporando estos hallazgos.
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
# CHECKLIST DE REMEDIACION
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
|
||||
checklist:
|
||||
pre_sprint_1:
|
||||
- "[ ] Verificar acceso a WSL para recrear BD"
|
||||
- "[ ] Verificar backup de datos actuales"
|
||||
- "[ ] Confirmar que PURGA-DOCUMENTAL.yml esta aprobado"
|
||||
|
||||
post_sprint_1:
|
||||
- "[ ] BD recrea sin errores"
|
||||
- "[ ] 0 conflictos enum"
|
||||
- "[ ] 3 nuevas FKs validadas"
|
||||
- "[ ] feature_flags documentado"
|
||||
- "[ ] Purga ejecutada"
|
||||
- "[ ] Inventarios sincronizados"
|
||||
|
||||
post_sprint_2:
|
||||
- "[ ] 31 entities compilan (npm run build)"
|
||||
- "[ ] Entity coverage >= 95%"
|
||||
- "[ ] BACKEND_INVENTORY actualizado"
|
||||
- "[ ] DDL-BACKEND-COHERENCE actualizado"
|
||||
|
||||
post_sprint_3:
|
||||
- "[ ] Audit endpoints operativos"
|
||||
- "[ ] Feature flags con cache Redis"
|
||||
- "[ ] Bots service 100%"
|
||||
- "[ ] Risk assessment operativo"
|
||||
- "[ ] Service coverage >= 72%"
|
||||
|
||||
post_sprint_4:
|
||||
- "[ ] 1 catalogo simbolos unificado"
|
||||
- "[ ] 0 gaps pendientes"
|
||||
- "[ ] Coherencia global >= 90%"
|
||||
- "[ ] COHERENCE-MASTER-REPORT v2.0 generado"
|
||||
- "[ ] ROADMAP-2026-Q1 v2.0 actualizado"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
# FIN DE PLAN-MAESTRO-REMEDIACION.yml
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
@ -0,0 +1,396 @@
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
# PURGA-DOCUMENTAL.yml - Analisis de Purga Documental
|
||||
# Trading Platform - orchestration/tareas/ y directorios relacionados
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
|
||||
version: "1.0.0"
|
||||
fecha: "2026-02-05"
|
||||
tarea: "TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD"
|
||||
agente: "Claude Code (Opus 4.6)"
|
||||
proyecto: "trading-platform"
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
# RESUMEN
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
|
||||
resumen:
|
||||
total_archivos_analizados: 201
|
||||
archivos_a_archivar: 30
|
||||
archivos_a_eliminar: 0
|
||||
archivos_a_conservar: 171
|
||||
directorios_analizados:
|
||||
- "orchestration/tareas/2026-01-25/ (22 archivos)"
|
||||
- "orchestration/tareas/2026-01-27/ (8 archivos)"
|
||||
- "orchestration/tareas/2026-01-28/ (0 archivos - VACIO)"
|
||||
- "orchestration/tareas/2026-01-30/ (9 archivos)"
|
||||
- "orchestration/tareas/2026-02-03/ (2 archivos)"
|
||||
- "orchestration/tareas/TASK-2026-02-03-ANALISIS-DDL-MODELADO/ (11 archivos)"
|
||||
- "orchestration/tareas/TASK-2026-02-03-ANALISIS-FRONTEND-UXUI/ (4 archivos)"
|
||||
- "orchestration/tareas/TASK-2026-02-03-BACKEND-ENTITIES-SYNC/ (1 archivo)"
|
||||
- "orchestration/tareas/TASK-2026-02-04-ANALISIS-PLANIFICACION-INTEGRAL/ (7 archivos)"
|
||||
- "orchestration/tareas/TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD/ (5 archivos)"
|
||||
- "orchestration/tareas/_archive/ (112 archivos)"
|
||||
- "docs/_archive/ (3 archivos)"
|
||||
- "orchestration/analisis/coherencia/ (11 archivos)"
|
||||
- "orchestration/analisis/_archive/ (6 archivos)"
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
# ACCIONES
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
|
||||
acciones:
|
||||
|
||||
# ═════════════════════════════════════════════════════════════
|
||||
# ELIMINAR
|
||||
# ═════════════════════════════════════════════════════════════
|
||||
eliminar:
|
||||
- path: "orchestration/tareas/2026-01-28/"
|
||||
razon: |
|
||||
Directorio COMPLETAMENTE VACIO (0 archivos, 0 subdirectorios).
|
||||
No contiene ninguna tarea ni metadata. Fue creado pero nunca utilizado.
|
||||
Eliminar para evitar confusion en la estructura de tareas.
|
||||
|
||||
# ═════════════════════════════════════════════════════════════
|
||||
# ARCHIVAR
|
||||
# ═════════════════════════════════════════════════════════════
|
||||
archivar:
|
||||
# --- 2026-01-25: Tareas completadas/canceladas ---
|
||||
- path: "orchestration/tareas/2026-01-25/TASK-2026-01-25-002-FRONTEND-COMPREHENSIVE-AUDIT/"
|
||||
destino: "orchestration/tareas/_archive/2026-01/TASK-2026-01-25-002-FRONTEND-COMPREHENSIVE-AUDIT/"
|
||||
archivos: 16
|
||||
razon: |
|
||||
Tarea COMPLETADA (100%) con fecha_fin 2026-01-30. Estado: completada.
|
||||
7+ entregables generados (COMPONENTS-MASTER-MATRIX.md, API-CONTRACTS-MASTER-MATRIX.md,
|
||||
MULTIMEDIA-MASTER-MATRIX.md, PURGE-PLAN.md, INTEGRATION-PLAN.md, DEPENDENCY-GRAPH.md,
|
||||
RECOMMENDATIONS.md). Los hallazgos ya fueron incorporados en tareas posteriores
|
||||
(TASK-2026-01-30-ANALISIS-INTEGRACION y TASK-2026-02-03-ANALISIS-FRONTEND-UXUI).
|
||||
Candidata a archivo historico.
|
||||
|
||||
- path: "orchestration/tareas/2026-01-25/TASK-2026-01-25-FRONTEND-MODULE-DOCS/"
|
||||
destino: "orchestration/tareas/_archive/2026-01/TASK-2026-01-25-FRONTEND-MODULE-DOCS/"
|
||||
archivos: 6
|
||||
razon: |
|
||||
Tarea CANCELADA el 2026-01-30 con 0% de progreso. Prioridad P3.
|
||||
Razon de cancelacion: dependia de TASK-002 que ya fue completada.
|
||||
Los modulos ya tienen documentacion base en sus carpetas.
|
||||
No tiene valor operativo; archivar como registro historico.
|
||||
|
||||
# --- 2026-01-27: Tarea supersedida ---
|
||||
- path: "orchestration/tareas/2026-01-27/TASK-2026-01-27-MASTER-ANALYSIS-PLAN/"
|
||||
destino: "orchestration/tareas/_archive/2026-01/TASK-2026-01-27-MASTER-ANALYSIS-PLAN/"
|
||||
archivos: 4
|
||||
razon: |
|
||||
Tarea explicitamente marcada como SUPERSEDIDA por TASK-2026-01-30-ANALISIS-INTEGRACION.
|
||||
Sus hallazgos (DDL completeness, backend-frontend coherence, ML pipeline analysis)
|
||||
fueron incorporados en la tarea sucesora. METADATA.yml confirma:
|
||||
"supersedida_por: TASK-2026-01-30-ANALISIS-INTEGRACION".
|
||||
Archivar como registro historico de decision.
|
||||
|
||||
# --- 2026-02-03 date directory: Supersedida ---
|
||||
- path: "orchestration/tareas/2026-02-03/TASK-2026-02-03-DDL-VALIDATION/"
|
||||
destino: "orchestration/tareas/_archive/2026-02/TASK-2026-02-03-DDL-VALIDATION/"
|
||||
archivos: 2
|
||||
razon: |
|
||||
Tarea de validacion DDL con status "in_progress" pero SUPERSEDIDA de facto por
|
||||
TASK-2026-02-03-ANALISIS-DDL-MODELADO (11 archivos, 88% progreso) y posteriormente
|
||||
por TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD (tarea actual).
|
||||
TASK-2026-02-04-ANALISIS-PLANIFICACION-INTEGRAL la lista explicitamente en
|
||||
"documentacion_a_purgar". Sus analisis de conflictos C1-C5 y gaps GAP-EDU/TRD/PAY/INV
|
||||
estan cubiertos con mayor detalle en las tareas sucesoras.
|
||||
|
||||
# --- Coherencia: Baselines supersedidos ---
|
||||
- path: "orchestration/analisis/coherencia/COHERENCE-BASELINE-2026-01-28.md"
|
||||
destino: "orchestration/analisis/_archive/2026-01/COHERENCE-BASELINE-2026-01-28.md"
|
||||
archivos: 1
|
||||
razon: |
|
||||
Baseline de coherencia del 2026-01-28 con metricas obsoletas:
|
||||
DDL-Backend 31%, Frontend Tests 5%, Global 39.6%.
|
||||
Supersedido por metricas actuales en TASK-2026-02-05 (DDL-Backend 85%,
|
||||
Global 81.25%) y COHERENCE-MASTER-REPORT.md (Global 81.25%).
|
||||
Las metricas baseline ya no reflejan el estado del proyecto.
|
||||
Archivar como referencia historica de progreso.
|
||||
|
||||
- path: "orchestration/analisis/coherencia/COHERENCE-FINAL-2026-01-28.md"
|
||||
destino: "orchestration/analisis/_archive/2026-01/COHERENCE-FINAL-2026-01-28.md"
|
||||
archivos: 1
|
||||
razon: |
|
||||
Reporte "final" del 2026-01-28 que reportaba Global ~75%. Fue un checkpoint
|
||||
intermedio, no un reporte final real. Las metricas han sido actualizadas
|
||||
multiples veces desde entonces (ahora Global 81.25%+).
|
||||
COHERENCE-MASTER-REPORT.md y los analisis de Feb 2026 lo reemplazan.
|
||||
Archivar como referencia historica de progreso.
|
||||
|
||||
# ═════════════════════════════════════════════════════════════
|
||||
# CONSERVAR
|
||||
# ═════════════════════════════════════════════════════════════
|
||||
conservar:
|
||||
# --- 2026-01-27: Tarea postergada pero potencialmente reactivable ---
|
||||
- path: "orchestration/tareas/2026-01-27/TASK-2026-01-27-BLOCKER-001-TOKEN-REFRESH/"
|
||||
archivos: 4
|
||||
razon: |
|
||||
Tarea POSTERGADA (no cancelada ni supersedida) con estado explicito "postergada".
|
||||
0% de progreso pero contiene contexto y plan detallado para mejoras de seguridad
|
||||
(rate limiting, token rotation, session validation, proactive refresh).
|
||||
Auto-refresh funciona al 90%; estas son mejoras pendientes reactivables.
|
||||
CONSERVAR en ubicacion actual para futura reactivacion.
|
||||
|
||||
# --- 2026-01-30: Tarea completada con valor de referencia vigente ---
|
||||
- path: "orchestration/tareas/2026-01-30/TASK-2026-01-30-ANALISIS-INTEGRACION/"
|
||||
archivos: 9
|
||||
razon: |
|
||||
Tarea COMPLETADA el 2026-01-30 con todos los sprints ejecutados (1-4).
|
||||
Contiene entregables con valor de referencia vigente:
|
||||
- COHERENCE-INVENTARIOS-WORKSPACE-PROYECTO.md (coherencia workspace-proyecto)
|
||||
- TEMPLATE-SAAS-INTEGRATION-MATRIX.md (matriz reutilizacion modulos)
|
||||
- GAPS-MATRIX-CONSOLIDATED.md (gaps consolidados)
|
||||
- EXECUTION-PLAN-HIERARCHICAL.md (plan ejecucion)
|
||||
Referenciada activamente por tareas posteriores. CONSERVAR.
|
||||
|
||||
# --- 2026-02-03: Tareas recientes con valor operativo activo ---
|
||||
- path: "orchestration/tareas/TASK-2026-02-03-ANALISIS-DDL-MODELADO/"
|
||||
archivos: 11
|
||||
razon: |
|
||||
Tarea reciente (2026-02-03), 88% completada. Contiene inventarios DDL activos:
|
||||
DDL-VALIDATION-MATRIX.yml, DDL-CONFLICTS-REGISTRY.yml, DDL-GAPS-REGISTRY.yml.
|
||||
Referenciada por TASK-2026-02-04 y TASK-2026-02-05 como input. CONSERVAR.
|
||||
|
||||
- path: "orchestration/tareas/TASK-2026-02-03-ANALISIS-FRONTEND-UXUI/"
|
||||
archivos: 4
|
||||
razon: |
|
||||
Tarea reciente COMPLETADA (100%). Define 12 subtareas frontend pendientes
|
||||
de ejecucion (SUBTASK-001 a SUBTASK-012). Plan activo de implementacion.
|
||||
Referenciada como input por TASK-2026-02-04. CONSERVAR.
|
||||
|
||||
- path: "orchestration/tareas/TASK-2026-02-03-BACKEND-ENTITIES-SYNC/"
|
||||
archivos: 1
|
||||
razon: |
|
||||
Tarea reciente COMPLETADA (100%) el 2026-02-04.
|
||||
Documenta 5 servicios backend creados (instructor, tag, drawing,
|
||||
prediction-overlay, refund). Registro de commits incluido.
|
||||
Valor como referencia de lo implementado. CONSERVAR.
|
||||
|
||||
- path: "orchestration/tareas/TASK-2026-02-04-ANALISIS-PLANIFICACION-INTEGRAL/"
|
||||
archivos: 7
|
||||
razon: |
|
||||
Tarea reciente EN PROGRESO (25%). Contiene CONSOLIDADO-GAPS.yml y
|
||||
planes de delegacion activos. 35 subtareas definidas, 558 story points mapeados.
|
||||
Bloquea ejecucion de Sprint 1 Frontend y FASE_1 DDL. CONSERVAR.
|
||||
|
||||
- path: "orchestration/tareas/TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD/"
|
||||
archivos: 5
|
||||
razon: |
|
||||
Tarea ACTUAL en ejecucion. CONSERVAR obligatoriamente.
|
||||
|
||||
# --- _archive tareas: Registro historico consolidado ---
|
||||
- path: "orchestration/tareas/_archive/"
|
||||
archivos: 112
|
||||
razon: |
|
||||
Archivo historico consolidado con 21+ tareas de enero 2026.
|
||||
Ya fue curado en TASK-2026-01-30-ANALISIS-INTEGRACION (Sprint 3).
|
||||
Contiene 19 subdirectorios con tareas archivadas correctamente.
|
||||
Politica establece: NO eliminar archivos de _archive. CONSERVAR.
|
||||
|
||||
# --- docs/_archive: Registro historico documentacion ---
|
||||
- path: "docs/_archive/"
|
||||
archivos: 3
|
||||
razon: |
|
||||
Archivo historico de documentacion con README indice propio.
|
||||
Contiene:
|
||||
- NOTA-DISCREPANCIA-PUERTOS-2025-12-08.md (resuelta 2026-01-07)
|
||||
- 04-fase-backlog/README.md (deprecado por referencias rotas)
|
||||
- README.md (indice del archivo)
|
||||
Politica establece: "NO deben ser eliminados, sirven como registro historico".
|
||||
CONSERVAR.
|
||||
|
||||
# --- Coherencia: Documentos activos ---
|
||||
- path: "orchestration/analisis/coherencia/COHERENCE-MASTER-REPORT.md"
|
||||
archivos: 1
|
||||
razon: |
|
||||
Reporte maestro de coherencia con metricas globales vigentes (81.25%).
|
||||
Referenciado por TASK-2026-02-05 como fuente de referencia. CONSERVAR.
|
||||
|
||||
- path: "orchestration/analisis/coherencia/DDL-COMPLETE-MATRIX.yml"
|
||||
archivos: 1
|
||||
razon: |
|
||||
Matriz completa DDL con 89+ tablas documentadas, enums, funciones, triggers.
|
||||
Referenciado activamente por multiples tareas de analisis. CONSERVAR.
|
||||
|
||||
- path: "orchestration/analisis/coherencia/DDL-BACKEND-COHERENCE.yml"
|
||||
archivos: 1
|
||||
razon: |
|
||||
Analisis detallado de coherencia DDL-Backend por schema. 36 servicios evaluados.
|
||||
18 gaps identificados y priorizados. Referencia activa. CONSERVAR.
|
||||
|
||||
- path: "orchestration/analisis/coherencia/GAPS-TRACKING.yml"
|
||||
archivos: 1
|
||||
razon: |
|
||||
Tracking activo de gaps pendientes. Documento operativo. CONSERVAR.
|
||||
|
||||
- path: "orchestration/analisis/coherencia/RESUMEN-EJECUTIVO.md"
|
||||
archivos: 1
|
||||
razon: |
|
||||
Overview ejecutivo para stakeholders. Documento vigente. CONSERVAR.
|
||||
|
||||
- path: "orchestration/analisis/coherencia/_INDEX.md"
|
||||
archivos: 1
|
||||
razon: |
|
||||
Indice del directorio de coherencia. Documento estructural. CONSERVAR.
|
||||
|
||||
- path: "orchestration/analisis/coherencia/README.md"
|
||||
archivos: 1
|
||||
razon: |
|
||||
README del directorio. Documento estructural. CONSERVAR.
|
||||
|
||||
- path: "orchestration/analisis/coherencia/AUDIT-DDL-BACKEND.md"
|
||||
archivos: 1
|
||||
razon: |
|
||||
Auditoria DDL-Backend del 2026-01-28. Metricas de coherencia 31% (baseline)
|
||||
que contrastan con valores actuales (85%). Sin embargo, contiene mapeo
|
||||
detallado de tablas orphan que sigue siendo referencia util.
|
||||
Metricas desactualizadas pero mapeo de detalle aun relevante. CONSERVAR.
|
||||
|
||||
- path: "orchestration/analisis/coherencia/AUDIT-BACKEND-FRONTEND.md"
|
||||
archivos: 1
|
||||
razon: |
|
||||
Auditoria Backend-Frontend del 2026-01-28. 208 endpoints mapeados,
|
||||
147 con consumidor, 11 services frontend faltantes. Referencia
|
||||
detallada aun util para implementacion. CONSERVAR.
|
||||
|
||||
# --- analisis/_archive: Historico de analisis ---
|
||||
- path: "orchestration/analisis/_archive/"
|
||||
archivos: 6
|
||||
razon: |
|
||||
Archivo historico de analisis OQI-001 del 2026-01-25 (5 archivos) + indice.
|
||||
Ya fue movido a _archive correctamente. CONSERVAR como registro historico.
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
# RESUMEN POR DIRECTORIO
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
|
||||
resumen_por_directorio:
|
||||
|
||||
"orchestration/tareas/2026-01-25/":
|
||||
total_archivos: 22
|
||||
decision: ARCHIVAR
|
||||
detalle: |
|
||||
2 tareas: 1 completada (FRONTEND-COMPREHENSIVE-AUDIT, 16 archivos)
|
||||
y 1 cancelada (FRONTEND-MODULE-DOCS, 6 archivos).
|
||||
Ambas sin valor operativo actual. Hallazgos ya absorbidos
|
||||
por tareas posteriores. Mover completo a _archive/2026-01/.
|
||||
|
||||
"orchestration/tareas/2026-01-27/":
|
||||
total_archivos: 8
|
||||
decision: MIXTO
|
||||
detalle: |
|
||||
2 tareas: MASTER-ANALYSIS-PLAN (SUPERSEDIDA, 4 archivos) -> ARCHIVAR
|
||||
y BLOCKER-001-TOKEN-REFRESH (POSTERGADA, 4 archivos) -> CONSERVAR.
|
||||
La tarea postergada tiene potencial de reactivacion.
|
||||
|
||||
"orchestration/tareas/2026-01-28/":
|
||||
total_archivos: 0
|
||||
decision: ELIMINAR
|
||||
detalle: |
|
||||
Directorio completamente vacio. Sin archivos, sin subdirectorios.
|
||||
Creado pero nunca utilizado. Eliminar directorio vacio.
|
||||
|
||||
"orchestration/tareas/2026-01-30/":
|
||||
total_archivos: 9
|
||||
decision: CONSERVAR
|
||||
detalle: |
|
||||
1 tarea COMPLETADA (ANALISIS-INTEGRACION) con 9 entregables de referencia
|
||||
activa. Referenciada por tareas actuales. Conservar integramente.
|
||||
|
||||
"orchestration/tareas/2026-02-03/":
|
||||
total_archivos: 2
|
||||
decision: ARCHIVAR
|
||||
detalle: |
|
||||
1 tarea (DDL-VALIDATION) supersedida de facto por TASK-2026-02-03-ANALISIS-DDL-MODELADO
|
||||
y TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD.
|
||||
TASK-2026-02-04 la lista como "documentacion_a_purgar".
|
||||
|
||||
"orchestration/tareas/TASK-2026-02-03-*":
|
||||
total_archivos: 16
|
||||
decision: CONSERVAR
|
||||
detalle: |
|
||||
3 tareas recientes (DDL-MODELADO 88%, FRONTEND-UXUI 100%, BACKEND-SYNC 100%).
|
||||
Todas con valor operativo activo y referenciadas como input por tareas
|
||||
en progreso. Conservar integramente.
|
||||
|
||||
"orchestration/tareas/TASK-2026-02-04-*":
|
||||
total_archivos: 7
|
||||
decision: CONSERVAR
|
||||
detalle: |
|
||||
1 tarea EN PROGRESO (25%). Plan integral con 35 subtareas y 558 SP.
|
||||
Bloquea ejecucion de sprints. Conservar obligatoriamente.
|
||||
|
||||
"orchestration/tareas/TASK-2026-02-05-*":
|
||||
total_archivos: 5
|
||||
decision: CONSERVAR
|
||||
detalle: "Tarea actual en ejecucion. Conservar obligatoriamente."
|
||||
|
||||
"orchestration/tareas/_archive/":
|
||||
total_archivos: 112
|
||||
decision: CONSERVAR
|
||||
detalle: |
|
||||
Archivo historico consolidado. 21+ tareas archivadas en 19 subdirectorios.
|
||||
Politica de archivo establece que NO se eliminan. Ya fue curado en Sprint 3
|
||||
de TASK-2026-01-30-ANALISIS-INTEGRACION.
|
||||
|
||||
"docs/_archive/":
|
||||
total_archivos: 3
|
||||
decision: CONSERVAR
|
||||
detalle: |
|
||||
Archivo historico con indice propio. 2 documentos archivados + README.
|
||||
Politica establece: "NO deben ser eliminados". Conservar.
|
||||
|
||||
"orchestration/analisis/coherencia/":
|
||||
total_archivos: 11
|
||||
decision: MIXTO
|
||||
detalle: |
|
||||
9 archivos CONSERVAR (documentos activos y de referencia vigente).
|
||||
2 archivos ARCHIVAR (COHERENCE-BASELINE-2026-01-28.md y
|
||||
COHERENCE-FINAL-2026-01-28.md con metricas obsoletas).
|
||||
|
||||
"orchestration/analisis/_archive/":
|
||||
total_archivos: 6
|
||||
decision: CONSERVAR
|
||||
detalle: "Archivo historico ya consolidado. Conservar como registro."
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
# NOTAS
|
||||
# ─────────────────────────────────────────────────────────────────
|
||||
|
||||
notas: |
|
||||
1. DIRECTORIO VACIO: orchestration/tareas/2026-01-28/ es el unico directorio
|
||||
completamente vacio encontrado. Se marca para eliminacion (no hay datos que perder).
|
||||
|
||||
2. PATRON DE SUPERSESION: Se detecta un patron de tareas de analisis que se
|
||||
superseden entre si: MASTER-ANALYSIS-PLAN -> ANALISIS-INTEGRACION -> DDL-VALIDATION
|
||||
-> ANALISIS-DDL-MODELADO -> ANALISIS-VALIDACION-MODELADO-BD (actual).
|
||||
Las tareas supersedidas deben archivarse para no generar confusion.
|
||||
|
||||
3. CONVENCION DE NAMING: Se observan dos convenciones de directorios de tareas:
|
||||
- Por fecha: 2026-01-25/, 2026-01-27/, etc. (contienen subdirectorios TASK-*)
|
||||
- Por ID: TASK-2026-02-03-*, TASK-2026-02-04-*, etc. (directamente en tareas/)
|
||||
Recomendacion: estandarizar en una sola convencion para futuras tareas.
|
||||
|
||||
4. VOLUMEN DE ARCHIVO: _archive/ contiene 112 archivos en 19 subdirectorios.
|
||||
Considerar una revision periodica (trimestral) para comprimir o consolidar
|
||||
tareas muy antiguas en un solo reporte resumen.
|
||||
|
||||
5. METRICAS DESACTUALIZADAS: Los reportes de coherencia de 2026-01-28 muestran
|
||||
metricas significativamente diferentes a las actuales (31% vs 85% DDL-Backend).
|
||||
Esto valida la necesidad de archivar los baselines obsoletos y mantener solo
|
||||
el COHERENCE-MASTER-REPORT.md actualizado.
|
||||
|
||||
6. IMPACTO ESTIMADO: Las acciones de archivado propuestas reduciran 30 archivos
|
||||
de los directorios activos, manteniendo solo contenido operativamente relevante.
|
||||
El directorio vacio eliminado no impacta datos.
|
||||
|
||||
7. PREREQUISITO: Antes de ejecutar estas acciones, actualizar _INDEX.yml del
|
||||
directorio tareas/ para reflejar los movimientos. Verificar que las referencias
|
||||
cruzadas en METADATA.yml de tareas activas no se rompen.
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
# FIN DE PURGA-DOCUMENTAL.yml
|
||||
# ═══════════════════════════════════════════════════════════════════
|
||||
@ -0,0 +1,213 @@
|
||||
# RECOMENDACIONES DE MODELADO - Trading Platform
|
||||
|
||||
**Tarea:** TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD
|
||||
**Fecha:** 2026-02-05
|
||||
**Perfil:** Especialista en Base de Datos y Modelado de Datos
|
||||
|
||||
---
|
||||
|
||||
## R1. Consolidar Catalogos de Simbolos (PRIORIDAD ALTA)
|
||||
|
||||
**Problema:** `trading.symbols` (UUID PK) y `market_data.tickers` (SERIAL PK) son catalogos
|
||||
paralelos del mismo concepto con PKs incompatibles.
|
||||
|
||||
**Recomendacion:**
|
||||
1. Designar `trading.symbols` como tabla maestra (ya usa UUID, mas campos)
|
||||
2. Agregar campos ML de tickers a symbols: `is_ml_enabled`, `polygon_ticker`, `supported_timeframes`
|
||||
3. Migrar `market_data.tickers` a vista o tabla dependiente con FK a `trading.symbols`
|
||||
4. Actualizar todas las referencias de `market_data.tickers.id` (SERIAL) a usar `trading.symbols.id` (UUID)
|
||||
|
||||
**Impacto:** Afecta ml schema, market_data schema, data-service Python
|
||||
**Esfuerzo:** 12h (4h analisis + 8h implementacion)
|
||||
|
||||
---
|
||||
|
||||
## R2. Ejecutar Migraciones de Enums (PRIORIDAD ALTA)
|
||||
|
||||
**Problema:** Existen archivos de migracion para 2 de 3 conflictos, pero estan comentados y
|
||||
nunca se ejecutaron.
|
||||
|
||||
**Hallazgo clave:** Ambos archivos de migracion existen pero son **solo documentacion** (SQL comentado).
|
||||
`public.trading_timeframe` ya fue creado en `00-global-types.sql` pero las tablas no fueron migradas.
|
||||
|
||||
**Recomendacion por conflicto:**
|
||||
|
||||
1. **transaction_type (CONF-001, ALTA):** NO renombrar (breaking change). Mantener separados
|
||||
con calificacion de schema estricta. Los schemas son separados y sirven propositos distintos.
|
||||
Documentar la distincion en backend y enforcer `schema.enum` en todas las queries.
|
||||
|
||||
2. **timeframe (DUP-001, MEDIA):** `public.trading_timeframe` ya existe con 9 valores.
|
||||
Ejecutar migracion de columnas en 3 tablas: `trading.bots`, `trading.signals`, `trading.drawing_tools`.
|
||||
Non-breaking change (valores compatibles). Luego DROP tipos viejos.
|
||||
|
||||
3. **risk_profile (DUP-002, BAJA):** Valores identicos en ambos schemas. Opcional:
|
||||
crear `public.risk_profile` para consistencia. No es urgente.
|
||||
|
||||
**Secuencia de ejecucion (solo timeframe - unico ejecutable sin riesgo):**
|
||||
```sql
|
||||
-- Paso 1: Migrar trading.bots.timeframe
|
||||
ALTER TABLE trading.bots ADD COLUMN timeframe_new public.trading_timeframe;
|
||||
UPDATE trading.bots SET timeframe_new = timeframe::text::public.trading_timeframe;
|
||||
ALTER TABLE trading.bots DROP COLUMN timeframe;
|
||||
ALTER TABLE trading.bots RENAME COLUMN timeframe_new TO timeframe;
|
||||
|
||||
-- Paso 2: Repetir para trading.signals y trading.drawing_tools
|
||||
-- Paso 3: DROP TYPE trading.timeframe; DROP TYPE market_data.timeframe;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## R3. Agregar Foreign Keys Cross-Schema (PRIORIDAD ALTA)
|
||||
|
||||
**Problema:** Relaciones logicas entre schemas no estan formalizadas con FK.
|
||||
|
||||
**Recomendacion:**
|
||||
|
||||
### R3.1 investment.accounts -> financial.wallets
|
||||
```sql
|
||||
ALTER TABLE investment.accounts
|
||||
ADD COLUMN wallet_id UUID REFERENCES financial.wallets(id);
|
||||
```
|
||||
Nota: La columna `wallet_id` ya existe en el DDL actual de `investment.accounts`. Verificar si el FK esta creado.
|
||||
|
||||
### R3.2 trading.bots -> financial.wallets
|
||||
```sql
|
||||
ALTER TABLE trading.bots
|
||||
ADD COLUMN wallet_id UUID REFERENCES financial.wallets(id);
|
||||
```
|
||||
Para vincular capital de bots con wallets formalmente.
|
||||
|
||||
### R3.3 market_data.tickers -> trading.symbols
|
||||
```sql
|
||||
ALTER TABLE market_data.tickers
|
||||
ADD COLUMN symbol_id UUID REFERENCES trading.symbols(id);
|
||||
```
|
||||
Vincula catalogos hasta que se consoliden (R1).
|
||||
|
||||
---
|
||||
|
||||
## R4. Documentar feature_flags Schema (PRIORIDAD ALTA)
|
||||
|
||||
**Problema:** Schema completo invisible para backend y documentacion.
|
||||
|
||||
**Recomendacion:**
|
||||
1. Agregar a CLAUDE.md del proyecto en la seccion de schemas
|
||||
2. Crear entity `Flag` en backend
|
||||
3. Crear servicio `FeatureFlagService` con cache Redis
|
||||
4. Documentar tabla `flags` en docs/ con ET (especificacion tecnica)
|
||||
5. Integrar en middleware de Express para feature gating
|
||||
|
||||
**Patron sugerido:**
|
||||
```typescript
|
||||
// Middleware
|
||||
const featureFlag = async (flagName: string) => {
|
||||
const flag = await featureFlagService.getFlag(flagName);
|
||||
return flag?.is_enabled ?? false;
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## R5. Estandarizar Nomenclatura (PRIORIDAD MEDIA)
|
||||
|
||||
**Problema:** Inconsistencias en nombres de campos entre schemas.
|
||||
|
||||
| Caso | Tabla A | Tabla B | Recomendacion |
|
||||
|------|---------|---------|---------------|
|
||||
| asset_type vs asset_class | market_data.tickers | trading.symbols | Usar `asset_class` |
|
||||
| strategy_type (VARCHAR) | trading.bots | - | Considerar FK a catalogo |
|
||||
| timeframe (multiples) | public, trading, market_data | - | Consolidar en 1 enum |
|
||||
|
||||
---
|
||||
|
||||
## R6. Crear Servicios para audit Schema (PRIORIDAD MEDIA)
|
||||
|
||||
**Problema:** 7 tablas de audit sin ningun servicio backend (0% coherencia).
|
||||
|
||||
**Recomendacion:** Crear un modulo audit con:
|
||||
1. `AuditService` - queries sobre audit_logs, data_access_logs
|
||||
2. `SecurityEventService` - queries sobre security_events
|
||||
3. `TradingAuditService` - queries sobre trading_audit
|
||||
4. `ComplianceService` - queries sobre compliance_logs
|
||||
5. `AuditController` - endpoints admin-only con paginacion
|
||||
|
||||
**Endpoints sugeridos:**
|
||||
```
|
||||
GET /api/admin/audit/logs?user_id=&event_type=&from=&to=&page=&limit=
|
||||
GET /api/admin/audit/security?severity=&from=&to=
|
||||
GET /api/admin/audit/trading?bot_id=&from=&to=
|
||||
GET /api/admin/audit/compliance?type=&status=
|
||||
GET /api/admin/audit/export?format=csv|json&from=&to=
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## R7. Patron de Soft Delete (PRIORIDAD BAJA)
|
||||
|
||||
**Problema:** `financial.wallets` usa `ON DELETE RESTRICT` en FK a `auth.users`, lo que
|
||||
impide eliminar usuarios con wallet.
|
||||
|
||||
**Recomendacion:**
|
||||
1. Documentar como decision arquitectural (no es bug)
|
||||
2. Implementar soft delete: agregar `deleted_at TIMESTAMPTZ` a `auth.users`
|
||||
3. Actualizar queries para filtrar `WHERE deleted_at IS NULL`
|
||||
4. Mantener RESTRICT para proteger integridad financiera
|
||||
|
||||
---
|
||||
|
||||
## R8. Indices Compuestos para Performance (PRIORIDAD BAJA)
|
||||
|
||||
**Recomendacion de indices adicionales:**
|
||||
|
||||
```sql
|
||||
-- Alertas activas por usuario y simbolo (query frecuente)
|
||||
CREATE INDEX idx_price_alerts_user_symbol_active
|
||||
ON trading.price_alerts(user_id, symbol_id)
|
||||
WHERE status = 'active';
|
||||
|
||||
-- Predicciones recientes por simbolo y tipo
|
||||
CREATE INDEX idx_predictions_symbol_type_created
|
||||
ON ml.predictions(symbol, prediction_type, created_at DESC);
|
||||
|
||||
-- Enrollments activos por usuario
|
||||
CREATE INDEX idx_enrollments_user_active
|
||||
ON education.enrollments(user_id)
|
||||
WHERE status IN ('active', 'in_progress');
|
||||
|
||||
-- OHLCV queries recientes
|
||||
CREATE INDEX idx_ohlcv_5m_recent
|
||||
ON market_data.ohlcv_5m(symbol, timestamp DESC);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## R9. Considerar Particionamiento para Tablas de Alto Volumen (FUTURO)
|
||||
|
||||
Las siguientes tablas pueden beneficiarse de particionamiento por fecha:
|
||||
|
||||
| Tabla | Razon | Estrategia |
|
||||
|-------|-------|------------|
|
||||
| market_data.ohlcv_5m | Alto volumen (288 registros/dia/simbolo) | Range partition por mes |
|
||||
| market_data.ohlcv_15m | Alto volumen (96 registros/dia/simbolo) | Range partition por mes |
|
||||
| audit.audit_logs | Crecimiento continuo | Range partition por mes |
|
||||
| audit.api_request_logs | Alto volumen por request | Range partition por semana |
|
||||
|
||||
---
|
||||
|
||||
## Resumen de Prioridades
|
||||
|
||||
| # | Recomendacion | Prioridad | Esfuerzo | Impacto |
|
||||
|---|---------------|-----------|----------|---------|
|
||||
| R1 | Consolidar catalogos simbolos | ALTA | 12h | Elimina duplicacion |
|
||||
| R2 | Ejecutar migraciones enums | ALTA | 5h | Elimina 3 conflictos |
|
||||
| R3 | Agregar FKs cross-schema | ALTA | 4h | Integridad referencial |
|
||||
| R4 | Documentar feature_flags | ALTA | 8h | Schema invisible |
|
||||
| R5 | Estandarizar nomenclatura | MEDIA | 2h | Consistencia |
|
||||
| R6 | Servicios audit | MEDIA | 32h | 0% -> 100% coherencia |
|
||||
| R7 | Soft delete pattern | BAJA | 4h | Mejora UX admin |
|
||||
| R8 | Indices compuestos | BAJA | 2h | Performance |
|
||||
| R9 | Particionamiento | FUTURO | 16h | Escalabilidad |
|
||||
|
||||
---
|
||||
|
||||
*Generado por Claude Code (Opus 4.6) - TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD*
|
||||
@ -0,0 +1,209 @@
|
||||
# REMEDIATION CHECKLIST - Trading Platform Database Modeling
|
||||
# TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD - Fase 6
|
||||
|
||||
**Fecha:** 2026-02-05
|
||||
**Agente:** Claude Code (Opus 4.6)
|
||||
**Referencia:** PLAN-MAESTRO-REMEDIACION.yml
|
||||
|
||||
---
|
||||
|
||||
## Sprint 1: Quick Wins DDL + Enum Resolution (5 dias, 24h)
|
||||
|
||||
### DDL Corrections
|
||||
|
||||
- [ ] **S1-T1** Migrar timeframe enum en 3 tablas (GAP-ENUM-P1-003)
|
||||
- [ ] trading.bots.timeframe -> public.trading_timeframe
|
||||
- [ ] trading.signals.timeframe -> public.trading_timeframe
|
||||
- [ ] trading.drawing_tools.timeframe -> public.trading_timeframe
|
||||
- [ ] DROP TYPE trading.timeframe
|
||||
- [ ] DROP TYPE market_data.timeframe (si no tiene dependencias)
|
||||
|
||||
- [ ] **S1-T2** Agregar FK trading.bots -> financial.wallets (GAP-REL-P1-002)
|
||||
- [ ] ALTER TABLE trading.bots ADD COLUMN wallet_id UUID REFERENCES financial.wallets(id)
|
||||
- [ ] Verificar ON DELETE behavior
|
||||
|
||||
- [ ] **S1-T3** Agregar FK market_data.tickers -> trading.symbols (GAP-REL-P1-003)
|
||||
- [ ] ALTER TABLE market_data.tickers ADD COLUMN symbol_id UUID REFERENCES trading.symbols(id)
|
||||
|
||||
- [ ] **S1-T4** Agregar FK investment.accounts -> financial.wallets (GAP-REL-P1-001)
|
||||
- [ ] Verificar si wallet_id ya existe en DDL
|
||||
- [ ] Agregar FK si falta
|
||||
|
||||
- [ ] **S1-T6** Estandarizar asset_type -> asset_class (GAP-NAME-P2-001)
|
||||
- [ ] Renombrar columna en market_data.tickers
|
||||
|
||||
### Documentation
|
||||
|
||||
- [ ] **S1-T5** Documentar decision transaction_type separados (GAP-ENUM-P1-001)
|
||||
- [ ] Crear ADR en docs/90-adr/
|
||||
- [ ] Documentar enforcement de schema qualification en backend
|
||||
|
||||
- [ ] **S1-T7** Documentar feature_flags schema (GAP-DDL-P0-002)
|
||||
- [ ] ET en docs/02-definicion-modulos/
|
||||
- [ ] Actualizar CLAUDE.md del proyecto
|
||||
- [ ] Documentar: flags, user_flags, evaluations
|
||||
- [ ] Documentar: flag_status, rollout_stage enums
|
||||
- [ ] Documentar: evaluate_flag() function
|
||||
|
||||
- [ ] **S1-T9** Crear definiciones para tablas no documentadas
|
||||
- [ ] education (7): instructors, course_tags, course_tag_assignments, review_helpful_votes, user_activity_log, course_reviews, progress
|
||||
- [ ] trading (2): drawing_tools, drawing_templates
|
||||
- [ ] financial (2): refunds, currency_exchange_rates
|
||||
- [ ] ml (2): llm_signals, prediction_overlays
|
||||
- [ ] auth (2): notifications, user_push_tokens
|
||||
- [ ] investment (2): agent_executions, risk_questionnaire
|
||||
- [ ] llm (1): user_preferences
|
||||
- [ ] portfolio (1): portfolio_snapshots
|
||||
- [ ] market_data (1): staging
|
||||
|
||||
### Operations
|
||||
|
||||
- [ ] **S1-T8** Ejecutar purga documental
|
||||
- [ ] Eliminar orchestration/tareas/2026-01-28/ (vacio)
|
||||
- [ ] Archivar tareas/2026-01-25/TASK-2026-01-25-002-FRONTEND-COMPREHENSIVE-AUDIT/
|
||||
- [ ] Archivar tareas/2026-01-25/TASK-2026-01-25-FRONTEND-MODULE-DOCS/
|
||||
- [ ] Archivar tareas/2026-01-27/TASK-2026-01-27-MASTER-ANALYSIS-PLAN/
|
||||
- [ ] Archivar tareas/2026-02-03/TASK-2026-02-03-DDL-VALIDATION/
|
||||
- [ ] Archivar coherencia/COHERENCE-BASELINE-2026-01-28.md
|
||||
- [ ] Archivar coherencia/COHERENCE-FINAL-2026-01-28.md
|
||||
- [ ] Actualizar _INDEX.yml
|
||||
|
||||
### Validation
|
||||
|
||||
- [ ] **S1-T10** Recrear BD en WSL
|
||||
- [ ] `wsl unified-recreate-db.sh trading-platform --drop`
|
||||
- [ ] Verificar 101 tablas se crean sin error
|
||||
- [ ] Verificar 3 nuevas FKs existen
|
||||
- [ ] Verificar timeframe enum migrado
|
||||
|
||||
### Sprint 1 Exit Criteria
|
||||
|
||||
- [ ] BD recrea sin errores
|
||||
- [ ] 0 conflictos de enum activos
|
||||
- [ ] 3 FKs cross-schema agregadas
|
||||
- [ ] feature_flags documentado
|
||||
- [ ] Purga documental ejecutada
|
||||
- [ ] git commit + push
|
||||
|
||||
---
|
||||
|
||||
## Sprint 2: Backend Entities (10 dias, 62h)
|
||||
|
||||
### Entity Creation by Schema
|
||||
|
||||
- [ ] **S2-T1** Audit (7 entities)
|
||||
- [ ] AuditLog entity
|
||||
- [ ] SecurityEvent entity
|
||||
- [ ] SystemEvent entity
|
||||
- [ ] TradingAudit entity
|
||||
- [ ] ApiRequestLog entity
|
||||
- [ ] DataAccessLog entity
|
||||
- [ ] ComplianceLog entity
|
||||
|
||||
- [ ] **S2-T2** Education (5 entities)
|
||||
- [ ] UserActivityLog entity
|
||||
- [ ] ReviewHelpfulVote entity
|
||||
- [ ] CourseTag entity
|
||||
- [ ] CourseTagAssignment entity
|
||||
- [ ] Video entity
|
||||
|
||||
- [ ] **S2-T3** Trading (3 entities)
|
||||
- [ ] PriceAlert entity
|
||||
- [ ] DrawingTool entity
|
||||
- [ ] DrawingTemplate entity
|
||||
|
||||
- [ ] **S2-T4** Financial (3 entities)
|
||||
- [ ] WalletLimit entity
|
||||
- [ ] CurrencyExchangeRate entity
|
||||
- [ ] Refund entity
|
||||
|
||||
- [ ] **S2-T5** Investment (3 entities)
|
||||
- [ ] DistributionHistory entity
|
||||
- [ ] DistributionRun entity
|
||||
- [ ] AgentExecution entity
|
||||
|
||||
- [ ] **S2-T6** Minor schemas (10 entities)
|
||||
- [ ] ml: LlmSignal, PredictionOverlay
|
||||
- [ ] portfolio: RebalanceHistory, PortfolioSnapshot
|
||||
- [ ] market_data: Ohlcv5m, Ohlcv15m, Staging
|
||||
- [ ] auth: RateLimitingConfig, UserPushToken
|
||||
- [ ] feature_flags: Flag
|
||||
|
||||
### Sprint 2 Exit Criteria
|
||||
|
||||
- [ ] npm run build exitoso
|
||||
- [ ] 31 entities creadas
|
||||
- [ ] Entity coverage >= 95%
|
||||
- [ ] BACKEND_INVENTORY actualizado
|
||||
- [ ] git commit + push
|
||||
|
||||
---
|
||||
|
||||
## Sprint 3: Backend Services (10 dias, 68h)
|
||||
|
||||
- [ ] **S3-T1** AuditService + SecurityEventService + TradingAuditService + ComplianceService (32h)
|
||||
- [ ] 5 admin-only endpoints operativos
|
||||
- [ ] Paginacion + filtros
|
||||
- [ ] Export CSV/JSON
|
||||
|
||||
- [ ] **S3-T2** FeatureFlagService (8h)
|
||||
- [ ] Cache Redis implementado
|
||||
- [ ] Middleware para route gating
|
||||
- [ ] 3 endpoints admin + 1 evaluacion
|
||||
|
||||
- [ ] **S3-T3** BotsService completado (16h)
|
||||
- [ ] CRUD completo
|
||||
- [ ] WebSocket monitoring
|
||||
- [ ] Wallet integration
|
||||
|
||||
- [ ] **S3-T4** RiskAssessmentService (12h)
|
||||
- [ ] Cuestionario + scoring
|
||||
- [ ] 3 endpoints
|
||||
|
||||
### Sprint 3 Exit Criteria
|
||||
|
||||
- [ ] Audit endpoints respondiendo
|
||||
- [ ] Feature flags con cache
|
||||
- [ ] Bots service 100%
|
||||
- [ ] Risk assessment calculando
|
||||
- [ ] npm run build exitoso
|
||||
- [ ] git commit + push
|
||||
|
||||
---
|
||||
|
||||
## Sprint 4: Consolidation (10 dias, 50h)
|
||||
|
||||
- [ ] **S4-T1** Consolidar symbols/tickers (12h)
|
||||
- [ ] Campos ML agregados a trading.symbols
|
||||
- [ ] Migracion de datos
|
||||
- [ ] Referencias actualizadas
|
||||
- [ ] BD recreada y validada
|
||||
|
||||
- [ ] **S4-T2** Market Data OHLCV Service (16h)
|
||||
- [ ] **S4-T3** Currency Exchange Service (8h)
|
||||
- [ ] **S4-T4** Definiciones documentales completas (10h)
|
||||
- [ ] **S4-T5** Gaps P3 resueltos (4h)
|
||||
|
||||
### Sprint 4 Exit Criteria
|
||||
|
||||
- [ ] 1 catalogo simbolos unificado
|
||||
- [ ] 0 gaps pendientes (37/37 resueltos)
|
||||
- [ ] Coherencia global >= 90%
|
||||
- [ ] COHERENCE-MASTER-REPORT v2.0 generado
|
||||
- [ ] ROADMAP-2026-Q1 v2.0 actualizado
|
||||
- [ ] git commit + push
|
||||
|
||||
---
|
||||
|
||||
## Post-Remediacion
|
||||
|
||||
- [ ] Actualizar COHERENCE-MASTER-REPORT.md con metricas finales
|
||||
- [ ] Actualizar ROADMAP-2026-Q1.yml a v2.0.0
|
||||
- [ ] Actualizar MASTER_INVENTORY.yml
|
||||
- [ ] Actualizar DDL-BACKEND-COHERENCE.yml
|
||||
- [ ] Generar ANALISIS-FINAL-REMEDIACION.md
|
||||
- [ ] Marcar TASK como COMPLETADA en METADATA.yml
|
||||
|
||||
---
|
||||
|
||||
*Generado por Claude Code (Opus 4.6) - TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD*
|
||||
@ -0,0 +1,231 @@
|
||||
# REPORTE CONSOLIDADO - Fase 2: Validacion de Esquemas y Objetos DDL
|
||||
|
||||
**Tarea:** TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD
|
||||
**Fecha:** 2026-02-05
|
||||
**Agente:** Claude Code (Opus 4.6)
|
||||
**Perfil:** Especialista en Base de Datos y Modelado de Datos
|
||||
|
||||
---
|
||||
|
||||
## 1. Resumen Ejecutivo
|
||||
|
||||
Se ejecuto la validacion integral del modelado de base de datos del proyecto trading-platform,
|
||||
cubriendo 101 tablas DDL en 11 schemas. Se orquestaron 7 subagentes en paralelo para cubrir:
|
||||
|
||||
| Subagente | Alcance | Estado |
|
||||
|-----------|---------|--------|
|
||||
| SA-1 | Validacion education schema (19 tablas) | Completado |
|
||||
| SA-2 | Validacion auth + trading (13+13 tablas) | Completado |
|
||||
| SA-3 | Validacion financial + investment + ml (11+10+12 tablas) | Completado |
|
||||
| SA-4 | Validacion llm + audit + portfolio + market_data + feature_flags (5+7+5+4+1 tablas) | Completado |
|
||||
| SA-5 | Verificacion archivos de migracion de enums | Completado |
|
||||
| SA-6 | Catalogo de purga documental | Completado |
|
||||
| SA-7 | Mapeo backend entities vs DDL | Completado |
|
||||
|
||||
---
|
||||
|
||||
## 2. Metricas de Coherencia
|
||||
|
||||
### 2.1 Antes del Analisis (Baseline)
|
||||
|
||||
| Metrica | Valor |
|
||||
|---------|-------|
|
||||
| Tablas DDL | 101 |
|
||||
| Tablas en inventario | 81 |
|
||||
| Coherencia DDL-Inventario | 81% |
|
||||
| Coherencia DDL-Backend | 85% |
|
||||
| Coherencia global | 81.25% |
|
||||
| Gaps P0 (bloqueantes) | 2 |
|
||||
| Enum conflicts | 3 |
|
||||
| FK errors | 1 |
|
||||
|
||||
### 2.2 Despues del Analisis (Post-Fase 2)
|
||||
|
||||
| Metrica | Valor | Delta |
|
||||
|---------|-------|-------|
|
||||
| Tablas DDL | 101 | = |
|
||||
| Tablas en inventario | 101 | +20 |
|
||||
| Coherencia DDL-Inventario | **100%** | +19% |
|
||||
| Coherencia DDL-Backend (entities) | 68% | -17% (recalculado con precision) |
|
||||
| Coherencia DDL-Backend (services) | 52% | nueva metrica |
|
||||
| Coherencia DDL-Backend (controllers) | 45% | nueva metrica |
|
||||
| Gaps P0 resueltos | 1/2 | GAP-DDL-P0-001 resuelto |
|
||||
| Enum conflicts | 3 (sin cambio) | migraciones existen pero NO ejecutadas |
|
||||
| FK errors | 0 | -1 (corregido) |
|
||||
|
||||
### 2.3 Cobertura Backend por Schema
|
||||
|
||||
| Schema | Tablas | Entities | Services | Controllers | Coherencia |
|
||||
|--------|--------|----------|----------|-------------|------------|
|
||||
| auth | 13 | 10 (77%) | 8 (62%) | 6 (46%) | 62% |
|
||||
| education | 19 | 15 (79%) | 10 (53%) | 8 (42%) | 58% |
|
||||
| trading | 13 | 10 (77%) | 6 (46%) | 5 (38%) | 54% |
|
||||
| financial | 11 | 8 (73%) | 7 (64%) | 6 (55%) | 64% |
|
||||
| investment | 10 | 7 (70%) | 6 (60%) | 5 (50%) | 60% |
|
||||
| ml | 12 | 8 (67%) | 5 (42%) | 4 (33%) | 47% |
|
||||
| llm | 5 | 4 (80%) | 3 (60%) | 3 (60%) | 67% |
|
||||
| audit | 7 | 0 (0%) | 0 (0%) | 0 (0%) | **0%** |
|
||||
| portfolio | 5 | 4 (80%) | 4 (80%) | 4 (80%) | 80% |
|
||||
| market_data | 4 | 2 (50%) | 2 (50%) | 2 (50%) | 50% |
|
||||
| feature_flags | 1 | 0 (0%) | 0 (0%) | 0 (0%) | **0%** |
|
||||
| **TOTAL** | **100** | **68 (68%)** | **51 (51%)** | **43 (43%)** | **54%** |
|
||||
|
||||
---
|
||||
|
||||
## 3. Gaps Resueltos en esta Fase
|
||||
|
||||
| ID | Descripcion | Accion | Estado |
|
||||
|----|-------------|--------|--------|
|
||||
| GAP-DDL-P0-001 | FK price_alerts ref user_profiles | Corregido a auth.users(id) | RESUELTO |
|
||||
| GAP-DOC-P2-002 | DATABASE_INVENTORY.yml desactualizado | Actualizado a v2.0.0 (100 tablas) | RESUELTO |
|
||||
| GAP-DOC-P2-003 | DDL-COMPLETE-MATRIX.yml incompleto | Actualizado a v2.0.0 | EN PROGRESO |
|
||||
|
||||
---
|
||||
|
||||
## 4. Gaps Pendientes por Prioridad
|
||||
|
||||
### 4.1 P0 - Bloqueantes (1 pendiente)
|
||||
|
||||
| ID | Descripcion | Esfuerzo |
|
||||
|----|-------------|----------|
|
||||
| GAP-DDL-P0-002 | feature_flags schema sin documentar | 3h |
|
||||
|
||||
### 4.2 P1 - Criticos (14 pendientes)
|
||||
|
||||
| ID | Tipo | Descripcion | Esfuerzo |
|
||||
|----|------|-------------|----------|
|
||||
| GAP-INV-P1-001 | Tablas no doc | 7 tablas education sin documentar | 4h |
|
||||
| GAP-INV-P1-002 | Tablas no doc | 2 tablas trading (drawing_tools/templates) | 2h |
|
||||
| GAP-INV-P1-003 | Tablas no doc | 2 tablas financial | 2h |
|
||||
| GAP-INV-P1-004 | Tablas no doc | 2 tablas ml | 2h |
|
||||
| GAP-INV-P1-005 | Tablas no doc | Tablas menores en auth/inv/llm/portfolio/mktdata | 4h |
|
||||
| GAP-ENUM-P1-001 | Enum duplicado | transaction_type financial vs investment | 2h |
|
||||
| GAP-ENUM-P1-002 | Enum duplicado | risk_profile investment vs portfolio | 2h |
|
||||
| GAP-ENUM-P1-003 | Enum incompleto | market_data.timeframe falta '1M' | 1h |
|
||||
| GAP-DUP-P1-001 | Duplicacion | trading.symbols vs market_data.tickers | 12h |
|
||||
| GAP-REL-P1-001 | FK faltante | investment.accounts -> financial.wallets | 2h |
|
||||
| GAP-REL-P1-002 | FK faltante | trading.bots -> financial.wallets | 1h |
|
||||
| GAP-REL-P1-003 | FK faltante | market_data.tickers -> trading.symbols | 1h |
|
||||
|
||||
### 4.3 P2 - Importantes (14 pendientes)
|
||||
|
||||
| ID | Tipo | Descripcion | Esfuerzo |
|
||||
|----|------|-------------|----------|
|
||||
| GAP-BE-P2-001 | Entities faltantes | 31 entities backend faltantes | 62h |
|
||||
| GAP-DOC-P2-001 | Definiciones | 8 grupos de tablas sin ET/US/RF | 15h |
|
||||
| GAP-SVC-P2-001 | Service faltante | audit schema sin servicios (7 tablas) | 32h |
|
||||
| GAP-SVC-P2-002 | Service faltante | market_data OHLCV sin servicio | 16h |
|
||||
| GAP-SVC-P2-003 | Service faltante | currency_exchange_rates sin servicio | 16h |
|
||||
| GAP-SVC-P2-004 | Service incompleto | bots.service.ts 60% implementado | 16h |
|
||||
| GAP-SVC-P2-005 | Service faltante | risk_questionnaire sin servicio | 12h |
|
||||
| GAP-SVC-P2-006 | Service faltante | feature_flags sin integracion | 8h |
|
||||
| GAP-NAME-P2-001 | Nomenclatura | asset_type vs asset_class | 1h |
|
||||
| GAP-PURGE-P2-001 | Doc obsoleta | Documentacion pendiente de purga | 1h |
|
||||
| GAP-PURGE-P2-002 | Sin archivar | Tareas antiguas sin archivar | 2h |
|
||||
|
||||
### 4.4 P3 - Menores (5 pendientes)
|
||||
|
||||
| ID | Tipo | Descripcion | Esfuerzo |
|
||||
|----|------|-------------|----------|
|
||||
| GAP-IDX-P3-001 | Index faltante | Indices compuestos para queries frecuentes | 2h |
|
||||
| GAP-DEL-P3-001 | ON DELETE | financial.wallets RESTRICT vs CASCADE | 1h |
|
||||
| GAP-ORPHAN-P3-001 | Subutilizada | market_data.staging posiblemente huerfana | 0.5h |
|
||||
| GAP-ORPHAN-P3-002 | Subutilizada | auth.rate_limiting_config no usado | 0.5h |
|
||||
| GAP-ARCH-P3-001 | Arquitectural | bots.strategy_type VARCHAR sin ref a trading_agent | 1h |
|
||||
|
||||
---
|
||||
|
||||
## 5. Hallazgos de Migraciones de Enums
|
||||
|
||||
Los 3 conflictos de enums tienen estado diferente:
|
||||
|
||||
| Conflicto | Migracion Existe | Ejecutada | Estado |
|
||||
|-----------|-----------------|-----------|--------|
|
||||
| transaction_type (financial vs investment) | Si (2026-02-03_rename_transaction_type_enums.sql) | NO | Solo SQL comentado |
|
||||
| timeframe (market_data incompleto) | Si (2026-02-03_consolidate_timeframe_enums.sql) | NO | Solo SQL comentado |
|
||||
| risk_profile (investment vs portfolio) | NO | N/A | Sin migracion creada |
|
||||
|
||||
**Accion requerida:** Crear migraciones ejecutables y aplicar en WSL via `@TRIGGER-DDL-WSL`.
|
||||
|
||||
---
|
||||
|
||||
## 6. Estado de Enums por Schema
|
||||
|
||||
| Schema | Enums Documentados | Enums en DDL | Delta |
|
||||
|--------|-------------------|--------------|-------|
|
||||
| auth | 6 | 6 | OK |
|
||||
| trading | 9 | 9 | OK |
|
||||
| education | 6 | 7 | +1 (falta documentar) |
|
||||
| financial | 12 | 12 | OK |
|
||||
| investment | 6 | 6 | OK |
|
||||
| ml | 6 | 6 | OK |
|
||||
| llm | 3 | 3 | OK |
|
||||
| audit | 3 | 3 | OK |
|
||||
| portfolio | 4 | 4 | OK |
|
||||
| market_data | 2 | 3 | +1 (timeframe) |
|
||||
| feature_flags | 0 | 1 | +1 (sin documentar) |
|
||||
| public | 0 | 2 | +2 (timeframes legacy) |
|
||||
|
||||
---
|
||||
|
||||
## 7. Entregables Generados
|
||||
|
||||
| Archivo | Descripcion | Estado |
|
||||
|---------|-------------|--------|
|
||||
| ANALISIS-MAESTRO.md | Documento principal de analisis | Completado |
|
||||
| PLAN-FASES-DETALLADO.yml | Plan 6 fases, 24 subtareas, 68 atomicas | Completado |
|
||||
| GAPS-CONSOLIDADO.yml | 37 gaps catalogados | Actualizado |
|
||||
| DATABASE_INVENTORY.yml | Inventario v2.0.0 (100 tablas) | Completado |
|
||||
| DDL-COMPLETE-MATRIX.yml | Matriz v2.0.0 | En progreso |
|
||||
| GAPS-TRACKING.yml | Tracking v2.0.0 | En progreso |
|
||||
| PURGA-DOCUMENTAL.yml | Catalogo de purga | En progreso |
|
||||
| REPORTE-CONSOLIDADO-FASE2.md | Este documento | Completado |
|
||||
|
||||
---
|
||||
|
||||
## 8. Proximos Pasos (Fase 3-6)
|
||||
|
||||
### Fase 3: Auditoria de Integridad y Coherencia
|
||||
1. Validar todas las FK cross-schema (100 tablas)
|
||||
2. Ejecutar migraciones de enums pendientes
|
||||
3. Consolidar trading.symbols vs market_data.tickers
|
||||
4. Agregar FKs faltantes (investment.accounts->wallets, bots->wallets, tickers->symbols)
|
||||
|
||||
### Fase 4: Coherencia DDL-Backend
|
||||
1. Crear 31 entities backend faltantes
|
||||
2. Crear servicios para audit schema (7 tablas)
|
||||
3. Crear servicio feature_flags
|
||||
4. Completar bots.service.ts
|
||||
|
||||
### Fase 5: Purga y Reorganizacion
|
||||
1. Archivar tareas antiguas
|
||||
2. Eliminar documentacion obsoleta
|
||||
3. Integrar definiciones faltantes (ET/US/RF para 8 grupos)
|
||||
4. Actualizar OQI modules
|
||||
|
||||
### Fase 6: Plan Maestro de Ejecucion
|
||||
1. Generar roadmap actualizado
|
||||
2. Crear COHERENCE-MASTER-REPORT-V2.md
|
||||
3. Actualizar MASTER_INVENTORY.yml
|
||||
|
||||
---
|
||||
|
||||
## 9. Esfuerzo Estimado Restante
|
||||
|
||||
| Categoria | Horas Estimadas |
|
||||
|-----------|----------------|
|
||||
| Enum migrations | 5h |
|
||||
| Symbol catalog consolidation | 12h |
|
||||
| FK additions | 4h |
|
||||
| Backend entities (31) | 62h |
|
||||
| Backend services missing | 100h |
|
||||
| Documentation/definitions | 18h |
|
||||
| Purge/reorganization | 3h |
|
||||
| **Total** | **~204h** |
|
||||
|
||||
**Nota:** El esfuerzo de implementacion backend (entities+services) es el componente mas grande.
|
||||
Esta tarea de analisis documenta y planifica; la ejecucion requiere tareas subsecuentes.
|
||||
|
||||
---
|
||||
|
||||
*Generado por Claude Code (Opus 4.6) - TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD*
|
||||
@ -0,0 +1,42 @@
|
||||
# SA-01: Reporte de Validacion Education Schema
|
||||
|
||||
**Subagente:** SA-01 (Validacion education schema DDL)
|
||||
**Fecha:** 2026-02-05
|
||||
**Estado:** COMPLETADO
|
||||
|
||||
## Resumen
|
||||
|
||||
Education schema validado: **19 tablas** (previamente documentado como 12).
|
||||
|
||||
## Tablas por Grupo Funcional
|
||||
|
||||
| Grupo | Tablas | Cantidad |
|
||||
|-------|--------|----------|
|
||||
| Core Content | categories, courses, modules, lessons | 4 |
|
||||
| Enrollment & Progress | enrollments, progress | 2 |
|
||||
| Assessments | quizzes, quiz_questions, quiz_attempts | 3 |
|
||||
| Achievements | certificates, user_achievements | 2 |
|
||||
| Gamification | user_gamification_profile, user_activity_log | 2 |
|
||||
| Reviews | course_reviews, review_helpful_votes | 2 |
|
||||
| Media | videos | 1 |
|
||||
| Instructors | instructors | 1 |
|
||||
| Tagging | course_tags, course_tag_assignments | 2 |
|
||||
|
||||
## Metricas
|
||||
|
||||
- **Enums:** 6 (difficulty_level, course_status, enrollment_status, lesson_content_type, question_type, achievement_type)
|
||||
- **Funciones:** 11 (gamification, auto-completion, certificate generation, rating stats, etc.)
|
||||
- **Vistas:** 8 (leaderboards, statistics, popular courses, active videos)
|
||||
- **Triggers:** 24 (denormalization, automation, streak updates)
|
||||
- **Indices:** 102+
|
||||
|
||||
## Issues Detectados
|
||||
|
||||
1. **GAP-DDL-001:** courses.instructor_id FK referencia auth.users(id) en vez de education.instructors(id)
|
||||
2. **DUP-003:** education.update_updated_at_column() deprecada (usar public.update_updated_at())
|
||||
3. **NAMING-001:** Nomenclatura de triggers inconsistente (trg_ vs trigger_ vs sin prefijo)
|
||||
4. **SOFT-DELETE-001:** Soft delete solo en videos table
|
||||
|
||||
---
|
||||
|
||||
*Generado por subagente SA-01 - TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD*
|
||||
@ -0,0 +1,55 @@
|
||||
# SA-05: Reporte de Validacion de Enums y Migraciones
|
||||
|
||||
**Subagente:** SA-05 (Verificacion archivos de migracion de enums)
|
||||
**Fecha:** 2026-02-05
|
||||
**Estado:** COMPLETADO
|
||||
|
||||
---
|
||||
|
||||
## Resumen
|
||||
|
||||
3 conflictos de enums analizados. 2 archivos de migracion existen pero son **solo documentacion** (SQL comentado). El tipo unificado `public.trading_timeframe` ya fue creado pero las tablas NO han sido migradas.
|
||||
|
||||
## Archivos de Migracion
|
||||
|
||||
| Archivo | Existe | Ejecutado |
|
||||
|---------|--------|-----------|
|
||||
| `migrations/2026-02-03_rename_transaction_type_enums.sql` | Si | NO (solo plan documentado) |
|
||||
| `migrations/2026-02-03_unify_timeframe_enum.sql` | Si | PARCIAL (tipo creado, tablas no migradas) |
|
||||
|
||||
## Estado de Conflictos
|
||||
|
||||
### CONF-001: transaction_type (financial vs investment)
|
||||
- **Severidad:** ALTA - Colision de nombres con valores diferentes
|
||||
- **financial.transaction_type:** 9 valores (deposit, withdrawal, transfer_in, transfer_out, fee, refund, earning, distribution, bonus)
|
||||
- **investment.transaction_type:** 3 valores (deposit, withdrawal, distribution)
|
||||
- **Recomendacion:** Opcion B (no-breaking) - Mantener separados con calificacion de schema estricta
|
||||
- **Accion:** Documentar distincion, enforcement en backend
|
||||
|
||||
### DUP-001: timeframe (trading vs market_data)
|
||||
- **Severidad:** MEDIA - `public.trading_timeframe` ya existe con 9 valores
|
||||
- **trading.timeframe:** Usado en bots, signals, drawing_tools
|
||||
- **market_data.timeframe:** Existe pero no se usa activamente en tablas
|
||||
- **Recomendacion:** Migrar columnas a `public.trading_timeframe` (no-breaking, valores compatibles)
|
||||
- **Accion:** Ejecutar migracion de columnas, DROP tipos viejos
|
||||
|
||||
### DUP-002: risk_profile (investment vs portfolio)
|
||||
- **Severidad:** BAJA - Valores identicos (conservative, moderate, aggressive)
|
||||
- **Sin documentacion ni migracion**
|
||||
- **Recomendacion:** Crear `public.risk_profile` oportunistamente
|
||||
|
||||
## Tablas Afectadas por Migracion
|
||||
|
||||
| Tabla | Columna | Enum Actual | Enum Target |
|
||||
|-------|---------|-------------|-------------|
|
||||
| trading.bots | timeframe | trading.timeframe | public.trading_timeframe |
|
||||
| trading.signals | timeframe | trading.timeframe | public.trading_timeframe |
|
||||
| trading.drawing_tools | timeframe | trading.timeframe | public.trading_timeframe |
|
||||
| financial.wallet_transactions | transaction_type | financial.transaction_type | MANTENER |
|
||||
| investment.transactions | transaction_type | investment.transaction_type | MANTENER |
|
||||
| investment.products | risk_profile | investment.risk_profile | EVALUAR |
|
||||
| portfolio.portfolios | risk_profile | portfolio.risk_profile | EVALUAR |
|
||||
|
||||
---
|
||||
|
||||
*Generado por subagente SA-05 - TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD*
|
||||
@ -1,14 +1,14 @@
|
||||
# Indice de Tareas - trading-platform
|
||||
version: "1.4.0"
|
||||
version: "1.5.0"
|
||||
proyecto: trading-platform
|
||||
tipo: STANDALONE
|
||||
created: "2026-01-24"
|
||||
updated: "2026-02-04"
|
||||
updated: "2026-02-05"
|
||||
|
||||
resumen:
|
||||
total_tareas_activas: 4
|
||||
total_tareas_activas: 5
|
||||
completadas_archivadas: 25
|
||||
en_progreso: 4
|
||||
en_progreso: 5
|
||||
pendientes: 0
|
||||
postergadas: 1
|
||||
canceladas: 1
|
||||
@ -94,6 +94,35 @@ tareas_activas:
|
||||
routing y flujos contra requerimientos SRS y documentación OQI.
|
||||
Incluye plan de subtareas jerárquicas siguiendo CAPVED.
|
||||
|
||||
- id: TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD
|
||||
titulo: "Analisis y Validacion Integral del Modelado de Base de Datos"
|
||||
estado: EN_PROGRESO
|
||||
tipo: ANALYSIS
|
||||
prioridad: P0
|
||||
modulo: apps/database/ddl
|
||||
progreso: "45%"
|
||||
fase_actual: "FASE-2 + FASE-5 (paralelo)"
|
||||
ubicacion: "TASK-2026-02-05-ANALISIS-VALIDACION-MODELADO-BD/"
|
||||
fecha_inicio: "2026-02-05"
|
||||
schemas_validados: 11
|
||||
tablas_validadas: 100
|
||||
gaps_catalogados: 37
|
||||
gaps_resueltos: 2
|
||||
esfuerzo_estimado: "204h"
|
||||
perfil_agente: "especialista-database"
|
||||
descripcion: |
|
||||
Analisis exhaustivo del modelado de BD: validacion de 100 tablas DDL en 11 schemas,
|
||||
auditoria de integridad referencial, deteccion de conflictos/duplicidades,
|
||||
coherencia DDL-Backend (68% entities, 52% services, 45% controllers),
|
||||
purga documental, integracion de definiciones faltantes.
|
||||
entregables:
|
||||
- "analisis/ANALISIS-MAESTRO.md"
|
||||
- "analisis/PLAN-FASES-DETALLADO.yml"
|
||||
- "analisis/GAPS-CONSOLIDADO.yml"
|
||||
- "entregables/REPORTE-CONSOLIDADO-FASE2.md"
|
||||
- "entregables/RECOMENDACIONES-MODELADO.md"
|
||||
- "entregables/PURGA-DOCUMENTAL.yml (en progreso)"
|
||||
|
||||
- id: TASK-2026-02-03-BACKEND-ENTITIES-SYNC
|
||||
titulo: "Sincronización de Entidades Backend con DDL"
|
||||
estado: EN_PROGRESO
|
||||
|
||||
Loading…
Reference in New Issue
Block a user