FASE 1 - DDL-Backend Coherence (continued): - market-data.types.ts: Updated TickerRow, added Ohlcv5mRow, Ohlcv15mRow, OhlcvStagingRow - llm.types.ts: Updated UserPreferences, UserMemory, Embedding + 3 Row types - financial.types.ts: +6 types (Invoice, WalletAuditLog, etc.) - entity.types.ts (trading): +5 types (Symbol, TradingBot, etc.) FASE 2 - Backend-Frontend Coherence (continued): - llmStore.ts: New Zustand store with session lifecycle management - riskStore.ts: New Zustand store for risk assessment - risk.service.ts: New service with 8 functions - currency.service.ts: New service with 5 functions FASE 3 - Documentation: - OQI-007: Updated to 100% (7 ET, 11 US, 6 RF) - OQI-008: Added ET-PFM-010-architecture.md, ET-PFM-011-goals-system.md - Updated all _MAP.md and README.md indexes Build validation: Backend tsc PASSED, Frontend Vite PASSED Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
410 lines
14 KiB
Markdown
410 lines
14 KiB
Markdown
---
|
|
id: "ET-PFM-010"
|
|
title: "Arquitectura General del Sistema Portfolio Manager"
|
|
type: "Technical Specification"
|
|
status: "Done"
|
|
priority: "Alta"
|
|
epic: "OQI-008"
|
|
project: "trading-platform"
|
|
version: "1.0.0"
|
|
created_date: "2026-01-28"
|
|
updated_date: "2026-01-28"
|
|
---
|
|
|
|
# ET-PFM-010: Arquitectura General del Sistema Portfolio Manager
|
|
|
|
**Epica:** OQI-008 - Portfolio Manager
|
|
**Version:** 1.0
|
|
**Fecha:** 2026-01-28
|
|
**Estado:** Planificado
|
|
|
|
---
|
|
|
|
## 1. Vision General
|
|
|
|
El Portfolio Manager es un sistema integral de gestion de carteras de inversion a largo plazo que permite a los usuarios administrar multiples estrategias de inversion, realizar rebalanceo automatico, y proyectar metas financieras.
|
|
|
|
### 1.1 Objetivos del Sistema
|
|
|
|
| Objetivo | Descripcion | Metrica de Exito |
|
|
|----------|-------------|------------------|
|
|
| Multi-estrategia | Gestionar diferentes perfiles de riesgo | 5+ perfiles predefinidos |
|
|
| Optimizacion | Portfolio basado en Modern Portfolio Theory | Sharpe > benchmark |
|
|
| Rebalanceo | Automatizacion inteligente | Drift < 5% mantenido |
|
|
| Proyecciones | Simulaciones Monte Carlo | 10,000 escenarios |
|
|
| Reportes | Documentacion profesional | PDF, CSV, Excel |
|
|
|
|
---
|
|
|
|
## 2. Arquitectura de Alto Nivel
|
|
|
|
```
|
|
+--------------------------------------------------------------------------------+
|
|
| PORTFOLIO MANAGER SYSTEM |
|
|
+--------------------------------------------------------------------------------+
|
|
| |
|
|
| +---------------------------------------------------------------------------+ |
|
|
| | PRESENTATION LAYER | |
|
|
| | +------------------+ +------------------+ +------------------------+ | |
|
|
| | | Portfolio | | Rebalance | | Goals & | | |
|
|
| | | Dashboard | | Interface | | Projections | | |
|
|
| | +------------------+ +------------------+ +------------------------+ | |
|
|
| | | |
|
|
| | +------------------+ +------------------+ +------------------------+ | |
|
|
| | | Risk Metrics | | Reports | | Stress Test | | |
|
|
| | | Panel | | Generator | | Simulator | | |
|
|
| | +------------------+ +------------------+ +------------------------+ | |
|
|
| +---------------------------------------------------------------------------+ |
|
|
| | |
|
|
| | REST API + WebSocket |
|
|
| v |
|
|
| +---------------------------------------------------------------------------+ |
|
|
| | BUSINESS LAYER | |
|
|
| | | |
|
|
| | +-------------------+ +-------------------+ +------------------+ | |
|
|
| | | Portfolio Service | | Metrics Service | | Goals Service | | |
|
|
| | | | | | | | | |
|
|
| | | - Summary | | - TWR/MWR | | - Create | | |
|
|
| | | - Positions | | - Sharpe/Sortino | | - Project | | |
|
|
| | | - History | | - VaR/CVaR | | - Track | | |
|
|
| | | - Snapshots | | - Drawdown | | - Simulate | | |
|
|
| | +-------------------+ +-------------------+ +------------------+ | |
|
|
| | | |
|
|
| | +-------------------+ +-------------------+ +------------------+ | |
|
|
| | | Rebalance Engine | | Stress Test | | Report Service | | |
|
|
| | | | | Engine | | | | |
|
|
| | | - Drift Detection | | - Scenarios | | - PDF Generator | | |
|
|
| | | - Plan Generator | | - Impact Calc | | - Tax Reports | | |
|
|
| | | - Executor | | - Monte Carlo | | - Export | | |
|
|
| | +-------------------+ +-------------------+ +------------------+ | |
|
|
| +---------------------------------------------------------------------------+ |
|
|
| | |
|
|
| | TypeORM / Prisma |
|
|
| v |
|
|
| +---------------------------------------------------------------------------+ |
|
|
| | DATA LAYER | |
|
|
| | | |
|
|
| | +-------------------+ +-------------------+ +------------------+ | |
|
|
| | | PostgreSQL | | Redis | | External APIs | | |
|
|
| | | | | | | | | |
|
|
| | | - portfolios | | - Session cache | | - Market Data | | |
|
|
| | | - positions | | - Metrics cache | | - Prices | | |
|
|
| | | - transactions | | - Rate limiting | | - Benchmarks | | |
|
|
| | | - goals | | - Real-time data | | - Economic | | |
|
|
| | | - risk_metrics | +-------------------+ +------------------+ | |
|
|
| | +-------------------+ | |
|
|
| +---------------------------------------------------------------------------+ |
|
|
| |
|
|
+--------------------------------------------------------------------------------+
|
|
```
|
|
|
|
---
|
|
|
|
## 3. Componentes Principales
|
|
|
|
### 3.1 Frontend (React + TypeScript)
|
|
|
|
| Componente | Descripcion | Archivo |
|
|
|------------|-------------|---------|
|
|
| PortfolioDashboard | Vista principal del portfolio | `Portfolio.tsx` |
|
|
| PositionsTable | Tabla de posiciones | `PositionsTable.tsx` |
|
|
| AllocationChart | Grafico donut de asignacion | `AllocationChart.tsx` |
|
|
| PerformanceChart | Grafico de rendimiento | `PerformanceChart.tsx` |
|
|
| RiskMetricsPanel | Panel de metricas de riesgo | `RiskMetricsPanel.tsx` |
|
|
| RebalanceModal | Modal de rebalanceo | `RebalanceModal.tsx` |
|
|
| StressTestSimulator | Simulador de stress test | `StressTestSimulator.tsx` |
|
|
| GoalTracker | Seguimiento de metas | `GoalTracker.tsx` |
|
|
| ReportGenerator | Generador de reportes | `ReportGenerator.tsx` |
|
|
|
|
### 3.2 Backend (Express.js + TypeScript)
|
|
|
|
| Servicio | Responsabilidad | Endpoints |
|
|
|----------|-----------------|-----------|
|
|
| PortfolioService | CRUD de portfolios | `/api/portfolio/*` |
|
|
| PositionService | Gestion de posiciones | `/api/portfolio/positions/*` |
|
|
| MetricsService | Calculo de metricas | `/api/portfolio/metrics/*` |
|
|
| RebalanceService | Motor de rebalanceo | `/api/portfolio/rebalance/*` |
|
|
| GoalService | Gestion de metas | `/api/goals/*` |
|
|
| StressTestService | Stress testing | `/api/portfolio/stress-test/*` |
|
|
| ReportService | Generacion de reportes | `/api/portfolio/reports/*` |
|
|
| TaxReportService | Reportes fiscales | `/api/portfolio/tax/*` |
|
|
|
|
### 3.3 Database (PostgreSQL)
|
|
|
|
| Tabla | Descripcion | Relaciones |
|
|
|-------|-------------|------------|
|
|
| `portfolios` | Portfolios de usuarios | 1:N positions |
|
|
| `positions` | Posiciones activas | N:1 portfolio |
|
|
| `transactions` | Historial de transacciones | N:1 portfolio |
|
|
| `portfolio_snapshots` | Snapshots diarios | N:1 portfolio |
|
|
| `investment_goals` | Metas de inversion | N:1 user |
|
|
| `goal_contributions` | Contribuciones a metas | N:1 goal |
|
|
| `target_allocations` | Asignaciones objetivo | N:1 portfolio |
|
|
| `rebalance_history` | Historial de rebalanceo | N:1 portfolio |
|
|
| `risk_metrics` | Metricas de riesgo calculadas | N:1 portfolio |
|
|
| `stress_test_results` | Resultados de stress tests | N:1 portfolio |
|
|
| `reports` | Reportes generados | N:1 portfolio |
|
|
|
|
---
|
|
|
|
## 4. Flujos de Datos
|
|
|
|
### 4.1 Flujo de Carga del Dashboard
|
|
|
|
```
|
|
Usuario accede /portfolio
|
|
|
|
|
v
|
|
[Frontend] GET /api/portfolio/{id}
|
|
|
|
|
v
|
|
[PortfolioService] getPortfolioSummary()
|
|
|
|
|
+---> [PositionService] getPositions()
|
|
|
|
|
+---> [MetricsService] calculateMetrics()
|
|
|
|
|
+---> [Cache] Redis (TTL: 15s para precios)
|
|
|
|
|
v
|
|
[Response] PortfolioSummary + Positions + Metrics
|
|
|
|
|
v
|
|
[Frontend] Renderiza Dashboard
|
|
|
|
|
v
|
|
[WebSocket] Suscripcion a updates de precios
|
|
```
|
|
|
|
### 4.2 Flujo de Rebalanceo
|
|
|
|
```
|
|
Usuario solicita rebalanceo
|
|
|
|
|
v
|
|
[Frontend] GET /api/portfolio/rebalance/suggestions
|
|
|
|
|
v
|
|
[RebalanceService] calculateDeviation()
|
|
|
|
|
+---> Compara currentAllocation vs targetAllocation
|
|
|
|
|
+---> Calcula drift por cada activo
|
|
|
|
|
v
|
|
[RebalanceService] generatePlan()
|
|
|
|
|
+---> Determina ordenes: BUY/SELL
|
|
|
|
|
+---> Ordena: ventas primero (genera liquidez)
|
|
|
|
|
+---> Calcula costos estimados
|
|
|
|
|
v
|
|
[Response] RebalancePlan con ordenes sugeridas
|
|
|
|
|
v
|
|
[Frontend] Muestra preview al usuario
|
|
|
|
|
v
|
|
Usuario confirma
|
|
|
|
|
v
|
|
[Frontend] POST /api/portfolio/rebalance/execute
|
|
|
|
|
v
|
|
[RebalanceService] executePlan()
|
|
|
|
|
+---> [OrderService] createOrder() x N
|
|
|
|
|
v
|
|
[TransactionService] recordTransactions()
|
|
|
|
|
v
|
|
[Response] RebalanceResult (success/fail por orden)
|
|
```
|
|
|
|
### 4.3 Flujo de Proyeccion Monte Carlo
|
|
|
|
```
|
|
Usuario solicita proyeccion de meta
|
|
|
|
|
v
|
|
[Frontend] POST /api/goals/{id}/projection
|
|
|
|
|
v
|
|
[GoalProjectionService] calculateProjection()
|
|
|
|
|
+---> Obtiene parametros:
|
|
| - current_amount
|
|
| - monthly_contribution
|
|
| - expected_return
|
|
| - target_date
|
|
|
|
|
+---> Ejecuta simulacion Monte Carlo
|
|
| - 10,000 escenarios
|
|
| - Distribucion normal de retornos
|
|
| - Random walk
|
|
|
|
|
v
|
|
[Response] GoalProjection
|
|
|
|
|
+---> projectedValue
|
|
+---> probability_of_success
|
|
+---> percentiles (P10, P50, P90)
|
|
+---> requiredContribution (para alcanzar meta)
|
|
|
|
|
v
|
|
[Frontend] Renderiza grafico de proyeccion
|
|
```
|
|
|
|
---
|
|
|
|
## 5. Integraciones Externas
|
|
|
|
### 5.1 Market Data Providers
|
|
|
|
| Proveedor | Uso | Frecuencia |
|
|
|-----------|-----|------------|
|
|
| Binance API | Precios crypto | Real-time |
|
|
| Alpha Vantage | Datos fundamentales | Diario |
|
|
| Yahoo Finance | Benchmarks | Diario |
|
|
| TradingView (futuro) | Charts avanzados | Real-time |
|
|
|
|
### 5.2 Servicios Internos
|
|
|
|
| Servicio | Puerto | Integracion |
|
|
|----------|--------|-------------|
|
|
| MCP-Investment | 3093 | Cuentas de inversion |
|
|
| MCP-Wallet | 3090 | Balance de wallet |
|
|
| MCP-Auth | 3095 | Autenticacion |
|
|
| ML-Engine | 3083 | Predicciones (futuro) |
|
|
|
|
---
|
|
|
|
## 6. Seguridad
|
|
|
|
### 6.1 Autenticacion y Autorizacion
|
|
|
|
- JWT Bearer tokens
|
|
- Refresh token rotation
|
|
- Rate limiting: 100 req/min por usuario
|
|
- Verificacion de ownership en cada request
|
|
|
|
### 6.2 Validacion de Datos
|
|
|
|
```typescript
|
|
// Ejemplo: validacion de orden de rebalanceo
|
|
const RebalanceOrderSchema = z.object({
|
|
portfolioId: z.string().uuid(),
|
|
orders: z.array(z.object({
|
|
symbol: z.string().min(1).max(10),
|
|
action: z.enum(['BUY', 'SELL']),
|
|
amount: z.number().positive().max(1000000),
|
|
})),
|
|
dryRun: z.boolean().default(false),
|
|
});
|
|
```
|
|
|
|
### 6.3 Audit Trail
|
|
|
|
- Todas las transacciones registradas
|
|
- Logs de acceso a datos sensibles
|
|
- Historial de cambios de configuracion
|
|
|
|
---
|
|
|
|
## 7. Escalabilidad
|
|
|
|
### 7.1 Caching Strategy
|
|
|
|
| Dato | TTL | Estrategia |
|
|
|------|-----|------------|
|
|
| Precios | 15s | Write-through |
|
|
| Metricas basicas | 1 min | Lazy load |
|
|
| Metricas avanzadas | 1 hora | Background job |
|
|
| Snapshots | 24 horas | Scheduled job |
|
|
|
|
### 7.2 Background Jobs
|
|
|
|
| Job | Frecuencia | Descripcion |
|
|
|-----|------------|-------------|
|
|
| SnapshotJob | Diario 00:00 UTC | Captura estado del portfolio |
|
|
| MetricsJob | Cada 1 hora | Recalcula metricas avanzadas |
|
|
| AlertsJob | Cada 5 min | Verifica drift y envia alertas |
|
|
| ReportJob | Bajo demanda | Genera reportes PDF |
|
|
|
|
---
|
|
|
|
## 8. Metricas de Rendimiento
|
|
|
|
### 8.1 SLAs
|
|
|
|
| Operacion | Target | Max |
|
|
|-----------|--------|-----|
|
|
| Dashboard load | < 1s | 2s |
|
|
| Calculo de metricas | < 500ms | 1s |
|
|
| Simulacion Monte Carlo | < 3s | 5s |
|
|
| Generacion de PDF | < 10s | 30s |
|
|
|
|
### 8.2 Limites del Sistema
|
|
|
|
| Recurso | Limite | Razon |
|
|
|---------|--------|-------|
|
|
| Posiciones por portfolio | 100 | Performance de calculos |
|
|
| Escenarios Monte Carlo | 10,000 | Balance precision/tiempo |
|
|
| Historial de transacciones | 10,000 | Paginacion requerida |
|
|
| Tamanio de reporte PDF | 10 MB | Limite de descarga |
|
|
|
|
---
|
|
|
|
## 9. Stack Tecnologico Detallado
|
|
|
|
### 9.1 Frontend
|
|
|
|
| Tecnologia | Version | Uso |
|
|
|------------|---------|-----|
|
|
| React | 18.x | Framework UI |
|
|
| TypeScript | 5.x | Tipado estatico |
|
|
| Zustand | 4.x | State management |
|
|
| TanStack Query | 5.x | Data fetching |
|
|
| Recharts | 2.x | Graficos |
|
|
| TailwindCSS | 3.x | Estilos |
|
|
| Zod | 3.x | Validacion schemas |
|
|
|
|
### 9.2 Backend
|
|
|
|
| Tecnologia | Version | Uso |
|
|
|------------|---------|-----|
|
|
| Node.js | 20.x LTS | Runtime |
|
|
| Express.js | 5.x | Framework HTTP |
|
|
| TypeScript | 5.x | Tipado estatico |
|
|
| TypeORM | 0.3.x | ORM |
|
|
| Bull | 4.x | Job queues |
|
|
| Node-cron | 3.x | Scheduled jobs |
|
|
| PDFKit | 0.14.x | Generacion PDF |
|
|
|
|
### 9.3 Infraestructura
|
|
|
|
| Tecnologia | Version | Uso |
|
|
|------------|---------|-----|
|
|
| PostgreSQL | 16.x | Database principal |
|
|
| Redis | 7.x | Cache + queues |
|
|
| Docker | 24.x | Contenedores |
|
|
| Nginx | 1.25.x | Reverse proxy |
|
|
|
|
---
|
|
|
|
## 10. Referencias
|
|
|
|
- [ET-PFM-001: Arquitectura Dashboard](./ET-PFM-001-arquitectura-dashboard.md)
|
|
- [ET-PFM-002: Calculo de Metricas](./ET-PFM-002-calculo-metricas.md)
|
|
- [ET-PFM-003: Stress Testing](./ET-PFM-003-stress-testing.md)
|
|
- [ET-PFM-004: Motor de Rebalanceo](./ET-PFM-004-motor-rebalanceo.md)
|
|
- [ET-PFM-007: Motor de Metas](./ET-PFM-007-motor-metas.md)
|
|
- [TRACEABILITY.yml](../implementacion/TRACEABILITY.yml)
|
|
|
|
---
|
|
|
|
*Especificacion tecnica - Sistema NEXUS*
|