trading-platform-database-v2/ddl/schemas/audit/tables/04-trading_audit.sql
rckrdmrd 45e77e9a9c feat: Initial commit - Database schemas and scripts
DDL schemas for Trading Platform:
- User management
- Authentication
- Payments
- Education
- ML predictions
- Trading data

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 04:30:23 -06:00

58 lines
1.9 KiB
SQL

-- ============================================================================
-- AUDIT SCHEMA - Tabla: trading_audit
-- ============================================================================
-- Auditoría específica de operaciones de trading
-- ============================================================================
CREATE TABLE IF NOT EXISTS audit.trading_audit (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- Actor
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
bot_id UUID,
-- Acción
action VARCHAR(50) NOT NULL,
action_status audit.event_status NOT NULL,
-- Objeto de la acción
order_id UUID,
position_id UUID,
symbol VARCHAR(20) NOT NULL,
-- Detalles de la operación
side VARCHAR(4) NOT NULL, -- 'buy' o 'sell'
order_type VARCHAR(20),
quantity DECIMAL(20, 8) NOT NULL,
price DECIMAL(20, 8),
executed_price DECIMAL(20, 8),
-- Resultado
pnl DECIMAL(20, 8),
fees DECIMAL(20, 8),
-- Contexto
strategy_id UUID,
signal_id UUID,
is_paper_trading BOOLEAN DEFAULT FALSE,
-- Metadata
execution_time_ms INTEGER,
broker_response JSONB,
metadata JSONB DEFAULT '{}',
-- Timestamps
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- Índices
CREATE INDEX idx_trading_audit_user ON audit.trading_audit(user_id);
CREATE INDEX idx_trading_audit_bot ON audit.trading_audit(bot_id) WHERE bot_id IS NOT NULL;
CREATE INDEX idx_trading_audit_symbol ON audit.trading_audit(symbol);
CREATE INDEX idx_trading_audit_action ON audit.trading_audit(action);
CREATE INDEX idx_trading_audit_created ON audit.trading_audit(created_at DESC);
CREATE INDEX idx_trading_audit_order ON audit.trading_audit(order_id) WHERE order_id IS NOT NULL;
CREATE INDEX idx_trading_audit_position ON audit.trading_audit(position_id) WHERE position_id IS NOT NULL;
COMMENT ON TABLE audit.trading_audit IS 'Auditoría detallada de todas las operaciones de trading';