<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sbe:messageSchema xmlns:sbe="http://fixprotocol.io/2016/sbe"
                   package="com.okx.sbe.private"
                   id="1"
                   version="0"
                   semanticVersion="1.0.0"
                   description="orders and fills private-channel SBE push schema"
                   byteOrder="littleEndian">
    <types>
        <composite name="messageHeader" description="Template ID and length of message root.">
            <type name="blockLength" primitiveType="uint16"/>
            <type name="templateId" primitiveType="uint16"/>
            <type name="schemaId" primitiveType="uint16"/>
            <type name="version" primitiveType="uint16"/>
        </composite>

        <enum name="stateEnum" encodingType="int8">
            <validValue name="CANCELED">2</validValue>
            <validValue name="LIVE">3</validValue>
            <validValue name="PARTIALLY_FILLED">4</validValue>
            <validValue name="FILLED">5</validValue>
            <validValue name="MMP_CANCELED">6</validValue>
        </enum>

        <enum name="sideEnum" encodingType="int8">
            <validValue name="SELL">0</validValue>
            <validValue name="BUY">1</validValue>
        </enum>

        <enum name="tdModeEnum" encodingType="int8">
            <validValue name="CASH">1</validValue>
            <validValue name="CROSS">2</validValue>
            <validValue name="ISOLATED">3</validValue>
            <validValue name="SPOT_ISOLATED">4</validValue>
        </enum>

        <enum name="execTypeEnum" encodingType="int8">
            <validValue name="MAKER">0</validValue>
            <validValue name="TAKER">1</validValue>
        </enum>

        <enum name="categoryEnum" encodingType="int8">
            <validValue name="NORMAL">0</validValue>
            <validValue name="TWAP">1</validValue>
            <validValue name="ADL">2</validValue>
            <validValue name="FULL_LIQUIDATION">3</validValue>
            <validValue name="PARTIAL_LIQUIDATION">4</validValue>
            <validValue name="DELIVERY">5</validValue>
            <validValue name="DDH">6</validValue>
            <validValue name="AUTO_CONVERSION">7</validValue>
            <validValue name="XSTOCK_LIQUIDATION">8</validValue>
        </enum>

        <enum name="amendResultEnum" encodingType="int8">
            <validValue name="FAILED">-1</validValue>
            <validValue name="SUCCESS">0</validValue>
            <validValue name="AUTO_CANCELED">1</validValue>
            <validValue name="AUTO_AMENDED">2</validValue>
        </enum>

        <enum name="cancelSourceEnum" encodingType="int8">
            <validValue name="SYSTEM">0</validValue>
            <validValue name="USER">1</validValue>
            <validValue name="PRE_REDUCE_MARGIN">2</validValue>
            <validValue name="RISK_CONTROL">3</validValue>
            <validValue name="BORROW_CAP">4</validValue>
            <validValue name="ADL">6</validValue>
            <validValue name="FUTURES_EXPIRY">7</validValue>
            <validValue name="FUNDING_FEE_BALANCE">9</validValue>
            <validValue name="OPTION_EXPIRY">10</validValue>
            <validValue name="FOK_INCOMPLETE">13</validValue>
            <validValue name="IOC_REMAINDER">14</validValue>
            <validValue name="PRICE_LIMIT">15</validValue>
            <validValue name="POSITION_MARKET_CLOSED">17</validValue>
            <validValue name="CANCEL_ALL_AFTER">20</validValue>
            <validValue name="POSITION_FULLY_CLOSED">21</validValue>
            <validValue name="BETTER_SAME_SIDE_CURRENT_REDUCE_ONLY">22</validValue>
            <validValue name="BETTER_SAME_SIDE_EXISTING_REDUCE_ONLY">23</validValue>
            <validValue name="SLIPPAGE_PROTECTION">27</validValue>
            <validValue name="POST_ONLY_WOULD_TAKE">31</validValue>
            <validValue name="STP">32</validValue>
            <validValue name="TAKER_MATCH_COUNT_LIMIT">33</validValue>
            <validValue name="LINKED_STOP_LOSS_TRIGGERED">36</validValue>
            <validValue name="LINKED_STOP_LOSS_CANCELED">37</validValue>
            <validValue name="MMP_CANCELED_BY_USER">38</validValue>
            <validValue name="MMP_TRIGGERED">39</validValue>
            <validValue name="CHASE_DISTANCE">42</validValue>
            <validValue name="INDEX_PRICE_VALIDATION">43</validValue>
            <validValue name="AUTO_CONVERSION_BALANCE">44</validValue>
            <validValue name="ELP_PRICE_VALIDATION">45</validValue>
            <validValue name="DELTA_REDUCTION">46</validValue>
        </enum>

        <enum name="amendSourceEnum" encodingType="int8">
            <validValue name="USER_AMENDMENT">1</validValue>
            <validValue name="USER_AMENDMENT_REDUCE_ONLY_ADJUSTED">2</validValue>
            <validValue name="SYSTEM_REDUCE_ONLY_ADJUSTMENT">4</validValue>
            <validValue name="OPTION_PX_FOLLOW_UP_AMENDMENT">5</validValue>
        </enum>

        <enum name="riskBypassResultEnum" encodingType="int8">
            <validValue name="APPLIED">1</validValue>
            <validValue name="IMR_GATE_RATIO_BELOW_THRESHOLD">2</validValue>
            <validValue name="ADJUSTED_EQUITY_BELOW_MINIMUM">3</validValue>
            <validValue name="BORROWING_LIMIT_EXCEEDED">4</validValue>
            <validValue name="PER_ORDER_VALUE_LIMIT_EXCEEDED">5</validValue>
            <validValue name="CUMULATIVE_ORDER_VALUE_LIMIT_EXCEEDED">6</validValue>
            <validValue name="PLATFORM_DISABLED">7</validValue>
            <validValue name="UNSUPPORTED_TYPE">8</validValue>
            <validValue name="AUTO_BORROW_DISABLED">9</validValue>
            <validValue name="MULTIPLE_MARGIN_CURRENCIES_IN_BATCH">10</validValue>
            <validValue name="TEMPORARILY_UNAVAILABLE">11</validValue>
        </enum>

    </types>


    <sbe:message name="OrdersChannelEvent" id="1100" description="One incremental orders-channel event.">
        <field name="instIdCode" id="1" type="int64" description="Unique instrument code."/>
        <field name="ordId" id="2" type="int64" description="Order ID."/>
        <field name="clOrdId" id="3" type="int64" presence="optional" description="Client order ID."/>
        <field name="tag" id="4" type="int64" presence="optional" description="Numeric order tag."/>
        <field name="pxMantissa" id="5" type="int64" presence="optional" description="Order price mantissa."/>
        <field name="pxExponent" id="6" type="int8"
               description="Shared price exponent for pxMantissa and fillPxMantissa."/>
        <field name="szMantissa" id="7" type="int64" presence="optional" description="Order size mantissa."/>
        <field name="szExponent" id="8" type="int8"
               description="Shared size exponent for szMantissa, fillSzMantissa and accFillSzMantissa."/>
        <field name="side" id="9" type="sideEnum" description="Order side."/>
        <field name="tdMode" id="10" type="tdModeEnum" description="Trade mode."/>
        <field name="fillPxMantissa" id="11" type="int64" presence="optional" description="Latest fill price mantissa; uses pxExponent."/>
        <field name="fillSzMantissa" id="12" type="int64" presence="optional" description="Latest fill size mantissa; uses szExponent."/>
        <field name="fillTime" id="13" type="int64" presence="optional"
               description="Latest fill time in microseconds."/>
        <field name="tradeId" id="14" type="int64" presence="optional" description="Latest trade ID."/>
        <field name="execType" id="15" type="execTypeEnum" presence="optional" description="Liquidity role."/>
        <field name="fillFeeMantissa" id="16" type="int64" presence="optional" description="Latest fill fee or rebate mantissa; uses feeExponent."/>
        <field name="accFillSzMantissa" id="17" type="int64" presence="optional" description="Accumulated fill size mantissa; uses szExponent."/>
        <field name="state" id="18" type="stateEnum" description="Order state."/>
        <field name="feeMantissa" id="19" type="int64" presence="optional" description="Accumulated fee or rebate mantissa; uses feeExponent."/>
        <field name="feeExponent" id="20" type="int8"
               description="Shared fee exponent for feeMantissa and fillFeeMantissa."/>
        <field name="cancelSource" id="21" type="cancelSourceEnum" presence="optional" description="Cancellation source."/>
        <field name="amendSource" id="22" type="amendSourceEnum" presence="optional" description="Amendment source."/>
        <field name="category" id="23" type="categoryEnum" presence="optional" description="Order category."/>
        <field name="uTime" id="24" type="int64" description="Order update time in epoch microseconds."/>
        <field name="cTime" id="25" type="int64" description="Order creation time in epoch microseconds."/>
        <field name="reqId" id="26" type="int64" presence="optional" description="Amendment request ID."/>
        <field name="amendResult" id="27" type="amendResultEnum" presence="optional" description="Amendment result."/>
        <field name="riskBypassResult" id="28" type="riskBypassResultEnum" presence="optional" description="Risk Bypass result."/>
    </sbe:message>

    <sbe:message name="FillsChannelEvent" id="1101">
        <field id="1" name="instIdCode" type="int64" description="Unique instrument code."/>
        <field id="2" name="ts" type="int64" description="Fill event time in microseconds since Unix epoch."/>
        <field id="3" name="tradeId" type="int64" description="Trade ID; for aggregated taker fills, the latest trade ID."/>
        <field id="4" name="ordId" type="int64" description="Order ID."/>
        <field id="5" name="clOrdId" type="int64" presence="optional" description="Client order ID."/>
        <field id="6" name="fillPxMantissa" type="int64" description="Fill price mantissa."/>
        <field id="7" name="fillSzMantissa" type="int64" description="Aggregated fill size mantissa."/>
        <field id="8" name="count" type="int16" description="Number of matched fills represented by this event."/>
        <field id="9" name="side" type="sideEnum" description="Order side."/>
        <field id="10" name="execType" type="execTypeEnum" description="Liquidity role."/>
        <field id="11" name="fillPxExponent" type="int8" description="Fill price exponent."/>
        <field id="12" name="fillSzExponent" type="int8" description="Fill size exponent."/>
    </sbe:message>
</sbe:messageSchema>
