# _MAP - Database Schemas

> Índice de navegación para los esquemas de base de datos
>
> **ACTUALIZADO:** 2025-12-06 - Estructura DDL completada según análisis de requisitos
> **Política:** Carga Limpia (DDL-First) - Ver DIRECTIVA-POLITICA-CARGA-LIMPIA.md
> **Total:** 63 tablas, 91 archivos SQL

## Estructura de Archivos

```
apps/database/
├── ddl/
│   └── schemas/
│       ├── auth/           # 10 tablas - Autenticación y usuarios
│       ├── education/      # 14 tablas - Plataforma educativa
│       ├── trading/        # 9 tablas  - Trading y Paper Engine
│       ├── investment/     # 5 tablas  - Cuentas PAMM
│       ├── financial/      # 8 tablas  - Pagos, wallets unificadas
│       ├── ml/             # 5 tablas  - Machine Learning
│       ├── llm/            # 5 tablas  - LLM Agent
│       └── audit/          # 7 tablas  - Auditoría y compliance
├── seeds/
│   ├── prod/               # Seeds de producción
│   └── dev/                # Seeds de desarrollo
└── scripts/
    ├── create-database.sh
    └── drop-and-recreate-database.sh
```

## Resumen de Schemas

| Schema | Propósito | Tablas | Funciones | Estado |
|--------|-----------|--------|-----------|--------|
| auth | Autenticación y usuarios | 10 | 4 | ✅ Completado |
| education | Plataforma educativa | 14 | 8 | ✅ Completado |
| trading | Trading y Paper Engine | 9 | 2 | ✅ Completado |
| investment | Cuentas PAMM | 5 | - | ✅ Completado |
| financial | Wallets unificadas, pagos | 8 | 4 | ✅ Completado |
| ml | Machine Learning signals | 5 | - | ✅ Completado |
| llm | LLM Agent, RAG | 5 | - | ✅ Completado |
| audit | Logs, compliance | 7 | - | ✅ Completado |

---

## Detalle por Schema

### auth (10 tablas)

| Tabla | Archivo | Descripción |
|-------|---------|-------------|
| `users` | 01-users.sql | Usuarios base del sistema |
| `user_profiles` | 02-user_profiles.sql | Información extendida |
| `oauth_accounts` | 03-oauth_accounts.sql | Cuentas OAuth (Google, GitHub) |
| `sessions` | 04-sessions.sql | Sesiones activas |
| `email_verifications` | 05-email_verifications.sql | Verificación de email |
| `phone_verifications` | 06-phone_verifications.sql | Verificación de teléfono |
| `password_reset_tokens` | 07-password_reset_tokens.sql | Tokens de reset |
| `auth_logs` | 08-auth_logs.sql | Log de autenticación |
| `login_attempts` | 09-login_attempts.sql | **NUEVO** - Control de intentos |
| `rate_limiting_config` | 10-rate_limiting_config.sql | **NUEVO** - Configuración rate limit |

**Funciones:** update_updated_at, log_auth_event, cleanup_expired_sessions, create_user_profile_trigger

### education (14 tablas)

| Tabla | Archivo | Descripción |
|-------|---------|-------------|
| `categories` | 01-categories.sql | Categorías de cursos |
| `courses` | 02-courses.sql | Cursos de trading |
| `modules` | 03-modules.sql | Módulos de cursos |
| `lessons` | 04-lessons.sql | Lecciones individuales |
| `enrollments` | 05-enrollments.sql | Inscripciones |
| `progress` | 06-progress.sql | Progreso por lección |
| `quizzes` | 07-quizzes.sql | Cuestionarios |
| `quiz_questions` | 08-quiz_questions.sql | Preguntas de quiz |
| `quiz_attempts` | 09-quiz_attempts.sql | Intentos de quiz |
| `certificates` | 10-certificates.sql | Certificados emitidos |
| `user_achievements` | 11-user_achievements.sql | Logros de usuarios |
| `user_gamification_profile` | 12-user_gamification_profile.sql | **NUEVO** - Perfil gamificación |
| `user_activity_log` | 13-user_activity_log.sql | **NUEVO** - Log de actividad |
| `course_reviews` | 14-course_reviews.sql | **NUEVO** - Reseñas de cursos |

**Funciones:** update_updated_at, update_enrollment_progress, auto_complete_enrollment, generate_certificate, update_course_stats, update_enrollment_count, update_gamification_profile, views

### trading (9 tablas)

