- DATABASE_INVENTORY: Added data_status section with 469K+ bars loaded - ML_INVENTORY: Documented MySQL deprecation and PostgreSQL migration - 6 tickers loaded with 365 days of 5-minute data from Polygon API Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1421 lines
44 KiB
YAML
1421 lines
44 KiB
YAML
# ============================================================================
|
|
# DATABASE_INVENTORY.yml - Trading Platform Trading Platform
|
|
# ============================================================================
|
|
# Proposito: Inventario consolidado de todos los objetos de base de datos
|
|
# Ultima actualizacion: 2026-01-25
|
|
# Version: 2.1.0
|
|
# ============================================================================
|
|
|
|
version: "2.1.0"
|
|
project: "Trading Platform"
|
|
database: "trading_platform"
|
|
engine: "PostgreSQL 16"
|
|
last_updated: "2026-01-25"
|
|
|
|
# ============================================================================
|
|
# DATA STATUS (2026-01-25)
|
|
# ============================================================================
|
|
data_status:
|
|
polygon_api_key: "Configured in apps/data-service/.env"
|
|
data_source: "Polygon.io"
|
|
last_sync: "2026-01-25"
|
|
tickers_loaded:
|
|
- symbol: XAUUSD
|
|
bars: 70071
|
|
range: "2025-01-26 to 2026-01-23"
|
|
- symbol: EURUSD
|
|
bars: 73783
|
|
range: "2025-01-26 to 2026-01-23"
|
|
- symbol: BTCUSD
|
|
bars: 105107
|
|
range: "2025-01-24 to 2026-01-24"
|
|
- symbol: GBPUSD
|
|
bars: 73493
|
|
range: "2025-01-26 to 2026-01-23"
|
|
- symbol: USDJPY
|
|
bars: 73587
|
|
range: "2025-01-26 to 2026-01-23"
|
|
- symbol: AUDUSD
|
|
bars: 73176
|
|
range: "2025-01-26 to 2026-01-23"
|
|
total_bars: 469217
|
|
|
|
# ============================================================================
|
|
# RESUMEN EJECUTIVO
|
|
# ============================================================================
|
|
summary:
|
|
total_schemas: 13 # +1 auth
|
|
total_tables: 95 # +4 (notifications, user_push_tokens, distribution_history, distribution_runs)
|
|
total_enums: 31
|
|
total_indexes: 157 # +8 nuevos indices
|
|
total_triggers: 37
|
|
total_functions: 9
|
|
total_views: 6
|
|
|
|
# ============================================================================
|
|
# EXTENSIONES
|
|
# ============================================================================
|
|
extensions:
|
|
- name: uuid-ossp
|
|
purpose: "Generacion de UUIDs"
|
|
- name: pgcrypto
|
|
purpose: "Funciones criptograficas"
|
|
- name: pg_trgm
|
|
purpose: "Busqueda de texto similar"
|
|
|
|
# ============================================================================
|
|
# SCHEMAS
|
|
# ============================================================================
|
|
schemas:
|
|
# --------------------------------------------------------------------------
|
|
# PUBLIC - Usuarios y configuracion global
|
|
# --------------------------------------------------------------------------
|
|
- name: public
|
|
description: "Usuarios, perfiles, configuracion global y autenticacion"
|
|
epic: OQI-001
|
|
tables:
|
|
- name: users
|
|
description: "Usuarios base del sistema"
|
|
columns: 22
|
|
indexes: 3
|
|
rf: RF-AUTH-001
|
|
key_columns:
|
|
- id (UUID, PK)
|
|
- email (VARCHAR, UNIQUE)
|
|
- role (user_role_enum)
|
|
- status (status_enum)
|
|
- totp_enabled (BOOLEAN)
|
|
|
|
- name: profiles
|
|
description: "Informacion extendida del usuario"
|
|
columns: 12
|
|
indexes: 1
|
|
rf: RF-AUTH-001
|
|
key_columns:
|
|
- user_id (UUID, FK -> users)
|
|
- first_name, last_name
|
|
- country_code, timezone
|
|
|
|
- name: user_settings
|
|
description: "Configuraciones y preferencias"
|
|
columns: 14
|
|
indexes: 0
|
|
rf: RF-AUTH-001
|
|
|
|
- name: kyc_verifications
|
|
description: "Verificacion de identidad (KYC)"
|
|
columns: 17
|
|
indexes: 2
|
|
rf: RF-INV-002
|
|
|
|
- name: risk_profiles
|
|
description: "Perfil de riesgo del usuario"
|
|
columns: 10
|
|
indexes: 1
|
|
rf: RF-PFM-001
|
|
|
|
- name: sessions
|
|
description: "Sesiones activas de usuarios"
|
|
columns: 9
|
|
indexes: 3
|
|
rf: RF-AUTH-004
|
|
|
|
- name: notifications
|
|
description: "Notificaciones del sistema"
|
|
columns: 11
|
|
indexes: 3
|
|
rf: RF-AUTH-001
|
|
|
|
- name: admin_roles
|
|
description: "Roles administrativos especificos"
|
|
columns: 12
|
|
indexes: 2
|
|
rf: RF-ADM-001
|
|
|
|
- name: platform_analytics
|
|
description: "Metricas agregadas de la plataforma"
|
|
columns: 16
|
|
indexes: 1
|
|
rf: RF-ADM-002
|
|
|
|
- name: api_keys
|
|
description: "API keys para acceso programatico"
|
|
columns: 12
|
|
indexes: 2
|
|
rf: RF-ADM-003
|
|
|
|
enums:
|
|
- name: status_enum
|
|
values: [active, inactive, pending, suspended, deleted]
|
|
|
|
- name: user_role_enum
|
|
values: [investor, trader_pro, student, admin, risk_officer, support]
|
|
|
|
- name: risk_profile_enum
|
|
values: [conservative, moderate, aggressive]
|
|
|
|
- name: trade_direction_enum
|
|
values: [long, short]
|
|
|
|
- name: order_status_enum
|
|
values: [pending, open, filled, cancelled, expired]
|
|
|
|
- name: transaction_type_enum
|
|
values: [deposit, withdrawal, subscription_payment, course_purchase, investment_deposit, investment_withdrawal, profit_distribution, fee, refund]
|
|
|
|
- name: kyc_status_enum
|
|
values: [pending, submitted, approved, rejected, expired]
|
|
|
|
- name: kyc_document_type
|
|
values: [passport, national_id, drivers_license, residence_permit]
|
|
|
|
- name: notification_type_enum
|
|
values: [system, trading, investment, education, payment, security, marketing]
|
|
|
|
functions:
|
|
- name: update_updated_at_column()
|
|
purpose: "Actualiza timestamp updated_at automaticamente"
|
|
used_by: "Todos los triggers de updated_at"
|
|
|
|
triggers:
|
|
- name: update_users_updated_at
|
|
table: users
|
|
- name: update_profiles_updated_at
|
|
table: profiles
|
|
- name: update_user_settings_updated_at
|
|
table: user_settings
|
|
- name: update_kyc_updated_at
|
|
table: kyc_verifications
|
|
- name: update_risk_profiles_updated_at
|
|
table: risk_profiles
|
|
|
|
# --------------------------------------------------------------------------
|
|
# AUTH - Autenticacion y notificaciones
|
|
# --------------------------------------------------------------------------
|
|
- name: auth
|
|
description: "Autenticacion, tokens de acceso, notificaciones y push tokens"
|
|
epic: OQI-001
|
|
tables:
|
|
- name: notifications
|
|
description: "Notificaciones del sistema para usuarios"
|
|
columns: 13
|
|
indexes: 4
|
|
rf: RF-AUTH-001
|
|
key_columns:
|
|
- id (UUID, PK)
|
|
- user_id (UUID, FK -> auth.users)
|
|
- type (VARCHAR) - alert_triggered, trade_executed, etc.
|
|
- priority (VARCHAR) - low, normal, high, urgent
|
|
- is_read (BOOLEAN)
|
|
created: "2026-01-25"
|
|
|
|
- name: user_push_tokens
|
|
description: "Tokens FCM/APNs para push notifications"
|
|
columns: 8
|
|
indexes: 2
|
|
rf: RF-AUTH-001
|
|
key_columns:
|
|
- id (UUID, PK)
|
|
- user_id (UUID, FK -> auth.users)
|
|
- token (TEXT, UNIQUE)
|
|
- platform (VARCHAR) - web, ios, android
|
|
- is_active (BOOLEAN)
|
|
created: "2026-01-25"
|
|
|
|
enums:
|
|
- name: notification_priority
|
|
values: [low, normal, high, urgent]
|
|
|
|
- name: notification_type
|
|
values: [alert_triggered, trade_executed, deposit_confirmed, withdrawal_completed, distribution_received, system_announcement, security_alert, account_update]
|
|
|
|
- name: push_platform
|
|
values: [web, ios, android]
|
|
|
|
# --------------------------------------------------------------------------
|
|
# EDUCATION - Cursos y contenido educativo
|
|
# --------------------------------------------------------------------------
|
|
- name: education
|
|
description: "Cursos, lecciones, inscripciones y contenido educativo"
|
|
epic: OQI-002
|
|
tables:
|
|
- name: categories
|
|
description: "Categorias de cursos"
|
|
columns: 8
|
|
indexes: 2
|
|
rf: RF-EDU-001
|
|
|
|
- name: courses
|
|
description: "Cursos de trading"
|
|
columns: 24
|
|
indexes: 5
|
|
rf: RF-EDU-001
|
|
|
|
- name: modules
|
|
description: "Modulos/secciones de un curso"
|
|
columns: 7
|
|
indexes: 1
|
|
rf: RF-EDU-002
|
|
|
|
- name: lessons
|
|
description: "Lecciones individuales"
|
|
columns: 16
|
|
indexes: 2
|
|
rf: RF-EDU-002
|
|
|
|
- name: quizzes
|
|
description: "Cuestionarios y evaluaciones"
|
|
columns: 11
|
|
indexes: 2
|
|
rf: RF-EDU-003
|
|
|
|
- name: quiz_questions
|
|
description: "Preguntas de cuestionarios"
|
|
columns: 9
|
|
indexes: 1
|
|
rf: RF-EDU-003
|
|
|
|
- name: enrollments
|
|
description: "Inscripciones de usuarios a cursos"
|
|
columns: 13
|
|
indexes: 3
|
|
rf: RF-EDU-004
|
|
|
|
- name: lesson_progress
|
|
description: "Progreso por leccion"
|
|
columns: 10
|
|
indexes: 3
|
|
rf: RF-EDU-004
|
|
|
|
- name: quiz_attempts
|
|
description: "Intentos de cuestionarios"
|
|
columns: 10
|
|
indexes: 2
|
|
rf: RF-EDU-003
|
|
|
|
- name: course_reviews
|
|
description: "Resenas de cursos"
|
|
columns: 8
|
|
indexes: 1
|
|
rf: RF-EDU-005
|
|
|
|
- name: ai_content_generations
|
|
description: "Registro de contenido generado por IA"
|
|
columns: 10
|
|
indexes: 1
|
|
rf: RF-EDU-006
|
|
|
|
- name: certificates
|
|
description: "Certificados de finalizacion de cursos"
|
|
columns: 13
|
|
indexes: 3
|
|
rf: RF-EDU-007
|
|
|
|
enums:
|
|
- name: course_level_enum
|
|
values: [beginner, intermediate, advanced, expert]
|
|
|
|
- name: course_status_enum
|
|
values: [draft, published, archived]
|
|
|
|
- name: content_type_enum
|
|
values: [video, text, quiz, exercise, resource]
|
|
|
|
- name: enrollment_status_enum
|
|
values: [active, completed, expired, cancelled]
|
|
|
|
- name: question_type_enum
|
|
values: [multiple_choice, true_false, multiple_answer, short_answer]
|
|
|
|
triggers:
|
|
- name: update_courses_updated_at
|
|
table: courses
|
|
- name: update_modules_updated_at
|
|
table: modules
|
|
- name: update_lessons_updated_at
|
|
table: lessons
|
|
- name: update_enrollments_updated_at
|
|
table: enrollments
|
|
- name: update_lesson_progress_updated_at
|
|
table: lesson_progress
|
|
- name: set_certificate_number
|
|
table: certificates
|
|
|
|
functions:
|
|
- name: generate_certificate_number()
|
|
purpose: "Genera numero de certificado OQ-CERT-XXXXXX"
|
|
|
|
# --------------------------------------------------------------------------
|
|
# TRADING - Bots, senales y operaciones
|
|
# --------------------------------------------------------------------------
|
|
- name: trading
|
|
description: "Bots, senales, estrategias y operaciones de trading"
|
|
epic: OQI-003
|
|
tables:
|
|
- name: symbols
|
|
description: "Instrumentos financieros disponibles"
|
|
columns: 16
|
|
indexes: 2
|
|
rf: RF-TRD-001
|
|
|
|
- name: strategies
|
|
description: "Estrategias de trading disponibles"
|
|
columns: 16
|
|
indexes: 1
|
|
rf: RF-TRD-002
|
|
|
|
- name: bots
|
|
description: "Agentes de trading (Atlas, Orion, Nova)"
|
|
columns: 25
|
|
indexes: 3
|
|
rf: RF-INV-005
|
|
|
|
- name: signals
|
|
description: "Senales de trading generadas"
|
|
columns: 27
|
|
indexes: 5
|
|
rf: RF-ML-004
|
|
|
|
- name: positions
|
|
description: "Posiciones de trading"
|
|
columns: 20
|
|
indexes: 5
|
|
rf: RF-TRD-004
|
|
|
|
- name: price_alerts
|
|
description: "Alertas de precio configuradas"
|
|
columns: 13
|
|
indexes: 3
|
|
rf: RF-TRD-006
|
|
|
|
- name: watchlists
|
|
description: "Listas de seguimiento"
|
|
columns: 5
|
|
indexes: 1
|
|
rf: RF-TRD-007
|
|
|
|
- name: watchlist_items
|
|
description: "Items en watchlists"
|
|
columns: 5
|
|
indexes: 1
|
|
rf: RF-TRD-007
|
|
|
|
- name: paper_trading_accounts
|
|
description: "Cuentas de paper trading"
|
|
columns: 12
|
|
indexes: 1
|
|
rf: RF-TRD-008
|
|
|
|
- name: paper_trading_positions
|
|
description: "Posiciones de paper trading"
|
|
columns: 15
|
|
indexes: 3
|
|
rf: RF-TRD-008
|
|
|
|
enums:
|
|
- name: bot_status_enum
|
|
values: [active, paused, stopped, error, maintenance]
|
|
|
|
- name: signal_status_enum
|
|
values: [pending, active, triggered, expired, cancelled]
|
|
|
|
- name: position_status_enum
|
|
values: [open, closed, pending]
|
|
|
|
- name: timeframe_enum
|
|
values: [1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w]
|
|
|
|
- name: amd_phase_enum
|
|
values: [accumulation, manipulation, distribution, unknown]
|
|
|
|
- name: volatility_regime_enum
|
|
values: [low, medium, high, extreme]
|
|
|
|
- name: alert_condition_enum
|
|
values: [above, below, crosses_above, crosses_below]
|
|
|
|
triggers:
|
|
- name: update_symbols_updated_at
|
|
table: symbols
|
|
- name: update_strategies_updated_at
|
|
table: strategies
|
|
- name: update_bots_updated_at
|
|
table: bots
|
|
- name: update_signals_updated_at
|
|
table: signals
|
|
- name: update_positions_updated_at
|
|
table: positions
|
|
|
|
# --------------------------------------------------------------------------
|
|
# INVESTMENT - Cuentas de inversion
|
|
# --------------------------------------------------------------------------
|
|
- name: investment
|
|
description: "Cuentas de inversion, productos y gestion de portafolios"
|
|
epic: OQI-004
|
|
tables:
|
|
- name: products
|
|
description: "Productos de inversion (Atlas, Orion, Nova)"
|
|
columns: 22
|
|
indexes: 3
|
|
rf: RF-INV-001
|
|
|
|
- name: accounts
|
|
description: "Cuentas de inversion de usuarios"
|
|
columns: 28
|
|
indexes: 4
|
|
rf: RF-INV-002
|
|
|
|
- name: account_transactions
|
|
description: "Movimientos en cuentas"
|
|
columns: 13
|
|
indexes: 3
|
|
rf: RF-INV-002
|
|
|
|
- name: performance_snapshots
|
|
description: "Snapshots periodicos de rendimiento"
|
|
columns: 15
|
|
indexes: 2
|
|
rf: RF-INV-006
|
|
|
|
- name: profit_distributions
|
|
description: "Distribucion de utilidades"
|
|
columns: 15
|
|
indexes: 3
|
|
rf: RF-INV-006
|
|
|
|
- name: deposit_requests
|
|
description: "Solicitudes de deposito"
|
|
columns: 14
|
|
indexes: 3
|
|
rf: RF-INV-003
|
|
|
|
- name: withdrawal_requests
|
|
description: "Solicitudes de retiro"
|
|
columns: 16
|
|
indexes: 3
|
|
rf: RF-INV-004
|
|
|
|
- name: bot_assignments
|
|
description: "Asignacion de bots a cuentas"
|
|
columns: 9
|
|
indexes: 3
|
|
rf: RF-INV-005
|
|
|
|
- name: distribution_history
|
|
description: "Historial de distribuciones diarias por cuenta"
|
|
columns: 10
|
|
indexes: 3
|
|
rf: RF-INV-006
|
|
key_columns:
|
|
- id (UUID, PK)
|
|
- account_id (UUID, FK -> investment.accounts)
|
|
- product_id (UUID, FK -> investment.products)
|
|
- distribution_date (DATE)
|
|
- gross_amount, fee_amount, net_amount (DECIMAL)
|
|
- balance_before, balance_after (DECIMAL)
|
|
constraints:
|
|
- UNIQUE (account_id, distribution_date)
|
|
- CHECK (balance_after = balance_before + net_amount)
|
|
created: "2026-01-25"
|
|
|
|
- name: distribution_runs
|
|
description: "Logs de ejecucion del job de distribucion"
|
|
columns: 13
|
|
indexes: 2
|
|
rf: RF-INV-006
|
|
key_columns:
|
|
- id (UUID, PK)
|
|
- run_date (DATE, UNIQUE)
|
|
- total_accounts, successful_count, failed_count (INTEGER)
|
|
- total_gross_amount, total_fee_amount, total_net_amount (DECIMAL)
|
|
- started_at, completed_at (TIMESTAMPTZ)
|
|
- duration_ms (INTEGER)
|
|
- error_details (JSONB)
|
|
constraints:
|
|
- CHECK (total_accounts = successful_count + failed_count)
|
|
created: "2026-01-25"
|
|
|
|
enums:
|
|
- name: product_type_enum
|
|
values: [fixed_return, variable_return, long_term_portfolio]
|
|
|
|
- name: account_status_enum
|
|
values: [pending_kyc, pending_deposit, active, paused, suspended, closed]
|
|
|
|
- name: fee_type_enum
|
|
values: [management, performance, deposit, withdrawal, subscription]
|
|
|
|
- name: account_transaction_type
|
|
values: [deposit, withdrawal, profit, loss, fee, adjustment, transfer_in, transfer_out]
|
|
|
|
functions:
|
|
- name: generate_account_number()
|
|
purpose: "Genera numero de cuenta OQ-INV-XXXXXX"
|
|
|
|
triggers:
|
|
- name: update_products_updated_at
|
|
table: products
|
|
- name: update_accounts_updated_at
|
|
table: accounts
|
|
- name: update_deposit_requests_updated_at
|
|
table: deposit_requests
|
|
- name: update_withdrawal_requests_updated_at
|
|
table: withdrawal_requests
|
|
- name: update_profit_distributions_updated_at
|
|
table: profit_distributions
|
|
- name: set_account_number
|
|
table: accounts
|
|
purpose: "Auto-genera numero de cuenta"
|
|
|
|
# --------------------------------------------------------------------------
|
|
# FINANCIAL - Pagos y suscripciones
|
|
# --------------------------------------------------------------------------
|
|
- name: financial
|
|
description: "Pagos, suscripciones, wallets y transacciones"
|
|
epic: OQI-005
|
|
tables:
|
|
- name: subscription_plans
|
|
description: "Planes de suscripcion (Free, Basic, Pro, Premium)"
|
|
columns: 19
|
|
indexes: 1
|
|
rf: RF-PAY-001
|
|
|
|
- name: stripe_customers
|
|
description: "Clientes de Stripe vinculados"
|
|
columns: 7
|
|
indexes: 2
|
|
rf: RF-PAY-002
|
|
|
|
- name: subscriptions
|
|
description: "Suscripciones activas"
|
|
columns: 17
|
|
indexes: 4
|
|
rf: RF-PAY-001
|
|
|
|
- name: wallets
|
|
description: "Wallets internos de usuarios"
|
|
columns: 10
|
|
indexes: 1
|
|
rf: RF-PAY-003
|
|
|
|
- name: wallet_transactions
|
|
description: "Transacciones en wallets"
|
|
columns: 14
|
|
indexes: 4
|
|
rf: RF-PAY-003
|
|
|
|
- name: payments
|
|
description: "Pagos procesados"
|
|
columns: 21
|
|
indexes: 5
|
|
rf: RF-PAY-002
|
|
|
|
- name: refunds
|
|
description: "Reembolsos procesados"
|
|
columns: 11
|
|
indexes: 2
|
|
rf: RF-PAY-004
|
|
|
|
- name: invoices
|
|
description: "Facturas generadas"
|
|
columns: 17
|
|
indexes: 3
|
|
rf: RF-PAY-005
|
|
|
|
- name: payout_requests
|
|
description: "Solicitudes de retiro a cuenta externa"
|
|
columns: 16
|
|
indexes: 3
|
|
rf: RF-PAY-004
|
|
|
|
- name: promo_codes
|
|
description: "Codigos promocionales"
|
|
columns: 16
|
|
indexes: 2
|
|
rf: RF-PAY-006
|
|
|
|
- name: promo_code_uses
|
|
description: "Uso de codigos promocionales"
|
|
columns: 5
|
|
indexes: 2
|
|
rf: RF-PAY-006
|
|
|
|
- name: auto_investment_schedules
|
|
description: "Programacion de inversiones automaticas recurrentes"
|
|
columns: 14
|
|
indexes: 2
|
|
rf: RF-PAY-007
|
|
|
|
enums:
|
|
- name: subscription_status_enum
|
|
values: [trialing, active, past_due, cancelled, unpaid, paused]
|
|
|
|
- name: payment_status_enum
|
|
values: [pending, processing, succeeded, failed, refunded, cancelled]
|
|
|
|
- name: payment_method_enum
|
|
values: [card, bank_transfer, paypal, crypto, wallet_balance]
|
|
|
|
triggers:
|
|
- name: update_plans_updated_at
|
|
table: subscription_plans
|
|
- name: update_stripe_customers_updated_at
|
|
table: stripe_customers
|
|
- name: update_subscriptions_updated_at
|
|
table: subscriptions
|
|
- name: update_wallets_updated_at
|
|
table: wallets
|
|
- name: update_payments_updated_at
|
|
table: payments
|
|
- name: update_invoices_updated_at
|
|
table: invoices
|
|
- name: update_payouts_updated_at
|
|
table: payout_requests
|
|
- name: update_auto_invest_updated_at
|
|
table: auto_investment_schedules
|
|
|
|
# --------------------------------------------------------------------------
|
|
# ML - Machine Learning
|
|
# --------------------------------------------------------------------------
|
|
- name: ml
|
|
description: "Modelos ML, predicciones, features y metricas"
|
|
epic: OQI-006
|
|
tables:
|
|
- name: models
|
|
description: "Registro de modelos ML"
|
|
columns: 22
|
|
indexes: 4
|
|
rf: RF-ML-001
|
|
|
|
- name: training_runs
|
|
description: "Ejecuciones de entrenamiento"
|
|
columns: 18
|
|
indexes: 2
|
|
rf: RF-ML-001
|
|
|
|
- name: model_metrics
|
|
description: "Metricas de rendimiento de modelos"
|
|
columns: 21
|
|
indexes: 2
|
|
rf: RF-ML-002
|
|
|
|
- name: predictions
|
|
description: "Predicciones generadas"
|
|
columns: 24
|
|
indexes: 4
|
|
rf: RF-ML-003
|
|
|
|
- name: prediction_accuracy_daily
|
|
description: "Precision de predicciones agregada por dia"
|
|
columns: 13
|
|
indexes: 2
|
|
rf: RF-ML-003
|
|
|
|
- name: feature_store
|
|
description: "Features pre-calculadas"
|
|
columns: 11
|
|
indexes: 2
|
|
rf: RF-ML-002
|
|
|
|
- name: model_drift_alerts
|
|
description: "Alertas de drift de modelo"
|
|
columns: 13
|
|
indexes: 2
|
|
rf: RF-ML-005
|
|
|
|
- name: ab_tests
|
|
description: "Tests A/B de modelos"
|
|
columns: 18
|
|
indexes: 1
|
|
rf: RF-ML-005
|
|
|
|
enums:
|
|
- name: model_type_enum
|
|
values: [range_predictor, tpsl_classifier, signal_generator, regime_classifier, amd_detector, volatility_model, ensemble]
|
|
|
|
- name: model_status_enum
|
|
values: [training, validating, ready, deployed, deprecated, failed]
|
|
|
|
functions:
|
|
- name: set_model_as_latest()
|
|
purpose: "Marca modelo como version latest"
|
|
|
|
triggers:
|
|
- name: update_models_updated_at
|
|
table: models
|
|
- name: update_ab_tests_updated_at
|
|
table: ab_tests
|
|
- name: ensure_single_latest_model
|
|
table: models
|
|
|
|
# --------------------------------------------------------------------------
|
|
# AUDIT - Auditoria y seguridad
|
|
# --------------------------------------------------------------------------
|
|
- name: audit
|
|
description: "Logs de auditoria, eventos del sistema y seguridad"
|
|
epic: OQI-001
|
|
tables:
|
|
- name: audit_logs
|
|
description: "Log general de acciones"
|
|
columns: 12
|
|
indexes: 5
|
|
rf: RF-AUTH-005
|
|
|
|
- name: security_events
|
|
description: "Eventos de seguridad"
|
|
columns: 14
|
|
indexes: 5
|
|
rf: RF-AUTH-005
|
|
|
|
- name: system_events
|
|
description: "Eventos del sistema"
|
|
columns: 11
|
|
indexes: 4
|
|
rf: RF-AUTH-005
|
|
|
|
- name: trading_audit
|
|
description: "Auditoria de operaciones de trading"
|
|
columns: 21
|
|
indexes: 7
|
|
rf: RF-TRD-005
|
|
|
|
- name: api_request_logs
|
|
description: "Logs de requests a la API"
|
|
columns: 13
|
|
indexes: 4
|
|
rf: RF-AUTH-005
|
|
|
|
- name: data_access_logs
|
|
description: "Log de acceso a datos sensibles"
|
|
columns: 9
|
|
indexes: 4
|
|
rf: RF-AUTH-005
|
|
|
|
- name: compliance_logs
|
|
description: "Logs de cumplimiento regulatorio"
|
|
columns: 14
|
|
indexes: 4
|
|
rf: RF-AUTH-005
|
|
|
|
enums:
|
|
- name: security_event_type
|
|
values: [login_success, login_failed, logout, password_changed, password_reset_requested, password_reset_completed, 2fa_enabled, 2fa_disabled, 2fa_failed, account_locked, account_unlocked, suspicious_activity, api_key_created, api_key_revoked, permission_denied, rate_limit_exceeded]
|
|
|
|
- name: security_severity
|
|
values: [info, warning, error, critical]
|
|
|
|
- name: system_event_type
|
|
values: [service_started, service_stopped, service_error, database_backup, database_restore, deployment, config_changed, scheduled_job_started, scheduled_job_completed, scheduled_job_failed, integration_connected, integration_disconnected, integration_error, alert_triggered, maintenance_started, maintenance_completed]
|
|
|
|
functions:
|
|
- name: log_changes()
|
|
purpose: "Funcion de auditoria automatica"
|
|
|
|
- name: cleanup_old_logs()
|
|
purpose: "Limpieza de logs antiguos"
|
|
|
|
views:
|
|
- name: admin_user_activity
|
|
purpose: "Vista de actividad reciente de usuarios"
|
|
|
|
- name: admin_security_alerts
|
|
purpose: "Vista de alertas de seguridad pendientes"
|
|
|
|
- name: admin_bot_trading_summary
|
|
purpose: "Resumen de trading por bot"
|
|
|
|
- name: v_admin_dashboard
|
|
purpose: "Dashboard administrativo general"
|
|
|
|
# --------------------------------------------------------------------------
|
|
# MARKET_DATA - Datos de mercado (migrados de TradingAgent)
|
|
# --------------------------------------------------------------------------
|
|
- name: market_data
|
|
description: "Datos OHLCV, tickers, indicadores tecnicos y predicciones ML"
|
|
epic: OQI-006
|
|
migration: "Migrado desde MySQL (TradingAgent) - 13M+ registros"
|
|
tables:
|
|
- name: tickers
|
|
description: "Instrumentos financieros disponibles"
|
|
columns: 10
|
|
indexes: 2
|
|
rf: RF-ML-001
|
|
key_columns:
|
|
- id (INTEGER, PK)
|
|
- symbol (VARCHAR, UNIQUE)
|
|
- asset_type (asset_type_enum)
|
|
- is_active (BOOLEAN)
|
|
records: 25
|
|
|
|
- name: ohlcv_5m
|
|
description: "Datos OHLCV en timeframe 5 minutos (particionado por año)"
|
|
columns: 8
|
|
indexes: 4
|
|
rf: RF-ML-002
|
|
key_columns:
|
|
- ticker_id (INTEGER, FK -> tickers)
|
|
- timestamp (TIMESTAMPTZ)
|
|
- open, high, low, close, volume
|
|
records: "13,000,000+"
|
|
partitioned_by: "year (2020-2026)"
|
|
|
|
- name: technical_indicators
|
|
description: "Indicadores tecnicos calculados"
|
|
columns: 22
|
|
indexes: 2
|
|
rf: RF-ML-002
|
|
key_columns:
|
|
- ticker_id (INTEGER, FK -> tickers)
|
|
- timestamp (TIMESTAMPTZ)
|
|
- sma_*, ema_*, rsi, macd_*, atr
|
|
records: "13,000,000+"
|
|
partitioned_by: "year (2020-2026)"
|
|
|
|
- name: ohlcv_5m_staging
|
|
description: "Tabla temporal para carga de datos"
|
|
columns: 8
|
|
indexes: 0
|
|
rf: RF-ML-002
|
|
note: "Usado por Data Service para carga incremental"
|
|
|
|
enums:
|
|
- name: asset_type_enum
|
|
values: [forex, crypto, index, commodity, stock]
|
|
|
|
triggers:
|
|
- name: update_tickers_updated_at
|
|
table: tickers
|
|
|
|
# --------------------------------------------------------------------------
|
|
# ML_PREDICTIONS - Predicciones de Machine Learning
|
|
# --------------------------------------------------------------------------
|
|
- name: ml_predictions
|
|
description: "Predicciones de rangos, señales de entrada y analisis de mercado"
|
|
epic: OQI-006
|
|
tables:
|
|
- name: range_predictions
|
|
description: "Predicciones de rango max/min para estrategia R:R"
|
|
columns: 18
|
|
indexes: 4
|
|
rf: RF-ML-003
|
|
key_columns:
|
|
- ticker_id (INTEGER, FK -> tickers)
|
|
- prediction_timestamp (TIMESTAMPTZ)
|
|
- predicted_high, predicted_low
|
|
- confidence_score
|
|
- rr_ratio
|
|
partitioned_by: "year (2020-2026)"
|
|
|
|
- name: entry_signals
|
|
description: "Señales de entrada con niveles TP/SL"
|
|
columns: 22
|
|
indexes: 4
|
|
rf: RF-ML-004
|
|
key_columns:
|
|
- ticker_id (INTEGER, FK -> tickers)
|
|
- signal_timestamp (TIMESTAMPTZ)
|
|
- entry_price, stop_loss, take_profit
|
|
- direction (trade_direction_enum)
|
|
- expected_spread (NULLABLE - nuevo)
|
|
- net_rr_ratio (NULLABLE - nuevo)
|
|
|
|
- name: market_analysis
|
|
description: "Analisis de mercado generado por ML"
|
|
columns: 14
|
|
indexes: 2
|
|
rf: RF-ML-005
|
|
key_columns:
|
|
- ticker_id (INTEGER, FK -> tickers)
|
|
- analysis_timestamp
|
|
- amd_phase, volatility_regime
|
|
|
|
triggers:
|
|
- name: update_range_predictions_updated_at
|
|
table: range_predictions
|
|
|
|
# --------------------------------------------------------------------------
|
|
# DATA_SOURCES - Proveedores de datos externos
|
|
# --------------------------------------------------------------------------
|
|
- name: data_sources
|
|
description: "Configuracion de APIs externas y sincronizacion de datos"
|
|
epic: OQI-006
|
|
integration: INT-DATA-001
|
|
tables:
|
|
- name: api_providers
|
|
description: "Proveedores de API registrados (Polygon, MetaAPI)"
|
|
columns: 14
|
|
indexes: 1
|
|
rf: RF-ML-002
|
|
key_columns:
|
|
- id (SERIAL, PK)
|
|
- name (VARCHAR, UNIQUE)
|
|
- api_type (api_provider_type)
|
|
- base_url, rate_limit_per_minute
|
|
- is_active (BOOLEAN)
|
|
|
|
- name: ticker_mapping
|
|
description: "Mapeo de simbolos internos a simbolos de proveedores"
|
|
columns: 9
|
|
indexes: 3
|
|
rf: RF-ML-002
|
|
key_columns:
|
|
- ticker_id (INTEGER, FK -> tickers)
|
|
- provider_id (INTEGER, FK -> api_providers)
|
|
- provider_symbol (VARCHAR)
|
|
- multiplier (DECIMAL)
|
|
|
|
- name: data_sync_status
|
|
description: "Estado de sincronizacion por ticker/proveedor"
|
|
columns: 11
|
|
indexes: 2
|
|
rf: RF-ML-002
|
|
key_columns:
|
|
- ticker_id (INTEGER, FK -> tickers)
|
|
- provider_id (INTEGER, FK -> api_providers)
|
|
- last_sync_at, next_sync_at
|
|
- sync_status (sync_status_enum)
|
|
- records_synced (INTEGER)
|
|
|
|
enums:
|
|
- name: api_provider_type
|
|
values: [polygon, massive, metaapi, mt4_direct, binance, interactive_brokers]
|
|
|
|
- name: sync_status_enum
|
|
values: [pending, running, completed, failed, paused]
|
|
|
|
triggers:
|
|
- name: update_api_providers_updated_at
|
|
table: api_providers
|
|
- name: update_data_sync_status_updated_at
|
|
table: data_sync_status
|
|
|
|
# --------------------------------------------------------------------------
|
|
# BROKER_INTEGRATION - Integracion con brokers (MT4/MT5)
|
|
# --------------------------------------------------------------------------
|
|
- name: broker_integration
|
|
description: "Cuentas de broker, precios, spreads y ejecucion de trades"
|
|
epic: OQI-004
|
|
integration: INT-DATA-001
|
|
tables:
|
|
- name: broker_accounts
|
|
description: "Cuentas de broker conectadas via MetaAPI"
|
|
columns: 16
|
|
indexes: 3
|
|
rf: RF-INV-002
|
|
key_columns:
|
|
- id (SERIAL, PK)
|
|
- user_id (UUID, FK -> users)
|
|
- broker_name (VARCHAR)
|
|
- account_number, account_type
|
|
- metaapi_account_id (VARCHAR)
|
|
- balance, equity, margin
|
|
- is_active (BOOLEAN)
|
|
|
|
- name: broker_prices
|
|
description: "Precios bid/ask en tiempo real del broker"
|
|
columns: 10
|
|
indexes: 2
|
|
rf: RF-TRD-001
|
|
key_columns:
|
|
- ticker_id (INTEGER, FK -> tickers)
|
|
- timestamp (TIMESTAMPTZ)
|
|
- bid, ask, spread
|
|
- account_id (INTEGER, FK -> broker_accounts)
|
|
|
|
- name: spread_statistics
|
|
description: "Estadisticas de spread por sesion de trading"
|
|
columns: 14
|
|
indexes: 3
|
|
rf: RF-TRD-001
|
|
key_columns:
|
|
- ticker_id (INTEGER, FK -> tickers)
|
|
- date (DATE)
|
|
- session (trading_session_enum)
|
|
- avg_spread, min_spread, max_spread
|
|
- sample_count (INTEGER)
|
|
|
|
- name: price_adjustment_model
|
|
description: "Modelo de ajuste de precios source vs broker"
|
|
columns: 12
|
|
indexes: 2
|
|
rf: RF-ML-002
|
|
key_columns:
|
|
- ticker_id (INTEGER, FK -> tickers)
|
|
- model_version (INTEGER)
|
|
- offset_bid, offset_ask
|
|
- volatility_factor
|
|
- trained_at (TIMESTAMPTZ)
|
|
|
|
- name: trade_execution
|
|
description: "Historial de trades ejecutados via broker"
|
|
columns: 24
|
|
indexes: 5
|
|
rf: RF-TRD-004
|
|
key_columns:
|
|
- id (SERIAL, PK)
|
|
- signal_id (INTEGER, FK -> entry_signals)
|
|
- broker_account_id (INTEGER, FK -> broker_accounts)
|
|
- order_type, direction
|
|
- entry_price, exit_price
|
|
- spread_at_entry, slippage
|
|
- pnl, pnl_pips
|
|
|
|
enums:
|
|
- name: trading_session_enum
|
|
values: [asian, london, newyork, overlap_london_ny, weekend]
|
|
|
|
- name: broker_account_type
|
|
values: [demo, live, paper]
|
|
|
|
- name: order_type_enum
|
|
values: [market, limit, stop, stop_limit]
|
|
|
|
functions:
|
|
- name: calculate_spread_adjusted_entry()
|
|
purpose: "Calcula entry price ajustado por spread esperado"
|
|
returns: "RECORD(entry, sl, tp, net_rr)"
|
|
|
|
- name: get_expected_spread()
|
|
purpose: "Obtiene spread esperado por ticker y sesion"
|
|
returns: "DECIMAL"
|
|
|
|
- name: adjust_price_to_broker()
|
|
purpose: "Ajusta precio de source a precio de broker"
|
|
returns: "RECORD(adjusted_bid, adjusted_ask)"
|
|
|
|
triggers:
|
|
- name: update_broker_accounts_updated_at
|
|
table: broker_accounts
|
|
- name: update_trade_execution_updated_at
|
|
table: trade_execution
|
|
|
|
# --------------------------------------------------------------------------
|
|
# LLM - LLM Agent (OQI-007)
|
|
# --------------------------------------------------------------------------
|
|
- name: llm
|
|
description: "Agente conversacional LLM para asistencia de trading"
|
|
epic: OQI-007
|
|
tables:
|
|
- name: conversations
|
|
description: "Historial de conversaciones con el agente"
|
|
columns: 11
|
|
indexes: 2
|
|
rf: RF-LLM-001
|
|
|
|
- name: conversation_messages
|
|
description: "Mensajes individuales en conversaciones"
|
|
columns: 11
|
|
indexes: 2
|
|
rf: RF-LLM-001
|
|
|
|
- name: llm_tools_usage
|
|
description: "Log de uso de herramientas/funciones por el LLM"
|
|
columns: 11
|
|
indexes: 2
|
|
rf: RF-LLM-002
|
|
|
|
- name: llm_proactive_notifications
|
|
description: "Notificaciones proactivas generadas por el agente"
|
|
columns: 13
|
|
indexes: 2
|
|
rf: RF-LLM-003
|
|
|
|
- name: llm_usage_limits
|
|
description: "Limites de uso por usuario segun plan"
|
|
columns: 11
|
|
indexes: 1
|
|
rf: RF-LLM-004
|
|
|
|
triggers:
|
|
- name: update_conversations_updated_at
|
|
table: conversations
|
|
- name: update_llm_limits_updated_at
|
|
table: llm_usage_limits
|
|
|
|
# --------------------------------------------------------------------------
|
|
# PORTFOLIO_MANAGEMENT - Gestion Avanzada de Portfolios (OQI-008)
|
|
# --------------------------------------------------------------------------
|
|
- name: portfolio_management
|
|
description: "Gestion avanzada de portfolios multi-cuenta y rebalanceo"
|
|
epic: OQI-008
|
|
tables:
|
|
- name: portfolios
|
|
description: "Portfolios multi-cuenta de usuarios"
|
|
columns: 21
|
|
indexes: 1
|
|
rf: RF-PFM-001
|
|
|
|
- name: portfolio_accounts
|
|
description: "Cuentas asignadas a portfolios"
|
|
columns: 9
|
|
indexes: 2
|
|
rf: RF-PFM-001
|
|
|
|
- name: rebalance_suggestions
|
|
description: "Sugerencias de rebalanceo automaticas"
|
|
columns: 12
|
|
indexes: 2
|
|
rf: RF-PFM-002
|
|
|
|
- name: investment_goals
|
|
description: "Metas de inversion de usuarios"
|
|
columns: 15
|
|
indexes: 3
|
|
rf: RF-PFM-003
|
|
|
|
- name: portfolio_snapshots
|
|
description: "Snapshots periodicos del portfolio completo"
|
|
columns: 14
|
|
indexes: 2
|
|
rf: RF-PFM-004
|
|
|
|
- name: monte_carlo_projections
|
|
description: "Proyecciones Monte Carlo de portfolios"
|
|
columns: 15
|
|
indexes: 1
|
|
rf: RF-PFM-005
|
|
|
|
triggers:
|
|
- name: update_portfolios_updated_at
|
|
table: portfolios
|
|
- name: update_portfolio_accounts_updated_at
|
|
table: portfolio_accounts
|
|
- name: update_rebalance_updated_at
|
|
table: rebalance_suggestions
|
|
- name: update_goals_updated_at
|
|
table: investment_goals
|
|
|
|
views:
|
|
- name: v_portfolio_summary
|
|
purpose: "Resumen de portfolios con todas las cuentas"
|
|
|
|
# ============================================================================
|
|
# RELACIONES ENTRE TABLAS (Claves Foraneas Principales)
|
|
# ============================================================================
|
|
relationships:
|
|
- from: public.profiles
|
|
to: public.users
|
|
type: "1:1"
|
|
|
|
- from: public.sessions
|
|
to: public.users
|
|
type: "N:1"
|
|
|
|
- from: education.courses
|
|
to: education.categories
|
|
type: "N:1"
|
|
|
|
- from: education.lessons
|
|
to: education.modules
|
|
type: "N:1"
|
|
|
|
- from: education.enrollments
|
|
to: public.users
|
|
type: "N:1"
|
|
|
|
- from: education.enrollments
|
|
to: education.courses
|
|
type: "N:1"
|
|
|
|
- from: trading.signals
|
|
to: trading.bots
|
|
type: "N:1"
|
|
|
|
- from: trading.positions
|
|
to: trading.signals
|
|
type: "N:1"
|
|
|
|
- from: investment.accounts
|
|
to: public.users
|
|
type: "N:1"
|
|
|
|
- from: investment.accounts
|
|
to: investment.products
|
|
type: "N:1"
|
|
|
|
- from: investment.accounts
|
|
to: trading.bots
|
|
type: "N:1"
|
|
|
|
- from: financial.subscriptions
|
|
to: public.users
|
|
type: "N:1"
|
|
|
|
- from: financial.subscriptions
|
|
to: financial.subscription_plans
|
|
type: "N:1"
|
|
|
|
- from: financial.wallets
|
|
to: public.users
|
|
type: "N:1"
|
|
|
|
- from: ml.predictions
|
|
to: ml.models
|
|
type: "N:1"
|
|
|
|
# Nuevas relaciones - Data Service (INT-DATA-001)
|
|
- from: data_sources.ticker_mapping
|
|
to: market_data.tickers
|
|
type: "N:1"
|
|
|
|
- from: data_sources.ticker_mapping
|
|
to: data_sources.api_providers
|
|
type: "N:1"
|
|
|
|
- from: data_sources.data_sync_status
|
|
to: market_data.tickers
|
|
type: "N:1"
|
|
|
|
- from: market_data.ohlcv_5m
|
|
to: market_data.tickers
|
|
type: "N:1"
|
|
|
|
- from: ml_predictions.range_predictions
|
|
to: market_data.tickers
|
|
type: "N:1"
|
|
|
|
- from: ml_predictions.entry_signals
|
|
to: market_data.tickers
|
|
type: "N:1"
|
|
|
|
- from: broker_integration.broker_accounts
|
|
to: public.users
|
|
type: "N:1"
|
|
|
|
- from: broker_integration.broker_prices
|
|
to: market_data.tickers
|
|
type: "N:1"
|
|
|
|
- from: broker_integration.spread_statistics
|
|
to: market_data.tickers
|
|
type: "N:1"
|
|
|
|
- from: broker_integration.trade_execution
|
|
to: ml_predictions.entry_signals
|
|
type: "N:1"
|
|
|
|
- from: broker_integration.trade_execution
|
|
to: broker_integration.broker_accounts
|
|
type: "N:1"
|
|
|
|
# ============================================================================
|
|
# MAPEO A EPICAS
|
|
# ============================================================================
|
|
epic_mapping:
|
|
OQI-001:
|
|
schemas: [public, audit]
|
|
tables: 14
|
|
description: "Autenticacion, usuarios y auditoria"
|
|
|
|
OQI-002:
|
|
schemas: [education]
|
|
tables: 11
|
|
description: "Modulo educativo completo"
|
|
|
|
OQI-003:
|
|
schemas: [trading]
|
|
tables: 10
|
|
description: "Trading, charts, paper trading"
|
|
|
|
OQI-004:
|
|
schemas: [investment]
|
|
tables: 8
|
|
description: "Cuentas de inversion y productos"
|
|
|
|
OQI-005:
|
|
schemas: [financial]
|
|
tables: 11
|
|
description: "Pagos, suscripciones, wallets"
|
|
|
|
OQI-006:
|
|
schemas: [ml, market_data, ml_predictions, data_sources]
|
|
tables: 17
|
|
description: "Machine Learning, datos de mercado y predicciones"
|
|
integrations: [INT-DATA-001]
|
|
|
|
OQI-007:
|
|
schemas: [llm]
|
|
tables: 5
|
|
description: "LLM Agent - Conversational AI for trading"
|
|
note: "Schema llm implementado en 003_complete_model.sql"
|
|
|
|
OQI-008:
|
|
schemas: [broker_integration, portfolio_management]
|
|
tables: 11
|
|
description: "Portfolio Manager - integracion con brokers y gestion avanzada de portfolios"
|
|
integrations: [INT-DATA-001]
|
|
|
|
# ============================================================================
|
|
# ARCHIVOS SQL
|
|
# ============================================================================
|
|
sql_files:
|
|
- path: apps/database/schemas/00_init_schemas.sql
|
|
purpose: "Creacion de schemas y extensiones base"
|
|
|
|
- path: apps/database/schemas/01_public_schema.sql
|
|
purpose: "Usuarios, perfiles, autenticacion"
|
|
|
|
- path: apps/database/schemas/01b_oauth_providers.sql
|
|
purpose: "Proveedores OAuth"
|
|
|
|
- path: apps/database/schemas/02_education_schema.sql
|
|
purpose: "Cursos, lecciones, inscripciones"
|
|
|
|
- path: apps/database/schemas/03_trading_schema.sql
|
|
purpose: "Bots, senales, estrategias"
|
|
|
|
- path: apps/database/schemas/04_investment_schema.sql
|
|
purpose: "Cuentas de inversion, productos"
|
|
|
|
- path: apps/database/schemas/05_financial_schema.sql
|
|
purpose: "Pagos, suscripciones, wallets"
|
|
|
|
- path: apps/database/schemas/06_ml_schema.sql
|
|
purpose: "Modelos ML, predicciones, features"
|
|
|
|
- path: apps/database/schemas/07_audit_schema.sql
|
|
purpose: "Logs de auditoria y seguridad"
|
|
|
|
- path: apps/database/migrations/001_mysql_to_postgres.sql
|
|
purpose: "Migracion de datos desde MySQL (TradingAgent)"
|
|
note: "13M+ registros, 18 tickers originales"
|
|
|
|
- path: apps/database/migrations/002_add_indexes_and_integrations.sql
|
|
purpose: "Indices de performance y schemas de integracion"
|
|
note: "Data Service - Polygon/MetaAPI"
|
|
|
|
- path: apps/database/migrations/003_complete_model.sql
|
|
purpose: "Completar modelo para todas las funcionalidades SaaS"
|
|
note: "LLM Agent, Portfolio Manager, Admin, Certificates, API Keys"
|
|
|
|
# ============================================================================
|
|
# INTEGRACIONES EXTERNAS
|
|
# ============================================================================
|
|
integrations:
|
|
INT-DATA-001:
|
|
name: "Data Service"
|
|
description: "Integracion con Polygon/Massive API y MetaTrader 4"
|
|
schemas_created: [data_sources, broker_integration]
|
|
tables_created: 8
|
|
functions_created: 3
|
|
documentation: "docs/90-transversal/integraciones/INT-DATA-001-data-service.md"
|
|
|
|
# ============================================================================
|
|
# NOTAS Y PENDIENTES
|
|
# ============================================================================
|
|
notes:
|
|
- "Schema 'llm' implementado completamente en 003_complete_model.sql"
|
|
- "Schema 'portfolio_management' implementado para gestion avanzada"
|
|
- "Particionamiento activo en market_data.ohlcv_5m y ml_predictions.* por año"
|
|
- "RLS policies pendientes de definir"
|
|
- "Data Service requiere configuracion de API keys (Polygon, MetaAPI)"
|
|
- "Modelo de ajuste de precios requiere entrenamiento inicial"
|
|
- "Certificados educativos listos para emision automatica"
|
|
- "Sistema de API keys implementado para acceso programatico"
|
|
- "Portfolio Manager soporta rebalanceo automatico y proyecciones Monte Carlo"
|
|
- "LLM Agent con soporte completo para conversaciones y herramientas"
|
|
|
|
# ============================================================================
|
|
# FIN DEL INVENTARIO
|
|
# ============================================================================
|