trading-platform/docs/99-analisis/DECISIONES-ARQUITECTONICAS.md
rckrdmrd c1b5081208 feat(ml): Complete FASE 11 - BTCUSD update and comprehensive documentation alignment
ML Engine Updates:
- Updated BTCUSD with Polygon API data (2024-2025): 215,699 new records
- Re-trained all ML models: Attention (R²: 0.223), Base, Metamodel (87.3% confidence)
- Backtest results: +176.71R profit with aggressive_filter strategy

Documentation Consolidation:
- Created docs/99-analisis/_MAP.md index with 13 new analysis documents
- Consolidated inventories: removed duplicates from orchestration/inventarios/
- Updated ML_INVENTORY.yml with BTCUSD metrics and training results
- Added execution reports: FASE11-BTCUSD, correction issues, alignment validation

Architecture & Integration:
- Updated all module documentation with NEXUS v3.4 frontmatter
- Fixed _MAP.md indexes across all folders
- Updated orchestration plans and traces

Files: 229 changed, 5064 insertions(+), 1872 deletions(-)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 09:31:29 -06:00

253 lines
6.0 KiB
Markdown

---
id: "DECISIONES-ARQUITECTONICAS"
title: "DECISIONES ARQUITECTÓNICAS - Trading Platform"
type: "Documentation"
project: "trading-platform"
version: "1.0.0"
updated_date: "2026-01-04"
---
# DECISIONES ARQUITECTÓNICAS - Trading Platform
**Fecha:** 2025-12-06
**Estado:** Aprobado
**Versión:** 1.0.0
---
## Resumen de Decisiones
Este documento consolida las decisiones arquitectónicas tomadas para resolver los conflictos identificados en el análisis de requisitos.
---
## DEC-001: Moneda Principal
### Contexto
Se detectó conflicto entre documentos que definían planes en USD ($19-99) vs MXN (499-999).
### Decisión
**Moneda principal: USD** con soporte para conversión a MXN.
### Justificación
- Plataforma internacional de trading requiere estándar USD
- Stripe maneja mejor USD como moneda base
- MXN se soporta mediante conversión en checkout
### Implementación
```yaml
Planes (USD):
- Basic: $19/mes
- Pro: $49/mes
- Premium: $99/mes
Tabla currency_exchange_rates:
- Actualización diaria de tipo de cambio
- Mostrar precio en MXN en UI para usuarios mexicanos
```
---
## DEC-002: Fusión/Delimitación OQI-004 y OQI-008
### Contexto
Se detectó 70-85% de duplicación funcional entre:
- OQI-004: Cuentas de Inversión PAMM
- OQI-008: Portfolio Manager
### Decisión
**Delimitar responsabilidades** (no fusionar):
| Épica | Responsabilidad Exclusiva |
|-------|---------------------------|
| OQI-004 | Cuentas PAMM gestionadas por agentes (Atlas, Orion, Nova) |
| OQI-008 | Portfolio personal del usuario, cuestionario de riesgo, metas |
### Componentes Compartidos (en `financial` schema)
- Wallets unificadas
- Historial de transacciones
- Perfil de riesgo (calculado por cuestionario de OQI-008, usado por OQI-004)
### Implementación
- OQI-004 usa `investment` schema para PAMM específico
- OQI-008 funcionalidad de portfolio se integra en dashboard general
- Cuestionario de riesgo en `investment.risk_questionnaire`
- Perfil resultante alimenta selección de agente en PAMM
---
## DEC-003: Schema de Usuarios
### Contexto
Inconsistencia entre `public.users` y `auth.users` en referencias.
### Decisión
**Schema dedicado: `auth`** para todas las tablas de autenticación.
### Justificación
- Separación de concerns clara
- Facilita RLS (Row Level Security)
- Permite migración futura a servicio de auth separado
### Implementación
```sql
-- Schema auth contiene:
auth.users
auth.user_profiles
auth.oauth_accounts
auth.sessions
auth.email_verifications
auth.phone_verifications
auth.password_reset_tokens
auth.auth_logs
auth.login_attempts
auth.rate_limiting_config
-- Todas las FK de otros schemas referencian:
REFERENCES auth.users(id)
```
---
## DEC-004: Vector Database para LLM
### Contexto
OQI-007 (LLM Agent) requiere RAG/Vector Store pero no estaba especificado.
### Decisión
**pgvector** (extensión de PostgreSQL)
### Justificación
- No requiere infraestructura adicional
- Integración nativa con PostgreSQL existente
- Suficiente para volumen inicial (< 1M embeddings)
- Migración a Pinecone/Weaviate si escala necesario
### Implementación
```sql
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE llm.embeddings (
id UUID PRIMARY KEY,
content_type VARCHAR(50), -- 'lesson', 'article', 'faq'
content_id UUID,
embedding vector(1536), -- OpenAI ada-002
metadata JSONB,
created_at TIMESTAMPTZ
);
CREATE INDEX idx_embeddings_vector ON llm.embeddings
USING ivfflat (embedding vector_cosine_ops);
```
---
## DEC-005: Distribución PAMM
### Contexto
Ambigüedad sobre frecuencia de distribución de ganancias (80/20): ¿mensual o trimestral?
### Decisión
**Distribución mensual** con opción de reinversión.
### Justificación
- Mayor transparencia para inversionistas
- Alineado con ciclo de billing (suscripciones mensuales)
- Reinversión automática disponible para compounding
### Implementación
```sql
CREATE TYPE investment.distribution_frequency AS ENUM (
'monthly',
'quarterly'
);
-- Default: monthly
-- Usuario puede optar por quarterly con bonus de 2% extra
```
---
## DEC-006: Resolución de Dependencia Circular
### Contexto
OQI-003 (Trading) OQI-006 (ML Signals) tenían dependencia circular que bloqueaba MVP.
### Decisión
**Interfaz abstracta `trading.signals`** como punto de integración.
### Justificación
- Desacopla ambos módulos
- Trading puede desarrollarse con MockSignalProvider
- ML puede desarrollarse independientemente
- Integración mediante tabla compartida
### Implementación
```
trading.signals (tabla interfaz)
↑ ↑
│ │
OQI-003 OQI-006
(consume) (produce)
```
```sql
-- OQI-003 lee de trading.signals
-- OQI-006 escribe a trading.signals
-- No hay FK directa entre módulos
```
---
## DEC-007: Timestamps Estándar
### Contexto
Inconsistencia entre TIMESTAMP y TIMESTAMPTZ en definiciones.
### Decisión
**TIMESTAMPTZ en todas las columnas de fecha/hora**
### Justificación
- Plataforma internacional requiere timezone awareness
- PostgreSQL best practice
- Evita bugs de conversión de zonas horarias
### Implementación
```sql
-- SIEMPRE usar:
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
-- NUNCA usar:
created_at TIMESTAMP -- SIN timezone
```
---
## Matriz de Impacto
| Decisión | Épicas Impactadas | Archivos a Modificar |
|----------|-------------------|---------------------|
| DEC-001 | OQI-005 | ET-PAY-*.md, DDL financial |
| DEC-002 | OQI-004, OQI-008 | README.md de ambas, DDL investment |
| DEC-003 | TODAS | Todos los ET-*-database.md |
| DEC-004 | OQI-007 | ET-LLM-*.md, DDL llm |
| DEC-005 | OQI-004 | ET-INV-*.md, DDL investment |
| DEC-006 | OQI-003, OQI-006 | ET-TRD-*.md, ET-ML-*.md, DDL trading |
| DEC-007 | TODAS | Todos los DDL |
---
## Próximos Pasos
1. Documentar decisiones (este documento)
2. Crear ADRs formales (ADR-002 a ADR-006)
3. Actualizar DDLs según decisiones
4. Actualizar especificaciones técnicas
5. Validar con recreación de BD
---
*Documento generado por Requirements-Analyst Agent*
*Trading Platform - Trading Platform*