- Create TASK-2026-01-25-OQI-008-PORTFOLIO-MANAGER with METADATA, SUMMARY, EJECUCION - Update BACKEND_INVENTORY with portfolio module details (repositories, websocket, endpoints) - Update FRONTEND_INVENTORY with portfolio pages, components, store, routes - Update MASTER_INVENTORY with OQI-008 progress (10% -> 90%) - Update _INDEX.yml with new task entry Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
149 lines
3.6 KiB
Markdown
149 lines
3.6 KiB
Markdown
# 05-EJECUCION - OQI-008 Portfolio Manager
|
|
|
|
## Fase 1: Backend - Repositorios PostgreSQL
|
|
|
|
### Archivos Creados
|
|
```
|
|
apps/backend/src/modules/portfolio/repositories/
|
|
├── portfolio.repository.ts # CRUD portafolios
|
|
├── allocation.repository.ts # Gestion allocaciones
|
|
├── goal.repository.ts # Metas financieras
|
|
└── index.ts # Exports
|
|
```
|
|
|
|
### Commit
|
|
```
|
|
f40dfa8 [OQI-008] feat: Add PostgreSQL repositories for portfolio module
|
|
```
|
|
|
|
---
|
|
|
|
## Fase 2: Frontend - Modulo Dedicado
|
|
|
|
### Archivos Creados
|
|
```
|
|
apps/frontend/src/modules/portfolio/
|
|
├── pages/
|
|
│ ├── PortfolioDashboard.tsx # Dashboard con tabs
|
|
│ ├── CreatePortfolio.tsx # Formulario creacion
|
|
│ └── CreateGoal.tsx # Formulario metas
|
|
├── components/
|
|
│ ├── AllocationChart.tsx # Donut chart
|
|
│ ├── AllocationTable.tsx # Tabla posiciones
|
|
│ ├── RebalanceCard.tsx # Recomendaciones
|
|
│ └── GoalCard.tsx # Card de meta
|
|
└── services/
|
|
└── portfolio.service.ts # API client
|
|
```
|
|
|
|
### Rutas Agregadas (App.tsx)
|
|
```typescript
|
|
<Route path="/portfolio" element={<PortfolioDashboard />} />
|
|
<Route path="/portfolio/new" element={<CreatePortfolio />} />
|
|
<Route path="/portfolio/goals/new" element={<CreateGoal />} />
|
|
```
|
|
|
|
### Commit
|
|
```
|
|
b8a7cbe [OQI-008] feat: Add Portfolio Manager frontend module
|
|
```
|
|
|
|
---
|
|
|
|
## Fase 3: Funcionalidades Avanzadas
|
|
|
|
### Backend - WebSocket y Performance
|
|
|
|
```
|
|
apps/backend/src/modules/portfolio/
|
|
├── websocket/
|
|
│ └── portfolio.websocket.ts # Real-time updates
|
|
├── repositories/
|
|
│ └── snapshot.repository.ts # Historial valores
|
|
└── controllers/
|
|
└── portfolio.controller.ts # +getPerformance, +getPerformanceStats
|
|
```
|
|
|
|
### Frontend - Charts y Edit
|
|
|
|
```
|
|
apps/frontend/src/modules/portfolio/
|
|
├── components/
|
|
│ └── PerformanceChart.tsx # Canvas line chart
|
|
└── pages/
|
|
└── EditAllocations.tsx # Editor allocaciones
|
|
```
|
|
|
|
### Commits
|
|
```
|
|
Backend: 32a0886 [OQI-008] feat: Add portfolio Phase 3 - WebSocket, snapshots, performance APIs
|
|
Frontend: c02625f [OQI-008] feat: Add portfolio Phase 3 - Performance chart and edit allocations
|
|
```
|
|
|
|
---
|
|
|
|
## Fase 4: Integracion WebSocket
|
|
|
|
### Backend
|
|
```typescript
|
|
// index.ts
|
|
import { portfolioWebSocket } from './modules/portfolio/websocket/portfolio.websocket.js';
|
|
|
|
// Initialize
|
|
portfolioWebSocket.initialize();
|
|
|
|
// Graceful shutdown
|
|
portfolioWebSocket.shutdown();
|
|
```
|
|
|
|
### Frontend
|
|
|
|
```typescript
|
|
// websocket.service.ts
|
|
export const portfolioWS = new WebSocketService({
|
|
url: `${WS_BASE_URL}/ws/portfolio`,
|
|
reconnectInterval: 5000,
|
|
maxReconnectAttempts: 15,
|
|
});
|
|
|
|
export function usePortfolioUpdates(portfolioId: string | null) { ... }
|
|
```
|
|
|
|
```typescript
|
|
// portfolioStore.ts (nuevo)
|
|
- State management con Zustand
|
|
- WebSocket connection/disconnection
|
|
- Real-time updates handling
|
|
- Actions: fetchPortfolios, selectPortfolio, executeRebalance, etc.
|
|
```
|
|
|
|
### Commits
|
|
```
|
|
Backend: b0bfbe1 [OQI-008] feat: Initialize portfolio WebSocket service in server
|
|
Frontend: fd54724 [OQI-008] feat: Add portfolio store with WebSocket real-time updates
|
|
```
|
|
|
|
---
|
|
|
|
## Validaciones Realizadas
|
|
|
|
- [x] Codigo compila sin errores
|
|
- [x] Imports correctos
|
|
- [x] Rutas registradas
|
|
- [x] WebSocket inicializado
|
|
- [x] Store funcional
|
|
- [x] Commits pusheados
|
|
|
|
## Resultado Final
|
|
|
|
**Progreso OQI-008:** 20% → 90%
|
|
|
|
**Funcionalidades completadas:**
|
|
- Dashboard con resumen y metas
|
|
- Grafico de allocaciones (donut)
|
|
- Grafico de rendimiento (line chart)
|
|
- Editor de allocaciones
|
|
- Rebalanceo automatico
|
|
- Metas financieras
|
|
- Actualizaciones en tiempo real
|