syntax = "proto3";

package tinkoff.public.invest.api.contract.v1;

option go_package = "./;investapi";
option java_package = "ru.tinkoff.piapi.contract.v1";
option java_multiple_files = true;
option csharp_namespace = "Tinkoff.InvestApi.V1";
option objc_class_prefix = "TIAPI";
option php_namespace = "Tinkoff\\Invest\\V1";

import "google/protobuf/timestamp.proto";

//Тип инструмента.
enum InstrumentType {
  INSTRUMENT_TYPE_UNSPECIFIED = 0;
  INSTRUMENT_TYPE_BOND = 1; //Облигация.
  INSTRUMENT_TYPE_SHARE	= 2; //Акция.
  INSTRUMENT_TYPE_CURRENCY = 3; //Валюта.
  INSTRUMENT_TYPE_ETF = 4; //Exchange-traded fund. Фонд.
  INSTRUMENT_TYPE_FUTURES = 5; //Фьючерс.
  INSTRUMENT_TYPE_SP = 6; //Структурная нота.
  INSTRUMENT_TYPE_OPTION = 7; //Опцион.
  INSTRUMENT_TYPE_CLEARING_CERTIFICATE = 8; //Clearing certificate.
  INSTRUMENT_TYPE_INDEX = 9; //Индекс.
  INSTRUMENT_TYPE_COMMODITY = 10; //Товар.
  INSTRUMENT_TYPE_DFA = 11; //Цифровой актив.
}

//Статус запрашиваемых инструментов.
enum InstrumentStatus {
  INSTRUMENT_STATUS_UNSPECIFIED = 0; //Значение не определено.
  INSTRUMENT_STATUS_BASE = 1; //По умолчанию — базовый список инструментов, которыми можно торговать через T-Invest API. Сейчас списки доступных бумаг в API и других интерфейсах совпадают — кроме внебиржевых бумаг, но в будущем списки могут различаться.
  INSTRUMENT_STATUS_ALL = 2; //Список всех инструментов.
}

//Денежная сумма в определенной валюте.
message MoneyValue {

  // Строковый ISO-код валюты.
  string currency = 1;

  // Целая часть суммы, может быть отрицательным числом.
  int64 units = 2;

  // Дробная часть суммы, может быть отрицательным числом.
  int32 nano = 3;
}

//Котировка — денежная сумма без указания валюты.
message Quotation {

  // Целая часть суммы, может быть отрицательным числом.
  int64 units = 1;

  // Дробная часть суммы, может быть отрицательным числом.
  int32 nano = 2;
}

//Режим торгов инструмента
enum SecurityTradingStatus {
  SECURITY_TRADING_STATUS_UNSPECIFIED = 0; //Торговый статус не определен.
  SECURITY_TRADING_STATUS_NOT_AVAILABLE_FOR_TRADING = 1; //Недоступен для торгов.
  SECURITY_TRADING_STATUS_OPENING_PERIOD = 2; //Период открытия торгов.
  SECURITY_TRADING_STATUS_CLOSING_PERIOD = 3; //Период закрытия торгов.
  SECURITY_TRADING_STATUS_BREAK_IN_TRADING = 4; //Перерыв в торговле.
  SECURITY_TRADING_STATUS_NORMAL_TRADING = 5; //Нормальная торговля.
  SECURITY_TRADING_STATUS_CLOSING_AUCTION = 6; //Аукцион закрытия.
  SECURITY_TRADING_STATUS_DARK_POOL_AUCTION = 7; //Аукцион крупных пакетов.
  SECURITY_TRADING_STATUS_DISCRETE_AUCTION = 8; //Дискретный аукцион.
  SECURITY_TRADING_STATUS_OPENING_AUCTION_PERIOD = 9; //Аукцион открытия.
  SECURITY_TRADING_STATUS_TRADING_AT_CLOSING_AUCTION_PRICE = 10; //Период торгов по цене аукциона закрытия.
  SECURITY_TRADING_STATUS_SESSION_ASSIGNED = 11; //Сессия назначена.
  SECURITY_TRADING_STATUS_SESSION_CLOSE = 12; //Сессия закрыта.
  SECURITY_TRADING_STATUS_SESSION_OPEN = 13; //Сессия открыта.
  SECURITY_TRADING_STATUS_DEALER_NORMAL_TRADING = 14; //Доступна торговля в режиме внутренней ликвидности брокера.
  SECURITY_TRADING_STATUS_DEALER_BREAK_IN_TRADING = 15; //Перерыв торговли в режиме внутренней ликвидности брокера.
  SECURITY_TRADING_STATUS_DEALER_NOT_AVAILABLE_FOR_TRADING = 16; //Недоступна торговля в режиме внутренней ликвидности брокера.
  SECURITY_TRADING_STATUS_STABILIZATION_AUCTION = 17; //Аукцион обновления цен.
}

message PingRequest {
  optional google.protobuf.Timestamp time = 1; //Время формирования запроса.
}

message PingDelaySettings {
  optional int32 ping_delay_ms = 15; //Задержка (пинг) сообщений:  5000–180 000 миллисекунд. Значение по умолчанию — 120 000.
}

//Проверка активности стрима.
message Ping {
  google.protobuf.Timestamp time = 1; //Время проверки.
  string stream_id = 2; //Идентификатор соединения.
  optional google.protobuf.Timestamp ping_request_time = 4; //Время формирования запроса.
}

//Тип цены.
enum PriceType {
  PRICE_TYPE_UNSPECIFIED = 0; //Значение не определено.
  PRICE_TYPE_POINT = 1; //Цена в пунктах (только для фьючерсов и облигаций).
  PRICE_TYPE_CURRENCY = 2; //Цена в валюте расчетов по инструменту.
}

message Page {
  int32 limit = 1; //Максимальное число возвращаемых записей.
  int32 page_number = 2; //Порядковый номер страницы, начиная с 0.
}

message PageResponse {
  int32 limit = 1; //Максимальное число возвращаемых записей.
  int32 page_number = 2; //Порядковый номер страницы, начиная с 0.
  int32 total_count = 3; //Общее количество записей.
}

message ResponseMetadata {
  string tracking_id = 42; //Идентификатор трекинга.
  google.protobuf.Timestamp server_time = 43; //Серверное время.
}

message BrandData {
  string logo_name = 1; // Логотип инструмента. Имя файла для получения логотипа.
  string logo_base_color = 2; //	Цвет бренда.
  string text_color	= 3; // Цвет текста для цвета логотипа бренда.
}

enum ResultSubscriptionStatus {
  RESULT_SUBSCRIPTION_STATUS_UNSPECIFIED = 0; //Статус подписки не определен.
  RESULT_SUBSCRIPTION_STATUS_OK = 1; //Подписка успешно установлена.
  RESULT_SUBSCRIPTION_STATUS_ERROR = 13; //Ошибка подписки
}

message ErrorDetail {
  string code = 1; //Код ошибки.
  string message = 3; //Описание ошибки.
}

//Реальная площадка исполнения расчетов.
enum RealExchange {
  REAL_EXCHANGE_UNSPECIFIED = 0; //Тип не определен.
  REAL_EXCHANGE_MOEX = 1; //Московская биржа.
  REAL_EXCHANGE_RTS = 2; //Санкт-Петербургская биржа.
  REAL_EXCHANGE_OTC = 3; //Внебиржевой инструмент.
  REAL_EXCHANGE_DEALER = 4; //Инструмент, торгуемый на площадке брокера.
}
