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"