Compare commits

..

No commits in common. "m_3.10_14.02.2024_release" and "10_01_2024_hotfix" have entirely different histories.

164 changed files with 1264 additions and 11388 deletions

View file

@ -48,12 +48,6 @@
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- special logging -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.0.1</version>
</dependency>
<!-- TEST -->
<dependency>
<groupId>ru.spcex.clearing</groupId>

View file

@ -1,56 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_PATH" value="./log" />
<property name="FILE_NAME" value="account-service" />
<property name="CONSOLE_LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n" />
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<Pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n</Pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<!-- first FILE TEXT appender -->
<appender name="TEXT_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-text.log</file>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./logs/account-service.log</file>
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${FILE_LOG_PATTERN}</Pattern>
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n</Pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-text.%d{yyyy-MM-dd}.%i.gz
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>
./logs/account-service.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<!-- second FILE JSON appender -->
<appender name="JSON_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-json.log</file>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-json.%d{yyyy-MM-dd}.%i.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>500MB</maxFileSize>
</triggeringPolicy>
</appender>
<root level="info">
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
<root level="warn">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<logger name="ru.spcex" level="debug" additivity="false">
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</logger>
</configuration>

View file

@ -61,17 +61,6 @@
<groupId>ru.spcex.platform</groupId>
<artifactId>platform-enum</artifactId>
</dependency>
<!-- special logging -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.0.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- TEST -->
<dependency>
<groupId>org.springframework</groupId>
@ -219,19 +208,6 @@
</fileMapper>
</fileMappers>
</transformationSet>
<transformationSet>
<dir>src/main/resources/meta</dir>
<includes>
<include>market.xml</include>
</includes>
<stylesheet>src/main/resources/meta/xsl/data.xsl</stylesheet>
<fileMappers>
<fileMapper
implementation="org.codehaus.plexus.components.io.filemappers.FileExtensionMapper">
<targetExtension>market.sql</targetExtension>
</fileMapper>
</fileMappers>
</transformationSet>
</transformationSets>
</configuration>
</execution>

View file

@ -1,43 +0,0 @@
package ru.spcex.clearing.backendapi.controller.queue.misc;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.beans.factory.annotation.Autowired;
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;
import ru.clearing.classes.statics.data.misc.SCrossRate;
import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController;
import ru.spcex.clearing.backendapi.controller.response.entity.CommonGetAllResponse;
import ru.spcex.clearing.backendapi.service.IOperator;
import ru.spcex.clearing.backendapi.service.IStateLoader;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import java.util.Collection;
import java.util.Map;
@Controller
@RequestMapping("/cross-rate")
public class SCrossRateController extends AbstractQueueController {
private final IStateLoader stateLoader;
@Autowired
public SCrossRateController(IOperator operator, IStateLoader stateLoader) {
super(operator);
this.stateLoader = stateLoader;
}
@ApiOperation(value = "get all cross-rate's.")
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CommonGetAllResponse.class)})
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public CommonGetAllResponse getAll() {
Collection<Map<String, Object>> all = stateLoader.getAllMetaTransform(
IMDGDistributedNames.Map_SCrossRate, SCrossRate.class);
CommonGetAllResponse response = new CommonGetAllResponse();
response.fromEntity(all);
return response;
}
}

View file

