-- dolphin_violet DDL — consolidated from the LIVE dolphin_pink schema
-- (post-ALTER: includes maras_tp + provenance columns). Generated 2026-06-12.
-- Apply via apply_violet_ddl.py (one statement per HTTP POST).

CREATE TABLE IF NOT EXISTS dolphin_violet.trade_events
(
    `ts` DateTime64(6, 'UTC'),
    `trade_id` String DEFAULT '',
    `date` Date,
    `strategy` LowCardinality(String),
    `asset` LowCardinality(String),
    `side` LowCardinality(String),
    `entry_price` Float64,
    `exit_price` Float64 DEFAULT 0,
    `quantity` Float64,
    `pnl` Float64 DEFAULT 0,
    `pnl_pct` Float32 DEFAULT 0,
    `exit_reason` LowCardinality(String) DEFAULT '',
    `vel_div_entry` Float32,
    `boost_at_entry` Float32,
    `beta_at_entry` Float32,
    `posture` LowCardinality(String),
    `leverage` Float32,
    `conviction_multiplier` Float32 DEFAULT 0,
    `exchange_leverage` UInt8 DEFAULT 0,
    `exchange_leverage_mode` LowCardinality(String) DEFAULT '',
    `leverage_mapping_rule` LowCardinality(String) DEFAULT '',
    `account_capital` Float64 DEFAULT 0,
    `portfolio_capital` Float64 DEFAULT 0,
    `current_open_notional` Float64 DEFAULT 0,
    `remaining_notional_capacity` Float64 DEFAULT 0,
    `max_account_leverage` Float32 DEFAULT 0,
    `margin_required` Float64 DEFAULT 0,
    `ledger_authority` LowCardinality(String) DEFAULT '',
    `regime_signal` Int8 DEFAULT 0,
    `capital_before` Float64 DEFAULT 0,
    `capital_after` Float64 DEFAULT 0,
    `peak_capital` Float64 DEFAULT 0,
    `drawdown_at_entry` Float32 DEFAULT 0,
    `open_positions_count` UInt8 DEFAULT 0,
    `scan_uuid` String DEFAULT '',
    `bars_held` UInt16 DEFAULT 0,
    `entry_payload_json` String DEFAULT '',
    `exit_payload_json` String DEFAULT '',
    `execution_payload_json` String DEFAULT '',
    `friction_payload_json` String DEFAULT '',
    `event_payload_json` String DEFAULT '',
    `runtime_namespace` LowCardinality(String) DEFAULT '',
    `strategy_namespace` LowCardinality(String) DEFAULT '',
    `event_namespace` LowCardinality(String) DEFAULT '',
    `actor_name` LowCardinality(String) DEFAULT '',
    `exec_venue` LowCardinality(String) DEFAULT '',
    `data_venue` LowCardinality(String) DEFAULT '',
    `market_state_bundle_json` String DEFAULT '',
    `tp_base_pct` Float32 DEFAULT 0,
    `tp_effective_pct` Float32 DEFAULT 0,
    `our_leverage` Float32 DEFAULT 0,
    `fee` Float64 DEFAULT 0,
    `fee_source` LowCardinality(String) DEFAULT '',
    `is_maker` UInt8 DEFAULT 0,
    `slippage_bps` Float32 DEFAULT 0,
    `mark_at_submit` Float64 DEFAULT 0,
    `exchange_ts` Int64 DEFAULT 0,
    `pnl_source` LowCardinality(String) DEFAULT ''
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(ts)
ORDER BY (ts, asset)
SETTINGS index_granularity = 8192;
