trading-platform/docs/02-definicion-modulos/OQI-004-investment-accounts/implementacion/TRACEABILITY.yml

507 lines
16 KiB
YAML

# TRACEABILITY.yml - OQI-004 Cuentas de Inversión
# Mapeo de requerimientos a implementación
version: "1.0.0"
epic: OQI-004
name: "Cuentas de Inversión Gestionadas"
updated: "2025-12-05"
status: pending
# Resumen de trazabilidad
summary:
total_requirements: 6
total_specs: 7
total_user_stories: 14
total_files_to_implement: 45
test_coverage: "TBD"
story_points: 57
# Mapeo de Requerimientos Funcionales
requirements:
RF-INV-001:
name: "Catálogo de Productos"
status: pending
specs:
- ET-INV-001
- ET-INV-002
- ET-INV-005
user_stories:
- US-INV-001
- US-INV-010
implementation:
backend:
- path: apps/backend/src/modules/investment/services/product.service.ts
description: "Servicio de productos de inversión"
methods:
- getProducts
- getProductById
- getProductByCode
- compareProducts
- getProductPerformance
- path: apps/backend/src/modules/investment/controllers/investment.controller.ts
methods:
- listProducts
- getProduct
- compareProducts
- path: apps/backend/src/modules/investment/investment.routes.ts
routes:
- "GET /investment/products"
- "GET /investment/products/:id"
- "GET /investment/products/compare"
frontend:
- path: apps/frontend/src/modules/investment/pages/Products.tsx
description: "Catálogo de productos"
- path: apps/frontend/src/modules/investment/components/ProductCard.tsx
description: "Tarjeta de producto (Atlas/Orion/Nova)"
- path: apps/frontend/src/modules/investment/components/ProductComparison.tsx
description: "Comparador de productos"
- path: apps/frontend/src/modules/investment/components/RiskIndicator.tsx
description: "Indicador de riesgo"
database:
- path: apps/database/schemas/04_investment_schema.sql
tables:
- investment_products
- product_performance
enums:
- product_type_enum
- risk_level_enum
tests:
- path: apps/backend/tests/investment/product.service.test.ts
status: pending
RF-INV-002:
name: "Gestión de Cuentas"
status: pending
specs:
- ET-INV-001
- ET-INV-002
user_stories:
- US-INV-002
- US-INV-004
- US-INV-009
implementation:
backend:
- path: apps/backend/src/modules/investment/services/account.service.ts
description: "Servicio de cuentas de inversión"
methods:
- createAccount
- getAccounts
- getAccountById
- updateAccount
- closeAccount
- getAccountBalance
- getAccountPerformance
- path: apps/backend/src/modules/investment/controllers/investment.controller.ts
methods:
- createAccount
- getMyAccounts
- getAccount
- closeAccount
- path: apps/backend/src/modules/investment/investment.routes.ts
routes:
- "GET /investment/accounts"
- "POST /investment/accounts"
- "GET /investment/accounts/:id"
- "PUT /investment/accounts/:id"
- "DELETE /investment/accounts/:id"
frontend:
- path: apps/frontend/src/modules/investment/pages/Investment.tsx
description: "Página principal de inversiones"
- path: apps/frontend/src/modules/investment/pages/AccountDetail.tsx
description: "Detalle de cuenta"
- path: apps/frontend/src/modules/investment/pages/OpenAccount.tsx
description: "Abrir nueva cuenta"
- path: apps/frontend/src/modules/investment/components/AccountSummary.tsx
description: "Resumen de cuenta"
- path: apps/frontend/src/modules/investment/components/AccountList.tsx
description: "Lista de cuentas"
database:
- path: apps/database/schemas/04_investment_schema.sql
tables:
- investment_accounts
- account_balances
enums:
- account_status_enum
tests:
- path: apps/backend/tests/investment/account.service.test.ts
status: pending
RF-INV-003:
name: "Depósitos"
status: pending
specs:
- ET-INV-002
- ET-INV-003
user_stories:
- US-INV-003
implementation:
backend:
- path: apps/backend/src/modules/investment/services/deposit.service.ts
description: "Servicio de depósitos"
methods:
- initiateDeposit
- confirmDeposit
- getDeposits
- calculateDepositFee
- validateDeposit
- path: apps/backend/src/modules/investment/controllers/investment.controller.ts
methods:
- createDeposit
- getDeposits
- confirmDeposit
- path: apps/backend/src/modules/investment/investment.routes.ts
routes:
- "POST /investment/accounts/:id/deposit"
- "GET /investment/accounts/:id/deposits"
- "POST /investment/deposits/:id/confirm"
frontend:
- path: apps/frontend/src/modules/investment/components/DepositModal.tsx
description: "Modal de depósito"
- path: apps/frontend/src/modules/investment/components/DepositHistory.tsx
description: "Historial de depósitos"
- path: apps/frontend/src/modules/investment/components/PaymentMethodSelector.tsx
description: "Selector de método de pago"
database:
- path: apps/database/schemas/04_investment_schema.sql
tables:
- deposits
enums:
- deposit_status_enum
- payment_method_enum
external:
- service: Stripe
usage: "Procesamiento de pagos"
tests:
- path: apps/backend/tests/investment/deposit.service.test.ts
status: pending
RF-INV-004:
name: "Retiros"
status: pending
specs:
- ET-INV-002
- ET-INV-003
user_stories:
- US-INV-006
implementation:
backend:
- path: apps/backend/src/modules/investment/services/withdrawal.service.ts
description: "Servicio de retiros"
methods:
- initiateWithdrawal
- approveWithdrawal
- rejectWithdrawal
- getWithdrawals
- calculateWithdrawalFee
- validateWithdrawal
- path: apps/backend/src/modules/investment/controllers/investment.controller.ts
methods:
- createWithdrawal
- getWithdrawals
- cancelWithdrawal
- path: apps/backend/src/modules/investment/investment.routes.ts
routes:
- "POST /investment/accounts/:id/withdraw"
- "GET /investment/accounts/:id/withdrawals"
- "DELETE /investment/withdrawals/:id"
frontend:
- path: apps/frontend/src/modules/investment/components/WithdrawModal.tsx
description: "Modal de retiro"
- path: apps/frontend/src/modules/investment/components/WithdrawalHistory.tsx
description: "Historial de retiros"
- path: apps/frontend/src/modules/investment/components/BankAccountSelector.tsx
description: "Selector de cuenta bancaria"
database:
- path: apps/database/schemas/04_investment_schema.sql
tables:
- withdrawals
- bank_accounts
enums:
- withdrawal_status_enum
tests:
- path: apps/backend/tests/investment/withdrawal.service.test.ts
status: pending
RF-INV-005:
name: "Agentes de Trading"
status: pending
specs:
- ET-INV-004
user_stories:
- US-INV-014
implementation:
backend:
- path: apps/backend/src/modules/investment/services/agent.service.ts
description: "Servicio de agentes/bots"
methods:
- getAgents
- getAgentById
- getAgentPerformance
- assignAgentToAccount
- getAgentTrades
- path: apps/backend/src/modules/investment/controllers/investment.controller.ts
methods:
- listAgents
- getAgentPerformance
- assignAgent
- path: apps/backend/src/modules/investment/investment.routes.ts
routes:
- "GET /investment/agents"
- "GET /investment/agents/:id"
- "GET /investment/agents/:id/performance"
- "POST /investment/accounts/:id/agent"
frontend:
- path: apps/frontend/src/modules/investment/components/BotSelector.tsx
description: "Selector de bot/agente"
- path: apps/frontend/src/modules/investment/components/AgentCard.tsx
description: "Tarjeta de agente"
- path: apps/frontend/src/modules/investment/components/AgentPerformance.tsx
description: "Rendimiento del agente"
database:
- path: apps/database/schemas/04_investment_schema.sql
tables:
- trading_agents
- agent_performance
- agent_trades
enums:
- agent_status_enum
- agent_strategy_enum
tests:
- path: apps/backend/tests/investment/agent.service.test.ts
status: pending
RF-INV-006:
name: "Reportes y Rendimiento"
status: pending
specs:
- ET-INV-005
- ET-INV-006
user_stories:
- US-INV-005
- US-INV-007
- US-INV-008
- US-INV-011
- US-INV-012
implementation:
backend:
- path: apps/backend/src/modules/investment/services/report.service.ts
description: "Servicio de reportes"
methods:
- getPerformanceReport
- getTransactionHistory
- getDistributionHistory
- exportReport
- generatePDF
- sendNotification
- path: apps/backend/src/modules/investment/controllers/investment.controller.ts
methods:
- getPerformance
- getTransactions
- exportReport
- path: apps/backend/src/modules/investment/investment.routes.ts
routes:
- "GET /investment/accounts/:id/performance"
- "GET /investment/accounts/:id/transactions"
- "GET /investment/accounts/:id/distributions"
- "GET /investment/accounts/:id/export"
frontend:
- path: apps/frontend/src/modules/investment/components/PerformanceChart.tsx
description: "Gráfico de rendimiento"
- path: apps/frontend/src/modules/investment/components/TransactionHistory.tsx
description: "Historial de transacciones"
- path: apps/frontend/src/modules/investment/components/DistributionHistory.tsx
description: "Historial de distribuciones"
- path: apps/frontend/src/modules/investment/components/ReportExporter.tsx
description: "Exportador de reportes"
database:
- path: apps/database/schemas/04_investment_schema.sql
tables:
- transactions
- distributions
- performance_snapshots
enums:
- transaction_type_enum
tests:
- path: apps/backend/tests/investment/report.service.test.ts
status: pending
# Mapeo de archivos de configuración
config_files:
backend:
- path: apps/backend/src/modules/investment/investment.module.ts
description: "Módulo de inversión"
- path: apps/backend/src/modules/investment/validators/investment.validators.ts
description: "Validadores Zod"
- path: apps/backend/src/modules/investment/types/investment.types.ts
description: "Tipos TypeScript"
- path: apps/backend/src/modules/investment/cron/investment.cron.ts
description: "Jobs programados"
frontend:
- path: apps/frontend/src/modules/investment/stores/investment.store.ts
description: "Store de inversión Zustand"
- path: apps/frontend/src/modules/investment/hooks/useInvestment.ts
description: "Hook principal de inversión"
- path: apps/frontend/src/modules/investment/services/investment.api.ts
description: "Cliente API de inversión"
# Dependencias externas
external_dependencies:
npm_backend:
- name: stripe
version: "^14.0.0"
usage: "Procesamiento de pagos"
- name: pdfkit
version: "^0.14.0"
usage: "Generación de reportes PDF"
- name: node-cron
version: "^3.0.0"
usage: "Jobs programados"
- name: nodemailer
version: "^6.9.7"
usage: "Notificaciones por email"
npm_frontend:
- name: recharts
version: "^2.10.0"
usage: "Gráficos de rendimiento"
- name: "@tanstack/react-query"
version: "^5.0.0"
usage: "Data fetching"
# APIs de terceros
third_party_apis:
- name: Stripe
docs: https://stripe.com/docs/api
usage:
- Payment Intents
- Customers
- Payment Methods
- Payouts
- name: TradingAgent ML
docs: internal
usage:
- Predicciones ML
- Señales de trading
- Ejecución automatizada
# Endpoints API
api_endpoints:
base_path: /api/v1/investment
endpoints:
# Productos
- method: GET
path: /products
requirement: RF-INV-001
auth: false
- method: GET
path: /products/:id
requirement: RF-INV-001
auth: false
- method: GET
path: /products/compare
requirement: RF-INV-001
auth: false
# Cuentas
- method: GET
path: /accounts
requirement: RF-INV-002
auth: true
- method: POST
path: /accounts
requirement: RF-INV-002
auth: true
- method: GET
path: /accounts/:id
requirement: RF-INV-002
auth: true
- method: DELETE
path: /accounts/:id
requirement: RF-INV-002
auth: true
# Depósitos
- method: POST
path: /accounts/:id/deposit
requirement: RF-INV-003
auth: true
- method: GET
path: /accounts/:id/deposits
requirement: RF-INV-003
auth: true
# Retiros
- method: POST
path: /accounts/:id/withdraw
requirement: RF-INV-004
auth: true
- method: GET
path: /accounts/:id/withdrawals
requirement: RF-INV-004
auth: true
# Agentes
- method: GET
path: /agents
requirement: RF-INV-005
auth: true
- method: GET
path: /agents/:id/performance
requirement: RF-INV-005
auth: true
- method: POST
path: /accounts/:id/agent
requirement: RF-INV-005
auth: true
# Reportes
- method: GET
path: /accounts/:id/performance
requirement: RF-INV-006
auth: true
- method: GET
path: /accounts/:id/transactions
requirement: RF-INV-006
auth: true
- method: GET
path: /accounts/:id/export
requirement: RF-INV-006
auth: true
# Dependencias de épicas
dependencies:
blocks:
- epic: OQI-008
reason: "Portfolio Manager usa cuentas de inversión"
blocked_by:
- epic: OQI-001
reason: "Requiere autenticación de usuarios"
- epic: OQI-005
reason: "Requiere sistema de pagos para depósitos"
- epic: OQI-006
reason: "Agentes usan señales ML"
# Productos de inversión
products:
- code: ATLAS
name: "Atlas Growth"
risk: moderate
min_investment: 5000
target_return: "12-18% anual"
strategy: "ML momentum + value"
- code: ORION
name: "Orion Aggressive"
risk: high
min_investment: 10000
target_return: "20-35% anual"
strategy: "ML high-frequency + options"
- code: NOVA
name: "Nova Conservative"
risk: low
min_investment: 1000
target_return: "6-10% anual"
strategy: "ML index + dividend"
# Notas y decisiones
notes:
- "Montos mínimos de inversión por producto"
- "Distribuciones trimestrales automáticas"
- "Retiros procesados en 3-5 días hábiles"
- "KYC básico requerido para inversiones > $10,000"
- "Performance fee: 20% sobre ganancias > benchmark"
- "Management fee: 1% anual sobre AUM"