| Tabla | Archivo | Descripción |
|-------|---------|-------------|
| `symbols` | 01-symbols.sql | Instrumentos financieros |
| `watchlists` | 02-watchlists.sql | Listas de seguimiento |
| `watchlist_items` | 03-watchlist_items.sql | Items en watchlists |
| `bots` | 04-bots.sql | Agentes de trading (Atlas, Orion, Nova) |
| `orders` | 05-orders.sql | Órdenes de trading |
| `positions` | 06-positions.sql | Posiciones abiertas/cerradas |
| `trades` | 07-trades.sql | Historial de trades |
| `signals` | 08-signals.sql | **INTERFAZ ML** - Señales generadas |
| `trading_metrics` | 09-trading_metrics.sql | Métricas de rendimiento |

**Funciones:** calculate_position_pnl, update_bot_stats

> **Nota:** La tabla `signals` sirve como interfaz entre Trading (consume) y ML (produce), resolviendo la dependencia circular.

### investment (5 tablas)

| Tabla | Archivo | Descripción |
|-------|---------|-------------|
| `products` | 01-products.sql | Productos PAMM |
| `accounts` | 02-accounts.sql | Cuentas de inversión |
| `transactions` | 03-transactions.sql | Movimientos de cuenta |
| `distributions` | 04-distributions.sql | Distribución de ganancias (80/20) |
| `risk_questionnaire` | 05-risk_questionnaire.sql | **NUEVO** - Cuestionario de riesgo |

> **Delimitación:** Este schema solo maneja PAMM. Portfolio personal se gestiona desde dashboard (OQI-008).

### financial (8 tablas)

| Tabla | Archivo | Descripción |
|-------|---------|-------------|
| `wallets` | 01-wallets.sql | **UNIFICADO** - Wallets del sistema |
| `wallet_transactions` | 02-wallet_transactions.sql | Transacciones de wallet |
| `subscriptions` | 03-subscriptions.sql | Suscripciones activas |
| `payments` | 04-payments.sql | Pagos procesados (Stripe) |
| `invoices` | 05-invoices.sql | Facturas |
| `wallet_audit_log` | 06-wallet_audit_log.sql | **NUEVO** - Auditoría de wallets |
| `currency_exchange_rates` | 07-currency_exchange_rates.sql | **NUEVO** - Tipos de cambio USD/MXN |
| `wallet_limits` | 08-wallet_limits.sql | **NUEVO** - Límites de operación |

**Funciones:** update_wallet_balance, process_transaction, triggers, views

> **Decisión:** USD como moneda principal, MXN mediante conversión. Ver DEC-001.

### ml (5 tablas)

| Tabla | Archivo | Descripción |
|-------|---------|-------------|
| `models` | 01-models.sql | Registro de modelos ML |
| `model_versions` | 02-model_versions.sql | **NUEVO** - Versionado de modelos |
| `predictions` | 03-predictions.sql | Predicciones generadas |
| `prediction_outcomes` | 04-prediction_outcomes.sql | Resultados de predicciones |
| `feature_store` | 05-feature_store.sql | Features pre-calculadas |

### llm (5 tablas)

| Tabla | Archivo | Descripción |
|-------|---------|-------------|
| `conversations` | 01-conversations.sql | Conversaciones con LLM |
| `messages` | 02-messages.sql | Mensajes de conversación |
| `user_preferences` | 03-user_preferences.sql | **NUEVO** - Preferencias de usuario |
| `user_memory` | 04-user_memory.sql | **NUEVO** - Memoria persistente |
| `embeddings` | 05-embeddings.sql | RAG - Embeddings (pgvector) |

> **Decisión:** pgvector para embeddings. Ver DEC-004.

### audit (7 tablas)

| Tabla | Archivo | Descripción |
|-------|---------|-------------|
| `audit_logs` | 01-audit_logs.sql | Log general de auditoría |
| `security_events` | 02-security_events.sql | Eventos de seguridad |
| `system_events` | 03-system_events.sql | Eventos del sistema |
| `trading_audit` | 04-trading_audit.sql | Auditoría de trading |
| `api_request_logs` | 05-api_request_logs.sql | Logs de API |
| `data_access_logs` | 06-data_access_logs.sql | Acceso a datos sensibles (GDPR) |
| `compliance_logs` | 07-compliance_logs.sql | Cumplimiento regulatorio |

---

## Diagrama de Relaciones

