diff --git a/apps/backend/package.json b/apps/backend/package.json index c194228..561d622 100644 --- a/apps/backend/package.json +++ b/apps/backend/package.json @@ -13,6 +13,8 @@ "test:integration": "MOEX_LIVE_TESTS=1 VITE_CJS_IGNORE_WARNING=1 vitest run \"src/**/*.integration.spec.ts\"" }, "dependencies": { + "@grpc/grpc-js": "^1.14.4", + "@grpc/proto-loader": "^0.8.1", "@libsql/client": "^0.17.3", "@nestjs/axios": "^3.0.0", "@nestjs/cache-manager": "^2.0.0", @@ -30,7 +32,9 @@ "class-transformer": "^0.5.0", "class-validator": "^0.14.0", "cookie-parser": "^1.4.7", + "long": "^5.3.2", "p-queue": "^7.3.0", + "protobufjs": "^8.6.4", "reflect-metadata": "^0.1.13", "rxjs": "^7.8.0", "swagger-ui-express": "^5.0.0" diff --git a/apps/backend/src/modules/tbank/proto/contracts/common.proto b/apps/backend/src/modules/tbank/proto/contracts/common.proto new file mode 100644 index 0000000..5162419 --- /dev/null +++ b/apps/backend/src/modules/tbank/proto/contracts/common.proto @@ -0,0 +1,144 @@ +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; //Инструмент, торгуемый на площадке брокера. +} diff --git a/apps/backend/src/modules/tbank/proto/contracts/google/api/field_behavior.proto b/apps/backend/src/modules/tbank/proto/contracts/google/api/field_behavior.proto new file mode 100644 index 0000000..861f825 --- /dev/null +++ b/apps/backend/src/modules/tbank/proto/contracts/google/api/field_behavior.proto @@ -0,0 +1,104 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +import "google/protobuf/descriptor.proto"; + +option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; +option java_multiple_files = true; +option java_outer_classname = "FieldBehaviorProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +extend google.protobuf.FieldOptions { + // A designation of a specific field behavior (required, output only, etc.) + // in protobuf messages. + // + // Examples: + // + // string name = 1 [(google.api.field_behavior) = REQUIRED]; + // State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + // google.protobuf.Duration ttl = 1 + // [(google.api.field_behavior) = INPUT_ONLY]; + // google.protobuf.Timestamp expire_time = 1 + // [(google.api.field_behavior) = OUTPUT_ONLY, + // (google.api.field_behavior) = IMMUTABLE]; + repeated google.api.FieldBehavior field_behavior = 1052 [packed = false]; +} + +// An indicator of the behavior of a given field (for example, that a field +// is required in requests, or given as output but ignored as input). +// This **does not** change the behavior in protocol buffers itself; it only +// denotes the behavior and may affect how API tooling handles the field. +// +// Note: This enum **may** receive new values in the future. +enum FieldBehavior { + // Conventional default for enums. Do not use this. + FIELD_BEHAVIOR_UNSPECIFIED = 0; + + // Specifically denotes a field as optional. + // While all fields in protocol buffers are optional, this may be specified + // for emphasis if appropriate. + OPTIONAL = 1; + + // Denotes a field as required. + // This indicates that the field **must** be provided as part of the request, + // and failure to do so will cause an error (usually `INVALID_ARGUMENT`). + REQUIRED = 2; + + // Denotes a field as output only. + // This indicates that the field is provided in responses, but including the + // field in a request does nothing (the server *must* ignore it and + // *must not* throw an error as a result of the field's presence). + OUTPUT_ONLY = 3; + + // Denotes a field as input only. + // This indicates that the field is provided in requests, and the + // corresponding field is not included in output. + INPUT_ONLY = 4; + + // Denotes a field as immutable. + // This indicates that the field may be set once in a request to create a + // resource, but may not be changed thereafter. + IMMUTABLE = 5; + + // Denotes that a (repeated) field is an unordered list. + // This indicates that the service may provide the elements of the list + // in any arbitrary order, rather than the order the user originally + // provided. Additionally, the list's order may or may not be stable. + UNORDERED_LIST = 6; + + // Denotes that this field returns a non-empty default value if not set. + // This indicates that if the user provides the empty value in a request, + // a non-empty value will be returned. The user will not be aware of what + // non-empty value to expect. + NON_EMPTY_DEFAULT = 7; + + // Denotes that the field in a resource (a message annotated with + // google.api.resource) is used in the resource name to uniquely identify the + // resource. For AIP-compliant APIs, this should only be applied to the + // `name` field on the resource. + // + // This behavior should not be applied to references to other resources within + // the message. + // + // The identifier field of resources often have different field behavior + // depending on the request it is embedded in (e.g. for Create methods name + // is optional and unused, while for Update methods it is required). Instead + // of method-specific annotations, only `IDENTIFIER` is required. + IDENTIFIER = 8; +} diff --git a/apps/backend/src/modules/tbank/proto/contracts/instruments.proto b/apps/backend/src/modules/tbank/proto/contracts/instruments.proto new file mode 100644 index 0000000..d5a5e44 --- /dev/null +++ b/apps/backend/src/modules/tbank/proto/contracts/instruments.proto @@ -0,0 +1,1751 @@ +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"; +import "common.proto"; +import "google/api/field_behavior.proto"; + +service InstrumentsService {/*Методы сервиса предназначены для получения:
1. Информации об инструментах.
2. + Расписания торговых сессий.
3. Календаря выплат купонов по облигациям.
4. + Размера гарантийного обеспечения по фьючерсам.
5. Дивидендов по ценной бумаге.*/ + + //TradingSchedules — расписания торговых площадок + rpc TradingSchedules (TradingSchedulesRequest) returns (TradingSchedulesResponse); + + //BondBy — получить облигацию по ее идентификатору + rpc BondBy (InstrumentRequest) returns (BondResponse); + + //Bonds — список облигаций + rpc Bonds (InstrumentsRequest) returns (BondsResponse); + + //GetBondCoupons — график выплат купонов по облигации + rpc GetBondCoupons (GetBondCouponsRequest) returns (GetBondCouponsResponse); + + //GetBondEvents — события по облигации + rpc GetBondEvents (GetBondEventsRequest) returns (GetBondEventsResponse); + + //CurrencyBy — получить валюту по ее идентификатору + rpc CurrencyBy (InstrumentRequest) returns (CurrencyResponse); + + //Currencies — список валют + rpc Currencies (InstrumentsRequest) returns (CurrenciesResponse); + + //EtfBy — получить инвестиционный фонд по его идентификатору + rpc EtfBy (InstrumentRequest) returns (EtfResponse); + + //Etfs — список инвестиционных фондов + rpc Etfs (InstrumentsRequest) returns (EtfsResponse); + + //FutureBy — получить фьючерс по его идентификатору + rpc FutureBy (InstrumentRequest) returns (FutureResponse); + + //Futures — список фьючерсов + rpc Futures (InstrumentsRequest) returns (FuturesResponse); + + //OptionBy — получить опцион по его идентификатору + rpc OptionBy (InstrumentRequest) returns (OptionResponse); + + //Deprecated Options — список опционов + rpc Options (InstrumentsRequest) returns (OptionsResponse) { + option deprecated = true; + }; + + //OptionsBy — список опционов + rpc OptionsBy (FilterOptionsRequest) returns (OptionsResponse); + + //ShareBy — получить акцию по ее идентификатору + rpc ShareBy (InstrumentRequest) returns (ShareResponse); + + //Shares — список акций + rpc Shares (InstrumentsRequest) returns (SharesResponse); + + //DfaBy — получить цифровой актив по его идентификатору + rpc DfaBy (InstrumentRequest) returns (DfaResponse); + + //Dfas — список цифровых активов + rpc Dfas (DfasRequest) returns (DfasResponse); + + //Indicatives — индикативные инструменты — индексы, товары и другие + rpc Indicatives(IndicativesRequest) returns (IndicativesResponse); + + //GetAccruedInterests — накопленный купонный доход по облигации + rpc GetAccruedInterests (GetAccruedInterestsRequest) returns (GetAccruedInterestsResponse); + + //GetFuturesMargin — размера гарантийного обеспечения по фьючерсам + rpc GetFuturesMargin (GetFuturesMarginRequest) returns (GetFuturesMarginResponse); + + //GetInstrumentBy — основная информация об инструменте + rpc GetInstrumentBy (InstrumentRequest) returns (InstrumentResponse); + + //GetDividends — события выплаты дивидендов по инструменту + rpc GetDividends (GetDividendsRequest) returns (GetDividendsResponse); + + //GetAssetBy — получить актив по его идентификатору + rpc GetAssetBy (AssetRequest) returns (AssetResponse); + + //GetAssets — список активов + //Метод работает для всех инструментов, кроме срочных — фьючерсов и опционов + rpc GetAssets (AssetsRequest) returns (AssetsResponse); + + //GetFavorites — получить список избранных инструментов + rpc GetFavorites (GetFavoritesRequest) returns (GetFavoritesResponse); + + //EditFavorites — отредактировать список избранных инструментов + rpc EditFavorites (EditFavoritesRequest) returns (EditFavoritesResponse); + + //CreateFavoriteGroup — создать новую группу избранных инструментов + rpc CreateFavoriteGroup (CreateFavoriteGroupRequest) returns (CreateFavoriteGroupResponse); + + //DeleteFavoriteGroup — удалить группу избранных инструментов + rpc DeleteFavoriteGroup (DeleteFavoriteGroupRequest) returns (DeleteFavoriteGroupResponse); + + //GetFavoriteGroups — список групп избранных инструментов + rpc GetFavoriteGroups (GetFavoriteGroupsRequest) returns (GetFavoriteGroupsResponse); + + //GetCountries — список стран + rpc GetCountries (GetCountriesRequest) returns (GetCountriesResponse); + + //FindInstrument — найти инструмент + rpc FindInstrument (FindInstrumentRequest) returns (FindInstrumentResponse); + + //GetBrands — список брендов + rpc GetBrands(GetBrandsRequest) returns (GetBrandsResponse); + + //GetBrandBy — получить бренд по его идентификатору + rpc GetBrandBy(GetBrandRequest) returns (Brand); + + //GetAssetFundamentals — фундаментальные показатели по активу + rpc GetAssetFundamentals(GetAssetFundamentalsRequest) returns (GetAssetFundamentalsResponse); + + //GetAssetReports — расписания выхода отчетностей эмитентов + rpc GetAssetReports(GetAssetReportsRequest) returns (GetAssetReportsResponse); + + //GetConsensusForecasts — мнения аналитиков по инструменту + rpc GetConsensusForecasts(GetConsensusForecastsRequest) returns (GetConsensusForecastsResponse); + + //GetForecastBy — прогнозы инвестдомов по инструменту + rpc GetForecastBy(GetForecastRequest) returns (GetForecastResponse); + + //GetRiskRates — ставки риска по инструменту + rpc GetRiskRates(RiskRatesRequest) returns (RiskRatesResponse); + + //GetInsiderDeals — сделки инсайдеров по инструментам + rpc GetInsiderDeals(GetInsiderDealsRequest) returns (GetInsiderDealsResponse); + + //StructuredNoteBy — получить структурную ноту по ее идентификатору + rpc StructuredNoteBy (InstrumentRequest) returns (StructuredNoteResponse); + + //StructuredNotes — список структурных нот + rpc StructuredNotes(InstrumentsRequest) returns (StructuredNotesResponse); + + //News — получение актуальных новостей + rpc News(NewsRequest) returns (NewsResponse); +} + +//Запрос расписания торгов. +message TradingSchedulesRequest { + optional string exchange = 1; //Наименование биржи или расчетного календаря.
Если не передается, возвращается информация по всем доступным торговым площадкам. + optional google.protobuf.Timestamp from = 2; //Начало периода по UTC. + optional google.protobuf.Timestamp to = 3; //Окончание периода по UTC. +} + +//Список торговых площадок. +message TradingSchedulesResponse { + repeated TradingSchedule exchanges = 1; // Список торговых площадок и режимов торгов. +} + +//Данные по торговой площадке. +message TradingSchedule { + string exchange = 1; // Наименование торговой площадки. + repeated TradingDay days = 2; // Массив с торговыми и неторговыми днями. +} + +//Информация о времени торгов. +message TradingDay { + reserved 5, 6; + google.protobuf.Timestamp date = 1; // Дата. + bool is_trading_day = 2; // Признак торгового дня на бирже. + google.protobuf.Timestamp start_time = 3; // Время начала торгов по UTC. + google.protobuf.Timestamp end_time = 4; // Время окончания торгов по UTC. + google.protobuf.Timestamp opening_auction_start_time = 7; // Время начала аукциона открытия по UTC. + google.protobuf.Timestamp closing_auction_end_time = 8; // Время окончания аукциона закрытия по UTC. + google.protobuf.Timestamp evening_opening_auction_start_time = 9; // Время начала аукциона открытия вечерней сессии по UTC. + google.protobuf.Timestamp evening_start_time = 10; // Время начала вечерней сессии по UTC. + google.protobuf.Timestamp evening_end_time = 11; // Время окончания вечерней сессии по UTC. + google.protobuf.Timestamp clearing_start_time = 12; // Время начала основного клиринга по UTC. + google.protobuf.Timestamp clearing_end_time = 13; // Время окончания основного клиринга по UTC. + google.protobuf.Timestamp premarket_start_time = 14; // Время начала премаркета по UTC. + google.protobuf.Timestamp premarket_end_time = 15; // Время окончания премаркета по UTC. + google.protobuf.Timestamp closing_auction_start_time = 16; // Время начала аукциона закрытия по UTC. + google.protobuf.Timestamp opening_auction_end_time = 17; // Время окончания аукциона открытия по UTC. + repeated TradingInterval intervals = 18; // Торговые интервалы. +} + +//Запрос получения инструмента по идентификатору. +message InstrumentRequest { + InstrumentIdType id_type = 1 [(google.api.field_behavior) = REQUIRED]; // Тип идентификатора инструмента. Возможные значения — `figi`, `ticker`. [Подробнее об идентификации инструментов](/invest/intro/intro/faq_identification). + optional string class_code = 2; // Идентификатор `class_code`. Обязательный, если `id_type = ticker`. + string id = 3 [(google.api.field_behavior) = REQUIRED]; // Идентификатор запрашиваемого инструмента. +} + +//Запрос получения инструментов. +message InstrumentsRequest { + optional InstrumentStatus instrument_status = 1; //Статус запрашиваемых инструментов. [Возможные значения](#instrumentstatus). + optional InstrumentExchangeType instrument_exchange = 2; // Тип площадки торговли. [Возможные значения](#instrumentexchangetype). +} +//Параметры фильтрации опционов. +message FilterOptionsRequest { + optional string basic_asset_uid = 1; //Идентификатор базового актива опциона. Обязательный параметр. + optional string basic_asset_position_uid = 2; //Идентификатор позиции базового актива опциона. + optional string basic_instrument_id = 3; //Идентификатор базового инструмента, принимает значение принимает значения figi, instrument_uid или ticker+"_"+classCode. +} + +//Запрос получения актуальных новостей +message NewsRequest { + optional int64 cursor = 1; //Идентификатор элемента, с которого начать формировать ответ. + optional int32 limit = 2; //Лимит количества новостей в ответе. По умолчанию 1000. +} + +//Информация об облигации. +message BondResponse { + Bond instrument = 1; // Информация об облигации. +} + +//Список облигаций. +message BondsResponse { + repeated Bond instruments = 1; //Массив облигаций. +} + +//Запрос купонов по облигации. +message GetBondCouponsRequest { + string figi = 1 [deprecated = true]; //FIGI-идентификатор инструмента. + optional google.protobuf.Timestamp from = 2; //Начало запрашиваемого периода по UTC. Фильтрация по `coupon_date` — дата выплаты купона. + optional google.protobuf.Timestamp to = 3; //Окончание запрашиваемого периода по UTC. Фильтрация по `coupon_date` — дата выплаты купона. + string instrument_id = 4 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`. +} + +//Купоны по облигации. +message GetBondCouponsResponse { + repeated Coupon events = 1; +} + +//События по облигации. +message GetBondEventsRequest { + optional google.protobuf.Timestamp from = 2; //Начало запрашиваемого периода по UTC. + optional google.protobuf.Timestamp to = 3; //Окончание запрашиваемого периода по UTC. + string instrument_id = 4 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента — `figi` или `instrument_uid`. + EventType type = 5; //Тип события + + enum EventType { + EVENT_TYPE_UNSPECIFIED = 0; //Неопределенное значение. + EVENT_TYPE_CPN = 1; // Купон. + EVENT_TYPE_CALL = 2; // Опцион (оферта). + EVENT_TYPE_MTY = 3;// Погашение. + EVENT_TYPE_CONV = 4; // Конвертация. + } +} + +//Объект передачи информации о событии облигации. +message GetBondEventsResponse { + repeated BondEvent events = 1; + message BondEvent { + string instrument_id = 2; // Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`. + int32 event_number = 3; // Номер события для данного типа события. + google.protobuf.Timestamp event_date = 4; // Дата события. + GetBondEventsRequest.EventType event_type = 5; // Тип события. + Quotation event_total_vol = 6; // Полное количество бумаг, задействованных в событии. + google.protobuf.Timestamp fix_date = 7; // Дата фиксации владельцев для участия в событии. + google.protobuf.Timestamp rate_date = 8; // Дата определения даты или факта события. + google.protobuf.Timestamp default_date = 9; // Дата дефолта, если применимо. + google.protobuf.Timestamp real_pay_date = 10; // Дата реального исполнения обязательства. + google.protobuf.Timestamp pay_date = 11; // Дата выплаты. + MoneyValue pay_one_bond = 12; // Выплата на одну облигацию. + MoneyValue money_flow_val = 13; // Выплаты на все бумаги, задействованные в событии. + string execution = 14; // Признак исполнения. + string operation_type = 15; // Тип операции. + Quotation value = 16; // Стоимость операции — ставка купона, доля номинала, цена выкупа или коэффициент конвертации. + string note = 17; // Примечание. + string convert_to_fin_tool_id = 18; // ID выпуска бумаг, в который произведена конвертация (для конвертаций). + google.protobuf.Timestamp coupon_start_date = 19; // Начало купонного периода. + google.protobuf.Timestamp coupon_end_date = 20; // Окончание купонного периода. + int32 coupon_period = 21; // Купонный период. + Quotation coupon_interest_rate = 22; // Ставка купона, процентов годовых. + } +} + + + +//Объект передачи информации о купоне облигации. +message Coupon { + string figi = 1; //FIGI-идентификатор инструмента. + google.protobuf.Timestamp coupon_date = 2; //Дата выплаты купона. + int64 coupon_number = 3; //Номер купона. + google.protobuf.Timestamp fix_date = 4; //Дата фиксации реестра для выплаты купона — опционально. + MoneyValue pay_one_bond = 5; //Выплата на одну облигацию. + CouponType coupon_type = 6; //Тип купона. + google.protobuf.Timestamp coupon_start_date = 7; //Начало купонного периода. + google.protobuf.Timestamp coupon_end_date = 8; //Окончание купонного периода. + int32 coupon_period = 9; //Купонный период в днях. +} + +//Тип купонов. +enum CouponType { + COUPON_TYPE_UNSPECIFIED = 0; //Неопределенное значение. + COUPON_TYPE_CONSTANT = 1; //Постоянный. + COUPON_TYPE_FLOATING = 2; //Плавающий. + COUPON_TYPE_DISCOUNT = 3; //Дисконт. + COUPON_TYPE_MORTGAGE = 4; //Ипотечный. + COUPON_TYPE_FIX = 5; //Фиксированный. + COUPON_TYPE_VARIABLE = 6; //Переменный. + COUPON_TYPE_OTHER = 7; //Прочее. +} + +//Данные по валюте. +message CurrencyResponse { + Currency instrument = 1; // Информация о валюте. +} + +//Данные по валютам. +message CurrenciesResponse { + repeated Currency instruments = 1; //Массив валют. +} + +//Данные по фонду. +message EtfResponse { + Etf instrument = 1; // Информация о фонде. +} + +//Данные по фондам. +message EtfsResponse { + repeated Etf instruments = 1; //Массив фондов. +} + +//Данные по фьючерсу. +message FutureResponse { + Future instrument = 1; // Информация о фьючерсу. +} + +//Данные по фьючерсам. +message FuturesResponse { + repeated Future instruments = 1; //Массив фьючерсов. +} + +//Данные по опциону. +message OptionResponse { + Option instrument = 1; // Информация по опциону. +} + +//Данные по опционам. +message OptionsResponse { + repeated Option instruments = 1; //Массив данных по опциону. +} + +//Опцион. +message Option { + string uid = 1; //Уникальный идентификатор инструмента. + string position_uid = 2; //Уникальный идентификатор позиции. + string ticker = 3; //Тикер инструмента. + string class_code = 4; //Класс-код. + string basic_asset_position_uid = 5; //Уникальный идентификатор позиции основного инструмента. + + SecurityTradingStatus trading_status = 21; //Текущий режим торгов инструмента. + RealExchange real_exchange = 31; //Реальная площадка исполнения расчетов (биржа). + OptionDirection direction = 41; //Направление опциона. + OptionPaymentType payment_type = 42; //Тип расчетов по опциону. + OptionStyle style = 43; //Стиль опциона. + OptionSettlementType settlement_type = 44; //Способ исполнения опциона. + + string name = 101; //Название инструмента. + string currency = 111; //Валюта. + string settlement_currency = 112; //Валюта, в которой оценивается контракт. + string asset_type = 131; //Тип актива. + string basic_asset = 132; //Основной актив. + string exchange = 141; // Tорговая площадка (секция биржи). + string country_of_risk = 151; //Код страны рисков. + string country_of_risk_name = 152; //Наименование страны рисков. + string sector = 161; //Сектор экономики. + BrandData brand = 162; // Информация о бренде. + + int32 lot = 201; //Количество бумаг в лоте. + Quotation basic_asset_size = 211; //Размер основного актива. + Quotation klong = 221 [deprecated = true]; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation kshort = 222 [deprecated = true]; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation dlong = 223; //Ставка риска начальной маржи для КСУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort = 224; //Ставка риска начальной маржи для КСУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dlong_min = 225; //Ставка риска начальной маржи для КПУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_min = 226; //Ставка риска начальной маржи для КПУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation min_price_increment = 231; //Минимальный шаг цены. + MoneyValue strike_price = 241; //Цена страйка. + + Quotation dlong_client = 290; //Ставка риска в лонг с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_client = 291; //Ставка риска в шорт с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + + google.protobuf.Timestamp expiration_date = 301; //Дата истечения срока в формате UTC. + google.protobuf.Timestamp first_trade_date = 311; //Дата начала обращения контракта в формате UTC. + google.protobuf.Timestamp last_trade_date = 312; //Дата исполнения в формате UTC. + google.protobuf.Timestamp first_1min_candle_date = 321; //Дата первой минутной свечи в формате UTC. + google.protobuf.Timestamp first_1day_candle_date = 322; //Дата первой дневной свечи в формате UTC. + + bool short_enabled_flag = 401; //Признак доступности для операций шорт. + bool for_iis_flag = 402; //Возможность покупки или продажи на ИИС. + bool otc_flag = 403; //Флаг, используемый ранее для определения внебиржевых инструментов. На данный момент не используется для торгуемых через API инструментов. Может использоваться как фильтр для операций, совершавшихся некоторое время назад на ОТС площадке. + bool buy_available_flag = 404; //Признак доступности для покупки. + bool sell_available_flag = 405; //Признак доступности для продажи. + bool for_qual_investor_flag = 406; //Флаг, отображающий доступность торговли инструментом только для квалифицированных инвесторов. + bool weekend_flag = 407; //Флаг, отображающий доступность торговли инструментом по выходным. + bool blocked_tca_flag = 408; //Флаг заблокированного ТКС. + bool api_trade_available_flag = 409; //Возможность торговать инструментом через API. + repeated string required_tests = 410; //Тесты, которые необходимо пройти клиенту, чтобы совершать сделки по инструменту. +} + +//Тип опциона по направлению сделки. +enum OptionDirection { + OPTION_DIRECTION_UNSPECIFIED = 0; //Тип не определен. + OPTION_DIRECTION_PUT = 1; //Опцион на продажу. + OPTION_DIRECTION_CALL = 2; //Опцион на покупку. +} + +//Тип расчетов по опциону. +enum OptionPaymentType { + OPTION_PAYMENT_TYPE_UNSPECIFIED = 0; //Тип не определен. + OPTION_PAYMENT_TYPE_PREMIUM = 1; //Опционы с использованием премии в расчетах. + OPTION_PAYMENT_TYPE_MARGINAL = 2; //Маржируемые опционы. +} + +//Тип опциона по стилю. +enum OptionStyle { + OPTION_STYLE_UNSPECIFIED = 0; //Тип не определен. + OPTION_STYLE_AMERICAN = 1; //Американский опцион. + OPTION_STYLE_EUROPEAN = 2; //Европейский опцион. +} + +//Тип опциона по способу исполнения. +enum OptionSettlementType { + OPTION_EXECUTION_TYPE_UNSPECIFIED = 0; //Тип не определен. + OPTION_EXECUTION_TYPE_PHYSICAL_DELIVERY = 1; // Поставочный тип опциона. + OPTION_EXECUTION_TYPE_CASH_SETTLEMENT = 2; //Расчетный тип опциона. +} + +//Данные по акции. +message ShareResponse { + Share instrument = 1; // Информация об акции. +} + +//Данные по акциям. +message SharesResponse { + repeated Share instruments = 1; //Массив акций. +} + +//Данные по структурной ноте. +message StructuredNoteResponse { + StructuredNote instrument = 1; // Информация о структурной ноте. +} + +//Данные по структурным нотам. +message StructuredNotesResponse { + repeated StructuredNote instruments = 1; //Массив структурных нот. +} + +//Данные по актуальным новостям. +message NewsResponse { + bool has_next = 1; //Признак, есть ли еще новости. + optional int64 next_cursor = 2; //Следующий курсор. + repeated NewsItem items = 3; //Массив новостей. +} + +//Объект новости. +message NewsItem { + int64 id = 1; //Уникальный идентификатор новости. + string source = 2; //Источник новости. + string title = 3; //Заголовок новости. + string content = 4; //Содержание новости. + optional string summary = 5; //Обобщенная информация. + repeated Table tables = 6; //Табличные данные. + repeated NewsInstrument instrument_id = 7; //Инструменты из новости. + bool priority = 8; //Флаг, указывающий, важная ли новость. + google.protobuf.Timestamp ts = 9;//Время новости. +} + +//Объект табличных данных. +message Table { + string table = 1; //Таблица. +} + +//Объект инструмента из новости. +message NewsInstrument { + NewsInstrumentInfo instrument = 1; //Информация по инструменту. +} + +//Объект информации по инструменту из новости. +message NewsInstrumentInfo { + string instrument_uid = 1; //Уникальный идентификатор инструмента. + string ticker = 2; //Тикер инструмента. + string class_code = 3; //Класс-код (секция торгов). +} + +//Объект передачи информации об облигации. +message Bond { + string figi = 1; //FIGI-идентификатор инструмента. + string ticker = 2; //Тикер инструмента. + string class_code = 3; //Класс-код (секция торгов). + string isin = 4; //ISIN-идентификатор инструмента. + int32 lot = 5; //Лотность инструмента. Возможно совершение операций только на количества ценной бумаги, кратные параметру `lot`. [Подробнее](./glossary#lot). + string currency = 6; //Валюта расчетов. + + Quotation klong = 7 [deprecated = true]; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation kshort = 8 [deprecated = true]; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation dlong = 9; //Ставка риска начальной маржи для КСУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort = 10; //Ставка риска начальной маржи для КСУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dlong_min = 11; // Ставка риска начальной маржи для КПУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_min = 12; //Ставка риска начальной маржи для КПУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + bool short_enabled_flag = 13; //Признак доступности для операций в шорт. + string name = 15; //Название инструмента. + string exchange = 16; //Tорговая площадка (секция биржи). + + int32 coupon_quantity_per_year = 17; //Количество выплат по купонам в год. + google.protobuf.Timestamp maturity_date = 18; //Дата погашения облигации по UTC. + MoneyValue nominal = 19; //Номинал облигации. + MoneyValue initial_nominal = 20; //Первоначальный номинал облигации. + + google.protobuf.Timestamp state_reg_date = 21; //Дата выпуска облигации по UTC. + google.protobuf.Timestamp placement_date = 22; //Дата размещения по UTC. + MoneyValue placement_price = 23; //Цена размещения. + MoneyValue aci_value = 24; //Значение НКД (накопленного купонного дохода) на дату. + + string country_of_risk = 25; //Код страны риска — то есть страны, в которой компания ведет основной бизнес. + string country_of_risk_name = 26; //Наименование страны риска — то есть страны, в которой компания ведет основной бизнес. + string sector = 27; //Сектор экономики. + string issue_kind = 28; //Форма выпуска. Возможные значения:
**documentary** — документарная;
**non_documentary** — бездокументарная. + int64 issue_size = 29; //Размер выпуска. + int64 issue_size_plan = 30; //Плановый размер выпуска. + + SecurityTradingStatus trading_status = 31; //Текущий режим торгов инструмента. + bool otc_flag = 32; //Флаг, используемый ранее для определения внебиржевых инструментов. На данный момент не используется для торгуемых через API инструментов. Может использоваться как фильтр для операций, совершавшихся некоторое время назад на ОТС площадке. + bool buy_available_flag = 33; //Признак доступности для покупки. + bool sell_available_flag = 34; //Признак доступности для продажи. + bool floating_coupon_flag = 35; //Признак облигации с плавающим купоном. + bool perpetual_flag = 36; //Признак бессрочной облигации. + bool amortization_flag = 37; //Признак облигации с амортизацией долга. + Quotation min_price_increment = 38; //Шаг цены. + bool api_trade_available_flag = 39; //Параметр указывает на возможность торговать инструментом через API. + + string uid = 40; //Уникальный идентификатор инструмента. + RealExchange real_exchange = 41; //Реальная площадка исполнения расчетов. (биржа) + string position_uid = 42; //Уникальный идентификатор позиции инструмента. + string asset_uid = 43; //Уникальный идентификатор актива. + + repeated string required_tests = 44; //Тесты, которые необходимо пройти клиенту, чтобы совершать сделки по инструменту. + + bool for_iis_flag = 51; //Признак доступности для ИИС. + bool for_qual_investor_flag = 52; //Флаг, отображающий доступность торговли инструментом только для квалифицированных инвесторов. + bool weekend_flag = 53; //Флаг, отображающий доступность торговли инструментом по выходным. + bool blocked_tca_flag = 54; //Флаг заблокированного ТКС. + bool subordinated_flag = 55; //Признак субординированной облигации. + bool liquidity_flag = 56; //Флаг достаточной ликвидности. + google.protobuf.Timestamp first_1min_candle_date = 61; //Дата первой минутной свечи. + google.protobuf.Timestamp first_1day_candle_date = 62; //Дата первой дневной свечи. + RiskLevel risk_level = 63; //Уровень риска. + BrandData brand = 64; // Информация о бренде. + BondType bond_type = 65; // Тип облигации. + google.protobuf.Timestamp call_date = 69; // Дата оферты. + + Quotation dlong_client = 90; //Ставка риска в лонг с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_client = 91; //Ставка риска в шорт с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + +} + +//Объект передачи информации о валюте. +message Currency { + string figi = 1; //FIGI-идентификатор инструмента. + string ticker = 2; //Тикер инструмента. + string class_code = 3; //Класс-код (секция торгов). + string isin = 4; //ISIN-идентификатор инструмента. + int32 lot = 5; //Лотность инструмента. Возможно совершение операций только на количества ценной бумаги, кратные параметру `lot`. [Подробнее](./glossary#lot). + string currency = 6; //Валюта расчетов. + + Quotation klong = 7 [deprecated = true]; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation kshort = 8 [deprecated = true]; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation dlong = 9; //Ставка риска начальной маржи для КСУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort = 10; //Ставка риска начальной маржи для КСУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dlong_min = 11; //Ставка риска начальной маржи для КПУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_min = 12; //Ставка риска начальной маржи для КПУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + bool short_enabled_flag = 13; //Признак доступности для операций в шорт. + string name = 15; //Название инструмента. + string exchange = 16; //Tорговая площадка (секция биржи). + + MoneyValue nominal = 17; //Номинал. + + string country_of_risk = 18; //Код страны риска — то есть страны, в которой компания ведет основной бизнес. + string country_of_risk_name = 19; //Наименование страны риска — то есть страны, в которой компания ведет основной бизнес. + + SecurityTradingStatus trading_status = 20; //Текущий режим торгов инструмента. + bool otc_flag = 21; //Флаг, используемый ранее для определения внебиржевых инструментов. На данный момент не используется для торгуемых через API инструментов. Может использоваться как фильтр для операций, совершавшихся некоторое время назад на ОТС площадке. + bool buy_available_flag = 22; //Признак доступности для покупки. + bool sell_available_flag = 23; //Признак доступности для продажи. + string iso_currency_name = 24; //Строковый ISO-код валюты. + Quotation min_price_increment = 25; //Шаг цены. + bool api_trade_available_flag = 26; //Параметр указывает на возможность торговать инструментом через API. + + string uid = 27; //Уникальный идентификатор инструмента. + RealExchange real_exchange = 28; //Реальная площадка исполнения расчетов (биржа). + string position_uid = 29; //Уникальный идентификатор позиции инструмента. + + repeated string required_tests = 30; //Тесты, которые необходимо пройти клиенту, чтобы совершать сделки по инструменту. + + string asset_uid = 31; //Уникальный идентификатор актива. + + bool for_iis_flag = 41; //Признак доступности для ИИС. + bool for_qual_investor_flag = 52; //Флаг, отображающий доступность торговли инструментом только для квалифицированных инвесторов. + bool weekend_flag = 53; //Флаг, отображающий доступность торговли инструментом по выходным. + bool blocked_tca_flag = 54; //Флаг заблокированного ТКС. + google.protobuf.Timestamp first_1min_candle_date = 56; //Дата первой минутной свечи. + google.protobuf.Timestamp first_1day_candle_date = 57; //Дата первой дневной свечи. + BrandData brand = 60; // Информация о бренде. + + Quotation dlong_client = 90; //Ставка риска в лонг с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_client = 91; //Ставка риска в шорт с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + +} + +//Объект передачи информации об инвестиционном фонде. +message Etf { + string figi = 1; //FIGI-идентификатор инструмента. + string ticker = 2; //Тикер инструмента. + string class_code = 3; //Класс-код (секция торгов). + string isin = 4; //ISIN-идентификатор инструмента. + int32 lot = 5; //Лотность инструмента. Возможно совершение операций только на количества ценной бумаги, кратные параметру `lot`. [Подробнее](./glossary#lot). + string currency = 6; //Валюта расчетов. + + Quotation klong = 7 [deprecated = true]; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation kshort = 8 [deprecated = true]; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation dlong = 9; //Ставка риска начальной маржи для КСУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort = 10; //Ставка риска начальной маржи для КСУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dlong_min = 11; //Ставка риска начальной маржи для КПУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_min = 12; //Ставка риска начальной маржи для КПУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + bool short_enabled_flag = 13; //Признак доступности для операций в шорт. + string name = 15; //Название инструмента. + string exchange = 16; //Tорговая площадка (секция биржи). + + Quotation fixed_commission = 17; //Размер фиксированной комиссии фонда. + string focus_type = 18; //Возможные значения:
**equity** — акции;
**fixed_income** — облигации;
**mixed_allocation** — смешанный;
**money_market** — денежный рынок;
**real_estate** — недвижимость;
**commodity** — товары;
**specialty** — специальный;
**private_equity** — private equity;
**alternative_investment** — альтернативные инвестиции. + google.protobuf.Timestamp released_date = 19; //Дата выпуска по UTC. + Quotation num_shares = 20; //Количество паев фонда в обращении. + + string country_of_risk = 21; //Код страны риска — то есть страны, в которой компания ведет основной бизнес. + string country_of_risk_name = 22; //Наименование страны риска — то есть страны, в которой компания ведет основной бизнес. + string sector = 23; //Сектор экономики. + string rebalancing_freq = 24; //Частота ребалансировки. + + SecurityTradingStatus trading_status = 25; //Текущий режим торгов инструмента. + bool otc_flag = 26; //Флаг, используемый ранее для определения внебиржевых инструментов. На данный момент не используется для торгуемых через API инструментов. Может использоваться как фильтр для операций, совершавшихся некоторое время назад на ОТС площадке. + bool buy_available_flag = 27; //Признак доступности для покупки. + bool sell_available_flag = 28; //Признак доступности для продажи. + Quotation min_price_increment = 29; //Шаг цены. + bool api_trade_available_flag = 30; //Параметр указывает на возможность торговать инструментом через API. + + string uid = 31; //Уникальный идентификатор инструмента. + RealExchange real_exchange = 32; //Реальная площадка исполнения расчетов (биржа). + string position_uid = 33; //Уникальный идентификатор позиции инструмента. + string asset_uid = 34; //Уникальный идентификатор актива. + InstrumentExchangeType instrument_exchange = 35; //Тип площадки торговли. + + repeated string required_tests = 36; //Тесты, которые необходимо пройти клиенту, чтобы совершать сделки по инструменту. + + bool for_iis_flag = 41; //Признак доступности для ИИС. + bool for_qual_investor_flag = 42; //Флаг, отображающий доступность торговли инструментом только для квалифицированных инвесторов. + bool weekend_flag = 43; //ФлагФлаг, отображающий доступность торговли инструментом по выходным. + bool blocked_tca_flag = 44; //Флаг заблокированного ТКС. + bool liquidity_flag = 45; //Флаг достаточной ликвидности. + google.protobuf.Timestamp first_1min_candle_date = 56; //Дата первой минутной свечи. + google.protobuf.Timestamp first_1day_candle_date = 57; //Дата первой дневной свечи. + BrandData brand = 60; // Информация о бренде. + + Quotation dlong_client = 90; //Ставка риска в лонг с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_client = 91; //Ставка риска в шорт с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + +} + +//Объект передачи информации о фьючерсе. +message Future { + string figi = 1; //FIGI-идентификатор инструмента. + string ticker = 2; //Тикер инструмента. + string class_code = 3; //Класс-код (секция торгов). + int32 lot = 4; //Лотность инструмента. Возможно совершение операций только на количества ценной бумаги, кратные параметру `lot`. [Подробнее](./glossary#lot). + string currency = 5; //Валюта расчетов. + + Quotation klong = 6 [deprecated = true]; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation kshort = 7 [deprecated = true]; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation dlong = 8; //Ставка риска начальной маржи для КСУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort = 9; //Ставка риска начальной маржи для КСУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dlong_min = 10; //Ставка риска начальной маржи для КПУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_min = 11; //Ставка риска начальной маржи для КПУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + bool short_enabled_flag = 12; //Признак доступности для операций шорт. + string name = 13; //Название инструмента. + string exchange = 14; //Tорговая площадка (секция биржи). + + google.protobuf.Timestamp first_trade_date = 15; //Дата начала обращения контракта по UTC. + google.protobuf.Timestamp last_trade_date = 16; //Дата по UTC, до которой возможно проведение операций с фьючерсом. + string futures_type = 17; //Тип фьючерса. Возможные значения:
**physical_delivery** — физические поставки;
**cash_settlement** — денежный эквивалент. + string asset_type = 18; //Тип актива. Возможные значения:
**commodity** — товар;
**currency** — валюта;
**security** — ценная бумага;
**index** — индекс. + string basic_asset = 19; //Основной актив. + Quotation basic_asset_size = 20; //Размер основного актива. + + string country_of_risk = 21; //Код страны риска — то есть страны, в которой компания ведет основной бизнес. + string country_of_risk_name = 22; //Наименование страны риска — то есть страны, в которой компания ведет основной бизнес. + string sector = 23; //Сектор экономики. + google.protobuf.Timestamp expiration_date = 24; //Дата истечения срока в часов поясе UTC. + + SecurityTradingStatus trading_status = 25; //Текущий режим торгов инструмента. + bool otc_flag = 26; //Флаг, используемый ранее для определения внебиржевых инструментов. На данный момент не используется для торгуемых через API инструментов. Может использоваться как фильтр для операций, совершавшихся некоторое время назад на ОТС площадке. + bool buy_available_flag = 27; //Признак доступности для покупки. + bool sell_available_flag = 28; //Признак доступности для продажи. + Quotation min_price_increment = 29; //Шаг цены. + bool api_trade_available_flag = 30; //Параметр указывает на возможность торговать инструментом через API. + + string uid = 31; //Уникальный идентификатор инструмента. + RealExchange real_exchange = 32; //Реальная площадка исполнения расчетов (биржа). + string position_uid = 33; //Уникальный идентификатор позиции инструмента. + string basic_asset_position_uid = 34; //Уникальный идентификатор позиции основного инструмента. + + repeated string required_tests = 35; //Тесты, которые необходимо пройти клиенту, чтобы совершать сделки по инструменту. + + bool for_iis_flag = 41; //Признак доступности для ИИС. + bool for_qual_investor_flag = 42; //Флаг, отображающий доступность торговли инструментом только для квалифицированных инвесторов. + bool weekend_flag = 43; //Флаг, отображающий доступность торговли инструментом по выходным. + bool blocked_tca_flag = 44; //Флаг заблокированного ТКС. + google.protobuf.Timestamp first_1min_candle_date = 56; //Дата первой минутной свечи. + google.protobuf.Timestamp first_1day_candle_date = 57; //Дата первой дневной свечи. + + MoneyValue initial_margin_on_buy = 61; //Гарантийное обеспечение при покупке. + MoneyValue initial_margin_on_sell = 62; //Гарантийное обеспечение при продаже. + Quotation min_price_increment_amount = 63; //Стоимость шага цены. + BrandData brand = 64; // Информация о бренде. + + Quotation dlong_client = 90; //Ставка риска в лонг с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_client = 91; //Ставка риска в шорт с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). +} + +//Объект передачи информации об акции. +message Share { + string figi = 1; //FIGI-идентификатор инструмента. + string ticker = 2; //Тикер инструмента. + string class_code = 3; //Класс-код (секция торгов). + string isin = 4; //ISIN-идентификатор инструмента. + int32 lot = 5; //Лотность инструмента. Возможно совершение операций только на количества ценной бумаги, кратные параметру `lot`. [Подробнее](./glossary#lot) + string currency = 6; //Валюта расчетов. + + Quotation klong = 7 [deprecated = true]; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation kshort = 8 [deprecated = true]; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation dlong = 9; //Ставка риска начальной маржи для КСУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort = 10; //Ставка риска начальной маржи для КСУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dlong_min = 11; //Ставка риска начальной маржи для КПУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_min = 12; //Ставка риска начальной маржи для КПУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + bool short_enabled_flag = 13; //Признак доступности для операций в шорт. + string name = 15; //Название инструмента. + string exchange = 16; //Tорговая площадка (секция биржи). + + google.protobuf.Timestamp ipo_date = 17; //Дата IPO акции по UTC. + int64 issue_size = 18; //Размер выпуска. + + string country_of_risk = 19; //Код страны риска — то есть страны, в которой компания ведет основной бизнес. + string country_of_risk_name = 20; //Наименование страны риска — то есть страны, в которой компания ведет основной бизнес. + string sector = 21; //Сектор экономики. + int64 issue_size_plan = 22; //Плановый размер выпуска. + MoneyValue nominal = 23; //Номинал. + + SecurityTradingStatus trading_status = 25; //Текущий режим торгов инструмента. + bool otc_flag = 26; //Флаг, используемый ранее для определения внебиржевых инструментов. На данный момент не используется для торгуемых через API инструментов. Может использоваться как фильтр для операций, совершавшихся некоторое время назад на ОТС площадке. + bool buy_available_flag = 27; //Признак доступности для покупки. + bool sell_available_flag = 28; //Признак доступности для продажи. + bool div_yield_flag = 29; //Признак наличия дивидендной доходности. + ShareType share_type = 30; //Тип акции. Возможные значения — `[ShareType](./instruments#sharetype)`. + Quotation min_price_increment = 31; //Шаг цены. + bool api_trade_available_flag = 32; //Возможность торговать инструментом через API. + + string uid = 33; //Уникальный идентификатор инструмента. + RealExchange real_exchange = 34; //Реальная площадка исполнения расчетов (биржа). + string position_uid = 35; //Уникальный идентификатор позиции инструмента. + string asset_uid = 36; //Уникальный идентификатор актива. + InstrumentExchangeType instrument_exchange = 37; //Тип площадки торговли. + + repeated string required_tests = 38; //Тесты, которые необходимо пройти клиенту, чтобы совершать сделки по инструменту. + + bool for_iis_flag = 46; //Признак доступности для ИИС. + bool for_qual_investor_flag = 47; //Флаг, отображающий доступность торговли инструментом только для квалифицированных инвесторов. + bool weekend_flag = 48; //Флаг, отображающий доступность торговли инструментом по выходным. + bool blocked_tca_flag = 49; //Флаг заблокированного ТКС. + bool liquidity_flag = 50; //Флаг достаточной ликвидности. + google.protobuf.Timestamp first_1min_candle_date = 56; //Дата первой минутной свечи. + google.protobuf.Timestamp first_1day_candle_date = 57; //Дата первой дневной свечи. + BrandData brand = 60; // Информация о бренде. + + Quotation dlong_client = 90; //Ставка риска в лонг с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_client = 91; //Ставка риска в шорт с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). +} + +//Объект передачи информации о структурной ноте. +message StructuredNote { + string uid = 1; //Уникальный идентификатор инструмента. + string figi = 2; //FIGI-идентификатор инструмента. + string ticker = 3; //Тикер инструмента. + string class_code = 4; //Класс-код (секция торгов). + string isin = 5; //ISIN-идентификатор инструмента. + string name = 6; //Название инструмента. + string asset_uid = 7; //Уникальный идентификатор актива. + string position_uid = 8; //Уникальный идентификатор позиции. + Quotation min_price_increment = 9; //Шаг цены. + int32 lot = 10; //Лотность инструмента. + MoneyValue nominal = 11; //Номинал. + string currency = 12; //Валюта расчетов. + google.protobuf.Timestamp maturity_date = 13; //Дата погашения облигации в формате UTC. + google.protobuf.Timestamp placement_date = 14; //Дата размещения в формате UTC. + string issue_kind = 15; //Форма выпуска. + int32 issue_size = 16; //Размер выпуска. + int32 issue_size_plan = 17; //Плановый размер выпуска. + Quotation dlong_client = 18; //Ставка риска клиента по инструменту лонг. + Quotation dshort_client = 19; //Ставка риска клиента по инструменту шорт. + bool short_enabled_flag = 20; //Признак доступности для операций в шорт. + string exchange = 21; //Торговая площадка (секция биржи). + SecurityTradingStatus trading_status = 22; //Текущий режим торгов инструмента. + bool api_trade_available_flag = 23; //Признак доступности торгов по бумаге через API. + bool buy_available_flag = 24; //Признак доступности для покупки. + bool sell_available_flag = 25; //Признак доступности для продажи. + bool limit_order_available_flag = 26; //Признак доступности выставления лимитной заявки по инструменту. + bool market_order_available_flag = 27; //Признак доступности выставления рыночной заявки по инструменту. + bool bestprice_order_available_flag = 28; //Признак доступности выставления bestprice заявки по инструменту. + bool weekend_flag = 29; //Флаг отображающий доступность торговли инструментом по выходным. + bool liquidity_flag = 30; //Флаг достаточной ликвидности. + bool for_iis_flag = 31; //Возможность покупки/продажи на ИИС. + bool for_qual_investor_flag = 32; //Флаг отображающий доступность торговли инструментом только для квалифицированных инвесторов. + bool pawnshop_list_flag = 33; //Признак ФИ, включенного в ломбардный список. + RealExchange real_exchange = 34; //Реальная площадка исполнения расчётов. + google.protobuf.Timestamp first_1min_candle_date = 35; //Дата первой минутной свечи. + google.protobuf.Timestamp first_1day_candle_date = 36; //Дата первой дневной свечи. + string borrow_name = 37; //Название заемщика. + string type = 38; //Тип структурной ноты. + LogicPortfolio logic_portfolio = 39; //Стратегия портфеля. + AssetType asset_type = 40; //Тип базового актива. + repeated BasicAsset basic_assets = 41; //Базовые активы, входящие в ноту. + Quotation safety_barrier = 42; //Барьер сохранности (в процентах). + string coupon_period_base = 43; //Базис расчета НКД. + ObservationPrinciple observation_principle = 44; //Принцип наблюдений. + string observation_frequency = 45; //Частота наблюдений. + google.protobuf.Timestamp initial_price_fixing_date = 46; //Дата фиксации цен базовых активов. + repeated Yield yield = 47; //Доходность по ноте в годовом выражении. + bool coupon_saving_flag = 48; //Признак сохранения купонов. + string sector = 49; //Сектор экономики. + string country_of_risk = 50; //Код страны рисков. + string country_of_risk_name = 51; //Наименование страны рисков. + string logo_name = 52; //Имя файла логотипа эмитента. + repeated string required_tests = 53; //Тесты, которые необходимо пройти клиенту, чтобы совершать покупки по бумаге. + + //Базовый актив. + message BasicAsset { + string uid = 1; //Уникальный идентификатор базового актива. + AssetType type = 2; //Тип базового актива. + Quotation initial_price = 3; //Начальная цена базового актива. + } + + //Доходность. + message Yield { + YieldType type = 1; //Тип доходности. + Quotation value = 2; //Значение доходности. + } + + //Стратегия портфеля. + enum LogicPortfolio { + LOGIC_PORTFOLIO_UNSPECIFIED = 0; //Стратегия портфеля не определена. + LOGIC_PORTFOLIO_VOLATILITY = 1; //Волатильность. + LOGIC_PORTFOLIO_CORRELATION = 2; //Корреляция. + } + + //Принцип наблюдений. + enum ObservationPrinciple { + OBSERVATION_PRINCIPLE_UNSPECIFIED = 0; //Принцип наблюдений не определен. + OBSERVATION_PRINCIPLE_WORST_BASIC_ASSET = 1; //По худшему базовому активу. + OBSERVATION_PRINCIPLE_BEST_BASIC_ASSET = 2; //По лучшему базовому активу. + OBSERVATION_PRINCIPLE_AVERAGE_OF_BASIC_ASSETS = 3; //Среднее значение по базовым активам. + OBSERVATION_PRINCIPLE_SINGLE_BASIC_ASSET_PERFORMANCE = 4; //Динамика актива (только если у ноты один базовый актив). + } + + //Тип доходности. + enum YieldType { + YIELD_TYPE_UNSPECIFIED = 0; //Тип доходности не определен. + YIELD_TYPE_GUARANTED_COUPON = 1; //Гарантированный купон. + YIELD_TYPE_CONDITIONAL_COUPON = 2; //Условный купон. + YIELD_TYPE_PARTICIPATION = 3; //Участие в росте. + } +} + +//Запрос НКД по облигации. +message GetAccruedInterestsRequest { + string figi = 1 [deprecated = true]; //FIGI-идентификатор инструмента. + google.protobuf.Timestamp from = 2 [(google.api.field_behavior) = REQUIRED]; //Начало запрашиваемого периода по UTC. + google.protobuf.Timestamp to = 3 [(google.api.field_behavior) = REQUIRED]; //Окончание запрашиваемого периода по UTC. + string instrument_id = 4 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`. +} + +//НКД облигации. +message GetAccruedInterestsResponse { + repeated AccruedInterest accrued_interests = 1; //Массив операций начисления купонов. +} + +//Операция начисления купонов. +message AccruedInterest { + google.protobuf.Timestamp date = 1; //Дата и время выплаты по UTC. + Quotation value = 2; //Величина выплаты. + Quotation value_percent = 3; //Величина выплаты в процентах от номинала. + Quotation nominal = 4; //Номинал облигации. +} + +//Запрос информации о фьючерсе +message GetFuturesMarginRequest { + string figi = 1 [deprecated = true]; // Идентификатор инструмента. + string instrument_id = 4 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`. +} + +//Данные по фьючерсу +message GetFuturesMarginResponse { + MoneyValue initial_margin_on_buy = 1; //Гарантийное обеспечение при покупке. + MoneyValue initial_margin_on_sell = 2; //Гарантийное обеспечение при продаже. + Quotation min_price_increment = 3; //Шаг цены. + Quotation min_price_increment_amount = 4; //Стоимость шага цены. +} + +//Тип идентификатора инструмента. [Подробнее об идентификации инструментов](/invest/intro/intro/faq_identification). +enum InstrumentIdType { + INSTRUMENT_ID_UNSPECIFIED = 0; //Значение не определено. + INSTRUMENT_ID_TYPE_FIGI = 1; //FIGI. + INSTRUMENT_ID_TYPE_TICKER = 2; //Ticker. + INSTRUMENT_ID_TYPE_UID = 3; //Уникальный идентификатор. + INSTRUMENT_ID_TYPE_POSITION_UID = 4; //Идентификатор позиции. + INSTRUMENT_ID_TYPE_ID = 5; //Универсальный тип идентификатора инструмента. +} + +//Данные по инструменту. +message InstrumentResponse { + Instrument instrument = 1; // Основная информация об инструменте. +} + +//Объект передачи основной информации об инструменте. +message Instrument { + string figi = 1; //FIGI-идентификатор инструмента. + string ticker = 2; //Тикер инструмента. + string class_code = 3; //Класс-код инструмента. + string isin = 4; //ISIN-идентификатор инструмента. + int32 lot = 5; //Лотность инструмента. Возможно совершение операций только на количества ценной бумаги, кратные параметру `lot`. [Подробнее](./glossary#lot). + string currency = 6; //Валюта расчетов. + + Quotation klong = 7 [deprecated = true]; //Коэффициент ставки риска длинной позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation kshort = 8 [deprecated = true]; //Коэффициент ставки риска короткой позиции по клиенту. 2 – клиент со стандартным уровнем риска (КСУР); 1 – клиент с повышенным уровнем риска (КПУР). + Quotation dlong = 9; //Ставка риска начальной маржи для КСУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort = 10; //Ставка риска начальной маржи для КСУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dlong_min = 11; //Ставка риска начальной маржи для КПУР лонг. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_min = 12; //Ставка риска начальной маржи для КПУР шорт. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + bool short_enabled_flag = 13; //Признак доступности для операций в шорт. + string name = 14; //Название инструмента. + string exchange = 15; //Tорговая площадка (секция биржи). + + string country_of_risk = 16; //Код страны риска — то есть страны, в которой компания ведет основной бизнес. + string country_of_risk_name = 17; //Наименование страны риска — то есть страны, в которой компания ведет основной бизнес. + string instrument_type = 18; //Тип инструмента. + + SecurityTradingStatus trading_status = 19; //Текущий режим торгов инструмента. + bool otc_flag = 20; //Флаг, используемый ранее для определения внебиржевых инструментов. На данный момент не используется для торгуемых через API инструментов. Может использоваться как фильтр для операций, совершавшихся некоторое время назад на ОТС площадке. + bool buy_available_flag = 21; //Признак доступности для покупки. + bool sell_available_flag = 22; //Признак доступности для продажи. + Quotation min_price_increment = 23; //Шаг цены. + bool api_trade_available_flag = 24; //Параметр указывает на возможность торговать инструментом через API. + + string uid = 25; //Уникальный идентификатор инструмента. + RealExchange real_exchange = 26; //Реальная площадка исполнения расчетов (биржа). + string position_uid = 27; //Уникальный идентификатор позиции инструмента. + string asset_uid = 28; //Уникальный идентификатор актива. + + repeated string required_tests = 29; //Тесты, которые необходимо пройти клиенту, чтобы совершать сделки по инструменту. + + bool for_iis_flag = 36; //Признак доступности для ИИС. + bool for_qual_investor_flag = 37; //Флаг, отображающий доступность торговли инструментом только для квалифицированных инвесторов. + bool weekend_flag = 38; //Флаг, отображающий доступность торговли инструментом по выходным. + bool blocked_tca_flag = 39; //Флаг заблокированного ТКС. + InstrumentType instrument_kind = 40; //Тип инструмента. + google.protobuf.Timestamp first_1min_candle_date = 56; //Дата первой минутной свечи. + google.protobuf.Timestamp first_1day_candle_date = 57; //Дата первой дневной свечи. + BrandData brand = 60; // Информация о бренде. + + Quotation dlong_client = 490; //Ставка риска в лонг с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + Quotation dshort_client = 491; //Ставка риска в шорт с учетом текущего уровня риска портфеля клиента. [Подробнее про ставки риска](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q5). + +} + +//Запрос дивидендов. +message GetDividendsRequest { + string figi = 1 [deprecated = true]; //FIGI-идентификатор инструмента. + optional google.protobuf.Timestamp from = 2; //Начало запрашиваемого периода по UTC. Фильтрация происходит по параметру `record_date` — дата фиксации реестра. + optional google.protobuf.Timestamp to = 3; //Окончание запрашиваемого периода по UTC. Фильтрация происходит по параметру `record_date` — дата фиксации реестра. + string instrument_id = 4 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`. +} + +//Дивиденды. +message GetDividendsResponse { + repeated Dividend dividends = 1; +} + +//Информация о выплате. +message Dividend { + MoneyValue dividend_net = 1; //Величина дивиденда на 1 ценную бумагу (включая валюту). + google.protobuf.Timestamp payment_date = 2; //Дата фактических выплат по UTC. + google.protobuf.Timestamp declared_date = 3; //Дата объявления дивидендов по UTC. + google.protobuf.Timestamp last_buy_date = 4; //Последний день (включительно) покупки для получения выплаты по UTC. + string dividend_type = 5; //Тип выплаты. Возможные значения: `Regular Cash` – регулярные выплаты, `Cancelled` – выплата отменена, `Daily Accrual` – ежедневное начисление, `Return of Capital` – возврат капитала, прочие типы выплат. + google.protobuf.Timestamp record_date = 6; //Дата фиксации реестра по UTC. + string regularity = 7; //Регулярность выплаты. Возможные значения: `Annual` – ежегодная, `Semi-Anl` – каждые полгода, прочие типы выплат. + MoneyValue close_price = 8; //Цена закрытия инструмента на момент `ex_dividend_date`. + Quotation yield_value = 9; //Величина доходности. + google.protobuf.Timestamp created_at = 10; //Дата и время создания записи по UTC. +} + +//Тип акций. +enum ShareType { + SHARE_TYPE_UNSPECIFIED = 0; //Значение не определено. + SHARE_TYPE_COMMON = 1; //Обыкновенная. + SHARE_TYPE_PREFERRED = 2; //Привилегированная. + SHARE_TYPE_ADR = 3; //Американские депозитарные расписки. + SHARE_TYPE_GDR = 4; //Глобальные депозитарные расписки. + SHARE_TYPE_MLP = 5; //Товарищество с ограниченной ответственностью. + SHARE_TYPE_NY_REG_SHRS = 6; //Акции из реестра Нью-Йорка. + SHARE_TYPE_CLOSED_END_FUND = 7; //Закрытый инвестиционный фонд. + SHARE_TYPE_REIT = 8; //Траст недвижимости. +} + +//Запрос актива по идентификатору. +message AssetRequest { + string id = 1 [(google.api.field_behavior) = REQUIRED]; //UID-идентификатор актива. +} + +//Данные по активу. +message AssetResponse { + AssetFull asset = 1; //Актив. +} + +//Запрос списка активов. +message AssetsRequest { + optional InstrumentType instrument_type = 1; + optional InstrumentStatus instrument_status = 2; //Статус запрашиваемых инструментов. [Возможные значения](#instrumentstatus). + +} + +//Список активов. +message AssetsResponse { + repeated Asset assets = 1; //Активы. +} + +message AssetFull { + string uid = 1; //Уникальный идентификатор актива. + AssetType type = 2; //Тип актива. + string name = 3; //Наименование актива. + string name_brief = 4; //Короткое наименование актива. + string description = 5; //Описание актива. + google.protobuf.Timestamp deleted_at = 6; //Дата и время удаления актива. + repeated string required_tests = 7; //Тестирование клиентов. + oneof ext { + AssetCurrency currency = 8; //Валюта. Обязательно и заполняется только для `type = ASSET_TYPE_CURRENCY`. + AssetSecurity security = 9; //Ценная бумага. Обязательно и заполняется только для `type = ASSET_TYPE_SECURITY`. + } + string gos_reg_code = 10; //Номер государственной регистрации. + string cfi = 11; //Код CFI. + string code_nsd = 12; //Код НРД инструмента. + string status = 13; //Статус актива. + Brand brand = 14; //Бренд. + google.protobuf.Timestamp updated_at = 15; //Дата и время последнего обновления записи. + string br_code = 16; //Код типа ц.б. по классификации Банка России. + string br_code_name = 17; //Наименование кода типа ц.б. по классификации Банка России. + repeated AssetInstrument instruments = 18; //Массив идентификаторов инструментов. +} + +//Информация об активе. +message Asset { + string uid = 1; //Уникальный идентификатор актива. + AssetType type = 2; //Тип актива. + string name = 3; //Наименование актива. + repeated AssetInstrument instruments = 4; //Массив идентификаторов инструментов. +} + +//Тип актива. +enum AssetType { + ASSET_TYPE_UNSPECIFIED = 0; //Тип не определен. + ASSET_TYPE_CURRENCY = 1; //Валюта. + ASSET_TYPE_COMMODITY = 2; //Товар. + ASSET_TYPE_INDEX = 3; //Индекс. + ASSET_TYPE_SECURITY = 4; //Ценная бумага. +} + +//Валюта. +message AssetCurrency { + string base_currency = 1; //ISO-код валюты. +} + +//Ценная бумага. +message AssetSecurity { + string isin = 1; //ISIN-идентификатор ценной бумаги. + string type = 2; //Тип ценной бумаги. + InstrumentType instrument_kind = 10; //Тип инструмента. + oneof ext { + AssetShare share = 3; //Акция. Заполняется только для акций — тип актива `asset.type = ASSET_TYPE_SECURITY` и `security.type = share`. + AssetBond bond = 4; //Облигация. Заполняется только для облигаций — тип актива `asset.type = ASSET_TYPE_SECURITY` и `security.type = bond`. + AssetStructuredProduct sp = 5; //Структурная нота. Заполняется только для структурных продуктов — тип актива `asset.type = ASSET_TYPE_SECURITY` и `security.type = sp`. + AssetEtf etf = 6; // Фонд. Заполняется только для фондов — тип актива `asset.type = ASSET_TYPE_SECURITY` и `security.type = etf`. + AssetClearingCertificate clearing_certificate = 7; // Клиринговый сертификат участия. Заполняется только для клиринговых сертификатов — тип актива `asset.type = ASSET_TYPE_SECURITY` и security.type = `clearing_certificate`. + } +} + +//Акция. +message AssetShare { + ShareType type = 1; //Тип акции. + Quotation issue_size = 2; //Объем выпуска (шт.). + Quotation nominal = 3; //Номинал. + string nominal_currency = 4; //Валюта номинала. + string primary_index = 5; //Индекс (Bloomberg). + Quotation dividend_rate = 6; //Ставка дивиденда (для привилегированных акций). + string preferred_share_type = 7; //Тип привилегированных акций. + google.protobuf.Timestamp ipo_date = 8; //Дата IPO. + google.protobuf.Timestamp registry_date = 9; //Дата регистрации. + bool div_yield_flag = 10; //Признак наличия дивидендной доходности. + string issue_kind = 11; //Форма выпуска ФИ. + google.protobuf.Timestamp placement_date = 12; //Дата размещения акции. + string repres_isin = 13; //ISIN базового актива. + Quotation issue_size_plan = 14; //Объявленное количество, шт. + Quotation total_float = 15; //Количество акций в свободном обращении. +} + +//Облигация. +message AssetBond { + Quotation current_nominal = 1; //Текущий номинал. + string borrow_name = 2; //Наименование заемщика. + Quotation issue_size = 3; //Объем эмиссии облигации (стоимость). + Quotation nominal = 4 ; //Номинал облигации. + string nominal_currency = 5; //Валюта номинала. + string issue_kind = 6; //Форма выпуска облигации. + string interest_kind = 7; //Форма дохода облигации. + int32 coupon_quantity_per_year = 8; //Количество выплат в год. + bool indexed_nominal_flag = 9; //Признак облигации с индексируемым номиналом. + bool subordinated_flag = 10; //Признак субординированной облигации. + bool collateral_flag = 11; //Признак обеспеченной облигации. + bool tax_free_flag = 12; //Признак показывает, что купоны облигации не облагаются налогом — для mass market. + bool amortization_flag = 13; //Признак облигации с амортизацией долга. + bool floating_coupon_flag = 14; //Признак облигации с плавающим купоном. + bool perpetual_flag = 15; //Признак бессрочной облигации. + google.protobuf.Timestamp maturity_date = 16; //Дата погашения облигации. + string return_condition = 17; //Описание и условия получения дополнительного дохода. + google.protobuf.Timestamp state_reg_date = 18; //Дата выпуска облигации. + google.protobuf.Timestamp placement_date = 19; //Дата размещения облигации. + Quotation placement_price = 20; //Цена размещения облигации. + Quotation issue_size_plan = 21; //Объявленное количество, шт. +} + +//Структурная нота. +message AssetStructuredProduct { + string borrow_name = 1; //Наименование заемщика. + Quotation nominal = 2; //Номинал. + string nominal_currency = 3; //Валюта номинала. + StructuredProductType type = 4; //Тип структурной ноты. + string logic_portfolio = 5; //Стратегия портфеля. + AssetType asset_type = 6; //Тип базового актива. + string basic_asset = 7; //Вид базового актива в зависимости от типа базового актива. + Quotation safety_barrier = 8; //Барьер сохранности в процентах. + google.protobuf.Timestamp maturity_date = 9; //Дата погашения. + Quotation issue_size_plan = 10; //Объявленное количество, шт. + Quotation issue_size = 11; //Объем размещения. + google.protobuf.Timestamp placement_date = 12; //Дата размещения ноты. + string issue_kind = 13; //Форма выпуска. +} + +//Тип структурной ноты. +enum StructuredProductType { + SP_TYPE_UNSPECIFIED = 0; //Тип не определен. + SP_TYPE_DELIVERABLE = 1; //Поставочный. + SP_TYPE_NON_DELIVERABLE = 2; //Беспоставочный. +} + +//Фонд. +message AssetEtf { + Quotation total_expense = 1; //Суммарные расходы фонда в процентах. + Quotation hurdle_rate = 2; //Барьерная ставка доходности, после которой фонд имеет право на perfomance fee — в процентах. + Quotation performance_fee = 3; //Комиссия за успешные результаты фонда в процентах. + Quotation fixed_commission = 4; //Фиксированная комиссия за управление в процентах. + string payment_type = 5; //Тип распределения доходов от выплат по бумагам. + bool watermark_flag = 6; //Признак необходимости выхода фонда в плюс для получения комиссии. + Quotation buy_premium = 7; //Премия (надбавка к цене) при покупке доли в фонде — в процентах. + Quotation sell_discount = 8; //Ставка дисконта (вычет из цены) при продаже доли в фонде — в процентах. + bool rebalancing_flag = 9; //Признак ребалансируемости портфеля фонда. + string rebalancing_freq = 10; //Периодичность ребалансировки. + string management_type = 11; //Тип управления. + string primary_index = 12; //Индекс, который реплицирует (старается копировать) фонд. + string focus_type = 13; //База ETF. + bool leveraged_flag = 14; //Признак использования заемных активов (плечо). + Quotation num_share = 15; //Количество акций в обращении. + bool ucits_flag = 16; //Признак обязательства по отчетности перед регулятором. + google.protobuf.Timestamp released_date = 17; //Дата выпуска. + string description = 18; //Описание фонда. + string primary_index_description = 19; //Описание индекса, за которым следует фонд. + string primary_index_company = 20; //Основные компании, в которые вкладывается фонд. + Quotation index_recovery_period = 21; //Срок восстановления индекса после просадки. + string inav_code = 22; //IVAV-код. + bool div_yield_flag = 23; //Признак наличия дивидендной доходности. + Quotation expense_commission = 24; //Комиссия на покрытие расходов фонда в процентах. + Quotation primary_index_tracking_error = 25; //Ошибка следования за индексом в процентах. + string rebalancing_plan = 26; //Плановая ребалансировка портфеля. + string tax_rate = 27; //Ставки налогообложения дивидендов и купонов. + repeated google.protobuf.Timestamp rebalancing_dates = 28; //Даты ребалансировок. + string issue_kind = 29; //Форма выпуска. + Quotation nominal = 30; //Номинал. + string nominal_currency = 31; //Валюта номинала. +} + +//Клиринговый сертификат участия. +message AssetClearingCertificate { + Quotation nominal = 1; //Номинал. + string nominal_currency = 2; //Валюта номинала. +} + +//Бренд. +message Brand { + string uid = 1; //UID-идентификатор бренда. + string name = 2; //Наименование бренда. + string description = 3; //Описание. + string info = 4; //Информация о бренде. + string company = 5; //Компания. + string sector = 6; //Сектор. + string country_of_risk = 7; //Код страны риска. + string country_of_risk_name = 8; //Наименование страны риска. +} + +//Идентификаторы инструмента. +message AssetInstrument { + string uid = 1; //UID-идентификатор инструмента. + string figi = 2; //FIGI-идентификатор инструмента. + string instrument_type = 3; //Тип инструмента. + string ticker = 4; //Тикер инструмента. + string class_code = 5; //Класс-код (секция торгов). + repeated InstrumentLink links = 6; //Массив связанных инструментов. + InstrumentType instrument_kind = 10; //Тип инструмента. + string position_uid = 11; //ID позиции. +} + +//Связь с другим инструментом. +message InstrumentLink { + string type = 1; //Тип связи. + string instrument_uid = 2; //UID-идентификатор связанного инструмента. +} + +//Запрос списка избранных инструментов, входные параметры не требуются. +message GetFavoritesRequest { + optional string group_id = 1; //Уникальный идентификатор группы. +} + +//В ответ передается список избранных инструментов в качестве массива. +message GetFavoritesResponse { + repeated FavoriteInstrument favorite_instruments = 1; //Массив инструментов. + optional string group_id = 2; //Уникальный идентификатор группы. +} + +//Массив избранных инструментов. +message FavoriteInstrument { + string figi = 1; //FIGI-идентификатор инструмента. + string ticker = 2; //Тикер инструмента. + string class_code = 3; //Класс-код инструмента. + string isin = 4; //ISIN-идентификатор инструмента. + string instrument_type = 11; //Тип инструмента. + string name = 12; //Название инструмента. + string uid = 13; //Уникальный идентификатор инструмента. + bool otc_flag = 16; //Флаг, используемый ранее для определения внебиржевых инструментов. На данный момент не используется для торгуемых через API инструментов. Может использоваться как фильтр для операций, совершавшихся некоторое время назад на ОТС площадке. + bool api_trade_available_flag = 17; //Возможность торговать инструментом через API. + InstrumentType instrument_kind = 18; //Тип инструмента. +} + +//Запрос редактирования списка избранных инструментов. +message EditFavoritesRequest { + repeated EditFavoritesRequestInstrument instruments = 1 [(google.api.field_behavior) = REQUIRED]; //Массив инструментов. + EditFavoritesActionType action_type = 6 [(google.api.field_behavior) = REQUIRED]; //Тип действия со списком. + optional string group_id = 7; //Уникальный идентификатор группы. +} + +//Массив инструментов для редактирования списка избранных инструментов. +message EditFavoritesRequestInstrument { + optional string figi = 1 [deprecated = true]; //FIGI-идентификатор инструмента. + string instrument_id = 2 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента — `figi` или `instrument_uid`. +} + +//Тип действия со списком избранных инструментов. +enum EditFavoritesActionType { + EDIT_FAVORITES_ACTION_TYPE_UNSPECIFIED = 0; //Тип не определен. + EDIT_FAVORITES_ACTION_TYPE_ADD = 1; //Добавить в список. + EDIT_FAVORITES_ACTION_TYPE_DEL = 2; //Удалить из списка. +} + +//Результат редактирования списка избранных инструментов. +message EditFavoritesResponse { + repeated FavoriteInstrument favorite_instruments = 1; //Массив инструментов. + optional string group_id = 2; //Уникальный идентификатор группы. +} + +//Запрос создания новой группы избранных инструментов. +message CreateFavoriteGroupRequest { + string group_name = 1 [(google.api.field_behavior) = REQUIRED]; //Название группы, не более 255 символов. + string group_color = 2 [(google.api.field_behavior) = REQUIRED]; //Цвет группы. Принимает значения в HEX-формате, от "000000" до "FFFFFF" + optional string note = 3; //Описание +} + +message CreateFavoriteGroupResponse { + string group_id = 1; //Уникальный идентификатор группы. + string group_name = 2; //Название группы. +} + +//Запрос удаления избранной группы +message DeleteFavoriteGroupRequest { + string group_id = 1 [(google.api.field_behavior) = REQUIRED]; //Уникальный идентификатор группы. +} + +message DeleteFavoriteGroupResponse { +} + +//Запрос получения списка избранных групп +message GetFavoriteGroupsRequest { + repeated string instrument_id = 1; //Массив идентификаторов инструментов. Принимает значение `figi` или `instrument_uid`. Если в группе будет хотя бы один из инструментов массива, то в ответе у группы вернется признак `containsInstrument = true`. + repeated string excluded_group_id = 2; //Массив идентификаторов групп, которые необходимо исключить из ответа. +} + +//Избранные группы +message GetFavoriteGroupsResponse { + repeated FavoriteGroup groups = 1; //Массив групп избранных списков инструментов. + + //Избранная группа + message FavoriteGroup { + string group_id = 1 [(google.api.field_behavior) = REQUIRED]; //Уникальный идентификатор группы. + string group_name = 2 [(google.api.field_behavior) = REQUIRED]; //Название группы. + string color = 3 [(google.api.field_behavior) = REQUIRED]; //Цвет группы в HEX-формате. + int32 size = 4 [(google.api.field_behavior) = REQUIRED]; //Количество инструментов в группе. + optional bool contains_instrument = 5; //Признак наличия в группе хотя бы одного инструмента из запроса. + } +} + +//Запрос справочника стран. +message GetCountriesRequest {} + +//Справочник стран. +message GetCountriesResponse { + repeated CountryResponse countries = 1; //Массив стран. +} + +//Запрос справочника индексов и товаров +message IndicativesRequest {} + +//Справочник индексов и товаров +message IndicativesResponse { + repeated IndicativeResponse instruments = 1; // Массив инструментов. +}; + +//Индикатив +message IndicativeResponse { + string figi = 1; // FIGI-идентификатор инструмента. + string ticker = 2; // Тикер инструмента. + string class_code = 3; // Класс-код инструмента. + string currency = 4; // Валюта расчетов. + InstrumentType instrument_kind = 10; //Тип инструмента. + string name = 12; // Название инструмента. + string exchange = 13; // Tорговая площадка (секция биржи). + string uid = 14; // Уникальный идентификатор инструмента. + bool buy_available_flag = 404; // Признак доступности для покупки. + bool sell_available_flag = 405; // Признак доступности для продажи. + repeated IndexInstrument index_composition = 406; // Состав индекса. +} + +//Инструмент в составе индекса +message IndexInstrument { + string uid = 1; // Идентификатор инструмента. + Quotation weight = 2; // Вес инструмента в составе индекса в %. +} + +//Данные о стране. +message CountryResponse { + string alfa_two = 1; //Двухбуквенный код страны. + string alfa_three = 2; //Трехбуквенный код страны. + string name = 3; //Наименование страны. + string name_brief = 4; //Краткое наименование страны. +} + +//Запрос на поиск инструментов. +message FindInstrumentRequest { + string query = 1 [(google.api.field_behavior) = REQUIRED]; //Строка поиска. + optional InstrumentType instrument_kind = 2; //Фильтр по типу инструмента. + optional bool api_trade_available_flag = 3; //Фильтр для отображения только торговых инструментов. +} + +//Результат поиска инструментов. +message FindInstrumentResponse { + repeated InstrumentShort instruments = 1; //Массив инструментов, удовлетворяющих условиям поиска. +} + +//Краткая информация об инструменте. +message InstrumentShort { + string isin = 1; //ISIN инструмента. + string figi = 2; //FIGI инструмента. + string ticker = 3; //Ticker инструмента. + string class_code = 4; //ClassCode инструмента. + string instrument_type = 5; //Тип инструмента. + string name = 6; //Название инструмента. + string uid = 7; //Уникальный идентификатор инструмента. + string position_uid = 8; //Уникальный идентификатор позиции инструмента. + InstrumentType instrument_kind = 10; //Тип инструмента. + bool api_trade_available_flag = 11; //Возможность торговать инструментом через API. + bool for_iis_flag = 12; //Признак доступности для ИИС. + google.protobuf.Timestamp first_1min_candle_date = 26; //Дата первой минутной свечи. + google.protobuf.Timestamp first_1day_candle_date = 27; //Дата первой дневной свечи. + bool for_qual_investor_flag = 28; //Флаг, отображающий доступность торговли инструментом только для квалифицированных инвесторов. + bool weekend_flag = 29; //Флаг, отображающий доступность торговли инструментом по выходным. + bool blocked_tca_flag = 30; //Флаг заблокированного ТКС. + int32 lot = 31; //Количество бумаг в лоте. +} + +//Запрос списка брендов. +message GetBrandsRequest { + Page paging = 1; //Настройки пагинации. +} + +//Запрос бренда. +message GetBrandRequest { + string id = 1 [(google.api.field_behavior) = REQUIRED]; //UID-идентификатор бренда. +} + +//Список брендов. +message GetBrandsResponse { + repeated Brand brands = 1; //Массив брендов. + PageResponse paging = 2; //Данные по пагинации. +} + +//Запрос фундаментальных показателей +message GetAssetFundamentalsRequest { + repeated string assets = 1 [(google.api.field_behavior) = REQUIRED]; //Массив идентификаторов активов, не более 100 шт. +} + +//Фундаментальные показатели +message GetAssetFundamentalsResponse { + repeated StatisticResponse fundamentals = 1; + + //Фундаментальные показатели по активу + message StatisticResponse { + string asset_uid = 1; //Идентификатор актива. + string currency = 2; //Валюта. + double market_capitalization = 3; //Рыночная капитализация. + double high_price_last_52_weeks = 4; //Максимум за год. + double low_price_last_52_weeks = 5; //Минимум за год. + double average_daily_volume_last_10_days = 6; //Средний объем торгов за 10 дней. + double average_daily_volume_last_4_weeks = 7; //Средний объем торгов за месяц. + double beta = 8; + double free_float = 9; //Доля акций в свободном обращении. + double forward_annual_dividend_yield = 10; //Процент форвардной дивидендной доходности по отношению к цене акций. + double shares_outstanding = 11; //Количество акций в обращении. + double revenue_ttm = 12; //Выручка. + double ebitda_ttm = 13; //EBITDA — прибыль до вычета процентов, налогов, износа и амортизации. + double net_income_ttm = 14; //Чистая прибыль. + double eps_ttm = 15; //EPS — величина чистой прибыли компании, которая приходится на каждую обыкновенную акцию. + double diluted_eps_ttm = 16; //EPS компании с допущением, что все конвертируемые ценные бумаги компании были сконвертированы в обыкновенные акции. + double free_cash_flow_ttm = 17; //Свободный денежный поток. + double five_year_annual_revenue_growth_rate = 18; //Среднегодовой рocт выручки за 5 лет. + double three_year_annual_revenue_growth_rate = 19; //Среднегодовой рocт выручки за 3 года. + double pe_ratio_ttm = 20; //Соотношение рыночной капитализации компании к ее чистой прибыли. + double price_to_sales_ttm = 21; //Соотношение рыночной капитализации компании к ее выручке. + double price_to_book_ttm = 22; //Соотношение рыночной капитализации компании к ее балансовой стоимости. + double price_to_free_cash_flow_ttm = 23; //Соотношение рыночной капитализации компании к ее свободному денежному потоку. + double total_enterprise_value_mrq = 24; //Рыночная стоимость компании. + double ev_to_ebitda_mrq = 25; //Соотношение EV и EBITDA. + double net_margin_mrq = 26; //Маржа чистой прибыли. + double net_interest_margin_mrq = 27; //Рентабельность чистой прибыли. + double roe = 28; //Рентабельность собственного капитала. + double roa = 29; //Рентабельность активов. + double roic = 30; //Рентабельность активов. + double total_debt_mrq = 31; //Сумма краткосрочных и долгосрочных обязательств компании. + double total_debt_to_equity_mrq = 32; //Соотношение долга к собственному капиталу. + double total_debt_to_ebitda_mrq = 33; //Total Debt/EBITDA. + double free_cash_flow_to_price = 34; //Отношение свободногоо кэша к стоимости. + double net_debt_to_ebitda = 35; //Отношение чистого долга к EBITDA. + double current_ratio_mrq = 36; //Коэффициент текущей ликвидности. + double fixed_charge_coverage_ratio_fy = 37; //Коэффициент покрытия фиксированных платежей — FCCR. + double dividend_yield_daily_ttm = 38; //Дивидендная доходность за 12 месяцев. + double dividend_rate_ttm = 39; //Выплаченные дивиденды за 12 месяцев. + double dividends_per_share = 40; //Значение дивидендов на акцию. + double five_years_average_dividend_yield = 41; //Средняя дивидендная доходность за 5 лет. + double five_year_annual_dividend_growth_rate = 42; //Среднегодовой рост дивидендов за 5 лет. + double dividend_payout_ratio_fy = 43; //Процент чистой прибыли, уходящий на выплату дивидендов. + double buy_back_ttm = 44; //Деньги, потраченные на обратный выкуп акций. + double one_year_annual_revenue_growth_rate = 45; //Рост выручки за 1 год. + string domicile_indicator_code = 46; //Код страны. + double adr_to_common_share_ratio = 47; //Соотношение депозитарной расписки к акциям. + double number_of_employees = 48; //Количество сотрудников. + google.protobuf.Timestamp ex_dividend_date = 49; + google.protobuf.Timestamp fiscal_period_start_date = 50; //Начало фискального периода. + google.protobuf.Timestamp fiscal_period_end_date = 51; //Окончание фискального периода. + double revenue_change_five_years = 53; //Изменение общего дохода за 5 лет. + double eps_change_five_years = 54; //Изменение EPS за 5 лет. + double ebitda_change_five_years = 55; //Изменение EBIDTA за 5 лет. + double total_debt_change_five_years = 56; //Изменение общей задолжности за 5 лет. + double ev_to_sales = 57; //Отношение EV к выручке. + } + +} + +//Запрос отчетов эмитентов +message GetAssetReportsRequest { + string instrument_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`. + optional google.protobuf.Timestamp from = 2; //Начало запрашиваемого периода по UTC. + optional google.protobuf.Timestamp to = 3; //Окончание запрашиваемого периода по UTC. +} + +//Отчеты эмитентов +message GetAssetReportsResponse { + repeated GetAssetReportsEvent events = 1; // Массив событий по облигации. + + //Отчет + message GetAssetReportsEvent { + string instrument_id = 1; // Идентификатор инструмента. + google.protobuf.Timestamp report_date = 2; // Дата публикации отчета. + int32 period_year = 3; // Год периода отчета. + int32 period_num = 4; // Номер периода. + AssetReportPeriodType period_type = 5; // Тип отчета. + google.protobuf.Timestamp created_at = 6; // Дата создания записи. + } + + enum AssetReportPeriodType { + PERIOD_TYPE_UNSPECIFIED = 0; // Не указан. + PERIOD_TYPE_QUARTER = 1; // Квартальный. + PERIOD_TYPE_SEMIANNUAL = 2; // Полугодовой. + PERIOD_TYPE_ANNUAL = 3; // Годовой. + } +} + +//Запрос консенсус-прогнозов +message GetConsensusForecastsRequest { + optional Page paging = 1; //Настройки пагинации. +} + +//Консенсус-прогнозы +message GetConsensusForecastsResponse { + repeated ConsensusForecastsItem items = 1; // Массив прогнозов. + PageResponse page = 2; //Данные по пагинации. + + //Прогноз + message ConsensusForecastsItem { + string uid = 1; // UID-идентификатор. + string asset_uid = 2; // UID-идентификатор актива. + google.protobuf.Timestamp created_at = 3; // Дата и время создания записи. + Quotation best_target_price = 4; // Целевая цена на 12 месяцев. + Quotation best_target_low = 5; // Минимальная прогнозная цена. + Quotation best_target_high = 6; // Максимальная прогнозная цена. + int32 total_buy_recommend = 7; // Количество аналитиков рекомендующих покупать. + int32 total_hold_recommend = 8; // Количество аналитиков рекомендующих держать. + int32 total_sell_recommend = 9; // Количество аналитиков рекомендующих продавать. + string currency = 10; // Валюта прогнозов инструмента. + Recommendation consensus = 11; // Консенсус-прогноз. + google.protobuf.Timestamp prognosis_date = 12; // Дата прогноза. + } + +} + +enum Recommendation { + RECOMMENDATION_UNSPECIFIED = 0; // Не определено. + RECOMMENDATION_BUY = 1; // Покупать. + RECOMMENDATION_HOLD = 2; // Держать. + RECOMMENDATION_SELL = 3; // Продавать. +} + +//Запрос прогнозов инвестдомов. +message GetForecastRequest { + string instrument_id = 1; // Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`. +} + +//Прогнозы инвестдомов по инструменту. +message GetForecastResponse { + repeated TargetItem targets = 1; //Массив прогнозов. + ConsensusItem consensus = 2; // Согласованный прогноз. + + //Прогноз + message TargetItem { + string uid = 1; // Уникальный идентификатор инструмента. + string ticker = 2; // Тикер инструмента. + string company = 3; // Название компании, давшей прогноз. + Recommendation recommendation = 4; // Прогноз. + google.protobuf.Timestamp recommendation_date = 5; //Дата прогноза. + string currency = 6; // Валюта. + Quotation current_price = 7; // Текущая цена. + Quotation target_price = 8; // Прогнозируемая цена. + Quotation price_change = 9; // Изменение цены. + Quotation price_change_rel = 10; // Относительное изменение цены. + string show_name = 11; // Наименование инструмента. + } + + //Консенсус-прогноз. + message ConsensusItem { + string uid = 1; // Уникальный идентификатор инструмента. + string ticker = 2; // Тикер инструмента. + Recommendation recommendation = 3; // Прогноз. + string currency = 4; // Валюта. + Quotation current_price = 5; // Текущая цена. + Quotation consensus = 6; // Прогнозируемая цена. + Quotation min_target = 7; // Минимальная цена прогноза. + Quotation max_target = 8; // Максимальная цена прогноза. + Quotation price_change = 9; // Изменение цены. + Quotation price_change_rel = 10; // Относительное изменение цены. + } +} + + +//Запрос ставок риска +message RiskRatesRequest { + repeated string instrument_id = 1; // Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`. +} + + +//Ставки риска +message RiskRatesResponse { + repeated RiskRateResult instrument_risk_rates = 1; + + message RiskRateResult { + string instrument_uid = 1; + optional RiskRate short_risk_rate = 2; // Ставка риска пользователя в шорт + optional RiskRate long_risk_rate = 3; // Ставка риска пользователя в лонг + repeated RiskRate short_risk_rates = 5; //Доступные ставки риска в шорт + repeated RiskRate long_risk_rates = 6; //Доступные ставки риска в лонг + optional string error = 9; // Ошибка. + } + message RiskRate { + string risk_level_code = 2; // Категория риска. + Quotation value = 5; // Значение ставки риска. + } +} + +message TradingInterval { + string type = 1; //Название интервала. + TimeInterval interval = 2; //Интервал. + + message TimeInterval { + google.protobuf.Timestamp start_ts = 1; // Время начала интервала. + google.protobuf.Timestamp end_ts = 2; // Время окончания интервала. + } +} + + +//Запрос сделок по инсайдерам +message GetInsiderDealsRequest { + string instrument_id = 1; // Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`. + int32 limit = 2; // Количество выводимых записей в ответе, не больше 100. + optional string next_cursor = 3; // Курсор. +} + +//сделки инсайдеров +message GetInsiderDealsResponse { + + repeated InsiderDeal insider_deals = 1; // Массив сделок. + optional string next_cursor = 2; // Курсор для получения следующей страницы. + + message InsiderDeal { + int64 trade_id = 1; // Уникальный идентификатор сделки. + TradeDirection direction = 2; // Направление сделки. + string currency = 3; // Валюта сделки. + google.protobuf.Timestamp date = 4; // Дата сделки. + int64 quantity = 5; // Количество. + Quotation price = 6; // Цена. + string instrument_uid = 7; // Уникальный идентификатор инструмента. + string ticker = 8; // Тикер инструмента. + string investor_name = 9; // Имя инвестора. + string investor_position = 10; // Какое отношение покупатель/продавец имеет к эмитенту + float percentage = 11; // Купленный/проданный объём от общего количества ценных бумаг на рынке + bool is_option_execution = 12; //Признак является ли сделка реализацией опциона + google.protobuf.Timestamp disclosure_date = 13; // Дата раскрытия сделки. + } + + enum TradeDirection { + TRADE_DIRECTION_UNSPECIFIED = 0; // Не определено. + TRADE_DIRECTION_BUY = 1; // Покупка. + TRADE_DIRECTION_SELL = 2; // Продажа. + TRADE_DIRECTION_INCREASE = 3; // Увеличение доли. + TRADE_DIRECTION_DECREASE = 4; // Уменьшение доли. + } +} + +//Запрос цифровых активов +message DfasRequest { + +} + +//Цифровой актив +message DfaResponse { + string uid = 1; // Уникальный идентификатор инструмента. + string ticker = 2; // Тикер инструмента. + string name = 3; // Название инструмента. + string position_uid = 4; // Уникальный идентификатор позиции. + Quotation min_price_increment = 5; // Шаг цены. + int32 lot = 6; // Количество лотов. + MoneyValue nominal = 7; // Номинал. + string currency = 8; // Валюта. + google.protobuf.Timestamp maturity_date = 9; // Дата погашения ЦФА в формате UTC. + bool short_enabled_flag = 10; // Признак доступности для операций шорт. + bool api_trade_available_flag = 11; // Признак доступности торгов по бумаге через API. + bool buy_available_flag = 12; // Признак доступности для покупки. + bool sell_available_flag = 13; // Признак доступности для продажи. + bool limit_order_available_flag = 14; // Признак доступности выставления лимитной заявки по инструменту. + bool market_order_available_flag = 15; // Признак доступности выставления рыночной заявки по инструменту. + bool bestprice_order_available_flag = 16; // Признак доступности выставления bestprice заявки по инструменту. + bool for_iis_flag = 17; // Возможность покупки/продажи на ИИС. + bool for_qual_investor_flag = 18; // Флаг отображающий доступность торговли инструментом только для квалифицированных инвесторов. + string type = 19; // Тип актива. Возможные значения: credit_portfolio_dfa, debt_dfa. + repeated BasicAsset basic_assets = 20; // Базовые активы, входящие в ЦФА. + ForecastYield forecast_yield = 21; // Прогнозная доходность смарт-портфелей, в виде интервала в %. + Quotation yield_to_maturity = 22; // Доходность к погашению в %. + Quotation coupon_value = 23; // Величина купона. + int32 coupon_payment_frequency = 24; // Количество выплат в год. + google.protobuf.Timestamp coupon_payment_date = 25; // Дата выплаты купона. + Quotation aci_value = 26; // Значение НКД (накопленного купонного дохода) на дату. + + // Базовый актив. + message BasicAsset { + string uid = 1; // UID базового актива + } + + // Прогнозная доходность смарт-портфелей. + message ForecastYield { + Quotation min_value = 1; // Минимальное значение прогнозной доходности в % + Quotation max_value = 2; // Максимальное значение прогнозной доходности в % + } +} + + // Цифровые активы +message DfasResponse { + repeated DfaResponse instruments = 1; // Массив инструментов. +} + +//Уровень риска облигации. +enum RiskLevel { + RISK_LEVEL_UNSPECIFIED = 0; //Не указан. + RISK_LEVEL_LOW = 1; //Низкий уровень риска. + RISK_LEVEL_MODERATE = 2; //Средний уровень риска. + RISK_LEVEL_HIGH = 3; //Высокий уровень риска. +} + +enum BondType { + BOND_TYPE_UNSPECIFIED = 0; // Тип облигации не определен. + BOND_TYPE_REPLACED = 1; // Замещающая облигация. +} + +// Площадка торговли. +enum InstrumentExchangeType { + INSTRUMENT_EXCHANGE_UNSPECIFIED = 0; // Площадка торговли не определена. + INSTRUMENT_EXCHANGE_DEALER = 1; // Бумага, торгуемая у дилера. +} diff --git a/apps/backend/src/modules/tbank/proto/contracts/operations.proto b/apps/backend/src/modules/tbank/proto/contracts/operations.proto new file mode 100644 index 0000000..9d5f072 --- /dev/null +++ b/apps/backend/src/modules/tbank/proto/contracts/operations.proto @@ -0,0 +1,648 @@ +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"; +import "common.proto"; +import "google/api/field_behavior.proto"; + +service OperationsService {/*С помощью методов сервиса можно получить:

**1**. Список операций по счету.
**2**. + Портфель по счету.
**3**. Позиции ценных бумаг на счете.
**4**. + Доступный остаток для вывода средств.
**5**. Различные отчеты.*/ + //Deprecated GetOperations — список операций по счету + //При работе с методом учитывайте [особенности взаимодействия](/invest/services/operations/operations_problems). + rpc GetOperations(OperationsRequest) returns (OperationsResponse); + + //GetPortfolio — портфель по счету + rpc GetPortfolio(PortfolioRequest) returns (PortfolioResponse); + + //GetPositions — список позиций по счету + rpc GetPositions(PositionsRequest) returns (PositionsResponse); + + //GetWithdrawLimits — доступный остаток для вывода средств + rpc GetWithdrawLimits(WithdrawLimitsRequest) returns (WithdrawLimitsResponse); + + //GetBrokerReport — брокерский отчет. + rpc GetBrokerReport(BrokerReportRequest) returns (BrokerReportResponse); + + //GetDividendsForeignIssuer — отчет «Справка о доходах за пределами РФ» + rpc GetDividendsForeignIssuer(GetDividendsForeignIssuerRequest) returns (GetDividendsForeignIssuerResponse); + + //GetOperationsByCursor — список операций по счету с пагинацией + //При работе с методом учитывайте [особенности взаимодействия](/invest/services/operations/operations_problems). + rpc GetOperationsByCursor(GetOperationsByCursorRequest) returns (GetOperationsByCursorResponse); +} + +service OperationsStreamService { + //PortfolioStream — стрим обновлений портфеля + rpc PortfolioStream(PortfolioStreamRequest) returns (stream PortfolioStreamResponse); + + //PositionsStream — стрим обновлений информации по изменению позиций портфеля + rpc PositionsStream(PositionsStreamRequest) returns (stream PositionsStreamResponse); + + //OperationsStream — стрим обновлений операций + rpc OperationsStream(OperationsStreamRequest) returns (stream OperationsStreamResponse); +} + +//Запрос получения списка операций по счету. +message OperationsRequest { + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счета клиента. + optional google.protobuf.Timestamp from = 2; //Начало периода по UTC. + optional google.protobuf.Timestamp to = 3; //Окончание периода по UTC. + optional OperationState state = 4; //Статус запрашиваемых операций. + optional string figi = 5; //FIGI-идентификатор инструмента для фильтрации. +} + +//Список операций. +message OperationsResponse { + repeated Operation operations = 1; //Массив операций. +} + +//Данные по операции. +message Operation { + string id = 1; //Идентификатор операции. + string parent_operation_id = 2; //Идентификатор родительской операции. + string currency = 3; //Валюта операции. + MoneyValue payment = 4; //Сумма операции. + MoneyValue price = 5; //Цена операции за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. + OperationState state = 6; //Статус операции. + int64 quantity = 7; //Количество единиц инструмента. + int64 quantity_rest = 8; //Неисполненный остаток по сделке. + string figi = 9; //FIGI-идентификатор инструмента, связанного с операцией. + string instrument_type = 10; //Тип инструмента. Возможные значения:

`bond` — облигация;
`share` — акция;
`currency` — валюта;
`etf` — фонд;
`futures` — фьючерс. + google.protobuf.Timestamp date = 11; //Дата и время операции в формате часовом поясе UTC. + string type = 12; //Текстовое описание типа операции. + OperationType operation_type = 13; //Тип операции. + repeated OperationTrade trades = 14; //Массив сделок. + string asset_uid = 16; //Идентификатор актива + string position_uid = 17; //Уникальный идентификатор позиции. + string instrument_uid = 18; //Уникальный идентификатор инструмента. + repeated ChildOperationItem child_operations = 19; //Массив дочерних операций. +} + +//Сделка по операции. +message OperationTrade { + string trade_id = 1; //Идентификатор сделки. + google.protobuf.Timestamp date_time = 2; //Дата и время сделки по UTC. + int64 quantity = 3; //Количество инструментов. + MoneyValue price = 4; //Цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. +} + +//Запрос получения текущего портфеля по счету. +message PortfolioRequest { + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счета пользователя. + optional CurrencyRequest currency = 2; //Валюта, в которой нужно рассчитать портфель. + enum CurrencyRequest { + RUB = 0; //Рубли + USD = 1; //Доллары + EUR = 2; //Евро + } +} + +//Текущий портфель по счету. +message PortfolioResponse { + MoneyValue total_amount_shares = 1; //Общая стоимость акций в портфеле. + MoneyValue total_amount_bonds = 2; //Общая стоимость облигаций в портфеле. + MoneyValue total_amount_etf = 3; //Общая стоимость фондов в портфеле. + MoneyValue total_amount_currencies = 4; //Общая стоимость валют в портфеле. + MoneyValue total_amount_futures = 5; //Общая стоимость фьючерсов в портфеле. + Quotation expected_yield = 6; //Текущая относительная доходность портфеля в %. + repeated PortfolioPosition positions = 7; //Список позиций портфеля. + string account_id = 8; //Идентификатор счета пользователя. + + MoneyValue total_amount_options = 9; //Общая стоимость опционов в портфеле. + MoneyValue total_amount_sp = 10; //Общая стоимость структурных нот в портфеле. + MoneyValue total_amount_portfolio = 11; //Общая стоимость портфеля. + repeated VirtualPortfolioPosition virtual_positions = 12; //Массив виртуальных позиций портфеля. + MoneyValue daily_yield = 15; // Рассчитанная доходность портфеля за день в рублях. + Quotation daily_yield_relative = 16; //Относительная доходность в день в %. + MoneyValue total_amount_dfa = 17; //Общая стоимость смарт-активов в портфеле в рублях. +} + +//Запрос позиций портфеля по счету. +message PositionsRequest { + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счета пользователя. +} + +//Список позиций по счету. +message PositionsResponse { + repeated MoneyValue money = 1; //Массив валютных позиций портфеля. + repeated MoneyValue blocked = 2; //Массив заблокированных валютных позиций портфеля. + repeated PositionsSecurities securities = 3; //Список ценно-бумажных позиций портфеля. + bool limits_loading_in_progress = 4; //Признак идущей выгрузки лимитов в данный момент. + repeated PositionsFutures futures = 5; //Список фьючерсов портфеля. + repeated PositionsOptions options = 6; //Список опционов портфеля. + string account_id = 15; //Идентификатор счёта пользователя. +} + +//Запрос доступного остатка для вывода. +message WithdrawLimitsRequest { + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счета пользователя. +} + +//Доступный остаток для вывода. +message WithdrawLimitsResponse { + repeated MoneyValue money = 1; //Массив валютных позиций портфеля. + repeated MoneyValue blocked = 2; //Массив заблокированных валютных позиций портфеля. + repeated MoneyValue blocked_guarantee = 3; //Заблокировано под гарантийное обеспечение фьючерсов. +} + +//Позиции портфеля. +message PortfolioPosition { + string figi = 1; //FIGI-идентификатор инструмента. + string instrument_type = 2; //Тип инструмента. + Quotation quantity = 3; //Количество инструмента в портфеле в штуках. + MoneyValue average_position_price = 4; //Средневзвешенная цена позиции. Для пересчета возможна задержка до одной секунды. + Quotation expected_yield = 5; //Текущая рассчитанная доходность позиции. + MoneyValue current_nkd = 6; // Текущий НКД. + Quotation average_position_price_pt = 7 [ deprecated = true ]; // Deprecated Средняя цена позиции в пунктах (для фьючерсов). Для пересчета возможна задержка до одной секунды. + MoneyValue current_price = 8; //Текущая цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. + MoneyValue average_position_price_fifo = 9; //Средняя цена позиции по методу FIFO. Для пересчета возможна задержка до одной секунды. + Quotation quantity_lots = 10 [ deprecated = true ]; //Deprecated Количество лотов в портфеле. + bool blocked = 21; //Заблокировано на бирже. + Quotation blocked_lots = 22; //Количество бумаг, заблокированных выставленными заявками. + string position_uid = 24; //Уникальный идентификатор позиции. + string instrument_uid = 25; //Уникальный идентификатор инструмента. + MoneyValue var_margin = 26; //Вариационная маржа. + Quotation expected_yield_fifo = 27; //Текущая рассчитанная доходность позиции. + MoneyValue daily_yield = 31; // Рассчитанная доходность портфеля за день. + string ticker = 32; //Тикер инструмента. + string class_code = 33; //Класс-код (секция торгов). + optional MoneyValue var_margin_settled = 34; //Вариационная маржа (расчетная). +} + +message VirtualPortfolioPosition { + string position_uid = 1; //Уникальный идентификатор позиции. + string instrument_uid = 2; //Уникальный идентификатор инструмента. + string figi = 3; //FIGI-идентификатор инструмента. + string instrument_type = 4; //Тип инструмента. + Quotation quantity = 5; //Количество инструмента в портфеле в штуках. + MoneyValue average_position_price = 6; //Средневзвешенная цена позиции. Для пересчета возможна задержка до одной секунды. + Quotation expected_yield = 7; //Текущая рассчитанная доходность позиции. + Quotation expected_yield_fifo = 8; //Текущая рассчитанная доходность позиции. + google.protobuf.Timestamp expire_date = 9; //Дата, до которой нужно продать виртуальные бумаги. После этой даты виртуальная позиция «сгораетт». + MoneyValue current_price = 10; //Текущая цена за 1 инструмент. Чтобы получить стоимость лота, нужно умножить на лотность инструмента. + MoneyValue average_position_price_fifo = 11; //Средняя цена позиции по методу FIFO. Для пересчета возможна задержка до одной секунды. + MoneyValue daily_yield = 31; // Рассчитанная доходность портфеля за день. + string ticker = 32; //Тикер инструмента. + string class_code = 33; //Класс-код (секция торгов). +} + +//Баланс позиции ценной бумаги. +message PositionsSecurities { + string figi = 1; //FIGI-идентификатор бумаги. + int64 blocked = 2; //Количество бумаг, заблокированных выставленными заявками. + int64 balance = 3; //Текущий незаблокированный баланс. + string position_uid = 4; //Уникальный идентификатор позиции. + string instrument_uid = 5; //Уникальный идентификатор инструмента. + string ticker = 6; //Тикер инструмента. + string class_code = 7; //Класс-код (секция торгов). + bool exchange_blocked = 11; //Заблокировано на бирже. + string instrument_type = 16; //Тип инструмента. +} + +//Баланс фьючерса. +message PositionsFutures { + string figi = 1; //FIGI-идентификатор фьючерса. + int64 blocked = 2; //Количество бумаг, заблокированных выставленными заявками. + int64 balance = 3; //Текущий незаблокированный баланс. + string position_uid = 4; //Уникальный идентификатор позиции. + string instrument_uid = 5; //Уникальный идентификатор инструмента. + string ticker = 6; //Тикер инструмента. + string class_code = 7; //Класс-код (секция торгов). +} + +//Баланс опциона. +message PositionsOptions { + string position_uid = 1; //Уникальный идентификатор позиции опциона. + string instrument_uid = 2; //Уникальный идентификатор инструмента. + string ticker = 3; //Тикер инструмента. + string class_code = 4; //Класс-код (секция торгов). + int64 blocked = 11; //Количество бумаг, заблокированных выставленными заявками. + int64 balance = 21; //Текущий незаблокированный баланс. +} + +message BrokerReportRequest { + oneof payload { + GenerateBrokerReportRequest generate_broker_report_request = 1; + GetBrokerReportRequest get_broker_report_request = 2; + } +} + +message BrokerReportResponse { + oneof payload { + GenerateBrokerReportResponse generate_broker_report_response = 1; + GetBrokerReportResponse get_broker_report_response = 2; + } +} + +message GenerateBrokerReportRequest { + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счета клиента. + google.protobuf.Timestamp from = 2 [(google.api.field_behavior) = REQUIRED]; //Начало периода по UTC. + google.protobuf.Timestamp to = 3 [(google.api.field_behavior) = REQUIRED]; //Окончание периода по UTC. +} + +message GenerateBrokerReportResponse { + string task_id = 1; //Идентификатор задачи формирования брокерского отчета. +} + +message GetBrokerReportRequest { + string task_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор задачи формирования брокерского отчета. + optional int32 page = 2; //Номер страницы отчета, начинается с 1. Значение по умолчанию — 0. +} + +message GetBrokerReportResponse { + repeated BrokerReport broker_report = 1; + int32 itemsCount = 2; //Количество записей в отчете. + int32 pagesCount = 3; //Количество страниц с данными отчета, начинается с 0. + int32 page = 4; //Текущая страница, начинается с 0. + string task_id = 5; //Идентификатор задачи формирования брокерского отчета. +} + +message BrokerReport { + string trade_id = 1;//Номер сделки. + string order_id = 2; //Номер поручения. + string figi = 3; //FIGI-идентификаторинструмента. + string execute_sign = 4; //Признак исполнения. + google.protobuf.Timestamp trade_datetime = 5; //Дата и время заключения по UTC. + string exchange = 6; //Торговая площадка. + string class_code = 7; //Режим торгов. + string direction = 8; //Вид сделки. + string name = 9; //Сокращенное наименование актива. + string ticker = 10; //Код актива. + MoneyValue price = 11; //Цена за единицу. + int64 quantity = 12; //Количество. + MoneyValue order_amount = 13; //Сумма без НКД. + Quotation aci_value = 14; //НКД. + MoneyValue total_order_amount = 15; //Сумма сделки. + MoneyValue broker_commission = 16; //Комиссия брокера. + MoneyValue exchange_commission = 17; //Комиссия биржи. + MoneyValue exchange_clearing_commission = 18; //Комиссия клирингового центра. + Quotation repo_rate = 19; //Ставка РЕПО, %. + string party = 20; //Контрагент или брокерарокер. + google.protobuf.Timestamp clear_value_date = 21; //Дата расчетов по UTC. + google.protobuf.Timestamp sec_value_date = 22; //Дата поставки по UTC. + string broker_status = 23; //Статус брокера. + string separate_agreement_type = 24; //Тип договора. + string separate_agreement_number = 25; //Номер договора. + string separate_agreement_date = 26; //Дата договора. + string delivery_type = 27; //Тип расчета по сделке. +} + +//Статус запрашиваемых операций. +enum OperationState { + OPERATION_STATE_UNSPECIFIED = 0; //Статус операции не определен. + OPERATION_STATE_EXECUTED = 1; //Исполнена частично или полностью. + OPERATION_STATE_CANCELED = 2; //Отменена. + OPERATION_STATE_PROGRESS = 3; //Исполняется. +} + +//Тип операции. +enum OperationType { + OPERATION_TYPE_UNSPECIFIED = 0; //Тип операции не определен. + OPERATION_TYPE_INPUT = 1; //Пополнение брокерского счета. + OPERATION_TYPE_BOND_TAX = 2; //Удержание НДФЛ по купонам. + OPERATION_TYPE_OUTPUT_SECURITIES = 3; //Вывод ЦБ. + OPERATION_TYPE_OVERNIGHT = 4; //Доход по сделке РЕПО овернайт. + OPERATION_TYPE_TAX = 5; //Удержание налога. + OPERATION_TYPE_BOND_REPAYMENT_FULL = 6; //Полное погашение облигаций. + OPERATION_TYPE_SELL_CARD = 7; //Продажа ЦБ с карты. + OPERATION_TYPE_DIVIDEND_TAX = 8; //Удержание налога по дивидендам. + OPERATION_TYPE_OUTPUT = 9; //Вывод денежных средств. + OPERATION_TYPE_BOND_REPAYMENT = 10; //Частичное погашение облигаций. + OPERATION_TYPE_TAX_CORRECTION = 11; //Корректировка налога. + OPERATION_TYPE_SERVICE_FEE = 12; //Удержание комиссии за обслуживание брокерского счета. + OPERATION_TYPE_BENEFIT_TAX = 13; //Удержание налога за материальную выгоду. + OPERATION_TYPE_MARGIN_FEE = 14; //Удержание комиссии за непокрытую позицию. + OPERATION_TYPE_BUY = 15; //Покупка ЦБ. + OPERATION_TYPE_BUY_CARD = 16; //Покупка ЦБ с карты. + OPERATION_TYPE_INPUT_SECURITIES = 17; //Перевод ценных бумаг из другого депозитария. + OPERATION_TYPE_SELL_MARGIN = 18; //Продажа в результате Margin-call. + OPERATION_TYPE_BROKER_FEE = 19; //Удержание комиссии за операцию. + OPERATION_TYPE_BUY_MARGIN = 20; //Покупка в результате Margin-call. + OPERATION_TYPE_DIVIDEND = 21; //Выплата дивидендов. + OPERATION_TYPE_SELL = 22; //Продажа ЦБ. + OPERATION_TYPE_COUPON = 23; //Выплата купонов. + OPERATION_TYPE_SUCCESS_FEE = 24; //Удержание комиссии SuccessFee. + OPERATION_TYPE_DIVIDEND_TRANSFER = 25; //Передача дивидендного дохода. + OPERATION_TYPE_ACCRUING_VARMARGIN = 26; //Зачисление вариационной маржи. + OPERATION_TYPE_WRITING_OFF_VARMARGIN = 27; //Списание вариационной маржи. + OPERATION_TYPE_DELIVERY_BUY = 28; //Покупка в рамках экспирации фьючерсного контракта. + OPERATION_TYPE_DELIVERY_SELL = 29; //Продажа в рамках экспирации фьючерсного контракта. + OPERATION_TYPE_TRACK_MFEE = 30; //Комиссия за управление по счету автоследования. + OPERATION_TYPE_TRACK_PFEE = 31; //Комиссия за результат по счету автоследования. + OPERATION_TYPE_TAX_PROGRESSIVE = 32; //Удержание налога по ставке 15%. + OPERATION_TYPE_BOND_TAX_PROGRESSIVE = 33; //Удержание налога по купонам по ставке 15%. + OPERATION_TYPE_DIVIDEND_TAX_PROGRESSIVE = 34; //Удержание налога по дивидендам по ставке 15%. + OPERATION_TYPE_BENEFIT_TAX_PROGRESSIVE = 35; //Удержание налога за материальную выгоду по ставке 15%. + OPERATION_TYPE_TAX_CORRECTION_PROGRESSIVE = 36; //Корректировка налога по ставке 15%. + OPERATION_TYPE_TAX_REPO_PROGRESSIVE = 37; //Удержание налога за возмещение по сделкам РЕПО по ставке 15%. + OPERATION_TYPE_TAX_REPO = 38; //Удержание налога за возмещение по сделкам РЕПО. + OPERATION_TYPE_TAX_REPO_HOLD = 39; //Удержание налога по сделкам РЕПО. + OPERATION_TYPE_TAX_REPO_REFUND = 40; //Возврат налога по сделкам РЕПО. + OPERATION_TYPE_TAX_REPO_HOLD_PROGRESSIVE = 41; //Удержание налога по сделкам РЕПО по ставке 15%. + OPERATION_TYPE_TAX_REPO_REFUND_PROGRESSIVE = 42; //Возврат налога по сделкам РЕПО по ставке 15%. + OPERATION_TYPE_DIV_EXT = 43; //Выплата дивидендов на карту. + OPERATION_TYPE_TAX_CORRECTION_COUPON = 44; //Корректировка налога по купонам. + OPERATION_TYPE_CASH_FEE = 45; //Комиссия за валютный остаток. + OPERATION_TYPE_OUT_FEE = 46; //Комиссия за вывод валюты с брокерского счета. + OPERATION_TYPE_OUT_STAMP_DUTY = 47; //Гербовый сбор. + OPERATION_TYPE_OUTPUT_SWIFT = 50; // SWIFT-перевод. + OPERATION_TYPE_INPUT_SWIFT = 51; // SWIFT-перевод. + OPERATION_TYPE_OUTPUT_ACQUIRING = 53; // Перевод на карту. + OPERATION_TYPE_INPUT_ACQUIRING = 54; // Перевод с карты. + OPERATION_TYPE_OUTPUT_PENALTY = 55; // Комиссия за вывод средств. + OPERATION_TYPE_ADVICE_FEE = 56; // Списание оплаты за сервис Советов. + OPERATION_TYPE_TRANS_IIS_BS = 57; // Перевод ценных бумаг с ИИС на брокерский счет. + OPERATION_TYPE_TRANS_BS_BS = 58; // Перевод ценных бумаг с одного брокерского счета на другой. + OPERATION_TYPE_OUT_MULTI = 59; // Вывод денежных средств со счета. + OPERATION_TYPE_INP_MULTI = 60; // Пополнение денежных средств со счета. + OPERATION_TYPE_OVER_PLACEMENT = 61; // Размещение биржевого овернайта. + OPERATION_TYPE_OVER_COM = 62; // Списание комиссии. + OPERATION_TYPE_OVER_INCOME = 63; // Доход от оверанайта. + OPERATION_TYPE_OPTION_EXPIRATION = 64; // Экспирация опциона. + OPERATION_TYPE_FUTURE_EXPIRATION = 65; // Экспирация фьючерса. + OPERATION_TYPE_OTHER_FEE = 66; // Прочие комиссии; + OPERATION_TYPE_OTHER = 67; // Операция по счету; + OPERATION_TYPE_DFA_REDEMPTION = 68; // погашение ЦФА-токена; + OPERATION_TYPE_PRIMARY_ORDER =69; // отмена заявки на первичное размещение по ЦФА; + OPERATION_TYPE_FUNDING = 70; //Списание фандинга. +} + +message GetDividendsForeignIssuerRequest { + oneof payload { + GenerateDividendsForeignIssuerReportRequest generate_div_foreign_issuer_report = 1; //Объект запроса формирования отчета. + GetDividendsForeignIssuerReportRequest get_div_foreign_issuer_report = 2; //Объект запроса сформированного отчета. + } +} + +message GetDividendsForeignIssuerResponse { + oneof payload { + GenerateDividendsForeignIssuerReportResponse generate_div_foreign_issuer_report_response = 1; //Объект результата задачи запуска формирования отчета. + GetDividendsForeignIssuerReportResponse div_foreign_issuer_report = 2; //Отчет «Справка о доходах за пределами РФ». + } +} + +//Объект запроса формирования отчета «Справка о доходах за пределами РФ». +message GenerateDividendsForeignIssuerReportRequest { + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счета клиента. + google.protobuf.Timestamp from = 2 [(google.api.field_behavior) = REQUIRED]; //Начало периода по UTC. + google.protobuf.Timestamp to = 3 [(google.api.field_behavior) = REQUIRED]; //Окончание периода по UTC. Как правило, можно сформировать отчет по дату на несколько дней меньше текущей. Начало и окончание периода должны быть в рамках одного календарного года. +} + +// Объект запроса сформированного отчета «Справка о доходах за пределами РФ». +message GetDividendsForeignIssuerReportRequest { + string task_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор задачи формирования отчета. + optional int32 page = 2; //Номер страницы отчета (начинается с 0), значение по умолчанию: 0. +} + +// Объект результата задачи запуска формирования отчета «Справка о доходах за пределами РФ». +message GenerateDividendsForeignIssuerReportResponse { + string task_id = 1; //Идентификатор задачи формирования отчета. +} + +message GetDividendsForeignIssuerReportResponse { + repeated DividendsForeignIssuerReport dividends_foreign_issuer_report = 1; + int32 itemsCount = 2; //Количество записей в отчете. + int32 pagesCount = 3; //Количество страниц с данными отчета, начинается с 0. + int32 page = 4; //Текущая страница, начинается с 0. +} + +// Отчет «Справка о доходах за пределами РФ». +message DividendsForeignIssuerReport { + google.protobuf.Timestamp record_date = 1; //Дата фиксации реестра. + google.protobuf.Timestamp payment_date = 2; //Дата выплаты. + string security_name = 3; //Наименование ценной бумаги. + string isin = 4; //ISIN-идентификатор ценной бумаги. + string issuer_country = 5; //Страна эмитента. Для депозитарных расписок указывается страна эмитента базового актива. + int64 quantity = 6; //Количество ценных бумаг. + Quotation dividend = 7; //Выплаты на одну бумагу + Quotation external_commission = 8; //Комиссия внешних платежных агентов. + Quotation dividend_gross = 9; //Сумма до удержания налога. + Quotation tax = 10; //Сумма налога, удержанного агентом. + Quotation dividend_amount = 11; //Итоговая сумма выплаты. + string currency = 12; //Валюта. +} + +//Запрос установки stream-соединения. +message PortfolioStreamRequest { + repeated string accounts = 1; //Массив идентификаторов счетов пользователя. + PingDelaySettings ping_settings = 15; //Запрос настройки пинга. +} + +//Информация по позициям и доходностям портфелей. +message PortfolioStreamResponse { + oneof payload { + PortfolioSubscriptionResult subscriptions = 1; //Объект результата подписки. + PortfolioResponse portfolio = 2; //Объект стриминга портфеля. + Ping ping = 3; //Проверка активности стрима. + } +} + +//Объект результата подписки. +message PortfolioSubscriptionResult { + repeated AccountSubscriptionStatus accounts = 1; //Массив счетов клиента. + string tracking_id = 7; //Уникальный идентификатор запроса, подробнее: [tracking_id](/invest/intro/developer/protocols/grpc#tracking-id). + string stream_id = 8; //Идентификатор открытого соединения +} + +//Счет клиента. +message AccountSubscriptionStatus { + string account_id = 1; //Идентификатор счета. + PortfolioSubscriptionStatus subscription_status = 6; //Результат подписки. +} + +//Результат подписки. +enum PortfolioSubscriptionStatus { + PORTFOLIO_SUBSCRIPTION_STATUS_UNSPECIFIED = 0; //Тип не определен. + PORTFOLIO_SUBSCRIPTION_STATUS_SUCCESS = 1; //Успешно. + PORTFOLIO_SUBSCRIPTION_STATUS_ACCOUNT_NOT_FOUND = 2; //Счет не найден или недостаточно прав. + PORTFOLIO_SUBSCRIPTION_STATUS_INTERNAL_ERROR = 3; //Произошла ошибка. +} + +//Запрос списка операций по счету с пагинацией. +message GetOperationsByCursorRequest { + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; //Идентификатор счета клиента, обязательный параметр. Остальные параметры опциональны. + optional string instrument_id = 2; //Идентификатор инструмента. Принимает значение `figi`, `instrument_uid` или `ticker + '_' + class_code`. + optional google.protobuf.Timestamp from = 6; //Начало периода по UTC. + optional google.protobuf.Timestamp to = 7; //Окончание периода по UTC. + optional string cursor = 11; //Идентификатор элемента, с которого начать формировать ответ. + optional int32 limit = 12; //Лимит количества операций. По умолчанию — `100`, максимальное значение — `1000`. + repeated OperationType operation_types = 13; //Тип операции. Принимает значение из списка `OperationType`. + optional OperationState state = 14; //Статус запрашиваемых операций. Возможные значения указаны в `OperationState`. + optional bool without_commissions = 15; //Флаг возврата комиссии. По умолчанию — `false`. + optional bool without_trades = 16; //Флаг получения ответа без массива сделок. + optional bool without_overnights = 17; //Флаг показа overnight операций. +} + +//Список операций по счету с пагинацией. +message GetOperationsByCursorResponse { + bool has_next = 1; //Признак, есть ли следующий элемент. + string next_cursor = 2; //Следующий курсор. + repeated OperationItem items = 6; //Список операций. +} + +//Данные об операции. +message OperationItem { + string cursor = 1; //Курсор. + string broker_account_id = 6; //Номер счета клиента. + string id = 16; //Идентификатор операции, может меняться с течением времени. + string parent_operation_id = 17; //Идентификатор родительской операции. Может измениться, если изменился ID родительской операции. + string name = 18; //Название операции. + google.protobuf.Timestamp date = 21; //Дата поручения. + OperationType type = 22; //Тип операции. + string description = 23; //Описание операции. + OperationState state = 24; //Статус поручения. + string instrument_uid = 31; //Уникальный идентификатор инструмента. + string figi = 32; //FIGI. + string instrument_type = 33; //Тип инструмента. + InstrumentType instrument_kind = 34; //Тип инструмента. + string position_uid = 35; //Уникальный идентификатор позиции. + string ticker = 36; //Тикер инструмента. + string class_code = 37; //Класс-код (секция торгов). + MoneyValue payment = 41; //Сумма операции. + MoneyValue price = 42; //Цена операции за 1 инструмент. + MoneyValue commission = 43; //Комиссия. + MoneyValue yield = 44; //Доходность. + Quotation yield_relative = 45; //Относительная доходность. + MoneyValue accrued_int = 46; //Накопленный купонный доход. + int64 quantity = 51; //Количество единиц инструмента. + int64 quantity_rest = 52; //Неисполненный остаток по сделке. + int64 quantity_done = 53; //Исполненный остаток. + google.protobuf.Timestamp cancel_date_time = 56; //Дата и время снятия заявки. + string cancel_reason = 57; //Причина отмены операции. + OperationItemTrades trades_info = 61; //Массив сделок. + string asset_uid = 64; //Идентификатор актива. + repeated ChildOperationItem child_operations = 65; //Массив дочерних операций. +} + +//Массив с информацией о сделках. +message OperationItemTrades { + repeated OperationItemTrade trades = 6; +} + +//Сделка по операции. +message OperationItemTrade { + string num = 1; //Номер сделки. + google.protobuf.Timestamp date = 6; //Дата сделки. + int64 quantity = 11; //Количество в единицах. + MoneyValue price = 16; //Цена. + MoneyValue yield = 21; //Доходность. + Quotation yield_relative = 22; //Относительная доходность. +} + +//Запрос установки stream-соединения позиций. +message PositionsStreamRequest { + repeated string accounts = 1; //Массив идентификаторов счетов пользователя. + bool with_initial_positions = 3; //Получение состояния позиций на момент подключения. + PingDelaySettings ping_settings = 15; //Запрос настройки пинга. +} + +//Информация по изменению позиций портфеля. +message PositionsStreamResponse { + oneof payload { + PositionsSubscriptionResult subscriptions = 1; //Объект результата подписки. + PositionData position = 2; //Объект стриминга позиций. + Ping ping = 3; //Проверка активности стрима. + PositionsResponse initial_positions = 5; //Текущие позиции. + } +} + +//Объект результата подписки. +message PositionsSubscriptionResult { + repeated PositionsSubscriptionStatus accounts = 1; //Массив счетов клиента. + string tracking_id = 7; //Уникальный идентификатор запроса, подробнее: [tracking_id](/invest/intro/developer/protocols/grpc#tracking-id). + string stream_id = 8; //Идентификатор открытого соединения +} + +//Счет клиента. +message PositionsSubscriptionStatus { + string account_id = 1; //Идентификатор счета. + PositionsAccountSubscriptionStatus subscription_status = 6; //Результат подписки. +} + +//Результат подписки. +enum PositionsAccountSubscriptionStatus { + POSITIONS_SUBSCRIPTION_STATUS_UNSPECIFIED = 0; //Тип не определен. + POSITIONS_SUBSCRIPTION_STATUS_SUCCESS = 1; //Успешно. + POSITIONS_SUBSCRIPTION_STATUS_ACCOUNT_NOT_FOUND = 2; //Счет не найден или недостаточно прав. + POSITIONS_SUBSCRIPTION_STATUS_INTERNAL_ERROR = 3; //Произошла ошибка. +} + +//Данные о позиции портфеля. +message PositionData { + string account_id = 1; //Идентификатор счета. + repeated PositionsMoney money = 2; //Массив валютных позиций портфеля. + repeated PositionsSecurities securities = 3; //Список ценно-бумажных позиций портфеля. + repeated PositionsFutures futures = 4; //Список фьючерсов портфеля. + repeated PositionsOptions options = 5; //Список опционов портфеля. + google.protobuf.Timestamp date = 6; //Дата и время операции в формате UTC. +} + +//Валютная позиция портфеля. +message PositionsMoney { + MoneyValue available_value = 1; //Доступное количество валютный позиций. + MoneyValue blocked_value = 2; //Заблокированное количество валютных позиций. +} + +message ChildOperationItem { + string instrument_uid = 1; //Уникальный идентификатор инструмента. + MoneyValue payment = 2; //Сумма операции. +} + +//Запрос установки stream-соединения операций. +message OperationsStreamRequest { + repeated string accounts = 1; //Массив идентификаторов счетов пользователя. + PingDelaySettings ping_settings = 15; //Запрос настройки пинга. +} + +//Информация по операциям. +message OperationsStreamResponse { + oneof payload { + OperationsSubscriptionResult subscriptions = 1; //Объект результата подписки. + OperationData operation = 2; //Объект стриминга операций. + Ping ping = 3; //Проверка активности стрима. + } +} + +//Объект результата подписки. +message OperationsSubscriptionResult { + repeated string accounts = 1; //Массив счетов клиента. + OperationsAccountSubscriptionStatus subscription_status = 2; //Результат подписки. + string tracking_id = 7; //Уникальный идентификатор запроса, подробнее: [tracking_id](/invest/intro/developer/protocols/grpc#tracking-id). + string stream_id = 8; //Идентификатор открытого соединения +} + +//Результат подписки. +enum OperationsAccountSubscriptionStatus { + OPERATIONS_SUBSCRIPTION_STATUS_UNSPECIFIED = 0; //Тип не определен. + OPERATIONS_SUBSCRIPTION_STATUS_SUCCESS = 1; //Успешно. + OPERATIONS_SUBSCRIPTION_STATUS_ACCOUNT_NOT_FOUND = 2; //Счет не найден или недостаточно прав. + OPERATIONS_SUBSCRIPTION_STATUS_INTERNAL_ERROR = 3; //Произошла ошибка. +} + +//Данные об операции. +message OperationData { + string broker_account_id = 1; //Идентификатор счета. + string id = 2; //Номер поручения. + string parent_operation_id = 3; //Номер родительского поручения. + string name = 4; //Название инструмента. + google.protobuf.Timestamp date = 5; //Дата. + OperationType type = 6; //Тип операции. + OperationState state = 7; //Статус поручения. + string instrument_uid = 8; //Уникальный идентификатор инструмента. + string figi = 9; //FIGI-идентификатор инструмента. + string instrument_type = 10; //Тип инструмента. + InstrumentType instrument_kind = 11; //Тип инструмента. + string position_uid = 12; //Идентификатор позиции. + string ticker = 13; //Тикер инструмента. + string class_code = 14; //Класс-код (секция торгов). + MoneyValue payment = 15; //Сумма операции. +} diff --git a/apps/backend/src/modules/tbank/proto/contracts/users.proto b/apps/backend/src/modules/tbank/proto/contracts/users.proto new file mode 100644 index 0000000..cc17e38 --- /dev/null +++ b/apps/backend/src/modules/tbank/proto/contracts/users.proto @@ -0,0 +1,249 @@ +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"; +import "google/api/field_behavior.proto"; +import "common.proto"; + +service UsersService { /*С помощью сервиса можно получить:
1. + список счетов пользователя;
2. маржинальные показатели по счeту.*/ + + //GetAccounts — счета пользователя + //Получить список счетов. + rpc GetAccounts (GetAccountsRequest) returns (GetAccountsResponse); + + //GetMarginAttributes — маржинальные показатели по счeту + //Метод позволяет получить маржинальные показатели и ликвидность по заданному счeту. + rpc GetMarginAttributes (GetMarginAttributesRequest) returns (GetMarginAttributesResponse); + + //GetUserTariff — тариф пользователя + //Получить информацию о текущих лимитах на подклчение, согласно текущему тарифу пользователя. + rpc GetUserTariff (GetUserTariffRequest) returns (GetUserTariffResponse); + + //GetInfo — информация о пользователе + //Получить информацию о пользователе: тариф, признак квалификации, пройденные тесты и др. + rpc GetInfo (GetInfoRequest) returns (GetInfoResponse); + + //GetBankAccounts — банковские счета пользователя + //Получить список счетов пользователя, в том числе и банковских. + rpc GetBankAccounts(GetBankAccountsRequest) returns (GetBankAccountsResponse); + + //CurrencyTransfer — перевод денежных средств между счетами + //Перевести денежные средства между брокерскими счетами + rpc CurrencyTransfer(CurrencyTransferRequest) returns (CurrencyTransferResponse); + + //PayIn — пополнение брокерского счета + //Пополнить брокерский счёт с банковского + rpc PayIn(PayInRequest) returns (PayInResponse); + + //GetAccountValues — дополнительные показатели счетов + //Метод предназначен для получения дополнительных показателей счетов + rpc GetAccountValues(GetAccountValuesRequest) returns (GetAccountValuesResponse); +} + +//Запрос получения счетов пользователя. +message GetAccountsRequest { + optional AccountStatus status = 1; //Статус счета. +} + +//Список счетов пользователя. +message GetAccountsResponse { + // Массив счетов клиента. + repeated Account accounts = 1; +} + +//Информация о счeте. +message Account { + + // Идентификатор счeта. + string id = 1; + + // Тип счeта. + AccountType type = 2; + + // Название счeта. + string name = 3; + + // Статус счeта. + AccountStatus status = 4; + + // Дата открытия счeта в часовом поясе UTC. + google.protobuf.Timestamp opened_date = 5; + + // Дата закрытия счeта в часовом поясе UTC. + google.protobuf.Timestamp closed_date = 6; + + // Уровень доступа к текущему счeту (определяется токеном). + AccessLevel access_level = 7; +} + +//Тип счeта. +enum AccountType { + ACCOUNT_TYPE_UNSPECIFIED = 0; //Тип аккаунта не определeн. + ACCOUNT_TYPE_TINKOFF = 1; //Брокерский счeт Т-Инвестиций. + ACCOUNT_TYPE_TINKOFF_IIS = 2; //ИИС. + ACCOUNT_TYPE_INVEST_BOX = 3; //Инвесткопилка. + ACCOUNT_TYPE_INVEST_FUND = 4; //Фонд денежного рынка. + ACCOUNT_TYPE_DEBIT = 5; //Дебетовый карточный счeт. + ACCOUNT_TYPE_SAVING = 6; //Накопительный счeт. + ACCOUNT_TYPE_DFA = 7; //Смарт-счет. +} + +//Статус счeта. +enum AccountStatus { + ACCOUNT_STATUS_UNSPECIFIED = 0; //Статус счeта не определeн. + ACCOUNT_STATUS_NEW = 1; //Новый, в процессе открытия. + ACCOUNT_STATUS_OPEN = 2; //Открытый и активный счeт. + ACCOUNT_STATUS_CLOSED = 3; //Закрытый счeт. + ACCOUNT_STATUS_ALL = 4; //Все счета. +} + +//Запрос маржинальных показателей по счeту. +message GetMarginAttributesRequest { + + // Идентификатор счeта пользователя. + string account_id = 1 [(google.api.field_behavior) = REQUIRED]; +} + +//Маржинальные показатели по счeту. +message GetMarginAttributesResponse { + + // Ликвидная стоимость портфеля. [Подробнее про ликвидный портфель](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q4). + MoneyValue liquid_portfolio = 1; + + // Начальная маржа — начальное обеспечение для совершения новой сделки. [Подробнее про начальную и минимальную маржу](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q6). + MoneyValue starting_margin = 2; + + // Минимальная маржа — это минимальное обеспечение для поддержания позиции, которую вы уже открыли. [Подробнее про начальную и минимальную маржу](https://www.tbank.ru/invest/help/brokerage/account/margin/about/#q6). + MoneyValue minimal_margin = 3; + + // Уровень достаточности средств. Соотношение стоимости ликвидного портфеля к начальной марже. + Quotation funds_sufficiency_level = 4; + + // Объем недостающих средств. Разница между стартовой маржой и ликвидной стоимости портфеля. + MoneyValue amount_of_missing_funds = 5; + + // Скорректированная маржа. Начальная маржа, в которой плановые позиции рассчитываются с учeтом активных заявок на покупку позиций лонг или продажу позиций шорт. + MoneyValue corrected_margin = 6; + + // Размер гарантийного обеспечения, заблокированного под фьючерсы. + MoneyValue guarantee_for_futures = 7; +} + +//Запрос текущих лимитов пользователя. +message GetUserTariffRequest { +} + +//Текущие лимиты пользователя. +message GetUserTariffResponse { + repeated UnaryLimit unary_limits = 1; //Массив лимитов пользователя по unary-запросам. + repeated StreamLimit stream_limits = 2; //Массив лимитов пользователей для stream-соединений. +} + +//Лимит unary-методов. +message UnaryLimit { + int32 limit_per_minute = 1; //Количество unary-запросов в минуту. + repeated string methods = 2; //Названия методов. + optional int32 limit_per_second = 3; //Количество unary-запросов в секунду. +} + +//Лимит stream-соединений. +message StreamLimit { + int32 limit = 1; //Максимальное количество stream-соединений. + repeated string streams = 2; //Названия stream-методов. + int32 open = 3; //Текущее количество открытых stream-соединений. +} + +//Запрос информации о пользователе. +message GetInfoRequest { +} + +//Информация о пользователе. +message GetInfoResponse { + bool prem_status = 1; //Признак премиум клиента. + bool qual_status = 2; //Признак квалифицированного инвестора. + repeated string qualified_for_work_with = 3; //Набор требующих тестирования инструментов и возможностей, с которыми может работать пользователь. [Подробнее](/invest/services/accounts/faq_users). + string tariff = 4; //Наименование тарифа пользователя. + string user_id = 9; //Идентификатор пользователя. + string risk_level_code = 12; // Категория риска. +} + +//Уровень доступа к счeту. +enum AccessLevel { + ACCOUNT_ACCESS_LEVEL_UNSPECIFIED = 0; //Уровень доступа не определeн. + ACCOUNT_ACCESS_LEVEL_FULL_ACCESS = 1; //Полный доступ к счeту. + ACCOUNT_ACCESS_LEVEL_READ_ONLY = 2; //Доступ с уровнем прав «только чтение». + ACCOUNT_ACCESS_LEVEL_NO_ACCESS = 3; //Доступа нет. +} + +//Запрос списка банковских счетов пользователя. +message GetBankAccountsRequest { +} + +//Список банковских счетов пользователя. +message GetBankAccountsResponse { + repeated BankAccount bank_accounts = 1; //Массив банковских счетов. +} + +//Банковский счeт. +message BankAccount { + string id = 1; //Идентификатор счeта. + string name = 2; //Название счeта. + repeated MoneyValue money = 3; //Список валютных позиций на счeте. + google.protobuf.Timestamp opened_date = 4; //Дата открытия счeта в часовом поясе UTC. + AccountType type = 5; //Тип счeта. +} + +message CurrencyTransferRequest { + string from_account_id = 1 [(google.api.field_behavior) = REQUIRED]; // Номер счета списания. + string to_account_id = 2 [(google.api.field_behavior) = REQUIRED]; // Номер счета зачисления. + MoneyValue amount = 3 [(google.api.field_behavior) = REQUIRED]; // Сумма перевода с указанием валюты. + string transaction_id = 4; // Идентификатор запроса выставления поручения для целей идемпотентности в формате UUID. +} + +message CurrencyTransferResponse { + +} + +message PayInRequest { + string from_account_id = 1 [(google.api.field_behavior) = REQUIRED]; // Номер счета списания. + string to_account_id = 2 [(google.api.field_behavior) = REQUIRED]; // Номер брокерского счета зачисления. + MoneyValue amount = 3 [(google.api.field_behavior) = REQUIRED]; // Сумма перевода с указанием валюты. +} + +message PayInResponse { + +} + +enum AccountValue { + ACCOUNT_VALUE_UNSPECIFIED = 0; // Не определён. + ACCOUNT_VALUE_MARGIN_FEE = 1; // Размер комиссии за маржинальное кредитование. + ACCOUNT_VALUE_AMOUNT_WITHOUT_EXTRA_FEE = 2; // Остаток доступного лимита с текущей комиссией. +} + +message GetAccountValuesRequest { + repeated string accounts = 1; // Массив счетов пользователя. + repeated AccountValue values = 2; // Массив запрашиваемых параметров. +} + +message GetAccountValuesResponse { + repeated AccountValuesWithParameters accounts = 1; // Массив счетов с параметрами. +} + +message AccountValuesWithParameters { + string account_id = 1; // Номер счета. + repeated InstrumentParameter values = 2; // Массив параметров инструмента. +} + +message InstrumentParameter { + AccountValue name = 1; // Тип запрашиваемого параметра. + MoneyValue value = 2; // Значение запрашиваемого параметра. +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 970d15f..c3e72cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,8 @@ "version": "0.0.1", "hasInstallScript": true, "dependencies": { + "@grpc/grpc-js": "^1.14.4", + "@grpc/proto-loader": "^0.8.1", "@libsql/client": "^0.17.3", "@nestjs/axios": "^3.0.0", "@nestjs/cache-manager": "^2.0.0", @@ -38,7 +40,9 @@ "class-transformer": "^0.5.0", "class-validator": "^0.14.0", "cookie-parser": "^1.4.7", + "long": "^5.3.2", "p-queue": "^7.3.0", + "protobufjs": "^8.6.4", "reflect-metadata": "^0.1.13", "rxjs": "^7.8.0", "swagger-ui-express": "^5.0.0" @@ -6361,6 +6365,60 @@ } } }, + "node_modules/@grpc/grpc-js": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.4.tgz", + "integrity": "sha512-k9Dj3DV/itK9D06Y8f190Qgop7/Ui+D0njFV3LHMPwPT75DpXLQohE9Wmz0QElrJnzsjB7KPWiKJbOl7IPDArQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.8.0", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.1.tgz", + "integrity": "sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==", + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.5.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@grpc/proto-loader/node_modules/protobufjs": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.4.tgz", + "integrity": "sha512-RJJPTTpvFfHcWLkIa2JFWK4XvtSzS0yEWDmunqHXli1h3JlkbcQZXDZdcWxv+JK3Xsl5/UFDPZ0iGm7DAengYw==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.5", + "@protobufjs/eventemitter": "^1.1.1", + "@protobufjs/fetch": "^1.1.1", + "@protobufjs/float": "^1.0.2", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", + "@types/node": ">=13.7.0", + "long": "^5.3.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -6762,6 +6820,16 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "node_modules/@kurkle/color": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", @@ -7978,6 +8046,63 @@ "react-dom": "^18.0.0 || ^19.0.0" } }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.1.tgz", + "integrity": "sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.1.tgz", + "integrity": "sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.1.tgz", + "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==", + "license": "BSD-3-Clause" + }, "node_modules/@radix-ui/primitive": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", @@ -12728,7 +12853,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -12743,7 +12867,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -16914,7 +17037,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -20172,6 +20294,12 @@ "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", "license": "MIT" }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" + }, "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -20469,7 +20597,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "devOptional": true, "license": "Apache-2.0" }, "node_modules/longest-streak": { @@ -26222,6 +26349,18 @@ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "license": "ISC" }, + "node_modules/protobufjs": { + "version": "8.6.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-8.6.4.tgz", + "integrity": "sha512-/+XMv9JalknuncEJSwsyEVlwcxVLKx2iaoSUXFZA86MJkdqyOdfrlB1sB7S6aKyUk9tl20YY+SgQe5J2sJHTcg==", + "license": "BSD-3-Clause", + "dependencies": { + "long": "^5.3.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -27399,7 +27538,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -31824,7 +31962,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -31856,7 +31993,6 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -31875,7 +32011,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "license": "ISC", "engines": { "node": ">=12"