{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://github.com/fallblu/trading-engine/contracts/v16/scenario.schema.json",
  "title": "Trading Engine v16 replay scenario",
  "description": "Strict deterministic scenario contract with explicit venue-local session policies resolved to absolute instants outside the reducer.",
  "type": "object",
  "additionalProperties": false,
  "required": ["contract_version", "metadata", "run_id", "base_currency", "initial_portfolio", "instruments", "venue_calendars", "risk", "execution", "financing", "settlement", "max_internal_events", "schedule", "slices"],
  "properties": {
    "contract_version": { "const": "16" },
    "metadata": { "type": "object" },
    "run_id": { "$ref": "#/$defs/identifier" },
    "base_currency": { "$ref": "#/$defs/identifier" },
    "initial_portfolio": { "$ref": "#/$defs/initialPortfolio" },
    "instruments": {
      "type": "array",
      "minItems": 1,
      "maxItems": 4096,
      "items": { "$ref": "#/$defs/instrument" }
    },
    "venue_calendars": {
      "type": "array",
      "minItems": 1,
      "items": { "$ref": "#/$defs/venueCalendar" }
    },
    "risk": { "$ref": "#/$defs/risk" },
    "execution": { "$ref": "#/$defs/execution" },
    "financing": { "$ref": "#/$defs/financing" },
    "settlement": { "$ref": "#/$defs/settlement" },
    "max_internal_events": { "type": "integer", "minimum": 1, "maximum": 100000 },
    "schedule": { "type": "array", "items": { "$ref": "#/$defs/scheduleItem" } },
    "slices": {
      "description": "Slices are ordered and non-overlapping: each start_at is at or after the prior end_at. Equal boundaries are valid. This cross-item rule is enforced semantically.",
      "type": "array",
      "items": { "$ref": "#/$defs/marketSlice" }
    }
  },
  "$defs": {
    "settlement": {
      "type": "object",
      "additionalProperties": false,
      "required": ["cash_buying_power", "position_availability", "calendars", "rules"],
      "properties": {
        "cash_buying_power": { "enum": ["total_cash", "settled_cash"] },
        "position_availability": { "enum": ["total_positions", "settled_positions"] },
        "calendars": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/settlementCalendar" } },
        "rules": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/settlementRule" } }
      }
    },
    "settlementCalendar": {
      "type": "object",
      "additionalProperties": false,
      "required": ["calendar_id", "version", "business_dates"],
      "properties": {
        "calendar_id": { "$ref": "#/$defs/identifier" },
        "version": { "const": "1" },
        "business_dates": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "format": "date", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" } }
      }
    },
    "settlementRule": {
      "type": "object",
      "additionalProperties": false,
      "required": ["instrument_id", "calendar_id", "lag_business_days"],
      "properties": {
        "instrument_id": { "$ref": "#/$defs/identifier" },
        "calendar_id": { "$ref": "#/$defs/identifier" },
        "lag_business_days": { "type": "integer", "minimum": 0, "maximum": 30 }
      }
    },
    "settlementFailure": {
      "type": "object",
      "additionalProperties": false,
      "required": ["instruction_id", "reason"],
      "properties": {
        "instruction_id": { "$ref": "#/$defs/identifier" },
        "reason": { "type": "string", "minLength": 1, "pattern": "^\\S(?:.*\\S)?$" }
      }
    },
    "financing": {
      "type": "object",
      "additionalProperties": false,
      "required": ["day_count", "compounding", "borrow_missing_data", "cash_missing_data", "locate_policy", "recall_policy"],
      "properties": {
        "day_count": { "enum": ["actual_365", "actual_360"] },
        "compounding": { "enum": ["simple", "daily"] },
        "borrow_missing_data": { "enum": ["reject", "zero"] },
        "cash_missing_data": { "enum": ["reject", "zero"] },
        "locate_policy": { "enum": ["reject_order", "clip_fill"] },
        "recall_policy": { "enum": ["reject_new_shorts", "close_out"] }
      }
    },
    "borrowObservation": {
      "type": "object",
      "additionalProperties": false,
      "required": ["instrument_id", "effective_at", "available_quantity", "annual_rate_bps", "recalled"],
      "properties": {
        "instrument_id": { "$ref": "#/$defs/identifier" },
        "effective_at": { "$ref": "#/$defs/timestamp" },
        "available_quantity": { "$ref": "#/$defs/unsignedDecimal" },
        "annual_rate_bps": { "type": "integer", "minimum": -1000000, "maximum": 1000000 },
        "recalled": { "type": "boolean" }
      }
    },
    "cashRateObservation": {
      "type": "object",
      "additionalProperties": false,
      "required": ["currency", "effective_at", "credit_rate_bps", "debit_rate_bps"],
      "properties": {
        "currency": { "$ref": "#/$defs/identifier" },
        "effective_at": { "$ref": "#/$defs/timestamp" },
        "credit_rate_bps": { "type": "integer", "minimum": -1000000, "maximum": 1000000 },
        "debit_rate_bps": { "type": "integer", "minimum": -1000000, "maximum": 1000000 }
      }
    },
    "identifier": {
      "type": "string",
      "minLength": 1,
      "pattern": "^[^\\s\\u0000-\\u001f\\u007f]+$"
    },
    "signedDecimal": {
      "type": "string",
      "pattern": "^(?:0|-?(?:0[.][0-9]{0,5}[1-9]|[1-9][0-9]*(?:[.][0-9]{0,5}[1-9])?))$"
    },
    "unsignedDecimal": {
      "type": "string",
      "pattern": "^(?:0|0[.][0-9]{0,5}[1-9]|[1-9][0-9]*(?:[.][0-9]{0,5}[1-9])?)$"
    },
    "positiveDecimal": {
      "type": "string",
      "pattern": "^(?:0[.][0-9]{0,5}[1-9]|[1-9][0-9]*(?:[.][0-9]{0,5}[1-9])?)$"
    },
    "sequence": { "type": "string", "pattern": "^[1-9][0-9]*$" },
    "timestamp": {
      "type": "string",
      "format": "date-time",
      "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt][0-9]{2}:[0-9]{2}:[0-5][0-9](?:[.][0-9]{1,6})?(?:[zZ]|[+-][0-9]{2}:[0-9]{2})$"
    },
    "cashBalance": {
      "type": "object",
      "additionalProperties": false,
      "required": ["currency", "amount"],
      "properties": {
        "currency": { "$ref": "#/$defs/identifier" },
        "amount": { "$ref": "#/$defs/signedDecimal" }
      }
    },
    "initialPortfolio": {
      "type": "object",
      "additionalProperties": false,
      "required": ["cash", "positions", "marks", "fx_rates"],
      "properties": {
        "cash": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/cashBalance" } },
        "positions": { "type": "array", "items": { "$ref": "#/$defs/initialPosition" } },
        "marks": { "type": "array", "items": { "$ref": "#/$defs/initialMark" } },
        "fx_rates": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/fxRate" } }
      }
    },
    "initialPosition": {
      "type": "object",
      "additionalProperties": false,
      "required": ["instrument_id", "quantity", "cost_basis", "realized_pnl", "dividend_pnl", "execution_fees", "borrow_fees"],
      "properties": {
        "instrument_id": { "$ref": "#/$defs/identifier" },
        "quantity": { "$ref": "#/$defs/signedDecimal" },
        "cost_basis": { "$ref": "#/$defs/signedDecimal" },
        "realized_pnl": { "$ref": "#/$defs/signedDecimal" },
        "dividend_pnl": { "$ref": "#/$defs/signedDecimal" },
        "execution_fees": { "$ref": "#/$defs/unsignedDecimal" },
        "borrow_fees": { "$ref": "#/$defs/unsignedDecimal" }
      }
    },
    "initialMark": {
      "type": "object",
      "additionalProperties": false,
      "required": ["instrument_id", "price"],
      "properties": {
        "instrument_id": { "$ref": "#/$defs/identifier" },
        "price": { "$ref": "#/$defs/positiveDecimal" }
      }
    },
    "instrument": {
      "type": "object",
      "additionalProperties": false,
      "required": ["instrument_id", "symbol", "quote_currency", "tick_size", "lot_size"],
      "properties": {
        "instrument_id": { "$ref": "#/$defs/identifier" },
        "symbol": { "$ref": "#/$defs/identifier" },
        "quote_currency": { "$ref": "#/$defs/identifier" },
        "tick_size": { "$ref": "#/$defs/positiveDecimal" },
        "lot_size": { "$ref": "#/$defs/positiveDecimal" }
      }
    },
    "venueCalendar": {
      "type": "object",
      "additionalProperties": false,
      "required": ["calendar_id", "calendar_version", "venue_id", "instrument_ids", "sessions"],
      "properties": {
        "calendar_id": { "$ref": "#/$defs/identifier" },
        "calendar_version": { "const": "1" },
        "venue_id": { "$ref": "#/$defs/identifier" },
        "instrument_ids": {
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": { "$ref": "#/$defs/identifier" }
        },
        "sessions": {
          "type": "array",
          "minItems": 1,
          "items": { "$ref": "#/$defs/venueSession" }
        }
      }
    },
    "venueSession": {
      "oneOf": [
        { "$ref": "#/$defs/openVenueSession" },
        { "$ref": "#/$defs/holidayVenueSession" }
      ]
    },
    "openVenueSession": {
      "type": "object",
      "additionalProperties": false,
      "required": ["session_date", "policy", "phases"],
      "properties": {
        "session_date": { "type": "string", "format": "date", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" },
        "policy": { "enum": ["regular", "early_close"] },
        "phases": {
          "type": "array",
          "minItems": 1,
          "maxItems": 5,
          "items": { "$ref": "#/$defs/venuePhase" }
        }
      }
    },
    "holidayVenueSession": {
      "type": "object",
      "additionalProperties": false,
      "required": ["session_date", "policy", "phases"],
      "properties": {
        "session_date": { "type": "string", "format": "date", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" },
        "policy": { "const": "holiday" },
        "phases": { "type": "array", "maxItems": 0 }
      }
    },
    "venuePhase": {
      "type": "object",
      "additionalProperties": false,
      "required": ["phase", "opens_at", "closes_at"],
      "properties": {
        "phase": { "enum": ["premarket", "opening_auction", "regular", "closing_auction", "postmarket"] },
        "opens_at": { "$ref": "#/$defs/timestamp" },
        "closes_at": { "$ref": "#/$defs/timestamp" }
      }
    },
    "risk": {
      "type": "object",
      "additionalProperties": false,
      "required": ["max_gross_exposure", "max_leverage", "short_borrow_bps", "instrument_policies", "groups"],
      "properties": {
        "max_gross_exposure": { "$ref": "#/$defs/positiveDecimal" },
        "max_leverage": { "$ref": "#/$defs/positiveDecimal" },
        "short_borrow_bps": { "type": "integer", "minimum": 0, "maximum": 10000 },
        "instrument_policies": {
          "type": "array",
          "minItems": 1,
          "items": { "$ref": "#/$defs/instrumentRiskPolicy" }
        },
        "groups": {
          "type": "array",
          "items": { "$ref": "#/$defs/riskGroup" }
        }
      }
    },
    "instrumentRiskPolicy": {
      "type": "object",
      "additionalProperties": false,
      "required": ["instrument_id", "max_order_quantity", "max_long_position", "max_short_position", "max_notional_exposure", "initial_margin_bps", "maintenance_margin_bps", "shorting_allowed"],
      "properties": {
        "instrument_id": { "$ref": "#/$defs/identifier" },
        "max_order_quantity": { "$ref": "#/$defs/positiveDecimal" },
        "max_long_position": { "$ref": "#/$defs/positiveDecimal" },
        "max_short_position": { "$ref": "#/$defs/positiveDecimal" },
        "max_notional_exposure": { "$ref": "#/$defs/positiveDecimal" },
        "initial_margin_bps": { "type": "integer", "minimum": 1, "maximum": 10000 },
        "maintenance_margin_bps": { "type": "integer", "minimum": 1, "maximum": 10000 },
        "shorting_allowed": { "type": "boolean" }
      }
    },
    "nullablePositiveDecimal": {
      "oneOf": [
        { "type": "null" },
        { "$ref": "#/$defs/positiveDecimal" }
      ]
    },
    "riskGroup": {
      "type": "object",
      "additionalProperties": false,
      "required": ["group_id", "group_version", "group_type", "instrument_ids", "limits"],
      "properties": {
        "group_id": { "$ref": "#/$defs/identifier" },
        "group_version": { "const": "1" },
        "group_type": { "enum": ["issuer", "sector", "currency", "country", "asset_class", "custom"] },
        "instrument_ids": {
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": { "$ref": "#/$defs/identifier" }
        },
        "limits": { "$ref": "#/$defs/riskGroupLimits" }
      }
    },
    "riskGroupLimits": {
      "type": "object",
      "additionalProperties": false,
      "required": ["max_gross_exposure", "max_long_exposure", "max_short_exposure", "max_absolute_net_exposure", "max_concentration"],
      "properties": {
        "max_gross_exposure": { "$ref": "#/$defs/nullablePositiveDecimal" },
        "max_long_exposure": { "$ref": "#/$defs/nullablePositiveDecimal" },
        "max_short_exposure": { "$ref": "#/$defs/nullablePositiveDecimal" },
        "max_absolute_net_exposure": { "$ref": "#/$defs/nullablePositiveDecimal" },
        "max_concentration": {
          "oneOf": [
            { "type": "null" },
            { "allOf": [{ "$ref": "#/$defs/positiveDecimal" }, { "pattern": "^(?:0[.][0-9]{0,5}[1-9]|1)$" }] }
          ]
        }
      }
    },
    "execution": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["model", "configuration"],
          "properties": {
            "model": { "const": "completed_bar_v1" },
            "configuration": { "$ref": "#/$defs/completedBarV1Configuration" }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["model", "configuration"],
          "properties": {
            "model": { "enum": ["completed_bar_next_open_v1", "completed_bar_adverse_touch_v1"] },
            "configuration": { "$ref": "#/$defs/conservativeBarConfiguration" }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["model", "configuration"],
          "properties": {
            "model": { "const": "quote_trade_v1" },
            "configuration": { "$ref": "#/$defs/quoteTradeConfiguration" }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["model", "configuration"],
          "properties": {
            "model": { "const": "order_book_v1" },
            "configuration": { "$ref": "#/$defs/orderBookConfiguration" }
          }
        }
      ]
    },
    "completedBarV1Configuration": {
      "type": "object",
      "additionalProperties": false,
      "required": ["version", "participation_bps", "fee_schedules"],
      "properties": {
        "version": { "const": "2" },
        "participation_bps": { "type": "integer", "minimum": 0, "maximum": 10000 },
        "fee_schedules": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/feeSchedule" } }
      }
    },
    "conservativeBarConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "required": ["version", "participation_bps", "fee_schedules", "spread_model", "impact_model"],
      "properties": {
        "version": { "const": "1" },
        "participation_bps": { "type": "integer", "minimum": 0, "maximum": 10000 },
        "fee_schedules": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/feeSchedule" } },
        "spread_model": { "$ref": "#/$defs/fixedSpreadModel" },
        "impact_model": { "$ref": "#/$defs/linearImpactModel" }
      }
    },
    "quoteTradeConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "required": ["version", "participation_bps", "fee_schedules"],
      "properties": {
        "version": { "const": "1" },
        "participation_bps": { "type": "integer", "minimum": 0, "maximum": 10000 },
        "fee_schedules": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/feeSchedule" } }
      }
    },
    "orderBookConfiguration": {
      "type": "object",
      "additionalProperties": false,
      "required": ["version", "participation_bps", "fee_schedules", "max_depth_levels"],
      "properties": {
        "version": { "const": "1" },
        "participation_bps": { "type": "integer", "minimum": 0, "maximum": 10000 },
        "fee_schedules": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/feeSchedule" } },
        "max_depth_levels": { "type": "integer", "minimum": 1, "maximum": 1024 }
      }
    },
    "fixedSpreadModel": {
      "type": "object",
      "additionalProperties": false,
      "required": ["model", "half_spread_bps"],
      "properties": {
        "model": { "const": "fixed_half_spread_v1" },
        "half_spread_bps": { "type": "integer", "minimum": 0, "maximum": 10000 }
      }
    },
    "linearImpactModel": {
      "type": "object",
      "additionalProperties": false,
      "required": ["model", "coefficient_bps", "missing_volume_policy"],
      "properties": {
        "model": { "const": "linear_participation_v1" },
        "coefficient_bps": { "type": "integer", "minimum": 0, "maximum": 10000 },
        "missing_volume_policy": { "enum": ["reject", "zero_impact"] }
      }
    },
    "feeSchedule": {
      "type": "object",
      "additionalProperties": false,
      "required": ["schedule_id", "instrument_id", "settlement_currency", "minimum", "maximum", "components"],
      "properties": {
        "schedule_id": { "$ref": "#/$defs/identifier" },
        "instrument_id": { "$ref": "#/$defs/identifier" },
        "settlement_currency": { "$ref": "#/$defs/identifier" },
        "minimum": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/unsignedDecimal" }] },
        "maximum": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/unsignedDecimal" }] },
        "components": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/feeComponent" } }
      }
    },
    "feeComponent": {
      "type": "object",
      "additionalProperties": false,
      "required": ["name", "currency", "kind", "value", "rounding", "applies_to"],
      "properties": {
        "name": { "$ref": "#/$defs/identifier" },
        "currency": { "$ref": "#/$defs/identifier" },
        "kind": { "enum": ["fixed", "notional_bps", "per_unit"] },
        "value": { "oneOf": [{ "$ref": "#/$defs/signedDecimal" }, { "type": "integer", "minimum": -10000, "maximum": 10000 }] },
        "rounding": { "enum": ["up", "down", "nearest"] },
        "applies_to": { "enum": ["any", "maker", "taker"] }
      },
      "allOf": [
        { "if": { "properties": { "kind": { "const": "notional_bps" } } }, "then": { "properties": { "value": { "type": "integer" } } } },
        { "if": { "properties": { "kind": { "enum": ["fixed", "per_unit"] } } }, "then": { "properties": { "value": { "$ref": "#/$defs/signedDecimal" } } } }
      ]
    },
    "scheduleItem": {
      "type": "object",
      "additionalProperties": false,
      "required": ["after_slice_sequence", "intents"],
      "properties": {
        "after_slice_sequence": { "$ref": "#/$defs/sequence" },
        "intents": { "type": "array", "maxItems": 4096, "items": { "$ref": "#/$defs/intent" } }
      }
    },
    "intent": {
      "oneOf": [
        { "$ref": "#/$defs/targetWeights" },
        { "$ref": "#/$defs/targetQuantities" },
        { "$ref": "#/$defs/submitOrder" },
        { "$ref": "#/$defs/cancelOrder" },
        { "$ref": "#/$defs/metric" }
      ]
    },
    "targetWeights": {
      "type": "object",
      "additionalProperties": false,
      "required": ["type", "targets"],
      "properties": {
        "type": { "const": "target_weights" },
        "targets": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": ["instrument_id", "weight"],
            "properties": {
              "instrument_id": { "$ref": "#/$defs/identifier" },
              "weight": { "$ref": "#/$defs/signedDecimal" }
            }
          }
        }
      }
    },
    "targetQuantities": {
      "type": "object",
      "additionalProperties": false,
      "required": ["type", "targets"],
      "properties": {
        "type": { "const": "target_quantities" },
        "targets": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": ["instrument_id", "quantity"],
            "properties": {
              "instrument_id": { "$ref": "#/$defs/identifier" },
              "quantity": { "$ref": "#/$defs/signedDecimal" }
            }
          }
        }
      }
    },
    "submitOrder": {
      "type": "object",
      "additionalProperties": false,
      "required": ["type", "instrument_id", "side", "quantity", "order_kind", "trigger_price", "limit_price", "time_in_force", "venue_id", "calendar_id", "expires_at"],
      "properties": {
        "type": { "const": "submit_order" },
        "instrument_id": { "$ref": "#/$defs/identifier" },
        "side": { "enum": ["buy", "sell"] },
        "quantity": { "$ref": "#/$defs/positiveDecimal" },
        "order_kind": { "enum": ["market", "limit", "stop", "stop_limit"] },
        "trigger_price": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/positiveDecimal" }] },
        "limit_price": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/positiveDecimal" }] },
        "time_in_force": { "enum": ["gtc", "ioc", "fok", "day", "gtd"] },
        "venue_id": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/identifier" }] },
        "calendar_id": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/identifier" }] },
        "expires_at": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/timestamp" }] }
      },
      "allOf": [
        { "if": { "properties": { "order_kind": { "const": "market" } } }, "then": { "properties": { "trigger_price": { "type": "null" }, "limit_price": { "type": "null" } } } },
        { "if": { "properties": { "order_kind": { "const": "limit" } } }, "then": { "properties": { "trigger_price": { "type": "null" }, "limit_price": { "$ref": "#/$defs/positiveDecimal" } } } },
        { "if": { "properties": { "order_kind": { "const": "stop" } } }, "then": { "properties": { "trigger_price": { "$ref": "#/$defs/positiveDecimal" }, "limit_price": { "type": "null" } } } },
        { "if": { "properties": { "order_kind": { "const": "stop_limit" } } }, "then": { "properties": { "trigger_price": { "$ref": "#/$defs/positiveDecimal" }, "limit_price": { "$ref": "#/$defs/positiveDecimal" } } } },
        { "if": { "properties": { "time_in_force": { "const": "day" } } }, "then": { "properties": { "venue_id": { "$ref": "#/$defs/identifier" }, "calendar_id": { "$ref": "#/$defs/identifier" }, "expires_at": { "type": "null" } } } },
        { "if": { "properties": { "time_in_force": { "const": "gtd" } } }, "then": { "properties": { "venue_id": { "type": "null" }, "calendar_id": { "type": "null" }, "expires_at": { "$ref": "#/$defs/timestamp" } } } },
        { "if": { "properties": { "time_in_force": { "enum": ["gtc", "ioc", "fok"] } } }, "then": { "properties": { "venue_id": { "type": "null" }, "calendar_id": { "type": "null" }, "expires_at": { "type": "null" } } } }
      ]
    },
    "cancelOrder": {
      "type": "object",
      "additionalProperties": false,
      "required": ["type", "order_id"],
      "properties": {
        "type": { "const": "cancel_order" },
        "order_id": { "$ref": "#/$defs/identifier" }
      }
    },
    "metric": {
      "type": "object",
      "additionalProperties": false,
      "required": ["type", "name", "value"],
      "properties": {
        "type": { "const": "emit_metric" },
        "name": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^\\S(?:.*\\S)?$" },
        "value": { "$ref": "#/$defs/metricValue" },
        "unit": { "type": "string", "minLength": 1, "maxLength": 64, "pattern": "^\\S(?:.*\\S)?$" },
        "dimensions": {
          "type": "object",
          "maxProperties": 16,
          "propertyNames": { "minLength": 1, "maxLength": 64, "pattern": "^\\S(?:.*\\S)?$" },
          "additionalProperties": { "type": "string", "maxLength": 128 }
        },
        "aggregation": { "enum": ["last", "sum", "minimum", "maximum", "mean"] }
      },
      "allOf": [
        { "if": { "properties": { "value": { "properties": { "type": { "enum": ["string", "boolean"] } } } } }, "then": { "properties": { "aggregation": { "enum": ["last"] } } } }
      ]
    },
    "metricValue": {
      "oneOf": [
        { "type": "object", "additionalProperties": false, "required": ["type", "value"], "properties": { "type": { "const": "numeric" }, "value": { "type": "string", "pattern": "^(0|[1-9][0-9]*|-[1-9][0-9]*)(\\.[0-9]*[1-9])?$|^-0\\.[0-9]*[1-9]$" } } },
        { "type": "object", "additionalProperties": false, "required": ["type", "value"], "properties": { "type": { "const": "string" }, "value": { "type": "string", "maxLength": 1024 } } },
        { "type": "object", "additionalProperties": false, "required": ["type", "value"], "properties": { "type": { "const": "boolean" }, "value": { "type": "boolean" } } }
      ]
    },
    "marketSlice": {
      "type": "object",
      "additionalProperties": false,
      "required": ["slice_sequence", "start_at", "end_at", "available_at", "received_at", "bars", "market_events", "order_book_events", "fx_rates", "corporate_actions", "borrow_observations", "cash_rate_observations", "settlement_failures", "lifecycle_events"],
      "properties": {
        "slice_sequence": { "$ref": "#/$defs/sequence" },
        "start_at": { "$ref": "#/$defs/timestamp" },
        "end_at": { "$ref": "#/$defs/timestamp" },
        "available_at": { "$ref": "#/$defs/timestamp" },
        "received_at": { "$ref": "#/$defs/timestamp" },
        "bars": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/bar" } },
        "market_events": { "type": "array", "items": { "$ref": "#/$defs/marketEvent" } },
        "order_book_events": { "type": "array", "items": { "$ref": "#/$defs/orderBookEvent" } },
        "fx_rates": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/fxRate" } },
        "corporate_actions": { "type": "array", "items": { "$ref": "#/$defs/corporateAction" } },
        "borrow_observations": { "type": "array", "items": { "$ref": "#/$defs/borrowObservation" } },
        "cash_rate_observations": { "type": "array", "items": { "$ref": "#/$defs/cashRateObservation" } },
        "settlement_failures": { "type": "array", "items": { "$ref": "#/$defs/settlementFailure" } },
        "lifecycle_events": { "type": "array", "items": { "$ref": "#/$defs/lifecycleEvent" } }
      }
    },
    "bar": {
      "type": "object",
      "additionalProperties": false,
      "required": ["instrument_id", "open", "high", "low", "close", "volume"],
      "properties": {
        "instrument_id": { "$ref": "#/$defs/identifier" },
        "open": { "$ref": "#/$defs/positiveDecimal" },
        "high": { "$ref": "#/$defs/positiveDecimal" },
        "low": { "$ref": "#/$defs/positiveDecimal" },
        "close": { "$ref": "#/$defs/positiveDecimal" },
        "volume": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/unsignedDecimal" }] }
      }
    },
    "marketEvent": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["type", "instrument_id", "event_at", "available_at", "received_at", "ingest_sequence", "bid_price", "bid_quantity", "ask_price", "ask_quantity"],
          "properties": {
            "type": { "const": "quote" },
            "instrument_id": { "$ref": "#/$defs/identifier" },
            "event_at": { "$ref": "#/$defs/timestamp" },
            "available_at": { "$ref": "#/$defs/timestamp" },
            "received_at": { "$ref": "#/$defs/timestamp" },
            "ingest_sequence": { "$ref": "#/$defs/sequence" },
            "bid_price": { "$ref": "#/$defs/positiveDecimal" },
            "bid_quantity": { "$ref": "#/$defs/positiveDecimal" },
            "ask_price": { "$ref": "#/$defs/positiveDecimal" },
            "ask_quantity": { "$ref": "#/$defs/positiveDecimal" }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["type", "instrument_id", "event_at", "available_at", "received_at", "ingest_sequence", "price", "quantity", "aggressor_side"],
          "properties": {
            "type": { "const": "trade" },
            "instrument_id": { "$ref": "#/$defs/identifier" },
            "event_at": { "$ref": "#/$defs/timestamp" },
            "available_at": { "$ref": "#/$defs/timestamp" },
            "received_at": { "$ref": "#/$defs/timestamp" },
            "ingest_sequence": { "$ref": "#/$defs/sequence" },
            "price": { "$ref": "#/$defs/positiveDecimal" },
            "quantity": { "$ref": "#/$defs/positiveDecimal" },
            "aggressor_side": { "enum": ["buy", "sell", "unknown"] }
          }
        }
      ]
    },
    "orderBookLevel": {
      "type": "object",
      "additionalProperties": false,
      "required": ["price", "quantity"],
      "properties": {
        "price": { "$ref": "#/$defs/positiveDecimal" },
        "quantity": { "$ref": "#/$defs/positiveDecimal" }
      }
    },
    "orderBookEvent": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["type", "instrument_id", "event_at", "available_at", "received_at", "ingest_sequence", "book_sequence", "bids", "asks"],
          "properties": {
            "type": { "const": "snapshot" },
            "instrument_id": { "$ref": "#/$defs/identifier" },
            "event_at": { "$ref": "#/$defs/timestamp" },
            "available_at": { "$ref": "#/$defs/timestamp" },
            "received_at": { "$ref": "#/$defs/timestamp" },
            "ingest_sequence": { "$ref": "#/$defs/sequence" },
            "book_sequence": { "$ref": "#/$defs/sequence" },
            "bids": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/orderBookLevel" } },
            "asks": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/orderBookLevel" } }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["type", "instrument_id", "event_at", "available_at", "received_at", "ingest_sequence", "book_sequence", "side", "price", "quantity"],
          "properties": {
            "type": { "const": "set" },
            "instrument_id": { "$ref": "#/$defs/identifier" },
            "event_at": { "$ref": "#/$defs/timestamp" },
            "available_at": { "$ref": "#/$defs/timestamp" },
            "received_at": { "$ref": "#/$defs/timestamp" },
            "ingest_sequence": { "$ref": "#/$defs/sequence" },
            "book_sequence": { "$ref": "#/$defs/sequence" },
            "side": { "enum": ["bid", "ask"] },
            "price": { "$ref": "#/$defs/positiveDecimal" },
            "quantity": { "$ref": "#/$defs/positiveDecimal" }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["type", "instrument_id", "event_at", "available_at", "received_at", "ingest_sequence", "book_sequence", "side", "price"],
          "properties": {
            "type": { "const": "delete" },
            "instrument_id": { "$ref": "#/$defs/identifier" },
            "event_at": { "$ref": "#/$defs/timestamp" },
            "available_at": { "$ref": "#/$defs/timestamp" },
            "received_at": { "$ref": "#/$defs/timestamp" },
            "ingest_sequence": { "$ref": "#/$defs/sequence" },
            "book_sequence": { "$ref": "#/$defs/sequence" },
            "side": { "enum": ["bid", "ask"] },
            "price": { "$ref": "#/$defs/positiveDecimal" }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["type", "instrument_id", "event_at", "available_at", "received_at", "ingest_sequence", "book_sequence", "price", "quantity", "aggressor_side"],
          "properties": {
            "type": { "const": "trade" },
            "instrument_id": { "$ref": "#/$defs/identifier" },
            "event_at": { "$ref": "#/$defs/timestamp" },
            "available_at": { "$ref": "#/$defs/timestamp" },
            "received_at": { "$ref": "#/$defs/timestamp" },
            "ingest_sequence": { "$ref": "#/$defs/sequence" },
            "book_sequence": { "$ref": "#/$defs/sequence" },
            "price": { "$ref": "#/$defs/positiveDecimal" },
            "quantity": { "$ref": "#/$defs/positiveDecimal" },
            "aggressor_side": { "enum": ["buy", "sell", "unknown"] }
          }
        }
      ]
    },
    "fxRate": {
      "type": "object",
      "additionalProperties": false,
      "required": ["currency", "rate"],
      "properties": {
        "currency": { "$ref": "#/$defs/identifier" },
        "rate": { "$ref": "#/$defs/positiveDecimal" }
      }
    },
    "corporateAction": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["type", "action_id", "instrument_id", "numerator", "denominator"],
          "properties": {
            "type": { "const": "split" },
            "action_id": { "$ref": "#/$defs/identifier" },
            "instrument_id": { "$ref": "#/$defs/identifier" },
            "numerator": { "$ref": "#/$defs/sequence" },
            "denominator": { "$ref": "#/$defs/sequence" }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["type", "action_id", "instrument_id", "amount_per_unit"],
          "properties": {
            "type": { "const": "cash_dividend" },
            "action_id": { "$ref": "#/$defs/identifier" },
            "instrument_id": { "$ref": "#/$defs/identifier" },
            "amount_per_unit": { "$ref": "#/$defs/positiveDecimal" }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["type", "action_id", "instrument_id", "destination_instrument_id", "numerator", "denominator", "basis_allocation_bps", "fractional_policy"],
          "properties": {
            "type": { "enum": ["stock_dividend", "rights", "spin_off"] },
            "action_id": { "$ref": "#/$defs/identifier" },
            "instrument_id": { "$ref": "#/$defs/identifier" },
            "destination_instrument_id": { "$ref": "#/$defs/identifier" },
            "numerator": { "$ref": "#/$defs/sequence" },
            "denominator": { "$ref": "#/$defs/sequence" },
            "basis_allocation_bps": { "type": "integer", "minimum": 0, "maximum": 10000 },
            "fractional_policy": { "$ref": "#/$defs/fractionalPolicy" }
          }
        }
      ]
    },
    "fractionalPolicy": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["policy"],
          "properties": { "policy": { "const": "reject" } }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["policy", "price", "currency"],
          "properties": {
            "policy": { "const": "cash_in_lieu" },
            "price": { "$ref": "#/$defs/positiveDecimal" },
            "currency": { "$ref": "#/$defs/identifier" }
          }
        }
      ]
    },
    "terminalPolicy": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["policy"],
          "properties": { "policy": { "const": "hold" } }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["policy", "price", "currency"],
          "properties": {
            "policy": { "const": "cash_out" },
            "price": { "$ref": "#/$defs/positiveDecimal" },
            "currency": { "$ref": "#/$defs/identifier" }
          }
        }
      ]
    },
    "lifecycleEvent": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["type", "event_id", "instrument_id", "reason"],
          "properties": {
            "type": { "const": "halt" },
            "event_id": { "$ref": "#/$defs/identifier" },
            "instrument_id": { "$ref": "#/$defs/identifier" },
            "reason": { "type": "string", "minLength": 1 }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["type", "event_id", "instrument_id"],
          "properties": {
            "type": { "const": "resume" },
            "event_id": { "$ref": "#/$defs/identifier" },
            "instrument_id": { "$ref": "#/$defs/identifier" }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["type", "event_id", "instrument_id", "symbol", "provider", "provider_instrument_id"],
          "properties": {
            "type": { "const": "identifier_change" },
            "event_id": { "$ref": "#/$defs/identifier" },
            "instrument_id": { "$ref": "#/$defs/identifier" },
            "symbol": { "$ref": "#/$defs/identifier" },
            "provider": { "$ref": "#/$defs/identifier" },
            "provider_instrument_id": { "$ref": "#/$defs/identifier" }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["type", "event_id", "instrument_id", "terminal_policy"],
          "properties": {
            "type": { "const": "expiration" },
            "event_id": { "$ref": "#/$defs/identifier" },
            "instrument_id": { "$ref": "#/$defs/identifier" },
            "terminal_policy": { "$ref": "#/$defs/terminalPolicy" }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": ["type", "event_id", "instrument_id", "terminal_policy", "reason"],
          "properties": {
            "type": { "const": "delisting" },
            "event_id": { "$ref": "#/$defs/identifier" },
            "instrument_id": { "$ref": "#/$defs/identifier" },
            "terminal_policy": { "$ref": "#/$defs/terminalPolicy" },
            "reason": { "type": "string", "minLength": 1 }
          }
        }
      ]
    }
  }
}