@ -104,7 +104,7 @@ public class LauncherController extends AbstractQueueController {
if (taskEnum == null) {
throw new NotFound404Exception("task dictionary element with code '" + launcherNew.getTask() + "'");
}
if (!IEnumKey.contains(taskEnum.getCode(), Task.startOfClearing, Task.dbfExport_OUTV, Task.getAllBalance)) {
if (!IEnumKey.contains(taskEnum.getCode(), Task.startOfClearing, Task.dbfExport_OUTV)) {
log.warn(String.format("Task %s not support request with body", taskEnum.getCode()));
} // else В мете эти модели с дополнительными параметрами (OUTV).
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

View file

@ -2,19 +2,14 @@ package ru.spcex.clearing.backendapi.controller.request.cud.schedule;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModelProperty;
import ru.spcex.clearing.backendapi.domain.actions.IAction;
import ru.spcex.clearing.backendapi.errors.BackEndError;
import ru.spcex.clearing.platform.messaging.domain.ActionType;
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalTimeDeserializer;
import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalTimeSerializer;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import java.math.BigDecimal;
import java.time.LocalTime;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@ -69,12 +64,6 @@ public class LauncherNew implements IAction<Object> {
@JsonProperty
private Long debitLeg_accountId;
@ApiModelProperty(value = "Время", dataType = "java.lang.String", example = "16:30:00")
@JsonSerialize(using = LocalTimeSerializer.class)
@JsonDeserialize(using = LocalTimeDeserializer.class)
@JsonProperty
public LocalTime fromTime;
@Override
public Object toRequest() {
LauncherCommandRequest taskRunnerCommandRequest = new LauncherCommandRequest();
@ -94,7 +83,6 @@ public class LauncherNew implements IAction<Object> {
taskRunnerCommandRequest.setCreditLeg_accountId(creditLeg_accountId);
taskRunnerCommandRequest.setAddresseeId(addresseeId);
taskRunnerCommandRequest.setDebitLeg_accountId(debitLeg_accountId);
taskRunnerCommandRequest.setFromTime(fromTime);
return taskRunnerCommandRequest;
}
@ -239,12 +227,4 @@ public class LauncherNew implements IAction<Object> {
public void setFullBalance(BigDecimal fullBalance) {
this.fullBalance = fullBalance;
}
public LocalTime getFromTime() {
return fromTime;
}
public void setFromTime(LocalTime fromTime) {
this.fromTime = fromTime;
}
}

View file

@ -1,56 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_PATH" value="./log" />
<property name="FILE_NAME" value="backend-api" />
<property name="CONSOLE_LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n" />
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n</Pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./logs/backend-api.log</file>
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<!-- first FILE TEXT appender -->
<appender name="TEXT_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-text.log</file>
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${FILE_LOG_PATTERN}</Pattern>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n</Pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-text.%d{yyyy-MM-dd}.%i.gz
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>
./logs/backend-api.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<!-- second FILE JSON appender -->
<appender name="JSON_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-json.log</file>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-json.%d{yyyy-MM-dd}.%i.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>500MB</maxFileSize>
</triggeringPolicy>
</appender>
<root level="info">
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
</root>
<root level="warn">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<logger name="ru.spcex" level="debug" additivity="false">
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</logger>
<!--<logger name="org.springframework" level="info" />-->
</configuration>

View file

@ -91,7 +91,6 @@
<companyRole id="6" code="CLRM" name="Участник клиринга"/>
<companyRole id="7" code="ODEP" name="Участник расчетов по открытым депозитным счетам на секции МКР"/>
<currencyCode id="643" code="RUB" name="Российский рубль"/>
<currencyCode id="840" code="USD" name="Доллар США"/>
<instrumentType id="1" code="RATE" name="Инструмент Денежного рынка"/>
<instrumentType id="2" code="CRNC" name="Валюта"/>
<instrumentType id="3" code="EQTY" name="Акция"/>
@ -157,6 +156,42 @@
<registryUnit id="5" code="U" name="Невыясненные"/>
<registryUnit id="5" code="I" name="Списания/зачисления"/>
<registryUnit id="7" code="V" name="Выписка"/>
<registryCode id="1" code="AMAT" name="Денежные средства Участника клиринга, зарезервированные на торги"/>
<registryCode id="2" code="AMAF" name="Денежные средства - свободные"/>
<registryCode id="3" code="AMAB" name="Денежные средства - блокированные"/>
<registryCode id="4" code="TMAT" name="Требования по деньгам"/>
<registryCode id="5" code="OSAT" name="Обязательства по бумагам"/>
<registryCode id="6" code="OMAT" name="Обязательства по деньгам"/>
<registryCode id="7" code="TSAT" name="Требования по бумагам"/>
<registryCode id="8" code="CMAT" name="Рассчитанные требования по деньгам"/>
<registryCode id="9" code="LSAT" name="Рассчитанные обязательства по бумагам"/>
<registryCode id="10" code="LMAT" name="Рассчитанные обязательства по деньгам"/>
<registryCode id="11" code="CSAT" name="Рассчитанные требования по бумагам"/>
<registryCode id="12" code="AMBT" name="Денежные средства Участника клиринга, зарезервированные на торги клиенты"/>
<registryCode id="13" code="AMBF" name="Денежные средства клиента - свободные"/>
<registryCode id="14" code="AMBB" name="Денежные средства клиента - блокированные"/>
<registryCode id="15" code="TMBT" name="Требования по деньгам (кл)"/>
<registryCode id="16" code="OSBT" name="Обязательства по бумагам (кл)"/>
<registryCode id="17" code="OMBT" name="Обязательства по деньгам (кл)"/>
<registryCode id="18" code="TSBT" name="Требования по бумагам (кл)"/>
<registryCode id="19" code="CMBT" name="Рассчитанные требования по деньгам (кл)"/>
<registryCode id="20" code="LSBT" name="Рассчитанные обязательства по бумагам (кл)"/>
<registryCode id="21" code="LMBT" name="Рассчитанные обязательства по деньгам (кл)"/>
<registryCode id="22" code="CSBT" name="Рассчитанные требования по бумагам (кл)"/>
<registryCode id="23" code="DMAT" name="Возврат депозита"/>
<registryCode id="24" code="DMBT" name="Возврат депозита (кл)"/>
<registryCode id="25" code="ASAT" name="Ценные бумаги Участника клиринга свои"/>
<registryCode id="26" code="ASAF" name="Ценные бумаги - свободные"/>
<registryCode id="27" code="ASAB" name="Ценные бумаги - блокированные"/>
<registryCode id="28" code="DMAX" name="Возврат инициатору"/>
<registryCode id="29" code="DMBX" name="Возврат инициатору (кл)"/>
<registryCode id="30" code="DMAU" name="Денежные средства - невыясненные"/>
<registryCode id="31" code="DMAV" name="Треб. выписки"/>
<registryCode id="32" code="ASZT" name="Ценные бумаги для размещения/выкупа"/>
<registryCode id="33" code="ASBT" name="Ценные бумаги Участника клиринга клиенты"/>
<registryCode id="34" code="ASCT" name="Ценные бумаги Участника клиринга клиенты-нерезиденты"/>
<registryCode id="35" code="AMCT" name="Денежные средства Участника клиринга, зарезервированные на торги клиенты"/>
<registryCode id="36" code="ASXT" name="Ценные бумаги Участника клиринга ДУ"/>
<registryStatus id="1" code="OK" name="Рассчитано"/>
<registryStatus id="2" code="UNCV" name="Не исполнено"/>
<registryStatus id="3" code="FAIL" name="Не исполнено контрагентом"/>
@ -219,7 +254,6 @@
<task id="27" code="EDEP" name="Время завершения возврата депозитов"/>
<task id="28" code="CHDF" name="Проверка наличия пары ДФ-01/ДФ-57 и ДФ-08/ДФ-21"/>
<task id="29" code="CCLR" name="Завершение неудачных клиринговых сессий"/>
<task id="30" code="CBRR" name="Загрузка кросс-курсов"/>
<taskStatus id="1" code="ACTV" name="Активна"/>
<taskStatus id="2" code="BLKD" name="Не активна"/>
<taskStatus id="3" code="CNCL" name="Отмена расписания"/>

View file

@ -11,13 +11,83 @@
<!--company id="5" fullName="Центральный Банк Российской Федерации" shortName="ЦБ РФ" tradingCode="" clearingCode="" workflowStatus="ACTV"/-->
<companySymbols id="1" companyId="1" companySymbol="BIC" companySymbolValue="044030920"/>
<companySymbols id="2" companyId="2" companySymbol="BIC" companySymbolValue="044030505"/>
<currency id="643" currencyCode="RUB"/>
<currency id="840" currencyCode="USD"/>
<currency id="643" currency_code="RUB"/>
<security id="643" instrumentType="CRNC" shortName="RUB" fullName="Российский рубль" securitySymbol="RUB" workflowStatus="ACTV"/>
<security id="840" instrumentType="CRNC" shortName="USD" fullName="Доллар США" securitySymbol="USD" workflowStatus="ACTV"/>
<account id="1" companyId="1" account="30414810300000006000" accountType="TRAN" status="ACTV" processingSign="ALWD"/>
<account id="2" companyId="1" account="30414810600000007000" accountType="ANLT" status="ACTV" processingSign="ALWD"/>
<account id="3" companyId="1" account="700100000AT0" accountType="DTRN" status="ACTV" processingSign="ALWD"/>
<market id="1" marketType="SCND" section="FOND" settlementCurrency="RUB" code="UESC" name="Режим непрерывных торгов" exchangeId="1" description="Режим непрерывных торгов: Обыкновенные акции"/>
<market id="2" marketType="SCND" section="FOND" settlementCurrency="RUB" code="NESC" name="Режим переговорных сделок (РПС)" exchangeId="1" description="Режим переговорных сделок (РПС): Обыкновенные акции"/>
<market id="3" marketType="SCND" section="FOND" settlementCurrency="RUB" code="DESC" name="Дискретный аукцион" exchangeId="1" description="Дискретный аукцион: Обыкновенные акции"/>
<market id="4" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="AESC" name="Размещение: акции (аукцион по цене)" exchangeId="1" description="Размещение: акции (аукцион по цене): Обыкновенные акции"/>
<market id="5" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="WESC" name="Размещение: адресные заявки (подписка)" exchangeId="1" description="Размещение: адресные заявки (подписка): Обыкновенные акции"/>
<market id="6" marketType="SCND" section="FOND" settlementCurrency="RUB" code="UEPC" name="Режим непрерывных торгов" exchangeId="1" description="Режим непрерывных торгов: Привилегированные акции"/>
<market id="7" marketType="SCND" section="FOND" settlementCurrency="RUB" code="NEPC" name="Режим переговорных сделок (РПС)" exchangeId="1" description="Режим переговорных сделок (РПС): Привилегированные акции"/>
<market id="8" marketType="SCND" section="FOND" settlementCurrency="RUB" code="DEPC" name="Дискретный аукцион" exchangeId="1" description="Дискретный аукцион: Привилегированные акции"/>
<market id="9" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="AEPC" name="Размещение: акции (аукцион по цене)" exchangeId="1" description="Размещение: акции (аукцион по цене): Привилегированные акции"/>
<market id="10" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="WEPC" name="Размещение: адресные заявки (подписка)" exchangeId="1" description="Размещение: адресные заявки (подписка): Привилегированные акции"/>
<market id="11" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="ABVC" name="Размещение: Аукцион по цене" exchangeId="1" description="Размещение: Аукцион по цене: Купонные облигации с переменным купоном"/>
<market id="12" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="KBVC" name="Размещение: Аукцион по ставке" exchangeId="1" description="Размещение: Аукцион по ставке: Купонные облигации с переменным купоном"/>
<market id="13" marketType="SCND" section="FOND" settlementCurrency="RUB" code="UBVC" name="Режим непрерывных торгов" exchangeId="1" description="Режим непрерывных торгов: Купонные облигации с переменным купоном"/>
<market id="14" marketType="SCND" section="FOND" settlementCurrency="RUB" code="NBVC" name="Режим переговорных сделок (РПС)" exchangeId="1" description="Режим переговорных сделок (РПС): Купонные облигации с переменным купоном"/>
<market id="15" marketType="SCND" section="FOND" settlementCurrency="RUB" code="DBVC" name="Дискретный аукцион" exchangeId="1" description="Дискретный аукцион: Купонные облигации с переменным купоном"/>
<market id="16" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="WBVC" name="Размещение: адресные заявки (подписка)" exchangeId="1" description="Размещение: адресные заявки (подписка): Купонные облигации с переменным купоном"/>
<market id="17" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="ABFC" name="Размещение: Аукцион по цене" exchangeId="1" description="Размещение: Аукцион по цене: Купонные облигации с постоянным купоном"/>
<market id="18" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="KBFC" name="Размещение: Аукцион по ставке" exchangeId="1" description="Размещение: Аукцион по ставке: Купонные облигации с постоянным купоном"/>
<market id="19" marketType="SCND" section="FOND" settlementCurrency="RUB" code="UBFC" name="Режим непрерывных торгов" exchangeId="1" description="Режим непрерывных торгов: Купонные облигации с постоянным купоном"/>
<market id="20" marketType="SCND" section="FOND" settlementCurrency="RUB" code="NBFC" name="Режим переговорных сделок (РПС)" exchangeId="1" description="Режим переговорных сделок (РПС): Купонные облигации с постоянным купоном"/>
<market id="21" marketType="SCND" section="FOND" settlementCurrency="RUB" code="DBFC" name="Дискретный аукцион" exchangeId="1" description="Дискретный аукцион: Купонные облигации с постоянным купоном"/>
<market id="22" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="WBFC" name="Размещение: адресные заявки (подписка)" exchangeId="1" description="Размещение: адресные заявки (подписка): Купонные облигации с постоянным купоном"/>
<market id="23" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="ABIC" name="Размещение: Аукцион по цене" exchangeId="1" description="Размещение: Аукцион по цене: Облигации с индексированным номиналом"/>
<market id="24" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="KBIC" name="Размещение: Аукцион по ставке" exchangeId="1" description="Размещение: Аукцион по ставке: Облигации с индексированным номиналом"/>
<market id="25" marketType="SCND" section="FOND" settlementCurrency="RUB" code="UBIC" name="Режим непрерывных торгов" exchangeId="1" description="Режим непрерывных торгов: Облигации с индексированным номиналом"/>
<market id="26" marketType="SCND" section="FOND" settlementCurrency="RUB" code="NBIC" name="Режим переговорных сделок (РПС)" exchangeId="1" description="Режим переговорных сделок (РПС): Облигации с индексированным номиналом"/>
<market id="27" marketType="SCND" section="FOND" settlementCurrency="RUB" code="DBIC" name="Дискретный аукцион" exchangeId="1" description="Дискретный аукцион: Облигации с индексированным номиналом"/>
<market id="28" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="WBIC" name="Размещение: адресные заявки (подписка)" exchangeId="1" description="Размещение: адресные заявки (подписка): Облигации с индексированным номиналом"/>
<market id="29" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="ABMC" name="Размещение: Аукцион по цене" exchangeId="1" description="Размещение: Аукцион по цене: Облигации с амортизацией долга"/>
<market id="30" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="KBMC" name="Размещение: Аукцион по ставке" exchangeId="1" description="Размещение: Аукцион по ставке: Облигации с амортизацией долга"/>
<market id="31" marketType="SCND" section="FOND" settlementCurrency="RUB" code="UBMC" name="Режим непрерывных торгов" exchangeId="1" description="Режим непрерывных торгов: Облигации с амортизацией долга"/>
<market id="32" marketType="SCND" section="FOND" settlementCurrency="RUB" code="NBMC" name="Режим переговорных сделок (РПС)" exchangeId="1" description="Режим переговорных сделок (РПС): Облигации с амортизацией долга"/>
<market id="33" marketType="SCND" section="FOND" settlementCurrency="RUB" code="DBMC" name="Дискретный аукцион" exchangeId="1" description="Дискретный аукцион: Облигации с амортизацией долга"/>
<market id="34" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="WBMC" name="Размещение: адресные заявки (подписка)" exchangeId="1" description="Размещение: адресные заявки (подписка): Облигации с амортизацией долга"/>
<market id="35" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="BKVC" name="Размещение: Аукцион БР" exchangeId="1" description="Размещение: Аукцион БР: Облигации Банка России с переменным купоном (КОБР)"/>
<market id="36" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="SKVC" name="Доразмещение: Адресные заявки БР" exchangeId="1" description="Доразмещение: Адресные заявки БР: Облигации Банка России с переменным купоном (КОБР)"/>
<market id="37" marketType="SCND" section="FOND" settlementCurrency="RUB" code="UKVC" name="Режим непрерывных торгов" exchangeId="1" description="Режим непрерывных торгов: Облигации Банка России с переменным купоном (КОБР)"/>
<market id="38" marketType="SCND" section="FOND" settlementCurrency="RUB" code="NKVC" name="Режим переговорных сделок (РПС)" exchangeId="1" description="Режим переговорных сделок (РПС): Облигации Банка России с переменным купоном (КОБР)"/>
<market id="39" marketType="SCND" section="FOND" settlementCurrency="RUB" code="DKVC" name="Дискретный аукцион" exchangeId="1" description="Дискретный аукцион: Облигации Банка России с переменным купоном (КОБР)"/>
<market id="45" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="ABEC" name="Размещение: Аукцион СПВБ" exchangeId="1" description="Размещение: Аукцион СПВБ: Биржевые облигации"/>
<market id="46" marketType="SCND" section="FOND" settlementCurrency="RUB" code="UBEC" name="Режим непрерывных торгов" exchangeId="1" description="Режим непрерывных торгов: Биржевые облигации"/>
<market id="47" marketType="SCND" section="FOND" settlementCurrency="RUB" code="NBEC" name="Режим переговорных сделок (РПС)" exchangeId="1" description="Режим переговорных сделок (РПС): Биржевые облигации"/>
<market id="48" marketType="SCND" section="FOND" settlementCurrency="RUB" code="DBEC" name="Дискретный аукцион" exchangeId="1" description="Дискретный аукцион: Биржевые облигации"/>
<market id="61" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="BMVC" name="ОФЗПК-Размещение: Аукцион БР" exchangeId="1" description="ОФЗПК-Размещение: Аукцион БР: Облигации Минфина"/>
<market id="62" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="SMVC" name="ОФЗПК-Доразмещение: Адресные заявки БР" exchangeId="1" description="ОФЗПК-Доразмещение: Адресные заявки БР: Облигации Минфина"/>
<market id="63" marketType="SCND" section="FOND" settlementCurrency="RUB" code="UMVC" name="ОФЗПК-Режим непрерывных торгов" exchangeId="1" description="ОФЗПК-Режим непрерывных торгов: Облигации Минфина"/>
<market id="64" marketType="SCND" section="FOND" settlementCurrency="RUB" code="DMVC" name="ОФЗПК-Дискретный аукцион" exchangeId="1" description="ОФЗПК-Дискретный аукцион: Облигации Минфина"/>
<market id="65" marketType="SCND" section="FOND" settlementCurrency="RUB" code="MMVC" name="ОФЗПК-Торги в режиме выкупа" exchangeId="1" description="ОФЗПК-Торги в режиме выкупа: Облигации Минфина"/>
<market id="66" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="BMFC" name="ОФЗПД-Размещение: Аукцион БР" exchangeId="1" description="ОФЗПД-Размещение: Аукцион БР: Облигации Минфина"/>
<market id="67" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="SMFC" name="ОФЗПД- Доразмещение: Адресные заявки БР" exchangeId="1" description="ОФЗПД- Доразмещение: Адресные заявки БР: Облигации Минфина"/>
<market id="68" marketType="SCND" section="FOND" settlementCurrency="RUB" code="UMFC" name="ОФЗПД-Режим непрерывных торгов" exchangeId="1" description="ОФЗПД-Режим непрерывных торгов: Облигации Минфина"/>
<market id="69" marketType="SCND" section="FOND" settlementCurrency="RUB" code="DMFC" name="ОФЗПД-Дискретный аукцион" exchangeId="1" description="ОФЗПД-Дискретный аукцион: Облигации Минфина"/>
<market id="70" marketType="SCND" section="FOND" settlementCurrency="RUB" code="MMFC" name="ОФЗПД-Торги в режиме выкупа" exchangeId="1" description="ОФЗПД-Торги в режиме выкупа: Облигации Минфина"/>
<market id="71" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="BMMC" name="ОФЗАД-Размещение: Аукцион БР" exchangeId="1" description="ОФЗАД-Размещение: Аукцион БР: Облигации Минфина"/>
<market id="72" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="SMMC" name="ОФЗАД-Доразмещение: Адресные заявки БР" exchangeId="1" description="ОФЗАД-Доразмещение: Адресные заявки БР: Облигации Минфина"/>
<market id="73" marketType="SCND" section="FOND" settlementCurrency="RUB" code="UMMC" name="ОФЗАД-Режим непрерывных торгов" exchangeId="1" description="ОФЗАД-Режим непрерывных торгов: Облигации Минфина"/>
<market id="74" marketType="SCND" section="FOND" settlementCurrency="RUB" code="DMMC" name="ОФЗАД-Дискретный аукцион" exchangeId="1" description="ОФЗАД-Дискретный аукцион: Облигации Минфина"/>
<market id="75" marketType="SCND" section="FOND" settlementCurrency="RUB" code="MMMC" name="ОФЗАД-Торги в режиме выкупа" exchangeId="1" description="ОФЗАД-Торги в режиме выкупа: Облигации Минфина"/>
<market id="76" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="BMIC" name="ОФЗИН-Размещение: Аукцион БР" exchangeId="1" description="ОФЗИН-Размещение: Аукцион БР: Облигации Минфина"/>
<market id="77" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="SMIC" name="ОФЗИН-Доразмещение: Адресные заявки БР" exchangeId="1" description="ОФЗИН-Доразмещение: Адресные заявки БР: Облигации Минфина"/>
<market id="78" marketType="SCND" section="FOND" settlementCurrency="RUB" code="UMIC" name="ОФЗИН-Режим непрерывных торгов" exchangeId="1" description="ОФЗИН-Режим непрерывных торгов: Облигации Минфина"/>
<market id="79" marketType="SCND" section="FOND" settlementCurrency="RUB" code="DMIC" name="ОФЗИН-Дискретный аукцион" exchangeId="1" description="ОФЗИН-Дискретный аукцион: Облигации Минфина"/>
<market id="80" marketType="SCND" section="FOND" settlementCurrency="RUB" code="MMIC" name="ОФЗИН-Торги в режиме выкупа" exchangeId="1" description="ОФЗИН-Торги в режиме выкупа: Облигации Минфина"/>
<market id="82" marketType="PRMR" section="FOND" settlementCurrency="RUB" code="BBVC" name="ОФЗ-ПК - Аукцион БР" exchangeId="1" description="ОФЗ-ПК - Аукцион БР"/>
<market id="83" marketType="PRMR" section="MKR" settlementCurrency="RUB" code="XMDTATSS" name="СПб ГУП АТС Смольного" exchangeId="1" description="СПб ГУП АТС Смольного"/>
<market id="88" marketType="PRMR" section="MKR" settlementCurrency="RUB" code="XMTTKFSP" name="Комитет финансов СПб" exchangeId="1" description="Комитет финансов СПб"/>
<market id="89" marketType="PRMR" section="MKR" settlementCurrency="RUB" code="XMDSKFLO" name="Комитет финансов ЛО" exchangeId="1" description="Комитет финансов ЛО"/>
<market id="90" marketType="PRMR" section="MKR" settlementCurrency="RUB" code="XMDTFSKB" name="ФСКМБ" exchangeId="1" description="ФСКМБ"/>
<market id="91" marketType="PRMR" section="MKR" settlementCurrency="RUB" code="XMDSFGGE" name="ФАУ ГГЭ" exchangeId="1" description="ФАУ ГГЭ"/>
<market id="92" marketType="PRMR" section="MKR" settlementCurrency="RUB" code="XMDTVRGO" name="ВВО РГО" exchangeId="1" description="ВВО РГО"/>
<market id="93" marketType="PRMR" section="MKR" settlementCurrency="RUB" code="XMDTTDRM" name="ООО Торговый дом РМ-Рейл" exchangeId="1" description="ООО Торговый дом РМ-Рейл"/>
<market id="95" marketType="PRMR" section="MKR" settlementCurrency="RUB" code="XMDTRKFN" name="АО РК Финанс" exchangeId="1" description="АО РК Финанс"/>
</objects>
</meta>

View file

@ -1,46 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<meta version="3.9.0.68">
<enums>
<registryCode id="1" code="AMAT" name="Денежные средства Участника клиринга, зарезервированные на торги"/>
<registryCode id="2" code="AMAF" name="Денежные средства - свободные"/>
<registryCode id="3" code="AMAB" name="Денежные средства - блокированные"/>
<registryCode id="4" code="TMAT" name="Требования по деньгам"/>
<registryCode id="5" code="OSAT" name="Обязательства по бумагам"/>
<registryCode id="6" code="OMAT" name="Обязательства по деньгам"/>
<registryCode id="7" code="TSAT" name="Требования по бумагам"/>
<registryCode id="8" code="CMAT" name="Рассчитанные требования по деньгам"/>
<registryCode id="9" code="LSAT" name="Рассчитанные обязательства по бумагам"/>
<registryCode id="10" code="LMAT" name="Рассчитанные обязательства по деньгам"/>
<registryCode id="11" code="CSAT" name="Рассчитанные требования по бумагам"/>
<registryCode id="12" code="AMBT" name="Денежные средства Участника клиринга, зарезервированные на торги клиенты"/>
<registryCode id="13" code="AMBF" name="Денежные средства клиента - свободные"/>
<registryCode id="14" code="AMBB" name="Денежные средства клиента - блокированные"/>
<registryCode id="15" code="TMBT" name="Требования по деньгам (кл)"/>
<registryCode id="16" code="OSBT" name="Обязательства по бумагам (кл)"/>
<registryCode id="17" code="OMBT" name="Обязательства по деньгам (кл)"/>
<registryCode id="18" code="TSBT" name="Требования по бумагам (кл)"/>
<registryCode id="19" code="CMBT" name="Рассчитанные требования по деньгам (кл)"/>
<registryCode id="20" code="LSBT" name="Рассчитанные обязательства по бумагам (кл)"/>
<registryCode id="21" code="LMBT" name="Рассчитанные обязательства по деньгам (кл)"/>
<registryCode id="22" code="CSBT" name="Рассчитанные требования по бумагам (кл)"/>
<registryCode id="23" code="DMAT" name="Возврат депозита"/>
<registryCode id="24" code="DMBT" name="Возврат депозита (кл)"/>
<registryCode id="25" code="ASAT" name="Ценные бумаги Участника клиринга свои"/>
<registryCode id="26" code="ASAF" name="Ценные бумаги - свободные"/>
<registryCode id="27" code="ASAB" name="Ценные бумаги - блокированные"/>
<registryCode id="28" code="DMAX" name="Возврат инициатору"/>
<registryCode id="29" code="DMBX" name="Возврат инициатору (кл)"/>
<registryCode id="30" code="DMAU" name="Денежные средства - невыясненные"/>
<registryCode id="31" code="DMAV" name="Треб. выписки"/>
<registryCode id="32" code="ASZT" name="Ценные бумаги для размещения/выкупа"/>
<registryCode id="33" code="ASBT" name="Ценные бумаги Участника клиринга клиенты"/>
<registryCode id="34" code="ASCT" name="Ценные бумаги Участника клиринга клиенты-нерезиденты"/>
<registryCode id="35" code="AMCT" name="Денежные средства Участника клиринга, зарезервированные на торги клиенты"/>
<registryCode id="36" code="ASXT" name="Ценные бумаги Участника клиринга ДУ"/>
</enums>
<objects>
</objects>
</meta>

View file

@ -1,96 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<meta version="3.9.0.68">
<enums>
</enums>
<objects>
<market id="1" code="ABEC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="Размещение: Аукцион СПВБ" description="Размещение: Аукцион СПВБ"/>
<market id="2" code="AEPC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="Размещение: акции (аукцион по цене)" description="Размещение: акции (аукцион по цене)"/>
<market id="3" code="AESC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="Размещение: акции (аукцион по цене)" description="Размещение: акции (аукцион по цене)"/>
<market id="4" code="ABFC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="СПВБ: Обл. с ПД-Аукцион" description="СПВБ: Обл. с ПД-Аукцион"/>
<market id="5" code="ABIC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="СПВБ: Обл. с ИН - Аукцион" description="СПВБ: Обл. с ИН - Аукцион"/>
<market id="6" code="ABMC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="СПВБ: Обл. с АД - Аукцион" description="СПВБ: Обл. с АД - Аукцион"/>
<market id="7" code="ABVC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="СПВБ: Обл. с ПК - Аукцион" description="СПВБ: Обл. с ПК - Аукцион"/>
<market id="8" code="BKVC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="Размещение: Аукцион БР" description="Размещение: Аукцион БР"/>
<market id="9" code="BMFC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="ОФЗПД-Размещение: Аукцион" description="ОФЗПД-Размещение: Аукцион"/>
<market id="10" code="BMIC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="ОФЗИН-Размещение: Аукцион" description="ОФЗИН-Размещение: Аукцион"/>
<market id="11" code="BMMC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="ОФЗАД-Размещение: Аукцион" description="ОФЗАД-Размещение: Аукцион"/>
<market id="12" code="BMVC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="ОФЗПК-Размещение: Аукцион" description="ОФЗПК-Размещение: Аукцион"/>
<market id="13" code="DBEC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="Дискретный аукцион" description="Дискретный аукцион"/>
<market id="14" code="DBFC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="Дискретный аукцион" description="Дискретный аукцион"/>
<market id="15" code="DBIC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="Дискретный аукцион" description="Дискретный аукцион"/>
<market id="16" code="DBMC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="Дискретный аукцион" description="Дискретный аукцион"/>
<market id="17" code="DBVC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="Дискретный аукцион" description="Дискретный аукцион"/>
<market id="18" code="DEPC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="Дискретный аукцион" description="Дискретный аукцион"/>
<market id="19" code="DESC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="Дискретный аукцион" description="Дискретный аукцион"/>
<market id="20" code="DKVC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="Дискретный аукцион" description="Дискретный аукцион"/>
<market id="21" code="DMFC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="ОФЗПД-Дискретный аукцион" description="ОФЗПД-Дискретный аукцион"/>
<market id="22" code="DMIC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="ОФЗИН-Дискретный аукцион" description="ОФЗИН-Дискретный аукцион"/>
<market id="23" code="DMMC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="ОФЗАД-Дискретный аукцион" description="ОФЗАД-Дискретный аукцион"/>
<market id="24" code="DMVC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="ОФЗПК-Дискретный аукцион" description="ОФЗПК-Дискретный аукцион"/>
<market id="25" code="KBFC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="Размещение: Аукцион по ставке" description="Размещение: Аукцион по ставке"/>
<market id="26" code="KBIC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="Размещение: Аукцион по ставке" description="Размещение: Аукцион по ставке"/>
<market id="27" code="KBMC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="Размещение: Аукцион по ставке" description="Размещение: Аукцион по ставке"/>
<market id="28" code="KBVC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="Размещение: Аукцион по ставке" description="Размещение: Аукцион по ставке"/>
<market id="29" code="PMFC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="ОФЗПД-Торги в режиме выкупа" description="ОФЗПД-Торги в режиме выкупа"/>
<market id="30" code="PMIC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="ОФЗИН-Торги в режиме выкупа" description="ОФЗИН-Торги в режиме выкупа"/>
<market id="31" code="PMMC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="ОФЗАД-Торги в режиме выкупа" description="ОФЗАД-Торги в режиме выкупа"/>
<market id="32" code="PMVC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="ОФЗПК-Торги в режиме выкупа" description="ОФЗПК-Торги в режиме выкупа"/>
<market id="33" code="NBEC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="Режим переговорных сделок (РПС)" description="Режим переговорных сделок (РПС)"/>
<market id="34" code="NBFC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="Режим переговорных сделок (РПС)" description="Режим переговорных сделок (РПС)"/>
<market id="35" code="NBIC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="Режим переговорных сделок (РПС)" description="Режим переговорных сделок (РПС)"/>
<market id="36" code="NBMC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="Режим переговорных сделок (РПС)" description="Режим переговорных сделок (РПС)"/>
<market id="37" code="NBVC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="Режим переговорных сделок (РПС)" description="Режим переговорных сделок (РПС)"/>
<market id="38" code="NEPC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="Режим переговорных сделок (РПС)" description="Режим переговорных сделок (РПС)"/>
<market id="39" code="NESC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="Режим переговорных сделок (РПС)" description="Режим переговорных сделок (РПС)"/>
<market id="40" code="NKVC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="Режим переговорных сделок (РПС)" description="Режим переговорных сделок (РПС)"/>
<market id="41" code="SBFC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="СПВБ: Обл. с ПД - Доразмещение" description="СПВБ: Обл. с ПД - Доразмещение"/>
<market id="42" code="SBIC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="СПВБ: Обл. с ИН - Доразмещение" description="СПВБ: Обл. с ИН - Доразмещение"/>
<market id="43" code="SBMC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="СПВБ: Обл. с АД -Доразмещение" description="СПВБ: Обл. с АД -Доразмещение"/>
<market id="44" code="SBVC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="СПВБ: Обл. с ПК-Доразмещение" description="СПВБ: Обл. с ПК-Доразмещение"/>
<market id="45" code="SKVC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="Доразмещение: Адресные заявки БР" description="Доразмещение: Адресные заявки БР"/>
<market id="46" code="SMFC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="ОФЗПД- Доразмещение: Адресные заявки" description="ОФЗПД- Доразмещение: Адресные заявки"/>
<market id="47" code="SMIC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="ОФЗИН-Доразмещение: Адресные заявки" description="ОФЗИН-Доразмещение: Адресные заявки"/>
<market id="48" code="SMMC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="ОФЗАД-Доразмещение: Адресные заявки" description="ОФЗАД-Доразмещение: Адресные заявки"/>
<market id="49" code="SMVC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="ОФЗПК-Доразмещение: Адресные заявки" description="ОФЗПК-Доразмещение: Адресные заявки"/>
<market id="50" code="UBEC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="Режим непрерывных торгов" description="Режим непрерывных торгов"/>
<market id="51" code="UBFC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="СПВБ: Обл. с ПД - Торги" description="СПВБ: Обл. с ПД - Торги"/>
<market id="52" code="UBIC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="СПВБ: Обл. с ИН - Торги" description="СПВБ: Обл. с ИН - Торги"/>
<market id="53" code="UBMC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="СПВБ: Обл. с АД - Торги" description="СПВБ: Обл. с АД - Торги"/>
<market id="54" code="UBVC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="СПВБ: Обл. с ПК - Торги" description="СПВБ: Обл. с ПК - Торги"/>
<market id="55" code="UEPC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="Режим непрерывных торгов" description="Режим непрерывных торгов"/>
<market id="56" code="UESC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="СПВБ: Акции Торги" description="СПВБ: Акции Торги"/>
<market id="57" code="UKVC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="Режим непрерывных торгов" description="Режим непрерывных торгов"/>
<market id="58" code="UMFC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="ОФЗПД-Режим непрерывных торгов" description="ОФЗПД-Режим непрерывных торгов"/>
<market id="59" code="UMIC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="ОФЗИН-Режим непрерывных торгов" description="ОФЗИН-Режим непрерывных торгов"/>
<market id="60" code="UMMC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="ОФЗАД-Режим непрерывных торгов" description="ОФЗАД-Режим непрерывных торгов"/>
<market id="61" code="UMVC" section="FOND" marketType="SCND" settlementCurrency="RUB" name="ОФЗПК-Режим непрерывных торгов" description="ОФЗПК-Режим непрерывных торгов"/>
<market id="62" code="WBFC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="Размещение: адресные заявки (подписка)" description="Размещение: адресные заявки (подписка)"/>
<market id="63" code="WBIC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="Размещение: адресные заявки (подписка)" description="Размещение: адресные заявки (подписка)"/>
<market id="64" code="WBMC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="Размещение: адресные заявки (подписка)" description="Размещение: адресные заявки (подписка)"/>
<market id="65" code="WBVC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="Размещение: адресные заявки (подписка)" description="Размещение: адресные заявки (подписка)"/>
<market id="66" code="WEPC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="Размещение: адресные заявки (подписка)" description="Размещение: адресные заявки (подписка)"/>
<market id="67" code="WESC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="Размещение: адресные заявки (подписка)" description="Размещение: адресные заявки (подписка)"/>
<market id="68" code="ABZC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="СПВБ: Диск. обл. - Аукцион" description="СПВБ: Диск. обл. - Аукцион"/>
<market id="69" code="SBZC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="СПВБ: Диск. обл.-Доразмещение" description="СПВБ: Диск. обл.-Доразмещение"/>
<market id="70" code="UBZC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="СПВБ: Диск. обл. - Торги" description="СПВБ: Диск. обл. - Торги"/>
<market id="71" code="NBZC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="СПВБ: Диск. обл. - РПС" description="СПВБ: Диск. обл. - РПС"/>
<market id="72" code="DBZC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="СПВБ: Диск. обл. - Дискретный аукцион" description="СПВБ: Диск. обл. - Дискретный аукцион"/>
<market id="73" code="WBZC" section="FOND" marketType="PRMR" settlementCurrency="RUB" name="СПВБ: Диск. обл. - адресные заявки (подписка)" description="СПВБ: Диск. обл. - адресные заявки (подписка)"/>
<market id="74" code="XMDTATSS" section="MKR" marketType="PRMR" settlementCurrency="RUB" name="Размещение: депозитный аукцион" description="Размещение: депозитный аукцион"/>
<market id="75" code="XMDTAVGB" section="MKR" marketType="PRMR" settlementCurrency="RUB" name="Размещение: депозитный аукцион" description="Размещение: депозитный аукцион"/>
<market id="76" code="XMDTFSKB" section="MKR" marketType="PRMR" settlementCurrency="RUB" name="Размещение: депозитный аукцион" description="Размещение: депозитный аукцион"/>
<market id="77" code="XMDTKFLO" section="MKR" marketType="PRMR" settlementCurrency="RUB" name="Размещение: депозитный аукцион" description="Размещение: депозитный аукцион"/>
<market id="78" code="XMDTKFSP" section="MKR" marketType="PRMR" settlementCurrency="RUB" name="Размещение: депозитный аукцион" description="Размещение: депозитный аукцион"/>
<market id="79" code="XMNTFSKB" section="MKR" marketType="PRMR" settlementCurrency="RUB" name="Депозитные торги (аукцион)" description="Депозитные торги (аукцион)"/>
<market id="80" code="XMNTKFLO" section="MKR" marketType="PRMR" settlementCurrency="RUB" name="Депозитные торги (аукцион)" description="Депозитные торги (аукцион)"/>
<market id="81" code="XMNTKFSP" section="MKR" marketType="PRMR" settlementCurrency="RUB" name="Депозитные торги (аукцион)" description="Депозитные торги (аукцион)"/>
<market id="82" code="XMDSFSKB" section="MKR" marketType="PRMR" settlementCurrency="RUB" name="Размещение: депозитный аукцион" description="Размещение: депозитный аукцион"/>
<market id="83" code="XMDSKFLO" section="MKR" marketType="PRMR" settlementCurrency="RUB" name="Размещение: депозитный аукцион" description="Размещение: депозитный аукцион"/>
<market id="84" code="XMDSKFSP" section="MKR" marketType="PRMR" settlementCurrency="RUB" name="Размещение: депозитный аукцион" description="Размещение: депозитный аукцион"/>
<market id="85" code="XMTTKFSP" section="MKR" marketType="PRMR" settlementCurrency="RUB" name="Размещение: депозитные торги" description="Размещение: депозитные торги"/>
<market id="86" code="XMNSKFLO" section="MKR" marketType="PRMR" settlementCurrency="RUB" name="Депозитные торги (аукцион)" description="Депозитные торги (аукцион)"/>
</objects>
</meta>

View file

@ -1,6 +1,6 @@
{
"version": "3.10.0.77",
"version": "3.9.0.71",
"enums": {
@ -5325,11 +5325,7 @@
"name": "Запрос остатков по всем счетам (отправка ДФ-56 для получения ответа ДФ-01, ДФ-57)",
"fields": [
{"code": "fromTime",
"type": 5,"name": "Запросить с ","shortname": "Запросить с "
}
]
"fields": []
}
,
{"method":"post",
@ -5390,17 +5386,6 @@
"fields": []
}
,
{"method":"post",
"destination": "CBRR",
"group": "Обмен с интеграционными модулями",
"name": "Загрузка кросс-курсов",
"fields": []
}
,
{"method":"post",
"destination": "LIMM",
@ -5485,6 +5470,28 @@
"fields": []
}
,
{"method":"post",
"destination": "ADLR",
"group": "Формирование реестров",
"name": "Формирование реестра обязательств, допущенных к клирингу",
"fields": []
}
,
{"method":"post",
"destination": "CDLR",
"group": "Формирование реестров",
"name": "Формирование реестра обязательств, прошедших процедуру контроля обеспечения",
"fields": []
}
,
{"method":"post",
"destination": "GORR",
@ -5507,6 +5514,17 @@
"fields": []
}
,
{"method":"post",
"destination": "EXLR",
"group": "Формирование реестров",
"name": "Формирование реестра обязательств, исключенных из клирингового пула",
"fields": []
}
,
{"method":"post",
"destination": "LBSR",
@ -5604,11 +5622,11 @@
}
,
{"code": "createdAt",
"field": "created","type": 4,"webtype": "5","dbname": "Дата-время создания записи","name": "Время создания записи","shortname": "Создано","searchable": true,"sortable": true
"field": "created","type": 4,"webtype": "5","dbname": "Дата-время создания записи","name": "Время создания записи","shortname": "Создано","searchable": true,"sortable": true,"ignore": true
}
,
{"code": "updatedAt",
"field": "updated","type": 4,"webtype": "5","dbname": "Дата-время изменения записи","name": "Время изменения записи","shortname": "Завершено","searchable": true,"sortable": true
"field": "updated","type": 4,"webtype": "5","dbname": "Дата-время изменения записи","name": "Время изменения записи","shortname": "Изменено","searchable": true,"sortable": true,"ignore": true
}
,
{"code": "clearingDate",
@ -5882,7 +5900,7 @@
}
,
{"code": "market",
"type": 2,"length": 8,"dbname": "Код секции финансового инструмента","name": "Секция финансового инструмента","shortname": "Секция","visible": true,"searchable": true,"sortable": true
"type": 2,"length": 8,"dbname": "Код секции финансового инструмента","name": "Секция финансового инструмента","shortname": "Секция","visible": true,"searchable": true,"sortable": true,"link": "market","linkKeyCode": "code","linkCode": "description"
}
,
{"code": "price",
@ -6040,7 +6058,7 @@
}
,
{"code": "market",
"type": 12,"dbname": "Код секции финансового инструмента","name": "Секция финансового инструмента","shortname": "Секция","visible": true,"searchable": true,"sortable": true
"type": 12,"dbname": "Код секции финансового инструмента","name": "Секция финансового инструмента","shortname": "Секция","visible": true,"searchable": true,"sortable": true,"link": "market","linkKeyCode": "code","linkCode": "description"
}
,
{"code": "tradingDate",
@ -9423,64 +9441,6 @@
]
}
,
"sCrossRate": {
"name": "Кросс курсы валют от ЦБ",
"destination": "cross-rate",
"class": "ru.clearing.classes.statics.data.misc.SCrossRate",
"table": "s_cross_rate",
"fields": [
{"code": "id",
"type": 1,"name": "Идентификатор записи","shortname": "ID","searchable": true,"sortable": true,"visible": false
}
,
{"code": "date",
"type": 6,"name": "Дата торгов","shortname": "Дата торгов","searchable": true,"sortable": true,"visible": false
}
,
{"code": "currency",
"type": 2,"length": 50,"name": "Наименование валюты","shortname": "Наименование валюты","searchable": true,"sortable": true,"visible": true
}
,
{"code": "currCode",
"type": 2,"length": 50,"name": "Код валюты","shortname": "Код валюты","searchable": true,"sortable": true,"visible": true
}
,
{"code": "faceValue",
"type": 10,"name": "Номинал","shortname": "Номинал","searchable": true,"sortable": true,"visible": true
}
,
{"code": "rate",
"type": 10,"name": "Курс валюты с учетом размера лота","shortname": "Курс валюты","searchable": true,"sortable": true,"visible": true
}
,
{"code": "unitRate",
"type": 10,"name": "Курс за единицу иностранной валюты","shortname": "Курс за единицу валюты","searchable": true,"sortable": true,"visible": true
}
,
{"code": "generationTime",
"type": 4,"name": "Дата и время создания записи","shortname": "Дата и время создания","searchable": true,"sortable": true,"visible": true
}
,
{"code": "generationId",
"type": 1,"name": "Идентификатор взаимодействия","shortname": "ID взаимодействия","searchable": true,"sortable": true,"visible": true
}
,
{"code": "createdAt",
"field": "created","type": 4,"webtype": "5","dbname": "Дата-время создания записи","name": "Время создания записи","shortname": "Создано","searchable": true,"sortable": true,"ignore": true
}
,
{"code": "updatedAt",
"field": "updated","type": 4,"webtype": "5","dbname": "Дата-время изменения записи","name": "Время изменения записи","shortname": "Изменено","searchable": true,"sortable": true,"ignore": true
}
]
}
}

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--?xml-stylesheet type="text/xsl" href="\..\corp-reports\src\data\meta\meta.server.xslt"?-->
<meta version="3.10.0.77">
<meta version="3.9.0.71">
<!-- _xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" _xsi:noNamespaceSchemaLocation="file:///E:/d/projects/meta/from/meta.xsd" -->
<!--Здесь словари-->
<enums>
@ -1236,7 +1236,6 @@
<post destination="LOSC" group="Обмен с интеграционными модулями" name="Загрузка инструментов">
</post>
<post destination="GALB" group="Обмен с расчетной организацией" name="Запрос остатков по всем счетам (отправка ДФ-56 для получения ответа ДФ-01, ДФ-57)">
<fromTime type="5" name="Запросить с " shortname="Запросить с "/>
</post>
<post destination="OUTV" group="Обмен с расчетной организацией" name="Вывод свободных средств с клирингового регистра (отправка ДФ-54 для получения ответа ДФ-55)">
<fullBalance type="10" name="Текущий баланс (всего)" shortname="Текущие средства (всего)" enabled="false"/>
@ -1251,8 +1250,6 @@
</post>
<post destination="GTRD" group="Обмен с Торговой системой" name="Получение сделок из Торговой системы">
</post>
<post destination="CBRR" group="Обмен с интеграционными модулями" name="Загрузка кросс-курсов">
</post>
<post destination="LIMM" group="Обмен с Торговой системой" name="Выгрузка в Торговую систему остатков по деньгам (отправка lim)">
</post>
<post destination="LIMS" group="Обмен с Торговой системой" name="Выгрузка в Торговую систему остатков по бумагам (отправка lim)">
@ -1269,10 +1266,16 @@
</post>
<post destination="GBRR" group="Формирование реестров" name="Формирование реестра остатков денежных средств">
</post>
<post destination="ADLR" group="Формирование реестров" name="Формирование реестра обязательств, допущенных к клирингу">
</post>
<post destination="CDLR" group="Формирование реестров" name="Формирование реестра обязательств, прошедших процедуру контроля обеспечения">
</post>
<post destination="GORR" group="Формирование реестров" name="Формирование реестра распоряжений, направленных расчетной организации">
</post>
<post destination="GORD" group="Формирование реестров" name="Формирование реестра распоряжений, направленных расчетному депозитарию">
</post>
<post destination="EXLR" group="Формирование реестров" name="Формирование реестра обязательств, исключенных из клирингового пула">
</post>
<post destination="LBSR" group="Формирование реестров" name="Формирование реестра учета обязательств">
</post>
<post destination="ECNR" group="Формирование реестров" name="Формирование реестра сделок">
@ -1292,8 +1295,8 @@
<session name="Клиринговые сессии" destination="sessions" class="ru.clearing.classes.statics.data.misc.Session" logUpdates="true" table="session">
<id type="1" name="Идентификатор записи" shortname="ID" searchable="true" sortable="true"/>
<createdAt field="created" type="4" webtype="5" dbname="Дата-время создания записи" name="Время создания записи" shortname="Создано" searchable="true" sortable="true"/>
<updatedAt field="updated" type="4" webtype="5" dbname="Дата-время изменения записи" name="Время изменения записи" shortname="Завершено" searchable="true" sortable="true"/>
<createdAt field="created" type="4" webtype="5" dbname="Дата-время создания записи" name="Время создания записи" shortname="Создано" searchable="true" sortable="true" ignore="true"/>
<updatedAt field="updated" type="4" webtype="5" dbname="Дата-время изменения записи" name="Время изменения записи" shortname="Изменено" searchable="true" sortable="true" ignore="true"/>
<clearingDate type="6" name="Дата" shortname="Дата" searchable="true" sortable="true" visible="true"/>
<sessionStatus type="12" dbname="Код статуса клиринговой сессии" name="Статус клиринговой сессии" shortname="Шаг" searchable="true" sortable="true" visible="true" link="sessionStatus"/>
<companyId type="1" dbname="Идентификатор инициатора торгов" name="Наименование инициатора торгов" shortname="Инициатор" visible="false" searchable="true" sortable="true" link="company" linkCode="shortName"/>
@ -1358,7 +1361,7 @@
<tradingDate type="6" name="Дата заключения сделки" shortname="Дата заключения сделки" visible="true" searchable="true" sortable="true"/>
<tradingClearingRegistryId type="1" dbname="Идентификатор торгово-клирингового регистра" name="Торгово-клиринговый регистр" shortname="ТКР" visible="true" searchable="true" sortable="true" link="tradingClearingRegistry" linkCode="code"/>
<partyTradingClearingRegistry type="2" length="20" dbname="Торгово-клиринговый регистр " name="Торгово-клиринговый регистр " shortname="ТКР " searchable="true" sortable="true" ignore="true"/>
<market type="2" length="8" dbname="Код секции финансового инструмента" name="Секция финансового инструмента" shortname="Секция" visible="true" searchable="true" sortable="true"/>
<market type="2" length="8" dbname="Код секции финансового инструмента" name="Секция финансового инструмента" shortname="Секция" visible="true" searchable="true" sortable="true" link="market" linkKeyCode="code" linkCode="description"/>
<price type="10" name="Ставка по депозиту" shortname="Ставка, %" visible="true" searchable="true" sortable="true"/>
<lots type="11" name="Количество лотов" shortname="Лоты" visible="true" searchable="true" sortable="true"/>
<quantity type="11" name="Количество штук" shortname="Штуки" visible="false" searchable="true" sortable="true"/>
@ -1395,7 +1398,7 @@
<clearingDate type="6" name="Дата клиринга" shortname="Дата клиринга" visible="false" searchable="true" sortable="true"/>
<exchangeExecutionId type="1" name="Идентификационный номер сделки в Торговой системе" shortname="Номер сделки" visible="true" searchable="true" sortable="true"/>
<side type="12" dbname="Код направления сделки" name="Направление сделки" shortname="Направление" visible="true" searchable="true" sortable="true" link="side"/>
<market type="12" dbname="Код секции финансового инструмента" name="Секция финансового инструмента" shortname="Секция" visible="true" searchable="true" sortable="true"/>
<market type="12" dbname="Код секции финансового инструмента" name="Секция финансового инструмента" shortname="Секция" visible="true" searchable="true" sortable="true" link="market" linkKeyCode="code" linkCode="description"/>
<tradingDate type="6" name="Дата заключения сделки" shortname="Дата заключения сделки" visible="true" searchable="true" sortable="true"/>
<securitySymbol type="2" length="255" name="Код инструмента в Торговой Системе" shortname="Код инструмента" visible="true" searchable="true" sortable="true"/>
<securityId type="1" dbname="Идентификатор финансового инструмента" name="Финансовый инструмент" shortname="Код биржевого инструмента / товара" searchable="true" sortable="true" link="security" linkCode="securitySymbol" ignore="true"/>
@ -2175,19 +2178,6 @@
<price type="10" name="Цена за 1 штуку ликвидационного актива" shortname="Цена за шт." searchable="true" sortable="true" visible="true"/>
<clearingDate type="6" name="Дата" shortname="Дата" searchable="true" sortable="true" ignore="true"/>
</marketDataLiquidation>
<sCrossRate name="Кросс курсы валют от ЦБ" destination="cross-rate" class="ru.clearing.classes.statics.data.misc.SCrossRate" table="s_cross_rate">
<id type="1" name="Идентификатор записи" shortname="ID" searchable="true" sortable="true" visible="false"/>
<date type="6" name="Дата торгов" shortname="Дата торгов" searchable="true" sortable="true" visible="false"/>
<currency type="2" length="50" name="Наименование валюты" shortname="Наименование валюты" searchable="true" sortable="true" visible = "true"/>
<currCode type="2" length="50" name="Код валюты" shortname="Код валюты" searchable="true" sortable="true" visible = "true"/>
<faceValue type="10" name="Номинал" shortname="Номинал" searchable="true" sortable="true" visible = "true"/>
<rate type="10" name="Курс валюты с учетом размера лота" shortname="Курс валюты" searchable="true" sortable="true" visible = "true"/>
<unitRate type="10" name="Курс за единицу иностранной валюты" shortname="Курс за единицу валюты" searchable="true" sortable="true" visible="true"/>
<generationTime type="4" name="Дата и время создания записи" shortname="Дата и время создания" searchable="true" sortable="true" visible="true"/>
<generationId type="1" name="Идентификатор взаимодействия" shortname="ID взаимодействия" searchable="true" sortable="true" visible="true"/>
<createdAt field="created" type="4" webtype="5" dbname="Дата-время создания записи" name="Время создания записи" shortname="Создано" searchable="true" sortable="true" ignore="true"/>
<updatedAt field="updated" type="4" webtype="5" dbname="Дата-время изменения записи" name="Время изменения записи" shortname="Изменено" searchable="true" sortable="true" ignore="true"/>
</sCrossRate>
</objects>
<views>
<AccountUnion>

View file

@ -113,7 +113,6 @@ import static ru.spcex.clearing.test.json.MatcherFactoryWithJson.usingIgnoringFi
MarketController.class,
NotificationController.class,
SessionController.class,
SCrossRateController.class,
//payment
PaymentInstructionController.class,
//register

View file

@ -1,40 +0,0 @@
package ru.spcex.clearing.backendapi.controller.queue.misc;
import org.junit.jupiter.api.Test;
import ru.clearing.classes.statics.data.misc.SCrossRate;
import ru.spcex.clearing.backendapi.controller.queue.AbstractControllerTest;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
class SCrossRateControllerTest extends AbstractControllerTest {
private static final String REST_URL = "/cross-rate/";
/**
* {@link SCrossRateController#getAll()} <br>
* Тест проверяет получение запроса по REST API.<br>
* Входной запрос /cross-rate/ <br>
* Ответ SCrossRate <br>
*/
@Test
void getAll() throws Exception {
//ARRANGE
SCrossRate sCrossRate = new SCrossRate();
sCrossRate.setId(currentId.get());
sCrossRate.setDate(LocalDate.now());
sCrossRate.setCurrency("RUB");
sCrossRate.setCurrCode("RUB");
sCrossRate.setFaceValue(new BigDecimal("1.00"));
sCrossRate.setRate(new BigDecimal("1.00"));
sCrossRate.setUnitRate(new BigDecimal("1.00"));
sCrossRate.setGenerationTime(Instant.now());
sCrossRate.setGenerationId(10L);
sCrossRate.setCreated(Instant.now());
sCrossRate.setUpdated(sCrossRate.getCreated());
//ACT and ASSERT
checkGettingAllFromRestApi(IMDGDistributedNames.Map_SCrossRate, sCrossRate, REST_URL);
}
}

View file

@ -1,11 +1,8 @@
package ru.spcex.clearing.backendapi.meta;
import org.apache.commons.lang3.StringUtils;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
@ -17,7 +14,6 @@ import java.util.stream.Collectors;
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = GetResponseFactoryTestConfiguration.class)
public class GetResponseFactoryTest {
private Logger log = LoggerFactory.getLogger(getClass());
private final MetaServer meta;
@Autowired
@ -41,10 +37,6 @@ public class GetResponseFactoryTest {
try {
classByName = Class.forName(className);
} catch (ClassNotFoundException e) {
if ("db-versions".equals(objectElement.getDestination()) && StringUtils.isEmpty(objectElement.getClazz())) {
log.info("No class for system table \"{}\" (cannot find class)", objectElement.getDestination());
continue;
}
error.computeIfAbsent(ent.getKey(), v -> new ArrayList<>()).add(ent.getKey() + " cannot find class " + className);
continue;
}

View file

@ -1,6 +1,6 @@
{
"version": "3.10.0.77",
"version": "3.9.0.71",
"enums": {
@ -5325,11 +5325,7 @@
"name": "Запрос остатков по всем счетам (отправка ДФ-56 для получения ответа ДФ-01, ДФ-57)",
"fields": [
{"code": "fromTime",
"type": 5,"name": "Запросить с ","shortname": "Запросить с "
}
]
"fields": []
}
,
{"method":"post",
@ -5390,17 +5386,6 @@
"fields": []
}
,
{"method":"post",
"destination": "CBRR",
"group": "Обмен с интеграционными модулями",
"name": "Загрузка кросс-курсов",
"fields": []
}
,
{"method":"post",
"destination": "LIMM",
@ -5485,6 +5470,28 @@
"fields": []
}
,
{"method":"post",
"destination": "ADLR",
"group": "Формирование реестров",
"name": "Формирование реестра обязательств, допущенных к клирингу",
"fields": []
}
,
{"method":"post",
"destination": "CDLR",
"group": "Формирование реестров",
"name": "Формирование реестра обязательств, прошедших процедуру контроля обеспечения",
"fields": []
}
,
{"method":"post",
"destination": "GORR",
@ -5507,6 +5514,17 @@
"fields": []
}
,
{"method":"post",
"destination": "EXLR",
"group": "Формирование реестров",
"name": "Формирование реестра обязательств, исключенных из клирингового пула",
"fields": []
}
,
{"method":"post",
"destination": "LBSR",
@ -5604,11 +5622,11 @@
}
,
{"code": "createdAt",
"field": "created","type": 4,"webtype": "5","dbname": "Дата-время создания записи","name": "Время создания записи","shortname": "Создано","searchable": true,"sortable": true
"field": "created","type": 4,"webtype": "5","dbname": "Дата-время создания записи","name": "Время создания записи","shortname": "Создано","searchable": true,"sortable": true,"ignore": true
}
,
{"code": "updatedAt",
"field": "updated","type": 4,"webtype": "5","dbname": "Дата-время изменения записи","name": "Время изменения записи","shortname": "Завершено","searchable": true,"sortable": true
"field": "updated","type": 4,"webtype": "5","dbname": "Дата-время изменения записи","name": "Время изменения записи","shortname": "Изменено","searchable": true,"sortable": true,"ignore": true
}
,
{"code": "clearingDate",
@ -5882,7 +5900,7 @@
}
,
{"code": "market",
"type": 2,"length": 8,"dbname": "Код секции финансового инструмента","name": "Секция финансового инструмента","shortname": "Секция","visible": true,"searchable": true,"sortable": true
"type": 2,"length": 8,"dbname": "Код секции финансового инструмента","name": "Секция финансового инструмента","shortname": "Секция","visible": true,"searchable": true,"sortable": true,"link": "market","linkKeyCode": "code","linkCode": "description"
}
,
{"code": "price",
@ -6040,7 +6058,7 @@
}
,
{"code": "market",
"type": 12,"dbname": "Код секции финансового инструмента","name": "Секция финансового инструмента","shortname": "Секция","visible": true,"searchable": true,"sortable": true
"type": 12,"dbname": "Код секции финансового инструмента","name": "Секция финансового инструмента","shortname": "Секция","visible": true,"searchable": true,"sortable": true,"link": "market","linkKeyCode": "code","linkCode": "description"
}
,
{"code": "tradingDate",
@ -9423,64 +9441,6 @@
]
}
,
"sCrossRate": {
"name": "Кросс курсы валют от ЦБ",
"destination": "cross-rate",
"class": "ru.clearing.classes.statics.data.misc.SCrossRate",
"table": "s_cross_rate",
"fields": [
{"code": "id",
"type": 1,"name": "Идентификатор записи","shortname": "ID","searchable": true,"sortable": true,"visible": false
}
,
{"code": "date",
"type": 6,"name": "Дата торгов","shortname": "Дата торгов","searchable": true,"sortable": true,"visible": false
}
,
{"code": "currency",
"type": 2,"length": 50,"name": "Наименование валюты","shortname": "Наименование валюты","searchable": true,"sortable": true,"visible": true
}
,
{"code": "currCode",
"type": 2,"length": 50,"name": "Код валюты","shortname": "Код валюты","searchable": true,"sortable": true,"visible": true
}
,
{"code": "faceValue",
"type": 10,"name": "Номинал","shortname": "Номинал","searchable": true,"sortable": true,"visible": true
}
,
{"code": "rate",
"type": 10,"name": "Курс валюты с учетом размера лота","shortname": "Курс валюты","searchable": true,"sortable": true,"visible": true
}
,
{"code": "unitRate",
"type": 10,"name": "Курс за единицу иностранной валюты","shortname": "Курс за единицу валюты","searchable": true,"sortable": true,"visible": true
}
,
{"code": "generationTime",
"type": 4,"name": "Дата и время создания записи","shortname": "Дата и время создания","searchable": true,"sortable": true,"visible": true
}
,
{"code": "generationId",
"type": 1,"name": "Идентификатор взаимодействия","shortname": "ID взаимодействия","searchable": true,"sortable": true,"visible": true
}
,
{"code": "createdAt",
"field": "created","type": 4,"webtype": "5","dbname": "Дата-время создания записи","name": "Время создания записи","shortname": "Создано","searchable": true,"sortable": true,"ignore": true
}
,
{"code": "updatedAt",
"field": "updated","type": 4,"webtype": "5","dbname": "Дата-время изменения записи","name": "Время изменения записи","shortname": "Изменено","searchable": true,"sortable": true,"ignore": true
}
]
}
}

View file

@ -44,13 +44,6 @@
<groupId>ru.spcex.platform</groupId>
<artifactId>platform-enum</artifactId>
</dependency>
<!-- special logging -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.0.1</version>
</dependency>
<!-- TEST -->
<dependency>
<groupId>org.springframework</groupId>

View file

@ -10,7 +10,6 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.platform.enumeration.Task;
@ -37,17 +36,14 @@ public class Sdf08Service extends QueueConsumer implements InitializingBean {
@Override
public void afterPropertiesSet() {
callback(LauncherCommandRequest.class)
callback(Object.class)
.setConsumer(this::newSDf08)
.forDestination(Task.getAllBalance.topic(), callbacks::put);
init();
}
private void newSDf08(BaseRequest<LauncherCommandRequest> userRequest) {
LauncherCommandRequest req = userRequest.getRequestPayload();
log.debug("getAllBalance request received, parameter fromTime={}",
req == null ? null : req.getFromTime());
// todo use опциональный параметр req.fromTime
private void newSDf08(BaseRequest<Object> userRequest) {
log.debug("getAllBalance request received");
SDf08 sDf08 = new SDf08();
// sDf08.setNumber(idGenerator.nextId().toString());
Instant now = Instant.now();

View file

@ -1,56 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_PATH" value="./log" />
<property name="FILE_NAME" value="balance-service" />
<property name="CONSOLE_LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n" />
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n</Pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./logs/balance-service.log</file>
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<!-- first FILE TEXT appender -->
<appender name="TEXT_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-text.log</file>
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${FILE_LOG_PATTERN}</Pattern>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n</Pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-text.%d{yyyy-MM-dd}.%i.gz
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>
./logs/balance-service.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<!-- second FILE JSON appender -->
<appender name="JSON_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-json.log</file>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-json.%d{yyyy-MM-dd}.%i.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>500MB</maxFileSize>
</triggeringPolicy>
</appender>
<root level="info">
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
</root>
<root level="warn">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<logger name="ru.spcex" level="debug" additivity="false">
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</logger>
</configuration>

View file

@ -15,14 +15,11 @@ import ru.spcex.clearing.platform.messaging.domain.ActionType;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
import ru.spcex.clearing.platform.messaging.service.RequestInfo;
import ru.spcex.platform.enumeration.Task;
import javax.annotation.PostConstruct;
import java.time.LocalTime;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.Mockito.timeout;
@ -83,43 +80,4 @@ class Sdf08ServiceTest extends AbstractServiceTest {
assertNotNull(resultsSDf08);
assertNotNull(resultRequestInfo);
}
/**
* {@link Sdf08Service}<br>
* Тест проверяет генерацию сущностей {@link RequestInfo}<br>
* Входные параметры:<br>
* {@link BaseRequest} - new BaseRequest<>() с полем fromTime <br>
*/
@Test
void newSDf08_withTime() throws JsonProcessingException {
BaseRequest<LauncherCommandRequest> baseNewRequest = new BaseRequest<>();
baseNewRequest.setId(currentId.getAndIncrement());
baseNewRequest.setActionType(ActionType.NEW);
LauncherCommandRequest launcherCommandRequest = new LauncherCommandRequest();
final LocalTime fromTime = LocalTime.of(12, 23);
launcherCommandRequest.setFromTime(fromTime);
baseNewRequest.setRequestPayload(launcherCommandRequest);
ObjectMapper objectMapper = new ObjectMapper();
String jsonBaseNewRequest = objectMapper.writeValueAsString(baseNewRequest);
addRecordToKafka(mockConsumer, TOPIC, PARTITION, 0, jsonBaseNewRequest);
//waiting for kafka producer send message (finale event)
verify(producer, timeout(30_000L).times(1))
.send(producerRecord.capture());
assertEquals(Consts.EXPORT_PROCESS, producerRecord.getValue().topic());
BaseRequest<Object> baseRequest = (BaseRequest<Object>) producerRecord.getValue().value();
ExportToFileRequest exportToFileRequest = (ExportToFileRequest) baseRequest.getRequestPayload();
//todo test newSDf08_withTime assertEquals(fromTime, exportToFileRequest.getFromTime());
SDf08 resultsSDf08 = sdf08Imdg.getFirstObjectBySQL(String.format("generationId = %s and id != null", exportToFileRequest.getSdfGroupId()));
RequestInfo resultRequestInfo = requestInfoImdg.getSingleObjectByID(baseRequest.getId());
assertNotNull(baseRequest);
assertNotNull(resultsSDf08);
assertNotNull(resultRequestInfo);
}
}

View file

@ -1,88 +0,0 @@
package ru.clearing.classes.statics.data.misc;
import ru.clearing.classes.ConstSerializable;
import ru.clearing.classes.objects.BusinessObject;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import ru.clearing.classes.ConstSerializable;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
/**
* Кросс курсы валют от ЦБ
*
* DB table: S_CROSS_RATE
**/
public class SCrossRate extends BusinessObject {
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
// (in parent) private Long id;
private LocalDate date;
private String currency;
private String currCode;
private BigDecimal faceValue;
private BigDecimal rate;
private BigDecimal unitRate;
private Instant generationTime;
private Long generationId;
public LocalDate getDate() {
return date;
}
public void setDate(LocalDate value) {
this.date=value;
}
public String getCurrency() {
return currency;
}
public void setCurrency(String value) {
this.currency=value;
}
public String getCurrCode() {
return currCode;
}
public void setCurrCode(String value) {
this.currCode=value;
}
public BigDecimal getFaceValue() {
return faceValue;
}
public void setFaceValue(BigDecimal value) {
this.faceValue=value;
}
public BigDecimal getRate() {
return rate;
}
public void setRate(BigDecimal value) {
this.rate=value;
}
public BigDecimal getUnitRate() {
return unitRate;
}
public void setUnitRate(BigDecimal value) {
this.unitRate=value;
}
public Instant getGenerationTime() {
return generationTime;
}
public void setGenerationTime(Instant value) {
this.generationTime=value;
}
public Long getGenerationId() {
return generationId;
}
public void setGenerationId(Long value) {
this.generationId=value;
}
}

View file

@ -54,13 +54,6 @@
<groupId>ru.spcex.platform</groupId>
<artifactId>platform-enum</artifactId>
</dependency>
<!-- special logging -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.0.1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>

View file

@ -33,7 +33,7 @@ public class KafkaConfig {
public KafkaConfig(ClearingServiceSettings settings) {
this.kafkaSettings = settings.getKafkaConsumer();
Integer gtwTimeout = settings.getSessionStage() == null ? null : settings.getSessionStage().getInspectionGatewayTimeout();
Integer gtwTimeout = settings.getSessionStage().getInspectionGatewayTimeout();
if (gtwTimeout != null) {
int maxPollIntervalMs = gtwTimeout * 1000 + 1000;
log.debug("setting max.poll.interval.ms {}", maxPollIntervalMs);

View file

@ -1,6 +1,5 @@
package ru.spcex.clearing.service;
import java.time.LocalTime;
import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.producer.Producer;
import org.slf4j.Logger;
@ -18,11 +17,7 @@ import ru.spcex.clearing.platform.messaging.domain.cud.clearing.SessionContinueE
import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonIdRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.AssetOperationApprovalRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.payment.PIClearingOutbondActionNewRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.registry.IdentificationFundsRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistryChangeRefundDateRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistryChangeStatusExtractRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistryReturnDepositRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistrySplitDepositActionRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.registry.*;
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.utilities.STradesImportedRequest;
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
@ -31,21 +26,13 @@ import ru.spcex.clearing.platform.messaging.service.Status;
import ru.spcex.clearing.service.executors.Sdf06Executor;
import ru.spcex.clearing.service.executors.Sdf10Executor;
import ru.spcex.clearing.service.payment.PaymentInstructionOutboundService;
import ru.spcex.clearing.session.stage.FinalMkrSession;
import ru.spcex.clearing.session.stage.IntermediateMkrSession;
import ru.spcex.clearing.session.stage.PrimaryAuctionB0Session;
import ru.spcex.clearing.session.stage.PrimaryAuctionBnSession;
import ru.spcex.clearing.session.stage.PrimaryAuctionT0Session;
import ru.spcex.clearing.session.stage.ReturnDepositSession;
import ru.spcex.clearing.session.stage.SecondaryAuctionT0Session;
import ru.spcex.clearing.session.stage.SessionManager;
import ru.spcex.clearing.session.stage.SessionTerminator;
import ru.spcex.clearing.session.stage.TaskType;
import ru.spcex.clearing.session.stage.*;
import ru.spcex.clearing.session.stage.impl.BalanceRevise;
import ru.spcex.clearing.statement.StatementServiceV2;
import ru.spcex.platform.enumeration.Task;
import ru.spcex.platform.utils.enumeration.IMessageResolver;
import ru.spcex.platform.utils.error.ValidationException;
import static ru.spcex.clearing.platform.messaging.domain.Consts.S_TRADES_IMPORTED;
@Service
@ -186,13 +173,7 @@ public class EventsReceiver extends QueueConsumer implements InitializingBean {
callback(LauncherCommandRequest.class)
.setConsumer(task -> {
LocalTime fromTime = null;
if (task != null
&& task.getRequestPayload() != null
&& task.getRequestPayload().getFromTime() != null) {
fromTime = task.getRequestPayload().getFromTime();
}
balanceRevise.submit(new ru.spcex.clearing.session.stage.Task<>(TaskType.StartRevise, fromTime));
balanceRevise.submit(new ru.spcex.clearing.session.stage.Task<>(TaskType.StartRevise, null));
})
.forDestination(Task.getAllBalance.topic(), callbacks::put);

View file

@ -1,16 +1,5 @@
package ru.spcex.clearing.service;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
@ -29,18 +18,13 @@ import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationListRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.CreateRegistryRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.registry.IdentificationFundsRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistryChangeRefundDateRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistryChangeStatusExtractRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistryReturnDepositRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistrySplitDepositActionRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.registry.*;
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
import ru.spcex.clearing.platform.messaging.service.Status;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.clearing.service.builder.PaymentInstructionBuilderV2;
import ru.spcex.clearing.service.integration.GatewayRequestCreator;
import ru.spcex.clearing.service.registry.AssetTBFProcessing;
import ru.spcex.clearing.service.registry.DmiService;
import ru.spcex.clearing.service.registry.RegistryManager;
import ru.spcex.clearing.service.schedule.TradingTimeService;
import ru.spcex.clearing.service.validation.ValidationStored;
@ -48,18 +32,7 @@ import ru.spcex.clearing.session.stage.impl.GatewayRequester;
import ru.spcex.clearing.session.stage.util.RegistryUtil;
import ru.spcex.clearing.util.security.UserRoleVerification;
import ru.spcex.clearing.util.services.RequestHelper;
import ru.spcex.platform.enumeration.CurrencyCode;
import ru.spcex.platform.enumeration.InOutDirection;
import ru.spcex.platform.enumeration.RegistryCapacity;
import ru.spcex.platform.enumeration.RegistryDesignation;
import ru.spcex.platform.enumeration.RegistryInstrumentType;
import ru.spcex.platform.enumeration.RegistryStatus;
import ru.spcex.platform.enumeration.RegistryTradingParams;
import ru.spcex.platform.enumeration.RegistryUnit;
import ru.spcex.platform.enumeration.Sender;
import ru.spcex.platform.enumeration.TradingClearingRegistryType;
import ru.spcex.platform.enumeration.TransactionStatus;
import ru.spcex.platform.enumeration.UserRole;
import ru.spcex.platform.enumeration.*;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.ImdgTransaction;
@ -71,6 +44,15 @@ import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.enumeration.IMessageResolver;
import ru.spcex.platform.utils.validation.IValidator;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
@Service
@ -93,7 +75,6 @@ public class RegistryService {
private final TradingTimeService trdTime;
private final NotificationSender notification;
private final KafkaSender kafkaSender;
private final DmiService diService;
private final IMessageResolver msgResolver;
private final RequestHelper reqHelp;
@ -109,7 +90,7 @@ public class RegistryService {
GatewayRequester gateway,
TradingTimeService tradingTimeService,
NotificationSender notification,
KafkaSender kafkaSender, DmiService diService, IMessageResolver msgResolver,
KafkaSender kafkaSender, IMessageResolver msgResolver,
RequestHelper reqHelp,
UserRoleVerification rights,
AssetTBFProcessing assets) {
@ -129,7 +110,6 @@ public class RegistryService {
this.trdTime = tradingTimeService;
this.notification = notification;
this.kafkaSender = kafkaSender;
this.diService = diService;
this.assets = assets;
this.gateway.setName("RgsService|DM*V");
this.msgResolver = msgResolver;
@ -361,10 +341,6 @@ public class RegistryService {
Instant now = Instant.now();
dmau.setUpdated(now);
asts.a__t().setUpdated(now);
Registry d_i = diService.createDmi(reqBalance, asts.a__t());
d_i.setRegistryStatus(RegistryStatus.OK.getKey());
registryImdg.insert(d_i);
log.debug("created {}.id={}", d_i.getRegistryCode(), d_i.getId());
//paymentInstruction
PaymentInstruction pmt = PaymentInstructionBuilderV2.builder(imdgProvider)
.registry(asts.a__b())

View file

@ -1,13 +1,5 @@
package ru.spcex.clearing.service.execution;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Instant;
import java.time.LocalDate;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import org.apache.kafka.clients.producer.Producer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -22,8 +14,6 @@ import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeCashFlow;
import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity;
import ru.clearing.classes.statics.data.misc.Listing;
import ru.clearing.classes.statics.data.misc.Market;
import ru.clearing.classes.statics.data.misc.SCrossRate;
import ru.clearing.classes.statics.data.misc.STrades;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.clearing.classes.statics.data.security.Security;
@ -37,25 +27,25 @@ import ru.spcex.clearing.platform.messaging.domain.cud.registry.DealRegisterNewR
import ru.spcex.clearing.platform.messaging.domain.cud.registry.ExecutionType;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.clearing.service.validation.ValidationStored;
import ru.spcex.platform.enumeration.CurrencyCode;
import ru.spcex.platform.enumeration.InstrumentType;
import ru.spcex.platform.enumeration.ObjectType;
import ru.spcex.platform.enumeration.Priority;
import ru.spcex.platform.enumeration.Section;
import ru.spcex.platform.enumeration.Side;
import ru.spcex.platform.enumeration.*;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.enumeration.IEnumId;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.enumeration.IMessageResolver;
import ru.spcex.platform.utils.enumeration.SimpleMessageResolver;
import ru.spcex.platform.utils.enumeration.*;
import ru.spcex.platform.utils.log.ExceptionUtils;
import ru.spcex.platform.utils.text.TextUtil;
import ru.spcex.platform.utils.time.TimeUtil;
import ru.spcex.platform.utils.validation.IValidator;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Instant;
import java.time.LocalDate;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
@Component
@ -68,8 +58,7 @@ public class ExecutionFondComponent {
private final Imdg<Listing> listingImdg;
private final Imdg<ClientCode> clientCodeImdg;
private final Imdg<FixedIncomeCashFlow> fixedIncomeCashFlowImdg;
private final Imdg<Market> marketImdg;
private final Imdg<SCrossRate> crossRateImdg;
private final Imdg<ru.clearing.classes.statics.data.misc.Market> marketImdg;
//fixme ждать ТЗ
Long tradeNum;
@ -91,9 +80,8 @@ public class ExecutionFondComponent {
this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class);
this.clientCodeImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClientCode, ClientCode.class);
this.marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, Market.class);
this.marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, ru.clearing.classes.statics.data.misc.Market.class);
this.fixedIncomeCashFlowImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeCashFlow, FixedIncomeCashFlow.class);
this.crossRateImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SCrossRate, SCrossRate.class);
this.valuation = settings.getTrade().getValuation(); //fixme
this.stradesValidator = stradesValidator;
this.kafkaSender = kafkaSender;
@ -208,7 +196,7 @@ public class ExecutionFondComponent {
eFond.setTradingClearingRegistryId(rgstr.getId());
//todo можем ли просто переложить sTrades.getClassCode() или все такие искать, одно и тоже же
Market market = marketImdg.getFirstObjectBySQL("code = '%s'".formatted(sTrades.getClassCode()));
ru.clearing.classes.statics.data.misc.Market market = marketImdg.getFirstObjectBySQL("code = '%s'".formatted(sTrades.getClassCode()));
eFond.setMarket(sTrades.getClassCode());
eFond.setPrice(sTrades.getPrice());
@ -263,25 +251,8 @@ public class ExecutionFondComponent {
nominalValue = safeBD(fixedIncome.getNominalValue());
}
{
BigDecimal crossRate;
String currency = fixedIncome.getNominalCurrency();
if (TextUtil.isEmpty(currency) || CurrencyCode.isRub(currency)) {
crossRate = BigDecimal.ONE;
} else {
ImdgPredicateBuilder crsRtpb = crossRateImdg.predicateBuilder();
ImdgPredicate crsRtePrdct = crsRtpb.and(
crsRtpb.equals("date", LocalDate.now()),
crsRtpb.equals("currency", currency)
);
SCrossRate crsRte = crossRateImdg.getFirstObjectByPredicate(crsRtePrdct);
if (crsRte != null) {
crossRate = safeBD(crsRte.getUnitRate());
} else {
crossRate = BigDecimal.ZERO;
}
}
settlementAmount = eFond.getQuantity()
.multiply(nominalValue.multiply(crossRate))
.multiply(nominalValue)
.multiply(price)
.divide(new BigDecimal(100), RoundingMode.HALF_UP)
.setScale(2, RoundingMode.HALF_UP);

View file

@ -139,19 +139,19 @@ public class Sdf08Executor extends AbstractExecutor<SDf08> {
Company company = searchCompany(sdf08.getDepoCode()); // validator.getStored(ValidationStored.Sdf08Company);
Long companyId = company == null ? null : company.getId(); // account == null сегда, т.к. кейс AccountNotPresent
if (companyId == null) {
SDf09 errSdf = createErrorSdf09(sdf08, generationIdForGroup, new EnumMessage(ClearingError.AccountNotFoundB, sdf08.getDepoCode()));
sdf09Imdg.insert(errSdf);
log.warn("account {} for sdf08.id={} not found. Can not send request for creation, cause company not found too", sdf08.getDepoCode(), sdf08.getId());
} else {
result.getAccountRequests().add(createAccountRequestPart(sdf08.getId(), sdf08.getDepoCode(), companyId));
log.info("account {} for sdf08.id={} not found - send request for creation", sdf08.getDepoCode(), sdf08.getId());
}
continue;
} else if (ClearingErrorInternal.AccountNotPresent.equals(error.map(EnumMessage::getSubject).orElse(null))) {
log.error("fatal error: resumed processing after generating accounts, but no account found for sdf01.id={}", sdf08.getId());
}
if (error.isPresent() && !ClearingError.SecurityNotFound.equals(error.get().getSubject())) {
log.error("sdf01.id={} error: {}", sdf08.getId(), messageResolver.resolve(error.get()));
SDf09 errSdf = createErrorSdf09(sdf08, generationIdForGroup, error.get());
sdf09Imdg.insert(errSdf);
//fixme инициировать = команда для другого сервиса? sdf02Imdg.insert(createErrorSdf02(sdf01, error.get(), generationIdForGroup));
// sdf02Imdg.insert(createErrorSdf02(sdf01, error.get(), generationIdForGroup));
continue;
}
stmt = createSdf08Statement(sdf08, account);
@ -198,8 +198,6 @@ public class Sdf08Executor extends AbstractExecutor<SDf08> {
} else {
stmt.setErrorCodeId(error.get().getSubject().getId()); // fixme ErrorText insert
stmt.setOperationStatus(OperationStatus.Rejected.getKey());
sdf09New.setResult("");
sdf09Imdg.update(sdf09New);
statementImdg.update(stmt);
}
} catch (Exception e) {
@ -304,19 +302,6 @@ public class Sdf08Executor extends AbstractExecutor<SDf08> {
return sDf09;
}
private SDf09 createErrorSdf09(SDf08 sdf08, Long generationIdForGroup, EnumMessage err) {
SDf09 sDf09 = new SDf09();
sDf09.setInDocument(sdf08.getOutDocument());
sDf09.setDepoCode(sdf08.getDepoCode());
sDf09.setQuantity(sdf08.getQuantity());
sDf09.setSecurityCode(sdf08.getSecurityCode());
sDf09.setClientName(sdf08.getClientName());
sDf09.setGenerationId(generationIdForGroup);
sDf09.setGenerationTime(Instant.now());
sDf09.setResult("");
return sDf09;
}
private Registry createRegistryByStatement(Statement statement, Company company, Account account) {
Registry rgs = new Registry();
rgs.setCompanyId(statement.getAddresseeId());

View file

@ -1,12 +1,5 @@
package ru.spcex.clearing.service.executors;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Optional;
import java.util.function.Function;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -17,7 +10,6 @@ import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.clearing.classes.statics.data.sdf.SDf20;
import ru.clearing.classes.statics.data.sdf.SDf21;
import ru.clearing.classes.statics.data.security.Security;
import ru.clearing.classes.statics.data.statement.Statement;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
@ -32,29 +24,28 @@ import ru.spcex.clearing.service.registry.AssetTBFProcessing;
import ru.spcex.clearing.service.registry.RegistryManager;
import ru.spcex.clearing.service.validation.ValidationStored;
import ru.spcex.clearing.session.stage.util.RegistryUtil;
import ru.spcex.platform.enumeration.InOutDirection;
import ru.spcex.platform.enumeration.InOutSDfType;
import ru.spcex.platform.enumeration.OperationCode;
import ru.spcex.platform.enumeration.OperationStatus;
import ru.spcex.platform.enumeration.RegistryDesignation;
import ru.spcex.platform.enumeration.RegistryStatus;
import ru.spcex.platform.enumeration.RegistryUnit;
import ru.spcex.platform.enumeration.Sender;
import ru.spcex.platform.enumeration.StatementType;
import ru.spcex.platform.enumeration.*;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.enumeration.IMessageResolver;
import ru.spcex.platform.utils.number.BigDecimalUtil;
import ru.spcex.platform.utils.validation.IValidator;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Optional;
import java.util.function.Function;
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
@Service
public class Sdf20Executor {
private final Logger log = LoggerFactory.getLogger(getClass());
private final Imdg<SDf20> sDf20Imdg;
private final Imdg<SDf21> sDf21Imdg;
private final Imdg<Registry> rgsImdg;
private final Imdg<Statement> stmtImdg;
private final Function<SDf20, IValidator> validation;
@ -71,7 +62,6 @@ public class Sdf20Executor {
this.sDf20Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf20, SDf20.class);
this.rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
this.stmtImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class);
this.sDf21Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf21, SDf21.class);
this.validation = validation;
this.msgRslv = msgRslv;
this.kafka = kafka;
@ -144,39 +134,27 @@ public class Sdf20Executor {
ds_i.setContract(sDf20.getInDocument());
ds_i.setRegistryStatus(RegistryStatus.OK.getKey());
ds_i.setUpdated(now);
as_t.setBalance(safeBD(as_t.getBalance()).add(quantity));
if (direction.equals(InOutDirection.in)) {
as_t.setCredit(safeBD(as_t.getCredit()).add(quantity.abs()));
} else {
as_t.setDebit(safeBD(as_t.getDebit()).add(quantity.abs()));
}
as_t.setCheckBalance(BigDecimalUtil.parseLeadingZeroes(sDf20.getCloseBalance()));
as_t.setUpdated(now);
rgsImdg.update(as_t);
rgsImdg.update(ds_i);
ImdgPredicateBuilder pb = sDf21Imdg.predicateBuilder();
SDf21 sdf21 = sDf21Imdg.getFirstObjectByPredicate(
pb.equals("transactionNumber", sDf20.getTransactionNumber())
);
if (sdf21 == null) {
as_t.setBalance(safeBD(as_t.getBalance()).add(quantity));
if (direction.equals(InOutDirection.in)) {
as_t.setCredit(safeBD(as_t.getCredit()).add(quantity.abs()));
} else {
as_t.setDebit(safeBD(as_t.getDebit()).add(quantity.abs()));
}
as_t.setCheckBalance(BigDecimalUtil.parseLeadingZeroes(sDf20.getCloseBalance()));
as_t.setUpdated(now);
rgsImdg.update(as_t);
assetsMng.process(assets.a__b(), assets.a__t(), assets.a__f(), BigDecimal.ZERO);
assetsMng.process(assets.a__b(), assets.a__t(), assets.a__f(), BigDecimal.ZERO);
//statement recfree in
//statement delfree out
Statement statement = createStatement(cmp.getId(), acc, quantity, sDf20.getId(), sDf20.getTransactionNumber(), security.getId());
stmtImdg.insert(statement);
log.debug("sdf20.id={}, processing as_t.id={}, as_f.id={}, as_b.id={}, ds_t.id={}. statement.id={}",
//statement recfree in
//statement delfree out
Statement statement = createStatement(cmp.getId(), acc, quantity, sDf20.getId(), sDf20.getTransactionNumber(), security.getId());
stmtImdg.insert(statement);
log.debug("sdf20.id={}, processing as_t.id={}, as_f.id={}, as_b.id={}, ds_t.id={}. statement.id={}",
sDf20.getId(),
assets.a__t().getId(), assets.a__f().getId(), assets.a__b().getId(),
ds_i.getId(),
statement.getId());
} else {
log.debug("sdf20.id={}, found sdf21.id={} by transactionNumber={}. skipping to gateway request",
sDf20.getId(),
sdf21.getId(),
sDf20.getTransactionNumber());
assetsMng.process(assets.a__b(), assets.a__t(), assets.a__f(), BigDecimal.ZERO);
}
//только при зачислении на 20 и 21 идет запрос в gateway в Торговую систему
if (InOutDirection.in.equals(direction)) {
Collection<AssetOperationRequest> requests = new ArrayList<>();

View file

@ -1,18 +1,5 @@
package ru.spcex.clearing.service.executors;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -52,28 +39,7 @@ import ru.spcex.clearing.service.schedule.TradingTimeService;
import ru.spcex.clearing.service.validation.ValidationStored;
import ru.spcex.clearing.session.stage.util.RegistryUtil;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.enumeration.BalanceDimension;
import ru.spcex.platform.enumeration.CurrencyCode;
import ru.spcex.platform.enumeration.InOutDirection;
import ru.spcex.platform.enumeration.InOutSDfType;
import ru.spcex.platform.enumeration.ObjectType;
import ru.spcex.platform.enumeration.OperationStatus;
import ru.spcex.platform.enumeration.Priority;
import ru.spcex.platform.enumeration.RegistryCapacity;
import ru.spcex.platform.enumeration.RegistryDesignation;
import ru.spcex.platform.enumeration.RegistryInstrumentType;
import ru.spcex.platform.enumeration.RegistryStatus;
import ru.spcex.platform.enumeration.RegistryTradingParams;
import ru.spcex.platform.enumeration.RegistryUnit;
import ru.spcex.platform.enumeration.Section;
import ru.spcex.platform.enumeration.Sender;
import ru.spcex.platform.enumeration.SessionStatus;
import ru.spcex.platform.enumeration.SessionType;
import ru.spcex.platform.enumeration.SpecifFlag;
import ru.spcex.platform.enumeration.StatementType;
import ru.spcex.platform.enumeration.Task;
import ru.spcex.platform.enumeration.WorkflowStatus;
import ru.spcex.platform.enumeration.*;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
@ -85,6 +51,21 @@ import ru.spcex.platform.utils.enumeration.IMessageResolver;
import ru.spcex.platform.utils.log.ExceptionUtils;
import ru.spcex.platform.utils.text.TextUtil;
import ru.spcex.platform.utils.validation.IValidator;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static ru.spcex.platform.enumeration.RegistryTradingParams.D__V;
import static ru.spcex.platform.enumeration.RegistryTradingParams.OM_T;
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
@ -346,7 +327,7 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
om_t.getId(),
registryD.getId());
sessionIsNeededFlag.set(true);
} else if (tm_tFound.isPresent() && safeBD(stmt.getAmount()).compareTo(safeBD(tm_tFound.get().getBalance())) == 0) {
} else if (tm_tFound.isPresent()) {
Optional<Registry> dm_xFound = RegistrySearch.builder(registryImdg)
.rgsCode(RegistryTradingParams.DM_X)
.companyId(company.getId())
@ -376,12 +357,6 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
dm_x.getId());
sessionIsNeededFlag.set(true);
}
} else if (tm_tFound.isPresent()) {
log.debug("skipping DM_X creation for stmt.id={} contract {}; " +
"TM_T.id={} TM_T.balance[{}] != Statement.amount[{}]",
stmt.getId(), stmt.getContract(),
tm_tFound.get().getId(), tm_tFound.get().getBalance(), stmt.getAmount()
);
}
}
stmt.setOperationStatus(OperationStatus.Executed.getKey());

View file

@ -1,8 +1,5 @@
package ru.spcex.clearing.service.registry;
import java.math.BigDecimal;
import java.time.Instant;
import java.util.Optional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@ -11,12 +8,7 @@ import ru.clearing.classes.statics.data.sdf.SDf57;
import ru.clearing.classes.statics.data.statement.Statement;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.session.stage.util.RegistryUtil;
import ru.spcex.platform.enumeration.InOutSDfType;
import ru.spcex.platform.enumeration.OperationStatus;
import ru.spcex.platform.enumeration.RegistryDesignation;
import ru.spcex.platform.enumeration.RegistryStatus;
import ru.spcex.platform.enumeration.RegistryTradingParams;
import ru.spcex.platform.enumeration.RegistryUnit;
import ru.spcex.platform.enumeration.*;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
@ -25,6 +17,10 @@ import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
import ru.spcex.platform.utils.log.ExceptionUtils;
import ru.spcex.platform.utils.number.BigDecimalUtil;
import java.math.BigDecimal;
import java.time.Instant;
import java.util.Optional;
@Component
public class DmiService {
private final Logger log = LoggerFactory.getLogger(getClass());
@ -178,7 +174,7 @@ public class DmiService {
return Optional.ofNullable(d__i);
}
public Optional<Registry> createDmi(Long tcrId,
private Optional<Registry> createDmi(Long tcrId,
String securitySymbol,
BigDecimal summ) {
RegistryTradingParams rgsCde = RegistryTradingParams.AM_T;
@ -194,10 +190,6 @@ public class DmiService {
tcrId, securitySymbol);
return Optional.empty();
}
return Optional.of(createDmi(summ, am_t));
}
public Registry createDmi(BigDecimal summ, Registry am_t) {
Registry rgsD = am_t.clone();
RegistryManager.zeroState(rgsD);
rgsD.setOpenBalance(BigDecimal.ZERO);
@ -208,6 +200,6 @@ public class DmiService {
rgsD.setBalance(summ);
rgsD.setRegistryStatus(RegistryStatus.PROC.getKey());
return rgsD;
return Optional.of(rgsD);
}
}

View file

@ -1,8 +1,5 @@
package ru.spcex.clearing.service.validation;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Optional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.clearing.classes.statics.data.account.Account;
@ -22,6 +19,10 @@ import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.text.TextUtil;
import ru.spcex.platform.utils.validation.IValidationRule;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Optional;
public enum Sdf21ValidationRule implements IValidationRule<ImdgValidationContext<SDf21>> {
AccountPresent() {
@ -57,9 +58,9 @@ public enum Sdf21ValidationRule implements IValidationRule<ImdgValidationContext
} else if (OperationCode.RECFREE.equalsByKey(sdf21.getOperationCode())) {
prdct = pb.and(prdct, pb.greatEqual("balance", BigDecimal.ZERO));
}
Registry ds_i = rgsImdg.getFirstObjectByPredicate(prdct);
if (ds_i != null) {
log.debug("sdf21.id={} found DS*I.id={}", sdf21.getId(), ds_i.getId());
Registry ds_t = rgsImdg.getFirstObjectByPredicate(prdct);
if (ds_t != null) {
log.debug("sdf21.id={} found DS*T.id={}", sdf21.getId(), ds_t.getId());
return of(ClearingError.SuchRecordAlreadyExists);
}
return empty();

View file

@ -1,12 +1,5 @@
package ru.spcex.clearing.session.stage.impl;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.temporal.ChronoUnit;
import java.util.Collection;
import java.util.Objects;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -26,16 +19,7 @@ import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.clearing.session.stage.ISessionStage;
import ru.spcex.clearing.session.stage.StageResult;
import ru.spcex.clearing.session.stage.Task;
import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.enumeration.InOutSDfType;
import ru.spcex.platform.enumeration.ObjectType;
import ru.spcex.platform.enumeration.OperationStatus;
import ru.spcex.platform.enumeration.Priority;
import ru.spcex.platform.enumeration.RegistryDesignation;
import ru.spcex.platform.enumeration.RegistryInstrumentType;
import ru.spcex.platform.enumeration.RegistryTradingParams;
import ru.spcex.platform.enumeration.RegistryUnit;
import ru.spcex.platform.enumeration.StatementType;
import ru.spcex.platform.enumeration.*;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgId;
import ru.spcex.platform.imdg.api.ImdgProvider;
@ -44,7 +28,12 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.StatementRevisePredicate;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.time.TimeUtil;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Collection;
import java.util.Objects;
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
@Service
@ -75,11 +64,7 @@ public class BalanceRevise implements ISessionStage {
public StageResult<?> submit(Task<?> task) {
switch (task.getTaskType()) {
case StartRevise, FormingPaymentInstruction -> {
LocalTime fromTime = null;
if (task.getData() instanceof LocalTime) {
fromTime = (LocalTime) task.getData();
}
return sendSdfs(fromTime);
return sendSdfs();
}
case ContinueRevise -> {
return revise(); // основная сверка
@ -95,23 +80,10 @@ public class BalanceRevise implements ISessionStage {
}
private StageResult<?> sendSdfs(LocalTime fromTime) {
private StageResult<?> sendSdfs() {
Collection<Long> currencies = currencyImdg.projectSingleAttribute("id");
Long millis = null;
if (fromTime != null) {
log.debug("sendSdf, parameter fromTime={}", fromTime);
Instant fromInstant = TimeUtil.localDateTimeToInstant(LocalDateTime.of(LocalDate.now(), fromTime));
millis = fromInstant.toEpochMilli();
} else {
Statement statement = statementImdg.aggregateByMax("created", StatementRevisePredicate.get(statementImdg, currencies));
if (statement != null) {
log.debug("sendSdf, parameter fromTime not set, use max(statement.created)={}", statement.getCreated());
millis = statement.getCreated().toEpochMilli();
} else {
log.debug("sendSdf, parameter fromTime not set, and statement's not found.");
}
}
newSDf56(millis);
Statement statement = statementImdg.aggregateByMax("created", StatementRevisePredicate.get(statementImdg, currencies));
newSDf56(statement);
return new StageResult<>(null, true);
}
@ -136,7 +108,7 @@ public class BalanceRevise implements ISessionStage {
}
private StageResult<?> reviseStage1() {
String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.A__T).build();
String sql = RegistryCodeSqlBuilder.getInstance(ru.spcex.platform.enumeration.RegistryTradingParams.A__T).build();
Collection<Registry> regsAT = registryImdg.getCollectionObjectsBySQL(sql);
log.trace("Select {} registry's by query \"{}\" for revision step 1", regsAT.size(), sql);
@ -203,13 +175,13 @@ public class BalanceRevise implements ISessionStage {
}
private void newSDf56(Long millis) {
private void newSDf56(Statement statement) {
log.debug("creating sdf56");
SDf56 sDf56 = new SDf56();
sDf56.setNumber(idGenerator.nextId().toString());
Instant now = Instant.now();
String startTime = String.valueOf(millis != null ?
millis : now.minus(1, ChronoUnit.DAYS).toEpochMilli());
String startTime = String.valueOf(statement != null ?
statement.getCreated().toEpochMilli() : now.minus(1, ChronoUnit.DAYS).toEpochMilli());
sDf56.setStart_datetime(startTime);
sDf56.setEnd_datetime(String.valueOf(now.toEpochMilli()));
sDf56.setGenerationTime(now);

View file

@ -1,146 +0,0 @@
package ru.spcex.clearing.session.stage.impl;
import org.apache.kafka.clients.consumer.Consumer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import ru.spcex.clearing.config.element.ClearingServiceSettings;
import ru.spcex.clearing.config.element.SessionStageSettings;
import ru.spcex.clearing.error.ClearingError;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationListRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.AssetOperationApprovalRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.SingleAssetResponse;
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.log.ExceptionUtils;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.function.Supplier;
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Component
public class GatewayBatchRequester extends QueueConsumer implements InitializingBean {
private final Logger log = LoggerFactory.getLogger(getClass());
private final KafkaSender kafkaSender;
private final Integer GATEWAY_TIMEOUT;
private String name;
private final Lock gatewayLock = new ReentrantLock();
private final Condition gatewayCondition = gatewayLock.newCondition();
private Long kafkaReqId = null;
private List<SingleAssetResponse> batchResponses = null;
@Autowired
public GatewayBatchRequester(@Qualifier("kafkaConsumerGateway") Supplier<Consumer<String, Object>> consumer,
ClearingServiceSettings settings,
KafkaSender kafkaSender) {
super(consumer.get());
this.kafkaSender = kafkaSender;
SessionStageSettings sessionSettings = settings.getSessionStage();
this.GATEWAY_TIMEOUT = sessionSettings != null ? sessionSettings.getInspectionGatewayTimeout() : 10;
}
@Override
public void afterPropertiesSet() throws Exception {
callback(AssetOperationApprovalRequest.class)
.setConsumer(this::receiveGatewayAnswer)
.forDestination(Consts.ASSET_OPERATION_APPROVAL, callbacks::put);
init();
}
public Optional<List<SingleAssetResponse>> gatewayRequestAndWaitBatch(Collection<AssetOperationRequest> requests) {
if (requests == null || requests.size() == 0) {
return Optional.of(Collections.emptyList());
}
List<SingleAssetResponse> responseReceived = null;
Long kafkaReqLogging = null;
gatewayLock.lock();
try {
if (this.kafkaReqId != null) {
log.error("{}.kafkaReqId={} already sent to gateway", getName(), this.kafkaReqId);
throw new IllegalStateException(" forbid reusing GatewayRequester instance in multiple threads");
}
//send Request
AssetOperationListRequest assetOperationListRequest = new AssetOperationListRequest();
assetOperationListRequest.setAssetOperationRequests(requests);
this.kafkaReqId = kafkaSender.sendRequestToQueue(Consts.ASSET_OPERATION, assetOperationListRequest);
log.debug("sent {}.id={} to gateway", getName(), this.kafkaReqId);
boolean gatewayReceived = gatewayCondition.await(GATEWAY_TIMEOUT, TimeUnit.SECONDS);
kafkaReqLogging = this.kafkaReqId;
if (gatewayReceived) {
responseReceived = batchResponses;
batchResponses = null;
} else {
kafkaReqId = null;
}
} catch (InterruptedException e) {
log.error(ExceptionUtils.getStackTrace(e));
} finally {
gatewayLock.unlock();
}
if (responseReceived != null) {
log.debug("{}.id={} answer from gateway received. size: {}", getName(), kafkaReqLogging, responseReceived.size());
return Optional.of(responseReceived);
} else {
log.error("{}.id={} answer from gateway not received.", getName(), kafkaReqLogging);
return Optional.empty();
}
}
private void receiveGatewayAnswer(BaseRequest<AssetOperationApprovalRequest> sysReq) {
AssetOperationApprovalRequest requestPayload = sysReq.getRequestPayload();
Long initialReqId = requestPayload.getInitialRequestId();
log.trace("gateway answer received, BaseRequest.id={} initialRequestId={}", sysReq.getId(), initialReqId);
List<SingleAssetResponse> approvals = requestPayload.getApprovals();
if (approvals == null) {
log.trace("gateway BaseRequest.id={} initialReqId={} approvals null", sysReq.getId(), initialReqId);
return;
}
gatewayLock.lock();
try {
if (kafkaReqId == null) {
log.trace("gateway BaseRequest.id={} initialReqId={} currently not waiting for {} answer", sysReq.getId(), initialReqId, getName());
return;
}
if (Objects.equals(this.kafkaReqId, initialReqId)) {
log.trace("gateway BaseRequest.id={} answer found for {}.id={}", sysReq.getId(), getName(), initialReqId);
this.kafkaReqId = null;
this.batchResponses = requestPayload.getApprovals() != null ? requestPayload.getApprovals() : Collections.emptyList();
gatewayCondition.signal();
}
} finally {
gatewayLock.unlock();
}
}
public String getName() {
return name != null ? name : "entity";
}
public void setName(String name) {
this.name = name;
}
public static EnumMessage mapError(Optional<Boolean> gtwRsp) {
if (gtwRsp.isEmpty()) {
return new EnumMessage(ClearingError.GatewayTimeout);
} else if (!gtwRsp.get()) {
return new EnumMessage(ClearingError.GatewayNotApproved);
} else throw new IllegalArgumentException("gateway response was OK. cannot create error message");
}
}

View file

@ -6,9 +6,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import ru.clearing.classes.statics.data.execution.ExecutionCommon;
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.clearing.classes.statics.data.misc.Session;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
@ -25,7 +22,6 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import java.time.Instant;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
@ -40,8 +36,6 @@ public class InclusionObligations implements ISessionStage {
private ImdgId idGenerator;
private Imdg<Registry> registryImdg;
private Imdg<Session> sessionImdg;
private final Imdg<ExecutionDeposit> executionDepositImdg;
private final Imdg<ExecutionFond> executionFondImdg;
private KafkaSender kafkaSender;
private final List<ImdgPredicate> registryConditions = new ArrayList<>();
private SessionType sessionType;
@ -53,8 +47,6 @@ public class InclusionObligations implements ISessionStage {
this.idGenerator = imdgProvider.getImdgIdGenerator();
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
this.executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class);
this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
this.rgsPb = registryImdg.predicateBuilder();
}
@ -122,42 +114,12 @@ public class InclusionObligations implements ISessionStage {
registry.setSessionId(sessionId);
obtainSessionType(sessionId).ifPresent(st -> registry.setSessionType(st.getKey()));
registryImdg.update(registry);
updateExecutions(sessionId, entrySet.getKey());
}
}
return new StageResult(null, true);
}
@SuppressWarnings("unchecked")
private <T extends ExecutionCommon> void updateExecutions(Long sessionId, Long rgsGroupId) {
Instant now = Instant.now();
SessionType ssnTpe = obtainSessionType(sessionId).orElse(null);
if (ssnTpe == null || sessionId == null) {
log.debug("will not update executions#sessionId - couldn't determine session type");
return;
}
Imdg<T> execImdg;
switch (ssnTpe) {
case MEDM, FINL, XDEP -> execImdg = (Imdg<T>) executionDepositImdg;
case IPO0, IPOB, TRDT, IPOT -> execImdg = (Imdg<T>) executionFondImdg;
default -> execImdg = null;
}
if (execImdg == null) {
log.warn("couldn't define Execution Type for session {}. Will not update executions#sessionId",
sessionType);
return;
}
ImdgPredicateBuilder pb = execImdg.predicateBuilder();
ImdgPredicate prdct = pb.equals("exchangeExecutionId", rgsGroupId);
Collection<T> execs = execImdg.getCollectionObjectsByPredicate(prdct);
execs.forEach(e -> {
e.setUpdated(now);
e.setSessionId(sessionId);
execImdg.update(e);
});
}
private Optional<SessionType> obtainSessionType(Long sessionId) {
if (this.sessionType != null) {
return Optional.of(this.sessionType);

View file

@ -1,56 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_PATH" value="./log" />
<property name="FILE_NAME" value="clearing-service" />
<property name="CONSOLE_LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n" />
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>utf-8</charset>
<charset>UTF-8</charset>
<pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- first FILE TEXT appender -->
<appender name="TEXT_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-text.log</file>
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${FILE_LOG_PATTERN}</Pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-text.%d{yyyy-MM-dd}.%i.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<!-- second FILE JSON appender -->
<appender name="JSON_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-json.log</file>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-json.%d{yyyy-MM-dd}.%i.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<root level="info">
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./logs/clearing-service.log</file>
<encoder>
<charset>UTF-8</charset>
<pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>
../logs/clearing-service.%i.log
</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>500MB</maxFileSize>
</triggeringPolicy>
</appender>
<root level="warn">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<logger name="ru.spcex" level="debug" additivity="false">
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="ru.spcex.clearing" level="trace" additivity="false">
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="ru.spcex.clearing.service.execution" level="info" additivity="false">
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="ru.spcex.clearing.session.stage.impl.GatewayRequester" level="debug" additivity="false">
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</logger>
</configuration>

View file

@ -48,12 +48,6 @@
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- special logging -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>

View file

@ -1,56 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_PATH" value="./log" />
<property name="FILE_NAME" value="company-service" />
<property name="CONSOLE_LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n" />
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n</Pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./logs/company-service.log</file>
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<!-- first FILE TEXT appender -->
<appender name="TEXT_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-text.log</file>
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${FILE_LOG_PATTERN}</Pattern>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n</Pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-text.%d{yyyy-MM-dd}.%i.gz
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>
./logs/company-service.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<!-- second FILE JSON appender -->
<appender name="JSON_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-json.log</file>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-json.%d{yyyy-MM-dd}.%i.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>500MB</maxFileSize>
</triggeringPolicy>
</appender>
<root level="info">
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
</root>
<root level="warn">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<logger name="ru.spcex" level="debug" additivity="false">
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</logger>
</configuration>

View file

@ -1,4 +1,4 @@
-- DB version: 3.10.0.74
-- DB version: 3.9.0.68
-- DATA version: 3.9.0.68
@ -184,8 +184,6 @@ INSERT INTO COMPANY_ROLE_DICTIONARY(ID, CODE, NAME) values (7, 'ODEP', 'Учас
INSERT INTO CURRENCY_CODE_DICTIONARY(ID, CODE, NAME) values (643, 'RUB', 'Российский рубль') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO CURRENCY_CODE_DICTIONARY(ID, CODE, NAME) values (840, 'USD', 'Доллар США') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO INSTRUMENT_TYPE_DICTIONARY(ID, CODE, NAME) values (1, 'RATE', 'Инструмент Денежного рынка') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO INSTRUMENT_TYPE_DICTIONARY(ID, CODE, NAME) values (2, 'CRNC', 'Валюта') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
@ -314,6 +312,78 @@ INSERT INTO REGISTRY_UNIT_DICTIONARY(ID, CODE, NAME) values (5, 'I', 'Списа
INSERT INTO REGISTRY_UNIT_DICTIONARY(ID, CODE, NAME) values (7, 'V', 'Выписка') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (1, 'AMAT', 'Денежные средства Участника клиринга, зарезервированные на торги') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (2, 'AMAF', 'Денежные средства - свободные') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (3, 'AMAB', 'Денежные средства - блокированные') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (4, 'TMAT', 'Требования по деньгам') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (5, 'OSAT', 'Обязательства по бумагам') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (6, 'OMAT', 'Обязательства по деньгам') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (7, 'TSAT', 'Требования по бумагам') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (8, 'CMAT', 'Рассчитанные требования по деньгам') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (9, 'LSAT', 'Рассчитанные обязательства по бумагам') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (10, 'LMAT', 'Рассчитанные обязательства по деньгам') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (11, 'CSAT', 'Рассчитанные требования по бумагам') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (12, 'AMBT', 'Денежные средства Участника клиринга, зарезервированные на торги клиенты') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (13, 'AMBF', 'Денежные средства клиента - свободные') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (14, 'AMBB', 'Денежные средства клиента - блокированные') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (15, 'TMBT', 'Требования по деньгам (кл)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (16, 'OSBT', 'Обязательства по бумагам (кл)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (17, 'OMBT', 'Обязательства по деньгам (кл)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (18, 'TSBT', 'Требования по бумагам (кл)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (19, 'CMBT', 'Рассчитанные требования по деньгам (кл)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (20, 'LSBT', 'Рассчитанные обязательства по бумагам (кл)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (21, 'LMBT', 'Рассчитанные обязательства по деньгам (кл)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (22, 'CSBT', 'Рассчитанные требования по бумагам (кл)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (23, 'DMAT', 'Возврат депозита') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (24, 'DMBT', 'Возврат депозита (кл)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (25, 'ASAT', 'Ценные бумаги Участника клиринга свои') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (26, 'ASAF', 'Ценные бумаги - свободные') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (27, 'ASAB', 'Ценные бумаги - блокированные') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (28, 'DMAX', 'Возврат инициатору') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (29, 'DMBX', 'Возврат инициатору (кл)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (30, 'DMAU', 'Денежные средства - невыясненные') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (31, 'DMAV', 'Треб. выписки') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (32, 'ASZT', 'Ценные бумаги для размещения/выкупа') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (33, 'ASBT', 'Ценные бумаги Участника клиринга клиенты') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (34, 'ASCT', 'Ценные бумаги Участника клиринга клиенты-нерезиденты') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (35, 'AMCT', 'Денежные средства Участника клиринга, зарезервированные на торги клиенты') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (36, 'ASXT', 'Ценные бумаги Участника клиринга ДУ') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_STATUS_DICTIONARY(ID, CODE, NAME) values (1, 'OK', 'Рассчитано') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO REGISTRY_STATUS_DICTIONARY(ID, CODE, NAME) values (2, 'UNCV', 'Не исполнено') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
@ -438,8 +508,6 @@ INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (28, 'CHDF', 'Проверк
INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (29, 'CCLR', 'Завершение неудачных клиринговых сессий') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (30, 'CBRR', 'Загрузка кросс-курсов') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO TASK_STATUS_DICTIONARY(ID, CODE, NAME) values (1, 'ACTV', 'Активна') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO TASK_STATUS_DICTIONARY(ID, CODE, NAME) values (2, 'BLKD', 'Не активна') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;

View file

@ -1,4 +1,4 @@
-- DB version: 3.10.0.74
-- DB version: 3.9.0.69
-- DATA version: 3.9.0.68
@ -6,7 +6,7 @@
/* Business objects */
INSERT INTO COMPANY(ID, FULL_NAME, SHORT_NAME, TRADING_CODE, CLEARING_CODE, WORKFLOW_STATUS) values (1, 'АО Санкт-Петербургская Валютная Биржа', 'СПВБ', '', '', 'ACTV') ON CONFLICT (ID) DO UPDATE SET FULL_NAME = EXCLUDED.FULL_NAME, SHORT_NAME = EXCLUDED.SHORT_NAME, TRADING_CODE = EXCLUDED.TRADING_CODE, CLEARING_CODE = EXCLUDED.CLEARING_CODE, WORKFLOW_STATUS = EXCLUDED.WORKFLOW_STATUS;
INSERT INTO COMPANY(ID, FULL_NAME, SHORT_NAME, TRADING_CODE, CLEARING_CODE, WORKFLOW_STATUS) values (1, 'АО Санкт-Петербургская Валютная Биржа', 'СПВБ', '001', '001', 'ACTV') ON CONFLICT (ID) DO UPDATE SET FULL_NAME = EXCLUDED.FULL_NAME, SHORT_NAME = EXCLUDED.SHORT_NAME, TRADING_CODE = EXCLUDED.TRADING_CODE, CLEARING_CODE = EXCLUDED.CLEARING_CODE, WORKFLOW_STATUS = EXCLUDED.WORKFLOW_STATUS;
INSERT INTO COMPANY(ID, FULL_NAME, SHORT_NAME, TRADING_CODE, CLEARING_CODE, WORKFLOW_STATUS) values (2, 'ЗАО «Петербургский Расчетный Центр»', 'ПРЦ', '', '', 'ACTV') ON CONFLICT (ID) DO UPDATE SET FULL_NAME = EXCLUDED.FULL_NAME, SHORT_NAME = EXCLUDED.SHORT_NAME, TRADING_CODE = EXCLUDED.TRADING_CODE, CLEARING_CODE = EXCLUDED.CLEARING_CODE, WORKFLOW_STATUS = EXCLUDED.WORKFLOW_STATUS;
@ -20,14 +20,154 @@ INSERT INTO COMPANY_SYMBOLS(ID, COMPANY_ID, COMPANY_SYMBOL, COMPANY_SYMBOL_VALUE
INSERT INTO CURRENCY(ID, CURRENCY_CODE) values (643, 'RUB') ON CONFLICT (ID) DO UPDATE SET CURRENCY_CODE = EXCLUDED.CURRENCY_CODE;
INSERT INTO CURRENCY(ID, CURRENCY_CODE) values (840, 'USD') ON CONFLICT (ID) DO UPDATE SET CURRENCY_CODE = EXCLUDED.CURRENCY_CODE;
INSERT INTO SECURITY(ID, INSTRUMENT_TYPE, SHORT_NAME, FULL_NAME, SECURITY_SYMBOL, WORKFLOW_STATUS) values (643, 'CRNC', 'RUB', 'Российский рубль', 'RUB', 'ACTV') ON CONFLICT (ID) DO UPDATE SET INSTRUMENT_TYPE = EXCLUDED.INSTRUMENT_TYPE, SHORT_NAME = EXCLUDED.SHORT_NAME, FULL_NAME = EXCLUDED.FULL_NAME, SECURITY_SYMBOL = EXCLUDED.SECURITY_SYMBOL, WORKFLOW_STATUS = EXCLUDED.WORKFLOW_STATUS;
INSERT INTO SECURITY(ID, INSTRUMENT_TYPE, SHORT_NAME, FULL_NAME, SECURITY_SYMBOL, WORKFLOW_STATUS) values (840, 'CRNC', 'USD', 'Доллар США', 'USD', 'ACTV') ON CONFLICT (ID) DO UPDATE SET INSTRUMENT_TYPE = EXCLUDED.INSTRUMENT_TYPE, SHORT_NAME = EXCLUDED.SHORT_NAME, FULL_NAME = EXCLUDED.FULL_NAME, SECURITY_SYMBOL = EXCLUDED.SECURITY_SYMBOL, WORKFLOW_STATUS = EXCLUDED.WORKFLOW_STATUS;
INSERT INTO SECURITY(INSTRUMENT_TYPE, SHORT_NAME, FULL_NAME, SECURITY_SYMBOL, WORKFLOW_STATUS, ID) values ('CRNC', 'RUB', 'Российский рубль', 'RUB', 'ACTV', 643) ON CONFLICT (ID) DO UPDATE SET INSTRUMENT_TYPE = EXCLUDED.INSTRUMENT_TYPE, SHORT_NAME = EXCLUDED.SHORT_NAME, FULL_NAME = EXCLUDED.FULL_NAME, SECURITY_SYMBOL = EXCLUDED.SECURITY_SYMBOL, WORKFLOW_STATUS = EXCLUDED.WORKFLOW_STATUS;
INSERT INTO ACCOUNT(ID, COMPANY_ID, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN) values (1, 1, '30414810300000006000', 'TRAN', 'ACTV', 'ALWD') ON CONFLICT (ID) DO UPDATE SET COMPANY_ID = EXCLUDED.COMPANY_ID, ACCOUNT = EXCLUDED.ACCOUNT, ACCOUNT_TYPE = EXCLUDED.ACCOUNT_TYPE, STATUS = EXCLUDED.STATUS, PROCESSING_SIGN = EXCLUDED.PROCESSING_SIGN;
INSERT INTO ACCOUNT(ID, COMPANY_ID, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN) values (2, 1, '30414810600000007000', 'ANLT', 'ACTV', 'ALWD') ON CONFLICT (ID) DO UPDATE SET COMPANY_ID = EXCLUDED.COMPANY_ID, ACCOUNT = EXCLUDED.ACCOUNT, ACCOUNT_TYPE = EXCLUDED.ACCOUNT_TYPE, STATUS = EXCLUDED.STATUS, PROCESSING_SIGN = EXCLUDED.PROCESSING_SIGN;
INSERT INTO ACCOUNT(ID, COMPANY_ID, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN) values (3, 1, '700100000AT0', 'DTRN', 'ACTV', 'ALWD') ON CONFLICT (ID) DO UPDATE SET COMPANY_ID = EXCLUDED.COMPANY_ID, ACCOUNT = EXCLUDED.ACCOUNT, ACCOUNT_TYPE = EXCLUDED.ACCOUNT_TYPE, STATUS = EXCLUDED.STATUS, PROCESSING_SIGN = EXCLUDED.PROCESSING_SIGN;
INSERT INTO ACCOUNT(ID, COMPANY_ID, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN) values (3, 1, 'SPCEX', 'DTRN', 'ACTV', 'ALWD') ON CONFLICT (ID) DO UPDATE SET COMPANY_ID = EXCLUDED.COMPANY_ID, ACCOUNT = EXCLUDED.ACCOUNT, ACCOUNT_TYPE = EXCLUDED.ACCOUNT_TYPE, STATUS = EXCLUDED.STATUS, PROCESSING_SIGN = EXCLUDED.PROCESSING_SIGN;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (1, 'SCND', 'FOND', 'RUB', 'UESC', 'Режим непрерывных торгов', 1, 'Режим непрерывных торгов: Обыкновенные акции') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (2, 'SCND', 'FOND', 'RUB', 'NESC', 'Режим переговорных сделок (РПС)', 1, 'Режим переговорных сделок (РПС): Обыкновенные акции') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (3, 'SCND', 'FOND', 'RUB', 'DESC', 'Дискретный аукцион', 1, 'Дискретный аукцион: Обыкновенные акции') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (4, 'PRMR', 'FOND', 'RUB', 'AESC', 'Размещение: акции (аукцион по цене)', 1, 'Размещение: акции (аукцион по цене): Обыкновенные акции') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (5, 'PRMR', 'FOND', 'RUB', 'WESC', 'Размещение: адресные заявки (подписка)', 1, 'Размещение: адресные заявки (подписка): Обыкновенные акции') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (6, 'SCND', 'FOND', 'RUB', 'UEPC', 'Режим непрерывных торгов', 1, 'Режим непрерывных торгов: Привилегированные акции') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (7, 'SCND', 'FOND', 'RUB', 'NEPC', 'Режим переговорных сделок (РПС)', 1, 'Режим переговорных сделок (РПС): Привилегированные акции') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (8, 'SCND', 'FOND', 'RUB', 'DEPC', 'Дискретный аукцион', 1, 'Дискретный аукцион: Привилегированные акции') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (9, 'PRMR', 'FOND', 'RUB', 'AEPC', 'Размещение: акции (аукцион по цене)', 1, 'Размещение: акции (аукцион по цене): Привилегированные акции') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (10, 'PRMR', 'FOND', 'RUB', 'WEPC', 'Размещение: адресные заявки (подписка)', 1, 'Размещение: адресные заявки (подписка): Привилегированные акции') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (11, 'PRMR', 'FOND', 'RUB', 'ABVC', 'Размещение: Аукцион по цене', 1, 'Размещение: Аукцион по цене: Купонные облигации с переменным купоном') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (12, 'PRMR', 'FOND', 'RUB', 'KBVC', 'Размещение: Аукцион по ставке', 1, 'Размещение: Аукцион по ставке: Купонные облигации с переменным купоном') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (13, 'SCND', 'FOND', 'RUB', 'UBVC', 'Режим непрерывных торгов', 1, 'Режим непрерывных торгов: Купонные облигации с переменным купоном') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (14, 'SCND', 'FOND', 'RUB', 'NBVC', 'Режим переговорных сделок (РПС)', 1, 'Режим переговорных сделок (РПС): Купонные облигации с переменным купоном') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (15, 'SCND', 'FOND', 'RUB', 'DBVC', 'Дискретный аукцион', 1, 'Дискретный аукцион: Купонные облигации с переменным купоном') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (16, 'PRMR', 'FOND', 'RUB', 'WBVC', 'Размещение: адресные заявки (подписка)', 1, 'Размещение: адресные заявки (подписка): Купонные облигации с переменным купоном') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (17, 'PRMR', 'FOND', 'RUB', 'ABFC', 'Размещение: Аукцион по цене', 1, 'Размещение: Аукцион по цене: Купонные облигации с постоянным купоном') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (18, 'PRMR', 'FOND', 'RUB', 'KBFC', 'Размещение: Аукцион по ставке', 1, 'Размещение: Аукцион по ставке: Купонные облигации с постоянным купоном') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (19, 'SCND', 'FOND', 'RUB', 'UBFC', 'Режим непрерывных торгов', 1, 'Режим непрерывных торгов: Купонные облигации с постоянным купоном') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (20, 'SCND', 'FOND', 'RUB', 'NBFC', 'Режим переговорных сделок (РПС)', 1, 'Режим переговорных сделок (РПС): Купонные облигации с постоянным купоном') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (21, 'SCND', 'FOND', 'RUB', 'DBFC', 'Дискретный аукцион', 1, 'Дискретный аукцион: Купонные облигации с постоянным купоном') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (22, 'PRMR', 'FOND', 'RUB', 'WBFC', 'Размещение: адресные заявки (подписка)', 1, 'Размещение: адресные заявки (подписка): Купонные облигации с постоянным купоном') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (23, 'PRMR', 'FOND', 'RUB', 'ABIC', 'Размещение: Аукцион по цене', 1, 'Размещение: Аукцион по цене: Облигации с индексированным номиналом') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (24, 'PRMR', 'FOND', 'RUB', 'KBIC', 'Размещение: Аукцион по ставке', 1, 'Размещение: Аукцион по ставке: Облигации с индексированным номиналом') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (25, 'SCND', 'FOND', 'RUB', 'UBIC', 'Режим непрерывных торгов', 1, 'Режим непрерывных торгов: Облигации с индексированным номиналом') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (26, 'SCND', 'FOND', 'RUB', 'NBIC', 'Режим переговорных сделок (РПС)', 1, 'Режим переговорных сделок (РПС): Облигации с индексированным номиналом') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (27, 'SCND', 'FOND', 'RUB', 'DBIC', 'Дискретный аукцион', 1, 'Дискретный аукцион: Облигации с индексированным номиналом') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (28, 'PRMR', 'FOND', 'RUB', 'WBIC', 'Размещение: адресные заявки (подписка)', 1, 'Размещение: адресные заявки (подписка): Облигации с индексированным номиналом') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (29, 'PRMR', 'FOND', 'RUB', 'ABMC', 'Размещение: Аукцион по цене', 1, 'Размещение: Аукцион по цене: Облигации с амортизацией долга') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (30, 'PRMR', 'FOND', 'RUB', 'KBMC', 'Размещение: Аукцион по ставке', 1, 'Размещение: Аукцион по ставке: Облигации с амортизацией долга') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (31, 'SCND', 'FOND', 'RUB', 'UBMC', 'Режим непрерывных торгов', 1, 'Режим непрерывных торгов: Облигации с амортизацией долга') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (32, 'SCND', 'FOND', 'RUB', 'NBMC', 'Режим переговорных сделок (РПС)', 1, 'Режим переговорных сделок (РПС): Облигации с амортизацией долга') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (33, 'SCND', 'FOND', 'RUB', 'DBMC', 'Дискретный аукцион', 1, 'Дискретный аукцион: Облигации с амортизацией долга') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (34, 'PRMR', 'FOND', 'RUB', 'WBMC', 'Размещение: адресные заявки (подписка)', 1, 'Размещение: адресные заявки (подписка): Облигации с амортизацией долга') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (35, 'PRMR', 'FOND', 'RUB', 'BKVC', 'Размещение: Аукцион БР', 1, 'Размещение: Аукцион БР: Облигации Банка России с переменным купоном (КОБР)') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (36, 'PRMR', 'FOND', 'RUB', 'SKVC', 'Доразмещение: Адресные заявки БР', 1, 'Доразмещение: Адресные заявки БР: Облигации Банка России с переменным купоном (КОБР)') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (37, 'SCND', 'FOND', 'RUB', 'UKVC', 'Режим непрерывных торгов', 1, 'Режим непрерывных торгов: Облигации Банка России с переменным купоном (КОБР)') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (38, 'SCND', 'FOND', 'RUB', 'NKVC', 'Режим переговорных сделок (РПС)', 1, 'Режим переговорных сделок (РПС): Облигации Банка России с переменным купоном (КОБР)') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (39, 'SCND', 'FOND', 'RUB', 'DKVC', 'Дискретный аукцион', 1, 'Дискретный аукцион: Облигации Банка России с переменным купоном (КОБР)') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (45, 'PRMR', 'FOND', 'RUB', 'ABEC', 'Размещение: Аукцион СПВБ', 1, 'Размещение: Аукцион СПВБ: Биржевые облигации') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (46, 'SCND', 'FOND', 'RUB', 'UBEC', 'Режим непрерывных торгов', 1, 'Режим непрерывных торгов: Биржевые облигации') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (47, 'SCND', 'FOND', 'RUB', 'NBEC', 'Режим переговорных сделок (РПС)', 1, 'Режим переговорных сделок (РПС): Биржевые облигации') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (48, 'SCND', 'FOND', 'RUB', 'DBEC', 'Дискретный аукцион', 1, 'Дискретный аукцион: Биржевые облигации') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (61, 'PRMR', 'FOND', 'RUB', 'BMVC', 'ОФЗПК-Размещение: Аукцион БР', 1, 'ОФЗПК-Размещение: Аукцион БР: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (62, 'PRMR', 'FOND', 'RUB', 'SMVC', 'ОФЗПК-Доразмещение: Адресные заявки БР', 1, 'ОФЗПК-Доразмещение: Адресные заявки БР: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (63, 'SCND', 'FOND', 'RUB', 'UMVC', 'ОФЗПК-Режим непрерывных торгов', 1, 'ОФЗПК-Режим непрерывных торгов: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (64, 'SCND', 'FOND', 'RUB', 'DMVC', 'ОФЗПК-Дискретный аукцион', 1, 'ОФЗПК-Дискретный аукцион: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (65, 'SCND', 'FOND', 'RUB', 'MMVC', 'ОФЗПК-Торги в режиме выкупа', 1, 'ОФЗПК-Торги в режиме выкупа: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (66, 'PRMR', 'FOND', 'RUB', 'BMFC', 'ОФЗПД-Размещение: Аукцион БР', 1, 'ОФЗПД-Размещение: Аукцион БР: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (67, 'PRMR', 'FOND', 'RUB', 'SMFC', 'ОФЗПД- Доразмещение: Адресные заявки БР', 1, 'ОФЗПД- Доразмещение: Адресные заявки БР: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (68, 'SCND', 'FOND', 'RUB', 'UMFC', 'ОФЗПД-Режим непрерывных торгов', 1, 'ОФЗПД-Режим непрерывных торгов: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (69, 'SCND', 'FOND', 'RUB', 'DMFC', 'ОФЗПД-Дискретный аукцион', 1, 'ОФЗПД-Дискретный аукцион: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (70, 'SCND', 'FOND', 'RUB', 'MMFC', 'ОФЗПД-Торги в режиме выкупа', 1, 'ОФЗПД-Торги в режиме выкупа: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (71, 'PRMR', 'FOND', 'RUB', 'BMMC', 'ОФЗАД-Размещение: Аукцион БР', 1, 'ОФЗАД-Размещение: Аукцион БР: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (72, 'PRMR', 'FOND', 'RUB', 'SMMC', 'ОФЗАД-Доразмещение: Адресные заявки БР', 1, 'ОФЗАД-Доразмещение: Адресные заявки БР: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (73, 'SCND', 'FOND', 'RUB', 'UMMC', 'ОФЗАД-Режим непрерывных торгов', 1, 'ОФЗАД-Режим непрерывных торгов: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (74, 'SCND', 'FOND', 'RUB', 'DMMC', 'ОФЗАД-Дискретный аукцион', 1, 'ОФЗАД-Дискретный аукцион: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (75, 'SCND', 'FOND', 'RUB', 'MMMC', 'ОФЗАД-Торги в режиме выкупа', 1, 'ОФЗАД-Торги в режиме выкупа: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (76, 'PRMR', 'FOND', 'RUB', 'BMIC', 'ОФЗИН-Размещение: Аукцион БР', 1, 'ОФЗИН-Размещение: Аукцион БР: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (77, 'PRMR', 'FOND', 'RUB', 'SMIC', 'ОФЗИН-Доразмещение: Адресные заявки БР', 1, 'ОФЗИН-Доразмещение: Адресные заявки БР: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (78, 'SCND', 'FOND', 'RUB', 'UMIC', 'ОФЗИН-Режим непрерывных торгов', 1, 'ОФЗИН-Режим непрерывных торгов: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (79, 'SCND', 'FOND', 'RUB', 'DMIC', 'ОФЗИН-Дискретный аукцион', 1, 'ОФЗИН-Дискретный аукцион: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (80, 'SCND', 'FOND', 'RUB', 'MMIC', 'ОФЗИН-Торги в режиме выкупа', 1, 'ОФЗИН-Торги в режиме выкупа: Облигации Минфина') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (82, 'PRMR', 'FOND', 'RUB', 'BBVC', 'ОФЗ-ПК - Аукцион БР', 1, 'ОФЗ-ПК - Аукцион БР') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (83, 'PRMR', 'MKR', 'RUB', 'XMDTATSS', 'СПб ГУП АТС Смольного', 1, 'СПб ГУП АТС Смольного') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (88, 'PRMR', 'MKR', 'RUB', 'XMTTKFSP', 'Комитет финансов СПб', 1, 'Комитет финансов СПб') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (89, 'PRMR', 'MKR', 'RUB', 'XMDSKFLO', 'Комитет финансов ЛО', 1, 'Комитет финансов ЛО') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (90, 'PRMR', 'MKR', 'RUB', 'XMDTFSKB', 'ФСКМБ', 1, 'ФСКМБ') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (91, 'PRMR', 'MKR', 'RUB', 'XMDSFGGE', 'ФАУ ГГЭ', 1, 'ФАУ ГГЭ') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (92, 'PRMR', 'MKR', 'RUB', 'XMDTVRGO', 'ВВО РГО', 1, 'ВВО РГО') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (93, 'PRMR', 'MKR', 'RUB', 'XMDTTDRM', 'ООО Торговый дом РМ-Рейл', 1, 'ООО Торговый дом РМ-Рейл') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (95, 'PRMR', 'MKR', 'RUB', 'XMDTRKFN', 'АО РК Финанс', 1, 'АО РК Финанс') ON CONFLICT (ID) DO UPDATE SET MARKET_TYPE = EXCLUDED.MARKET_TYPE, SECTION = EXCLUDED.SECTION, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME, EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, DESCRIPTION = EXCLUDED.DESCRIPTION;

View file

@ -1,137 +0,0 @@
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (1, 'AMAT', 'Денежные средства Участника клиринга, зарезервированные на торги') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (2, 'AMAF', 'Денежные средства - свободные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (3, 'AMAB', 'Денежные средства - блокированные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (4, 'TMAT', 'Требования по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (5, 'OSAT', 'Обязательства по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (6, 'OMAT', 'Обязательства по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (7, 'TSAT', 'Требования по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (8, 'CMAT', 'Расчитанные требования по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (9, 'LSAT', 'Расчитанные обязательства по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (10, 'LMAT', 'Расчитанные обязательства по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (11, 'CSAT', 'Расчитанные требования по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (12, 'AMBT', 'Денежные средства Участника клиринга, зарезервированные на торги клиенты') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (13, 'AMBF', 'Денежные средства клиента - свободные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (14, 'AMBB', 'Денежные средства клиента - блокированные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (15, 'TMBT', 'Требования по деньгам (кл)') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (16, 'OSBT', 'Обязательства по бумагам (кл)') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (17, 'OMBT', 'Обязательства по деньгам (кл)') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (18, 'TSBT', 'Требования по бумагам (кл)') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (19, 'CMBT', 'Рассчитанные требования по деньгам (кл)') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (20, 'LSBT', 'Рассчитанные обязательства по бумагам (кл)') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (21, 'LMBT', 'Рассчитанные обязательства по деньгам (кл)') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (22, 'CSBT', 'Рассчитанные требования по бумагам (кл)') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (23, 'DMAT', 'Возврат депозита') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (24, 'DMBT', 'Возврат депозита (кл)') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (25, 'ASAT', 'Ценные бумаги Участника клиринга свои') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (26, 'ASAF', 'Ценные бумаги - свободные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (27, 'ASAB', 'Ценные бумаги - блокированные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (28, 'DMAX', 'Возврат инициатору') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (29, 'DMBX', 'Возврат инициатору (кл)') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (30, 'DMAU', 'Денежные средства - невыясненные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (31, 'DMAV', 'Треб. выписки') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (32, 'ASZT', 'Ценные бумаги для размещения/выкупа') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (33, 'ASBT', 'Ценные бумаги Участника клиринга клиенты') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (34, 'ASCT', 'Ценные бумаги Участника клиринга клиенты-нерезиденты') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (35, 'AMCT', 'Денежные средства Участника клиринга, зарезервированные на торги клиенты') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (37, 'AMCF', 'Денежные средства - свободные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (38, 'AMCB', 'Денежные средства - блокированные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (39, 'AMDT', 'Денежные средства Участника клиринга, зарезервированные на торги') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (40, 'AMDF', 'Денежные средства - свободные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (41, 'AMDB', 'Денежные средства - блокированные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (42, 'AMZT', 'Денежные средства Участника клиринга, зарезервированные на торги') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (43, 'AMZF', 'Денежные средства - свободные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (44, 'AMZB', 'Денежные средства - блокированные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (45, 'AMFT', 'Денежные средства Участника клиринга, зарезервированные на торги') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (46, 'AMFF', 'Денежные средства - свободные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (47, 'AMFB', 'Денежные средства - блокированные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (48, 'AMET', 'Денежные средства Участника клиринга, зарезервированные на торги') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (49, 'AMEF', 'Денежные средства - свободные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (50, 'AMEB', 'Денежные средства - блокированные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (51, 'ASBF', 'Ценные бумаги - свободные (кл)') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (52, 'ASBB', 'Ценные бумаги - блокированные (кл)') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (53, 'ASCF', 'Ценные бумаги - свободные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (54, 'ASCB', 'Ценные бумаги - блокированные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (55, 'ASDT', 'Ценные бумаги Участника клиринга, зарезервированные на торги') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (55, 'ASZF', 'Ценные бумаги - свободные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (56, 'ASDF', 'Ценные бумаги - свободные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (56, 'ASZB', 'Ценные бумаги - блокированные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (57, 'ASDB', 'Ценные бумаги - блокированные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (57, 'ASFT', 'Ценные бумаги Участника клиринга, зарезервированные на торги') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (58, 'ASFF', 'Ценные бумаги - свободные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (59, 'ASFB', 'Ценные бумаги - блокированные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (60, 'ASET', 'Ценные бумаги Участника клиринга, зарезервированные на торги') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (61, 'ASEF', 'Ценные бумаги - свободные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (62, 'ASEB', 'Ценные бумаги - блокированные') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (63, 'OMCT', 'Обязательства по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (64, 'OMDT', 'Обязательства по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (65, 'OMZT', 'Обязательства по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (66, 'OMFT', 'Обязательства по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (67, 'OMET', 'Обязательства по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (67, 'OSCT', 'Обязательства по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (68, 'OSDT', 'Обязательства по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (69, 'OSZT', 'Обязательства по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (70, 'OSFT', 'Обязательства по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (71, 'OSET', 'Обязательства по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (72, 'TMCT', 'Требования по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (73, 'TMDT', 'Требования по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (74, 'TMZT', 'Требования по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (75, 'TMFT', 'Требования по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (76, 'TMET', 'Требования по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (77, 'TSCT', 'Требования по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (78, 'TSDT', 'Требования по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (79, 'TSZT', 'Требования по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (80, 'TSFT', 'Требования по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (81, 'TSET', 'Требования по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (82, 'CMCT', 'Расчитанные требования по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (83, 'CMDT', 'Расчитанные требования по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (84, 'CMZT', 'Расчитанные требования по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (85, 'CMFT', 'Расчитанные требования по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (86, 'CMET', 'Расчитанные требования по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (87, 'CSCT', 'Расчитанные требования по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (88, 'CSDT', 'Расчитанные требования по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (89, 'CSZT', 'Расчитанные требования по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (90, 'CSFT', 'Расчитанные требования по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (91, 'CSET', 'Расчитанные требования по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (92, 'LMCT', 'Расчитанные обязательства по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (93, 'LMDT', 'Расчитанные обязательства по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (94, 'LMZT', 'Расчитанные обязательства по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (95, 'LMFT', 'Расчитанные обязательства по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (96, 'LMET', 'Расчитанные обязательства по деньгам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (97, 'LSCT', 'Расчитанные обязательства по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (98, 'LSDT', 'Расчитанные обязательства по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (99, 'LSZT', 'Расчитанные обязательства по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (100, 'LSFT', 'Расчитанные обязательства по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (101, 'LSET', 'Расчитанные обязательства по бумагам') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (102, 'DMAI', 'Ввод и вывод денежных средств') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (103, 'DMBI', 'Ввод и вывод денежных средств') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (104, 'DMCI', 'Ввод и вывод денежных средств') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (105, 'DMDI', 'Ввод и вывод денежных средств') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (106, 'DMZI', 'Ввод и вывод денежных средств') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (107, 'DMFI', 'Ввод и вывод денежных средств') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (108, 'DMEI', 'Ввод и вывод денежных средств') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (109, 'DSAI', 'Ввод и вывод ценных бумаг') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (110, 'DSBI', 'Ввод и вывод ценных бумаг') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (111, 'DSCI', 'Ввод и вывод ценных бумаг') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (112, 'DSDI', 'Ввод и вывод ценных бумаг') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (113, 'DSZI', 'Ввод и вывод ценных бумаг') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (114, 'DSFI', 'Ввод и вывод ценных бумаг') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (115, 'DSEI', 'Ввод и вывод ценных бумаг') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (116, 'DMCT', 'Возврат депозита') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (117, 'DMCX', 'Возврат депозита') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (118, 'DMDT', 'Возврат депозита') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (119, 'DMDX', 'Возврат депозита') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (120, 'DMZT', 'Возврат депозита') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (121, 'DMZX', 'Возврат депозита') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (122, 'DMFT', 'Возврат депозита') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (123, 'DMFX', 'Возврат депозита') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (124, 'DMET', 'Возврат депозита') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (125, 'DMEX', 'Возврат депозита') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (126, 'DMBV', 'Треб. Выписки (кл)') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (127, 'DMCV', 'Треб. выписки') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (128, 'DMDV', 'Треб. выписки') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (129, 'DMZV', 'Треб. выписки') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (130, 'DMFV', 'Треб. выписки') ON CONFLICT(ID) DO NOTHING RETURNING *;
INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (131, 'DMEV', 'Треб. выписки') ON CONFLICT(ID) DO NOTHING RETURNING *;

View file

@ -1,4 +1,4 @@
-- DB version: 3.10.0.74
-- DB version: 3.9.0.65
/* Dictionaries */
-- allowed - Справочник признаков допустимости использования объектов
@ -1553,7 +1553,7 @@ GRANT ALL PRIVILEGES ON TABLE FIXED_INCOME_CASH_FLOW_HISTORY TO clearing;
-- couponPeriod - Купонное расписание
DROP TABLE IF EXISTS COUPON_PERIOD;
CREATE TABLE COUPON_PERIOD(SECURITY_ID bigint, COUPON_RATE numeric(72,2), NUMBER bigint, PERIOD_START_DATE date, PERIOD_END_DATE date, ID bigint PRIMARY KEY);
CREATE TABLE COUPON_PERIOD(SECURITY_ID bigint, COUPON_RATE numeric(72,2), NUMBER bigint, PERIOD_END_DATE date, PERIOD_START_DATE date, ID bigint PRIMARY KEY);
COMMENT ON TABLE COUPON_PERIOD IS 'Купонное расписание';
COMMENT ON COLUMN COUPON_PERIOD.SECURITY_ID IS 'Идентификатор инструмента (linked to security)';
@ -1562,9 +1562,9 @@ COMMENT ON COLUMN COUPON_PERIOD.COUPON_RATE IS 'Купонная ставка';
COMMENT ON COLUMN COUPON_PERIOD.NUMBER IS 'Номер купона';
COMMENT ON COLUMN COUPON_PERIOD.PERIOD_START_DATE IS 'Начало периода действия';
COMMENT ON COLUMN COUPON_PERIOD.PERIOD_END_DATE IS 'Начало периода действия';
COMMENT ON COLUMN COUPON_PERIOD.PERIOD_END_DATE IS 'Окончание периода действия';
COMMENT ON COLUMN COUPON_PERIOD.PERIOD_START_DATE IS 'Окончание периода действия';
COMMENT ON COLUMN COUPON_PERIOD.ID IS 'Идентификатор записи';
@ -1573,7 +1573,7 @@ GRANT ALL PRIVILEGES ON TABLE COUPON_PERIOD TO clearing;
-- History log of couponPeriod - Купонное расписание
DROP TABLE IF EXISTS COUPON_PERIOD_HISTORY;
CREATE TABLE COUPON_PERIOD_HISTORY(COUPON_PERIOD_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), SECURITY_ID bigint, COUPON_RATE numeric(72,2), NUMBER bigint, PERIOD_START_DATE date, PERIOD_END_DATE date, ID bigint PRIMARY KEY);
CREATE TABLE COUPON_PERIOD_HISTORY(COUPON_PERIOD_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), SECURITY_ID bigint, COUPON_RATE numeric(72,2), NUMBER bigint, PERIOD_END_DATE date, PERIOD_START_DATE date, ID bigint PRIMARY KEY);
COMMENT ON TABLE COUPON_PERIOD_HISTORY IS 'История изменений таблицы couponPeriod';
COMMENT ON COLUMN COUPON_PERIOD_HISTORY.COUPON_PERIOD_ID IS 'Идентификатор записи в таблице COUPON_PERIOD';
COMMENT ON COLUMN COUPON_PERIOD_HISTORY.EVENT_TIME IS 'Дата и время изменения';
@ -1586,9 +1586,9 @@ COMMENT ON COLUMN COUPON_PERIOD_HISTORY.COUPON_RATE IS 'Купонная ста
COMMENT ON COLUMN COUPON_PERIOD_HISTORY.NUMBER IS 'Номер купона';
COMMENT ON COLUMN COUPON_PERIOD_HISTORY.PERIOD_START_DATE IS 'Начало периода действия';
COMMENT ON COLUMN COUPON_PERIOD_HISTORY.PERIOD_END_DATE IS 'Начало периода действия';
COMMENT ON COLUMN COUPON_PERIOD_HISTORY.PERIOD_END_DATE IS 'Окончание периода действия';
COMMENT ON COLUMN COUPON_PERIOD_HISTORY.PERIOD_START_DATE IS 'Окончание периода действия';
COMMENT ON COLUMN COUPON_PERIOD_HISTORY.ID IS 'Идентификатор записи';
@ -4615,37 +4615,8 @@ COMMENT ON COLUMN MARKET_DATA_LIQUIDATION.CLEARING_DATE IS 'Дата';
GRANT ALL PRIVILEGES ON TABLE MARKET_DATA_LIQUIDATION TO clearing;
-- sCrossRate - Кросс курсы валют от ЦБ
DROP TABLE IF EXISTS S_CROSS_RATE;
CREATE TABLE S_CROSS_RATE(ID bigint PRIMARY KEY, DATE date, CURRENCY varchar(50), CURR_CODE varchar(50), FACE_VALUE numeric(72,18), RATE numeric(72,18), UNIT_RATE numeric(72,18), GENERATION_TIME timestamp, GENERATION_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp);
COMMENT ON TABLE S_CROSS_RATE IS 'Кросс курсы валют от ЦБ';
COMMENT ON COLUMN S_CROSS_RATE.ID IS 'Идентификатор записи';
COMMENT ON COLUMN S_CROSS_RATE.DATE IS 'Дата торгов';
COMMENT ON COLUMN S_CROSS_RATE.CURRENCY IS 'Наименование валюты';
COMMENT ON COLUMN S_CROSS_RATE.CURR_CODE IS 'Код валюты';
COMMENT ON COLUMN S_CROSS_RATE.FACE_VALUE IS 'Номинал';
COMMENT ON COLUMN S_CROSS_RATE.RATE IS 'Курс валюты с учетом размера лота';
COMMENT ON COLUMN S_CROSS_RATE.UNIT_RATE IS 'Курс за единицу иностранной валюты';
COMMENT ON COLUMN S_CROSS_RATE.GENERATION_TIME IS 'Дата и время создания записи';
COMMENT ON COLUMN S_CROSS_RATE.GENERATION_ID IS 'Идентификатор взаимодействия';
COMMENT ON COLUMN S_CROSS_RATE.CREATED_AT IS 'Дата-время создания записи';
COMMENT ON COLUMN S_CROSS_RATE.UPDATED_AT IS 'Дата-время изменения записи';
GRANT ALL PRIVILEGES ON TABLE S_CROSS_RATE TO clearing;
/* views */
-- Data types
INSERT INTO DB_VERSION(ID, VERSION) values (1, '3.10') ON CONFLICT (ID) DO UPDATE SET VERSION = EXCLUDED.VERSION
INSERT INTO DB_VERSION(ID, VERSION) values (1, '3.9') ON CONFLICT (ID) DO UPDATE SET VERSION = EXCLUDED.VERSION

File diff suppressed because it is too large Load diff

View file

@ -1,179 +0,0 @@
-- DB version: 3.9.0.71
-- DATA version: 3.9.0.68
/* Dictionaries */
/* Business objects */
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (1, 'ABEC', 'FOND', 'PRMR', 'RUB', 'Размещение: Аукцион СПВБ', 'Размещение: Аукцион СПВБ') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (2, 'AEPC', 'FOND', 'PRMR', 'RUB', 'Размещение: акции (аукцион по цене)', 'Размещение: акции (аукцион по цене)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (3, 'AESC', 'FOND', 'PRMR', 'RUB', 'Размещение: акции (аукцион по цене)', 'Размещение: акции (аукцион по цене)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (4, 'ABFC', 'FOND', 'PRMR', 'RUB', 'СПВБ: Обл. с ПД-Аукцион', 'СПВБ: Обл. с ПД-Аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (5, 'ABIC', 'FOND', 'PRMR', 'RUB', 'СПВБ: Обл. с ИН - Аукцион', 'СПВБ: Обл. с ИН - Аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (6, 'ABMC', 'FOND', 'PRMR', 'RUB', 'СПВБ: Обл. с АД - Аукцион', 'СПВБ: Обл. с АД - Аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (7, 'ABVC', 'FOND', 'PRMR', 'RUB', 'СПВБ: Обл. с ПК - Аукцион', 'СПВБ: Обл. с ПК - Аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (8, 'BKVC', 'FOND', 'PRMR', 'RUB', 'Размещение: Аукцион БР', 'Размещение: Аукцион БР') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (9, 'BMFC', 'FOND', 'PRMR', 'RUB', 'ОФЗПД-Размещение: Аукцион', 'ОФЗПД-Размещение: Аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (10, 'BMIC', 'FOND', 'PRMR', 'RUB', 'ОФЗИН-Размещение: Аукцион', 'ОФЗИН-Размещение: Аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (11, 'BMMC', 'FOND', 'PRMR', 'RUB', 'ОФЗАД-Размещение: Аукцион', 'ОФЗАД-Размещение: Аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (12, 'BMVC', 'FOND', 'PRMR', 'RUB', 'ОФЗПК-Размещение: Аукцион', 'ОФЗПК-Размещение: Аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (13, 'DBEC', 'FOND', 'SCND', 'RUB', 'Дискретный аукцион', 'Дискретный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (14, 'DBFC', 'FOND', 'SCND', 'RUB', 'Дискретный аукцион', 'Дискретный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (15, 'DBIC', 'FOND', 'SCND', 'RUB', 'Дискретный аукцион', 'Дискретный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (16, 'DBMC', 'FOND', 'SCND', 'RUB', 'Дискретный аукцион', 'Дискретный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (17, 'DBVC', 'FOND', 'SCND', 'RUB', 'Дискретный аукцион', 'Дискретный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (18, 'DEPC', 'FOND', 'SCND', 'RUB', 'Дискретный аукцион', 'Дискретный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (19, 'DESC', 'FOND', 'SCND', 'RUB', 'Дискретный аукцион', 'Дискретный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (20, 'DKVC', 'FOND', 'SCND', 'RUB', 'Дискретный аукцион', 'Дискретный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (21, 'DMFC', 'FOND', 'SCND', 'RUB', 'ОФЗПД-Дискретный аукцион', 'ОФЗПД-Дискретный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (22, 'DMIC', 'FOND', 'SCND', 'RUB', 'ОФЗИН-Дискретный аукцион', 'ОФЗИН-Дискретный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (23, 'DMMC', 'FOND', 'SCND', 'RUB', 'ОФЗАД-Дискретный аукцион', 'ОФЗАД-Дискретный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (24, 'DMVC', 'FOND', 'SCND', 'RUB', 'ОФЗПК-Дискретный аукцион', 'ОФЗПК-Дискретный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (25, 'KBFC', 'FOND', 'PRMR', 'RUB', 'Размещение: Аукцион по ставке', 'Размещение: Аукцион по ставке') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (26, 'KBIC', 'FOND', 'PRMR', 'RUB', 'Размещение: Аукцион по ставке', 'Размещение: Аукцион по ставке') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (27, 'KBMC', 'FOND', 'PRMR', 'RUB', 'Размещение: Аукцион по ставке', 'Размещение: Аукцион по ставке') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (28, 'KBVC', 'FOND', 'PRMR', 'RUB', 'Размещение: Аукцион по ставке', 'Размещение: Аукцион по ставке') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (29, 'PMFC', 'FOND', 'PRMR', 'RUB', 'ОФЗПД-Торги в режиме выкупа', 'ОФЗПД-Торги в режиме выкупа') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (30, 'PMIC', 'FOND', 'PRMR', 'RUB', 'ОФЗИН-Торги в режиме выкупа', 'ОФЗИН-Торги в режиме выкупа') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (31, 'PMMC', 'FOND', 'PRMR', 'RUB', 'ОФЗАД-Торги в режиме выкупа', 'ОФЗАД-Торги в режиме выкупа') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (32, 'PMVC', 'FOND', 'PRMR', 'RUB', 'ОФЗПК-Торги в режиме выкупа', 'ОФЗПК-Торги в режиме выкупа') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (33, 'NBEC', 'FOND', 'SCND', 'RUB', 'Режим переговорных сделок (РПС)', 'Режим переговорных сделок (РПС)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (34, 'NBFC', 'FOND', 'SCND', 'RUB', 'Режим переговорных сделок (РПС)', 'Режим переговорных сделок (РПС)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (35, 'NBIC', 'FOND', 'SCND', 'RUB', 'Режим переговорных сделок (РПС)', 'Режим переговорных сделок (РПС)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (36, 'NBMC', 'FOND', 'SCND', 'RUB', 'Режим переговорных сделок (РПС)', 'Режим переговорных сделок (РПС)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (37, 'NBVC', 'FOND', 'SCND', 'RUB', 'Режим переговорных сделок (РПС)', 'Режим переговорных сделок (РПС)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (38, 'NEPC', 'FOND', 'SCND', 'RUB', 'Режим переговорных сделок (РПС)', 'Режим переговорных сделок (РПС)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (39, 'NESC', 'FOND', 'SCND', 'RUB', 'Режим переговорных сделок (РПС)', 'Режим переговорных сделок (РПС)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (40, 'NKVC', 'FOND', 'SCND', 'RUB', 'Режим переговорных сделок (РПС)', 'Режим переговорных сделок (РПС)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (41, 'SBFC', 'FOND', 'PRMR', 'RUB', 'СПВБ: Обл. с ПД - Доразмещение', 'СПВБ: Обл. с ПД - Доразмещение') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (42, 'SBIC', 'FOND', 'PRMR', 'RUB', 'СПВБ: Обл. с ИН - Доразмещение', 'СПВБ: Обл. с ИН - Доразмещение') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (43, 'SBMC', 'FOND', 'PRMR', 'RUB', 'СПВБ: Обл. с АД -Доразмещение', 'СПВБ: Обл. с АД -Доразмещение') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (44, 'SBVC', 'FOND', 'PRMR', 'RUB', 'СПВБ: Обл. с ПК-Доразмещение', 'СПВБ: Обл. с ПК-Доразмещение') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (45, 'SKVC', 'FOND', 'PRMR', 'RUB', 'Доразмещение: Адресные заявки БР', 'Доразмещение: Адресные заявки БР') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (46, 'SMFC', 'FOND', 'PRMR', 'RUB', 'ОФЗПД- Доразмещение: Адресные заявки', 'ОФЗПД- Доразмещение: Адресные заявки') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (47, 'SMIC', 'FOND', 'PRMR', 'RUB', 'ОФЗИН-Доразмещение: Адресные заявки', 'ОФЗИН-Доразмещение: Адресные заявки') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (48, 'SMMC', 'FOND', 'PRMR', 'RUB', 'ОФЗАД-Доразмещение: Адресные заявки', 'ОФЗАД-Доразмещение: Адресные заявки') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (49, 'SMVC', 'FOND', 'PRMR', 'RUB', 'ОФЗПК-Доразмещение: Адресные заявки', 'ОФЗПК-Доразмещение: Адресные заявки') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (50, 'UBEC', 'FOND', 'SCND', 'RUB', 'Режим непрерывных торгов', 'Режим непрерывных торгов') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (51, 'UBFC', 'FOND', 'SCND', 'RUB', 'СПВБ: Обл. с ПД - Торги', 'СПВБ: Обл. с ПД - Торги') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (52, 'UBIC', 'FOND', 'SCND', 'RUB', 'СПВБ: Обл. с ИН - Торги', 'СПВБ: Обл. с ИН - Торги') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (53, 'UBMC', 'FOND', 'SCND', 'RUB', 'СПВБ: Обл. с АД - Торги', 'СПВБ: Обл. с АД - Торги') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (54, 'UBVC', 'FOND', 'SCND', 'RUB', 'СПВБ: Обл. с ПК - Торги', 'СПВБ: Обл. с ПК - Торги') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (55, 'UEPC', 'FOND', 'SCND', 'RUB', 'Режим непрерывных торгов', 'Режим непрерывных торгов') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (56, 'UESC', 'FOND', 'SCND', 'RUB', 'СПВБ: Акции Торги', 'СПВБ: Акции Торги') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (57, 'UKVC', 'FOND', 'SCND', 'RUB', 'Режим непрерывных торгов', 'Режим непрерывных торгов') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (58, 'UMFC', 'FOND', 'SCND', 'RUB', 'ОФЗПД-Режим непрерывных торгов', 'ОФЗПД-Режим непрерывных торгов') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (59, 'UMIC', 'FOND', 'SCND', 'RUB', 'ОФЗИН-Режим непрерывных торгов', 'ОФЗИН-Режим непрерывных торгов') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (60, 'UMMC', 'FOND', 'SCND', 'RUB', 'ОФЗАД-Режим непрерывных торгов', 'ОФЗАД-Режим непрерывных торгов') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (61, 'UMVC', 'FOND', 'SCND', 'RUB', 'ОФЗПК-Режим непрерывных торгов', 'ОФЗПК-Режим непрерывных торгов') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (62, 'WBFC', 'FOND', 'PRMR', 'RUB', 'Размещение: адресные заявки (подписка)', 'Размещение: адресные заявки (подписка)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (63, 'WBIC', 'FOND', 'PRMR', 'RUB', 'Размещение: адресные заявки (подписка)', 'Размещение: адресные заявки (подписка)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (64, 'WBMC', 'FOND', 'PRMR', 'RUB', 'Размещение: адресные заявки (подписка)', 'Размещение: адресные заявки (подписка)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (65, 'WBVC', 'FOND', 'PRMR', 'RUB', 'Размещение: адресные заявки (подписка)', 'Размещение: адресные заявки (подписка)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (66, 'WEPC', 'FOND', 'PRMR', 'RUB', 'Размещение: адресные заявки (подписка)', 'Размещение: адресные заявки (подписка)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (67, 'WESC', 'FOND', 'PRMR', 'RUB', 'Размещение: адресные заявки (подписка)', 'Размещение: адресные заявки (подписка)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (68, 'ABZC', 'FOND', 'PRMR', 'RUB', 'СПВБ: Диск. обл. - Аукцион', 'СПВБ: Диск. обл. - Аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (69, 'SBZC', 'FOND', 'PRMR', 'RUB', 'СПВБ: Диск. обл.-Доразмещение', 'СПВБ: Диск. обл.-Доразмещение') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (70, 'UBZC', 'FOND', 'PRMR', 'RUB', 'СПВБ: Диск. обл. - Торги', 'СПВБ: Диск. обл. - Торги') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (71, 'NBZC', 'FOND', 'PRMR', 'RUB', 'СПВБ: Диск. обл. - РПС', 'СПВБ: Диск. обл. - РПС') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (72, 'DBZC', 'FOND', 'PRMR', 'RUB', 'СПВБ: Диск. обл. - Дискретный аукцион', 'СПВБ: Диск. обл. - Дискретный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (73, 'WBZC', 'FOND', 'PRMR', 'RUB', 'СПВБ: Диск. обл. - адресные заявки (подписка)', 'СПВБ: Диск. обл. - адресные заявки (подписка)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (74, 'XMDTATSS', 'MKR', 'PRMR', 'RUB', 'Размещение: депозитный аукцион', 'Размещение: депозитный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (75, 'XMDTAVGB', 'MKR', 'PRMR', 'RUB', 'Размещение: депозитный аукцион', 'Размещение: депозитный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (76, 'XMDTFSKB', 'MKR', 'PRMR', 'RUB', 'Размещение: депозитный аукцион', 'Размещение: депозитный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (77, 'XMDTKFLO', 'MKR', 'PRMR', 'RUB', 'Размещение: депозитный аукцион', 'Размещение: депозитный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (78, 'XMDTKFSP', 'MKR', 'PRMR', 'RUB', 'Размещение: депозитный аукцион', 'Размещение: депозитный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (79, 'XMNTFSKB', 'MKR', 'PRMR', 'RUB', 'Депозитные торги (аукцион)', 'Депозитные торги (аукцион)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (80, 'XMNTKFLO', 'MKR', 'PRMR', 'RUB', 'Депозитные торги (аукцион)', 'Депозитные торги (аукцион)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (81, 'XMNTKFSP', 'MKR', 'PRMR', 'RUB', 'Депозитные торги (аукцион)', 'Депозитные торги (аукцион)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (82, 'XMDSFSKB', 'MKR', 'PRMR', 'RUB', 'Размещение: депозитный аукцион', 'Размещение: депозитный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (83, 'XMDSKFLO', 'MKR', 'PRMR', 'RUB', 'Размещение: депозитный аукцион', 'Размещение: депозитный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (84, 'XMDSKFSP', 'MKR', 'PRMR', 'RUB', 'Размещение: депозитный аукцион', 'Размещение: депозитный аукцион') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (85, 'XMTTKFSP', 'MKR', 'PRMR', 'RUB', 'Размещение: депозитные торги', 'Размещение: депозитные торги') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;
INSERT INTO MARKET(ID, CODE, SECTION, MARKET_TYPE, SETTLEMENT_CURRENCY, NAME, DESCRIPTION) values (86, 'XMNSKFLO', 'MKR', 'PRMR', 'RUB', 'Депозитные торги (аукцион)', 'Депозитные торги (аукцион)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, NAME = EXCLUDED.NAME, DESCRIPTION = EXCLUDED.DESCRIPTION;

View file

@ -1,21 +0,0 @@
-- DB version: 3.9 -> 3.10
-- sCrossRate - Кросс курсы валют от ЦБ
DROP TABLE IF EXISTS S_CROSS_RATE;
CREATE TABLE S_CROSS_RATE(ID bigint PRIMARY KEY, DATE date, CURRENCY varchar(50), CURR_CODE varchar(50), FACE_VALUE numeric(72,18), RATE numeric(72,18), UNIT_RATE numeric(72,18), GENERATION_TIME timestamp, GENERATION_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp);
COMMENT ON TABLE S_CROSS_RATE IS 'Кросс курсы валют от ЦБ';
COMMENT ON COLUMN S_CROSS_RATE.ID IS 'Идентификатор записи';
COMMENT ON COLUMN S_CROSS_RATE.DATE IS 'Дата торгов';
COMMENT ON COLUMN S_CROSS_RATE.CURRENCY IS 'Наименование валюты';
COMMENT ON COLUMN S_CROSS_RATE.CURR_CODE IS 'Код валюты';
COMMENT ON COLUMN S_CROSS_RATE.FACE_VALUE IS 'Номинал';
COMMENT ON COLUMN S_CROSS_RATE.RATE IS 'Курс валюты с учетом размера лота';
COMMENT ON COLUMN S_CROSS_RATE.UNIT_RATE IS 'Курс за единицу иностранной валюты';
COMMENT ON COLUMN S_CROSS_RATE.GENERATION_TIME IS 'Дата и время создания записи';
COMMENT ON COLUMN S_CROSS_RATE.GENERATION_ID IS 'Идентификатор взаимодействия';
COMMENT ON COLUMN S_CROSS_RATE.CREATED_AT IS 'Дата-время создания записи';
COMMENT ON COLUMN S_CROSS_RATE.UPDATED_AT IS 'Дата-время изменения записи';
GRANT ALL PRIVILEGES ON TABLE S_CROSS_RATE TO clearing;
INSERT INTO DB_VERSION(ID, VERSION) values (1, '3.10') ON CONFLICT (ID) DO UPDATE SET VERSION = EXCLUDED.VERSION

View file

@ -57,14 +57,6 @@
<groupId>ru.spcex.clearing</groupId>
<artifactId>classes</artifactId>
</dependency>
<!-- special logging -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.0.1</version>
</dependency>
<!-- TEST -->
<dependency>
<groupId>org.springframework.boot</groupId>

View file

@ -1,56 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_PATH" value="./log" />
<property name="FILE_NAME" value="dbf-exporter" />
<property name="CONSOLE_LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n" />
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>utf-8</charset>
<charset>UTF-8</charset>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- first FILE TEXT appender -->
<appender name="TEXT_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-text.log</file>
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${FILE_LOG_PATTERN}</Pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-text.%d{yyyy-MM-dd}.%i.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<!-- second FILE JSON appender -->
<appender name="JSON_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-json.log</file>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-json.%d{yyyy-MM-dd}.%i.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<root level="info">
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./logs/dbf-exporter.log</file>
<encoder>
<charset>UTF-8</charset>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>
../logs/dbf-export.%i.log
</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>500MB</maxFileSize>
</triggeringPolicy>
</appender>
<root level="warn">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<logger name="ru.spcex" level="debug" additivity="false">
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</logger>
</configuration>

View file

@ -75,17 +75,6 @@
<artifactId>platform-enum</artifactId>
</dependency>
<!-- special logging -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.0.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- TEST -->
<!-- <dependency>-->
<!-- <groupId>org.springframework</groupId>-->

View file

@ -1,56 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_PATH" value="./log" />
<property name="FILE_NAME" value="dbf-importer" />
<property name="CONSOLE_LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n" />
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>utf-8</charset>
<charset>UTF-8</charset>
<pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- first FILE TEXT appender -->
<appender name="TEXT_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-text.log</file>
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${FILE_LOG_PATTERN}</Pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-text.%d{yyyy-MM-dd}.%i.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<!-- second FILE JSON appender -->
<appender name="JSON_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-json.log</file>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-json.%d{yyyy-MM-dd}.%i.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<root level="info">
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./logs/dbf-importer.log</file>
<encoder>
<charset>UTF-8</charset>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>
../logs/dbf-importer.%i.log
</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>500MB</maxFileSize>
</triggeringPolicy>
</appender>
<root level="warn">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<logger name="ru.spcex" level="debug" additivity="false">
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</logger>
</configuration>

View file

@ -1,138 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>ru.spcex.clearing</groupId>
<artifactId>clearing-parent</artifactId>
<version>SPCEX-1.0.0.0</version>
</parent>
<artifactId>extdb-importer</artifactId>
<name>extdb-importer</name>
<description>Extdb importer module. Аналог trade-importer.</description>
<version>SPCEX-1.0.0.0</version>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- JDBC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
</dependency>
<dependency>
<groupId>ru.spcex.clearing</groupId>
<artifactId>classes</artifactId>
<version>SPCEX-1.0.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ru.spcex.platform</groupId>
<artifactId>platform-messaging</artifactId>
</dependency>
<dependency>
<groupId>ru.spcex.platform</groupId>
<artifactId>platform-imdg-api-hazelcast-impl</artifactId>
</dependency>
<dependency>
<groupId>ru.spcex.clearing</groupId>
<artifactId>clearing-validation</artifactId>
</dependency>
<dependency>
<groupId>ru.spcex.platform</groupId>
<artifactId>platform-enum</artifactId>
</dependency>
<!-- special logging -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.0.1</version>
</dependency>
<!-- TEST -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ru.spcex.clearing</groupId>
<artifactId>test-clearing</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>application.properties</exclude>
</excludes>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<finalName>${project.artifactId}</finalName>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.2.0-M1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.2.0-M1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>

View file

@ -1,12 +0,0 @@
package ru.spcex.clearing.extdb.importer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ExtDBImporterApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(ExtDBImporterApplication.class);
app.run(args);
}
}

View file

@ -1,65 +0,0 @@
package ru.spcex.clearing.extdb.importer.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import ru.spcex.clearing.extdb.importer.config.settings.DatabaseSettings;
import ru.spcex.clearing.extdb.importer.config.settings.ImportExtDBServiceSettings;
import ru.spcex.clearing.extdb.importer.error.ModuleInitializeException;
import javax.sql.DataSource;
import java.sql.Connection;
import static org.springframework.jdbc.datasource.DataSourceUtils.doCloseConnection;
@SuppressWarnings("UnnecessaryLocalVariable")
@Configuration
public class DbConnectionConfig {
private final Logger log = LoggerFactory.getLogger(this.getClass());
private final DatabaseSettings settings;
public DbConnectionConfig(ImportExtDBServiceSettings settings) {
this.settings = settings.getDatabase();
}
@Bean
public DataSource dataSource() {
String login = settings.getLogin();
String password = settings.getPassword();
String dbUrl = settings.getUrl();
String driver = settings.getDriver();
DriverManagerDataSource ds = new DriverManagerDataSource();
try {
ds.setDriverClassName(driver);
} catch (Exception ue) {
throw new RuntimeException("JDBC driver not loaded: " + driver, ue);
}
ds.setUrl(dbUrl);
ds.setUsername(login);
ds.setPassword(password);
String OPERATION_DATABASE_CONNECTION_CHECK = String.format("Database [%s] connection check", dbUrl);
try {
Connection conn = ds.getConnection();
doCloseConnection(conn, ds);
log.info("{}: success", OPERATION_DATABASE_CONNECTION_CHECK);
return ds;
} catch (Throwable e) {
String msg = String.format("%s: failed: %s -> %s",
OPERATION_DATABASE_CONNECTION_CHECK, e.getClass().getSimpleName(), e.getMessage());
log.error(msg);
throw new ModuleInitializeException(msg, e);
}
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
return jdbcTemplate;
}
}

View file

@ -1,15 +0,0 @@
package ru.spcex.clearing.extdb.importer.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import ru.spcex.platform.utils.enumeration.IMessageResolver;
import ru.spcex.clearing.util.services.IMDGMessageResolver;
import ru.spcex.platform.imdg.api.ImdgProvider;
@Configuration
public class ErrorResolverConfig {
@Bean
public IMessageResolver messageResolver(ImdgProvider imdgProvider) {
return new IMDGMessageResolver(imdgProvider);
}
}

View file

@ -1,20 +0,0 @@
package ru.spcex.clearing.extdb.importer.config;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import ru.spcex.clearing.extdb.importer.config.settings.ImportExtDBServiceSettings;
@Configuration
@EnableConfigurationProperties
@ComponentScan(basePackages = {"ru.spcex.clearing.extdb.importer"})
public class ExtDBImporterConfig {
private final ImportExtDBServiceSettings settings;
private final ApplicationContext context;
public ExtDBImporterConfig(ImportExtDBServiceSettings settings, ApplicationContext context) {
this.settings = settings;
this.context = context;
}
}

View file

@ -1,47 +0,0 @@
package ru.spcex.clearing.extdb.importer.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import ru.spcex.clearing.extdb.importer.config.settings.ImportExtDBServiceSettings;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
@Configuration
public class ImdgConfig {
private static ThreadPoolTaskExecutor createThreadPoolTaskExecutor(int maxPoolSz, boolean waitForCompletion) {
ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor();
if (maxPoolSz > 2) {
pool.setKeepAliveSeconds(60);
pool.setAllowCoreThreadTimeOut(true);
}
pool.setCorePoolSize(maxPoolSz);
pool.setWaitForTasksToCompleteOnShutdown(waitForCompletion);
return pool;
}
@Bean(name = "taskExecutorHazelcastClientInitializer")
public ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer() {
return createThreadPoolTaskExecutor(1, true);
}
@Bean(name = "taskExecutorIdGeneratorAwaiter")
public ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter() {
return createThreadPoolTaskExecutor(1, false);
}
@Autowired
@Bean
public ImdgProvider imdgProvider(
@Qualifier("taskExecutorHazelcastClientInitializer") ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer,
@Qualifier("taskExecutorIdGeneratorAwaiter") ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter,
ImportExtDBServiceSettings settings
) {
return new HazelcastService(taskExecutorHazelcastClientInitializer,
taskExecutorIdGeneratorAwaiter,
settings.getHazelcast());
}
}

View file

@ -1,60 +0,0 @@
package ru.spcex.clearing.extdb.importer.config;
import org.apache.kafka.clients.consumer.Consumer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.core.ProducerFactory;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.config.KafkaConsumerFactory;
import ru.spcex.clearing.platform.messaging.config.KafkaProducerFactory;
import ru.spcex.clearing.platform.messaging.config.element.KafkaProducerSettings;
import ru.spcex.clearing.platform.messaging.service.RequestInfo;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.clearing.extdb.importer.config.settings.ImportExtDBServiceSettings;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgId;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.util.function.Supplier;
@Configuration
public class KafkaConfig {
@Autowired
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Bean
public Consumer<String, Object> createConsumer(ImportExtDBServiceSettings settings) {
return KafkaConsumerFactory.consumer(settings.getKafkaConsumer());
}
@Bean
public ProducerFactory<String, Object> pf(ImportExtDBServiceSettings settings) {
KafkaProducerSettings kafkaSettings = settings.getKafkaProducer();
return KafkaProducerFactory.producerFactory(kafkaSettings);
}
@Bean("kafkaTemplate")
public KafkaTemplate<String, Object> kafkaTemplate(ProducerFactory<String, Object> pf) {
return new KafkaTemplate<>(pf);
}
@Autowired
@Bean
public Supplier<KafkaSender> kafkaSender(KafkaTemplate<String, Object> kafkaTemplate,
ImdgProvider imdgProvider) {
ImdgId imdgIdGenerator = imdgProvider.getImdgIdGenerator();
return () -> KafkaSender
.setup()
.setKafkaTemplate(kafkaTemplate)
.idGenerator(imdgIdGenerator::nextId)
.imdgProvider(s -> {
Imdg<RequestInfo> imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_RequestInfo, RequestInfo.class);
return imdg::insert;
})
.build();
}
}

View file

@ -1,14 +0,0 @@
package ru.spcex.clearing.extdb.importer.config.settings;
public class Cron {
private String checkSrcDirCron;
public String getCheckSrcDirCron() {
return checkSrcDirCron;
}
public void setCheckSrcDirCron(String checkSrcDirCron) {
this.checkSrcDirCron = checkSrcDirCron;
}
}

View file

@ -1,40 +0,0 @@
package ru.spcex.clearing.extdb.importer.config.settings;
public class DatabaseSettings {
private String login;
private String password;
private String url;
private String driver;
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
}

View file

@ -1,60 +0,0 @@
package ru.spcex.clearing.extdb.importer.config.settings;
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("extdb-importer")
public class ImportExtDBServiceSettings {
private HazelcastClientParams hazelcast;
private KafkaProducerSettings kafkaProducer;
private KafkaConsumerSettings kafkaConsumer;
private DatabaseSettings database;
private Cron cron;
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;
}
public DatabaseSettings getDatabase() {
return database;
}
public void setDatabase(DatabaseSettings database) {
this.database = database;
}
public Cron getCron() {
return cron;
}
public void setCron(Cron cron) {
this.cron = cron;
}
}

View file

@ -1,20 +0,0 @@
package ru.spcex.clearing.extdb.importer.error;
import ru.spcex.platform.utils.enumeration.IErrorEnumId;
public enum ExtDBImporterError implements IErrorEnumId {
crossRateNotValid(10002L),//todo код для crossRateNotValid??? Используется?
;
private final Long id;
ExtDBImporterError(Long id) {
this.id = id;
}
@Override
public Long getId() {
return id;
}
}

View file

@ -1,19 +0,0 @@
package ru.spcex.clearing.extdb.importer.error;
public class ModuleInitializeException extends RuntimeException {
public ModuleInitializeException() {
}
public ModuleInitializeException(String message) {
super(message);
}
public ModuleInitializeException(String message, Throwable cause) {
super(message, cause);
}
public ModuleInitializeException(Throwable cause) {
super(cause);
}
}

View file

@ -1,185 +0,0 @@
package ru.spcex.clearing.extdb.importer.services;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import ru.clearing.classes.statics.data.misc.SCrossRate;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.enumeration.IMessageResolver;
import java.math.BigDecimal;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.time.Instant;
import java.time.LocalDate;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Supplier;
import static ru.spcex.clearing.extdb.importer.error.ExtDBImporterError.crossRateNotValid;
@Service
@EnableScheduling
public class ExtDBImporterService {
private final Logger log = LoggerFactory.getLogger(getClass());
private final Imdg<SCrossRate> sCrossRateImdg;
private final JdbcTemplate jdbcTemplate;
private final Supplier<KafkaSender> kafka;
private final IMessageResolver messageResolver;
@Value("${extdb-importer.database.schema:dbo}")
private String schema;
public ExtDBImporterService(ImdgProvider imdgProvider, JdbcTemplate jdbcTemplate, Supplier<KafkaSender> kafka, IMessageResolver messageResolver) {
imdgProvider.waitAvailable();
this.sCrossRateImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SCrossRate, SCrossRate.class);
this.jdbcTemplate = jdbcTemplate;
this.kafka = kafka;
this.messageResolver = messageResolver;
}
@Scheduled(cron = "${extdb-importer.cron.load-from-db-cron}")
public synchronized void run() {
process(false);
}
protected String createSelectSQL() {
SCrossRate maxCrossRate = sCrossRateImdg.aggregateByMax(
"date",
sCrossRateImdg.predicateBuilder().notNull("date")
);
LocalDate maxDate;
if (maxCrossRate == null || maxCrossRate.getDate() == null) {
maxDate = LocalDate.of(2024, 1, 1);
log.trace("Mo record in SCrossRate/ use default maxDate={}", maxDate);
} else {
maxDate = maxCrossRate.getDate();
log.trace("Found record in SCrossRate, maxDate={}", maxDate);
}
if (maxDate.isAfter(LocalDate.now())) {
log.warn("maxDate={} too high, set current date", maxDate);
maxDate = LocalDate.now();
}
return String.format("SELECT * FROM %s.crossRate where date>='%s'",
schema, maxDate);
}
public synchronized void process(boolean byCommand) {
log.debug("Start process import SCrossRate from DB. byCommand={}", byCommand);
String sql = createSelectSQL();
Collection<SCrossRate> crossRatesFromDB = jdbcTemplate.query(sql,
(resultSet, i) -> readSCrossRate(resultSet));
Instant currentInstant = Instant.now();
log.debug("load from DB SCrossRate \"{}\": {}", sql, crossRatesFromDB.size());
int created = 0;
int updated = 0;
for (SCrossRate crossRateDb : crossRatesFromDB) {
if (isValidCrossRate(crossRateDb)/* && fillNessessaryFields(crossRate)*/) {
SCrossRate sCrossRate = getSCrossRateFromImdg(crossRateDb, sCrossRateImdg);
if (sCrossRate != null && byCommand) {
// Обновление всех полей объекта из БД
crossRateDb.setId(sCrossRate.getId());
crossRateDb.setCreated(sCrossRate.getCreated());
crossRateDb.setUpdated(currentInstant);
sCrossRateImdg.update(crossRateDb);
updated++;
} else if (sCrossRate == null) {
// Создание объекта из БД
crossRateDb.setCreated(currentInstant);
crossRateDb.setUpdated(currentInstant);
sCrossRateImdg.insert(crossRateDb);
created++;
}
// В extDb нет таких полей, заполнить:
crossRateDb.setGenerationTime(currentInstant);
crossRateDb.setGenerationId(makeGenerationId(crossRateDb.getDate(), crossRateDb.getCurrCode()));
} else {
log.warn(messageResolver.resolve(new EnumMessage(crossRateNotValid, crossRateDb.getCurrCode())));
}
}
log.debug("Created {} new SCrossRate, {} updated.", created, updated);
if (created > 0 || updated > 0) {
if (byCommand) {
log.debug("Successfully import SCrossRate from DB by command.");
} else {
log.debug("Successfully import SCrossRate from DB by scheduled.");
}
// CrossRatesImportedRequest importRequest = new CrossRatesImportedRequest();
// kafka.get().sendRequestToQueue(Consts.S_CROSS_RATES_IMPORTED, importRequest);
} else {
log.debug("No SCrossRate were created or updated from DB. Kafka command will not be send");
}
}
protected Long makeGenerationId(LocalDate date, String currCode) {
try {
long d = date.getYear() * 1_00_00L + date.getMonthValue() * 1_00L + date.getDayOfMonth();
currCode = currCode.trim();
if (!currCode.isEmpty()) {
int l = currCode.length();
long cc = Long.parseLong(currCode);
if (cc < 0) {
cc = -cc;
l--;
}
for (int i = 0; i < l; i++) d *= 10L; // d = d * (int) Math.pow(10, currCode.length());
d += cc;
}
return d;
} catch (Exception e) {
log.warn("Unparseable date={} and currCode={} - can not make number GenerationId",
date, currCode);
return null;
}
}
public SCrossRate getSCrossRateFromImdg(SCrossRate crossRateDb, Imdg<SCrossRate> sCrossRateImdg) {
Map<String, Comparable<?>> query = new HashMap<>();
query.put("date", crossRateDb.getDate());
query.put("currCode", crossRateDb.getCurrCode());
query.put("currency", crossRateDb.getCurrency());
return sCrossRateImdg.getFirstObjectByFieldValues(query);
}
private boolean isValidCrossRate(SCrossRate crossRate) {
return crossRate.getDate() != null
&& (StringUtils.hasText(crossRate.getCurrCode())
|| StringUtils.hasText(crossRate.getCurrency()));
}
public SCrossRate readSCrossRate(ResultSet resultSet) throws SQLException {
SCrossRate object = new SCrossRate();
object.setDate(getLocalDateFromSqlDate(resultSet, "DATE"));
object.setCurrency(resultSet.getObject("CURRENCY", String.class));
object.setCurrCode(resultSet.getObject("CURRCODE", String.class));
object.setFaceValue(resultSet.getObject("FACEVALUE", BigDecimal.class));
object.setRate(resultSet.getObject("RATE", BigDecimal.class));
object.setUnitRate(resultSet.getObject("UNITRATE", BigDecimal.class));
return object;
}
private Instant getInstantFromTimestamp(ResultSet rs, String column) throws SQLException {
Timestamp date = rs.getTimestamp(column);
return date != null ? date.toInstant() : null;
}
private LocalDate getLocalDateFromSqlDate(ResultSet rs, String column) throws SQLException {
Date date = rs.getDate(column);
return date != null ? date.toLocalDate() : null;
}
}

View file

@ -1,32 +0,0 @@
package ru.spcex.clearing.extdb.importer.services;
import org.apache.kafka.clients.consumer.Consumer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
import ru.spcex.platform.enumeration.Task;
@Service
public class LauncherCommandReceiver extends QueueConsumer implements InitializingBean {
private final Logger log = LoggerFactory.getLogger(getClass());
private final ExtDBImporterService importer;
@Autowired
public LauncherCommandReceiver(Consumer<String, Object> kafkaQueue,
ExtDBImporterService importer) {
super(kafkaQueue);
this.importer = importer;
}
@Override
public void afterPropertiesSet() {
callback(LauncherCommandRequest.class)
.setConsumer(action -> importer.process(true))
.forDestination(Task.getCurrencyRates.topic(), callbacks::put); // CBRR
init();
}
}

View file

@ -1,30 +0,0 @@
spring.main.web-application-type=none
#extdb-importer.cron.load-from-db-cron=0 0/5 * * * ? - каждые 5 минут
extdb-importer.cron.load-from-db-cron=0 0/5 * * * ?
extdb-importer.database.login=CR_user
extdb-importer.database.password=Crossrate
extdb-importer.database.schema=dbo
extdb-importer.database.url=jdbc:sqlserver://10.200.200.144:1433;database=CBRInfo;
extdb-importer.database.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
extdb-importer.hazelcast.cluster-members=127.0.0.1:5701
extdb-importer.hazelcast.login=dev
extdb-importer.hazelcast.password=dev-pass
extdb-importer.kafka-consumer.bootstrap-servers=localhost:9092
extdb-importer.kafka-consumer.group-id=dev-group-extdb-importer
extdb-importer.kafka-consumer.enable-auto-commit=false
extdb-importer.kafka-consumer.session-timeout-ms=30000
extdb-importer.kafka-consumer.auto-offset-reset=latest
extdb-importer.kafka-consumer.linger-ms=1
extdb-importer.kafka-consumer.buffer-memory=33554432
extdb-importer.kafka-producer.bootstrap-servers=localhost:9092
extdb-importer.kafka-producer.acks=all
extdb-importer.kafka-producer.retries=0
extdb-importer.kafka-producer.batch-size=16384
extdb-importer.kafka-producer.linger-ms=1
extdb-importer.kafka-producer.buffer-memory=33554432

View file

@ -1,56 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_PATH" value="./log" />
<property name="FILE_NAME" value="extdb-importer" />
<property name="CONSOLE_LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n" />
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<!-- first FILE TEXT appender -->
<appender name="TEXT_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-text.log</file>
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${FILE_LOG_PATTERN}</Pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-text.%d{yyyy-MM-dd}.%i.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<!-- second FILE JSON appender -->
<appender name="JSON_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-json.log</file>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-json.%d{yyyy-MM-dd}.%i.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<root level="info">
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
</root>
<logger name="ru.spcex" level="debug" additivity="false">
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
<!-- <appender-ref ref="CONSOLE"/> -->
</logger>
</configuration>

View file

@ -1,57 +0,0 @@
package ru.spcex.clearing.extdb.importer;
import com.hazelcast.core.Hazelcast;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import ru.clearing.classes.statics.data.misc.SCrossRate;
import ru.spcex.clearing.extdb.importer.services.ExtDBImporterService;
import ru.spcex.clearing.extdb.importer.services.LauncherCommandReceiver;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.test.config.ImdgTestConfig;
import ru.spcex.clearing.test.config.KafkaTestConfig;
import ru.spcex.clearing.extdb.importer.config.ErrorResolverConfig;
import ru.spcex.clearing.extdb.importer.config.DbTestConnectionConfig;
import ru.spcex.clearing.extdb.importer.config.settings.ImportExtDBServiceSettings;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID;
import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId;
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {
DbTestConnectionConfig.class,
ErrorResolverConfig.class,
ImportExtDBServiceSettings.class,
LauncherCommandReceiver.class,
ExtDBImporterService.class,
ImdgTestConfig.class,
KafkaTestConfig.class})
public abstract class AbstractServiceTest {
protected static final long id = currentID.getAndIncrement();
protected Imdg<SCrossRate> sCrossRateImdg;
@Autowired
@Qualifier("kafkaTestTemplate")
protected KafkaTemplate<String, Object> kafkaTemplate;
@Autowired
@Qualifier("hazelcastServiceTest")
protected ImdgProvider imdgProvider;
protected void init() {
waitAvailableImdgProviderAndAddAdminWithDefaultId();
this.sCrossRateImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SCrossRate, SCrossRate.class);
}
@AfterAll
static void shutdown() {
Hazelcast.shutdownAll();
}
}

View file

@ -1,55 +0,0 @@
package ru.spcex.clearing.extdb.importer.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.SingleConnectionDataSource;
import ru.spcex.clearing.extdb.importer.error.ModuleInitializeException;
import javax.sql.DataSource;
import java.sql.Connection;
@SuppressWarnings("UnnecessaryLocalVariable")
@Configuration
public class DbTestConnectionConfig {
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Bean(destroyMethod = "destroy")
public SingleConnectionDataSource dataSource() {
String login = "CR_user";
String password = "Crossrate";
String dbUrl = "jdbc:sqlserver://10.200.200.144:1433;database=CBRInfo";
SingleConnectionDataSource cpds = new SingleConnectionDataSource();
try {
cpds.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (Exception ue) {
throw new RuntimeException(ue);
}
cpds.setUrl(dbUrl);
cpds.setUsername(login);
cpds.setPassword(password);
String OPERATION_DATABASE_CONNECTION_CHECK = String.format("Database [%s] connection check", dbUrl);
try {
Connection conn = cpds.getConnection();
// conn.close();
log.info("{}: success", OPERATION_DATABASE_CONNECTION_CHECK);
return cpds;
} catch (Throwable e) {
String msg = String.format("%s: failed: %s -> %s",
OPERATION_DATABASE_CONNECTION_CHECK, e.getClass().getSimpleName(), e.getMessage());
log.error(msg);
throw new ModuleInitializeException(msg, e);
}
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
return jdbcTemplate;
}
}

View file

@ -1,174 +0,0 @@
package ru.spcex.clearing.extdb.importer.services;
import org.apache.kafka.clients.consumer.MockConsumer;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import ru.clearing.classes.statics.data.misc.SCrossRate;
import ru.spcex.clearing.extdb.importer.AbstractServiceTest;
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
import ru.spcex.clearing.test.MatcherFactory;
import ru.spcex.platform.enumeration.Task;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.iml.hazelcast.adapter.ImdgHazelcast;
import javax.annotation.PostConstruct;
import java.math.BigDecimal;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDate;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.mockito.Mockito.verify;
import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator;
import static ru.spcex.clearing.test.TestUtils.*;
import static ru.spcex.clearing.test.config.KafkaTestConfig.getCaptor;
class ExtDBImporterServiceTest extends AbstractServiceTest {
public static final MatcherFactory.Matcher<SCrossRate> S_CROSS_RATE_MATCHER = usingIgnoringFieldsComparator();
@Autowired
LauncherCommandReceiver launcherCommandReceiver;
@Autowired
ExtDBImporterService extDBImporterService;
@PostConstruct
public void init() {
super.init();
}
@BeforeAll
static void setProperty() {
Path path = Paths.get("src", "main", "resources");
String currentPath = path.toAbsolutePath().toString();
System.setProperty("spring.config.location", currentPath);
}
@BeforeEach
private void prepare() {
clearAllInImdg(sCrossRateImdg);
}
/**
* {@link ExtDBImporterService#process(boolean)}<br>
* Тест проверяет обновление сущности {@link SCrossRate}.<br>
* Входной запрос {@link LauncherCommandRequest}:<br>
*/
@Disabled //для работы теста нужна тестовая база Microsoft SQL с данными
@Test
void process_by_queue() throws InterruptedException {
SCrossRate sCrossRate = getSCrossRate();
Long id = sCrossRateImdg.insert(sCrossRate);
addRecordToKafka((MockConsumer) launcherCommandReceiver.getConsumer(), Task.getCurrencyRates.topic(), 0, 1, getJsonStringForNew(new LauncherCommandRequest(), 0));
//waiting for kafka producer send message
// ArgumentCaptor<ProducerRecord> captor = getCaptor(kafkaTemplate);
// verify(kafkaTemplate, timeout(30_000L).times(1))
// .send(captor.capture());
Thread.sleep(1000L);
SCrossRate sCrossRates = extDBImporterService.getSCrossRateFromImdg(sCrossRate, sCrossRateImdg);
assertEquals(sCrossRates.getId(), id);
}
/**
* {@link ExtDBImporterService#process(boolean)}<br>
* Тест проверяет обновление сущности {@link SCrossRate}.<br>
* Входной запрос {@link LauncherCommandRequest}:<br>
*/
@Disabled //для работы теста нужна тестовая база Microsoft SQL с данными
@Test
void process_direct_call() throws InterruptedException {
SCrossRate sCrossRate = getSCrossRate();
sCrossRate.setDate(LocalDate.of(2024,2,13));
Long id = sCrossRateImdg.insert(sCrossRate);
assertEquals(1, sCrossRateImdg.size());
extDBImporterService.process(true);
assertEquals(6, sCrossRateImdg.size()); // резуьтат зависит от внешней тестовой базы
}
/**
* {@link ExtDBImporterService#createSelectSQL()}<br>
* Тест проверяет построение SQL.<br>
* Входные данные {@link SCrossRate} в sCrossRateImdg<br>
*/
@Test
void createSelectSQL() {
((ImdgHazelcast) sCrossRateImdg).clear();
String sql = extDBImporterService.createSelectSQL();
assertEquals("SELECT * FROM dbo.crossRate where date>='2024-01-01'", sql);
{
SCrossRate sCrossRate = getSCrossRate();
sCrossRate.setDate(LocalDate.of(2024, 2, 13));
Long id = sCrossRateImdg.insert(sCrossRate);
}
{
SCrossRate sCrossRate = getSCrossRate();
sCrossRate.setDate(LocalDate.of(2024, 1, 15));
Long id = sCrossRateImdg.insert(sCrossRate);
}
sql = extDBImporterService.createSelectSQL();
assertEquals("SELECT * FROM dbo.crossRate where date>='2024-02-13'", sql);
}
/**
* {@link ExtDBImporterService#getSCrossRateFromImdg(SCrossRate, Imdg)}<br>
* Тест проверяет поиск сущности {@link SCrossRate}.<br>
* Входной запрос {@link LauncherCommandRequest}:<br>
*/
@Test
void getSCrossRateFromImdg() {
SCrossRate sCrossRate = getSCrossRate();
Long id = sCrossRateImdg.insert(sCrossRate);
SCrossRate sCrossRateRes = extDBImporterService.getSCrossRateFromImdg(sCrossRate, sCrossRateImdg);
S_CROSS_RATE_MATCHER.assertMatch(sCrossRateRes, sCrossRate);
sCrossRate.setCurrency("no-currency-now");
sCrossRateRes = extDBImporterService.getSCrossRateFromImdg(sCrossRate, sCrossRateImdg);
assertNull(sCrossRateRes);
}
private SCrossRate getSCrossRate() {
SCrossRate sCrossRate = new SCrossRate();
sCrossRate.setDate(LocalDate.of(2024, 2, 8));
sCrossRate.setRate(new BigDecimal("10.1"));
sCrossRate.setUnitRate(new BigDecimal("12.4"));
sCrossRate.setCurrCode("RUB");
sCrossRate.setCurrency("RUB");
return sCrossRate;
}
@Test
void makeGenerationId() {
assertEquals(20240130840L, extDBImporterService.makeGenerationId(
LocalDate.of(2024, 1, 30), " 840 "));
assertEquals(205612311230L, extDBImporterService.makeGenerationId(
LocalDate.of(2056, 12, 31), " 1230 "));
assertEquals(20561231L, extDBImporterService.makeGenerationId(
LocalDate.of(2056, 12, 31), " "));
assertEquals(205612310L, extDBImporterService.makeGenerationId(
LocalDate.of(2056, 12, 31), "0"));
assertEquals(205612315L, extDBImporterService.makeGenerationId(
LocalDate.of(2056, 12, 31), "-5"));
assertEquals(null, extDBImporterService.makeGenerationId(
LocalDate.of(2056, 12, 31), " - "));
assertEquals(null, extDBImporterService.makeGenerationId(
LocalDate.of(2056, 12, 31), null));
assertEquals(null, extDBImporterService.makeGenerationId(
null, " 840 "));
}
}

View file

@ -61,14 +61,6 @@
<groupId>ru.spcex.clearing</groupId>
<artifactId>clearing-validation</artifactId>
</dependency>
<!-- special logging -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.0.1</version>
</dependency>
<!-- TEST -->
<dependency>
<groupId>org.springframework.boot</groupId>

View file

@ -53,7 +53,6 @@ public class OperationService {
}
AssetOperationApprovalRequest assetOperationApprovalRequest = new AssetOperationApprovalRequest();
assetOperationApprovalRequest.setApprovals(responsesToClearing);
assetOperationApprovalRequest.setInitialRequestId(requestId);
kafkaSender.sendRequestToQueue(Consts.ASSET_OPERATION_APPROVAL, assetOperationApprovalRequest);
sentAssets.remove(requestId);
}

View file

@ -1,56 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_PATH" value="./log" />
<property name="FILE_NAME" value="gateway-api" />
<property name="CONSOLE_LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n" />
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n</Pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./logs/gateway-api.log</file>
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<!-- first FILE TEXT appender -->
<appender name="TEXT_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-text.log</file>
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${FILE_LOG_PATTERN}</Pattern>
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n</Pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-text.%d{yyyy-MM-dd}.%i.gz
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>
./logs/gateway-api.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<!-- second FILE JSON appender -->
<appender name="JSON_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-json.log</file>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-json.%d{yyyy-MM-dd}.%i.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>500MB</maxFileSize>
</triggeringPolicy>
</appender>
<root level="info">
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
</root>
<root level="warn">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<logger name="ru.spcex" level="debug" additivity="false">
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</logger>
<!--<logger name="org.springframework" level="info" />-->
</configuration>

View file

@ -90,17 +90,6 @@
<artifactId>clearing-validation</artifactId>
</dependency>
<!-- special logging -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.0.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- TEST -->
<dependency>
<groupId>org.springframework</groupId>

View file

@ -1,56 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_PATH" value="./log" />
<property name="FILE_NAME" value="imdg-hist" />
<property name="CONSOLE_LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n" />
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n</Pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./logs/imdg-hist.log</file>
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<!-- first FILE TEXT appender -->
<appender name="TEXT_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-text.log</file>
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${FILE_LOG_PATTERN}</Pattern>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n</Pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-text.%d{yyyy-MM-dd}.%i.gz
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>
./logs/imdg-hist.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<!-- second FILE JSON appender -->
<appender name="JSON_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-json.log</file>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-json.%d{yyyy-MM-dd}.%i.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>500MB</maxFileSize>
</triggeringPolicy>
</appender>
<root level="info">
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
</root>
<root level="warn">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<logger name="ru.spcex" level="debug" additivity="false">
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</logger>
</configuration>

View file

@ -57,17 +57,6 @@
<artifactId>c3p0</artifactId>
</dependency>
<!-- special logging -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.0.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- IMDG для MapStore -->
<dependency>
<groupId>com.hazelcast</groupId>

View file

@ -52,12 +52,14 @@ public class RegistryMapStore extends TemplateMapStore<Registry> {
LocalDate today = LocalDate.now();
log.debug("loadAllKeys from {} with condition and today {}", getTableName(), today);
List<Long> keys;
String sql = "select id from " + getTableName() + " WHERE registry_status<>'OK' or registry_status='OK' " +
"and (clearing_date = ? OR updated_at::date = ?)";
String sql = "select id from " + getTableName() + " WHERE registry_designation='A' OR " +
"(registry_designation='D' AND (clearing_date = ? OR registry_status='PROC' OR registry_status='MNG')) OR" +
"((registry_designation='C' OR registry_designation='L') AND clearing_date=?) OR" +
"((registry_designation='O' OR registry_designation='T') AND (clearing_date=? OR registry_status='PROC' OR registry_status='MNG'))";
try {
keys = jdbcTemplate.query(sql,
(resultSet, i) -> resultSet.getLong("id"),
new Object[]{today, today});
new Object[]{today, today, today});
} catch (Throwable e) {
log.error("At load keys from {} (sql \"{}\"): {}", getTableName(), sql, ExceptionUtils.getStackTrace(e));
throw e;

View file

@ -1,78 +0,0 @@
package ru.spcex.clearing.imdg.object;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.clearing.classes.statics.data.misc.SCrossRate;
import ru.spcex.clearing.imdg.base.TemplateMapStore;
import ru.spcex.platform.utils.time.TimeUtil;
import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
@Component
public class SCrossRateMapStore extends TemplateMapStore<SCrossRate> {
public SCrossRateMapStore(JdbcTemplate jdbcTemplate) {
super(jdbcTemplate);
}
@Override
public String getMapName() {
return IMDGDistributedNames.Map_SCrossRate;
}
@Override
public String getTableName() {
return "S_CROSS_RATE";
}
@Override
public String[] getFields() {
return new String[]{
"ID", "DATE", "CURRENCY", "CURR_CODE", "FACE_VALUE", "RATE", "UNIT_RATE", "GENERATION_TIME", "GENERATION_ID", "CREATED_AT", "UPDATED_AT"
};
}
public String[] getIndexingField() {
return new String[]{"date"};
}
@Override
public SCrossRate objectReader(ResultSet resultSet) throws SQLException {
SCrossRate object = new SCrossRate();
object.setId(resultSet.getObject("ID", Long.class));
object.setDate(getLocalDateFromSqlDate(resultSet, "DATE"));
object.setCurrency(resultSet.getObject("CURRENCY", String.class));
object.setCurrCode(resultSet.getObject("CURR_CODE", String.class));
object.setFaceValue(resultSet.getObject("FACE_VALUE", BigDecimal.class));
object.setRate(resultSet.getObject("RATE", BigDecimal.class));
object.setUnitRate(resultSet.getObject("UNIT_RATE", BigDecimal.class));
object.setGenerationTime(getInstantFromTimestamp(resultSet, "GENERATION_TIME"));
object.setGenerationId(resultSet.getObject("GENERATION_ID", Long.class));
object.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT"));
object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT"));
return object;
}
@Override
public Object[] objectToField(SCrossRate object) {
Object[] args = new Object[]{
object.getId(),
TimeUtil.toDateFromLocalDate(object.getDate()),
object.getCurrency(),
object.getCurrCode(),
object.getFaceValue(),
object.getRate(),
object.getUnitRate(),
TimeUtil.toDateFromInstant(object.getGenerationTime()),
object.getGenerationId(),
TimeUtil.toDateFromInstant(object.getCreated()),
TimeUtil.toDateFromInstant(object.getUpdated())
};
return args;
}
}

View file

@ -1,56 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_PATH" value="./log" />
<property name="FILE_NAME" value="imdg" />
<property name="CONSOLE_LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n" />
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n</Pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./logs/imdg.log</file>
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<!-- first FILE TEXT appender -->
<appender name="TEXT_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-text.log</file>
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${FILE_LOG_PATTERN}</Pattern>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n</Pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-text.%d{yyyy-MM-dd}.%i.gz
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>
./logs/imdg.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<!-- second FILE JSON appender -->
<appender name="JSON_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-json.log</file>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-json.%d{yyyy-MM-dd}.%i.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>500MB</maxFileSize>
</triggeringPolicy>
</appender>
<root level="info">
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
</root>
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<logger name="ru.spcex" level="debug" additivity="false">
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</logger>
</configuration>

View file

@ -51,13 +51,6 @@
<artifactId>platform-enum</artifactId>
</dependency>
<!-- special logging -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.0.1</version>
</dependency>
<!-- TEST -->
<dependency>
<groupId>org.springframework.boot</groupId>

View file

@ -1,56 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_PATH" value="./log" />
<property name="FILE_NAME" value="lim-exporter" />
<property name="CONSOLE_LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n" />
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>utf-8</charset>
<charset>UTF-8</charset>
<pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- first FILE TEXT appender -->
<appender name="TEXT_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-text.log</file>
<encoder>
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
<Pattern>${FILE_LOG_PATTERN}</Pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-text.%d{yyyy-MM-dd}.%i.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<!-- second FILE JSON appender -->
<appender name="JSON_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${FILE_NAME}-json.log</file>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/${FILE_NAME}-json.%d{yyyy-MM-dd}.%i.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<root level="info">
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./logs/lim-exporter.log</file>
<encoder>
<charset>UTF-8</charset>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>
../logs/lim-exporter.%i.log
</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>500MB</maxFileSize>
</triggeringPolicy>
</appender>
<root level="warn">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<logger name="ru.spcex" level="debug" additivity="false">
<appender-ref ref="TEXT_FILE"/>
<appender-ref ref="JSON_FILE" />
<!-- <appender-ref ref="CONSOLE"/> -->
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</logger>
</configuration>

View file

@ -37,7 +37,6 @@
<module>test-clearing</module>
<module>cleaning-builders</module>
<module>trade-importer</module>
<module>extdb-importer</module>
<module>lim-exporter</module>
<module>swt-exporter</module>
<module>swt-importer</module>

View file

@ -14,7 +14,6 @@
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<poi.version>5.2.5</poi.version>
</properties>
<dependencies>
@ -38,10 +37,6 @@
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-sftp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
@ -56,32 +51,6 @@
<artifactId>test-clearing</artifactId>
<scope>test</scope>
</dependency>
<!-- CSV -->
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.5.2</version>
</dependency>
<!-- XLSX -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
<!-- special logging -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.0.1</version>
</dependency>
</dependencies>
<build>

View file

@ -1,22 +0,0 @@
package ru.spcex.clearing.registry.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import ru.spcex.clearing.registry.config.settings.RegistryServiceSettings;
import java.io.File;
@Configuration
public class RegistryServiceConfig {
@Bean("reportOutDir")
public File outDir(RegistryServiceSettings settings) {
File outFolder = new File(settings.getReportsStore().getLocalTempDir());
if (!outFolder.exists()) {
boolean mkDirOk = outFolder.mkdirs();
if (!mkDirOk) throw new IllegalStateException("Can't create output directory for reports, registry-service was terminated");
} else if (!outFolder.isDirectory()) {
throw new IllegalStateException("Output reports path from settings is not directory!");
}
return outFolder;
}
}

View file

@ -1,100 +0,0 @@
package ru.spcex.clearing.registry.config;
import com.jcraft.jsch.ChannelSftp;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.expression.common.LiteralExpression;
import org.springframework.integration.annotation.Gateway;
import org.springframework.integration.annotation.MessagingGateway;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.dsl.IntegrationFlow;
import org.springframework.integration.dsl.IntegrationFlows;
import org.springframework.integration.file.remote.session.CachingSessionFactory;
import org.springframework.integration.file.remote.session.SessionFactory;
import org.springframework.integration.sftp.gateway.SftpOutboundGateway;
import org.springframework.integration.sftp.outbound.SftpMessageHandler;
import org.springframework.integration.sftp.session.DefaultSftpSessionFactory;
import org.springframework.integration.sftp.session.SftpFileInfo;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageHandler;
import ru.spcex.clearing.registry.config.settings.RegistryServiceSettings;
import java.io.File;
import java.util.List;
import static org.springframework.integration.file.remote.gateway.AbstractRemoteFileOutboundGateway.Command.LS;
@Configuration
public class SFTPReportsConfig {
private final RegistryServiceSettings settings;
public SFTPReportsConfig(RegistryServiceSettings settings) {
this.settings = settings;
}
@Bean("reportsSftpSessionFactory")
public SessionFactory<ChannelSftp.LsEntry> sftpSessionFactory() {
DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
factory.setHost(settings.getReportsStore().getServerIp());
factory.setPort(settings.getReportsStore().getServerPort());
factory.setUser(settings.getReportsStore().getUser());
factory.setPassword(settings.getReportsStore().getPassword());
factory.setAllowUnknownKeys(true);
return new CachingSessionFactory<>(factory);
}
@Bean("reportsSftpHandler")
@ServiceActivator(inputChannel = "reportsToSftpChannel")
public MessageHandler handler(@Qualifier("reportsSftpSessionFactory") SessionFactory<ChannelSftp.LsEntry> sessionFactory) {
SftpMessageHandler handler = new SftpMessageHandler(sessionFactory);
handler.setRemoteDirectoryExpression(new LiteralExpression(settings.getReportsStore().getOutDir()));
handler.setAutoCreateDirectory(true);
handler.setFileNameGenerator(message -> {
if (message.getPayload() instanceof File) {
return ((File) message.getPayload()).getName();
} else {
throw new IllegalArgumentException("File must expected as payload.");
}
});
return handler;
}
@Bean("reportsListSftpChannel")
public MessageChannel listSftpChannel(@Qualifier("reportsSftpHandlerList") MessageHandler handler) {
DirectChannel dc = new DirectChannel();
dc.subscribe(handler);
return dc;
}
@Bean("reportsToSftpChannel")
public MessageChannel toSftpChannel(@Qualifier("reportsSftpHandler") MessageHandler handler) {
DirectChannel dc = new DirectChannel();
dc.subscribe(handler);
return dc;
}
@Bean("reportsSftpHandlerList")
@ServiceActivator(inputChannel = "reportsListSftpChannel")
public MessageHandler handlerList(@Qualifier("reportsSftpSessionFactory") SessionFactory<ChannelSftp.LsEntry> sessionFactory) {
String expression = "'/%s'".formatted(settings.getReportsStore().getOutDir());
return new SftpOutboundGateway(sessionFactory, LS.getCommand(), expression);
}
@Bean("reportsSftpOutboundListFlow")
public IntegrationFlow sftpOutboundListFlow(@Qualifier("reportsSftpSessionFactory") SessionFactory<ChannelSftp.LsEntry> sessionFactory) {
return IntegrationFlows.from("reportsListSftpChannel")
.handle(new SftpOutboundGateway(sessionFactory, "ls", "payload"))
.get();
}
@MessagingGateway(name = "reportsSftpGateway")
public interface ReportsGateway {
@Gateway(requestChannel = "reportsToSftpChannel")
void sendToSftp(File file);
@Gateway(requestChannel = "reportsListSftpChannel")
List<SftpFileInfo> listFiles(String dir);
}
}

View file

@ -14,8 +14,6 @@ public class RegistryServiceSettings {
private HazelcastClientParams hazelcast;
private KafkaConsumerSettings kafkaConsumer;
private KafkaProducerSettings kafkaProducer;
private ReportsStore reportsStore;
private boolean csvMode = false;
public HazelcastClientParams getHazelcast() {
return hazelcast;
@ -40,20 +38,4 @@ public class RegistryServiceSettings {
public void setKafkaProducer(KafkaProducerSettings kafkaProducer) {
this.kafkaProducer = kafkaProducer;
}
public ReportsStore getReportsStore() {
return reportsStore;
}
public void setReportsStore(ReportsStore reportsStore) {
this.reportsStore = reportsStore;
}
public boolean isCsvMode() {
return csvMode;
}
public void setCsvMode(boolean csvMode) {
this.csvMode = csvMode;
}
}

View file

@ -1,68 +0,0 @@
package ru.spcex.clearing.registry.config.settings;
public class ReportsStore {
private String outDir;
private String localTempDir;
private String user;
private String password;
private String serverIp;
private int serverPort;
public boolean isDeleteAfterSend() {
return deleteAfterSend;
}
public void setDeleteAfterSend(boolean deleteAfterSend) {
this.deleteAfterSend = deleteAfterSend;
}
private boolean deleteAfterSend;
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getServerIp() {
return serverIp;
}
public void setServerIp(String serverIp) {
this.serverIp = serverIp;
}
public int getServerPort() {
return serverPort;
}
public void setServerPort(int serverPort) {
this.serverPort = serverPort;
}
public String getOutDir() {
return outDir;
}
public void setOutDir(String outDir) {
this.outDir = outDir;
}
public String getLocalTempDir() {
return localTempDir;
}
public void setLocalTempDir(String localTempDir) {
this.localTempDir = localTempDir;
}
}

View file

@ -1,28 +0,0 @@
package ru.spcex.clearing.registry.reports;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.spcex.clearing.registry.config.SFTPReportsConfig;
import java.io.File;
import java.util.Collection;
public class ReportUtils {
private final static Logger log = LoggerFactory.getLogger(ReportUtils.class);
public static void sendFilesToSftp(Collection<File> files,
SFTPReportsConfig.ReportsGateway reportsGateway,
boolean deleteAfterSend) {
for (File file : files) {
reportsGateway.sendToSftp(file);
if (deleteAfterSend) {
boolean delete = file.delete();
if (!delete) {
log.warn("Can't delete temp file {}", file.getAbsolutePath());
}
}
}
}
}

View file

@ -1,111 +0,0 @@
package ru.spcex.clearing.registry.reports.bean;
import com.opencsv.bean.CsvBindByName;
import com.opencsv.bean.CsvBindByPosition;
import com.opencsv.bean.CsvDate;
import com.opencsv.bean.CsvNumber;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
public class DepoBalanceRegisterReport implements FileReport {
@CsvBindByName(column = "Наименование Расчетного депозитария")
@CsvBindByPosition(position = 0)
private String houseName;
@CsvBindByName(column = "Номер отчета")
@CsvBindByPosition(position = 1)
private String number;
@CsvBindByName(column = "Дата")
@CsvBindByPosition(position = 2)
@CsvDate(value = "dd.MM.yyyy")
private LocalDate date;
@CsvBindByName(column = "Время")
@CsvBindByPosition(position = 3)
@CsvDate(value = "HH:mm:ss")
private LocalDateTime time;
@CsvBindByName(column = "Краткое наименование УК")
@CsvBindByPosition(position = 4)
private String company;
@CsvBindByName(column = "Номер торгового раздела счета депо/ код раздела «к размещению/выкупу»")
@CsvBindByPosition(position = 5)
private String account;
@CsvBindByName(column = "Код ЦБ")
@CsvBindByPosition(position = 6)
private String security;
@CsvBindByName(column = "Количество ЦБ")
@CsvBindByPosition(position = 7)
@CsvNumber(value = "#0", writeFormat = "#0")
private BigDecimal sum;
public String getHouseName() {
return houseName;
}
public void setHouseName(String houseName) {
this.houseName = houseName;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public LocalDate getDate() {
return date;
}
public void setDate(LocalDate date) {
this.date = date;
}
public LocalDateTime getTime() {
return time;
}
public void setTime(LocalDateTime time) {
this.time = time;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getSecurity() {
return security;
}
public void setSecurity(String security) {
this.security = security;
}
public BigDecimal getSum() {
return sum;
}
public void setSum(BigDecimal sum) {
this.sum = sum;
}
}

View file

@ -1,148 +0,0 @@
package ru.spcex.clearing.registry.reports.bean;
import com.opencsv.bean.CsvBindByName;
import com.opencsv.bean.CsvBindByPosition;
import com.opencsv.bean.CsvDate;
import com.opencsv.bean.CsvNumber;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
public class DepoPaymentInstructionRegisterReport implements FileReport {
@CsvBindByName(column = "Номер распоряжения")
@CsvBindByPosition(position = 0)
private Long number;
@CsvBindByName(column = "Дата распоряжения")
@CsvBindByPosition(position = 1)
@CsvDate(value = "dd.MM.yyyy")
private LocalDate date;
@CsvBindByName(column = "Время формирования")
@CsvBindByPosition(position = 2)
@CsvDate(value = "HH:mm:ss")
private LocalDateTime time;
@CsvBindByName(column = "Номер торгового банковского/клирингового счета списания")
@CsvBindByPosition(position = 3)
private String accountSender;
@CsvBindByName(column = "Наименование владельца счета списания")
@CsvBindByPosition(position = 4)
private String sender;
@CsvBindByName(column = "Код владельца счета списания")
@CsvBindByPosition(position = 5)
private String codeSender;
@CsvBindByName(column = "Номер торгового банковского/клирингового счета зачисления")
@CsvBindByPosition(position = 6)
private String accountAddressee;
@CsvBindByName(column = "Наименование владельца счета зачисления")
@CsvBindByPosition(position = 7)
private String addressee;
@CsvBindByName(column = "Код владельца счета зачисления")
@CsvBindByPosition(position = 8)
private String codeAddressee;
@CsvBindByName(column = "Код ЦБ")
@CsvBindByPosition(position = 9)
private String security;
@CsvBindByName(column = "Количество ЦБ")
@CsvBindByPosition(position = 10)
@CsvNumber(value = "#0", writeFormat = "#0")
private BigDecimal amount;
public Long getNumber() {
return number;
}
public void setNumber(Long number) {
this.number = number;
}
public LocalDate getDate() {
return date;
}
public void setDate(LocalDate date) {
this.date = date;
}
public LocalDateTime getTime() {
return time;
}
public void setTime(LocalDateTime time) {
this.time = time;
}
public String getAccountSender() {
return accountSender;
}
public void setAccountSender(String accountSender) {
this.accountSender = accountSender;
}
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public String getCodeSender() {
return codeSender;
}
public void setCodeSender(String codeSender) {
this.codeSender = codeSender;
}
public String getAccountAddressee() {
return accountAddressee;
}
public void setAccountAddressee(String accountAddressee) {
this.accountAddressee = accountAddressee;
}
public String getAddressee() {
return addressee;
}
public void setAddressee(String addressee) {
this.addressee = addressee;
}
public String getCodeAddressee() {
return codeAddressee;
}
public void setCodeAddressee(String codeAddressee) {
this.codeAddressee = codeAddressee;
}
public String getSecurity() {
return security;
}
public void setSecurity(String security) {
this.security = security;
}
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
}

View file

@ -1,223 +0,0 @@
package ru.spcex.clearing.registry.reports.bean;
import com.opencsv.bean.CsvBindByName;
import com.opencsv.bean.CsvBindByPosition;
import com.opencsv.bean.CsvDate;
import com.opencsv.bean.CsvNumber;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
public class ExecutionRegisterReport implements FileReport {
@CsvBindByName(column = "Наименование биржи")
@CsvBindByPosition(position = 0)
private String clearingOrganization;
@CsvBindByName(column = "Дата заключения сделки")
@CsvBindByPosition(position = 1)
@CsvDate(value = "dd.MM.yyyy")
private LocalDate tradingDate;
@CsvBindByName(column = "Дата исполнения")
@CsvBindByPosition(position = 2)
@CsvDate(value = "dd.MM.yyyy")
private LocalDate settlementDate;
@CsvBindByName(column = "Идентификационный номер сделки в Торговой системе")
@CsvBindByPosition(position = 3)
private Long exchangeExecutionId;
@CsvBindByName(column = "Время заключения сделки в Торговой системе")
@CsvBindByPosition(position = 4)
@CsvDate(value = "HH:mm:ss")
private LocalDateTime exchangeExecutionTime;
@CsvBindByName(column = "Код БИ")
@CsvBindByPosition(position = 5)
private String security;
@CsvBindByName(column = "Дата возврата")
@CsvBindByPosition(position = 6)
@CsvDate(value = "dd.MM.yyyy")
private LocalDate refundDate;
@CsvBindByName(column = "Код УК - продавца")
@CsvBindByPosition(position = 7)
private String sellerCode;
@CsvBindByName(column = "Наименование УК - продавца")
@CsvBindByPosition(position = 8)
private String seller;
@CsvBindByName(column = "ТКР продавца")
@CsvBindByPosition(position = 9)
private String sellerTkr;
@CsvBindByName(column = "Клиринговый код покупателя")
@CsvBindByPosition(position = 10)
private String buyerCode;
@CsvBindByName(column = "Наименование компании-покупателя")
@CsvBindByPosition(position = 11)
private String buyer;
@CsvBindByName(column = "Торгово-клиринговый регистр покупателя")
@CsvBindByPosition(position = 12)
private String buyerTkr;
@CsvBindByName(column = "Сумма сделки")
@CsvBindByPosition(position = 13)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal amount;
@CsvBindByName(column = "Количество ценных бумаг")
@CsvBindByPosition(position = 14)
@CsvNumber(value = "#0", writeFormat = "#0")
private BigDecimal quantity;
@CsvBindByName(column = "Статус")
@CsvBindByPosition(position = 15)
private String status;
@CsvBindByName(column = "Код режима")
@CsvBindByPosition(position = 16)
private String market;
public String getClearingOrganization() {
return clearingOrganization;
}
public void setClearingOrganization(String clearingOrganization) {
this.clearingOrganization = clearingOrganization;
}
public LocalDate getTradingDate() {
return tradingDate;
}
public void setTradingDate(LocalDate tradingDate) {
this.tradingDate = tradingDate;
}
public LocalDate getSettlementDate() {
return settlementDate;
}
public void setSettlementDate(LocalDate settlementDate) {
this.settlementDate = settlementDate;
}
public Long getExchangeExecutionId() {
return exchangeExecutionId;
}
public void setExchangeExecutionId(Long exchangeExecutionId) {
this.exchangeExecutionId = exchangeExecutionId;
}
public LocalDateTime getExchangeExecutionTime() {
return exchangeExecutionTime;
}
public void setExchangeExecutionTime(LocalDateTime exchangeExecutionTime) {
this.exchangeExecutionTime = exchangeExecutionTime;
}
public String getSecurity() {
return security;
}
public void setSecurity(String security) {
this.security = security;
}
public LocalDate getRefundDate() {
return refundDate;
}
public void setRefundDate(LocalDate refundDate) {
this.refundDate = refundDate;
}
public String getSellerCode() {
return sellerCode;
}
public void setSellerCode(String sellerCode) {
this.sellerCode = sellerCode;
}
public String getSeller() {
return seller;
}
public void setSeller(String seller) {
this.seller = seller;
}
public String getSellerTkr() {
return sellerTkr;
}
public void setSellerTkr(String sellerTkr) {
this.sellerTkr = sellerTkr;
}
public String getBuyerCode() {
return buyerCode;
}
public void setBuyerCode(String buyerCode) {
this.buyerCode = buyerCode;
}
public String getBuyer() {
return buyer;
}
public void setBuyer(String buyer) {
this.buyer = buyer;
}
public String getBuyerTkr() {
return buyerTkr;
}
public void setBuyerTkr(String buyerTkr) {
this.buyerTkr = buyerTkr;
}
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
public BigDecimal getQuantity() {
return quantity;
}
public void setQuantity(BigDecimal quantity) {
this.quantity = quantity;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getMarket() {
return market;
}
public void setMarket(String market) {
this.market = market;
}
}

View file

@ -1,4 +0,0 @@
package ru.spcex.clearing.registry.reports.bean;
public interface FileReport {
}

View file

@ -1,133 +0,0 @@
package ru.spcex.clearing.registry.reports.bean;
import com.opencsv.bean.CsvBindByName;
import com.opencsv.bean.CsvBindByPosition;
import com.opencsv.bean.CsvDate;
import com.opencsv.bean.CsvNumber;
import java.math.BigDecimal;
import java.time.LocalDate;
public class LiabilitiesRegistryReport implements FileReport {
@CsvBindByName(column = "имя")
@CsvBindByPosition(position = 0)
private String short_name;
@CsvBindByName(column = "клиринговый код")
@CsvBindByPosition(position = 0)
private String clearing_code;
@CsvBindByName(column = "счет")
@CsvBindByPosition(position = 1)
private String account;
@CsvBindByName(column = "код регистра")
@CsvBindByPosition(position = 2)
private String registry_code;
@CsvBindByName(column = "статус")
@CsvBindByPosition(position = 3)
private String registry_status;
@CsvBindByName(column = "инструмент валюта")
@CsvBindByPosition(position = 4)
private String security_symbol;
@CsvBindByName(column = "баланс")
@CsvBindByPosition(position = 5)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal balance;
@CsvBindByName(column = "дата расчета")
@CsvBindByPosition(position = 6)
@CsvDate(value = "dd.MM.yyyy")
private LocalDate settlement_date;
@CsvBindByName(column = "продукт")
@CsvBindByPosition(position = 7)
private String contract;
@CsvBindByName(column = "тип сессии")
@CsvBindByPosition(position = 8)
private String session_type;
public String getShort_name() {
return short_name;
}
public void setShort_name(String short_name) {
this.short_name = short_name;
}
public String getClearing_code() {
return clearing_code;
}
public void setClearing_code(String clearing_code) {
this.clearing_code = clearing_code;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getRegistry_code() {
return registry_code;
}
public void setRegistry_code(String registry_code) {
this.registry_code = registry_code;
}
public String getRegistry_status() {
return registry_status;
}
public void setRegistry_status(String registry_status) {
this.registry_status = registry_status;
}
public String getSecurity_symbol() {
return security_symbol;
}
public void setSecurity_symbol(String security_symbol) {
this.security_symbol = security_symbol;
}
public BigDecimal getBalance() {
return balance;
}
public void setBalance(BigDecimal balance) {
this.balance = balance;
}
public LocalDate getSettlement_date() {
return settlement_date;
}
public void setSettlement_date(LocalDate settlement_date) {
this.settlement_date = settlement_date;
}
public String getContract() {
return contract;
}
public void setContract(String contract) {
this.contract = contract;
}
public String getSession_type() {
return session_type;
}
public void setSession_type(String session_type) {
this.session_type = session_type;
}
}

View file

@ -1,112 +0,0 @@
package ru.spcex.clearing.registry.reports.bean;
import com.opencsv.bean.CsvBindByName;
import com.opencsv.bean.CsvBindByPosition;
import com.opencsv.bean.CsvDate;
import com.opencsv.bean.CsvNumber;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
public class MoneyBalanceRegisterReport implements FileReport {
@CsvBindByName(column = "Наименование Расчетного депозитария")
@CsvBindByPosition(position = 0)
private String houseName;
@CsvBindByName(column = "Номер отчета")
@CsvBindByPosition(position = 1)
private String number;
@CsvBindByName(column = "Дата")
@CsvBindByPosition(position = 2)
@CsvDate(value = "dd.MM.yyyy")
private LocalDate date;
@CsvBindByName(column = "Время")
@CsvBindByPosition(position = 3)
@CsvDate(value = "HH:mm:ss")
private LocalDateTime time;
@CsvBindByName(column = "Код валюты")
@CsvBindByPosition(position = 4)
private String currency;
@CsvBindByName(column = "Краткое наименование УК")
@CsvBindByPosition(position = 5)
private String company;
@CsvBindByName(column = "Номер торгового /клирингового счета/ счета внутреннего учета СПВБ")
@CsvBindByPosition(position = 6)
private String account;
@CsvBindByName(column = "Остаток денежных средств")
@CsvBindByPosition(position = 7)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal sum;
public String getHouseName() {
return houseName;
}
public void setHouseName(String houseName) {
this.houseName = houseName;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public LocalDate getDate() {
return date;
}
public void setDate(LocalDate date) {
this.date = date;
}
public LocalDateTime getTime() {
return time;
}
public void setTime(LocalDateTime time) {
this.time = time;
}
public String getCurrency() {
return currency;
}
public void setCurrency(String currency) {
this.currency = currency;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public BigDecimal getSum() {
return sum;
}
public void setSum(BigDecimal sum) {
this.sum = sum;
}
}

View file

@ -1,148 +0,0 @@
package ru.spcex.clearing.registry.reports.bean;
import com.opencsv.bean.CsvBindByName;
import com.opencsv.bean.CsvBindByPosition;
import com.opencsv.bean.CsvDate;
import com.opencsv.bean.CsvNumber;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
public class MoneyPaymentInstructionRegisterReport implements FileReport {
@CsvBindByName(column = "Номер распоряжения")
@CsvBindByPosition(position = 0)
private Long number;
@CsvBindByName(column = "Дата распоряжения")
@CsvBindByPosition(position = 1)
@CsvDate(value = "dd.MM.yyyy")
private LocalDate date;
@CsvBindByName(column = "Время формирования")
@CsvBindByPosition(position = 2)
@CsvDate(value = "HH:mm:ss")
private LocalDateTime time;
@CsvBindByName(column = "Номер торгового банковского/клирингового счета списания")
@CsvBindByPosition(position = 3)
private String accountSender;
@CsvBindByName(column = "Наименование владельца счета списания")
@CsvBindByPosition(position = 4)
private String sender;
@CsvBindByName(column = "Код владельца счета списания")
@CsvBindByPosition(position = 5)
private String codeSender;
@CsvBindByName(column = "Номер торгового банковского/клирингового счета зачисления")
@CsvBindByPosition(position = 6)
private String accountAddressee;
@CsvBindByName(column = "Наименование владельца счета зачисления")
@CsvBindByPosition(position = 7)
private String addressee;
@CsvBindByName(column = "Код владельца счета зачисления")
@CsvBindByPosition(position = 8)
private String codeAddressee;
@CsvBindByName(column = "Код валюты")
@CsvBindByPosition(position = 9)
private String currencyCode;
@CsvBindByName(column = "Сумма денежных средств")
@CsvBindByPosition(position = 10)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal sum;
public Long getNumber() {
return number;
}
public void setNumber(Long number) {
this.number = number;
}
public LocalDate getDate() {
return date;
}
public void setDate(LocalDate date) {
this.date = date;
}
public LocalDateTime getTime() {
return time;
}
public void setTime(LocalDateTime time) {
this.time = time;
}
public String getAccountSender() {
return accountSender;
}
public void setAccountSender(String accountSender) {
this.accountSender = accountSender;
}
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public String getCodeSender() {
return codeSender;
}
public void setCodeSender(String codeSender) {
this.codeSender = codeSender;
}
public String getAccountAddressee() {
return accountAddressee;
}
public void setAccountAddressee(String accountAddressee) {
this.accountAddressee = accountAddressee;
}
public String getAddressee() {
return addressee;
}
public void setAddressee(String addressee) {
this.addressee = addressee;
}
public String getCodeAddressee() {
return codeAddressee;
}
public void setCodeAddressee(String codeAddressee) {
this.codeAddressee = codeAddressee;
}
public String getCurrencyCode() {
return currencyCode;
}
public void setCurrencyCode(String currencyCode) {
this.currencyCode = currencyCode;
}
public BigDecimal getSum() {
return sum;
}
public void setSum(BigDecimal sum) {
this.sum = sum;
}
}

View file

@ -1,163 +0,0 @@
package ru.spcex.clearing.registry.reports.builders;
import com.opencsv.CSVWriter;
import com.opencsv.ICSVWriter;
import com.opencsv.bean.*;
import com.opencsv.exceptions.CsvBadConverterException;
import com.opencsv.exceptions.CsvChainedException;
import com.opencsv.exceptions.CsvFieldAssignmentException;
import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.spcex.clearing.registry.reports.bean.FileReport;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.nio.charset.Charset;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
* Класс для построения отчетов в формате CSV
*/
public abstract class CSVReportBuilder<R extends FileReport, I extends SpcexObjectBase> {
protected final Logger log = LoggerFactory.getLogger(getClass());
protected static DateTimeFormatter dateTimeFormatter_YYMMDDHHmmssSSS = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS");
/**
* Имя отчета (для имени файла)
*/
protected abstract String reportName();
/**
* Преобразовать объект в строку отчета
*/
protected abstract R toRow(I input);
/**
* Сортировка строк перед формированием отчета
*/
protected Collection<I> sortInput(Collection<I> input) {
return input;
}
/**
* Сортировка строк после формирования отчета
*/
protected Collection<R> sortOutput(Collection<R> rows) {
return rows;
}
/**
* Название отчета, используется для формирования имени отчета (без указания формата)
*/
protected String getReportFilename() {
return "%s_%s".formatted(reportName(), dateTimeFormatter_YYMMDDHHmmssSSS.format(LocalDateTime.now()));
}
/**
* Формирование отчета на основе объектов
*/
public File buildReport(Collection<I> inputObj, File outFolder, Charset outputEncoding) {
assert outFolder != null && outFolder.isDirectory() && inputObj != null;
List<R> rows = new ArrayList<>(inputObj.size());
inputObj = sortInput(inputObj);
for (I input : inputObj) rows.add(toRow(input));
rows = sortOutput(rows).stream().toList();
File reportFile = new File(outFolder, normalizeFilenameForOS(getReportFilename() + ".csv"));
try (Writer writer = new FileWriter(reportFile, outputEncoding);
ICSVWriter icsvWriter = new CustomCSVWriter(writer)) {
CustomStrategy<R> customStrategy = new CustomStrategy<>();
customStrategy.setType(getReportClass());
StatefulBeanToCsv<R> sbc = new StatefulBeanToCsvBuilder<R>(icsvWriter)
.withMappingStrategy(customStrategy)
.build();
if (!rows.isEmpty()) sbc.write(rows);
else {
// Для записи заголовков в пустой файл
Constructor<? extends R> constructor = Objects.requireNonNull(getReportClass()).getDeclaredConstructor();
R obj = constructor.newInstance();
String[] headers = customStrategy.generateHeader(obj);
writer.write("\"" + String.join("\",\"", headers) + "\"");
}
} catch (Exception e) {
log.error("Can't create CSV report", e);
return null;
}
return reportFile;
}
protected abstract Class<R> getReportClass();
protected String normalizeFilenameForOS(String filename) {
if (System.getProperty("os.name").toLowerCase().contains("windows"))
return filename.replace(":", "_");
return filename;
}
static class CustomCSVWriter extends CSVWriter {
public CustomCSVWriter(Writer writer) {
super(writer, ',', '\"', '\"', System.lineSeparator());
}
@Override
protected void writeNext(String[] nextLine, boolean applyQuotesToAll, Appendable appendable) throws IOException {
if (nextLine != null) {
for (int i = 0; i < nextLine.length; i++) {
if (StringUtils.isEmpty(nextLine[i])) {
nextLine[i] = null;
}
}
}
super.writeNext(nextLine, applyQuotesToAll, appendable);
}
}
static class CustomStrategy<T> extends ColumnPositionMappingStrategy<T> {
public String[] generateHeader(T bean) throws CsvRequiredFieldEmptyException {
super.generateHeader(bean);
String[] headers = new String[this.getFieldMap().values().size()];
for (BeanField<T, Integer> field : this.getFieldMap().values()) {
CsvBindByPosition positionAnnotation = field.getField().getAnnotation(CsvBindByPosition.class);
CsvBindByName nameAnnotation = field.getField().getAnnotation(CsvBindByName.class);
headers[positionAnnotation.position()] = nameAnnotation.column();
}
return headers;
}
@Override
public String[] transmuteBean(T bean) throws CsvFieldAssignmentException, CsvChainedException {
return super.transmuteBean(bean);
}
@Override
protected CsvConverter determineConverter(Field field, Class<?> elementType, String locale, String writeLocale, Class<? extends AbstractCsvConverter> customConverter) throws CsvBadConverterException {
CsvConverter csvConverter = super.determineConverter(field, elementType, locale, writeLocale, customConverter);
if (csvConverter instanceof ConverterNumber && field.getType() == BigDecimal.class) {
CsvNumber csvNumberAnnotation = field.getAnnotation(CsvNumber.class);
String formatValue = csvNumberAnnotation.value();
String writeFormat = csvNumberAnnotation.writeFormat();
csvConverter = new ConverterNumber(BigDecimal.class,
Locale.getDefault().toString(),
Locale.getDefault().toString(),
Locale.getDefault(),
formatValue,
writeFormat);
}
return csvConverter;
}
}
}

View file

@ -1,70 +0,0 @@
package ru.spcex.clearing.registry.reports.builders;
import ru.clearing.classes.objects.BusinessEvent;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.registry.RegistryHistory;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.registry.reports.bean.DepoBalanceRegisterReport;
import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Collection;
import java.util.Comparator;
import java.util.stream.Collectors;
public class DepoBalanceRegisterReportBuilder extends XLSXReportBuilder<DepoBalanceRegisterReport, RegistryHistory> {
private final static DateTimeFormatter yyyyMMddFormat = DateTimeFormatter.ofPattern("yyyyMMdd");
private final Imdg<Company> companyImdg;
public DepoBalanceRegisterReportBuilder(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
}
@Override
protected String reportName() {
return "security_register";
}
@Override
protected Class<DepoBalanceRegisterReport> getReportClass() {
return DepoBalanceRegisterReport.class;
}
@Override
protected DepoBalanceRegisterReport toRow(RegistryHistory registryHistory) {
Registry input = registryHistory.getObject();
LocalDateTime nowTime = LocalDateTime.ofInstant(registryHistory.getEventTime(), ZoneId.systemDefault());
LocalDate now = nowTime.toLocalDate();
DepoBalanceRegisterReport entity = new DepoBalanceRegisterReport();
entity.setHouseName("АО РДЦ");
entity.setNumber(yyyyMMddFormat.format(now));
entity.setDate(now);
entity.setTime(nowTime);
entity.setCompany(input.getShortName());
AccountType accountType = IEnumKey.getEnumByKey(AccountType.class, input.getAccountType());
if (accountType == AccountType.Depo) entity.setAccount(input.getAccount());
entity.setSecurity(input.getSecuritySymbol());
entity.setSum(input.getBalance());
return entity;
}
@Override
protected Collection<RegistryHistory> sortInput(Collection<RegistryHistory> input) {
return input.stream()
.sorted(Comparator.comparing(BusinessEvent::getEventTime))
.collect(Collectors.toList());
}
}

View file

@ -1,95 +0,0 @@
package ru.spcex.clearing.registry.reports.builders;
import ru.clearing.classes.statics.data.account.Account;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
import ru.clearing.classes.statics.data.security.Security;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.registry.reports.bean.DepoPaymentInstructionRegisterReport;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Collection;
import java.util.Comparator;
import java.util.stream.Collectors;
public class DepoPaymentInstructionRegisterReportBuilder extends XLSXReportBuilder<DepoPaymentInstructionRegisterReport, PaymentInstruction> {
private final Imdg<Account> accountImdg;
private final Imdg<Company> companyImdg;
private final Imdg<Security> securityImdg;
public DepoPaymentInstructionRegisterReportBuilder(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
securityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Security, Security.class);
}
@Override
protected String reportName() {
return "rdc_register";
}
@Override
protected Class<DepoPaymentInstructionRegisterReport> getReportClass() {
return DepoPaymentInstructionRegisterReport.class;
}
@Override
protected DepoPaymentInstructionRegisterReport toRow(PaymentInstruction input) {
DepoPaymentInstructionRegisterReport entity = new DepoPaymentInstructionRegisterReport();
if (input.getSessionId() == null)
entity.setNumber(input.getId());
else
entity.setNumber(input.getSessionId());
entity.setDate(input.getClearingDate());
if (input.getCreated() != null) entity.setTime(LocalDateTime.from(input.getCreated().atZone(ZoneId.systemDefault())));
if (input.getCreditLeg_accountId() != null) {
Account account = accountImdg.getSingleObjectByID(input.getCreditLeg_accountId());
if (account != null) entity.setAccountSender(account.getAccount());
}
if (input.getSenderId() != null) {
Company company = companyImdg.getSingleObjectByID(input.getSenderId());
if (company != null) {
entity.setSender(company.getShortName());
entity.setCodeSender(company.getClearingCode());
}
}
if (input.getDebitLeg_accountId() != null) {
Account account = accountImdg.getSingleObjectByID(input.getDebitLeg_accountId());
if (account != null) entity.setAccountAddressee(account.getAccount());
}
if (input.getAddresseeId() != null) {
Company company = companyImdg.getSingleObjectByID(input.getAddresseeId());
if (company != null) {
entity.setAddressee(company.getShortName());
entity.setCodeAddressee(company.getClearingCode());
}
}
if (input.getCreditLeg_securityId() != null) {
Security security = securityImdg.getSingleObjectByID(input.getCreditLeg_securityId());
if (security != null) entity.setSecurity(security.getSecuritySymbol());
}
entity.setAmount(input.getCreditLeg_amount());
return entity;
}
@Override
protected Collection<PaymentInstruction> sortInput(Collection<PaymentInstruction> input) {
return input.stream()
.sorted(Comparator.comparing(PaymentInstruction::getCreated))
.collect(Collectors.toList());
}
}

View file

@ -1,147 +0,0 @@
package ru.spcex.clearing.registry.reports.builders;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.execution.ExecutionCommon;
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.clearing.platform.dictionary.AllowedDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.registry.reports.bean.ExecutionRegisterReport;
import ru.spcex.platform.enumeration.CompanySymbol;
import ru.spcex.platform.enumeration.MoneyFlowSide;
import ru.spcex.platform.enumeration.Side;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.number.BigDecimalUtil;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.Map;
import java.util.stream.Collectors;
public class ExecutionRegisterReportBuilder extends XLSXReportBuilder<ExecutionRegisterReport, ExecutionCommon> {
private final static DateTimeFormatter yyyyMMddFormat = DateTimeFormatter.ofPattern("yyyyMMdd");
private final Imdg<Company> companyImdg;
private final Imdg<CompanySymbols> companySymbolsImdg;
private final Imdg<AllowedDictionary> allowedDictionaryImdg;
private final Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
public ExecutionRegisterReportBuilder(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
allowedDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_AllowedDictionary, AllowedDictionary.class);
tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
}
@Override
protected String reportName() {
return "contract_register";
}
@Override
protected Class<ExecutionRegisterReport> getReportClass() {
return ExecutionRegisterReport.class;
}
@Override
protected ExecutionRegisterReport toRow(ExecutionCommon input) {
ExecutionRegisterReport entity = new ExecutionRegisterReport();
entity.setClearingOrganization("СПВБ");
entity.setTradingDate(input.getTradingDate());
entity.setExchangeExecutionId(input.getExchangeExecutionId());
if (input.getTradingClearingRegistryId() != null) {
TradingClearingRegistry tkr = tradingClearingRegistryImdg.getSingleObjectByID(input.getTradingClearingRegistryId());
if (tkr != null) entity.setSellerTkr(tkr.getCode());
}
if (input.getSide() != null && input.getCompanyId() != null && input.getCounterPartyId() != null) {
CompanySymbols companySymbolsByCompanyId = companySymbolsImdg.getFirstObjectByFieldValues(
Map.of(
"companySymbol", CompanySymbol.CLRC.getKey(),
"companyId", input.getCompanyId()
)
);
CompanySymbols companySymbolsByCounterPartyId = companySymbolsImdg.getFirstObjectByFieldValues(
Map.of(
"companySymbol", CompanySymbol.CLRC.getKey(),
"companyId", input.getCounterPartyId()
)
);
Company companyByCounterPartyId = companyImdg.getSingleObjectByID(input.getCounterPartyId());
Company companyByCompanyId = companyImdg.getSingleObjectByID(input.getCompanyId());
if (Arrays.asList(Side.BUY.getKey(), MoneyFlowSide.BUY.getKey()).contains(input.getSide().toUpperCase())) {
if (companyByCompanyId != null) {
entity.setBuyer(companyByCompanyId.getShortName());
}
if (companyByCounterPartyId != null) {
entity.setSeller(companyByCounterPartyId.getShortName());
}
if (companySymbolsByCounterPartyId != null) {
entity.setSellerCode(companySymbolsByCounterPartyId.getCompanySymbolValue());
}
if (companySymbolsByCompanyId != null) {
entity.setBuyerCode(companySymbolsByCompanyId.getCompanySymbolValue());
}
entity.setBuyerTkr(input.getPartyTradingClearingRegistry());
}
if (Arrays.asList(Side.SELL.getKey(), MoneyFlowSide.SELL.getKey()).contains(input.getSide().toUpperCase())) {
if (companyByCompanyId != null) {
entity.setSeller(companyByCompanyId.getShortName());
}
if (companyByCounterPartyId != null) {
entity.setBuyer(companyByCounterPartyId.getShortName());
}
if (companySymbolsByCompanyId != null) {
entity.setSellerCode(companySymbolsByCompanyId.getCompanySymbolValue());
}
if (companySymbolsByCounterPartyId != null) {
entity.setBuyerCode(companySymbolsByCounterPartyId.getCompanySymbolValue());
}
entity.setBuyerTkr(input.getCounterPartyTradingClearingRegistry());
}
}
if (input.getExchangeExecutionTime() != null)
entity.setExchangeExecutionTime(LocalDateTime.from(input.getExchangeExecutionTime().atZone(ZoneId.systemDefault())));
if (input instanceof ExecutionDeposit deposit) {
entity.setSettlementDate(deposit.getFirstLegSettlementDate());
entity.setSecurity(deposit.getContract());
entity.setRefundDate(deposit.getSecondLegSettlementDate());
entity.setAmount(deposit.getFirstLegAmount());
} else if (input instanceof ExecutionFond fond) {
entity.setSettlementDate(fond.getSettlementDate());
entity.setSecurity(fond.getSecuritySymbol());
entity.setAmount(BigDecimalUtil.safeSumBD(fond.getSettlementAmount(), fond.getInterestAmount()));
entity.setQuantity(fond.getQuantity());
}
if (input.getCoverageStatus() != null) {
AllowedDictionary allowed = allowedDictionaryImdg.getFirstObjectByFieldValues(
Map.of("code", input.getCoverageStatus())
);
if (allowed != null) entity.setStatus(allowed.getName());
}
entity.setMarket(input.getMarket());
return entity;
}
@Override
protected Collection<ExecutionCommon> sortInput(Collection<ExecutionCommon> input) {
return input.stream()
.sorted(Comparator.comparing(ExecutionCommon::getExchangeExecutionTime))
.collect(Collectors.toList());
}
}

View file

@ -1,91 +0,0 @@
package ru.spcex.clearing.registry.reports.builders;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.platform.dictionary.RegistryStatusDictionary;
import ru.clearing.platform.dictionary.SessionTypeDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.registry.reports.bean.LiabilitiesRegistryReport;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.util.Collection;
import java.util.Comparator;
import java.util.Map;
import java.util.stream.Collectors;
public class LiabilitiesRegistryReportBuilder extends XLSXReportBuilder<LiabilitiesRegistryReport, Registry> {
private final Imdg<RegistryStatusDictionary> registryStatusDictionaryImdg;
private final Imdg<SessionTypeDictionary> sessionTypesDictionaryImdg;
public LiabilitiesRegistryReportBuilder(ImdgProvider imdgProvider) {
registryStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_RegistryStatusDictionary, RegistryStatusDictionary.class);
sessionTypesDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SessionTypeDictionary, SessionTypeDictionary.class);
}
@Override
protected String reportName() {
return "registry";
}
@Override
protected Class<LiabilitiesRegistryReport> getReportClass() {
return LiabilitiesRegistryReport.class;
}
@Override
protected LiabilitiesRegistryReport toRow(Registry input) {
LiabilitiesRegistryReport entity = new LiabilitiesRegistryReport();
entity.setShort_name(input.getShortName());
entity.setClearing_code(input.getClearingCode());
entity.setAccount(input.getAccount());
entity.setRegistry_code(input.getRegistryCode());
entity.setRegistry_status(describeRegistryStatus(input.getRegistryStatus())); // CLRD
entity.setSecurity_symbol(input.getSecuritySymbol());
entity.setBalance(input.getBalance());
entity.setSettlement_date(input.getSettlementDate());
entity.setContract(input.getContract());
entity.setSession_type(describeSessionType(input.getSessionType()));
return entity;
}
/**
* @param registryStatus 'CLRD', ...
* @return из справочника
*/
private String describeRegistryStatus(String registryStatus) {
if (registryStatus == null)
return registryStatus;
RegistryStatusDictionary dictionary = registryStatusDictionaryImdg.getFirstObjectByFieldValues(Map.of(
"code", registryStatus
));
if (dictionary == null) {
log.warn("Dictionary not found for status=\"{}\"", registryStatus);
return registryStatus;
}
return dictionary.getName();
}
private String describeSessionType(String sessionType) {
if (sessionType == null)
return sessionType;
SessionTypeDictionary dictionary = sessionTypesDictionaryImdg.getFirstObjectByFieldValues(Map.of(
"code", sessionType
));
if (dictionary == null) {
log.warn("Dictionary not found for sessionType=\"{}\"", sessionType);
return sessionType;
}
return dictionary.getName();
}
@Override
protected Collection<Registry> sortInput(Collection<Registry> input) {
return input.stream()
.sorted(Comparator.comparing(Registry::getCreated))
.collect(Collectors.toList());
}
}

View file

@ -1,71 +0,0 @@
package ru.spcex.clearing.registry.reports.builders;
import ru.clearing.classes.objects.BusinessEvent;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.registry.RegistryHistory;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.registry.reports.bean.MoneyBalanceRegisterReport;
import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Collection;
import java.util.Comparator;
import java.util.stream.Collectors;
public class MoneyBalanceRegisterReportBuilder extends XLSXReportBuilder<MoneyBalanceRegisterReport, RegistryHistory> {
private final static DateTimeFormatter yyyyMMddFormat = DateTimeFormatter.ofPattern("yyyyMMdd");
private final Imdg<Company> companyImdg;
public MoneyBalanceRegisterReportBuilder(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
}
@Override
protected String reportName() {
return "money_register";
}
@Override
protected Class<MoneyBalanceRegisterReport> getReportClass() {
return MoneyBalanceRegisterReport.class;
}
@Override
protected MoneyBalanceRegisterReport toRow(RegistryHistory registryHistory) {
Registry input = registryHistory.getObject();
LocalDateTime nowTime = LocalDateTime.ofInstant(registryHistory.getEventTime(), ZoneId.systemDefault());
LocalDate now = nowTime.toLocalDate();
MoneyBalanceRegisterReport entity = new MoneyBalanceRegisterReport();
Company company = companyImdg.getSingleObjectByID(2L);
if (company != null) entity.setHouseName(company.getShortName());
entity.setNumber(yyyyMMddFormat.format(now));
entity.setDate(now);
entity.setTime(nowTime);
entity.setCurrency("RUR");
entity.setCompany(input.getShortName());
AccountType accountType = IEnumKey.getEnumByKey(AccountType.class, input.getAccountType());
if (accountType == AccountType.Clrn || accountType == AccountType.Info) entity.setAccount(input.getAccount());
entity.setSum(input.getBalance());
return entity;
}
@Override
protected Collection<RegistryHistory> sortInput(Collection<RegistryHistory> input) {
return input.stream()
.sorted(Comparator.comparing(BusinessEvent::getEventTime))
.collect(Collectors.toList());
}
}

View file

@ -1,88 +0,0 @@
package ru.spcex.clearing.registry.reports.builders;
import ru.clearing.classes.statics.data.account.Account;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.registry.reports.bean.MoneyPaymentInstructionRegisterReport;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Collection;
import java.util.Comparator;
import java.util.stream.Collectors;
public class MoneyPaymentInstructionRegisterReportBuilder extends XLSXReportBuilder<MoneyPaymentInstructionRegisterReport, PaymentInstruction> {
private final Imdg<Account> accountImdg;
private final Imdg<Company> companyImdg;
public MoneyPaymentInstructionRegisterReportBuilder(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
}
@Override
protected String reportName() {
return "prc_register";
}
@Override
protected Class<MoneyPaymentInstructionRegisterReport> getReportClass() {
return MoneyPaymentInstructionRegisterReport.class;
}
@Override
protected MoneyPaymentInstructionRegisterReport toRow(PaymentInstruction input) {
MoneyPaymentInstructionRegisterReport entity = new MoneyPaymentInstructionRegisterReport();
if (input.getSessionId() == null)
entity.setNumber(input.getId());
else
entity.setNumber(input.getSessionId());
entity.setDate(input.getClearingDate());
if (input.getCreated() != null) entity.setTime(LocalDateTime.from(input.getCreated().atZone(ZoneId.systemDefault())));
if (input.getCreditLeg_accountId() != null) {
Account account = accountImdg.getSingleObjectByID(input.getCreditLeg_accountId());
if (account != null) entity.setAccountSender(account.getAccount());
}
if (input.getSenderId() != null) {
Company company = companyImdg.getSingleObjectByID(input.getSenderId());
if (company != null) {
entity.setSender(company.getShortName());
entity.setCodeSender(company.getClearingCode());
}
}
if (input.getDebitLeg_accountId() != null) {
Account account = accountImdg.getSingleObjectByID(input.getDebitLeg_accountId());
if (account != null) entity.setAccountAddressee(account.getAccount());
}
if (input.getAddresseeId() != null) {
Company company = companyImdg.getSingleObjectByID(input.getAddresseeId());
if (company != null) {
entity.setAddressee(company.getShortName());
entity.setCodeAddressee(company.getClearingCode());
}
}
entity.setCurrencyCode(input.getCreditLeg_currencyCode());
entity.setSum(input.getCreditLeg_amount());
return entity;
}
@Override
protected Collection<PaymentInstruction> sortInput(Collection<PaymentInstruction> input) {
return input.stream()
.sorted(Comparator.comparing(PaymentInstruction::getCreated))
.collect(Collectors.toList());
}
}

Some files were not shown because too many files have changed in this diff Show more