```
┌─────────────────────────────────────────────────────────────────────┐
│                              auth                                    │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────────────┐    │
│  │  users   │──│ profiles │  │ sessions │  │ oauth_accounts   │    │
│  └────┬─────┘  └──────────┘  └──────────┘  └──────────────────┘    │
│       │                                                             │
└───────┼─────────────────────────────────────────────────────────────┘
        │
        ├──────────────────────────┬──────────────────────────┐
        │                          │                          │
        ▼                          ▼                          ▼
┌───────────────┐          ┌───────────────┐          ┌───────────────┐
│   education   │          │    trading    │          │  investment   │
│ ┌───────────┐ │          │ ┌───────────┐ │          │ ┌───────────┐ │
│ │  courses  │ │          │ │   bots    │─┼──────────┼─│ products  │ │
│ └─────┬─────┘ │          │ └─────┬─────┘ │          │ └─────┬─────┘ │
│       │       │          │       │       │          │       │       │
│ ┌─────▼─────┐ │          │ ┌─────▼─────┐ │          │ ┌─────▼─────┐ │
│ │ lessons   │ │          │ │ signals◄──┼─┼── ml     │ │ accounts  │ │
│ └───────────┘ │          │ └─────┬─────┘ │          │ └─────┬─────┘ │
│               │          │       │       │          │       │       │
│ ┌───────────┐ │          │ ┌─────▼─────┐ │          │ ┌─────▼─────┐ │
│ │enrollments│ │          │ │ positions │─┼──────────┼─│transactions│ │
│ └───────────┘ │          │ └───────────┘ │          │ └───────────┘ │
└───────────────┘          └───────────────┘          └───────────────┘
        │                          │                          │
        │                          │                          │
        └──────────────────────────┼──────────────────────────┘
                                   │
                                   ▼
                           ┌───────────────┐
                           │   financial   │
                           │ ┌───────────┐ │
                           │ │  wallets  │◄──── UNIFICADO
                           │ └─────┬─────┘ │
                           │       │       │
                           │ ┌─────▼─────┐ │
                           │ │ payments  │ │
                           │ └───────────┘ │
                           │               │
                           │ ┌───────────┐ │
                           │ │subscript. │ │
                           │ └───────────┘ │
                           └───────────────┘

┌───────────────┐          ┌───────────────┐          ┌───────────────┐
│      ml       │          │      llm      │          │     audit     │
│ ┌───────────┐ │          │ ┌───────────┐ │          │ ┌───────────┐ │
│ │  models   │ │          │ │ conversat.│ │          │ │audit_logs │ │
│ └─────┬─────┘ │          │ └─────┬─────┘ │          │ └───────────┘ │
│       │       │          │       │       │          │               │
│ ┌─────▼─────┐ │          │ ┌─────▼─────┐ │          │ ┌───────────┐ │
│ │predictions├─┼──────────┼─│ embeddings│ │          │ │sec_events │ │
│ └───────────┘ │  signals │ └───────────┘ │          │ └───────────┘ │
└───────────────┘          └───────────────┘          └───────────────┘
```

---

## Orden de Ejecución (create-database.sh)

```bash
1. Extensions (uuid-ossp, pgcrypto, pg_trgm, btree_gin, vector)
2. Schemas (auth, education, financial, trading, investment, ml, llm, audit)
3. DDL por schema en orden de dependencia:
   - auth      (sin dependencias)
   - education (depende de auth)
   - financial (depende de auth)
   - trading   (depende de auth)
   - investment(depende de auth, trading)
   - ml        (depende de auth, trading)
   - llm       (depende de auth)
   - audit     (depende de auth)
4. Seeds (prod o dev)
```

---

## Comandos de Uso

```bash
# Crear base de datos nueva
./scripts/create-database.sh

# Eliminar y recrear (desarrollo)
./scripts/drop-and-recreate-database.sh

# Solo cargar seeds
./scripts/create-database.sh --seeds-only --env dev
```

---

## Notas Importantes

- **TIMESTAMPTZ**: Todas las columnas de fecha usan timezone (DEC-007)
- **gen_random_uuid()**: Para generación de UUIDs (no uuid_generate_v4())
- **Row Level Security (RLS)**: Implementar en fase de seguridad
- **Particionamiento**: Considerar para `predictions`, `audit_logs` en producción
- **Backups**: Configurar backup incremental cada 6 horas

---

## Referencias

- [DIRECTIVA-POLITICA-CARGA-LIMPIA.md](../DIRECTIVA-POLITICA-CARGA-LIMPIA.md)
- [DECISIONES-ARQUITECTONICAS.md](../../docs/99-analisis/DECISIONES-ARQUITECTONICAS.md)
- [PLAN-IMPLEMENTACION-CORRECCIONES.md](../../docs/99-analisis/PLAN-IMPLEMENTACION-CORRECCIONES.md)

---
*Última actualización: 2025-12-06*
*Generado por Requirements-Analyst Agent*
