diff --git a/clearing-parent/gateway-api/pom.xml b/clearing-parent/gateway-api/pom.xml
new file mode 100644
index 000000000..b0a04daec
--- /dev/null
+++ b/clearing-parent/gateway-api/pom.xml
@@ -0,0 +1,94 @@
+
+
+
+ clearing-parent
+ ru.spcex.clearing
+ SPCEX-1.0.0.0
+
+ 4.0.0
+
+ gateway-api
+
+
+ 17
+ 17
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ ru.spcex.platform
+ platform-imdg-api-hazelcast-impl
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ ru.spcex.platform
+ platform-messaging
+
+
+ io.springfox
+ springfox-swagger2
+
+
+ io.springfox
+ springfox-swagger-ui
+
+
+ ru.spcex.clearing
+ classes
+
+
+ ru.spcex.clearing
+ dictionary
+
+
+ ru.spcex.platform
+ platform-enum
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+ ${project.artifactId}
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.21.0
+
+
+ org.junit.platform
+ junit-platform-surefire-provider
+ 1.2.0-M1
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ 5.2.0-M1
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/GatewayApiApplication.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/GatewayApiApplication.java
new file mode 100644
index 000000000..9db71109a
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/GatewayApiApplication.java
@@ -0,0 +1,35 @@
+package ru.spcex.clearing.gatewayapi;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+import org.springframework.web.context.WebApplicationContext;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+
+@SpringBootApplication
+public class GatewayApiApplication extends SpringBootServletInitializer {
+
+ public static void main(String[] args) {
+ SpringApplication app = new SpringApplication(GatewayApiApplication.class);
+ app.run(args);
+ }
+
+ @Override
+ public void onStartup(ServletContext servletContext) throws ServletException {
+ super.onStartup(servletContext);
+ }
+
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
+ return builder.sources(GatewayApiApplication.class);
+ }
+
+ @Override
+ protected WebApplicationContext run(SpringApplication application) {
+ return super.run(application);
+ }
+
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/GatewayApiSettings.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/GatewayApiSettings.java
new file mode 100644
index 000000000..8fec38e7e
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/GatewayApiSettings.java
@@ -0,0 +1,42 @@
+package ru.spcex.clearing.gatewayapi.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.stereotype.Component;
+import ru.spcex.clearing.platform.messaging.config.element.KafkaConsumerSettings;
+import ru.spcex.clearing.platform.messaging.config.element.KafkaProducerSettings;
+import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams;
+
+@Component
+@PropertySource("file:${spring.config.location}/application.properties")
+@ConfigurationProperties("backend-api")
+public class GatewayApiSettings {
+ private HazelcastClientParams hazelcast;
+ private KafkaProducerSettings kafkaProducer;
+ private KafkaConsumerSettings kafkaConsumer;
+
+ public HazelcastClientParams getHazelcast() {
+ return hazelcast;
+ }
+
+ public void setHazelcast(HazelcastClientParams hazelcast) {
+ this.hazelcast = hazelcast;
+ }
+
+ public KafkaProducerSettings getKafkaProducer() {
+ return kafkaProducer;
+ }
+
+ public void setKafkaProducer(KafkaProducerSettings kafkaProducer) {
+ this.kafkaProducer = kafkaProducer;
+ }
+
+ public KafkaConsumerSettings getKafkaConsumer() {
+ return kafkaConsumer;
+ }
+
+ public void setKafkaConsumer(KafkaConsumerSettings kafkaConsumer) {
+ this.kafkaConsumer = kafkaConsumer;
+ }
+
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/WebConfig.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/WebConfig.java
new file mode 100644
index 000000000..73ac6c244
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/WebConfig.java
@@ -0,0 +1,11 @@
+package ru.spcex.clearing.gatewayapi.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+@EnableWebMvc
+public class WebConfig implements WebMvcConfigurer {
+
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/deserializers/InstantDeserializer.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/deserializers/InstantDeserializer.java
new file mode 100644
index 000000000..2e03347b6
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/deserializers/InstantDeserializer.java
@@ -0,0 +1,23 @@
+package ru.spcex.clearing.gatewayapi.config.deserializers;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import ru.spcex.platform.utils.time.TimeUtil;
+
+import java.io.IOException;
+import java.time.Instant;
+import java.time.format.DateTimeFormatter;
+
+public class InstantDeserializer extends JsonDeserializer {
+ private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss:SSS");
+
+ @Override
+ public Instant deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
+ String date = p.getText();
+ if (date == null || date.trim().length() == 0) {
+ return null;
+ }
+ return TimeUtil.parseInstantDateAndTime(date, formatter);
+ }
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/deserializers/LocalDateDeserializer.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/deserializers/LocalDateDeserializer.java
new file mode 100644
index 000000000..8e9f9fa63
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/deserializers/LocalDateDeserializer.java
@@ -0,0 +1,23 @@
+package ru.spcex.clearing.gatewayapi.config.deserializers;
+
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+
+import java.io.IOException;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
+public class LocalDateDeserializer extends JsonDeserializer {
+ private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
+
+ @Override
+ public LocalDate deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
+ String date = p.getText();
+ if (date == null || date.trim().length() == 0) {
+ return null;
+ }
+ return LocalDate.parse(date, formatter);
+ }
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/GatewayController.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/GatewayController.java
new file mode 100644
index 000000000..33c5545ea
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/GatewayController.java
@@ -0,0 +1,31 @@
+package ru.spcex.clearing.gatewayapi.controller;
+
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import ru.spcex.clearing.gatewayapi.request.FullRequest;
+
+@Controller
+@RequestMapping("/")
+public class GatewayController {
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ @ApiOperation(value = "Test gateway post request")
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = String.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = String.class)})
+ @RequestMapping(path = "/inbound_request", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.TEXT_PLAIN_VALUE)
+ @ResponseBody
+ public String inboundRequest(@RequestBody FullRequest request) {
+ log.info("toString: {}", request.toString());
+ log.info("Call test method for gateway-api controller");
+ return "gateway-api controller test method";
+ }
+
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/TestController.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/TestController.java
new file mode 100644
index 000000000..29ae31fc0
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/TestController.java
@@ -0,0 +1,28 @@
+package ru.spcex.clearing.gatewayapi.controller;
+
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+@Controller
+@RequestMapping("/")
+public class TestController {
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ @ApiOperation(value = "Test gateway-api availability.")
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = String.class)})
+ @RequestMapping(method = RequestMethod.GET, path = "/system/ping", produces = MediaType.TEXT_PLAIN_VALUE)
+ @ResponseBody
+ public String processGet() {
+ log.info("Call test method for gateway-api controller");
+ return "gateway-api controller test method";
+ }
+
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/FullRequest.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/FullRequest.java
new file mode 100644
index 000000000..df291f764
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/FullRequest.java
@@ -0,0 +1,79 @@
+package ru.spcex.clearing.gatewayapi.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import io.swagger.annotations.ApiModelProperty;
+import ru.spcex.clearing.gatewayapi.config.deserializers.InstantDeserializer;
+
+import java.time.Instant;
+import java.util.UUID;
+
+public class FullRequest {
+ @JsonProperty("id")
+ @ApiModelProperty(
+ value = """
+ Передавать новый UUID, если процесс стартовал по расписанию, или UUID, возвращенный в Клиринговую
+ систему в ответ на запрос Клиринговой системы об экспорте ценных бумаг (см. п. «Сигнальный REST API»),
+ если процесс стартовал по запросу от Клиринговой системы.
+ """,
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120002"
+ )
+ private UUID id;
+
+ @JsonProperty("type")
+ @ApiModelProperty(
+ value = """
+ Передавать «DAY_START», если процесс стартовал по расписанию, или «ON_DEMAND»,
+ если процесс стартовал по запросу от Клиринговой системы.
+ """,
+ example = "DAY_START"
+ )
+ private String type;
+
+ @JsonProperty("datetime")
+ @JsonDeserialize(using = InstantDeserializer.class)
+ @ApiModelProperty(
+ value = "Передавать дату и время формирования JSON объекта в формате «ДД.ММ.ГГГГ ЧЧ:ММ:СС:ссс».",
+ example = "01.01.2023 12:34:56:789"
+ )
+ private Instant datetime;
+
+ @JsonProperty("section")
+ @ApiModelProperty(
+ value = "Секция (FOND или MKR)", example = "FOND"
+ )
+ private String section;
+
+
+ public UUID getId() {
+ return id;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public Instant getDatetime() {
+ return datetime;
+ }
+
+ public void setDatetime(Instant datetime) {
+ this.datetime = datetime;
+ }
+
+ public String getSection() {
+ return section;
+ }
+
+ public void setSection(String section) {
+ this.section = section;
+ }
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Client.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Client.java
new file mode 100644
index 000000000..13110a66b
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Client.java
@@ -0,0 +1,68 @@
+package ru.spcex.clearing.gatewayapi.request.objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.UUID;
+
+public class Client {
+ @JsonProperty("company_id")
+ @ApiModelProperty(
+ value = "Ссылка на company",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120003"
+ )
+ private UUID companyId;
+
+ @JsonProperty("client_code")
+ @ApiModelProperty(
+ value = "Код клиента",
+ example = "CLI001"
+ )
+ private String clientCode;
+
+ @JsonProperty("money_account")
+ @ApiModelProperty(
+ value = "Денежный счет клиента",
+ example = "1234567890"
+ )
+ private String moneyAccount;
+
+ @JsonProperty("depo_account")
+ @ApiModelProperty(
+ value = "Бумажный счет клиента",
+ example = "2223334449"
+ )
+ private String depoAccount;
+
+ public UUID getCompanyId() {
+ return companyId;
+ }
+
+ public void setCompanyId(UUID companyId) {
+ this.companyId = companyId;
+ }
+
+ public String getClientCode() {
+ return clientCode;
+ }
+
+ public void setClientCode(String clientCode) {
+ this.clientCode = clientCode;
+ }
+
+ public String getMoneyAccount() {
+ return moneyAccount;
+ }
+
+ public void setMoneyAccount(String moneyAccount) {
+ this.moneyAccount = moneyAccount;
+ }
+
+ public String getDepoAccount() {
+ return depoAccount;
+ }
+
+ public void setDepoAccount(String depoAccount) {
+ this.depoAccount = depoAccount;
+ }
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Company.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Company.java
new file mode 100644
index 000000000..29a3d380e
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Company.java
@@ -0,0 +1,132 @@
+package ru.spcex.clearing.gatewayapi.request.objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.UUID;
+
+public class Company {
+ @JsonProperty("id")
+ @ApiModelProperty(
+ value = "Идентификатор Эмитента в Модуле регистрации биржевых инструментов",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120003"
+ )
+ private UUID id;
+
+ @JsonProperty("short_name")
+ @ApiModelProperty(
+ value = "Основные сведения\\Сокращенное наименование на русском языке",
+ example = "Банк ВТБ (ПАО)"
+ )
+ private String shortName;
+
+ @JsonProperty("full_name")
+ @ApiModelProperty(
+ value = "Основные сведения\\Полное наименование на русском языке",
+ example = "Банк ВТБ (публичное акционерное общество)"
+ )
+ private String fullName;
+
+ @JsonProperty("trading_code")
+ @ApiModelProperty(
+ value = "Биржевой код участника",
+ example = "49"
+ )
+ private String tradingCode;
+
+ @JsonProperty("clearing_code")
+ @ApiModelProperty(
+ value = "Краткий клиринговый код участника клиринга. Заполняется, если участник является участником клиринга.",
+ example = "49"
+ )
+ private String clearingCode;
+
+ @JsonProperty("registration_code")
+ @ApiModelProperty(
+ value = "Регистрационный код участника",
+ example = "E/I/7702070139///////1/044525187"
+ )
+ private String registrationCode;
+
+ @JsonProperty("initiator_code")
+ @ApiModelProperty(
+ value = "Код инициатора. Заполняется, если участник является инициатором.",
+ example = "AB"
+ )
+ private String initiatorCode;
+
+ @JsonProperty("workflow_status")
+ @ApiModelProperty(
+ value = """
+ «ACTV», если Эмитент не удален
+ «BLKD», если Эмитент удален
+ """,
+ example = "ACTV"
+ )
+ private String workflowStatus;
+
+
+ public UUID getId() {
+ return id;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public String getShortName() {
+ return shortName;
+ }
+
+ public void setShortName(String shortName) {
+ this.shortName = shortName;
+ }
+
+ public String getFullName() {
+ return fullName;
+ }
+
+ public void setFullName(String fullName) {
+ this.fullName = fullName;
+ }
+
+ public String getWorkflowStatus() {
+ return workflowStatus;
+ }
+
+ public void setWorkflowStatus(String workflowStatus) {
+ this.workflowStatus = workflowStatus;
+ }
+
+ public String getTradingCode() {
+ return tradingCode;
+ }
+
+ public void setTradingCode(String tradingCode) {
+ this.tradingCode = tradingCode;
+ }
+
+ public String getClearingCode() {
+ return clearingCode;
+ }
+
+ public void setClearingCode(String clearingCode) {
+ this.clearingCode = clearingCode;
+ }
+
+ public String getRegistrationCode() {
+ return registrationCode;
+ }
+
+ public void setRegistrationCode(String registrationCode) {
+ this.registrationCode = registrationCode;
+ }
+
+ public String getInitiatorCode() {
+ return initiatorCode;
+ }
+
+ public void setInitiatorCode(String initiatorCode) {
+ this.initiatorCode = initiatorCode;
+ }
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CompanyClearingCategory.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CompanyClearingCategory.java
new file mode 100644
index 000000000..d6c65966a
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CompanyClearingCategory.java
@@ -0,0 +1,70 @@
+package ru.spcex.clearing.gatewayapi.request.objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.UUID;
+
+public class CompanyClearingCategory {
+ @JsonProperty("company_id")
+ @ApiModelProperty(
+ value = "Ссылка на company",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120003"
+ )
+ private UUID companyId;
+
+ @JsonProperty("category")
+ @ApiModelProperty(
+ value = """
+ Категория клирингового обслуживания. Возможные значения:
+ · C - Категория «Ц»
+ · B - Категория «Б»
+ · F - Категория «Ф»
+ · I - Категория «И»
+ · V - Категория «В»
+ · T - Категория «Т»
+ · K - Категория «К»
+ """,
+ example = "F"
+ )
+ private String category;
+
+ @JsonProperty("workflow_status")
+ @ApiModelProperty(
+ value = """
+ Статус допуска к категории на текущую дату. Возможные значения:
+ · ACTV – Участник клиринга
+ · APPL – Допущен к клиринговому обслуживанию
+ · SSPD – Допуск приостановлен
+ · ROPN – Допуск возобновлен
+ · CLOS – Допуск прекращен
+ """,
+ example = "CLOS"
+ )
+ private String workflowStatus;
+
+
+ public UUID getCompanyId() {
+ return companyId;
+ }
+
+ public void setCompanyId(UUID companyId) {
+ this.companyId = companyId;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+
+ public void setCategory(String category) {
+ this.category = category;
+ }
+
+ public String getWorkflowStatus() {
+ return workflowStatus;
+ }
+
+ public void setWorkflowStatus(String workflowStatus) {
+ this.workflowStatus = workflowStatus;
+ }
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CompanyInfo.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CompanyInfo.java
new file mode 100644
index 000000000..234b056a4
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CompanyInfo.java
@@ -0,0 +1,134 @@
+package ru.spcex.clearing.gatewayapi.request.objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.UUID;
+
+public class CompanyInfo {
+ @JsonProperty("company_id")
+ @ApiModelProperty(
+ value = "Ссылка на company",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120003"
+ )
+ private UUID companyId;
+
+ @JsonProperty("country_code")
+ @ApiModelProperty(value = "RUS", example = "RUS")
+ private String countryCode;
+
+ @JsonProperty("legal_kind")
+ @ApiModelProperty(
+ value = "Вид субъекта. Всегда «JURD» (Юридическое лицо)",
+ example = "JURD"
+ )
+ private String legalKind;
+
+ @JsonProperty("organization_type")
+ @ApiModelProperty(
+ value = """
+ Признак кредитной организации. Возможные значения:
+ · «CRED» - является кредитной организацией
+ · «NCRD» - не является кредитной организациейe
+ """,
+ example = "CRED"
+ )
+ private String organizationType;
+
+ @JsonProperty("professional_sign")
+ @ApiModelProperty(
+ value = """
+ Признак проф. участника. Возможные значения:
+ · ALWD – Да
+ · DEND - Нет
+ """,
+ example = "DNED"
+ )
+ private String professionalSign;
+
+ @JsonProperty("residence")
+ @ApiModelProperty(
+ value = "Резиденция. Трехсимвольный код страны из классификатора ОКСМ.",
+ example = "RUS"
+ )
+ private String residence;
+
+ @JsonProperty("short_name_eng")
+ @ApiModelProperty(
+ value = "Основные сведения\\Сокращенное наименование на английском языке",
+ example = "VTB (PJSC)"
+ )
+ private String shortNameEng;
+
+ @JsonProperty("full_name_eng")
+ @ApiModelProperty(
+ value = "Основные сведения\\Полное наименование на английском языке",
+ example = "VTB (public joint stock company)"
+ )
+ private String fullNameEng;
+
+
+ public UUID getCompanyId() {
+ return companyId;
+ }
+
+ public void setCompanyId(UUID companyId) {
+ this.companyId = companyId;
+ }
+
+ public String getCountryCode() {
+ return countryCode;
+ }
+
+ public void setCountryCode(String countryCode) {
+ this.countryCode = countryCode;
+ }
+
+ public String getLegalKind() {
+ return legalKind;
+ }
+
+ public void setLegalKind(String legalKind) {
+ this.legalKind = legalKind;
+ }
+
+ public String getOrganizationType() {
+ return organizationType;
+ }
+
+ public void setOrganizationType(String organizationType) {
+ this.organizationType = organizationType;
+ }
+
+ public String getResidence() {
+ return residence;
+ }
+
+ public void setResidence(String residence) {
+ this.residence = residence;
+ }
+
+ public String getShortNameEng() {
+ return shortNameEng;
+ }
+
+ public void setShortNameEng(String shortNameEng) {
+ this.shortNameEng = shortNameEng;
+ }
+
+ public String getFullNameEng() {
+ return fullNameEng;
+ }
+
+ public void setFullNameEng(String fullNameEng) {
+ this.fullNameEng = fullNameEng;
+ }
+
+ public String getProfessionalSign() {
+ return professionalSign;
+ }
+
+ public void setProfessionalSign(String professionalSign) {
+ this.professionalSign = professionalSign;
+ }
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CompanySymbols.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CompanySymbols.java
new file mode 100644
index 000000000..95eee1a9d
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CompanySymbols.java
@@ -0,0 +1,76 @@
+package ru.spcex.clearing.gatewayapi.request.objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.UUID;
+
+public class CompanySymbols {
+ @JsonProperty("company_id")
+ @ApiModelProperty(
+ value = "Ссылка на company",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120003"
+ )
+ private UUID companyId;
+
+ @JsonProperty("company_symbol")
+ @ApiModelProperty(
+ value = """
+ Тип реквизита. Возможные значения:
+ · INN - Индивидуальный налоговый номер (ИНН)
+ · CIO - Код иностранной организации (КИО)
+ · OGRN - Основной государственный регистрационный номер (ОГРН)
+ · CPP - Код причины постановки (КПП)
+ · OCPO - Общероссийский классификатор предприятий и организаций (ОКПО)
+ · BIC - Банковский идентификационный код (БИК)
+ · LICB - Номер банковской лицензии (Лицензия банка)
+ · LICR – Номер брокерской лицензии
+ · LICD - Номер дилерской лицензии
+ · LICT - Номер лицензии по управлению ЦБ
+ · LICС - Номер лицензии по брокерской деятельности ПФИ (производных финансовых инструментов)
+ · LICF - Номер лицензии форекс-дилера
+ """,
+ example = "INN"
+ )
+ private String companySymbol;
+
+ @JsonProperty("company_symbol_value")
+ @ApiModelProperty(
+ value = """
+ Значения для company_symbol:
+ Для OCVD - Регистрационные данные\\ОКВЭД
+ Для INN - Основные сведения\\ИНН
+ Для CPP - Основные сведения\\КПП
+ Для OCPO - Основные сведения\\ОКПО
+ Для BIC - Основные сведения\\БИК
+ Для OGRN - Основные сведения\\ОГРН
+ """,
+ example = "7702070139"
+ )
+ private String companySymbolValue;
+
+
+ public UUID getCompanyId() {
+ return companyId;
+ }
+
+ public void setCompanyId(UUID companyId) {
+ this.companyId = companyId;
+ }
+
+ public String getCompanySymbol() {
+ return companySymbol;
+ }
+
+ public void setCompanySymbol(String companySymbol) {
+ this.companySymbol = companySymbol;
+ }
+
+ public String getCompanySymbolValue() {
+ return companySymbolValue;
+ }
+
+ public void setCompanySymbolValue(String companySymbolValue) {
+ this.companySymbolValue = companySymbolValue;
+ }
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Contact.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Contact.java
new file mode 100644
index 000000000..0428ecd51
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Contact.java
@@ -0,0 +1,76 @@
+package ru.spcex.clearing.gatewayapi.request.objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.UUID;
+
+public class Contact {
+ @JsonProperty("company_id")
+ @ApiModelProperty(
+ value = "Ссылка на компанию",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120003"
+ )
+ private UUID companyId;
+
+ @JsonProperty("contact_type")
+ @ApiModelProperty(
+ value = """
+ Передавать строки:
+ · ADRS
+ · POST
+ · CONT
+ · MAIL
+ · GDIR
+ · TRST
+ · FAX
+ · INFO
+ · WEB
+ """,
+ example = "WEB"
+ )
+ private String contactType;
+
+ @JsonProperty("contact_value")
+ @ApiModelProperty(
+ value = """
+ Значения для contact_type:
+ Для ADRS - Контакты\\Юридический адрес
+ Для POST - Контакты\\Почтовый адрес
+ Для CONT - Контакты\\ФИО контактного лица
+ Для MAIL - Контакты\\Адрес электронной почты
+ Для GDIR - Контакты\\ФИО руководителя + «, » + Должность руководителя + «, » + Телефон руководителя
+ Для TRST - Контакты\\ФИО отв. за фондовую деятельность + «, » + Должность отв. за фондовую деятельность + «, » + Телефон отв. за фондовую деятельность
+ Для FAX - Контакты\\Факс
+ Для INFO - Контакты\\ФИО контактного лица + «, » + Должность контактного лица + «, » + Эл. почта контактного лица + «, » + Телефон контактного лица
+ Для WEB - Контакты\\Веб-сайт
+ """,
+ example = "example@ex.ample"
+ )
+ private String contactValue;
+
+
+ public UUID getCompanyId() {
+ return companyId;
+ }
+
+ public void setCompanyId(UUID companyId) {
+ this.companyId = companyId;
+ }
+
+ public String getContactType() {
+ return contactType;
+ }
+
+ public void setContactType(String contactType) {
+ this.contactType = contactType;
+ }
+
+ public String getContactValue() {
+ return contactValue;
+ }
+
+ public void setContactValue(String contactValue) {
+ this.contactValue = contactValue;
+ }
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CouponSchedule.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CouponSchedule.java
new file mode 100644
index 000000000..a53ca6976
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CouponSchedule.java
@@ -0,0 +1,138 @@
+package ru.spcex.clearing.gatewayapi.request.objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import io.swagger.annotations.ApiModelProperty;
+import ru.spcex.clearing.gatewayapi.config.deserializers.LocalDateDeserializer;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.UUID;
+
+public class CouponSchedule {
+ @JsonProperty("security_id")
+ @ApiModelProperty(
+ value = "Ссылка на security",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120004"
+ )
+ private UUID securityId;
+
+ @JsonProperty("period_start_date")
+ @JsonDeserialize(using = LocalDateDeserializer.class)
+ @ApiModelProperty(
+ value = "Дата начала купонного периода, формат «ДД.ММ.ГГГГ»",
+ example = "30.12.2023"
+ )
+ private LocalDate periodStartDate;
+
+ @JsonProperty("period_end_date")
+ @JsonDeserialize(using = LocalDateDeserializer.class)
+ @ApiModelProperty(
+ value = "Дата выплаты купона, формат «ДД.ММ.ГГГГ»",
+ example = "30.12.2023"
+ )
+ private LocalDate periodEndDate;
+
+ @JsonProperty("coupon_rate")
+ @ApiModelProperty(
+ value = "Процентная ставка",
+ example = "7.5"
+ )
+ private BigDecimal couponRate;
+
+ @JsonProperty("coupon_number")
+ @ApiModelProperty(
+ value = "Порядковый номер",
+ example = "100"
+ )
+ private Long couponNumber;
+
+ @JsonProperty("coupon_currency")
+ @ApiModelProperty(
+ value = "Валюта",
+ example = "RUB"
+ )
+ private String couponCurrency;
+
+ @JsonProperty("accrued_coupon")
+ @ApiModelProperty(
+ value = "Сумма",
+ example = "100.15"
+ )
+ private BigDecimal accruedCoupon;
+
+ @JsonProperty("is_deleted")
+ @ApiModelProperty(
+ value = """
+ true, если Купон удален
+ false, если Купон не удален
+ """,
+ example = "true"
+ )
+ private Boolean isDeleted;
+
+
+ public UUID getSecurityId() {
+ return securityId;
+ }
+
+ public void setSecurityId(UUID securityId) {
+ this.securityId = securityId;
+ }
+
+ public LocalDate getPeriodStartDate() {
+ return periodStartDate;
+ }
+
+ public void setPeriodStartDate(LocalDate periodStartDate) {
+ this.periodStartDate = periodStartDate;
+ }
+
+ public LocalDate getPeriodEndDate() {
+ return periodEndDate;
+ }
+
+ public void setPeriodEndDate(LocalDate periodEndDate) {
+ this.periodEndDate = periodEndDate;
+ }
+
+ public BigDecimal getCouponRate() {
+ return couponRate;
+ }
+
+ public void setCouponRate(BigDecimal couponRate) {
+ this.couponRate = couponRate;
+ }
+
+ public Long getCouponNumber() {
+ return couponNumber;
+ }
+
+ public void setCouponNumber(Long couponNumber) {
+ this.couponNumber = couponNumber;
+ }
+
+ public String getCouponCurrency() {
+ return couponCurrency;
+ }
+
+ public void setCouponCurrency(String couponCurrency) {
+ this.couponCurrency = couponCurrency;
+ }
+
+ public BigDecimal getAccruedCoupon() {
+ return accruedCoupon;
+ }
+
+ public void setAccruedCoupon(BigDecimal accruedCoupon) {
+ this.accruedCoupon = accruedCoupon;
+ }
+
+ public Boolean getDeleted() {
+ return isDeleted;
+ }
+
+ public void setDeleted(Boolean deleted) {
+ isDeleted = deleted;
+ }
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Currency.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Currency.java
new file mode 100644
index 000000000..e12ccbf31
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Currency.java
@@ -0,0 +1,54 @@
+package ru.spcex.clearing.gatewayapi.request.objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.UUID;
+
+public class Currency {
+ @JsonProperty("id")
+ @ApiModelProperty(
+ value = "id",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120005"
+ )
+ private UUID id;
+
+ @JsonProperty("currency_code")
+ @ApiModelProperty(
+ value = "Значение из справочника «Коды валют» (dir_currency_code) dir_currency_code.letter_code",
+ example = "RUB"
+ )
+ private String currencyCode;
+
+ @JsonProperty("currency_code_numeric")
+ @ApiModelProperty(
+ value = "Значение из справочника «Коды валют» (dir_currency_code) dir_currency_code.numeric_code",
+ example = "643"
+ )
+ private String currencyCodeNumeric;
+
+
+ public UUID getId() {
+ return id;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public String getCurrencyCode() {
+ return currencyCode;
+ }
+
+ public void setCurrencyCode(String currencyCode) {
+ this.currencyCode = currencyCode;
+ }
+
+ public String getCurrencyCodeNumeric() {
+ return currencyCodeNumeric;
+ }
+
+ public void setCurrencyCodeNumeric(String currencyCodeNumeric) {
+ this.currencyCodeNumeric = currencyCodeNumeric;
+ }
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/DirAuctionBiddingType.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/DirAuctionBiddingType.java
new file mode 100644
index 000000000..cc10dc125
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/DirAuctionBiddingType.java
@@ -0,0 +1,68 @@
+package ru.spcex.clearing.gatewayapi.request.objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.UUID;
+
+public class DirAuctionBiddingType {
+ @JsonProperty("id")
+ @ApiModelProperty(
+ value = "id",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120004"
+ )
+ private UUID id;
+
+ @JsonProperty("type_code")
+ @ApiModelProperty(
+ value = "Тип",
+ example = "D"
+ )
+ private String typeCode;
+
+ @JsonProperty("name")
+ @ApiModelProperty(
+ value = "Наименование",
+ example = "Депозитный аукцион"
+ )
+ private String name;
+
+ @JsonProperty("is_deleted")
+ @ApiModelProperty(
+ value = "Флаг удалённости",
+ example = "true"
+ )
+ private Boolean isDeleted;
+
+ public UUID getId() {
+ return id;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public String getTypeCode() {
+ return typeCode;
+ }
+
+ public void setTypeCode(String typeCode) {
+ this.typeCode = typeCode;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Boolean getDeleted() {
+ return isDeleted;
+ }
+
+ public void setDeleted(Boolean deleted) {
+ isDeleted = deleted;
+ }
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/DirCurrencyCode.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/DirCurrencyCode.java
new file mode 100644
index 000000000..a43a082ef
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/DirCurrencyCode.java
@@ -0,0 +1,36 @@
+package ru.spcex.clearing.gatewayapi.request.objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+
+public class DirCurrencyCode {
+ @JsonProperty("letter_code")
+ @ApiModelProperty(
+ value = "Символьный код валюты",
+ example = "RUB"
+ )
+ private String letterCode;
+
+ @JsonProperty("numeric_code")
+ @ApiModelProperty(
+ value = "Численный код валюты",
+ example = "643"
+ )
+ private String numericCode;
+
+ public String getLetterCode() {
+ return letterCode;
+ }
+
+ public void setLetterCode(String letterCode) {
+ this.letterCode = letterCode;
+ }
+
+ public String getNumericCode() {
+ return numericCode;
+ }
+
+ public void setNumericCode(String numericCode) {
+ this.numericCode = numericCode;
+ }
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/DirTradingModeMkr.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/DirTradingModeMkr.java
new file mode 100644
index 000000000..cf5c92fe7
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/DirTradingModeMkr.java
@@ -0,0 +1,86 @@
+package ru.spcex.clearing.gatewayapi.request.objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.UUID;
+
+public class DirTradingModeMkr {
+ @JsonProperty("id")
+ @ApiModelProperty(
+ value = "id",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120006"
+ )
+ private UUID id;
+
+ @JsonProperty("trading_code")
+ @ApiModelProperty(
+ value = "trading_code",
+ example = "XMDT"
+ )
+ private String tradingCode;
+
+ @JsonProperty("name")
+ @ApiModelProperty(
+ value = "name",
+ example = "Размещение: депозитный аукцион"
+ )
+ private String name;
+
+ @JsonProperty("settle_code")
+ @ApiModelProperty(
+ value = "settle_code",
+ example = "T0, Bn"
+ )
+ private String settleCode;
+
+ @JsonProperty("is_deleted")
+ @ApiModelProperty(
+ value = """
+ true, если Режим торгов удален
+ false, если Режим торгов не удален
+ """,
+ example = "true"
+ )
+ private Boolean isDeleted;
+
+ public UUID getId() {
+ return id;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public String getTradingCode() {
+ return tradingCode;
+ }
+
+ public void setTradingCode(String tradingCode) {
+ this.tradingCode = tradingCode;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getSettleCode() {
+ return settleCode;
+ }
+
+ public void setSettleCode(String settleCode) {
+ this.settleCode = settleCode;
+ }
+
+ public Boolean getDeleted() {
+ return isDeleted;
+ }
+
+ public void setDeleted(Boolean deleted) {
+ isDeleted = deleted;
+ }
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/ExchangeInstrument.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/ExchangeInstrument.java
new file mode 100644
index 000000000..4f426ed18
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/ExchangeInstrument.java
@@ -0,0 +1,285 @@
+package ru.spcex.clearing.gatewayapi.request.objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import io.swagger.annotations.ApiModelProperty;
+import ru.spcex.clearing.gatewayapi.config.deserializers.LocalDateDeserializer;
+
+import java.time.LocalDate;
+import java.util.UUID;
+
+public class ExchangeInstrument {
+ @JsonProperty("id")
+ @ApiModelProperty(
+ value = "id",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120002"
+ )
+ private UUID id;
+
+ @JsonProperty("code")
+ @ApiModelProperty(
+ value = "Код биржевого инструмента",
+ example = "DSTАА10VX7X8X9"
+ )
+ private String code;
+
+ @JsonProperty("name")
+ @ApiModelProperty(
+ value = "Наименование биржевого инструмента",
+ example = "Договор банковского депозита"
+ )
+ private String name;
+
+ @JsonProperty("initiator_id")
+ @ApiModelProperty(
+ value = "Идентификатор Инициатора (Участника торгов) в Модуле «Реестр Участников торгов, Участников клиринга и клиентов УТ/УК».",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120003"
+ )
+ private UUID initiatorId;
+
+ @JsonProperty("auction_bidding_type_id")
+ @ApiModelProperty(
+ value = "Тип аукциона\\торгов. Ссылка на dir_auction_bidding_type (id)",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120004"
+ )
+ private UUID auctionBiddingTypeId;
+
+ @JsonProperty("exchange_offexchange")
+ @ApiModelProperty(
+ value = """
+ Биржевой\\Внебиржевой
+ Передавать:
+ · «exchange», если «Биржевой»
+ · «off_exchange», если «Внебиржевой»
+ """,
+ example = "exchange"
+ )
+ private String exchangeOffExchange;
+
+ @JsonProperty("price_measurement_unit")
+ @ApiModelProperty(
+ value = """
+ Единица измерения цены
+ Передавать:
+ · «Percentage_of_face_value», если «Процент от номинала»
+ · «In_settlement_currency», если «В валюте расчетов»
+ """,
+ example = "Percentage_of_face_value"
+ )
+ private String priceMeasurementUnit;
+
+ @JsonProperty("price_type")
+ @ApiModelProperty(
+ value = """
+ Вид цены
+ Передавать:
+ · «FLOATING», если «Плавающая»
+ · «FIXED», если «Фиксированная»
+ """
+ )
+ private String priceType;
+
+ @JsonProperty("settlement_currency_letter_code")
+ @ApiModelProperty(
+ value = "Валюта расчетов. Ссылка на dir_currency_code (letter_code)",
+ example = "RUB"
+ )
+ private String settlementCurrencyLetterCode;
+
+ @JsonProperty("order_execution_type_by_price")
+ @ApiModelProperty(
+ value = """
+ Тип исполнения заявок по цене
+ Передавать:
+ · «depositor_application_price», если «По цене заявки вкладчика»
+ · «Counter_price», если «По встречной цене»
+ """,
+ example = "Counter_price"
+ )
+ private String orderExecutionTypeByPrice;
+
+ @JsonProperty("order_execution_type_by_volume")
+ @ApiModelProperty(
+ value = """
+ Тип исполнения заявок по объему
+ Передавать:
+ · «Proportional_lot», если «Пропорционально с точностью до лота (остаток остается)»
+ · «Proportional_rub», если «Пропорционально с точностью до рубля (остаток остается)»
+ · «FULLY», если «Полностью»
+ """,
+ example = "FULLY"
+ )
+ private String orderExecutionTypeByVolume;
+
+ @JsonProperty("clearing_organization")
+ @ApiModelProperty(
+ value = "Клиринговая организация",
+ example = "Клиринговая организация"
+ )
+ private String clearingOrganization;
+
+ @JsonProperty("settlement_organization")
+ @ApiModelProperty(
+ value = "Расчётная организация",
+ example = "Расчётная организация"
+ )
+ private String settlementOrganization;
+
+ @JsonProperty("specification_approval_date")
+ @JsonDeserialize(using = LocalDateDeserializer.class)
+ @ApiModelProperty(
+ value = "Дата принятия Решения об утверждении Спецификации биржевого инструмента",
+ example = "30.12.2023"
+ )
+ private LocalDate specificationApprovalDate;
+
+ @JsonProperty("specification_approval_number")
+ @ApiModelProperty(
+ value = "Номер принятия Решения об утверждении Спецификации биржевого инструмента",
+ example = "070323-01"
+ )
+ private LocalDate specificationApprovalNumber;
+
+ @JsonProperty("workflow_status")
+ @ApiModelProperty(
+ value = """
+ «ACTV», если статус Спецификации биржевого инструмента:
+ БИ допущен к торгам
+
+ «BLKD», если статус Спецификации биржевого инструмента:
+ БИ не допущен к торгам
+ Торги БИ приостановлены
+ Торги БИ прекращены
+ """,
+ example = "ACTV"
+ )
+ private String workflowStatus;
+
+ public UUID getId() {
+ return id;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public UUID getInitiatorId() {
+ return initiatorId;
+ }
+
+ public void setInitiatorId(UUID initiatorId) {
+ this.initiatorId = initiatorId;
+ }
+
+ public UUID getAuctionBiddingTypeId() {
+ return auctionBiddingTypeId;
+ }
+
+ public void setAuctionBiddingTypeId(UUID auctionBiddingTypeId) {
+ this.auctionBiddingTypeId = auctionBiddingTypeId;
+ }
+
+ public String getExchangeOffExchange() {
+ return exchangeOffExchange;
+ }
+
+ public void setExchangeOffExchange(String exchangeOffExchange) {
+ this.exchangeOffExchange = exchangeOffExchange;
+ }
+
+ public String getPriceMeasurementUnit() {
+ return priceMeasurementUnit;
+ }
+
+ public void setPriceMeasurementUnit(String priceMeasurementUnit) {
+ this.priceMeasurementUnit = priceMeasurementUnit;
+ }
+
+ public String getPriceType() {
+ return priceType;
+ }
+
+ public void setPriceType(String priceType) {
+ this.priceType = priceType;
+ }
+
+ public String getSettlementCurrencyLetterCode() {
+ return settlementCurrencyLetterCode;
+ }
+
+ public void setSettlementCurrencyLetterCode(String settlementCurrencyLetterCode) {
+ this.settlementCurrencyLetterCode = settlementCurrencyLetterCode;
+ }
+
+ public String getOrderExecutionTypeByPrice() {
+ return orderExecutionTypeByPrice;
+ }
+
+ public void setOrderExecutionTypeByPrice(String orderExecutionTypeByPrice) {
+ this.orderExecutionTypeByPrice = orderExecutionTypeByPrice;
+ }
+
+ public String getOrderExecutionTypeByVolume() {
+ return orderExecutionTypeByVolume;
+ }
+
+ public void setOrderExecutionTypeByVolume(String orderExecutionTypeByVolume) {
+ this.orderExecutionTypeByVolume = orderExecutionTypeByVolume;
+ }
+
+ public String getClearingOrganization() {
+ return clearingOrganization;
+ }
+
+ public void setClearingOrganization(String clearingOrganization) {
+ this.clearingOrganization = clearingOrganization;
+ }
+
+ public String getSettlementOrganization() {
+ return settlementOrganization;
+ }
+
+ public void setSettlementOrganization(String settlementOrganization) {
+ this.settlementOrganization = settlementOrganization;
+ }
+
+ public LocalDate getSpecificationApprovalDate() {
+ return specificationApprovalDate;
+ }
+
+ public void setSpecificationApprovalDate(LocalDate specificationApprovalDate) {
+ this.specificationApprovalDate = specificationApprovalDate;
+ }
+
+ public LocalDate getSpecificationApprovalNumber() {
+ return specificationApprovalNumber;
+ }
+
+ public void setSpecificationApprovalNumber(LocalDate specificationApprovalNumber) {
+ this.specificationApprovalNumber = specificationApprovalNumber;
+ }
+
+ public String getWorkflowStatus() {
+ return workflowStatus;
+ }
+
+ public void setWorkflowStatus(String workflowStatus) {
+ this.workflowStatus = workflowStatus;
+ }
+}
\ No newline at end of file
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Listing.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Listing.java
new file mode 100644
index 000000000..8965e1d2a
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Listing.java
@@ -0,0 +1,243 @@
+package ru.spcex.clearing.gatewayapi.request.objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import io.swagger.annotations.ApiModelProperty;
+import ru.spcex.clearing.gatewayapi.config.deserializers.LocalDateDeserializer;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.UUID;
+
+public class Listing {
+ @JsonProperty("security_id")
+ @ApiModelProperty(
+ value = "Ссылка на security",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120004"
+ )
+ private UUID securityId;
+
+ @JsonProperty("lot_size")
+ @ApiModelProperty(
+ value = "Размер лота",
+ example = "10"
+ )
+ private BigDecimal lotSize;
+
+ @JsonProperty("symbol_code")
+ @ApiModelProperty(
+ value = "Значение из «Общая информация\\Код биржевого инструмента СПВБ»",
+ example = "VTB_001P-06"
+ )
+ private String symbolCode;
+
+ @JsonProperty("symbol_name")
+ @ApiModelProperty(
+ value = "Значение из «Общая информация\\Сокращенное наименование на русском языке»",
+ example = "Биржевые облигации ВТБ"
+ )
+ private String symbolName;
+
+ @JsonProperty("trading_currency")
+ @ApiModelProperty(
+ value = "Валюта торгов",
+ example = "RUB"
+ )
+ private String tradingCurrency;
+
+ @JsonProperty("workflow_status")
+ @ApiModelProperty(
+ value = """
+ «ACTV», если Режим торгов не удален
+ «BLKD», если Режим торгов удален
+ """,
+ example = "ACTV"
+ )
+ private String workflowStatus;
+
+ @JsonProperty("precision")
+ @ApiModelProperty(
+ value = "Точность цены, значение dir_price_min_step_precision.precision",
+ example = "10"
+ )
+ private Long precision;
+
+ @JsonProperty("min_step")
+ @ApiModelProperty(
+ value = "Минимальный шаг цены, значение dir_price_min_step_precision.min_step",
+ example = "10"
+ )
+ private Long minStep;
+
+ @JsonProperty("settle_code")
+ @ApiModelProperty(
+ value = "Код расчетов, значение dir_settle_code.settle_code",
+ example = "T0"
+ )
+ private String settleCode;
+
+ @JsonProperty("settle_days")
+ @ApiModelProperty(
+ value = "Из settle_code выделить подстроку – все символы, кроме первого слева, и привести подстроку к числу",
+ example = "0"
+ )
+ private Long settleDays;
+
+ @JsonProperty("name")
+ @ApiModelProperty(
+ value = "Режим торгов, значение dir_trading_mode.name",
+ example = "Обл. с ПК - Торги"
+ )
+ private String name;
+
+ @JsonProperty("code")
+ @ApiModelProperty(
+ value = "Режим торгов, значение dir_trading_mode.trading_code",
+ example = "UBVC"
+ )
+ private String code;
+
+ @JsonProperty("sector")
+ @ApiModelProperty(
+ value = "FOND",
+ example = "FOND"
+ )
+ private String sector;
+
+ @JsonProperty("start_date")
+ @JsonDeserialize(using = LocalDateDeserializer.class)
+ @ApiModelProperty(
+ value = "Дата начала действия, формат «ДД.ММ.ГГГГ»",
+ example = "30.12.2023"
+ )
+ private LocalDate startDate;
+
+ @JsonProperty("end_date")
+ @JsonDeserialize(using = LocalDateDeserializer.class)
+ @ApiModelProperty(
+ value = "Дата окончания действия, формат «ДД.ММ.ГГГГ»",
+ example = "30.12.2023"
+ )
+ private LocalDate endDate;
+
+
+ public UUID getSecurityId() {
+ return securityId;
+ }
+
+ public void setSecurityId(UUID securityId) {
+ this.securityId = securityId;
+ }
+
+ public BigDecimal getLotSize() {
+ return lotSize;
+ }
+
+ public void setLotSize(BigDecimal lotSize) {
+ this.lotSize = lotSize;
+ }
+
+ public String getSymbolCode() {
+ return symbolCode;
+ }
+
+ public void setSymbolCode(String symbolCode) {
+ this.symbolCode = symbolCode;
+ }
+
+ public String getSymbolName() {
+ return symbolName;
+ }
+
+ public void setSymbolName(String symbolName) {
+ this.symbolName = symbolName;
+ }
+
+ public String getTradingCurrency() {
+ return tradingCurrency;
+ }
+
+ public void setTradingCurrency(String tradingCurrency) {
+ this.tradingCurrency = tradingCurrency;
+ }
+
+ public String getWorkflowStatus() {
+ return workflowStatus;
+ }
+
+ public void setWorkflowStatus(String workflowStatus) {
+ this.workflowStatus = workflowStatus;
+ }
+
+ public Long getPrecision() {
+ return precision;
+ }
+
+ public void setPrecision(Long precision) {
+ this.precision = precision;
+ }
+
+ public Long getMinStep() {
+ return minStep;
+ }
+
+ public void setMinStep(Long minStep) {
+ this.minStep = minStep;
+ }
+
+ public String getSettleCode() {
+ return settleCode;
+ }
+
+ public void setSettleCode(String settleCode) {
+ this.settleCode = settleCode;
+ }
+
+ public Long getSettleDays() {
+ return settleDays;
+ }
+
+ public void setSettleDays(Long settleDays) {
+ this.settleDays = settleDays;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public String getSector() {
+ return sector;
+ }
+
+ public void setSector(String sector) {
+ this.sector = sector;
+ }
+
+ public LocalDate getStartDate() {
+ return startDate;
+ }
+
+ public void setStartDate(LocalDate startDate) {
+ this.startDate = startDate;
+ }
+
+ public LocalDate getEndDate() {
+ return endDate;
+ }
+
+ public void setEndDate(LocalDate endDate) {
+ this.endDate = endDate;
+ }
+}
\ No newline at end of file
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Nominal.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Nominal.java
new file mode 100644
index 000000000..9fb026604
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Nominal.java
@@ -0,0 +1,76 @@
+package ru.spcex.clearing.gatewayapi.request.objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import io.swagger.annotations.ApiModelProperty;
+import ru.spcex.clearing.gatewayapi.config.deserializers.LocalDateDeserializer;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.UUID;
+
+public class Nominal {
+ @JsonProperty("security_id")
+ @ApiModelProperty(
+ value = "Ссылка на security",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120004"
+ )
+ private UUID securityId;
+
+ @JsonProperty("nominal")
+ @ApiModelProperty(
+ value = "Номинал",
+ example = "1000"
+ )
+ private BigDecimal nominal;
+
+ @JsonProperty("date")
+ @JsonDeserialize(using = LocalDateDeserializer.class)
+ @ApiModelProperty(
+ value = "Дата, формат «ДД.ММ.ГГГГ»",
+ example = "30.12.2023"
+ )
+ private LocalDate date;
+
+ @JsonProperty("is_deleted")
+ @ApiModelProperty(
+ value = """
+ true, если Номинал удален
+ false, если Номинал не удален
+ """,
+ example = "true"
+ )
+ private Boolean isDeleted;
+
+ public UUID getSecurityId() {
+ return securityId;
+ }
+
+ public void setSecurityId(UUID securityId) {
+ this.securityId = securityId;
+ }
+
+ public BigDecimal getNominal() {
+ return nominal;
+ }
+
+ public void setNominal(BigDecimal nominal) {
+ this.nominal = nominal;
+ }
+
+ public LocalDate getDate() {
+ return date;
+ }
+
+ public void setDate(LocalDate date) {
+ this.date = date;
+ }
+
+ public Boolean getDeleted() {
+ return isDeleted;
+ }
+
+ public void setDeleted(Boolean deleted) {
+ isDeleted = deleted;
+ }
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/ProfileDocument.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/ProfileDocument.java
new file mode 100644
index 000000000..a3714104d
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/ProfileDocument.java
@@ -0,0 +1,130 @@
+package ru.spcex.clearing.gatewayapi.request.objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import io.swagger.annotations.ApiModelProperty;
+import ru.spcex.clearing.gatewayapi.config.deserializers.LocalDateDeserializer;
+
+import java.time.LocalDate;
+import java.util.UUID;
+
+public class ProfileDocument {
+ @JsonProperty("company_id")
+ @ApiModelProperty(
+ value = "Ссылка на company",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120003"
+ )
+ private UUID companyId;
+
+ @JsonProperty("document_type")
+ @ApiModelProperty(
+ value = """
+ Тип. документа. Возможные значения:
+ · CNTR - Договор клиринга
+ · FORM - Анкета участника
+ · LICB - Банковская лицензия
+ · LICR - Брокерская лицензия
+ · LICD - Номер дилерской лицензии
+ · LICT - Номер лицензии по управлению ЦБ
+ · LICС - Номер лицензии по брокерской деятельности ПФИ (производных финансовых инструментов)
+ · LICF - Номер лицензии форекс-дилера
+ · EDOC - Договор об электронном взаимодействии
+ · XCNT - Документ о расторжении Договора клиринга
+ """,
+ example = "XCNT"
+ )
+ private String documentType;
+
+ @JsonProperty("issue_date")
+ @JsonDeserialize(using = LocalDateDeserializer.class)
+ @ApiModelProperty(
+ value = "Дата выдачи документа",
+ example = "30.12.2023"
+ )
+ private LocalDate issueDate;
+
+ @JsonProperty("issuer")
+ @ApiModelProperty(
+ value = "Кем выдан",
+ example = ""
+ )
+ private String issuer;
+
+ @JsonProperty("number")
+ @ApiModelProperty(
+ value = "Номер документа",
+ example = "122/Б"
+ )
+ private String number;
+
+ @JsonProperty("valid_to_date")
+ @JsonDeserialize(using = LocalDateDeserializer.class)
+ @ApiModelProperty(
+ value = "Дата окончания срока действия",
+ example = "30.12.2023"
+ )
+ private LocalDate validToDate;
+
+ @JsonProperty("link")
+ @ApiModelProperty(
+ value = "Ссылка на документ в модуле хранения документов",
+ example = "00cd62ba-bb30-4e9e-a8b6-7937d7492212"
+ )
+ private String link;
+
+ public UUID getCompanyId() {
+ return companyId;
+ }
+
+ public void setCompanyId(UUID companyId) {
+ this.companyId = companyId;
+ }
+
+ public String getDocumentType() {
+ return documentType;
+ }
+
+ public void setDocumentType(String documentType) {
+ this.documentType = documentType;
+ }
+
+ public LocalDate getIssueDate() {
+ return issueDate;
+ }
+
+ public void setIssueDate(LocalDate issueDate) {
+ this.issueDate = issueDate;
+ }
+
+ public String getIssuer() {
+ return issuer;
+ }
+
+ public void setIssuer(String issuer) {
+ this.issuer = issuer;
+ }
+
+ public String getNumber() {
+ return number;
+ }
+
+ public void setNumber(String number) {
+ this.number = number;
+ }
+
+ public LocalDate getValidToDate() {
+ return validToDate;
+ }
+
+ public void setValidToDate(LocalDate validToDate) {
+ this.validToDate = validToDate;
+ }
+
+ public String getLink() {
+ return link;
+ }
+
+ public void setLink(String link) {
+ this.link = link;
+ }
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Security.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Security.java
new file mode 100644
index 000000000..485e370fc
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Security.java
@@ -0,0 +1,314 @@
+package ru.spcex.clearing.gatewayapi.request.objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import io.swagger.annotations.ApiModelProperty;
+import ru.spcex.clearing.gatewayapi.config.deserializers.LocalDateDeserializer;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.UUID;
+
+public class Security {
+ @JsonProperty("id")
+ @ApiModelProperty(
+ value = "id (uuid)",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120004"
+ )
+ private UUID id;
+
+ @JsonProperty("instrument_type")
+ @ApiModelProperty(
+ value = """
+ «EQTY», если Общая информация\\Вид ценной бумаги = «E - Долевые ценные бумаги (акции)»
+ «BOND», если Общая информация\\Вид ценной бумаги = «B - Долговые ценные бумаги (облигации)»
+ """,
+ example = "BOND"
+ )
+ private String instrumentType;
+
+ @JsonProperty("issuer_id")
+ @ApiModelProperty(
+ value = "Ссылка на company",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120003"
+ )
+ private UUID issuerId;
+ @JsonProperty("short_name")
+ @ApiModelProperty(
+ value = "Основные сведения\\Сокращенное наименование на русском языке",
+ example = "Биржевые облигации ВТБ"
+ )
+ private String shortName;
+
+ @JsonProperty("full_name")
+ @ApiModelProperty(
+ value = "Основные сведения\\Полное наименование на русском языке",
+ example = """
+ Биржевые облигации документарные процентные неконвертируемые на предъявителя
+ с обязательным централизованным хранением серии 001P-06"
+ """
+ )
+ private String fullName;
+
+ @JsonProperty("short_name_eng")
+ @ApiModelProperty(
+ value = "Основные сведения\\Сокращенное наименование на английском языке",
+ example = "VTB exchange-traded bonds"
+ )
+ private String shortNameEng;
+
+ @JsonProperty("full_name_eng")
+ @ApiModelProperty(
+ value = "Основные сведения\\Полное наименование на английском языке",
+ example = """
+ Exchange-traded interest-bearing non-convertible bearer bonds
+ with obligatory centralized storage of series 001P-06
+ """
+ )
+ private String fullNameEng;
+
+ @JsonProperty("security_symbol")
+ @ApiModelProperty(
+ value = "Общая информация\\Код биржевого инструмента СПВБ",
+ example = "VTB_001P-06"
+ )
+ private String securitySymbol;
+
+ @JsonProperty("isin")
+ @ApiModelProperty(
+ value = "Общая информация\\ISIN",
+ example = "RU000A0ZYWY5"
+ )
+ private String isin;
+
+ @JsonProperty("workflow_status")
+ @ApiModelProperty(
+ value = """
+ «ACTV», если статус ценной бумаги:
+ Допущена к торгам в режиме размещения
+ Допущена к торгам в режиме обращения
+
+ «BLKD», если статус ценной бумаги:
+ Не допущена к торгам
+ Торги временно приостановлены
+ Выведена из обращения
+ """,
+ example = "ACTV"
+ )
+ private String workflowStatus;
+
+ @JsonProperty("share_type")
+ @ApiModelProperty(
+ value = """
+ «S», если Общая информация\\Тип ценной бумаги = «S - Обыкновенная акция»
+ «P», если Общая информация\\Тип ценной бумаги = «P - Привилегированная акция»
+ """,
+ example = "S"
+ )
+ private String shareType;
+
+ @JsonProperty("bond_type")
+ @ApiModelProperty(
+ value = """
+ «Z», если Общая информация\\Тип ценной бумаги = «Z - Дисконтная облигация»
+ «F», если Общая информация\\Тип ценной бумаги = «F - Купонная облигация с постоянным купоном»
+ «V», если Общая информация\\Тип ценной бумаги = «V - Купонная облигация с переменным купоном»
+ «C», если Общая информация\\Тип ценной бумаги = «C - Купонная облигация Банка России»
+ «E», если Общая информация\\Тип ценной бумаги = «E - Биржевая облигация»
+ «I», если Общая информация\\Тип ценной бумаги = «I - Облигации с индексированным номиналом»
+ «M», если Общая информация\\Тип ценной бумаги = «M - Облигации с амортизацией долга»
+ """
+ )
+ private String bondType;
+
+ @JsonProperty("maturity_date")
+ @JsonDeserialize(using = LocalDateDeserializer.class)
+ @ApiModelProperty(
+ value = "Дополнительная информация\\Дата погашения облигации",
+ example = "30.12.2023"
+ )
+ private LocalDate maturityDate;
+
+ @JsonProperty("nominal_value")
+ @ApiModelProperty(
+ value = "Общая информация\\Номинал инструмента",
+ example = "1000"
+ )
+ private BigDecimal nominalValue;
+
+ @JsonProperty("nominal_for_date")
+ @ApiModelProperty(
+ value = "Общая информация\\Текущее значение номинала",
+ example = "1000"
+ )
+ private BigDecimal nominalForDate;
+
+ @JsonProperty("nominal_currency")
+ @ApiModelProperty(
+ value = "Общая информация\\Валюта номинала",
+ example = "RUB"
+ )
+ private String nominalCurrency;
+
+ @JsonProperty("coupon_type")
+ @ApiModelProperty(
+ value = """
+ «NUL», если Дополнительная информация\\Тип купона = «NUL - Дисконтная облигация (Нулевой)»
+ «VAR», если Дополнительная информация\\Тип купона = «VAR - Плавающая процентная ставка (Переменный)»
+ «FIX», если Дополнительная информация\\Тип купона = «FIX - Фиксированная процентная ставка (Постоянный)»
+ """,
+ example = "NUL"
+ )
+ private String couponType;
+
+ @JsonProperty("coupon_frequency")
+ @ApiModelProperty(
+ value = "Дополнительная информация\\Количество купонов в год",
+ example = "1000"
+ )
+ private BigDecimal couponFrequency;
+
+ public UUID getId() {
+ return id;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public String getInstrumentType() {
+ return instrumentType;
+ }
+
+ public void setInstrumentType(String instrumentType) {
+ this.instrumentType = instrumentType;
+ }
+
+ public UUID getIssuerId() {
+ return issuerId;
+ }
+
+ public void setIssuerId(UUID issuerId) {
+ this.issuerId = issuerId;
+ }
+
+ public String getShortName() {
+ return shortName;
+ }
+
+ public void setShortName(String shortName) {
+ this.shortName = shortName;
+ }
+
+ public String getFullName() {
+ return fullName;
+ }
+
+ public void setFullName(String fullName) {
+ this.fullName = fullName;
+ }
+
+ public String getShortNameEng() {
+ return shortNameEng;
+ }
+
+ public void setShortNameEng(String shortNameEng) {
+ this.shortNameEng = shortNameEng;
+ }
+
+ public String getFullNameEng() {
+ return fullNameEng;
+ }
+
+ public void setFullNameEng(String fullNameEng) {
+ this.fullNameEng = fullNameEng;
+ }
+
+ public String getSecuritySymbol() {
+ return securitySymbol;
+ }
+
+ public void setSecuritySymbol(String securitySymbol) {
+ this.securitySymbol = securitySymbol;
+ }
+
+ public String getIsin() {
+ return isin;
+ }
+
+ public void setIsin(String isin) {
+ this.isin = isin;
+ }
+
+ public String getWorkflowStatus() {
+ return workflowStatus;
+ }
+
+ public void setWorkflowStatus(String workflowStatus) {
+ this.workflowStatus = workflowStatus;
+ }
+
+ public String getShareType() {
+ return shareType;
+ }
+
+ public void setShareType(String shareType) {
+ this.shareType = shareType;
+ }
+
+ public String getBondType() {
+ return bondType;
+ }
+
+ public void setBondType(String bondType) {
+ this.bondType = bondType;
+ }
+
+ public LocalDate getMaturityDate() {
+ return maturityDate;
+ }
+
+ public void setMaturityDate(LocalDate maturityDate) {
+ this.maturityDate = maturityDate;
+ }
+
+ public BigDecimal getNominalValue() {
+ return nominalValue;
+ }
+
+ public void setNominalValue(BigDecimal nominalValue) {
+ this.nominalValue = nominalValue;
+ }
+
+ public BigDecimal getNominalForDate() {
+ return nominalForDate;
+ }
+
+ public void setNominalForDate(BigDecimal nominalForDate) {
+ this.nominalForDate = nominalForDate;
+ }
+
+ public String getNominalCurrency() {
+ return nominalCurrency;
+ }
+
+ public void setNominalCurrency(String nominalCurrency) {
+ this.nominalCurrency = nominalCurrency;
+ }
+
+ public String getCouponType() {
+ return couponType;
+ }
+
+ public void setCouponType(String couponType) {
+ this.couponType = couponType;
+ }
+
+ public BigDecimal getCouponFrequency() {
+ return couponFrequency;
+ }
+
+ public void setCouponFrequency(BigDecimal couponFrequency) {
+ this.couponFrequency = couponFrequency;
+ }
+}
diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/TradingMode.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/TradingMode.java
new file mode 100644
index 000000000..f34a78c78
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/TradingMode.java
@@ -0,0 +1,119 @@
+package ru.spcex.clearing.gatewayapi.request.objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.UUID;
+
+public class TradingMode {
+ @JsonProperty("exchange_instrument_id")
+ @ApiModelProperty(
+ value = "Ссылка на exchange_instrument",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120002"
+ )
+ private UUID exchangeInstrumentId;
+
+ @JsonProperty("Ссылка на trading_mode")
+ @ApiModelProperty(
+ value = "Ссылка на trading_mode_mkr",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120006"
+ )
+ private UUID tradingModeId;
+
+ @JsonProperty("min_step")
+ @ApiModelProperty(
+ value = "Минимальный шаг цены, значение listing.dir_price_min_step_precision.min_step",
+ example = "6"
+ )
+ private Long minStep;
+
+ @JsonProperty("precision")
+ @ApiModelProperty(
+ value = """
+ Значение listing.dir_price_min_step_precision.precision, соответствующее
+ значению listing.dir_price_min_step_precision.min_step в поле «Минимальный шаг цены»
+ """,
+ example = "1"
+ )
+ private Long precision;
+
+ @JsonProperty("lot_size")
+ @ApiModelProperty(
+ value = "Размер лота",
+ example = "10"
+ )
+ private Long lotSize;
+
+ @JsonProperty("trading_currency_letter_code")
+ @ApiModelProperty(
+ value = "Валюта торгов. Ссылка на dir_currency_code (letter_code)",
+ example = "ef47f76c-bcea-11ed-afa1-0242ac120005"
+ )
+ private UUID tradingCurrencyLetterCode;
+
+ @JsonProperty("is_deleted")
+ @ApiModelProperty(
+ value = """
+ true, если Режим торгов удален
+ false, если Режим торгов не удален
+ """,
+ example = "true"
+ )
+ private Boolean isDeleted;
+
+ public UUID getExchangeInstrumentId() {
+ return exchangeInstrumentId;
+ }
+
+ public void setExchangeInstrumentId(UUID exchangeInstrumentId) {
+ this.exchangeInstrumentId = exchangeInstrumentId;
+ }
+
+ public UUID getTradingModeId() {
+ return tradingModeId;
+ }
+
+ public void setTradingModeId(UUID tradingModeId) {
+ this.tradingModeId = tradingModeId;
+ }
+
+ public Long getMinStep() {
+ return minStep;
+ }
+
+ public void setMinStep(Long minStep) {
+ this.minStep = minStep;
+ }
+
+ public Long getPrecision() {
+ return precision;
+ }
+
+ public void setPrecision(Long precision) {
+ this.precision = precision;
+ }
+
+ public Long getLotSize() {
+ return lotSize;
+ }
+
+ public void setLotSize(Long lotSize) {
+ this.lotSize = lotSize;
+ }
+
+ public UUID getTradingCurrencyLetterCode() {
+ return tradingCurrencyLetterCode;
+ }
+
+ public void setTradingCurrencyLetterCode(UUID tradingCurrencyLetterCode) {
+ this.tradingCurrencyLetterCode = tradingCurrencyLetterCode;
+ }
+
+ public Boolean getDeleted() {
+ return isDeleted;
+ }
+
+ public void setDeleted(Boolean deleted) {
+ isDeleted = deleted;
+ }
+}
diff --git a/clearing-parent/gateway-api/src/main/resources/application.properties b/clearing-parent/gateway-api/src/main/resources/application.properties
new file mode 100644
index 000000000..982647841
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/resources/application.properties
@@ -0,0 +1,20 @@
+server.port=8080
+server.servlet.context-path=/gateway-api
+spring.main.web-application-type=servlet
+gateway-api.example-setting=test
+gateway-api.hazelcast.cluster-members=127.0.0.1:5701
+gateway-api.hazelcast.login=dev
+gateway-api.hazelcast.password=dev-pass
+gateway-api.kafka-producer.bootstrap-servers=localhost:9092
+gateway-api.kafka-producer.acks=all
+gateway-api.kafka-producer.retries=0
+gateway-api.kafka-producer.batch-size=16384
+gateway-api.kafka-producer.linger-ms=1
+gateway-api.kafka-producer.buffer-memory=33554432
+gateway-api.kafka-consumer.bootstrap-servers=localhost:9092
+gateway-api.kafka-consumer.group-id=dev-group-gateway-api
+gateway-api.kafka-consumer.enable-auto-commit=true
+gateway-api.kafka-consumer.session-timeout-ms=30000
+gateway-api.kafka-consumer.auto-offset-reset=latest
+gateway-api.kafka-consumer.linger-ms=1
+gateway-api.kafka-consumer.buffer-memory=33554432
\ No newline at end of file
diff --git a/clearing-parent/gateway-api/src/main/resources/logback.xml b/clearing-parent/gateway-api/src/main/resources/logback.xml
new file mode 100644
index 000000000..6cf49c1fe
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/resources/logback.xml
@@ -0,0 +1,37 @@
+
+
+
+
+ %date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n
+ utf-8
+
+
+
+ ./logs/gateway-api.log
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n
+ utf8
+
+
+
+ ./logs/gateway-api.%i.log
+
+ 1
+ 10
+
+
+ 500MB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/clearing-parent/gateway-api/src/main/web/WEB-INF/web.xml b/clearing-parent/gateway-api/src/main/web/WEB-INF/web.xml
new file mode 100644
index 000000000..f951a8c6c
--- /dev/null
+++ b/clearing-parent/gateway-api/src/main/web/WEB-INF/web.xml
@@ -0,0 +1,17 @@
+
+
+ ${project.name} ${project.version} (${timestamp})
+
+
+ 60
+
+
+
+ spcex_web
+
+
diff --git a/clearing-parent/pom.xml b/clearing-parent/pom.xml
index c80817211..8f734db02 100644
--- a/clearing-parent/pom.xml
+++ b/clearing-parent/pom.xml
@@ -38,6 +38,7 @@
cleaning-builders
trade-importer
lim-exporter
+ gateway-api
diff --git a/pom.xml b/pom.xml
index ce3a0c7c7..706b73a72 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,6 +45,7 @@
${folder_root_clearing}/clearing-parent/reports-service
${folder_root_clearing}/clearing-parent/utility-service
${folder_root_clearing}/clearing-parent/scheduler-service
+ ${folder_root_clearing}/clearing-parent/gateway-api
3.12.4
1.7.33
diff --git a/z-distr/copy_modules_to_single_dir.cmd b/z-distr/copy_modules_to_single_dir.cmd
index 991e1dad5..1100b90a8 100644
--- a/z-distr/copy_modules_to_single_dir.cmd
+++ b/z-distr/copy_modules_to_single_dir.cmd
@@ -19,6 +19,7 @@ rem copy clearing\modules\dbf-importer\*.jar allinone
rem copy clearing\modules\reports-service\*.jar allinone
rem copy clearing\modules\securities-service\*.jar allinone
rem copy clearing\modules\utility-service\*.jar allinone
+rem copy clearing\modules\gateway-api\*.jar allinone
copy ..\..\..\clearing-parent\account-service\target\account-service.jar allinone
copy ..\..\..\clearing-parent\backend-api\target\backend-api.jar allinone
@@ -35,5 +36,6 @@ copy ..\..\..\clearing-parent\scheduler-service\target\scheduler-service.jar all
copy ..\..\..\clearing-parent\securities-service\target\securities-service.jar allinone
copy ..\..\..\clearing-parent\trade-importer\target\trade-importer.jar allinone
copy ..\..\..\clearing-parent\utility-service\target\utility-service.jar allinone
+copy ..\..\..\clearing-parent\gateway-api\target\gateway-api.jar allinone
:exit1:
diff --git a/z-distr/pom.xml b/z-distr/pom.xml
index 819183670..4e5cb36c5 100644
--- a/z-distr/pom.xml
+++ b/z-distr/pom.xml
@@ -343,6 +343,32 @@
+
+ copy-gateway-api-bin
+ prepare-package
+
+ copy
+
+
+
+
+ ${folder_root_gateway-api}/target/gateway-api.jar
+
+
+ ${folder.clearing.distr.modules}/gateway-api/gateway-api.jar
+
+
+
+
+ ${folder_root_gateway-api}/src/main/resources/application.properties
+
+
+ ${folder.clearing.distr.modules}/gateway-api/application.properties
+
+
+
+
+
diff --git a/z-distr/src/main/resources/distr/bin/gateway-api.sh b/z-distr/src/main/resources/distr/bin/gateway-api.sh
new file mode 100644
index 000000000..aac6f7dde
--- /dev/null
+++ b/z-distr/src/main/resources/distr/bin/gateway-api.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+CLEARING_HOME=/opt/mfd/clearing/
+cd $CLEARING_HOME/bin
+
+CMD="java -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7020 -jar gateway-api.jar --spring.config.location=$CLEARING_HOME/settings/gateway-api/"
+
+$CMD >/dev/null 2>&1 &
+
diff --git a/z-distr/src/main/resources/distr/modules/gateway-api/Dockerfile b/z-distr/src/main/resources/distr/modules/gateway-api/Dockerfile
new file mode 100644
index 000000000..643717be3
--- /dev/null
+++ b/z-distr/src/main/resources/distr/modules/gateway-api/Dockerfile
@@ -0,0 +1,6 @@
+FROM debian:stable-20220125-jdk17
+
+ADD gateway-api.jar /opt/clearing/bin/gateway-api.jar
+ADD application.properties /opt/clearing/bin/application.properties
+USER root
+ENTRYPOINT java -jar /opt/clearing/bin/gateway-api.jar --spring.config.location=/opt/clearing/bin/
\ No newline at end of file