--- id: "MAP-database-schemas" title: "Mapa de Schemas de Base de Datos" type: "Index" status: "Activo" project: "trading-platform" version: "2.0.0" created_date: "2025-12-06" updated_date: "2026-01-07" author: "Claude-Orquestador" --- # _MAP - Database Schemas > Índice de navegación para los esquemas de base de datos > > **ACTUALIZADO:** 2026-01-07 - market_data schema + 6 activos + ML tables > **Política:** Carga Limpia (DDL-First) - Ver DIRECTIVA-POLITICA-CARGA-LIMPIA.md > **Total:** 77 tablas, 104 FK, 9 schemas --- ## Estructura de Archivos ``` apps/database/ ├── ddl/ │ └── schemas/ │ ├── auth/ # 12 tablas - Autenticación y usuarios │ ├── education/ # 14 tablas - Plataforma educativa │ ├── trading/ # 10 tablas - Trading y Paper Engine │ ├── investment/ # 7 tablas - Cuentas PAMM │ ├── financial/ # 10 tablas - Pagos, wallets unificadas │ ├── ml/ # 9 tablas - Machine Learning │ ├── llm/ # 4 tablas - LLM Agent (+ pgvector) │ ├── audit/ # 7 tablas - Auditoría y compliance │ └── market_data/ # 4 tablas - **NUEVO** Datos OHLCV ├── seeds/ │ └── prod/ # Seeds de producción └── scripts/ ├── create-database.sh ├── drop-and-recreate-database.sh └── migrate_6_assets.sh # **NUEVO** Migración MySQL→PostgreSQL ``` --- ## Resumen de Schemas | Schema | Propósito | Tablas | Funciones | Estado | |--------|-----------|--------|-----------|--------| | auth | Autenticación y usuarios | 12 | 4 | ✅ Completado | | education | Plataforma educativa | 14 | 8 | ✅ Completado | | trading | Trading y Paper Engine | 10 | 4 | ✅ Completado | | investment | Cuentas PAMM | 7 | - | ✅ Completado | | financial | Wallets unificadas, pagos | 10 | 4 | ✅ Completado | | ml | Machine Learning signals | 9 | 1 | ✅ Completado | | llm | LLM Agent, RAG | 4 | - | ⚠️ Requiere pgvector | | audit | Logs, compliance | 7 | - | ✅ Completado | | **market_data** | **Datos OHLCV 5m/15m** | **4** | **2** | ✅ **NUEVO** | **Total:** 77 tablas, 104 FK --- ## Detalle por Schema ### auth (12 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 | Control de intentos | | `rate_limiting_config` | 10-rate_limiting_config.sql | Configuración rate limit | | `deferred_constraints` | 99-deferred-constraints.sql | **NUEVO** - FK diferidas | **Funciones:** update_updated_at, log_auth_event, cleanup_expired_sessions, create_user_profile_trigger ### market_data (4 tablas) **NUEVO** | Tabla | Archivo | Descripción | |-------|---------|-------------| | `tickers` | 01-tickers.sql | Catálogo de 6 activos (XAUUSD, EURUSD, BTCUSD, GBPUSD, USDJPY, AUDUSD) | | `ohlcv_5m` | 02-ohlcv_5m.sql | Datos OHLCV 5 minutos (~4M registros) | | `ohlcv_15m` | 03-ohlcv_15m.sql | Datos OHLCV 15 minutos (~1.3M registros) | | `ohlcv_5m_staging` | 04-staging.sql | Tabla staging para carga masiva | **Funciones:** aggregate_5m_to_15m, aggregate_all_15m **Datos cargados:** | Activo | Registros 5m | Registros 15m | Cobertura | |--------|-------------|---------------|-----------| | XAUUSD | 706,397 | 234,961 | 2015-2025 | | EURUSD | 755,896 | 251,839 | 2015-2025 | | BTCUSD | 360,288 | 119,907 | 2015-2025 | | GBPUSD | 752,281 | 250,430 | 2015-2025 | | USDJPY | 746,464 | 248,520 | 2015-2025 | | AUDUSD | 760,289 | 253,380 | 2015-2025 | ### ml (9 tablas) | Tabla | Archivo | Descripción | |-------|---------|-------------| | `models` | 01-models.sql | Registro de modelos ML | | `model_versions` | 02-model_versions.sql | 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_predictions` | 06-llm_predictions.sql | **NUEVO** - Predicciones LLM | | `llm_prediction_outcomes` | 07-llm_prediction_outcomes.sql | **NUEVO** - Resultados LLM | | `llm_decisions` | 08-llm_decisions.sql | **NUEVO** - Decisiones LLM | | `risk_events` | 09-risk_events.sql | **NUEVO** - Eventos de riesgo | **Funciones:** calculate_prediction_accuracy ### 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 | Perfil gamificación | | `user_activity_log` | 13-user_activity_log.sql | Log de actividad | | `course_reviews` | 14-course_reviews.sql | 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 (10 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 | Señales generadas (interfaz ML) | | `trading_metrics` | 09-trading_metrics.sql | Métricas de rendimiento | | `paper_balances` | 10-paper_balances.sql | Balances paper trading | **Funciones:** calculate_position_pnl, update_bot_stats, initialize_paper_balance, create_default_watchlist ### investment (7 tablas) | Tabla | Archivo | Descripción | |-------|---------|-------------| | `products` | 01-products.sql | Productos PAMM | | `risk_questionnaire` | 02-risk_questionnaire.sql | Cuestionario de riesgo | | `accounts` | 03-accounts.sql | Cuentas de inversión | | `distributions` | 04-distributions.sql | Distribución de ganancias (80/20) | | `transactions` | 05-transactions.sql | Movimientos de cuenta | | `withdrawal_requests` | 06-withdrawal_requests.sql | Solicitudes de retiro | | `daily_performance` | 07-daily_performance.sql | Rendimiento diario | ### financial (10 tablas) | Tabla | Archivo | Descripción | |-------|---------|-------------| | `wallets` | 01-wallets.sql | Wallets del sistema (unificado) | | `wallet_transactions` | 02-wallet_transactions.sql | Transacciones de wallet | | `subscriptions` | 03-subscriptions.sql | Suscripciones activas | | `invoices` | 04-invoices.sql | Facturas | | `payments` | 05-payments.sql | Pagos procesados (Stripe) | | `wallet_audit_log` | 06-wallet_audit_log.sql | Auditoría de wallets | | `currency_exchange_rates` | 07-currency_exchange_rates.sql | Tipos de cambio USD/MXN | | `wallet_limits` | 08-wallet_limits.sql | Límites de operación | | `customers` | 09-customers.sql | Clientes Stripe | | `payment_methods` | 10-payment_methods.sql | Métodos de pago | **Funciones:** update_wallet_balance, process_transaction, triggers, views ### llm (4 tablas + extension) | Tabla | Archivo | Descripción | |-------|---------|-------------| | *(extension)* | 00-extensions.sql | pgvector extension para embeddings | | `conversations` | 01-conversations.sql | Conversaciones con LLM | | `messages` | 02-messages.sql | Mensajes de conversación | | `user_preferences` | 03-user_preferences.sql | Preferencias de usuario | | `user_memory` | 04-user_memory.sql | Memoria persistente | > **Nota:** La tabla `embeddings` (05-embeddings.sql) requiere pgvector. Sin pgvector instalado, esta tabla no se crea. ### 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 | --- ## Orden de Ejecución (create-database.sh) ```bash 1. CREATE DATABASE trading_platform 2. Extensions (uuid-ossp, pgcrypto, pg_trgm, btree_gin) - pgvector opcional (requiere instalación) 3. Schemas: - auth, education, financial, trading, investment, - ml, llm, audit, market_data 4. DDL por schema en orden: - 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) - market_data (sin dependencias) 5. Seeds (prod o dev) 6. Validación ``` --- ## 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 # Migrar datos de MySQL (6 activos, 10 años) ./scripts/migrate_6_assets.sh ``` --- ## Scripts Disponibles | Script | Descripción | |--------|-------------| | `create-database.sh` | Crea BD con DDL y seeds | | `drop-and-recreate-database.sh` | Drop + create (desarrollo) | | `migrate_6_assets.sh` | **NUEVO** - Migra OHLCV desde MySQL | | `migrate_all_tickers.sh` | Migra todos los tickers (17+) | | `validate-ddl.sh` | Valida sintaxis de DDL | --- ## Notas Importantes - **TIMESTAMPTZ**: Todas las columnas de fecha usan timezone - **gen_random_uuid()**: Para generación de UUIDs - **Locale fallback**: Script maneja locales faltantes (WSL2) - **pgvector opcional**: llm.embeddings requiere pgvector instalado - **Datos de mercado**: 10 años de datos OHLCV (2015-2025) --- ## Changelog | Fecha | Versión | Cambios | |-------|---------|---------| | 2026-01-07 | 2.0.0 | market_data schema, 6 activos, tablas ML extendidas | | 2025-12-06 | 1.0.0 | Creación inicial | --- ## Referencias - [DIRECTIVA-POLITICA-CARGA-LIMPIA.md](../DIRECTIVA-POLITICA-CARGA-LIMPIA.md) - [VALIDACION-ALINEACION-ML-2026-01-07.md](../../docs/99-analisis/VALIDACION-ALINEACION-ML-2026-01-07.md) - [ET-ML-004-api.md](../../docs/02-definicion-modulos/OQI-006-ml-signals/especificaciones/ET-ML-004-api.md) --- *Última actualización: 2026-01-07* *Generado por: Claude-Orquestador*