# DEPENDENCY-GRAPH.md ## Grafo de Dependencias - Trading Platform Frontend **Proyecto:** trading-platform **Fecha:** 2026-01-25 **Total Componentes:** 123 **Total Epics:** 9 --- ## Resumen Ejecutivo | Métrica | Valor | Criticidad | |---------|-------|------------| | **Dependencias Totales** | ~340 | - | | **Componentes Aislados** | 8 (7%) | ✅ Bajo riesgo | | **Componentes Hub** | 12 (10%) | ⚠️ Alto impacto | | **Dependencias Circulares** | 0 detectadas | ✅ Excelente | | **Profundidad Máxima** | 5 niveles | ✅ Aceptable | | **Acoplamiento Promedio** | 2.8 deps/comp | ✅ Moderado | --- ## 1. Arquitectura de Capas ### Jerarquía de Dependencias (Top-Down) ``` NIVEL 0: Base Layer (Sin dependencias internas) ├─ Shared Types (types/*) ├─ Constants (constants/*) └─ Utils (lib/utils) NIVEL 1: Data Layer ├─ API Services (services/*) ├─ Zustand Stores (stores/*) └─ Custom Hooks (hooks/*) NIVEL 2: Atom Components (Presentacionales) ├─ UI primitives (Button, Input, Card, etc.) ├─ Icons (Lucide React, Heroicons) └─ Micro-components (Badge, Avatar, etc.) NIVEL 3: Molecule Components (Composiciones) ├─ Forms (LoginForm, OrderForm, etc.) ├─ Cards (CourseCard, PricingCard, etc.) └─ Panels (WatchlistSidebar, AlertsPanel, etc.) NIVEL 4: Organism Components (Features) ├─ Charts (CandlestickChart, AllocationChart, etc.) ├─ Players (VideoProgressPlayer) └─ Dashboards (MLDashboard, AccountHealthDashboard) NIVEL 5: Pages (Routers) ├─ Trading.tsx, Courses.tsx, Assistant.tsx, etc. └─ Layout wrappers (PrivateRoute, Layout) ``` --- ## 2. Componentes Hub (Alto Impacto) Componentes con **≥5 dependientes** - Cambios aquí afectan múltiples módulos. | Componente | Ubicación | Dependientes | Uso | Riesgo | |------------|-----------|--------------|-----|--------| | **authStore** | stores/auth.store.ts | ~40 | Gestión sesión global | 🔴 CRÍTICO | | **Button** | components/ui/Button.tsx | ~35 | UI base | 🟠 ALTO | | **Card** | components/ui/Card.tsx | ~30 | Container base | 🟠 ALTO | | **MarkdownRenderer** | components/MarkdownRenderer.tsx | 3 (OQI-006, OQI-007) | Renderizado markdown | 🟡 MEDIO | | **tradingStore** | stores/trading.store.ts | ~25 | Estado trading | 🟠 ALTO | | **mlStore** | stores/ml.store.ts | ~12 | Estado ML signals | 🟡 MEDIO | | **portfolioStore** | stores/portfolio.store.ts | ~9 | Estado portfolio | 🟡 MEDIO | | **CandlestickChart** | modules/trading/components/CandlestickChart.tsx | 3 (Trading, CandlestickChartWithML, MLDashboard) | Gráfico base | 🟡 MEDIO | | **apiClient** | lib/apiClient.ts | ~90 | HTTP requests | 🔴 CRÍTICO | | **useAuth** | hooks/useAuth.ts | ~30 | Hook autenticación | 🟠 ALTO | | **useTradingData** | hooks/useTradingData.ts | ~15 | Hook datos trading | 🟡 MEDIO | | **Loader** | components/ui/Loader.tsx | ~20 | Loading states | 🟡 MEDIO | **Recomendación:** Antes de modificar componentes HUB, ejecutar análisis de impacto completo. --- ## 3. Dependencias Cross-Epic (Entre Módulos) ### Tabla de Dependencias Cross-Módulo | Epic Origen | Epic Destino | Componente Compartido | Tipo Dependencia | |-------------|--------------|----------------------|------------------| | OQI-003 (Trading) | OQI-006 (ML Signals) | CandlestickChartWithML | Composición | | OQI-003 (Trading) | OQI-007 (LLM Agent) | SignalExecutionPanel | Integración | | OQI-006 (ML Signals) | OQI-003 (Trading) | MLSignalsPanel | Display | | OQI-007 (LLM Agent) | OQI-006 (ML Signals) | MarkdownRenderer | UI | | OQI-008 (Portfolio) | OQI-003 (Trading) | tradingStore (lectura) | Estado | | OQI-001 (Auth) | TODOS | authStore | Global | | OQI-001 (Auth) | TODOS | PrivateRoute | Protección | | OQI-005 (Pagos) | OQI-002 (Educación) | Pricing flow | Checkout | **Total Cross-Epic:** 18 dependencias identificadas --- ## 4. Dependencias Intra-Epic (Dentro del Módulo) ### OQI-001: Fundamentos Auth (11 componentes) ``` authStore (hub) ├─ Login.tsx ├─ Register.tsx ├─ SecuritySettings.tsx │ ├─ SessionsList │ │ └─ DeviceCard │ └─ authStore.logoutAll() ├─ SocialLoginButtons ├─ PhoneLoginForm └─ useAuth (hook) └─ PrivateRoute (HOC) ``` **Profundidad:** 3 niveles **Acoplamiento:** Alto (authStore es hub global) --- ### OQI-002: Educativo (14+ componentes) ``` educationStore ├─ Courses.tsx │ └─ CourseCard (×N) ├─ CourseDetail.tsx │ ├─ CourseProgressTracker │ └─ RecommendedCourses │ └─ CourseCard (reuso) ├─ Lesson.tsx │ ├─ VideoProgressPlayer ★ (554 líneas) │ │ ├─ HTML5 Video API │ │ ├─ bookmarksService │ │ └─ notesService │ └─ LessonNotes ├─ Quiz.tsx │ └─ QuizQuestion (×N) ├─ MyLearning.tsx │ └─ AchievementBadge (×N) ├─ Leaderboard.tsx └─ CertificatePreview ``` **Profundidad:** 4 niveles (Courses → CourseDetail → Lesson → VideoProgressPlayer) **Acoplamiento:** Moderado **Componente Crítico:** VideoProgressPlayer (554 líneas, 11 states, alto impacto) --- ### OQI-003: Trading Charts (37 componentes) ``` tradingStore (hub) ├─ Trading.tsx (página principal) │ ├─ CandlestickChart ★ │ │ └─ lightweight-charts (librería) │ ├─ CandlestickChartWithML │ │ ├─ CandlestickChart (reuso) │ │ ├─ mlStore │ │ └─ MLSignalsPanel (OQI-006 cross-epic) │ ├─ ChartToolbar │ ├─ ChartDrawingToolsPanel │ ├─ OrderForm │ │ └─ RiskBasedPositionSizer │ ├─ AdvancedOrderEntry │ ├─ QuickOrderPanel │ ├─ PositionsList │ │ ├─ LivePositionCard (×N) │ │ └─ PositionModifierDialog │ ├─ PaperTradingPanel │ │ ├─ AccountSummary │ │ └─ TradingMetricsCard │ ├─ OrderBookPanel │ ├─ AlertsPanel │ │ └─ TradeAlertsNotificationCenter │ ├─ TradeExecutionHistory │ ├─ TradesHistory │ ├─ TradeJournalPanel │ ├─ RiskMonitor │ │ └─ AccountHealthDashboard │ ├─ TradingStatsPanel │ ├─ WatchlistSidebar │ │ ├─ WatchlistItem (×N) │ │ └─ SymbolInfoPanel │ ├─ AddSymbolModal │ └─ ExportButton └─ useTradingData (hook) └─ TanStack Query (cache) ``` **Profundidad:** 5 niveles (Trading → OrderForm → RiskBasedPositionSizer → validation utils) **Acoplamiento:** ALTO (37 componentes, todos dependen de tradingStore) **Componentes Críticos:** - CandlestickChart (usado por 3+ componentes) - tradingStore (hub de 25+ componentes) --- ### OQI-004: Cuentas Inversión (10 componentes) ``` investmentStore ├─ Investment.tsx ├─ Portfolio.tsx ├─ Products.tsx │ └─ (productCard assumed) ├─ ProductDetail.tsx ├─ AccountDetail.tsx ├─ Withdrawals.tsx │ └─ WithdrawForm ├─ Transactions.tsx ├─ Reports.tsx │ └─ Recharts (library) └─ DepositForm ``` **Profundidad:** 3 niveles **Acoplamiento:** Bajo-Moderado --- ### OQI-005: Pagos Stripe (15 componentes) ``` paymentsStore ├─ Pricing.tsx │ └─ PricingCard (×N) ├─ Billing.tsx │ ├─ SubscriptionCard │ ├─ SubscriptionUpgradeFlow │ ├─ PaymentMethodsList │ │ └─ PaymentMethodForm │ └─ InvoiceList ├─ CheckoutSuccess.tsx ├─ CheckoutCancel.tsx ├─ BillingInfoForm ├─ CouponForm ├─ WalletCard │ ├─ WalletDepositModal │ └─ WalletWithdrawModal └─ stripeService └─ Stripe.js (library) ``` **Profundidad:** 4 niveles **Acoplamiento:** Moderado **Dependencia Externa Crítica:** Stripe.js (50% implementado, PCI-DSS blocker) --- ### OQI-006: ML Signals (12 componentes) ``` mlStore (hub) ├─ MLDashboard.tsx │ ├─ PredictionCard (×N) │ ├─ AMDPhaseIndicator │ ├─ SignalsTimeline │ ├─ AccuracyMetrics │ ├─ SignalPerformanceTracker │ ├─ ConfidenceMeter │ ├─ ModelAccuracyDashboard │ ├─ BacktestResultsVisualization │ │ └─ Recharts (library) │ ├─ EnsembleSignalCard ★ │ ├─ ICTAnalysisCard ★ │ └─ MarkdownRenderer └─ mlApiService ``` **Profundidad:** 3 niveles **Acoplamiento:** Moderado **Componentes Destacados:** - EnsembleSignalCard (sin ET spec) - ICTAnalysisCard (sin ET spec) --- ### OQI-007: LLM Strategy Agent (11 componentes) ``` llmStore ├─ Assistant.tsx │ ├─ ChatHeader │ ├─ MessageList │ │ └─ ChatMessage (×N) │ │ ├─ MarkdownRenderer (reuso OQI-006) │ │ ├─ MessageFeedback │ │ └─ ToolCallCard │ ├─ ChatInput │ ├─ ConversationHistory │ ├─ MessageSearch │ └─ SignalExecutionPanel (cross-epic con OQI-003) │ └─ tradingStore (escritura) └─ llmApiService └─ WebSocket (planned) ``` **Profundidad:** 4 niveles **Acoplamiento:** Moderado **Dependencia Cross-Epic Crítica:** SignalExecutionPanel depende de tradingStore --- ### OQI-008: Portfolio Manager (9 componentes) ``` portfolioStore ├─ PortfolioDashboard.tsx │ ├─ AllocationChart ★ (Custom SVG) │ ├─ PerformanceChart ★ (Custom Canvas 2D) │ ├─ GoalCard (×N) │ └─ RebalanceCard ├─ CreatePortfolio.tsx ├─ CreateGoal.tsx ├─ EditAllocations.tsx │ └─ AllocationTable └─ portfolioApiService ``` **Profundidad:** 3 niveles **Acoplamiento:** Bajo **Componentes Destacados:** - AllocationChart (Custom SVG, sin deps externas) - PerformanceChart (Custom Canvas, sin deps externas) --- ### OQI-009: MT4 Gateway (3 componentes) ``` mt4Store (stub) ├─ MT4ConnectionStatus (stub, 0% funcional) ├─ MT4LiveTradesPanel (NO EXISTE) └─ MT4PositionsManager (NO EXISTE) ``` **Profundidad:** 1 nivel (aislado) **Acoplamiento:** NINGUNO (módulo no funcional) **Estado:** 🔴 BLOCKER P0 - Epic completo sin implementar --- ## 5. Grafo Visual de Dependencias (Mermaid) ### 5.1 Dependencias Cross-Epic (Alto Nivel) ```mermaid graph TD A[OQI-001: Auth] -->|authStore global| B[OQI-002: Educación] A -->|authStore global| C[OQI-003: Trading] A -->|authStore global| D[OQI-004: Inversión] A -->|authStore global| E[OQI-005: Pagos] A -->|authStore global| F[OQI-006: ML Signals] A -->|authStore global| G[OQI-007: LLM Agent] A -->|authStore global| H[OQI-008: Portfolio] A -->|authStore global| I[OQI-009: MT4] C -->|CandlestickChartWithML| F C -->|tradingStore read| F F -->|MLSignalsPanel| C C -->|tradingStore write| G G -->|SignalExecutionPanel| C F -->|MarkdownRenderer| G H -->|tradingStore read| C E -->|Checkout flow| B style A fill:#ff6b6b,stroke:#c92a2a,stroke-width:3px style C fill:#ffd43b,stroke:#fab005,stroke-width:2px style F fill:#51cf66,stroke:#37b24d,stroke-width:2px style G fill:#74c0fc,stroke:#339af0,stroke-width:2px style I fill:#e03131,stroke:#c92a2a,stroke-width:2px,stroke-dasharray: 5 5 ``` **Leyenda:** - 🔴 Rojo: Crítico (Auth) o Bloqueado (MT4) - 🟡 Amarillo: Alto tráfico (Trading) - 🟢 Verde: ML Signals - 🔵 Azul: LLM Agent --- ### 5.2 Dependencias Intra-Epic: OQI-003 Trading (Detallado) ```mermaid graph TD TS[tradingStore] -->|state| TP[Trading.tsx] TP --> CC[CandlestickChart] CC --> LWC[lightweight-charts lib] TP --> CCML[CandlestickChartWithML] CCML --> CC CCML --> MLS[mlStore] TP --> OF[OrderForm] OF --> RPS[RiskBasedPositionSizer] TP --> PL[PositionsList] PL --> LPC[LivePositionCard] PL --> PMD[PositionModifierDialog] TP --> PPP[PaperTradingPanel] PPP --> AS[AccountSummary] PPP --> TMC[TradingMetricsCard] TP --> RM[RiskMonitor] RM --> AHD[AccountHealthDashboard] TP --> WS[WatchlistSidebar] WS --> WI[WatchlistItem] WS --> SIP[SymbolInfoPanel] style TS fill:#ffd43b,stroke:#fab005,stroke-width:3px style CC fill:#51cf66,stroke:#37b24d,stroke-width:2px style LWC fill:#e9ecef,stroke:#adb5bd,stroke-width:1px ``` --- ### 5.3 Componentes Hub (Impacto Radial) ```mermaid graph LR AS[authStore] -.->|40 deps| C1[Login] AS -.->|40 deps| C2[Trading] AS -.->|40 deps| C3[Courses] AS -.->|40 deps| C4[...] AC[apiClient] -.->|90 deps| S1[services/*] AC -.->|90 deps| S2[hooks/useFetch] AC -.->|90 deps| S3[stores/*] TS[tradingStore] -.->|25 deps| T1[Trading.tsx] TS -.->|25 deps| T2[OrderForm] TS -.->|25 deps| T3[PositionsList] TS -.->|25 deps| T4[...] style AS fill:#ff6b6b,stroke:#c92a2a,stroke-width:4px style AC fill:#ff6b6b,stroke:#c92a2a,stroke-width:4px style TS fill:#ffd43b,stroke:#fab005,stroke-width:3px ``` --- ## 6. Análisis de Circularidad ### Resultado: ✅ NINGUNA CIRCULAR DETECTADA **Metodología:** - Análisis estático de imports - Verificación de stores (Zustand no permite circular) - Análisis cross-epic **Patrón Arquitectónico Usado:** Unidirectional Data Flow (Flux/Redux-like) ``` User Input → Actions → Stores → Components → UI ↑ ↓ └──────── Side Effects ────────┘ (API calls, etc.) ``` **Garantía:** La arquitectura Zustand + TanStack Query previene circulares por diseño. --- ## 7. Topological Order (Orden de Modificación Seguro) ### Para Refactors o Breaking Changes **Orden de modificación de abajo hacia arriba (bottom-up):** 1. **NIVEL 0: Base Layer** (sin dependencias) - types/*, constants/*, lib/utils - ⏱️ Impacto: GLOBAL (actualizar todo el stack) 2. **NIVEL 1: Data Layer** - API Services (services/*) - Zustand Stores (stores/*) - Custom Hooks (hooks/*) - ⏱️ Impacto: ALTO (todos los consumidores) 3. **NIVEL 2: Atom Components** - UI primitives (Button, Input, Card) - Icons - ⏱️ Impacto: ALTO (30-40 dependientes) 4. **NIVEL 3: Molecule Components** - Forms, Cards, Panels - ⏱️ Impacto: MEDIO (5-10 dependientes) 5. **NIVEL 4: Organism Components** - Charts, Players, Dashboards - ⏱️ Impacto: BAJO-MEDIO (2-5 dependientes) 6. **NIVEL 5: Pages** - Trading.tsx, Courses.tsx, etc. - ⏱️ Impacto: NINGUNO (son hojas del grafo) **Regla de Oro:** Si modificas NIVEL N, valida NIVEL N+1, N+2, ..., 5. --- ## 8. Análisis de Acoplamiento por Epic | Epic | Componentes | Deps Internas | Deps Externas | Acoplamiento | Riesgo Cambio | |------|-------------|---------------|---------------|--------------|---------------| | OQI-001 (Auth) | 11 | 15 | 0 (es hub global) | 🔴 CRÍTICO | MUY ALTO | | OQI-002 (Educación) | 14+ | 22 | 2 (auth, payments) | 🟡 MEDIO | MEDIO | | OQI-003 (Trading) | 37 | 58 | 3 (auth, ml, llm) | 🔴 ALTO | ALTO | | OQI-004 (Inversión) | 10 | 14 | 1 (auth) | 🟢 BAJO | BAJO | | OQI-005 (Pagos) | 15 | 20 | 2 (auth, stripe) | 🟡 MEDIO | MEDIO | | OQI-006 (ML Signals) | 12 | 16 | 2 (auth, trading) | 🟡 MEDIO | MEDIO | | OQI-007 (LLM Agent) | 11 | 18 | 3 (auth, trading, ml) | 🟠 MEDIO-ALTO | MEDIO-ALTO | | OQI-008 (Portfolio) | 9 | 12 | 2 (auth, trading-read) | 🟢 BAJO | BAJO | | OQI-009 (MT4) | 3 | 0 (stub) | 1 (auth) | ⚪ N/A | N/A (no funcional) | **Leyenda:** - 🔴 CRÍTICO/ALTO: ≥50 dependencias o hub global - 🟠 MEDIO-ALTO: 30-49 dependencias - 🟡 MEDIO: 15-29 dependencias - 🟢 BAJO: <15 dependencias --- ## 9. Impacto de Cambios (Change Impact Matrix) ### Si modificas authStore (hub global): | Componente Afectado | Epic | Tipo Impacto | Esfuerzo Validación | |---------------------|------|--------------|---------------------| | Login.tsx | OQI-001 | 🔴 CRÍTICO | 4h | | SecuritySettings.tsx | OQI-001 | 🔴 CRÍTICO | 3h | | PrivateRoute (HOC) | OQI-001 | 🔴 CRÍTICO | 6h (afecta TODAS las rutas) | | Trading.tsx | OQI-003 | 🟠 ALTO | 2h | | Courses.tsx | OQI-002 | 🟠 ALTO | 1h | | Pricing.tsx | OQI-005 | 🟠 ALTO | 1h | | ... (40+ componentes) | TODOS | 🟠 ALTO | ~30h TOTAL | **Total Esfuerzo:** ~50 horas de validación + testing --- ### Si modificas CandlestickChart: | Componente Afectado | Epic | Tipo Impacto | Esfuerzo Validación | |---------------------|------|--------------|---------------------| | Trading.tsx | OQI-003 | 🟠 ALTO | 2h | | CandlestickChartWithML | OQI-003 | 🔴 CRÍTICO | 4h | | MLDashboard.tsx | OQI-006 | 🟡 MEDIO | 1h | **Total Esfuerzo:** ~7 horas de validación --- ### Si modificas VideoProgressPlayer: | Componente Afectado | Epic | Tipo Impacto | Esfuerzo Validación | |---------------------|------|--------------|---------------------| | Lesson.tsx | OQI-002 | 🔴 CRÍTICO | 4h (componente de 554 líneas) | **Total Esfuerzo:** ~4 horas de validación **Riesgo:** ALTO (componente complejo con 11 states, bookmarks, notas) --- ## 10. Dependencias Externas (Librerías) ### Análisis de Librerías con Múltiples Consumidores | Librería | Versión | Consumidores | Epics Afectados | Bundle Size | Riesgo Actualización | |----------|---------|--------------|-----------------|-------------|----------------------| | **lightweight-charts** | 4.1.1 | CandlestickChart, CandlestickChartWithML | OQI-003, OQI-006 | 180 KB (gzip) | 🟡 MEDIO | | **recharts** | 2.x | BacktestResults, Reports, StrategyComparison | OQI-004, OQI-006 | 95 KB (gzip) | 🟢 BAJO | | **Zustand** | 4.4.7 | 9 stores | TODOS | 3 KB (gzip) | 🟢 BAJO | | **TanStack Query** | 5.14.0 | ~20 hooks | TODOS | 45 KB (gzip) | 🟡 MEDIO | | **Lucide React** | latest | ~50 icons | TODOS | 8 KB (gzip, tree-shaken) | 🟢 BAJO | | **React Router** | 6.x | Routing | TODOS | 35 KB (gzip) | 🟡 MEDIO | | **Stripe.js** | latest | PaymentMethodForm, Checkout | OQI-005 | 50 KB (CDN) | 🟠 MEDIO-ALTO (PCI-DSS) | **Total Bundle Multimedia/Charts:** ~283 KB (gzip) - Excelente --- ## 11. Recomendaciones de Refactoring ### Prioridad Alta (Q1 2026) 1. **Desacoplar authStore de componentes presentacionales** (30h) - Crear HOCs/hooks intermedios - Reducir dependencias directas de 40 a ~10 - Facilitar testing unitario 2. **Extraer lógica de VideoProgressPlayer a custom hook** (12h) - Separar UI de lógica (554 líneas → ~200 UI + hook) - Mejorar reusabilidad - Facilitar testing 3. **Centralizar gestión de WebSocket** (20h) - Crear WebSocketProvider global - Eliminar implementaciones ad-hoc (OrderBookPanel, MT4) - Reducir código duplicado ### Prioridad Media (Q2 2026) 4. **Migrar de polling a WebSocket** (40h) - OrderBookPanel: polling → WebSocket - Mejorar performance real-time - Reducir carga servidor 5. **Unificar chart components** (25h) - Crear ChartWrapper genérico - Reducir duplicación entre lightweight-charts y recharts - Abstraer configuración común 6. **Implementar Error Boundaries** (15h) - Proteger cada epic con boundary - Prevenir cascadas de errores - Mejorar UX de fallos ### Prioridad Baja (Q3-Q4 2026) 7. **Lazy loading de epics completos** (30h) - Code-splitting por epic - Reducir bundle inicial - Mejorar FCP (First Contentful Paint) 8. **Migrar a microfrontends** (200h) - Aislar epics en aplicaciones independientes - Mejorar escalabilidad - Permitir deploys independientes --- ## 12. Checklist de Modificación Segura ### Antes de Modificar Cualquier Componente: - [ ] **Identificar nivel en jerarquía** (0-5) - NIVEL 0-1: ⚠️ Revisar TODOS los consumidores - NIVEL 2-3: ⚠️ Revisar componentes de niveles superiores - NIVEL 4-5: ✅ Validar solo padres directos - [ ] **Consultar tabla de impacto** - ¿Es componente Hub? → Análisis de impacto completo - ¿Tiene deps cross-epic? → Validar epics afectados - ¿Es hoja del grafo? → Cambio seguro - [ ] **Verificar dependencias circulares** - Ejecutar: `npx madge --circular apps/frontend/src/` - Resultado esperado: "No circular dependencies found" - [ ] **Validar breaking changes** - ¿Cambios en props interface? → Actualizar TypeScript types - ¿Cambios en store structure? → Actualizar consumidores - ¿Cambios en API contracts? → Actualizar backend - [ ] **Testing** - Unit tests del componente modificado - Integration tests de consumidores directos - E2E tests de flujos críticos afectados - [ ] **Actualizar documentación** - README del módulo - Storybook (si aplica) - API docs (Swagger si es backend) --- ## 13. Métricas de Salud del Grafo | Métrica | Valor Actual | Target Q2 2026 | Estado | |---------|--------------|----------------|--------| | **Componentes aislados** | 8 (7%) | <5% | ✅ BUENO | | **Componentes hub** | 12 (10%) | <8% | 🟡 ACEPTABLE | | **Dependencias circulares** | 0 | 0 | ✅ EXCELENTE | | **Profundidad máxima** | 5 niveles | ≤5 niveles | ✅ ÓPTIMO | | **Acoplamiento promedio** | 2.8 deps/comp | <3.0 | ✅ BUENO | | **Deps cross-epic** | 18 | <15 | 🟡 MEJORABLE | | **Bundle size (charts)** | 283 KB | <300 KB | ✅ EXCELENTE | --- ## 14. Herramientas de Análisis ### Recomendadas para Monitoreo Continuo: 1. **Madge** (Dependency graph visualization) ```bash npx madge --circular apps/frontend/src/ npx madge --image graph.svg apps/frontend/src/ ``` 2. **Dependency Cruiser** ```bash npx depcruise --validate .dependency-cruiser.js apps/frontend/src ``` 3. **Webpack Bundle Analyzer** ```bash npm run build -- --analyze ``` 4. **TypeScript Project References** - Configurar `tsconfig.json` con references - Validar imports prohibidos entre epics --- ## Conclusiones ### Fortalezas: ✅ **Arquitectura limpia:** Sin dependencias circulares ✅ **Profundidad controlada:** Máximo 5 niveles es aceptable ✅ **Modularización:** Epics bien definidos (OQI-001 a OQI-009) ✅ **Bundle size:** 283 KB para multimedia/charts es excelente ### Debilidades: ⚠️ **Hubs críticos:** authStore (40 deps), apiClient (90 deps), tradingStore (25 deps) ⚠️ **Acoplamiento OQI-003:** 37 componentes con alto acoplamiento interno ⚠️ **Cross-epic:** 18 dependencias entre módulos (objetivo: <15) 🔴 **OQI-009 MT4:** Completamente aislado y no funcional (0% implementado) ### Acciones Inmediatas: 1. **P0:** Desacoplar authStore (reduce riesgo de cambios en auth) 2. **P1:** Refactorizar VideoProgressPlayer (componente de 554 líneas) 3. **P2:** Implementar Error Boundaries (prevenir cascadas de fallos) 4. **P3:** Reducir dependencias cross-epic de 18 a <15 --- **Grafo actualizado:** 2026-01-25 **Próxima actualización:** Después de implementar refactors P0-P1 **Responsable mantenimiento:** Frontend Lead + Arquitecto