Merge branch 'dev' into spring-state-machine-template-v2
# Conflicts: # .gitlab-ci.yml
This commit is contained in:
commit
b8d55c4627
102 changed files with 1228 additions and 553 deletions
|
|
@ -17,17 +17,17 @@ preflight:
|
|||
stage: preflight
|
||||
script:
|
||||
- pwd
|
||||
- git clone -b only_final "http://gitlab-ci-token:$ACCESS_TOKEN@git.mfd.msk/mfd/clearing_test.git"
|
||||
- git clone -b successful_set_export_fixed "http://gitlab-ci-token:$ACCESS_TOKEN@git.mfd.msk/mfd/clearing_test.git"
|
||||
artifacts:
|
||||
name: "$CI_COMMIT_REF_NAME"
|
||||
expire_in: 1 day
|
||||
paths:
|
||||
- clearing_test
|
||||
only:
|
||||
- master
|
||||
- dev
|
||||
- /^dev_.*$/
|
||||
- new
|
||||
- spring-state-machine-template-v2
|
||||
resource_group: clearing-test
|
||||
|
||||
build:
|
||||
|
|
@ -41,10 +41,10 @@ build:
|
|||
paths:
|
||||
- /builds/mfd/clearing/z-distr/target/clearing
|
||||
only:
|
||||
- master
|
||||
- dev
|
||||
- /^dev_.*$/
|
||||
- new
|
||||
- spring-state-machine-template-v2
|
||||
resource_group: clearing-test
|
||||
|
||||
test:
|
||||
|
|
@ -56,18 +56,20 @@ test:
|
|||
script:
|
||||
- echo "Installing maven and python" && apk update && apk add maven python3
|
||||
- echo "Copying jar files to clearing-all/bin" && cp -r /builds/mfd/clearing/z-distr/target/clearing/bin ./clr_test/clearing-all/bin
|
||||
- echo "Copying ddl files to clearing-all/db" && cp -r /builds/mfd/clearing/z-distr/target/clearing/db ./clr_test/clearing-all/db
|
||||
- echo "Removing old logs folder artifacts/logs" && rm -rf artifacts/logs
|
||||
- python3 clr_test/run_test_docker_containers.py
|
||||
- echo "Copying logs" && mkdir -p artifacts/logs && docker run --rm -v clr_test_logs_volume:/logs alpine tar -C /logs -cf - . | tar -C artifacts/logs -xf -
|
||||
- echo "Cleaning up log volume" && docker volume rm clr_test_logs_volume
|
||||
- cat clr_test/results.txt && ! grep -q "failed" clr_test/results.txt
|
||||
artifacts:
|
||||
expire_in: 1 day
|
||||
expire_in: 7 day
|
||||
when: always
|
||||
paths:
|
||||
- artifacts/logs
|
||||
only:
|
||||
- master
|
||||
- dev
|
||||
- /^dev_.*$/
|
||||
- new
|
||||
- spring-state-machine-template-v2
|
||||
resource_group: clearing-test
|
||||
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
|
|
|||
|
|
@ -71,37 +71,37 @@ public class BankAccountValidationConfig {
|
|||
AccountError.RequiredFieldEmpty,
|
||||
AccountError.DictionaryNotFound,
|
||||
false),
|
||||
ValidateSymbolsRule.required("bankIdentificationCode",
|
||||
ValidateSymbolsRule.required("БИК",
|
||||
BankAccountNewRequest::getBankIdentificationCode,
|
||||
AccountError.RequiredFieldEmpty,
|
||||
AccountError.BadSymbol),
|
||||
ValidateSymbolsRule.required("bankName",
|
||||
ValidateSymbolsRule.required("Наименование компании",
|
||||
BankAccountNewRequest::getBankName,
|
||||
AccountError.RequiredFieldEmpty,
|
||||
AccountError.BadSymbol),
|
||||
ValidateSymbolsRule.notRequired("correspondentAccount",
|
||||
ValidateSymbolsRule.notRequired("Корр. счет",
|
||||
BankAccountNewRequest::getCorrespondentAccount,
|
||||
AccountError.BadSymbol),
|
||||
ValidateSymbolsRule.notRequired("correspondentAccountName",
|
||||
ValidateSymbolsRule.notRequired("Наименование корр. счета",
|
||||
BankAccountNewRequest::getCorrespondentAccountName,
|
||||
AccountError.BadSymbol),
|
||||
ValidateSymbolsRule.notRequired("destination",
|
||||
ValidateSymbolsRule.notRequired("Назначение платежа",
|
||||
BankAccountNewRequest::getDestination,
|
||||
AccountError.BadSymbol),
|
||||
ValidateSymbolsRule.required("account",
|
||||
ValidateSymbolsRule.required("Счет",
|
||||
BankAccountNewRequest::getAccount,
|
||||
AccountError.RequiredFieldEmpty,
|
||||
AccountError.BadSymbol),
|
||||
ValidateSymbolsRule.notRequired("taxpayerIdentificationNumber",
|
||||
ValidateSymbolsRule.notRequired("ИНН",
|
||||
BankAccountNewRequest::getTaxpayerIdentificationNumber,
|
||||
AccountError.BadSymbol),
|
||||
ValidateSymbolsRule.notRequired("taxRegistrationReasonCode",
|
||||
ValidateSymbolsRule.notRequired("КПП",
|
||||
BankAccountNewRequest::getTaxRegistrationReasonCode,
|
||||
AccountError.BadSymbol),
|
||||
ValidateSymbolsRule.notRequired("swiftCode",
|
||||
ValidateSymbolsRule.notRequired("SWIFT",
|
||||
BankAccountNewRequest::getSwiftCode,
|
||||
AccountError.BadSymbol),
|
||||
ValidateSymbolsRule.notRequired("intermediarySwiftCode",
|
||||
ValidateSymbolsRule.notRequired("SWIFT посредника",
|
||||
BankAccountNewRequest::getIntermediarySwiftCode,
|
||||
AccountError.BadSymbol)
|
||||
);
|
||||
|
|
@ -145,34 +145,34 @@ public class BankAccountValidationConfig {
|
|||
AccountError.RequiredFieldEmpty,
|
||||
AccountError.DictionaryNotFound,
|
||||
false),
|
||||
ValidateSymbolsRule.notRequired("bankIdentificationCode",
|
||||
ValidateSymbolsRule.notRequired("БИК",
|
||||
BankAccountUpdateRequest::getBankIdentificationCode,
|
||||
AccountError.BadSymbol),
|
||||
ValidateSymbolsRule.notRequired("bankName",
|
||||
ValidateSymbolsRule.notRequired("Наименование компании",
|
||||
BankAccountUpdateRequest::getBankName,
|
||||
AccountError.BadSymbol),
|
||||
ValidateSymbolsRule.notRequired("correspondentAccount",
|
||||
ValidateSymbolsRule.notRequired("Корр. счет",
|
||||
BankAccountUpdateRequest::getCorrespondentAccount,
|
||||
AccountError.BadSymbol),
|
||||
ValidateSymbolsRule.notRequired("correspondentAccountName",
|
||||
ValidateSymbolsRule.notRequired("Наименование корр. счета",
|
||||
BankAccountUpdateRequest::getCorrespondentAccountName,
|
||||
AccountError.BadSymbol),
|
||||
ValidateSymbolsRule.notRequired("destination",
|
||||
ValidateSymbolsRule.notRequired("Назначение платежа",
|
||||
BankAccountUpdateRequest::getDestination,
|
||||
AccountError.BadSymbol),
|
||||
ValidateSymbolsRule.notRequired("account",
|
||||
ValidateSymbolsRule.notRequired("Счет",
|
||||
BankAccountUpdateRequest::getAccount,
|
||||
AccountError.BadSymbol),
|
||||
ValidateSymbolsRule.notRequired("taxpayerIdentificationNumber",
|
||||
ValidateSymbolsRule.notRequired("ИНН",
|
||||
BankAccountUpdateRequest::getTaxpayerIdentificationNumber,
|
||||
AccountError.BadSymbol),
|
||||
ValidateSymbolsRule.notRequired("taxRegistrationReasonCode",
|
||||
ValidateSymbolsRule.notRequired("КПП",
|
||||
BankAccountUpdateRequest::getTaxRegistrationReasonCode,
|
||||
AccountError.BadSymbol),
|
||||
ValidateSymbolsRule.notRequired("swiftCode",
|
||||
ValidateSymbolsRule.notRequired("SWIFT",
|
||||
BankAccountUpdateRequest::getSwiftCode,
|
||||
AccountError.BadSymbol),
|
||||
ValidateSymbolsRule.notRequired("intermediarySwiftCode",
|
||||
ValidateSymbolsRule.notRequired("SWIFT посредника",
|
||||
BankAccountUpdateRequest::getIntermediarySwiftCode,
|
||||
AccountError.BadSymbol)
|
||||
);
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -26,12 +26,15 @@ public class ChangeRefundDateActionNew implements IAction<RegistryChangeRefundDa
|
|||
@JsonSerialize(using = LocalDateSerializer.class)
|
||||
@JsonDeserialize(using = LocalDateDeserializer.class)
|
||||
public LocalDate refundDate;
|
||||
@JsonProperty
|
||||
public String market;
|
||||
|
||||
@Override
|
||||
public RegistryChangeRefundDateRequest toRequest() {
|
||||
var req = new RegistryChangeRefundDateRequest();
|
||||
req.setGroupId(groupId);
|
||||
req.setRefundDate(refundDate);
|
||||
req.setMarket(market);
|
||||
return req;
|
||||
}
|
||||
|
||||
|
|
@ -68,4 +71,12 @@ public class ChangeRefundDateActionNew implements IAction<RegistryChangeRefundDa
|
|||
public void setRefundDate(LocalDate refundDate) {
|
||||
this.refundDate = refundDate;
|
||||
}
|
||||
|
||||
public String getMarket() {
|
||||
return market;
|
||||
}
|
||||
|
||||
public void setMarket(String market) {
|
||||
this.market = market;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,21 +4,13 @@ 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 org.apache.commons.lang3.StringUtils;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
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.registry.RegistrySplitDepositActionRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalDateDeserializer;
|
||||
import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalDateSerializer;
|
||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class RSplitDepositActionNew implements IAction<RegistrySplitDepositActionRequest> {
|
||||
|
||||
|
|
@ -39,6 +31,8 @@ public class RSplitDepositActionNew implements IAction<RegistrySplitDepositActio
|
|||
@ApiModelProperty(value = "Направление", example = "OUT")
|
||||
@JsonProperty
|
||||
public String direction;
|
||||
@JsonProperty
|
||||
public String market;
|
||||
|
||||
|
||||
@Override
|
||||
|
|
@ -49,6 +43,7 @@ public class RSplitDepositActionNew implements IAction<RegistrySplitDepositActio
|
|||
req.setRefundDate(this.refundDate);
|
||||
req.setContract(this.contract);
|
||||
req.setDirection(this.direction);
|
||||
req.setMarket(this.market);
|
||||
return req;
|
||||
}
|
||||
|
||||
|
|
@ -97,4 +92,12 @@ public class RSplitDepositActionNew implements IAction<RegistrySplitDepositActio
|
|||
public void setDirection(String direction) {
|
||||
this.direction = direction;
|
||||
}
|
||||
|
||||
public String getMarket() {
|
||||
return market;
|
||||
}
|
||||
|
||||
public void setMarket(String market) {
|
||||
this.market = market;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,12 +22,15 @@ public class ReturnDepositActionNew implements IAction<RegistryReturnDepositRequ
|
|||
@ApiModelProperty(value = "Сумма", example = "1600.20")
|
||||
@JsonProperty
|
||||
public BigDecimal balance;
|
||||
@JsonProperty
|
||||
public String market;
|
||||
|
||||
@Override
|
||||
public RegistryReturnDepositRequest toRequest() {
|
||||
var req = new RegistryReturnDepositRequest();
|
||||
req.setId(id);
|
||||
req.setBalance(balance);
|
||||
req.setMarket(market);
|
||||
return req;
|
||||
}
|
||||
|
||||
|
|
@ -65,4 +68,12 @@ public class ReturnDepositActionNew implements IAction<RegistryReturnDepositRequ
|
|||
public void setBalance(BigDecimal balance) {
|
||||
this.balance = balance;
|
||||
}
|
||||
|
||||
public String getMarket() {
|
||||
return market;
|
||||
}
|
||||
|
||||
public void setMarket(String market) {
|
||||
this.market = market;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
{
|
||||
"version": "3.18.240.129",
|
||||
"version": "3.18.244.133",
|
||||
|
||||
"enums": {
|
||||
|
||||
|
|
@ -4597,6 +4597,10 @@
|
|||
{"code": "section",
|
||||
"type": 12,"dbname": "Код секции","name": "Наименование секции","shortname": "Секция","searchable": true,"sortable": true,"visible": true,"link": "section"
|
||||
}
|
||||
,
|
||||
{"code": "market",
|
||||
"type": 2,"length": 8,"dbname": "Код класса инструмента","name": "Код класса","shortname": "Код","visible": false,"searchable": true,"sortable": true
|
||||
}
|
||||
]
|
||||
,"actions":[
|
||||
{"method":"post",
|
||||
|
|
@ -4652,6 +4656,10 @@
|
|||
{"code": "balance",
|
||||
"type": 10,"name": "Сумма","shortname": "Сумма","required": true
|
||||
}
|
||||
,
|
||||
{"code": "market",
|
||||
"type": 2,"length": 8,"name": "Код класса","shortname": "Код","visible": false
|
||||
}
|
||||
]
|
||||
}
|
||||
,
|
||||
|
|
@ -4710,6 +4718,10 @@
|
|||
{"code": "refundDate",
|
||||
"type": 6,"name": "Дата возврата депозита","shortname": "Возврат депозита","visible": true,"enabled": true
|
||||
}
|
||||
,
|
||||
{"code": "market",
|
||||
"type": 2,"length": 8,"name": "Код класса","shortname": "Код","visible": false
|
||||
}
|
||||
]
|
||||
}
|
||||
,
|
||||
|
|
@ -6714,7 +6726,7 @@
|
|||
}
|
||||
,
|
||||
{"code": "exchangeExecutionMicroseconds",
|
||||
"type": 4,"name": "Микросекунды заключения сделки в Торговой системе","shortname": "Микросекунды заключения сделки","visible": true,"searchable": true,"sortable": true
|
||||
"type": 4,"name": "Микросекунды заключения сделки в Торговой системе","shortname": "Микросекунды заключения сделки","visible": true,"searchable": true,"sortable": true,"ignore": true
|
||||
}
|
||||
,
|
||||
{"code": "coverageStatus",
|
||||
|
|
@ -6750,7 +6762,7 @@
|
|||
}
|
||||
,
|
||||
{"code": "exchangeExecutionMicroseconds",
|
||||
"type": 4,"name": "Микросекунды заключения сделки в Торговой системе","shortname": "Микросекунды заключения сделки","visible": true,"searchable": true,"sortable": true
|
||||
"type": 4,"name": "Микросекунды заключения сделки в Торговой системе","shortname": "Микросекунды заключения сделки","visible": true,"searchable": true,"sortable": true,"ignore": true
|
||||
}
|
||||
,
|
||||
{"code": "tradingDate",
|
||||
|
|
@ -6810,7 +6822,7 @@
|
|||
}
|
||||
,
|
||||
{"code": "market",
|
||||
"type": 12,"dbname": "Код секции валютного инструмента","name": "Секция валютного инструмента","shortname": "Секция","visible": true,"searchable": true,"sortable": true,"link": "market","linkKeyCode": "code","linkCode": "description"
|
||||
"type": 12,"dbname": "Код секции валютного инструмента","name": "Секция валютного инструмента","shortname": "Секция","visible": true,"searchable": true,"sortable": true,"link": "market","linkKeyCode": "code","linkCode": "name"
|
||||
}
|
||||
,
|
||||
{"code": "marketName",
|
||||
|
|
@ -10961,7 +10973,7 @@
|
|||
}
|
||||
,
|
||||
{"code": "isin",
|
||||
"type": 2,"length": 50,"name": "Наименование инструмента ISIN","shortname": "ISIN","searchable": true,"sortable": true,"visible": true,"extends": "security"
|
||||
"type": 2,"length": 50,"name": "Наименование инструмента ISIN","shortname": "ISIN","searchable": true,"sortable": true,"visible": false,"extends": "security"
|
||||
}
|
||||
,
|
||||
{"code": "instrumentType",
|
||||
|
|
@ -11491,7 +11503,7 @@
|
|||
|
||||
{
|
||||
"code": "marketName"
|
||||
,"field": "market","type": 12,"dbname": "Код секции валютного инструмента","name": "Наименование класса валютного инструмента","shortname": "Наименование класса","visible": true,"searchable": true,"sortable": true,"link": "market","linkKeyCode": "code","linkCode": "description"
|
||||
,"field": "market","type": 12,"dbname": "Код секции валютного инструмента","name": "Наименование класса валютного инструмента","shortname": "Наименование класса","visible": true,"searchable": true,"sortable": true,"link": "market","linkKeyCode": "code","linkCode": "name"
|
||||
}
|
||||
|
||||
,
|
||||
|
|
|
|||
|
|
@ -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.18.240.129">
|
||||
<meta version="3.18.244.133">
|
||||
<!-- _xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" _xsi:noNamespaceSchemaLocation="file:///E:/d/projects/meta/from/meta.xsd" -->
|
||||
<!--Здесь словари-->
|
||||
<enums>
|
||||
|
|
@ -1070,6 +1070,7 @@
|
|||
<updatedAt field="updated" type="4" name="Дата и время изменения записи" shortname="Изменено" searchable="true" sortable="true" ignore="true"/>
|
||||
<securityId type="1" dbname="Идентификатор инструмента" name="Код инструмента" shortname="Код инструмента" searchable="false" sortable="true" visible="false" link="security" linkCode="shortName"/>
|
||||
<section type="12" dbname="Код секции" name="Наименование секции" shortname="Секция" searchable="true" sortable="true" visible="true" link="section"/>
|
||||
<market type="2" length="8" dbname="Код класса инструмента" name="Код класса" shortname="Код" visible="false" searchable="true" sortable="true"/>
|
||||
<actions>
|
||||
<post name="Разделение депозита" destination="registries/splitDeposit" confirmation="contract,outboundAmount,refundDate" class="ru.spcex.clearing.backendapi.controller.request.cud.registry.RSplitDepositActionNew">
|
||||
<companyId type="1" name="Наименование участника" shortname="Инициатор" link="company" linkCode="shortName" enabled="false"/>
|
||||
|
|
@ -1082,6 +1083,7 @@
|
|||
<post name="Отметить средства на возврат депозита" destination="registries/returnDeposit" class="ru.spcex.clearing.backendapi.controller.request.cud.registry.ReturnDepositActionNew">
|
||||
<id type="1" name="Регистр требований" shortname="Регистр требований" required="true" enabled="false" visible="false"/>
|
||||
<balance type="10" name="Сумма" shortname="Сумма" required="true"/>
|
||||
<market type="2" length="8" name="Код класса" shortname="Код" visible="false"/>
|
||||
</post>
|
||||
<post name="Идентификация неразмеченных средств" destination="registries/identificationFunds" confirmation="securitySymbol,balance,tradingClearingRegistryId" class="ru.spcex.clearing.backendapi.controller.request.cud.registry.IdentificationFundsActionNew">
|
||||
<id type="1" name="Идентификатор записи" shortname="ID" link="registry" linkCode="id" required="true"/>
|
||||
|
|
@ -1094,6 +1096,7 @@
|
|||
<groupId type="1" dbname="Идентификатор группы связанных регистров" name="Идентификатор группы" required="true" enabled="false" visible="false"/>
|
||||
<contract type="2" length="255" name="Договор" shortname="Номер договора" required="true" enabled="false"/>
|
||||
<refundDate type="6" name="Дата возврата депозита" shortname="Возврат депозита" visible="true" enabled="true"/>
|
||||
<market type="2" length="8" name="Код класса" shortname="Код" visible="false"/>
|
||||
</put>
|
||||
<put name="Установить отметку о получении выписки" destination="registries/changeStatusExtract" confirmation="shortName,contract,balance" class="ru.spcex.clearing.backendapi.controller.request.cud.registry.ChangeStatusExtractActionNew">
|
||||
<id type="1" name="Идентификатор записи" shortname="ID" link="registry" linkCode="id" required="true"/>
|
||||
|
|
@ -1557,14 +1560,14 @@
|
|||
<securityFullName type="2" length="255" name="Наименование инструмента" shortname="Инструмент" visible="true" searchable="true" sortable="true"/>
|
||||
<settlementDate type="6" name="Дата расчетов" shortname="Дата расчетов" visible="true" searchable="true" sortable="true"/>
|
||||
<settlementCurrency type="12" dbname="Код валюты расчетов по инструменту" name="Валюта расчетов по инструменту" shortname="Валюта" visible="true" searchable="true" sortable="true" link="currencyCode" linkCode="code"/>
|
||||
<exchangeExecutionMicroseconds type="4" name="Микросекунды заключения сделки в Торговой системе" shortname="Микросекунды заключения сделки" visible="true" searchable="true" sortable="true"/>
|
||||
<exchangeExecutionMicroseconds type="4" name="Микросекунды заключения сделки в Торговой системе" shortname="Микросекунды заключения сделки" visible="true" searchable="true" sortable="true" ignore="true"/>
|
||||
<coverageStatus type="12" dbname="Код статуса достаточности обеспечения" name="Статус достаточности обеспечения" shortname="Обеспеченность" searchable="true" sortable="true" link="allowed"/>
|
||||
<sessionId type="1" dbname="Идентификатор клиринговой сессии" name="Клиринговая сессия" shortname="Сессия" visible="true" searchable="true" sortable="true" link="session"/>
|
||||
</executionFond>
|
||||
<executionCurrency name="Сделки с валютными инструментами" destination="execution-currency" class="ru.clearing.classes.statics.data.execution.ExecutionCurrency" logUpdates="true" table="execution_currency">
|
||||
<exchangeExecutionId type="1" name="Идентификационный номер сделки в Торговой системе" shortname="Номер сделки" visible="true" searchable="true" sortable="true"/>
|
||||
<exchangeExecutionTime type="4" name="Время заключения сделки в Торговой системе" shortname="Время заключения сделки" visible="true" searchable="true" sortable="true"/>
|
||||
<exchangeExecutionMicroseconds type="4" name="Микросекунды заключения сделки в Торговой системе" shortname="Микросекунды заключения сделки" visible="true" searchable="true" sortable="true"/>
|
||||
<exchangeExecutionMicroseconds type="4" name="Микросекунды заключения сделки в Торговой системе" shortname="Микросекунды заключения сделки" visible="true" searchable="true" sortable="true" ignore="true"/>
|
||||
<tradingDate type="6" name="Дата заключения сделки" shortname="Дата заключения сделки" visible="true" searchable="true" sortable="true"/>
|
||||
<settlementDate type="6" name="Дата расчетов" shortname="Дата расчетов" visible="true" searchable="true" sortable="true"/>
|
||||
<settlementCode type="2" length="12" name="Код расчетов при размещении" shortname="Код расчетов при размещении" visible="false" searchable="true" sortable="true" ignore="true"/>
|
||||
|
|
@ -1579,7 +1582,7 @@
|
|||
<counterPartyName field="counterPartyId" type="1" dbname="Идентификатор компании-партнера, с которой заключена сделка" name="Название УК контрагента" shortname="Название УК контрагента" visible="true" searchable="true" sortable="true" link="company" linkCode="shortName" ignore="true"/>
|
||||
<counterPartyTradingClearingRegistryId type="1" dbname="Идентификатор торгово-клирингового регистра партнера" name="Торгово-клиринговый регистр партнера" shortname="ТКР партнера" visible="true" searchable="true" sortable="true" link="tradingClearingRegistry" linkCode="code" ignore="true"/>
|
||||
<counterPartyTradingClearingRegistry type="2" length="20" 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"/>
|
||||
<market type="12" dbname="Код секции валютного инструмента" name="Секция валютного инструмента" shortname="Секция" visible="true" searchable="true" sortable="true" link="market" linkKeyCode="code" linkCode="name"/>
|
||||
<marketName field="market" type="12" dbname="Код секции валютного инструмента" name="Наименование класса валютного инструмента" shortname="Наименование класса" visible="true" searchable="true" sortable="true" link="market" linkKeyCode="code" linkCode="description" ignore="true"/>
|
||||
<price type="10" name="Цена" shortname ="Цена" visible="true" searchable="true" sortable="true"/>
|
||||
<lotSize type="11" name="Размер лота" shortname="Лот" searchable="true" sortable="true" visible="true" linkKeyCode="securityId" linkCode="lotSize" link="listing" extends="listing"/>
|
||||
|
|
@ -2540,7 +2543,7 @@
|
|||
<shortName type="2" length="255" name="Краткое наименование инструмента" shortname="Краткое наименование" searchable="true" sortable="true" visible="true" extends="security"/>
|
||||
<securitySymbol type="2" length="255" name="Код инструмента" shortname="Код" searchable="true" sortable="true" visible="true" extends="security"/>
|
||||
<fullName type="2" length="255" name="Полное наименование инструмента" shortname="Наименование" searchable="true" sortable="true" visible="true" extends="security"/>
|
||||
<isin type="2" length="50" name="Наименование инструмента ISIN" shortname="ISIN" searchable="true" sortable="true" visible="true" extends="security"/>
|
||||
<isin type="2" length="50" name="Наименование инструмента ISIN" shortname="ISIN" searchable="true" sortable="true" visible="false" extends="security"/>
|
||||
<instrumentType type="12" dbname="Код типа инструмента" name="Наименование типа инструмента" shortname="Тип инструмента" searchable="true" sortable="true" visible="true" link="instrumentType" extends="security"/>
|
||||
<issuerId type="1" dbname="Идентификатор эмитента" name="Наименование эмитента" shortname="Эмитент" searchable="true" sortable="true" visible="true" link="company" linkCode="shortName" extends="security"/>
|
||||
<shortNameEng type="2" length="255" name="Краткое наименование инструмента на английском" shortname="Краткое наименование на английском" searchable="true" sortable="true" visible="true" extends="security"/>
|
||||
|
|
@ -2669,7 +2672,7 @@
|
|||
<set><companyId type="1" dbname="Идентификатор компании" name="Название участника клиринга" shortname="Название УК" visible="true" searchable="true" sortable="true" link="company" linkCode="shortName"/></set>
|
||||
<set><counterPartyCode field="counterPartyId" type="1" dbname="Идентификатор компании-партнера, с которой заключена сделка" name="Код УК контрагента" shortname="Код УК контрагента" visible="true" searchable="true" sortable="true" ignore="false" link="company" linkCode="clearingCode"/></set>
|
||||
<set><counterPartyId type="1" dbname="Идентификатор компании-партнера, с которой заключена сделка" name="Название УК контрагента" shortname="Название УК контрагента" visible="true" searchable="true" sortable="true" link="company" linkCode="shortName"/></set>
|
||||
<set><marketName field="market" type="12" dbname="Код секции валютного инструмента" name="Наименование класса валютного инструмента" shortname="Наименование класса" visible="true" searchable="true" sortable="true" link="market" linkKeyCode="code" linkCode="description"/></set>
|
||||
<set><marketName field="market" type="12" dbname="Код секции валютного инструмента" name="Наименование класса валютного инструмента" shortname="Наименование класса" visible="true" searchable="true" sortable="true" link="market" linkKeyCode="code" linkCode="name"/></set>
|
||||
<set><currencyCode type="12" name="Код валюты расчетов" shortname="Валюта расчетов" searchable="true" sortable="true" link="currencyCode" linkCode="code" visible="true"/></set>
|
||||
<set><marketSectionCode field="market" type="12" dbname="Код секции валютного инструмента" name="Код секции в Клиринговой системе" shortname="Код секции в КС" visible="true" searchable="true" sortable="true" ignore="false" link="market" linkKeyCode="code" linkCode="section"/></set>
|
||||
<set><linkedExchangeExecutionId type="1" name="Идентификационный номер витринной сделки в Торговой системе" shortname="Номер витринной сделки" searchable="true" sortable="true" visible="true" ignore="false"/></set>
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@ public class Registry extends BusinessObject implements Cloneable {
|
|||
private String sessionType;
|
||||
private Long paymentId;
|
||||
private String section;
|
||||
private String market;
|
||||
|
||||
public Long getCompanyId() {
|
||||
return companyId;
|
||||
|
|
@ -444,6 +445,14 @@ public class Registry extends BusinessObject implements Cloneable {
|
|||
this.section = section;
|
||||
}
|
||||
|
||||
public String getMarket() {
|
||||
return market;
|
||||
}
|
||||
|
||||
public void setMarket(String market) {
|
||||
this.market = market;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Registry clone() {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -6,13 +6,13 @@
|
|||
<parent>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>cleaning-builders</artifactId>
|
||||
<name>cleaning-builders</name>
|
||||
<description>Cleaning builders module</description>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>classes</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
package ru.spcex.clearing.component;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public record GroupRgsKey(Long groupId, String market) {
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
GroupRgsKey that = (GroupRgsKey) o;
|
||||
return Objects.equals(groupId, that.groupId) && Objects.equals(market, that.market);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(groupId, market);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
package ru.spcex.clearing.component;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
|
||||
public class GroupRgsKeyComparator implements Comparator<Map.Entry<GroupRgsKey, List<Registry>>> {
|
||||
@Override
|
||||
public int compare(Map.Entry<GroupRgsKey, List<Registry>> o1, Map.Entry<GroupRgsKey, List<Registry>> o2) {
|
||||
return o1.getKey().groupId().compareTo(o2.getKey().groupId());
|
||||
}
|
||||
}
|
||||
|
|
@ -4,14 +4,19 @@ import java.time.LocalDate;
|
|||
import java.util.Objects;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionCommon;
|
||||
|
||||
public record ExecUploadKey(LocalDate tradeDate, Long exchangeExecutionId, String side) {
|
||||
public record ExecUploadKey(LocalDate tradeDate, Long exchangeExecutionId, String market, String side) {
|
||||
|
||||
public static ExecUploadKey cash(LocalDate tradingDate, Long exchangeExecutionId, String side) {
|
||||
return new ExecUploadKey(tradingDate, exchangeExecutionId, side);
|
||||
public static ExecUploadKey cash(LocalDate tradingDate, Long exchangeExecutionId, String market, String side) {
|
||||
return new ExecUploadKey(tradingDate, exchangeExecutionId, market, side);
|
||||
}
|
||||
|
||||
public static ExecUploadKey cash(ExecutionCommon exec) {
|
||||
return new ExecUploadKey(exec.getTradingDate(), exec.getExchangeExecutionId(), exec.getSide());
|
||||
return new ExecUploadKey(
|
||||
exec.getTradingDate(),
|
||||
exec.getExchangeExecutionId(),
|
||||
exec.getMarket(),
|
||||
exec.getSide()
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -176,6 +176,7 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
|
|||
// MoneyFlowSide excDepSide = sTrdSide == Side.BUY ? MoneyFlowSide.BUY : MoneyFlowSide.SELL;
|
||||
ExecUploadKey excKey = ExecUploadKey.cash(sTrd.getTradeDate(),
|
||||
sTrd.getTradeNum(),
|
||||
sTrd.getClassCode(),
|
||||
sTrdSide.getKey());
|
||||
return cash.containsKey(excKey);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -9,9 +9,11 @@ import java.util.Collection;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import static java.lang.String.format;
|
||||
import org.apache.kafka.clients.producer.Producer;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.slf4j.event.Level;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
|
@ -27,6 +29,7 @@ import ru.clearing.classes.statics.data.security.Security;
|
|||
import ru.spcex.clearing.error.ClearingError;
|
||||
import ru.spcex.clearing.error.ClearingException;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.notification.NotificationSender;
|
||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.registry.DealRegisterNewRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.registry.ExecutionType;
|
||||
|
|
@ -36,6 +39,8 @@ import ru.spcex.clearing.service.validation.strades.CompanyByTradingCodeCashingV
|
|||
import ru.spcex.clearing.service.validation.strades.STradesSecurityPresentDepositValidationRule;
|
||||
import ru.spcex.clearing.service.validation.strades.TcrByCodeAndCmpIsActiveCashingValidationRule;
|
||||
import ru.spcex.platform.enumeration.MoneyFlowSide;
|
||||
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.imdg.api.Imdg;
|
||||
|
|
@ -73,6 +78,7 @@ public class ExecutionDepositComponent implements IExecutionUploadComponent {
|
|||
private final Imdg<Company> imdgCompany;
|
||||
private final Imdg<TradingClearingRegistry> imdgTradingClearingRegistry;
|
||||
private final ImdgId idGen;
|
||||
private final NotificationSender notifications;
|
||||
|
||||
//fixme ждать ТЗ
|
||||
Long tradeNum;
|
||||
|
|
@ -86,7 +92,7 @@ public class ExecutionDepositComponent implements IExecutionUploadComponent {
|
|||
|
||||
|
||||
@Autowired
|
||||
public ExecutionDepositComponent(ImdgProvider imdgProvider, Producer<String, Object> kafka,
|
||||
public ExecutionDepositComponent(ImdgProvider imdgProvider, Producer<String, Object> kafka, NotificationSender notifications,
|
||||
@Qualifier("kafkaSenderWithoutRequestInfo") KafkaSender kafkaSender,
|
||||
IMessageResolver msgResolver) {
|
||||
this.sTradeImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class);
|
||||
|
|
@ -96,6 +102,7 @@ public class ExecutionDepositComponent implements IExecutionUploadComponent {
|
|||
this.imdgCompany = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Company, Company.class, null);
|
||||
this.imdgTradingClearingRegistry = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class, null);
|
||||
this.idGen = imdgProvider.getImdgIdGenerator();
|
||||
this.notifications = notifications;
|
||||
this.kafkaSender = kafkaSender;
|
||||
this.msgResolver = msgResolver;
|
||||
|
||||
|
|
@ -154,12 +161,17 @@ public class ExecutionDepositComponent implements IExecutionUploadComponent {
|
|||
sTrades.removeIf(sTrd -> {
|
||||
Side sTrdSide = IEnumKey.getEnumByKey(Side.class, sTrd.getOperation());
|
||||
if (sTrdSide == null || !(sTrdSide.equals(Side.BUY) || sTrdSide.equals(Side.SELL))) {
|
||||
log.warn("cannot parse strade.tradeNum={} strade.operation {}", sTrd.getTradeNum(), sTrd.getOperation());
|
||||
logNotifyW(format(
|
||||
"cannot parse strade.tradeNum=%d strade.operation %s",
|
||||
sTrd.getTradeNum(),
|
||||
sTrd.getOperation())
|
||||
);
|
||||
return true;
|
||||
}
|
||||
MoneyFlowSide excDepSide = sTrdSide.equals(Side.BUY) ? MoneyFlowSide.BUY : MoneyFlowSide.SELL;
|
||||
ExecUploadKey excKey = ExecUploadKey.cash(sTrd.getTradeDate(),
|
||||
sTrd.getTradeNum(),
|
||||
sTrd.getClassCode(),
|
||||
excDepSide.getKey());
|
||||
return cash.containsKey(excKey);
|
||||
});
|
||||
|
|
@ -198,7 +210,10 @@ public class ExecutionDepositComponent implements IExecutionUploadComponent {
|
|||
} catch (ClearingException ce) {
|
||||
auditMessage(ce);
|
||||
} catch (Exception e) {
|
||||
log.error("When create new ExecutionDeposit by STrade[{}] error: {}", sTrd.getId(), ExceptionUtils.getStackTrace(e));
|
||||
String err = String.format("When create new ExecutionDeposit by STrade[%d] error: %s",
|
||||
sTrd.getId(),
|
||||
ExceptionUtils.getStackTrace(e));
|
||||
logNotifyE(err);
|
||||
}
|
||||
}
|
||||
log.info("batch putAll {} ExecutionDeposit", execsToInsert.size());
|
||||
|
|
@ -211,7 +226,8 @@ public class ExecutionDepositComponent implements IExecutionUploadComponent {
|
|||
|
||||
|
||||
protected void auditMessage(ClearingException ce) {
|
||||
log.error("AUDIT error code {}: {}", ce.getEnumMsg(), ce.getMessage());
|
||||
String err = String.format("AUDIT error code %s: %s", ce.getEnumMsg(), ce.getMessage());
|
||||
logNotifyE(err);
|
||||
}
|
||||
|
||||
protected void sendNotification(ExecutionDeposit forED) throws ClearingException {
|
||||
|
|
@ -330,11 +346,33 @@ public class ExecutionDepositComponent implements IExecutionUploadComponent {
|
|||
}
|
||||
|
||||
private void logError(IEnumId subject, Object... args) {
|
||||
log.info("{}", msgResolver.resolve(new EnumMessage(subject, args)));
|
||||
String err = msgResolver.resolve(new EnumMessage(subject, args));
|
||||
log.info("{}", err);
|
||||
notifications.sendNotification(ObjectType.vfrs, err, Priority.HIGH);
|
||||
}
|
||||
|
||||
|
||||
private void logError(Long sTradeId, EnumMessage msg) {
|
||||
log.warn("sTrade id={} {}", sTradeId, msgResolver.resolve(msg));
|
||||
String err = format("sTrade id=%d %s", sTradeId, msgResolver.resolve(msg));
|
||||
log.warn(err);
|
||||
notifications.sendNotification(ObjectType.vfrs, err, Priority.HIGH);
|
||||
}
|
||||
|
||||
private void logNotifyW(String msg) {
|
||||
logNotify(msg, Level.WARN);
|
||||
}
|
||||
|
||||
private void logNotifyE(String msg) {
|
||||
logNotify(msg, Level.ERROR);
|
||||
}
|
||||
|
||||
private void logNotify(String msg, Level lvl) {
|
||||
switch (lvl) {
|
||||
case WARN -> log.warn(msg);
|
||||
case ERROR -> log.error(msg);
|
||||
default -> log.error("lvl not supported {}. {}", lvl, msg);
|
||||
}
|
||||
notifications.sendNotification(ObjectType.vfrs, msg, Priority.HIGH);
|
||||
}
|
||||
|
||||
private Optional<TradingClearingRegistry> searchTcrByStrades(STrades sTrades) {
|
||||
|
|
|
|||
|
|
@ -9,8 +9,10 @@ import java.util.Collection;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import static java.lang.String.format;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.slf4j.event.Level;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
|
@ -183,12 +185,17 @@ public class ExecutionFondComponent implements IExecutionUploadComponent {
|
|||
sTrades.removeIf(sTrd -> {
|
||||
Side sTrdSide = IEnumKey.getEnumByKey(Side.class, sTrd.getOperation());
|
||||
if (sTrdSide == null || !(sTrdSide.equals(Side.BUY) || sTrdSide.equals(Side.SELL))) {
|
||||
log.warn("cannot parse strade.tradeNum={} strade.operation {}", sTrd.getTradeNum(), sTrd.getOperation());
|
||||
logNotifyW(format(
|
||||
"cannot parse strade.tradeNum=%d strade.operation %s",
|
||||
sTrd.getTradeNum(),
|
||||
sTrd.getOperation())
|
||||
);
|
||||
return true;
|
||||
}
|
||||
Side excDepSide = sTrdSide.equals(Side.BUY) ? Side.BUY : Side.SELL;
|
||||
ExecUploadKey excKey = ExecUploadKey.cash(sTrd.getTradeDate(),
|
||||
sTrd.getTradeNum(),
|
||||
sTrd.getClassCode(),
|
||||
excDepSide.getKey());
|
||||
return cash.containsKey(excKey);
|
||||
});
|
||||
|
|
@ -227,7 +234,10 @@ public class ExecutionFondComponent implements IExecutionUploadComponent {
|
|||
} catch (ClearingException ce) {
|
||||
auditMessage(ce);
|
||||
} catch (Exception e) {
|
||||
log.error("When create new ExecutionFond by STrade[{}] error: {}", sTrd.getId(), ExceptionUtils.getStackTrace(e));
|
||||
String err = String.format("When create new ExecutionFond by STrade[%d] error: %s",
|
||||
sTrd.getId(),
|
||||
ExceptionUtils.getStackTrace(e));
|
||||
logNotifyE(err);
|
||||
}
|
||||
}
|
||||
log.info("batch putAll {} ExecutionFond", execsToInsert.size());
|
||||
|
|
@ -240,7 +250,8 @@ public class ExecutionFondComponent implements IExecutionUploadComponent {
|
|||
|
||||
|
||||
protected void auditMessage(ClearingException ce) {
|
||||
log.error("AUDIT error code {}: {}", ce.getEnumMsg(), ce.getMessage());
|
||||
String err = String.format("AUDIT error code %s: %s", ce.getEnumMsg(), ce.getMessage());
|
||||
logNotifyE(err);
|
||||
}
|
||||
|
||||
protected void sendNotification(ExecutionFond forEF) throws ClearingException {
|
||||
|
|
@ -389,11 +400,32 @@ public class ExecutionFondComponent implements IExecutionUploadComponent {
|
|||
}
|
||||
|
||||
private void logError(IEnumId subject, Object... args) {
|
||||
log.info("{}", msgResolver.resolve(new EnumMessage(subject, args)));
|
||||
String err = msgResolver.resolve(new EnumMessage(subject, args));
|
||||
log.info("{}", err);
|
||||
notifications.sendNotification(ObjectType.vfrs, err, Priority.HIGH);
|
||||
}
|
||||
|
||||
private void logError(Long sTradeId, EnumMessage msg) {
|
||||
log.warn("sTrade id={} {}", sTradeId, msgResolver.resolve(msg));
|
||||
String err = format("sTrade id=%d %s", sTradeId, msgResolver.resolve(msg));
|
||||
log.warn(err);
|
||||
notifications.sendNotification(ObjectType.vfrs, err, Priority.HIGH);
|
||||
}
|
||||
|
||||
private void logNotifyW(String msg) {
|
||||
logNotify(msg, Level.WARN);
|
||||
}
|
||||
|
||||
private void logNotifyE(String msg) {
|
||||
logNotify(msg, Level.ERROR);
|
||||
}
|
||||
|
||||
private void logNotify(String msg, Level lvl) {
|
||||
switch (lvl) {
|
||||
case WARN -> log.warn(msg);
|
||||
case ERROR -> log.error(msg);
|
||||
default -> log.error("lvl not supported {}. {}", lvl, msg);
|
||||
}
|
||||
notifications.sendNotification(ObjectType.vfrs, msg, Priority.HIGH);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ import org.springframework.stereotype.Component;
|
|||
import ru.clearing.classes.statics.data.company.Company;
|
||||
import ru.clearing.classes.statics.data.company.CompanyRoleSet;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.component.GroupRgsKey;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.service.AssetTrio;
|
||||
import ru.spcex.clearing.session.stage.util.RegistryUtil;
|
||||
|
|
@ -56,15 +57,16 @@ public class PaymentStateMarkService {
|
|||
pb.equals("registryStatus", RegistryStatus.OK.getKey())
|
||||
);
|
||||
Collection<Registry> claimsAndLiabilities = rgsImdg.getCollectionObjectsByPredicate(prdct);
|
||||
Map<Long, List<Registry>> groups = claimsAndLiabilities
|
||||
Map<GroupRgsKey, List<Registry>> groups = claimsAndLiabilities
|
||||
.stream()
|
||||
.filter(rgs -> rgs.getValueDate() != null)
|
||||
.filter(rgs -> rgs.getSettlementDate() != null)
|
||||
.filter(rgs -> rgs.getSettlementDate().equals(rgs.getValueDate()))
|
||||
.collect(Collectors.groupingBy(Registry::getGroupId));
|
||||
.collect(Collectors.groupingBy(registry -> new GroupRgsKey(registry.getGroupId(), registry.getMarket())));
|
||||
log.debug("found {} ({} groups) CM*T/LM*T by {}", claimsAndLiabilities.size(), groups.size(), prdct.toString());
|
||||
for (Map.Entry<Long, List<Registry>> group : groups.entrySet()) {
|
||||
Long groupId = group.getKey();
|
||||
for (Map.Entry<GroupRgsKey, List<Registry>> group : groups.entrySet()) {
|
||||
Long groupId = group.getKey().groupId();
|
||||
String market = group.getKey().market();
|
||||
Function<RegistryDesignation, Registry> findRgs = (rd) -> group.getValue()
|
||||
.stream()
|
||||
.filter(rgs -> rd.equalsByKey(rgs.getRegistryDesignation()))
|
||||
|
|
@ -73,7 +75,7 @@ public class PaymentStateMarkService {
|
|||
Registry cm_t = findRgs.apply(RegistryDesignation.T);
|
||||
Registry lm_t = findRgs.apply(RegistryDesignation.O);
|
||||
if (cm_t == null || lm_t == null) {
|
||||
log.warn("groupId {}, coudn't find CM*T or LM*T", groupId);
|
||||
log.warn("groupId/market {}/{}, coudn't find CM*T or LM*T", groupId, market);
|
||||
continue;
|
||||
}
|
||||
CompanyRoleSet initRole = cmpRoleImdg.getFirstObjectBySQL(
|
||||
|
|
@ -84,7 +86,8 @@ public class PaymentStateMarkService {
|
|||
)
|
||||
);
|
||||
if (initRole == null) {
|
||||
log.debug("groupId {}, initiator (lm*t.id={}) does not have ODEP role", groupId, lm_t.getId());
|
||||
log.debug("groupId/market {}/{}, initiator (lm*t.id={}) does not have ODEP role", groupId,
|
||||
market, lm_t.getId());
|
||||
continue;
|
||||
}
|
||||
Registry dm_v = cm_t.clone();
|
||||
|
|
@ -95,8 +98,8 @@ public class PaymentStateMarkService {
|
|||
dm_v.setBalance(cm_t.getBalance());
|
||||
dm_v.setRegistryStatus(RegistryStatus.PROC.getKey());
|
||||
rgsImdg.insert(dm_v);
|
||||
log.debug("groupId {}, lm*t.id={}, cm*t.id={} created dm*v.id={}",
|
||||
groupId, lm_t.getId(), cm_t.getId(), dm_v.getId());
|
||||
log.debug("groupId/market {}/{}, lm*t.id={}, cm*t.id={} created dm*v.id={}",
|
||||
groupId, market, lm_t.getId(), cm_t.getId(), dm_v.getId());
|
||||
Optional<AssetTrio> assetsFound = assets.searchMoneyByAccAndCompany(cm_t.getCompanyId(), cm_t.getAccountId());
|
||||
assetsFound.ifPresent(assetTrio
|
||||
-> assets.process(assetTrio.a__b(), assetTrio.a__t(), assetTrio.a__f(), BigDecimal.ZERO));
|
||||
|
|
|
|||
|
|
@ -1,5 +1,9 @@
|
|||
package ru.spcex.clearing.service.validation;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.error.ClearingError;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
|
|
@ -12,11 +16,6 @@ import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
|||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||
import ru.spcex.platform.utils.validation.IValidationRule;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public enum RefundDateValidationRule implements IValidationRule<ImdgValidationContext<RegistryChangeRefundDateRequest>> {
|
||||
Fields() {
|
||||
@Override
|
||||
|
|
@ -39,6 +38,7 @@ public enum RefundDateValidationRule implements IValidationRule<ImdgValidationCo
|
|||
ImdgPredicateBuilder pb = rgsImdg.predicateBuilder();
|
||||
ImdgPredicate prdct = pb.and(
|
||||
pb.equals("groupId", validatedObject.getGroupId()),
|
||||
pb.equals("market", validatedObject.getMarket()),
|
||||
pb.or(
|
||||
pb.equals("registryStatus", RegistryStatus.PROC.getKey()),
|
||||
pb.equals("registryStatus", RegistryStatus.MNG.getKey()),
|
||||
|
|
@ -55,8 +55,8 @@ public enum RefundDateValidationRule implements IValidationRule<ImdgValidationCo
|
|||
.filter(rgs -> rgs.getRefundDate().equals(rgs.getSettlementDate()))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (rgss.size() < 1) {
|
||||
return of(ClearingError.RecordNotFound, "groupId=" + validatedObject.getGroupId());
|
||||
if (rgss.isEmpty()) {
|
||||
return of(ClearingError.RecordNotFound, "groupId=%d; market=%s".formatted(validatedObject.getGroupId(), validatedObject.getMarket()));
|
||||
}
|
||||
for (Registry rgs : rgss) {
|
||||
if (!validatedObject.getRefundDate().isAfter(rgs.getValueDate())) { // если request.RefundDate <= ValueDate - то ошибка
|
||||
|
|
|
|||
|
|
@ -1,10 +1,14 @@
|
|||
package ru.spcex.clearing.service.validation;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Collection;
|
||||
import java.util.Optional;
|
||||
import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.error.ClearingError;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistryReturnDepositRequest;
|
||||
import static ru.spcex.clearing.service.registry.RegistryManager.equalsByCode;
|
||||
import ru.spcex.platform.enumeration.ClearingCategory;
|
||||
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
|
|
@ -19,12 +23,6 @@ import ru.spcex.platform.utils.enumeration.IEnumKey;
|
|||
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;
|
||||
|
||||
import static ru.spcex.clearing.service.registry.RegistryManager.equalsByCode;
|
||||
|
||||
//1. Проверки
|
||||
//1.1 Проверить, в запросе у регистра код:
|
||||
// 1.1.1 Если регистр TM-T:
|
||||
|
|
@ -67,7 +65,11 @@ public enum ReturnDepositValidationRule implements IValidationRule<ImdgValidatio
|
|||
if (ctgr.get().equals(ClearingCategory.V)) {
|
||||
Imdg<Registry> rgsImdg = context.obtainMap(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
ImdgPredicateBuilder pb = rgsImdg.predicateBuilder();
|
||||
String mrkt = rgs.getMarket();
|
||||
ImdgPredicate mrktCondition = TextUtil.isEmpty(mrkt) ?
|
||||
pb.alwaysTrue() : pb.or(pb.equals("market", mrkt), pb.isNull("market"));
|
||||
ImdgPredicate prdct = pb.and(
|
||||
mrktCondition,
|
||||
pb.equals("groupId", rgs.getGroupId()),
|
||||
pb.equals("contract", rgs.getContract())
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
package ru.spcex.clearing.session.stage.impl;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.Collection;
|
||||
import java.util.stream.Collectors;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
|
@ -8,6 +11,8 @@ import org.springframework.context.annotation.Scope;
|
|||
import org.springframework.stereotype.Service;
|
||||
import ru.clearing.classes.statics.data.misc.Session;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.component.GroupRgsKey;
|
||||
import static ru.spcex.clearing.error.ClearingErrorInternal.SessionGeneralError;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.SdfClearingRequest;
|
||||
|
|
@ -24,13 +29,6 @@ import ru.spcex.platform.imdg.api.ImdgProvider;
|
|||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static ru.spcex.clearing.error.ClearingErrorInternal.SessionGeneralError;
|
||||
|
||||
@Service
|
||||
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
||||
public class EndStageNotification implements ISessionStage {
|
||||
|
|
@ -83,25 +81,24 @@ public class EndStageNotification implements ISessionStage {
|
|||
}
|
||||
|
||||
Collection<Registry> forRegistries = selectRegistry();
|
||||
Collection<Long> groups = forRegistries.stream()
|
||||
.map(Registry::getGroupId)
|
||||
.filter(Objects::nonNull)
|
||||
Collection<GroupRgsKey> groups = forRegistries.stream()
|
||||
.map(registry -> new GroupRgsKey(registry.getGroupId(), registry.getMarket()))
|
||||
.distinct().collect(Collectors.toList());
|
||||
log.debug("Sending notifications for {} groups ({} registers) on section {}",
|
||||
groups, forRegistries.size(), section);
|
||||
for (Long groupId : groups) {
|
||||
log.trace("For registry group {} send notification",
|
||||
groupId);
|
||||
for (GroupRgsKey groupKey : groups) {
|
||||
log.trace("For registry group/market {}/{} send notification",
|
||||
groupKey.groupId(), groupKey.market());
|
||||
StageResult sResult;
|
||||
if (Section.FOND.equalsByKey(section)) {
|
||||
sResult = notificationDF14(groupId);
|
||||
sResult = notificationDF14(groupKey.groupId());
|
||||
} else if (Section.MKR.equalsByKey(section)) {
|
||||
sResult = notificationDF05(groupId);
|
||||
sResult = notificationDF05(groupKey.groupId());
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unsupported section " + section);
|
||||
}
|
||||
if (sResult.getError() != null) {
|
||||
log.warn("When sending groupId={} has error: {}", groupId, msgResolver.resolve(sResult.getError()));
|
||||
log.warn("When sending groupId={} has error: {}", groupKey, msgResolver.resolve(sResult.getError()));
|
||||
}
|
||||
}
|
||||
StageResult<Collection<Registry>> res = new StageResult<>(null, true);
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ 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.clearing.classes.statics.data.sdf.SDf05;
|
||||
import ru.spcex.clearing.component.GroupRgsKey;
|
||||
import static ru.spcex.clearing.error.ClearingErrorInternal.SessionGeneralError;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||
|
|
@ -135,12 +136,13 @@ public class FinishingSession implements ISessionStage {
|
|||
log.error("Session id={} not found. Can not update Execution's.", sessionId);
|
||||
} else {
|
||||
Collection<Registry> oRegs = findORegistryBySessionId(allLiabilitiesAndOKClaims);
|
||||
Map<Long, RegistryStatus> obligationStatusByGroupId;
|
||||
Map<GroupRgsKey, RegistryStatus> obligationStatusByGroupId;
|
||||
obligationStatusByGroupId = oRegs.stream()
|
||||
.map(rgs -> new Pair<>(rgs.getGroupId(), getEnumByKey(RegistryStatus.class, rgs.getRegistryStatus())))
|
||||
.map(rgs -> new Pair<>(new GroupRgsKey(rgs.getGroupId(), rgs.getMarket()),
|
||||
getEnumByKey(RegistryStatus.class, rgs.getRegistryStatus())))
|
||||
.filter(pair -> pair.getSecond() != null)
|
||||
.collect(Collectors.toMap(Pair::getFirst, Pair::getSecond, (o1, o2) -> o1));
|
||||
Function<Long, CoverageStatus> statusByExchangeId = id-> {
|
||||
Function<GroupRgsKey, CoverageStatus> statusByExchangeId = id-> {
|
||||
RegistryStatus obligationStatus = obligationStatusByGroupId.get(id);
|
||||
if (obligationStatus == null) return null;
|
||||
return switch (obligationStatus) {
|
||||
|
|
@ -164,7 +166,8 @@ public class FinishingSession implements ISessionStage {
|
|||
Collection<ExecutionDeposit> executions = findExecutionDepositBySessionId(sessionId);
|
||||
log.trace("loaded {} ExecutionDeposits for sessionId {}", executions.size(), sessionId);
|
||||
for (ExecutionDeposit execution : executions) {
|
||||
CoverageStatus toStatus = statusByExchangeId.apply(execution.getExchangeExecutionId());
|
||||
CoverageStatus toStatus = statusByExchangeId.apply(
|
||||
new GroupRgsKey(execution.getExchangeExecutionId(), execution.getMarket()));
|
||||
if (toStatus == null) {
|
||||
log.trace("CoverageStatus not defined for execution.id={}", execution.getId());
|
||||
continue;
|
||||
|
|
@ -194,7 +197,8 @@ public class FinishingSession implements ISessionStage {
|
|||
Map<Long, ExecutionFond> execFond = new HashMap<>();
|
||||
log.trace("loaded {} Executions for sessionId {}", executions.size(), sessionId);
|
||||
for (ExecutionCommon execution : executions) {
|
||||
CoverageStatus toStatus = statusByExchangeId.apply(execution.getExchangeExecutionId());
|
||||
CoverageStatus toStatus = statusByExchangeId.apply(
|
||||
new GroupRgsKey(execution.getExchangeExecutionId(), execution.getMarket()));
|
||||
if (toStatus == null) {
|
||||
log.trace("CoverageStatus not defined for execution.id={}", execution.getId());
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import ru.clearing.classes.statics.data.registry.Registry;
|
|||
import ru.clearing.classes.statics.data.sdf.SDf03;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf12;
|
||||
import ru.clearing.classes.statics.data.security.Security;
|
||||
import ru.spcex.clearing.component.GroupRgsKey;
|
||||
import ru.spcex.clearing.error.ClearingError;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||
|
|
@ -126,18 +127,18 @@ public class FormingPaymentInstructionDepositReturn implements ISessionStage {
|
|||
.filter(rgs -> rgs.getSettlementDate().isAfter(rgs.getValueDate()))
|
||||
.toList();
|
||||
|
||||
Map<Long, List<Registry>> registriesByGroup = obligations
|
||||
Map<GroupRgsKey, List<Registry>> registriesByGroup = obligations
|
||||
.stream().
|
||||
collect(Collectors.groupingBy(Registry::getGroupId));
|
||||
collect(Collectors.groupingBy(registry -> new GroupRgsKey(registry.getGroupId(), registry.getMarket())));
|
||||
log.info("registry groups found {}", registriesByGroup.size());
|
||||
|
||||
ArrayList<PaymentInstruction> pmtCreated = new ArrayList<>();
|
||||
for (Map.Entry<Long, List<Registry>> entry : registriesByGroup.entrySet()) {
|
||||
for (Map.Entry<GroupRgsKey, List<Registry>> entry : registriesByGroup.entrySet()) {
|
||||
List<Registry> groupRgs = entry.getValue();
|
||||
Optional<Registry> lmtO = groupRgs.stream().filter(rgs -> RegistryManager.equalsByCode(RegistryTradingParams.OM_T, rgs)).findFirst();
|
||||
Optional<Registry> cmtO = groupRgs.stream().filter(rgs -> RegistryManager.equalsByCode(RegistryTradingParams.TM_T, rgs)).findFirst();
|
||||
if (lmtO.isEmpty() || cmtO.isEmpty()) {
|
||||
log.error("groupId {} LM*T or CM*T not found", entry.getKey());
|
||||
log.error("groupId/market {}/{} LM*T or CM*T not found", entry.getKey().groupId(), entry.getKey().market());
|
||||
continue;
|
||||
}
|
||||
Registry lm_t = lmtO.get(); //obligation by money
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import ru.clearing.classes.statics.data.registry.Registry;
|
|||
import ru.clearing.classes.statics.data.sdf.SDf03;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf12;
|
||||
import ru.clearing.classes.statics.data.security.Security;
|
||||
import ru.spcex.clearing.component.GroupRgsKey;
|
||||
import ru.spcex.clearing.error.ClearingError;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||
|
|
@ -151,16 +152,16 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
|||
|
||||
List<PaymentInstruction> pmtCreated = new ArrayList<>();
|
||||
|
||||
Map<Long, List<Registry>> registriesByGroup = rgsAll
|
||||
Map<GroupRgsKey, List<Registry>> registriesByGroup = rgsAll
|
||||
.stream().
|
||||
collect(Collectors.groupingBy(Registry::getGroupId));
|
||||
collect(Collectors.groupingBy(registry -> new GroupRgsKey(registry.getGroupId(), registry.getMarket())));
|
||||
log.info("registry groups found {}", registriesByGroup.size());
|
||||
for (Map.Entry<Long, List<Registry>> entry : registriesByGroup.entrySet()) {
|
||||
for (Map.Entry<GroupRgsKey, List<Registry>> entry : registriesByGroup.entrySet()) {
|
||||
List<Registry> groupRgs = entry.getValue();
|
||||
Optional<Registry> lmtO = groupRgs.stream().filter(rgs -> equalByRgs(RegistryTradingParams.OM_T, rgs)).findFirst();
|
||||
Optional<Registry> cmtO = groupRgs.stream().filter(rgs -> equalByRgs(RegistryTradingParams.TM_T, rgs)).findFirst();
|
||||
if (lmtO.isEmpty() || cmtO.isEmpty()) {
|
||||
log.error("LM*T or CM*T not found for group {}", entry.getKey());
|
||||
log.error("LM*T or CM*T not found for group/market {}/{}", entry.getKey().groupId(), entry.getKey().market());
|
||||
continue;
|
||||
}
|
||||
Registry lm_t = lmtO.get(); //obligation by money
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import ru.clearing.classes.statics.data.registry.Registry;
|
|||
import ru.clearing.classes.statics.data.sdf.SDf03;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf12;
|
||||
import ru.clearing.classes.statics.data.security.Security;
|
||||
import ru.spcex.clearing.component.GroupRgsKey;
|
||||
import ru.spcex.clearing.error.ClearingError;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||
|
|
@ -159,14 +160,16 @@ public class FormingPaymentInstructionSecurities implements ISessionStage {
|
|||
{
|
||||
Collection<Registry> registries = selectSecurityRegistries(sessionId);
|
||||
log.debug("found registries.size() = {}", registries.size());
|
||||
//группируем регистры по groupId
|
||||
Map<Long, List<Registry>> groups = registries
|
||||
.stream()
|
||||
.collect(Collectors.groupingBy(Registry::getGroupId));
|
||||
//группируем регистры по groupId и market
|
||||
Map<GroupRgsKey, List<Registry>> groups = registries
|
||||
.stream()
|
||||
.collect(Collectors.groupingBy(r -> new GroupRgsKey(r.getGroupId(), r.getMarket())));
|
||||
|
||||
log.debug("groups.size = {}", groups.size());
|
||||
Map<Long, PaymentGroup> lstGroups = RegistryLiabilitiesGroup.group(groups);
|
||||
for (Map.Entry<Long, List<Registry>> group : groups.entrySet()) {
|
||||
Long groupId = group.getKey();
|
||||
for (Map.Entry<GroupRgsKey, List<Registry>> group : groups.entrySet()) {
|
||||
Long groupId = group.getKey().groupId();
|
||||
String market = group.getKey().market();
|
||||
Function<RegistryTradingParams, Registry> findByCode = rgsCode -> group.getValue()
|
||||
.stream()
|
||||
.filter(rgs -> RegistryManager.equalsByCode(rgsCode, rgs))
|
||||
|
|
@ -176,12 +179,12 @@ public class FormingPaymentInstructionSecurities implements ISessionStage {
|
|||
Registry cs_t = findByCode.apply(RegistryTradingParams.TS_T);
|
||||
Registry ls_t = findByCode.apply(RegistryTradingParams.OS_T);
|
||||
if (cs_t == null || ls_t == null) {
|
||||
log.error("groupId {} cmt_t {} ls_t {} - both must be present", groupId, cs_t, ls_t);
|
||||
log.error("groupId/market {}/{} cmt_t {} ls_t {} - both must be present", groupId, market, cs_t, ls_t);
|
||||
continue;
|
||||
}
|
||||
PaymentGroup ls_t_group = lstGroups.get(ls_t.getId());
|
||||
if (ls_t_group == null) {
|
||||
log.debug("groupId {} cmt_t {} ls_t {} were included in a group, skipping", groupId, cs_t, ls_t);
|
||||
log.debug("groupId/market {}/{} cmt_t {} ls_t {} were included in a group, skipping", groupId, market, cs_t, ls_t);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -192,7 +195,7 @@ public class FormingPaymentInstructionSecurities implements ISessionStage {
|
|||
AS_T
|
||||
);
|
||||
payerAstO.ifPresent(as_t -> {
|
||||
log.debug("groupId {} cmt_t {} ls_t {} changing AS*T.id={} sender", groupId, cs_t, ls_t, as_t.getId());
|
||||
log.debug("groupId/market {}/{} cmt_t {} ls_t {} changing AS*T.id={} sender", groupId, market, cs_t, ls_t, as_t.getId());
|
||||
as_t.setSettledDebit(safeBD(as_t.getSettledDebit()).add(safeBD(ls_t_group.getSum())));
|
||||
setUpdatedStoreInImdg(as_t, now);
|
||||
});
|
||||
|
|
@ -203,7 +206,7 @@ public class FormingPaymentInstructionSecurities implements ISessionStage {
|
|||
AS_T
|
||||
);
|
||||
receiverAstO.ifPresent(as_t -> {
|
||||
log.debug("groupId {} cmt_t {} ls_t {} changing AS*T.id={} receiver", groupId, cs_t, ls_t, as_t.getId());
|
||||
log.debug("groupId/market {}/{} cmt_t {} ls_t {} changing AS*T.id={} receiver", groupId, market, cs_t, ls_t, as_t.getId());
|
||||
as_t.setSettledCredit(safeBD(as_t.getSettledCredit()).add(safeBD(ls_t_group.getSum())));
|
||||
setUpdatedStoreInImdg(as_t, now);
|
||||
});
|
||||
|
|
@ -236,7 +239,7 @@ public class FormingPaymentInstructionSecurities implements ISessionStage {
|
|||
|
||||
paymentInstructionImdg.insert(pmt);
|
||||
paymentInstructionAll.add(pmt);
|
||||
log.trace("generated PaymentInstructions for groupId {}: pmtInstr.id={}", groupId, pmt.getId());
|
||||
log.trace("generated PaymentInstructions for groupId/market {}/{}: pmtInstr.id={}", groupId, market, pmt.getId());
|
||||
}
|
||||
}
|
||||
{
|
||||
|
|
|
|||
|
|
@ -18,12 +18,14 @@ 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 org.springframework.util.StringUtils;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionCommon;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionCurrency;
|
||||
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.component.GroupRgsKey;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
import ru.spcex.clearing.session.stage.ISessionStage;
|
||||
|
|
@ -129,17 +131,17 @@ public class InclusionObligations implements ISessionStage {
|
|||
}
|
||||
log.info("Inclusion to pool with predicate: {}", registryPredicate.toString());
|
||||
Collection<Registry> obligations = registryImdg.getCollectionObjectsByPredicate(registryPredicate);
|
||||
Map<Long, List<Registry>> registryByGroupId = obligations.stream()
|
||||
Map<GroupRgsKey, List<Registry>> registryByGroupId = obligations.stream()
|
||||
.filter(registry -> registry.getSettlementDate().isEqual(LocalDate.now()))
|
||||
.collect(Collectors.groupingBy(Registry::getGroupId));
|
||||
.collect(Collectors.groupingBy(registry -> new GroupRgsKey(registry.getGroupId(), registry.getMarket())));
|
||||
|
||||
Optional<SessionType> ssnType = obtainSessionType(sessionId);
|
||||
Map<Long, Registry> rgsToUpdate = new HashMap<>();
|
||||
List<ExecutionCommon> execsToUpdate = new ArrayList<>();
|
||||
boolean loadExecs = !IEnumKey.contains(sessionType,
|
||||
SessionType.TRDT, SessionType.CURR, SessionType.UNIT, SessionType.IPOT);
|
||||
for (Map.Entry<Long, List<Registry>> entrySet : registryByGroupId.entrySet()) {
|
||||
log.debug("Processing set of registry with groupId: {}", entrySet.getKey());
|
||||
for (Map.Entry<GroupRgsKey, List<Registry>> entrySet : registryByGroupId.entrySet()) {
|
||||
log.debug("Processing set of registry with groupId/market: {}/{}", entrySet.getKey().groupId(), entrySet.getKey().market());
|
||||
String rgsSection = null;
|
||||
for (Registry registry : entrySet.getValue()) {
|
||||
registry.setRegistryStatus(RegistryStatus.POOL.getKey());
|
||||
|
|
@ -164,7 +166,7 @@ public class InclusionObligations implements ISessionStage {
|
|||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private <T extends ExecutionCommon> Collection<ExecutionCommon> updateExecutions(Long sessionId, Long rgsGroupId, String rgsSection) {
|
||||
private <T extends ExecutionCommon> Collection<ExecutionCommon> updateExecutions(Long sessionId, GroupRgsKey groupRgsKey, String rgsSection) {
|
||||
Instant now = Instant.now();
|
||||
SessionType ssnTpe = obtainSessionType(sessionId).orElse(null);
|
||||
if (ssnTpe == null || sessionId == null) {
|
||||
|
|
@ -193,7 +195,10 @@ public class InclusionObligations implements ISessionStage {
|
|||
return Collections.emptyList();
|
||||
}
|
||||
ImdgPredicateBuilder pb = execImdg.predicateBuilder();
|
||||
ImdgPredicate prdct = pb.equals("exchangeExecutionId", rgsGroupId);
|
||||
ImdgPredicate prdct = pb.and(
|
||||
pb.equals("exchangeExecutionId", groupRgsKey.groupId()),
|
||||
StringUtils.hasText(groupRgsKey.market()) ? pb.equals("market", groupRgsKey.market()) : pb.alwaysTrue()
|
||||
);
|
||||
Collection<T> execs = execImdg.getCollectionObjectsByPredicate(prdct);
|
||||
//Imdg<T> finalExecImdg = execImdg;
|
||||
execs.forEach(e -> {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,9 @@ 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 org.springframework.util.StringUtils;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.component.GroupRgsKey;
|
||||
import ru.spcex.clearing.error.ClearingError;
|
||||
import ru.spcex.clearing.error.RgsError;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
|
|
@ -348,8 +350,8 @@ public class InspectionObligations implements ISessionStage {
|
|||
|
||||
private Collection<Registry> getRefundDateRgsIfPresent(List<Registry> registries) {
|
||||
if (registries.stream().anyMatch(rgs -> rgs.getRefundDate() != null) && !SessionType.MEDM.equals(sessionType)) {
|
||||
Optional<Pair<Long, LocalDate>> groupIdAndSettleDate = registries.stream()
|
||||
.map(rgs -> new Pair<>(rgs.getGroupId(), rgs.getSettlementDate()))
|
||||
Optional<Pair<GroupRgsKey, LocalDate>> groupIdAndSettleDate = registries.stream()
|
||||
.map(rgs -> new Pair<>(new GroupRgsKey(rgs.getGroupId(),rgs.getMarket()), rgs.getSettlementDate()))
|
||||
.filter(pair -> pair.getFirst() != null)
|
||||
.filter(pair -> pair.getSecond() != null)
|
||||
.findFirst();
|
||||
|
|
@ -359,8 +361,12 @@ public class InspectionObligations implements ISessionStage {
|
|||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
return registryImdg.getCollectionObjectsByPredicate(
|
||||
pb.and(
|
||||
pb.equals("groupId", groupIdAndSettleDate.get().getFirst()),
|
||||
pb.not(pb.equals("settlementDate", groupIdAndSettleDate.get().getSecond()))
|
||||
pb.and(
|
||||
pb.equals("groupId", groupIdAndSettleDate.get().getFirst().groupId()),
|
||||
StringUtils.hasText(groupIdAndSettleDate.get().getFirst().market()) ?
|
||||
pb.equals("market", groupIdAndSettleDate.get().getFirst().market()) : pb.alwaysTrue()
|
||||
),
|
||||
pb.not(pb.equals("settlementDate", groupIdAndSettleDate.get().getSecond()))
|
||||
)
|
||||
);
|
||||
} else return Collections.emptyList();
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@ import org.springframework.context.annotation.Scope;
|
|||
import org.springframework.stereotype.Service;
|
||||
import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.component.GroupRgsKey;
|
||||
import ru.spcex.clearing.component.GroupRgsKeyComparator;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.service.AssetTrio;
|
||||
import ru.spcex.clearing.service.integration.GatewayRequestCreator;
|
||||
|
|
@ -53,6 +55,7 @@ public class InspectionObligationsDepositReturn implements ISessionStage {
|
|||
private final TradingTimeService tradingTimeService;
|
||||
private final GatewayRequester gateway;
|
||||
private final PlanBalanceCalc planBalanceCalc;
|
||||
private static final GroupRgsKeyComparator groupRgsKeyComparator = new GroupRgsKeyComparator();
|
||||
|
||||
@Autowired
|
||||
public InspectionObligationsDepositReturn(ImdgProvider imdgProvider, RegistryManager rgsMng, AssetTBFProcessing assets, TradingTimeService tradingTimeService, GatewayRequester gateway, PlanBalanceCalc planBalanceCalc) {
|
||||
|
|
@ -97,27 +100,27 @@ public class InspectionObligationsDepositReturn implements ISessionStage {
|
|||
RegistryCodeSqlBuilder.getInstance(OS_T, OM_T, TS_T, TM_T).build(),
|
||||
RegistryStatus.POOL.getKey());
|
||||
|
||||
List<Map.Entry<Long, List<Registry>>> registriesByGroupSorted = registryImdg.getCollectionObjectsBySQL(sqlCondition)
|
||||
List<Map.Entry<GroupRgsKey, List<Registry>>> registriesByGroupSorted = registryImdg.getCollectionObjectsBySQL(sqlCondition)
|
||||
.stream()
|
||||
.collect(Collectors.groupingBy(Registry::getGroupId))
|
||||
.collect(Collectors.groupingBy(registry -> new GroupRgsKey(registry.getGroupId(), registry.getMarket())))
|
||||
.entrySet()
|
||||
.stream()
|
||||
.sorted(Map.Entry.comparingByKey())
|
||||
.sorted(groupRgsKeyComparator)
|
||||
.toList();
|
||||
log.info("registry groups found {}", registriesByGroupSorted.size());
|
||||
|
||||
for (Map.Entry<Long, List<Registry>> entry : registriesByGroupSorted) {
|
||||
for (Map.Entry<GroupRgsKey, List<Registry>> entry : registriesByGroupSorted) {
|
||||
List<Registry> group = entry.getValue();
|
||||
Optional<Registry> omtInGroupO = group.stream().filter(registry -> equalByRgs(OM_T, registry)).findFirst();
|
||||
Optional<Registry> tmtInGroupO = group.stream().filter(registry -> equalByRgs(TM_T, registry)).findFirst();
|
||||
if (omtInGroupO.isEmpty() || tmtInGroupO.isEmpty()) {
|
||||
log.error("groupId {} failed to find OM*T/TM*T registry", entry.getKey());
|
||||
log.error("groupId/market {}/{} failed to find OM*T/TM*T registry", entry.getKey().groupId(), entry.getKey().market());
|
||||
group.forEach(rgs -> updateStatus(rgs, registryStatusFailed())); // FAIL or MNG
|
||||
continue;
|
||||
}
|
||||
Registry omtRgs = omtInGroupO.get();
|
||||
Registry tmtRgs = tmtInGroupO.get();
|
||||
log.debug("groupId={}, OM*T.id={}", entry.getKey(), omtRgs.getId());
|
||||
log.debug("groupId={}, market={}, OM*T.id={}", entry.getKey().groupId(), entry.getKey().market(), omtRgs.getId());
|
||||
BigDecimal omtBalance = safeBD(omtRgs.getBalance());
|
||||
|
||||
//первая часть сделки депозита
|
||||
|
|
@ -150,18 +153,20 @@ public class InspectionObligationsDepositReturn implements ISessionStage {
|
|||
Optional<Registry> amfAssetO = searchAssetByOMT(omtRgs);
|
||||
Optional<Registry> amfAssetReceiverO = searchAssetByOMT(tmtRgs);
|
||||
if (amfAssetO.isEmpty()) {
|
||||
log.error("OM*T register.id={} groupId={} failed to find AM*F asset", omtRgs.getId(), entry.getKey());
|
||||
log.error("OM*T register.id={} groupId={}, market={} failed to find AM*F asset", omtRgs.getId(),
|
||||
entry.getKey().groupId(), entry.getKey().market());
|
||||
group.forEach(rgs -> updateStatus(rgs, registryStatusFailed())); // FAIL or MNG
|
||||
continue;
|
||||
}
|
||||
if (amfAssetReceiverO.isEmpty()) {
|
||||
log.error("TM*T register.id={} groupId={} failed to find AM*F asset", tmtRgs.getId(), entry.getKey());
|
||||
log.error("TM*T register.id={} groupId={}, market={} failed to find AM*F asset", tmtRgs.getId(),
|
||||
entry.getKey().groupId(), entry.getKey().market());
|
||||
group.forEach(rgs -> updateStatus(rgs, registryStatusFailed())); // FAIL or MNG
|
||||
continue;
|
||||
}
|
||||
|
||||
Registry amfAsset = amfAssetO.get();
|
||||
log.debug("groupId={}, AM*F.id={}", entry.getKey(), amfAsset.getId());
|
||||
log.debug("groupId={}, market={}, AM*F.id={}", entry.getKey().groupId(), entry.getKey().market(), amfAsset.getId());
|
||||
BigDecimal amfBalance = safeBD(amfAsset.getBalance());
|
||||
BiConsumer<Registry, BigDecimal> processAssetsAndSetSessionId = (amf, amount) -> {
|
||||
Optional<AssetTrio> asts = assets.processByAm_f(amf, amount);
|
||||
|
|
|
|||
|
|
@ -18,7 +18,9 @@ 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 org.springframework.util.StringUtils;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.component.GroupRgsKey;
|
||||
import ru.spcex.clearing.component.predicate.cash.registry.AssetByTcrCompanyAccountCashedPredicate;
|
||||
import ru.spcex.clearing.error.ClearingError;
|
||||
import ru.spcex.clearing.error.RgsError;
|
||||
|
|
@ -128,8 +130,8 @@ public class InspectionObligationsV2 implements ISessionStage {
|
|||
|
||||
Collection<Registry> registriesToProcess = registryImdg.getCollectionObjectsBySQL(sqlCondition);
|
||||
Map<Long, Registry> rgssToStore = new HashMap<>(registriesToProcess.size()); //вторые ноги у сделок - нужна ли оптимизация?
|
||||
List<Map.Entry<Long, List<Registry>>> registriesByGroupSorted = registriesToProcess.stream()
|
||||
.collect(Collectors.groupingBy(Registry::getGroupId))
|
||||
List<Map.Entry<GroupRgsKey, List<Registry>>> registriesByGroupSorted = registriesToProcess.stream()
|
||||
.collect(Collectors.groupingBy(registry -> new GroupRgsKey(registry.getGroupId(), registry.getMarket())))
|
||||
.entrySet()
|
||||
.stream()
|
||||
.sorted((entry1, entry2) -> {
|
||||
|
|
@ -150,15 +152,15 @@ public class InspectionObligationsV2 implements ISessionStage {
|
|||
log.info("found {} ({} groups) registries by sql: {}", registriesToProcess.size(), registriesByGroupSorted.size(), sqlCondition);
|
||||
ImdgPredicateBuilder rgsPb = registryImdg.predicateBuilder();
|
||||
GROUP:
|
||||
for (Map.Entry<Long, List<Registry>> entry : registriesByGroupSorted) {
|
||||
for (Map.Entry<GroupRgsKey, List<Registry>> entry : registriesByGroupSorted) {
|
||||
List<Registry> group = entry.getValue();
|
||||
|
||||
List<Registry> obligationsInGroup = group.stream().filter(registry ->
|
||||
IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.O).toList();
|
||||
log.debug("Find {} obligation with ids: {} in group: {}", obligationsInGroup.size(),
|
||||
log.debug("Find {} obligation with ids: {} in group/market: {}/{}", obligationsInGroup.size(),
|
||||
obligationsInGroup.stream()
|
||||
.map(Registry::getId).collect(Collectors.toList()),
|
||||
entry.getKey());
|
||||
entry.getKey().groupId(), entry.getKey().market());
|
||||
boolean isUncovered = false;
|
||||
List<CheckResult> checkResults = new ArrayList<>();
|
||||
for (Registry obligation : obligationsInGroup) {
|
||||
|
|
@ -191,7 +193,7 @@ public class InspectionObligationsV2 implements ISessionStage {
|
|||
});
|
||||
RegistryInstrumentType mOrS = IEnumKey.getEnumByKey(RegistryInstrumentType.class, rgs.getRegistryInstrumentType());
|
||||
if (mOrS == null) {
|
||||
log.error("RegistryInstrumentType is null for groupId {} {}.id={}", entry.getKey(),
|
||||
log.error("RegistryInstrumentType is null for groupId/market {}/{} {}.id={}", entry.getKey().groupId(), entry.getKey().market(),
|
||||
rgs.getRegistryCode(), rgs.getId());
|
||||
failGroup.run();
|
||||
continue;
|
||||
|
|
@ -345,8 +347,9 @@ public class InspectionObligationsV2 implements ISessionStage {
|
|||
|
||||
private Collection<Registry> getRefundDateRgsIfPresent(List<Registry> registries) {
|
||||
if (registries.stream().anyMatch(rgs -> rgs.getRefundDate() != null) && !SessionType.MEDM.equals(sessionType)) {
|
||||
Optional<Pair<Long, LocalDate>> groupIdAndSettleDate = registries.stream()
|
||||
.map(rgs -> new Pair<>(rgs.getGroupId(), rgs.getSettlementDate()))
|
||||
//доп группировка по market не нужна, лист registries уже сгруппирован
|
||||
Optional<Pair<GroupRgsKey, LocalDate>> groupIdAndSettleDate = registries.stream()
|
||||
.map(rgs -> new Pair<>(new GroupRgsKey(rgs.getGroupId(),rgs.getMarket()), rgs.getSettlementDate()))
|
||||
.filter(pair -> pair.getFirst() != null)
|
||||
.filter(pair -> pair.getSecond() != null)
|
||||
.findFirst();
|
||||
|
|
@ -354,11 +357,17 @@ public class InspectionObligationsV2 implements ISessionStage {
|
|||
return Collections.emptyList();
|
||||
}
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
String groupMarket = groupIdAndSettleDate.get().getFirst().market();
|
||||
ImdgPredicate marketCondition = StringUtils.hasText(groupMarket) ?
|
||||
pb.or(pb.equals("market", groupMarket), pb.isNull("market")) : pb.alwaysTrue();
|
||||
return registryImdg.getCollectionObjectsByPredicate(
|
||||
pb.and(
|
||||
pb.and(
|
||||
pb.equals("groupId", groupIdAndSettleDate.get().getFirst()),
|
||||
pb.not(pb.equals("settlementDate", groupIdAndSettleDate.get().getSecond()))
|
||||
)
|
||||
pb.equals("groupId", groupIdAndSettleDate.get().getFirst().groupId()),
|
||||
marketCondition
|
||||
),
|
||||
pb.not(pb.equals("settlementDate", groupIdAndSettleDate.get().getSecond()))
|
||||
)
|
||||
);
|
||||
} else return Collections.emptyList();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ import ru.clearing.classes.statics.data.company.Company;
|
|||
import ru.clearing.classes.statics.data.company.relation.Relation;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||
import ru.spcex.clearing.component.GroupRgsKey;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.service.validation.admission.AccountActiveValidationRule;
|
||||
import ru.spcex.clearing.service.validation.admission.ClearingAvailableValidationRule;
|
||||
|
|
@ -76,10 +77,11 @@ public class ObligationAdmission implements ISessionStage {
|
|||
|
||||
private StageResult<?> obligationAdmission(Long sessionId) {
|
||||
Collection<Registry> registries = registryImdg.getCollectionObjectsBySQL("sessionId = " + sessionId);
|
||||
Map<Long, List<Registry>> byGroups = registries.stream().collect(Collectors.groupingBy(Registry::getGroupId));
|
||||
Map<GroupRgsKey, List<Registry>> byGroups = registries.stream()
|
||||
.collect(Collectors.groupingBy(registry -> new GroupRgsKey(registry.getGroupId(), registry.getMarket())));
|
||||
log.info("found {} ({} groups) registries with sessionId {}", registries.size(), byGroups.size(), sessionId);
|
||||
Map<Long, Registry> rgsToUpdate = new HashMap<>();
|
||||
for (Map.Entry<Long, List<Registry>> grpEntry : byGroups.entrySet()) {
|
||||
for (Map.Entry<GroupRgsKey, List<Registry>> grpEntry : byGroups.entrySet()) {
|
||||
EnumMessage groupError = null;
|
||||
List<Registry> rgsGroup = grpEntry.getValue();
|
||||
for (Registry rgs : rgsGroup) {
|
||||
|
|
@ -91,7 +93,8 @@ public class ObligationAdmission implements ISessionStage {
|
|||
}
|
||||
}
|
||||
if (groupError != null) {
|
||||
log.warn("error {} for registries groupId = {}", messageResolver.resolve(groupError), grpEntry.getKey());
|
||||
log.warn("error {} for registries groupId/market = {}/{}", messageResolver.resolve(groupError),
|
||||
grpEntry.getKey().groupId(), grpEntry.getKey().market());
|
||||
for (Registry rgs : rgsGroup) {
|
||||
rgs.setRegistryStatus(RegistryStatus.NACK.getKey());
|
||||
rgsToUpdate.put(rgs.getId(), rgs);
|
||||
|
|
|
|||
|
|
@ -210,6 +210,7 @@ public class RegistryCkBuilder implements IRegistryBuilder {
|
|||
reg.setSessionId(exec.getSessionId());
|
||||
reg.setSessionType(sessionType());
|
||||
reg.setSection(Section.CURR.getKey());
|
||||
reg.setMarket(exec.getMarket());
|
||||
return reg;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -213,6 +213,7 @@ public class RegistryCurrBuilder implements IRegistryBuilder {
|
|||
reg.setSessionId(exec.getSessionId());
|
||||
reg.setSessionType(sessionType());
|
||||
reg.setSection(Section.CURR.getKey());
|
||||
reg.setMarket(exec.getMarket());
|
||||
return reg;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -158,6 +158,7 @@ public class RegistryDepoBuilder implements IRegistryBuilder {
|
|||
reg.setSessionId(exec.getSessionId());
|
||||
reg.setSessionType(sessionType());
|
||||
reg.setSection(Section.MKR.getKey());
|
||||
reg.setMarket(exec.getMarket());
|
||||
return reg;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -239,6 +239,7 @@ public class RegistryFondBuilder implements IRegistryBuilder {
|
|||
reg.setSessionId(exec.getSessionId());
|
||||
reg.setSessionType(sessionType());
|
||||
reg.setSection(Section.FOND.getKey());
|
||||
reg.setMarket(exec.getMarket());
|
||||
return reg;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -363,7 +363,8 @@ public class RequirementsAndObligationCreation implements ISessionStage {
|
|||
exec.getCompanyId(),
|
||||
settlementDt(exec),
|
||||
exec.getSessionId(),
|
||||
exec.getExchangeExecutionId()
|
||||
exec.getExchangeExecutionId(),
|
||||
exec.getMarket()
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -396,11 +397,12 @@ public class RequirementsAndObligationCreation implements ISessionStage {
|
|||
exec.getCompanyId(),
|
||||
((ExecutionDeposit) exec).getSecondLegSettlementDate(),
|
||||
exec.getSessionId(),
|
||||
exec.getExchangeExecutionId());
|
||||
exec.getExchangeExecutionId(),
|
||||
exec.getMarket());
|
||||
}
|
||||
|
||||
public Optional<Registry> imdgRegSearch(RegistryTradingParams p, Long tcrId, Long companyId, LocalDate settlementDt,
|
||||
Long sessionId, Long exchangeExecutionId) {
|
||||
Long sessionId, Long exchangeExecutionId, String market) {
|
||||
String sql = RegistryCodeSqlBuilder.getInstance(p).build();
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
ImdgPredicate rgstrPredicate = pb.and(pb.sql(sql),
|
||||
|
|
@ -408,7 +410,8 @@ public class RequirementsAndObligationCreation implements ISessionStage {
|
|||
pb.equals("companyId", companyId),
|
||||
pb.equals("settlementDate", settlementDt),
|
||||
pb.equals("sessionId", sessionId),
|
||||
pb.equals("groupId", exchangeExecutionId)
|
||||
pb.equals("groupId", exchangeExecutionId),
|
||||
pb.or(pb.equals("market", market), pb.isNull("market"))
|
||||
);
|
||||
Registry rgs = registryImdg.getSingleObjectByPredicate(rgstrPredicate);
|
||||
log.trace("rgs.id={} found by: {}", rgs == null ? "'not found'" : rgs.getId(), rgstrPredicate.toString());
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import java.util.stream.Collectors;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.component.GroupRgsKey;
|
||||
import ru.spcex.clearing.service.registry.RegistryManager;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
import static ru.spcex.platform.enumeration.RegistryTradingParams.OS_T;
|
||||
|
|
@ -21,17 +22,18 @@ import ru.spcex.platform.utils.text.TextUtil;
|
|||
public class RegistryLiabilitiesGroup {
|
||||
private static final Logger log = LoggerFactory.getLogger(RegistryLiabilitiesGroup.class);
|
||||
|
||||
public static Map<Long, PaymentGroup> group(Map<Long, List<Registry>> registriesCollection) {
|
||||
public static Map<Long, PaymentGroup> group(Map<GroupRgsKey, List<Registry>> registriesCollection) {
|
||||
Map<Long, PaymentGroup> result = new HashMap<>();
|
||||
List<Pair<Registry, Registry>> lstCstGroup = registriesCollection.entrySet()
|
||||
.stream()
|
||||
.map(entry -> {
|
||||
Long groupId = entry.getKey();
|
||||
Long groupId = entry.getKey().groupId();
|
||||
String market = entry.getKey().market();
|
||||
List<Registry> value = entry.getValue();
|
||||
Registry ls_t = obtain(value, OS_T);
|
||||
Registry cs_t = obtain(value, TS_T);
|
||||
if (ls_t == null || cs_t == null) {
|
||||
log.error("groupId {} registries {} failed to find LS_T/CS_T", groupId, value.stream()
|
||||
log.error("groupId/market {}/{} registries {} failed to find LS_T/CS_T", groupId, market, value.stream()
|
||||
.map(Registry::getId)
|
||||
.map(Object::toString)
|
||||
.collect(TextUtil.join));
|
||||
|
|
|
|||
|
|
@ -57,17 +57,4 @@ public class RegistryUtil {
|
|||
newRgsCde.setCharAt(2, '-');
|
||||
return newRgsCde.toString();
|
||||
}
|
||||
|
||||
public static Map<Long, List<Registry>> groupByGroupId(Collection<Registry> registries) {
|
||||
HashMap<Long, List<Registry>> groups = new HashMap<>();
|
||||
for (Registry reg : registries) {
|
||||
List<Registry> lst = groups.get(reg.getGroupId());
|
||||
if (lst == null) {
|
||||
lst = new ArrayList<>();
|
||||
groups.put(reg.getGroupId(), lst);
|
||||
}
|
||||
lst.add(reg);
|
||||
}
|
||||
return groups;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,12 +8,12 @@
|
|||
<name>clearing-validation</name>
|
||||
<description>Clearing-module, dependency version of platform-utils</description>
|
||||
<packaging>jar</packaging>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
|
||||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
|
|
@ -35,13 +35,13 @@
|
|||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>classes</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>dictionary</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
|
|
|||
|
|
@ -7,12 +7,12 @@
|
|||
<artifactId>db-scripts</artifactId>
|
||||
<name>db-scripts</name>
|
||||
<description>db-scripts for PostgreSQL</description>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
|
||||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
|
||||
<build>
|
||||
|
|
|
|||
|
|
@ -25,13 +25,28 @@ INSERT INTO CURRENCY(ID, CURRENCY_CODE) values (840, 'USD') ON CONFLICT (ID) DO
|
|||
INSERT INTO CURRENCY(ID, CURRENCY_CODE) values (978, 'EUR') ON CONFLICT (ID) DO UPDATE SET CURRENCY_CODE = EXCLUDED.CURRENCY_CODE;
|
||||
|
||||
INSERT INTO CURRENCY(ID, CURRENCY_CODE) values (156, 'CNY') ON CONFLICT (ID) DO UPDATE SET CURRENCY_CODE = EXCLUDED.CURRENCY_CODE;
|
||||
INSERT INTO CURRENCY (ID, CURRENCY_CODE) VALUES (398, 'KZT') ON CONFLICT (ID) DO UPDATE SET CURRENCY_CODE = EXCLUDED.CURRENCY_CODE;
|
||||
INSERT INTO CURRENCY (ID, CURRENCY_CODE) VALUES (51, 'AMD') ON CONFLICT (ID) DO UPDATE SET CURRENCY_CODE = EXCLUDED.CURRENCY_CODE;
|
||||
INSERT INTO CURRENCY (ID, CURRENCY_CODE) VALUES (417, 'KGS') ON CONFLICT (ID) DO UPDATE SET CURRENCY_CODE = EXCLUDED.CURRENCY_CODE;
|
||||
INSERT INTO CURRENCY (ID, CURRENCY_CODE) VALUES (860, 'UZS') ON CONFLICT (ID) DO UPDATE SET CURRENCY_CODE = EXCLUDED.CURRENCY_CODE;
|
||||
INSERT INTO CURRENCY (ID, CURRENCY_CODE) VALUES (933, 'BYN') 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 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, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN, COMPANY_ID, CURRENCY) VALUES (1, '30414810300000006000', 'TRAN', 'ACTV', 'ALWD', 1, 'RUB') 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, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN, COMPANY_ID, CURRENCY) VALUES (2, '30414810600000007000', 'ANLT', 'ACTV', 'ALWD', 1, 'RUB') 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, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN, COMPANY_ID, CURRENCY) VALUES (3, '700100000AT0', 'DTRN', 'ACTV', 'ALWD', 1, '') 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, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN, COMPANY_ID, CURRENCY) VALUES (4, '30414156500000007000' ,'ANLT' ,'ACTV' ,'ALWD' ,1, 'CNY') 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, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN, COMPANY_ID, CURRENCY) VALUES (5, '30414156200000006000' ,'TRAN' ,'ACTV' ,'ALWD' ,1, 'CNY') 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, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN, COMPANY_ID, CURRENCY) VALUES (6, '30414860100000007000' ,'ANLT' ,'ACTV' ,'ALWD' ,1, 'UZS') 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, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN, COMPANY_ID, CURRENCY) VALUES (7, '30414860800000006000' ,'TRAN' ,'ACTV' ,'ALWD' ,1, 'UZS') 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, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN, COMPANY_ID, CURRENCY) VALUES (10, '30414398300000007000' ,'ANLT' ,'ACTV' ,'ALWD' ,1, 'KZT') 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, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN, COMPANY_ID, CURRENCY) VALUES (11, '30414398000000006000' ,'TRAN' ,'ACTV' ,'ALWD' ,1, 'KZT') 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, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN, COMPANY_ID, CURRENCY) VALUES (12, '30414417100000007000' ,'ANLT' ,'ACTV' ,'ALWD' ,1, 'KGS') 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, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN, COMPANY_ID, CURRENCY) VALUES (13, '30414417800000006000' ,'TRAN' ,'ACTV' ,'ALWD' ,1, 'KGS') 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, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN, COMPANY_ID, CURRENCY) VALUES (14, '30414933600000007000' ,'ANLT' ,'ACTV' ,'ALWD' ,1, 'BYN') 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, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN, COMPANY_ID, CURRENCY) VALUES (15, '30414933300000006000' ,'TRAN' ,'ACTV' ,'ALWD' ,1, 'BYN') 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, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN, COMPANY_ID, CURRENCY) VALUES (16, '30414051100000007000' ,'ANLT' ,'ACTV' ,'ALWD' ,1, 'AMD') 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, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN, COMPANY_ID, CURRENCY) VALUES (17, '30414051800000006000' ,'TRAN' ,'ACTV' ,'ALWD' ,1, 'AMD') 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;
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
-- DB version: 3.8
|
||||
-- DATA version: 3.9.0.68
|
||||
|
||||
|
||||
/* Dictionaries */
|
||||
|
||||
/* 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 (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;
|
||||
|
||||
INSERT INTO COMPANY(ID, FULL_NAME, SHORT_NAME, TRADING_CODE, CLEARING_CODE, WORKFLOW_STATUS) values (3, 'Торговая организация', 'ТС', '', '', '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 (4, 'ЗАО «Санкт-Петербургский Расчетно-Депозитарный Центр»', 'РДЦ', '', '', '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 (5, 'ЛЦК', 'ЛЦК', '800', '800', '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_SYMBOLS(ID, COMPANY_ID, COMPANY_SYMBOL, COMPANY_SYMBOL_VALUE) values (1, 1, 'BIC', '044030920') ON CONFLICT (ID) DO UPDATE SET COMPANY_ID = EXCLUDED.COMPANY_ID, COMPANY_SYMBOL = EXCLUDED.COMPANY_SYMBOL, COMPANY_SYMBOL_VALUE = EXCLUDED.COMPANY_SYMBOL_VALUE;
|
||||
|
||||
INSERT INTO COMPANY_SYMBOLS(ID, COMPANY_ID, COMPANY_SYMBOL, COMPANY_SYMBOL_VALUE) values (2, 2, 'BIC', '044030505') ON CONFLICT (ID) DO UPDATE SET COMPANY_ID = EXCLUDED.COMPANY_ID, COMPANY_SYMBOL = EXCLUDED.COMPANY_SYMBOL, COMPANY_SYMBOL_VALUE = EXCLUDED.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 (156, 'CNY') 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 (156, 'CRNC', 'CNY', 'Китайский юань', 'CNY', '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 ACCOUNT(ID, COMPANY_ID, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN,currency) values (1, 5, 'TRAN', 'TRAN', 'ACTV', 'ALWD','RUB') 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,currency) values (5, 5, 'TRANCNY', 'TRAN', 'ACTV', 'ALWD','CNY') 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,CURRENCY) values (2, 5, '30414810900000000600', 'ANLT', 'ACTV', 'ALWD','RUB') 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,CURRENCY) values (4, 5, '30414156800000000600', 'ANLT', 'ACTV', 'ALWD','CNY') 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, 5, '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;
|
||||
|
|
@ -2082,7 +2082,7 @@ GRANT ALL PRIVILEGES ON TABLE TRADING_CLEARING_REGISTRY_LIST_HISTORY TO clearing
|
|||
|
||||
-- registry - Регистр активов, обязательств и требований УК
|
||||
DROP TABLE IF EXISTS REGISTRY;
|
||||
CREATE TABLE REGISTRY(COMPANY_ID bigint, TRADING_CODE varchar(255), CLEARING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255), ACCOUNT_ID bigint, ACCOUNT_TYPE varchar(4), ACCOUNT varchar(50), REGISTRY_DESIGNATION varchar(4), REGISTRY_INSTRUMENT_TYPE varchar(4), REGISTRY_CAPACITY varchar(4), REGISTRY_UNIT varchar(4), REGISTRY_CODE varchar(4), TRADING_CLEARING_REGISTRY_ID bigint, TRADING_CLEARING_REGISTRY varchar(50), REGISTRY_STATUS varchar(4), SECURITY_SYMBOL varchar(255), BALANCE numeric(72,18), BALANCE_RUB numeric(72,18), OPEN_BALANCE numeric(72,18), CLOSE_BALANCE numeric(72,18), CREDIT numeric(72,18), DEBIT numeric(72,18), SETTLED_CREDIT numeric(72,18), SETTLED_DEBIT numeric(72,18), CHECK_BALANCE numeric(72,18), DIFF_BALANCE numeric(72,18), PLAN_BALANCE numeric(72,18), BALANCE_DIMENSION varchar(4), SETTLEMENT_DATE date, SETTLEMENT_CODE varchar(12), TRADING_DATE date, CLEARING_DATE date, REFUND_DATE date, VALUE_DATE date, PRICE numeric(72,18), CONTRACT varchar(255), COUNTER_PARTY_ID bigint, COMMENT varchar(255), REASON varchar(255), PARENT_ID bigint, GROUP_ID bigint, SESSION_ID bigint, SESSION_TYPE varchar(4), PAYMENT_ID bigint, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, SECURITY_ID bigint, SECTION varchar(4));
|
||||
CREATE TABLE REGISTRY(COMPANY_ID bigint, TRADING_CODE varchar(255), CLEARING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255), ACCOUNT_ID bigint, ACCOUNT_TYPE varchar(4), ACCOUNT varchar(50), REGISTRY_DESIGNATION varchar(4), REGISTRY_INSTRUMENT_TYPE varchar(4), REGISTRY_CAPACITY varchar(4), REGISTRY_UNIT varchar(4), REGISTRY_CODE varchar(4), TRADING_CLEARING_REGISTRY_ID bigint, TRADING_CLEARING_REGISTRY varchar(50), REGISTRY_STATUS varchar(4), SECURITY_SYMBOL varchar(255), BALANCE numeric(72,18), BALANCE_RUB numeric(72,18), OPEN_BALANCE numeric(72,18), CLOSE_BALANCE numeric(72,18), CREDIT numeric(72,18), DEBIT numeric(72,18), SETTLED_CREDIT numeric(72,18), SETTLED_DEBIT numeric(72,18), CHECK_BALANCE numeric(72,18), DIFF_BALANCE numeric(72,18), PLAN_BALANCE numeric(72,18), BALANCE_DIMENSION varchar(4), SETTLEMENT_DATE date, SETTLEMENT_CODE varchar(12), TRADING_DATE date, CLEARING_DATE date, REFUND_DATE date, VALUE_DATE date, PRICE numeric(72,18), CONTRACT varchar(255), COUNTER_PARTY_ID bigint, COMMENT varchar(255), REASON varchar(255), PARENT_ID bigint, GROUP_ID bigint, SESSION_ID bigint, SESSION_TYPE varchar(4), PAYMENT_ID bigint, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, SECURITY_ID bigint, SECTION varchar(4), MARKET varchar(8));
|
||||
COMMENT ON TABLE REGISTRY IS 'Регистр активов, обязательств и требований УК';
|
||||
|
||||
COMMENT ON COLUMN REGISTRY.COMPANY_ID IS 'Идентификатор участника (linked to company)';
|
||||
|
|
@ -2185,12 +2185,14 @@ COMMENT ON COLUMN REGISTRY.SECURITY_ID IS 'Идентификатор инстр
|
|||
|
||||
COMMENT ON COLUMN REGISTRY.SECTION IS 'Код секции (linked to section)';
|
||||
|
||||
COMMENT ON COLUMN REGISTRY.MARKET IS 'Код класса инструмента';
|
||||
|
||||
GRANT ALL PRIVILEGES ON TABLE REGISTRY TO clearing;
|
||||
|
||||
|
||||
-- History log of registry - Регистр активов, обязательств и требований УК
|
||||
DROP TABLE IF EXISTS REGISTRY_HISTORY;
|
||||
CREATE TABLE REGISTRY_HISTORY(REGISTRY_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), COMPANY_ID bigint, TRADING_CODE varchar(255), CLEARING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255), ACCOUNT_ID bigint, ACCOUNT_TYPE varchar(4), ACCOUNT varchar(50), REGISTRY_DESIGNATION varchar(4), REGISTRY_INSTRUMENT_TYPE varchar(4), REGISTRY_CAPACITY varchar(4), REGISTRY_UNIT varchar(4), REGISTRY_CODE varchar(4), TRADING_CLEARING_REGISTRY_ID bigint, TRADING_CLEARING_REGISTRY varchar(50), REGISTRY_STATUS varchar(4), SECURITY_SYMBOL varchar(255), BALANCE numeric(72,18), BALANCE_RUB numeric(72,18), OPEN_BALANCE numeric(72,18), CLOSE_BALANCE numeric(72,18), CREDIT numeric(72,18), DEBIT numeric(72,18), SETTLED_CREDIT numeric(72,18), SETTLED_DEBIT numeric(72,18), CHECK_BALANCE numeric(72,18), DIFF_BALANCE numeric(72,18), PLAN_BALANCE numeric(72,18), BALANCE_DIMENSION varchar(4), SETTLEMENT_DATE date, SETTLEMENT_CODE varchar(12), TRADING_DATE date, CLEARING_DATE date, REFUND_DATE date, VALUE_DATE date, PRICE numeric(72,18), CONTRACT varchar(255), COUNTER_PARTY_ID bigint, COMMENT varchar(255), REASON varchar(255), PARENT_ID bigint, GROUP_ID bigint, SESSION_ID bigint, SESSION_TYPE varchar(4), PAYMENT_ID bigint, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, SECURITY_ID bigint, SECTION varchar(4));
|
||||
CREATE TABLE REGISTRY_HISTORY(REGISTRY_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), COMPANY_ID bigint, TRADING_CODE varchar(255), CLEARING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255), ACCOUNT_ID bigint, ACCOUNT_TYPE varchar(4), ACCOUNT varchar(50), REGISTRY_DESIGNATION varchar(4), REGISTRY_INSTRUMENT_TYPE varchar(4), REGISTRY_CAPACITY varchar(4), REGISTRY_UNIT varchar(4), REGISTRY_CODE varchar(4), TRADING_CLEARING_REGISTRY_ID bigint, TRADING_CLEARING_REGISTRY varchar(50), REGISTRY_STATUS varchar(4), SECURITY_SYMBOL varchar(255), BALANCE numeric(72,18), BALANCE_RUB numeric(72,18), OPEN_BALANCE numeric(72,18), CLOSE_BALANCE numeric(72,18), CREDIT numeric(72,18), DEBIT numeric(72,18), SETTLED_CREDIT numeric(72,18), SETTLED_DEBIT numeric(72,18), CHECK_BALANCE numeric(72,18), DIFF_BALANCE numeric(72,18), PLAN_BALANCE numeric(72,18), BALANCE_DIMENSION varchar(4), SETTLEMENT_DATE date, SETTLEMENT_CODE varchar(12), TRADING_DATE date, CLEARING_DATE date, REFUND_DATE date, VALUE_DATE date, PRICE numeric(72,18), CONTRACT varchar(255), COUNTER_PARTY_ID bigint, COMMENT varchar(255), REASON varchar(255), PARENT_ID bigint, GROUP_ID bigint, SESSION_ID bigint, SESSION_TYPE varchar(4), PAYMENT_ID bigint, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, SECURITY_ID bigint, SECTION varchar(4), MARKET varchar(8));
|
||||
COMMENT ON TABLE REGISTRY_HISTORY IS 'История изменений таблицы registry';
|
||||
COMMENT ON COLUMN REGISTRY_HISTORY.REGISTRY_ID IS 'Идентификатор записи в таблице REGISTRY';
|
||||
COMMENT ON COLUMN REGISTRY_HISTORY.EVENT_TIME IS 'Дата и время изменения';
|
||||
|
|
@ -2296,6 +2298,7 @@ COMMENT ON COLUMN REGISTRY_HISTORY.UPDATED_AT IS 'Дата и время изм
|
|||
COMMENT ON COLUMN REGISTRY_HISTORY.SECURITY_ID IS 'Идентификатор инструмента (linked to security)';
|
||||
|
||||
COMMENT ON COLUMN REGISTRY_HISTORY.SECTION IS 'Код секции (linked to section)';
|
||||
COMMENT ON COLUMN REGISTRY_HISTORY.MARKET IS 'Код класса инструмента';
|
||||
|
||||
GRANT ALL PRIVILEGES ON TABLE REGISTRY_HISTORY TO clearing;
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@ INSERT INTO WORKFLOW_STATUS_DICTIONARY(ID, CODE, NAME) values (1, 'ACTV', 'Ак
|
|||
|
||||
INSERT INTO WORKFLOW_STATUS_DICTIONARY(ID, CODE, NAME) values (2, 'BLKD', 'Не активен') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||
|
||||
INSERT INTO WORKFLOW_STATUS_DICTIONARY(ID, CODE, NAME) values (3, 'PAUS', 'Приостановлен') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||
|
||||
INSERT INTO COUNTRY_CODE_DICTIONARY(ID, CODE, NAME) values (1, 'RUS', 'Россия') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||
|
||||
INSERT INTO SECTION_DICTIONARY(ID, CODE, NAME) values (1, 'MKR', 'Секция Денежного рынка МКР') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||
|
|
@ -644,6 +646,8 @@ INSERT INTO OBJECT_TYPE_DICTIONARY(ID, CODE, NAME) values (6, 'ACCB', 'account')
|
|||
|
||||
INSERT INTO OBJECT_TYPE_DICTIONARY(ID, CODE, NAME) values (7, 'DIFF', 'registry') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||
|
||||
INSERT INTO OBJECT_TYPE_DICTIONARY(ID, CODE, NAME) values (8, 'SESS', 'session') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||
|
||||
INSERT INTO NOTIFICATION_STATUS_DICTIONARY(ID, CODE, NAME) values (1, 'PEND', 'В ожидании') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||
|
||||
INSERT INTO NOTIFICATION_STATUS_DICTIONARY(ID, CODE, NAME) values (2, 'CNCL', 'Отменено') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||
|
|
|
|||
|
|
@ -6,186 +6,101 @@
|
|||
|
||||
/* 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;
|
||||
|
||||
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (96, 'PRMR', 'CURR', 'RUB', 'UVAV', 'Двусторонний непрерывный аукцион', 1, 'Двусторонний непрерывный аукцион (TOD)') 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 (97, 'PRMR', 'CURR', 'RUB', 'NVAV', 'Режим адресных сделок с клирингом и расчетами на СПВБ', 1, 'Режим адресных сделок с клирингом и расчетами на СПВБ (TOD)') 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, EXCHANGE_ID, NAME, CODE, SETTLEMENT_CURRENCY, SECTION, MARKET_TYPE, DESCRIPTION) values (103, 1, 'Режим непрерывных торгов', 'UDXC', 'RUB', 'FOND', 'SCND', 'СПВБ: Цифровые свидетельства с индексируемым номиналом УЦП – Режим непрерывных торгов') ON CONFLICT (ID) DO UPDATE SET EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, NAME = EXCLUDED.NAME, CODE = EXCLUDED.CODE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE;
|
||||
|
||||
INSERT INTO MARKET(ID, EXCHANGE_ID, NAME, CODE, SETTLEMENT_CURRENCY, SECTION, MARKET_TYPE, DESCRIPTION) values (104, 1, 'Режим непрерывных торгов', 'UDUC', 'RUB', 'FOND', 'SCND', 'СПВБ: Цифровые свидетельства с постоянным номиналом УЦП – Режим непрерывных торгов') ON CONFLICT (ID) DO UPDATE SET EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, NAME = EXCLUDED.NAME, CODE = EXCLUDED.CODE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE;
|
||||
|
||||
INSERT INTO MARKET(ID, EXCHANGE_ID, NAME, CODE, SETTLEMENT_CURRENCY, SECTION, MARKET_TYPE, DESCRIPTION) values (105, 1, 'Режим переговорных сделок (РПС)', 'NDXC', 'RUB', 'FOND', 'SCND', 'СПВБ: Цифровые свидетельства с индексируемым номиналом УЦП – Режим переговорных сделок (РПС)') ON CONFLICT (ID) DO UPDATE SET EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, NAME = EXCLUDED.NAME, CODE = EXCLUDED.CODE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE;
|
||||
|
||||
INSERT INTO MARKET(ID, EXCHANGE_ID, NAME, CODE, SETTLEMENT_CURRENCY, SECTION, MARKET_TYPE, DESCRIPTION) values (106, 1, 'Режим переговорных сделок (РПС)', 'NDUC', 'RUB', 'FOND', 'SCND', 'СПВБ: Цифровые свидетельства с постоянным номиналом УЦП – Режим переговорных сделок (РПС)') ON CONFLICT (ID) DO UPDATE SET EXCHANGE_ID = EXCLUDED.EXCHANGE_ID, NAME = EXCLUDED.NAME, CODE = EXCLUDED.CODE, SETTLEMENT_CURRENCY = EXCLUDED.SETTLEMENT_CURRENCY, SECTION = EXCLUDED.SECTION, MARKET_TYPE = EXCLUDED.MARKET_TYPE;
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Акции. Торги', 1, 'СПВБ: Акции. Торги', 'UESC', 'RUB', 'FOND', 'SCND', 1);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Режим переговорных сделок (РПС)', 1, 'Режим переговорных сделок (РПС)', 'NESC', 'RUB', 'FOND', 'SCND', 2);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Дискретный аукцион', 1, 'Дискретный аукцион', 'DESC', 'RUB', 'FOND', 'SCND', 3);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: акции (аукцион по цене)', 1, 'Размещение: акции (аукцион по цене)', 'AESC', 'RUB', 'FOND', 'PRMR', 4);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: адресные заявки (подписка)', 1, 'Размещение: адресные заявки (подписка)', 'WESC', 'RUB', 'FOND', 'PRMR', 5);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Режим непрерывных торгов', 1, 'Режим непрерывных торгов', 'UEPC', 'RUB', 'FOND', 'SCND', 6);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Режим переговорных сделок (РПС)', 1, 'Режим переговорных сделок (РПС)', 'NEPC', 'RUB', 'FOND', 'SCND', 7);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Дискретный аукцион', 1, 'Дискретный аукцион', 'DEPC', 'RUB', 'FOND', 'SCND', 8);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: акции (аукцион по цене)', 1, 'Размещение: акции (аукцион по цене)', 'AEPC', 'RUB', 'FOND', 'PRMR', 9);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: адресные заявки (подписка)', 1, 'Размещение: адресные заявки (подписка)', 'WEPC', 'RUB', 'FOND', 'PRMR', 10);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Обл. с ПК - Аукцион ', 1, 'СПВБ: Обл. с ПК - Аукцион', 'ABVC', 'RUB', 'FOND', 'PRMR', 11);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Обл. с ПК-Доразмещение', 1, 'СПВБ: Обл. с ПК-Доразмещение', 'SBVC', 'RUB', 'FOND', 'PRMR', 12);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: Аукцион по ставке', 1, 'Размещение: Аукцион по ставке', 'KBVC', 'RUB', 'FOND', 'PRMR', 13);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Обл. с ПК - Торги', 1, 'СПВБ: Обл. с ПК - Торги', 'UBVC', 'RUB', 'FOND', 'SCND', 14);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Режим переговорных сделок (РПС)', 1, 'Режим переговорных сделок (РПС)', 'NBVC', 'RUB', 'FOND', 'SCND', 15);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Дискретный аукцион', 1, 'Дискретный аукцион', 'DBVC', 'RUB', 'FOND', 'SCND', 16);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: адресные заявки (подписка)', 1, 'Размещение: адресные заявки (подписка)', 'WBVC', 'RUB', 'FOND', 'PRMR', 17);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Обл. с ПД-Аукцион ', 1, 'СПВБ: Обл. с ПД-Аукцион ', 'ABFC', 'RUB', 'FOND', 'PRMR', 18);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Обл. с ПД - Доразмещение', 1, 'СПВБ: Обл. с ПД - Доразмещение', 'SBFC', 'RUB', 'FOND', 'PRMR', 19);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: Аукцион по ставке', 1, 'Размещение: Аукцион по ставке', 'KBFC', 'RUB', 'FOND', 'PRMR', 20);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Обл. с ПД - Торги', 1, 'СПВБ: Обл. с ПД - Торги', 'UBFC', 'RUB', 'FOND', 'SCND', 21);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Режим переговорных сделок (РПС)', 1, 'Режим переговорных сделок (РПС)', 'NBFC', 'RUB', 'FOND', 'SCND', 22);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Дискретный аукцион', 1, 'Дискретный аукцион', 'DBFC', 'RUB', 'FOND', 'SCND', 23);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: адресные заявки (подписка)', 1, 'Размещение: адресные заявки (подписка)', 'WBFC', 'RUB', 'FOND', 'PRMR', 24);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Обл. с ИН - Аукцион ', 1, 'СПВБ: Обл. с ИН - Аукцион ', 'ABIC', 'RUB', 'FOND', 'PRMR', 25);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Обл. с ИН - Доразмещение', 1, 'СПВБ: Обл. с ИН - Доразмещение', 'SBIC', 'RUB', 'FOND', 'PRMR', 26);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: Аукцион по ставке', 1, 'Размещение: Аукцион по ставке', 'KBIC', 'RUB', 'FOND', 'PRMR', 27);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Обл. с ИН - Торги', 1, 'СПВБ: Обл. с ИН - Торги', 'UBIC', 'RUB', 'FOND', 'SCND', 28);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Режим переговорных сделок (РПС)', 1, 'Режим переговорных сделок (РПС)', 'NBIC', 'RUB', 'FOND', 'SCND', 29);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Дискретный аукцион', 1, 'Дискретный аукцион', 'DBIC', 'RUB', 'FOND', 'SCND', 30);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: адресные заявки (подписка)', 1, 'Размещение: адресные заявки (подписка)', 'WBIC', 'RUB', 'FOND', 'PRMR', 31);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Обл. с АД - Аукцион ', 1, 'СПВБ: Обл. с АД - Аукцион', 'ABMC', 'RUB', 'FOND', 'PRMR', 32);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Обл. с АД -Доразмещение', 1, 'СПВБ: Обл. с АД -Доразмещение', 'SBMC', 'RUB', 'FOND', 'PRMR', 33);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: Аукцион по ставке', 1, 'Размещение: Аукцион по ставке', 'KBMC', 'RUB', 'FOND', 'PRMR', 34);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Обл. с АД - Торги', 1, 'СПВБ: Обл. с АД - Торги', 'UBMC', 'RUB', 'FOND', 'SCND', 35);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Режим переговорных сделок (РПС)', 1, 'Режим переговорных сделок (РПС)', 'NBMC', 'RUB', 'FOND', 'SCND', 36);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Дискретный аукцион', 1, 'Дискретный аукцион', 'DBMC', 'RUB', 'FOND', 'SCND', 37);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: адресные заявки (подписка)', 1, 'Размещение: адресные заявки (подписка)', 'WBMC', 'RUB', 'FOND', 'PRMR', 38);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Диск. обл. - Аукцион ', 1, 'СПВБ: Диск. обл. - Аукцион', 'ABZC', 'RUB', 'FOND', 'PRMR', 39);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Диск. обл.-Доразмещение', 1, 'СПВБ: Диск. обл.-Доразмещение', 'SBZC', 'RUB', 'FOND', 'PRMR', 40);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Диск. обл. - Торги', 1, 'СПВБ: Диск. обл. - Торги', 'UBZC', 'RUB', 'FOND', 'SCND', 41);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Диск. обл. - РПС', 1, 'СПВБ: Диск. обл. - РПС', 'NBZC', 'RUB', 'FOND', 'SCND', 42);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Диск. обл. - Дискретный аукцион', 1, 'СПВБ: Диск. обл. - Дискретный аукцион', 'DBZC', 'RUB', 'FOND', 'SCND', 43);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Диск. обл. - адресные заявки (подписка)', 1, 'СПВБ: Диск. обл. - адресные заявки (подписка)', 'WBZC', 'RUB', 'FOND', 'PRMR', 44);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: Аукцион СПВБ', 1, 'Размещение: Аукцион СПВБ', 'ABEC', 'RUB', 'FOND', 'PRMR', 45);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Режим непрерывных торгов', 1, 'Режим непрерывных торгов', 'UBEC', 'RUB', 'FOND', 'SCND', 46);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Режим переговорных сделок (РПС)', 1, 'Режим переговорных сделок (РПС)', 'NBEC', 'RUB', 'FOND', 'SCND', 47);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Дискретный аукцион', 1, 'Дискретный аукцион', 'DBEC', 'RUB', 'FOND', 'SCND', 48);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: Аукцион БР', 1, 'Размещение: Аукцион БР', 'BKVC', 'RUB', 'FOND', 'PRMR', 49);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Доразмещение: Адресные заявки БР', 1, 'Доразмещение: Адресные заявки БР', 'SKVC', 'RUB', 'FOND', 'PRMR', 50);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Режим непрерывных торгов', 1, 'Режим непрерывных торгов', 'UKVC', 'RUB', 'FOND', 'SCND', 51);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Режим переговорных сделок (РПС)', 1, 'Режим переговорных сделок (РПС)', 'NKVC', 'RUB', 'FOND', 'SCND', 52);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Дискретный аукцион', 1, 'Дискретный аукцион', 'DKVC', 'RUB', 'FOND', 'SCND', 53);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗПК-Размещение: Аукцион', 1, 'ОФЗПК-Размещение: Аукцион', 'BMVC', 'RUB', 'FOND', 'PRMR', 54);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗПК-Доразмещение: Адресные заявки', 1, 'ОФЗПК-Доразмещение: Адресные заявки', 'SMVC', 'RUB', 'FOND', 'PRMR', 55);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗПК-Режим непрерывных торгов', 1, 'ОФЗПК-Режим непрерывных торгов', 'UMVC', 'RUB', 'FOND', 'SCND', 56);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗПК-Дискретный аукцион', 1, 'ОФЗПК-Дискретный аукцион', 'DMVC', 'RUB', 'FOND', 'SCND', 57);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗПК-Торги в режиме выкупа', 1, 'ОФЗПК-Торги в режиме выкупа', 'PMVC', 'RUB', 'FOND', 'SCND', 58);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗПД-Размещение: Аукцион', 1, 'ОФЗПД-Размещение: Аукцион', 'BMFC', 'RUB', 'FOND', 'PRMR', 59);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗПД- Доразмещение: Адресные заявки', 1, 'ОФЗПД- Доразмещение: Адресные заявки', 'SMFC', 'RUB', 'FOND', 'PRMR', 60);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗПД-Режим непрерывных торгов', 1, 'ОФЗПД-Режим непрерывных торгов', 'UMFC', 'RUB', 'FOND', 'SCND', 61);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗПД-Дискретный аукцион', 1, 'ОФЗПД-Дискретный аукцион', 'DMFC', 'RUB', 'FOND', 'SCND', 62);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗПД-Торги в режиме выкупа', 1, 'ОФЗПД-Торги в режиме выкупа', 'PMFC', 'RUB', 'FOND', 'SCND', 63);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗАД-Размещение: Аукцион', 1, 'ОФЗАД-Размещение: Аукцион', 'BMMC', 'RUB', 'FOND', 'PRMR', 64);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗАД-Доразмещение: Адресные заявки', 1, 'ОФЗАД-Доразмещение: Адресные заявки', 'SMMC', 'RUB', 'FOND', 'PRMR', 65);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗАД-Режим непрерывных торгов', 1, 'ОФЗАД-Режим непрерывных торгов', 'UMMC', 'RUB', 'FOND', 'SCND', 66);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗАД-Дискретный аукцион', 1, 'ОФЗАД-Дискретный аукцион', 'DMMC', 'RUB', 'FOND', 'SCND', 67);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗАД-Торги в режиме выкупа', 1, 'ОФЗАД-Торги в режиме выкупа', 'PMMC', 'RUB', 'FOND', 'SCND', 68);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗИН-Размещение: Аукцион', 1, 'ОФЗИН-Размещение: Аукцион', 'BMIC', 'RUB', 'FOND', 'PRMR', 69);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗИН-Доразмещение: Адресные заявки', 1, 'ОФЗИН-Доразмещение: Адресные заявки', 'SMIC', 'RUB', 'FOND', 'PRMR', 70);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗИН-Режим непрерывных торгов', 1, 'ОФЗИН-Режим непрерывных торгов', 'UMIC', 'RUB', 'FOND', 'SCND', 71);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗИН-Дискретный аукцион', 1, 'ОФЗИН-Дискретный аукцион', 'DMIC', 'RUB', 'FOND', 'SCND', 72);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗИН-Торги в режиме выкупа', 1, 'ОФЗИН-Торги в режиме выкупа', 'PMIC', 'RUB', 'FOND', 'SCND', 73);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: депозитный аукцион', 1, 'Размещение: депозитный аукцион', 'XMDTATSS', 'RUB', 'MKR', 'PRMR', 74);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: депозитный аукцион', 1, 'Размещение: депозитный аукцион', 'XMDTAVGB', 'RUB', 'MKR', 'PRMR', 75);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: депозитный аукцион', 1, 'Размещение: депозитный аукцион', 'XMDTFSKB', 'RUB', 'MKR', 'PRMR', 76);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: депозитный аукцион', 1, 'Размещение: депозитный аукцион', 'XMDTKFLO', 'RUB', 'MKR', 'PRMR', 77);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: депозитный аукцион', 1, 'Размещение: депозитный аукцион', 'XMDTKFSP', 'RUB', 'MKR', 'PRMR', 78);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Депозитные торги (аукцион)', 1, 'Депозитные торги (аукцион)', 'XMNTFSKB', 'RUB', 'MKR', 'PRMR', 79);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Депозитные торги (аукцион)', 1, 'Депозитные торги (аукцион)', 'XMNTKFLO', 'RUB', 'MKR', 'PRMR', 80);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Депозитные торги (аукцион)', 1, 'Депозитные торги (аукцион)', 'XMNTKFSP', 'RUB', 'MKR', 'PRMR', 81);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: депозитный аукцион', 1, 'Размещение: депозитный аукцион', 'XMDSFSKB', 'RUB', 'MKR', 'PRMR', 82);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: депозитный аукцион', 1, 'Размещение: депозитный аукцион', 'XMDSKFLO', 'RUB', 'MKR', 'PRMR', 83);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: депозитный аукцион', 1, 'Размещение: депозитный аукцион', 'XMDSKFSP', 'RUB', 'MKR', 'PRMR', 84);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: депозитные торги', 1, 'Размещение: депозитные торги', 'XMTTKFSP', 'RUB', 'MKR', 'PRMR', 85);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Депозитные торги (аукцион)', 1, 'Депозитные торги (аукцион)', 'XMNSKFLO', 'RUB', 'MKR', 'PRMR', 86);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Депозитные торги (аукцион)', 1, 'Депозитные торги (аукцион)', 'XMNSKFSP', 'RUB', 'MKR', 'PRMR', 87);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Размещение: депозитный аукцион', 1, 'Размещение: депозитный аукцион', 'XMDTVRGO', 'RUB', 'MKR', 'PRMR', 88);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗ-АД - Аукцион БР', 1, 'ОФЗ-АД - Аукцион БР', 'BBMC', 'RUB', 'FOND', 'PRMR', 89);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗ-ПД - Аукцион БР', 1, 'ОФЗ-ПД - Аукцион БР', 'BBFC', 'RUB', 'FOND', 'PRMR', 90);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗ-ИН - Аукцион БР', 1, 'ОФЗ-ИН - Аукцион БР', 'BBIC', 'RUB', 'FOND', 'PRMR', 91);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('ОФЗ-ПК - Аукцион БР', 1, 'ОФЗ-ПК - Аукцион БР', 'BBVC', 'RUB', 'FOND', 'PRMR', 92);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Двусторонний непрерывный аукцион (TOD)', 1, 'Двусторонний непрерывный аукцион', 'UVAV', 'RUB', 'CURR', 'SCND', 96);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('Режим адресных сделок с клирингом и расчетами на СПВБ (TOD)', 1, 'Режим адресных сделок с клирингом и расчетами на СПВБ', 'NVAV', 'RUB', 'CURR', 'SCND', 97);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Цифровые свидетельства с индексируемым номиналом УЦП – Режим непрерывных торгов', 1, 'Режим непрерывных торгов', 'UDXC', 'RUB', 'FOND', 'SCND', 103);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Цифровые свидетельства с постоянным номиналом УЦП – Режим непрерывных торгов', 1, 'Режим непрерывных торгов', 'UDUC', 'RUB', 'FOND', 'SCND', 104);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Цифровые свидетельства с индексируемым номиналом УЦП – Режим переговорных сделок (РПС)', 1, 'Режим переговорных сделок (РПС)', 'NDXC', 'RUB', 'FOND', 'SCND', 105);
|
||||
insert into market (description, exchange_id, name, code, settlement_currency, section, market_type, id) values ('СПВБ: Цифровые свидетельства с постоянным номиналом УЦП – Режим переговорных сделок (РПС)', 1, 'Режим переговорных сделок (РПС)', 'NDUC', 'RUB', 'FOND', 'SCND', 106);
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
-- DB version: 3.18
|
||||
-- MARKET LCC version: 3.18.0.1
|
||||
|
||||
|
||||
/* Dictionaries */
|
||||
|
||||
/* Business objects */
|
||||
|
||||
INSERT INTO MARKET(ID, MARKET_TYPE, SECTION, SETTLEMENT_CURRENCY, CODE, NAME, EXCHANGE_ID, DESCRIPTION) values (1000, 'SCND', 'CURR', 'RUB', 'UVAK', 'Режим непрерывных торгов (торги иностранной валютой с Провайдером ликвидности)', 1, 'Continuous trading mode (foreign currency trading with a Liquidity Provider)') 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 (1001, 'SCND', 'CURR', 'RUB', 'UVWK', 'СВОП. Режим непрерывных торгов (торги иностранной валютой с Провайдером ликвидности)', 1, 'SWAP. Continuous trading mode (foreign currency trading with a Liquidity Provider)') 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;
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
-- DB version: 3.18 -> 3.19
|
||||
|
||||
ALTER TABLE REGISTRY ADD COLUMN IF NOT EXISTS MARKET VARCHAR(8);
|
||||
COMMENT ON COLUMN REGISTRY.MARKET IS 'Код класса инструмента';
|
||||
|
||||
ALTER TABLE REGISTRY_HISTORY ADD COLUMN IF NOT EXISTS MARKET VARCHAR(8);
|
||||
COMMENT ON COLUMN REGISTRY_HISTORY.MARKET IS 'Код класса инструмента';
|
||||
|
||||
INSERT INTO DB_VERSION(ID, VERSION) values (1, '3.19') ON CONFLICT (ID) DO UPDATE SET VERSION = EXCLUDED.VERSION
|
||||
|
|
@ -7,12 +7,12 @@
|
|||
<artifactId>dbf-exporter</artifactId>
|
||||
<name>dbf-exporter</name>
|
||||
<description>DBF exporter for DBF files</description>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
|
||||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
|
|
|
|||
|
|
@ -8,12 +8,12 @@
|
|||
<artifactId>dbf-importer</artifactId>
|
||||
<name>dbf-importer</name>
|
||||
<description>DBF loader for DBF files</description>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
|
||||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
|
|
|
|||
|
|
@ -8,12 +8,12 @@
|
|||
<name>Clearing dictionary</name>
|
||||
<description>Clearing dictionary</description>
|
||||
<packaging>jar</packaging>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
|
||||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
|
|
|
|||
|
|
@ -4,12 +4,12 @@
|
|||
<parent>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
<artifactId>extdb-importer</artifactId>
|
||||
<name>extdb-importer</name>
|
||||
<description>Extdb importer module. Аналог trade-importer.</description>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ public class DigitalCertificate extends WithMapId {
|
|||
)
|
||||
private BigDecimal numberOfUcp;
|
||||
|
||||
@JsonProperty("deltaPrice")
|
||||
@JsonProperty("delta_price")
|
||||
@ApiModelProperty(
|
||||
value = "Общая информация\\Пределы изменения цены",
|
||||
example = """
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
package ru.spcex.clearing.gatewayapi.service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.spcex.clearing.gatewayapi.controller.inbound.request.listing.fond.DigitalCertificate;
|
||||
import ru.spcex.clearing.gatewayapi.controller.inbound.request.listing.fond.FondDigitalListingsRequest;
|
||||
import ru.spcex.clearing.gatewayapi.controller.inbound.request.listing.fond.IssuerCompanySymbols;
|
||||
import ru.spcex.clearing.gatewayapi.service.adapter.DigitalSecurityRequestAdapter;
|
||||
import ru.spcex.clearing.gatewayapi.service.adapter.SecurityRequestAdapter;
|
||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||
|
|
@ -46,8 +48,15 @@ public class DigitalSecurityService {
|
|||
for (DigitalCertificate security : securityList) {
|
||||
try {
|
||||
DigitalCertificateSecurityGatewayRequest digitalCertificateSecurityRequest = digitalSecurityRequestAdapter.toRequest(security);
|
||||
List<ListingNewRequest> listingRequests = request.getListingList().stream().
|
||||
map(securityRequestAdapter::toIncomeListing).toList();
|
||||
List<ListingNewRequest> listingRequests = request.getListingList().stream()
|
||||
.filter(incomeListing -> incomeListing.getSymbolCode().equals(security.getSecuritySymbol()))
|
||||
.map(securityRequestAdapter::toIncomeListing).toList();
|
||||
Optional<String> innVal = request.getIssuerCompanySymbolsList().stream()
|
||||
.filter(issuerCompanySymbols -> issuerCompanySymbols.getCompanyId().equals(security.getIssuerId())
|
||||
&& issuerCompanySymbols.getCompanySymbol().equals("INN"))
|
||||
.findFirst()
|
||||
.map(IssuerCompanySymbols::getCompanySymbolValue);
|
||||
innVal.ifPresent(digitalCertificateSecurityRequest::setInn);
|
||||
digitalCertificateSecurityRequest.setListing(listingRequests);
|
||||
kafkaSender.sendRequestToQueue(Consts.DESTINATION_SECURITY_DGCT_GATEWAY, digitalCertificateSecurityRequest);
|
||||
} catch (Throwable e) {
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ public class DigitalSecurityRequestAdapter {
|
|||
gatewayRequest.setIssuerId(digitalCertificate.getIssuerId());
|
||||
gatewayRequest.setShortName(digitalCertificate.getShortName());
|
||||
gatewayRequest.setFullName(digitalCertificate.getFullName());
|
||||
gatewayRequest.setFullNameEng(digitalCertificate.getFullNameEng());
|
||||
gatewayRequest.setShortNameEng(digitalCertificate.getShortNameEng());
|
||||
gatewayRequest.setNumberOfUcp(digitalCertificate.getNumberOfUcp());
|
||||
gatewayRequest.setDeltaPrice(digitalCertificate.getDeltaPrice());
|
||||
|
|
@ -26,15 +27,19 @@ public class DigitalSecurityRequestAdapter {
|
|||
gatewayRequest.setSettlementOrganization(digitalCertificate.getSettlementOrganization());
|
||||
gatewayRequest.setSettlementDepository(digitalCertificate.getSettlementDepository());
|
||||
|
||||
Optional<DigitalNominal> digitalNominal = digitalCertificate.getNominal().stream()
|
||||
.filter(
|
||||
nominal -> nominal.getIndexDate().isEqual(LocalDate.now()))
|
||||
.findFirst();
|
||||
digitalNominal.ifPresent(nominal -> {
|
||||
gatewayRequest.setNominalIndexDate(nominal.getIndexDate());
|
||||
gatewayRequest.setNominalDenominationUnitForDate(nominal.getDenominationUnitForDate());
|
||||
gatewayRequest.setNominalIndexFact(nominal.getIndexFact());
|
||||
});
|
||||
if (digitalCertificate.getTypeCode().equals("U")) {
|
||||
gatewayRequest.setNominalDenominationUnitForDate(digitalCertificate.getUcp().getDenominationUnitBase());
|
||||
} else {
|
||||
Optional<DigitalNominal> digitalNominal = digitalCertificate.getNominal().stream()
|
||||
.filter(
|
||||
nominal -> nominal.getIndexDate().isEqual(LocalDate.now()))
|
||||
.findFirst();
|
||||
digitalNominal.ifPresent(nominal -> {
|
||||
gatewayRequest.setNominalIndexDate(nominal.getIndexDate());
|
||||
gatewayRequest.setNominalDenominationUnitForDate(nominal.getDenominationUnitForDate());
|
||||
gatewayRequest.setNominalIndexFact(nominal.getIndexFact());
|
||||
});
|
||||
}
|
||||
return gatewayRequest;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@
|
|||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>imdg-hist</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
|
||||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
|
||||
|
||||
|
|
@ -36,13 +36,13 @@
|
|||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>classes</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>dictionary</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
|
|
@ -82,7 +82,7 @@
|
|||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>cleaning-builders</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
|||
|
|
@ -7,12 +7,12 @@
|
|||
<artifactId>imdg</artifactId>
|
||||
<name>Clearing in memory data grid</name>
|
||||
<packaging>jar</packaging>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
|
||||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
|
|
@ -32,13 +32,13 @@
|
|||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>classes</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>dictionary</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
|
|
@ -89,7 +89,7 @@
|
|||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>cleaning-builders</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ public class RegistryHistoryMapStore extends TemplateEventMapStore<RegistryHisto
|
|||
"CREDIT", "DEBIT", "SETTLED_CREDIT", "SETTLED_DEBIT", "CHECK_BALANCE", "DIFF_BALANCE", "PLAN_BALANCE",
|
||||
"BALANCE_DIMENSION", "SETTLEMENT_DATE", "SETTLEMENT_CODE", "TRADING_DATE", "CLEARING_DATE", "REFUND_DATE",
|
||||
"VALUE_DATE", "PRICE", "CONTRACT", "COUNTER_PARTY_ID", "COMMENT", "REASON", "PARENT_ID", "GROUP_ID", "SESSION_ID",
|
||||
"SESSION_TYPE", "PAYMENT_ID", "SECTION"
|
||||
"SESSION_TYPE", "PAYMENT_ID", "SECTION", "MARKET"
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -181,6 +181,7 @@ public class RegistryHistoryMapStore extends TemplateEventMapStore<RegistryHisto
|
|||
object.setSessionType(resultSet.getObject("SESSION_TYPE", String.class));
|
||||
object.setPaymentId(resultSet.getObject("PAYMENT_ID", Long.class));
|
||||
object.setSection(resultSet.getObject("SECTION", String.class));
|
||||
object.setMarket(resultSet.getObject("MARKET", String.class));
|
||||
|
||||
registryHistory.setObject(object);
|
||||
return registryHistory;
|
||||
|
|
@ -244,7 +245,8 @@ public class RegistryHistoryMapStore extends TemplateEventMapStore<RegistryHisto
|
|||
object.getSessionId(),
|
||||
object.getSessionType(),
|
||||
object.getPaymentId(),
|
||||
object.getSection()
|
||||
object.getSection(),
|
||||
object.getMarket()
|
||||
};
|
||||
return args;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -68,7 +68,14 @@ public class RegistryMapStore extends TemplateMapStore<Registry> {
|
|||
@Override
|
||||
public String[] getFields() {
|
||||
return new String[]{
|
||||
"COMPANY_ID", "TRADING_CODE", "CLEARING_CODE", "SHORT_NAME", "FULL_NAME", "ACCOUNT_ID", "ACCOUNT_TYPE", "ACCOUNT", "REGISTRY_DESIGNATION", "REGISTRY_INSTRUMENT_TYPE", "REGISTRY_CAPACITY", "REGISTRY_UNIT", "REGISTRY_CODE", "TRADING_CLEARING_REGISTRY_ID", "TRADING_CLEARING_REGISTRY", "REGISTRY_STATUS", "SECURITY_SYMBOL", "BALANCE", "BALANCE_RUB", "OPEN_BALANCE", "CLOSE_BALANCE", "CREDIT", "DEBIT", "SETTLED_CREDIT", "SETTLED_DEBIT", "CHECK_BALANCE", "DIFF_BALANCE", "PLAN_BALANCE", "BALANCE_DIMENSION", "SETTLEMENT_DATE", "SETTLEMENT_CODE", "TRADING_DATE", "CLEARING_DATE", "REFUND_DATE", "VALUE_DATE", "PRICE", "CONTRACT", "COUNTER_PARTY_ID", "COMMENT", "REASON", "PARENT_ID", "GROUP_ID", "SESSION_ID", "SESSION_TYPE", "PAYMENT_ID", "ID", "CREATED_AT", "UPDATED_AT", "SECURITY_ID", "SECTION"
|
||||
"COMPANY_ID", "TRADING_CODE", "CLEARING_CODE", "SHORT_NAME", "FULL_NAME", "ACCOUNT_ID", "ACCOUNT_TYPE",
|
||||
"ACCOUNT", "REGISTRY_DESIGNATION", "REGISTRY_INSTRUMENT_TYPE", "REGISTRY_CAPACITY", "REGISTRY_UNIT",
|
||||
"REGISTRY_CODE", "TRADING_CLEARING_REGISTRY_ID", "TRADING_CLEARING_REGISTRY", "REGISTRY_STATUS",
|
||||
"SECURITY_SYMBOL", "BALANCE", "BALANCE_RUB", "OPEN_BALANCE", "CLOSE_BALANCE", "CREDIT", "DEBIT",
|
||||
"SETTLED_CREDIT", "SETTLED_DEBIT", "CHECK_BALANCE", "DIFF_BALANCE", "PLAN_BALANCE", "BALANCE_DIMENSION",
|
||||
"SETTLEMENT_DATE", "SETTLEMENT_CODE", "TRADING_DATE", "CLEARING_DATE", "REFUND_DATE", "VALUE_DATE", "PRICE",
|
||||
"CONTRACT", "COUNTER_PARTY_ID", "COMMENT", "REASON", "PARENT_ID", "GROUP_ID", "SESSION_ID", "SESSION_TYPE",
|
||||
"PAYMENT_ID", "ID", "CREATED_AT", "UPDATED_AT", "SECURITY_ID", "SECTION", "MARKET"
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -125,6 +132,7 @@ public class RegistryMapStore extends TemplateMapStore<Registry> {
|
|||
object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT"));
|
||||
object.setSecurityId(resultSet.getObject("SECURITY_ID", Long.class));
|
||||
object.setSection(resultSet.getObject("SECTION", String.class));
|
||||
object.setMarket(resultSet.getObject("MARKET", String.class));
|
||||
return object;
|
||||
}
|
||||
|
||||
|
|
@ -180,7 +188,8 @@ public class RegistryMapStore extends TemplateMapStore<Registry> {
|
|||
TimeUtil.toDateFromInstant(object.getCreated()),
|
||||
TimeUtil.toDateFromInstant(object.getUpdated()),
|
||||
object.getSecurityId(),
|
||||
object.getSection()
|
||||
object.getSection(),
|
||||
object.getMarket()
|
||||
};
|
||||
return args;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ public class HazelcastLifecycleSupport extends AbstractHazelcastLifecycleSupport
|
|||
/**
|
||||
* Рабочая версия БД. Требуется вручную сверять с DDL.sql и накручивать эту переменную.
|
||||
*/
|
||||
public static final String CHECK_DB_VERSION = "3.18";
|
||||
public static final String CHECK_DB_VERSION = "3.19";
|
||||
|
||||
private final Logger log = LoggerFactory.getLogger(this.getClass());
|
||||
|
||||
|
|
|
|||
|
|
@ -3,13 +3,13 @@
|
|||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>lim-exporter</artifactId>
|
||||
<name>Lim exporter</name>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<parent>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
|
|
@ -35,7 +35,7 @@
|
|||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>classes</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
|||
|
|
@ -7,12 +7,12 @@
|
|||
<name>_parent_clearing</name>
|
||||
<description>Clearing parent module</description>
|
||||
<packaging>pom</packaging>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
|
||||
<parent>
|
||||
<artifactId>clearing</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
|
||||
<modules>
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
|
|
|||
|
|
@ -8,12 +8,12 @@
|
|||
<artifactId>reports-service</artifactId>
|
||||
<name>reports-service</name>
|
||||
<description>Service for creating reports</description>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
|
||||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
<dependencies>
|
||||
<!-- Spring boot -->
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
|||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||
import ru.spcex.platform.utils.text.TextUtil;
|
||||
|
||||
@Component
|
||||
public class KSCommissionTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSCommissionTradesReport> {
|
||||
|
|
@ -168,6 +169,8 @@ public class KSCommissionTradesReportBuilder extends CSVReportBuilder<EmptyParam
|
|||
Collection<ExecutionDeposit> executionDeposits = executionDepositImdg.getCollectionObjectsByPredicate(
|
||||
pb.and(
|
||||
pb.equals("exchangeExecutionId", registry.getGroupId()),
|
||||
TextUtil.isEmpty(registry.getMarket()) ?
|
||||
pb.alwaysTrue() : pb.equals("market", registry.getMarket()),
|
||||
pb.notNull("market")
|
||||
)
|
||||
);
|
||||
|
|
|
|||
|
|
@ -144,13 +144,14 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
|
|||
// Есть 2 пары Execution, SELL и BUY, статус определяем заранее по SELL и проставляем в BUY
|
||||
if (coverage == CoverageStatus.DEND) {
|
||||
if (execution instanceof ExecutionFond) {
|
||||
ImdgPredicateBuilder pbRegistry = registryImdg.predicateBuilder();
|
||||
ImdgPredicate registryPredicate = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams._S_T).buildPredicate(pbRegistry);
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
ImdgPredicate registryPredicate = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams._S_T).buildPredicate(pb);
|
||||
Collection<Registry> registryCollection = registryImdg.getCollectionObjectsByPredicate(
|
||||
pbRegistry.and(
|
||||
pbRegistry.equals("groupId", groupId),
|
||||
pbRegistry.equals("companyId", execution.getCompanyId()),
|
||||
pbRegistry.in("registryStatus",
|
||||
pb.and(
|
||||
pb.equals("groupId", groupId),
|
||||
pb.or(pb.equals("market", execution.getMarket()), pb.isNull("market")),
|
||||
pb.equals("companyId", execution.getCompanyId()),
|
||||
pb.in("registryStatus",
|
||||
RegistryStatus.NACC.getKey(),
|
||||
RegistryStatus.NACK.getKey(),
|
||||
RegistryStatus.FAIL.getKey(),
|
||||
|
|
@ -170,7 +171,7 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
|
|||
}
|
||||
}
|
||||
}
|
||||
statusForExecution.put(new ExecutionKey(groupId, execution.getSessionId()), status);
|
||||
statusForExecution.put(new ExecutionKey(groupId, execution.getMarket(), execution.getSessionId()), status);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -365,7 +366,7 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
|
|||
status = "2";
|
||||
} else if (execution instanceof ExecutionFond) {
|
||||
Long groupId = execution.getExchangeExecutionId();
|
||||
status = statusForExecution.get(new ExecutionKey(groupId, execution.getSessionId()));
|
||||
status = statusForExecution.get(new ExecutionKey(groupId, execution.getMarket(), execution.getSessionId()));
|
||||
if (status == null) {
|
||||
log.warn(
|
||||
"Broken execution (can't define status). Registry for groupId = {}, companyId = {} not found. Execution (id = {}) skipped",
|
||||
|
|
@ -390,6 +391,6 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
|
|||
}
|
||||
}
|
||||
|
||||
private record ExecutionKey(Long groupId, Long sessionId) {
|
||||
private record ExecutionKey(Long groupId, String market, Long sessionId) {
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
|
@ -51,7 +51,7 @@
|
|||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>cleaning-builders</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,35 @@
|
|||
package ru.spcex.clearing.scheduler.config.validation;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
|
||||
import ru.spcex.clearing.scheduler.error.ValidationError;
|
||||
import ru.spcex.clearing.validation.common.rules.ValidateSymbolsRule;
|
||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||
import ru.spcex.platform.utils.validation.IValidator;
|
||||
import ru.spcex.platform.utils.validation.ValidatorImpl;
|
||||
|
||||
@Configuration
|
||||
public class LauncherValidationConfig {
|
||||
|
||||
@Bean("launcherRequestValidator")
|
||||
public Function<LauncherCommandRequest, IValidator> launcherRequestValidator(Map<String, Imdg<? extends SpcexObjectBase>> imdgForValidation) {
|
||||
return launcherCommandRequest -> {
|
||||
ImdgValidationContext<LauncherCommandRequest> context = new ImdgValidationContext<>();
|
||||
context.setValidatedObject(launcherCommandRequest);
|
||||
Consumer<String> addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s));
|
||||
addImdg.accept(IMDGDistributedNames.Map_ValidationSymbols);
|
||||
return new ValidatorImpl<>(context,
|
||||
ValidateSymbolsRule.notRequired("Основание",
|
||||
LauncherCommandRequest::getPaymentPurpose,
|
||||
ValidationError.IncorrectPaymentPurpose)
|
||||
);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -5,6 +5,7 @@ import org.springframework.context.annotation.Bean;
|
|||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import ru.clearing.classes.statics.data.company.Company;
|
||||
import ru.clearing.classes.statics.data.misc.ValidationSymbols;
|
||||
import ru.clearing.classes.statics.data.scheduler.ClearingCalendar;
|
||||
import ru.clearing.classes.statics.data.scheduler.Planner;
|
||||
import ru.clearing.classes.statics.data.scheduler.PlannerTemplate;
|
||||
|
|
@ -43,6 +44,7 @@ public class ValidationConfig {
|
|||
addImdg.accept(IMDGDistributedNames.Map_Security, Security.class);
|
||||
addImdg.accept(IMDGDistributedNames.Map_DayStatusDictionary, DayStatusDictionary.class);
|
||||
addImdg.accept(IMDGDistributedNames.Map_SessionTypeDictionary, SessionTypeDictionary.class);
|
||||
addImdg.accept(IMDGDistributedNames.Map_ValidationSymbols, ValidationSymbols.class);
|
||||
return imdg;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,8 @@ public enum ValidationError implements IErrorEnumId {
|
|||
CompanyNotFound(7014L),
|
||||
SecurityNotFound(7012L),
|
||||
CompanyNotActive(7015L),
|
||||
SecurityNotActive(7013L);
|
||||
SecurityNotActive(7013L),
|
||||
IncorrectPaymentPurpose(7018L);
|
||||
|
||||
private final Long id;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,10 @@
|
|||
package ru.spcex.clearing.scheduler.service;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.function.Function;
|
||||
import org.apache.kafka.clients.consumer.Consumer;
|
||||
import org.apache.kafka.clients.producer.Producer;
|
||||
import org.apache.kafka.clients.producer.ProducerRecord;
|
||||
|
|
@ -24,13 +29,11 @@ import ru.spcex.clearing.util.security.UserRoleVerification;
|
|||
import ru.spcex.platform.enumeration.Task;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.utils.log.ExceptionUtils;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||
import static ru.spcex.platform.utils.enumeration.IEnumKey.getEnumByKey;
|
||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||
import ru.spcex.platform.utils.log.ExceptionUtils;
|
||||
import ru.spcex.platform.utils.validation.IValidator;
|
||||
|
||||
@Service
|
||||
public class LauncherService extends QueueConsumer implements InitializingBean {
|
||||
|
|
@ -38,23 +41,30 @@ public class LauncherService extends QueueConsumer implements InitializingBean {
|
|||
private final Imdg<Launcher> launcherMap;
|
||||
private final Producer<String, Object> kafkaProducer;
|
||||
private final UserRoleVerification userRoleVerification;
|
||||
private final Function<LauncherCommandRequest, IValidator> launcherRequestValidator;
|
||||
private final IMessageResolver messageResolver;
|
||||
|
||||
|
||||
@Autowired
|
||||
public LauncherService(Consumer<String, Object> kafkaQueue, Producer<String, Object> kafkaProducer,
|
||||
@Qualifier("userRoleVerificationBean") UserRoleVerification userRoleVerification,
|
||||
ImdgProvider imdgProvider) {
|
||||
ImdgProvider imdgProvider,
|
||||
@Qualifier("launcherRequestValidator")
|
||||
Function<LauncherCommandRequest, IValidator> launcherRequestValidator,
|
||||
IMessageResolver messageResolver) {
|
||||
super(kafkaQueue, kafkaProducer);
|
||||
this.kafkaProducer = kafkaProducer;
|
||||
this.userRoleVerification = userRoleVerification;
|
||||
this.launcherMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Launcher, Launcher.class);
|
||||
this.launcherRequestValidator = launcherRequestValidator;
|
||||
this.messageResolver = messageResolver;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() {
|
||||
callback(LauncherCommandRequest.class)
|
||||
.setFunction(this::newLauncher)
|
||||
.forDestination(Consts.LAUNCHER_NEW, callbacks::put);
|
||||
.setFunction(this::newLauncher)
|
||||
.forDestination(Consts.LAUNCHER_NEW, callbacks::put);
|
||||
init();
|
||||
}
|
||||
|
||||
|
|
@ -69,18 +79,27 @@ public class LauncherService extends QueueConsumer implements InitializingBean {
|
|||
throw new IllegalStateException(String.format("User id in request must match: baseRequest.userId = %s, launcherCommandRequest.userId = %s", userRequest.getUserId(), req.getUserId()));
|
||||
}
|
||||
|
||||
Instant created = Instant.now();
|
||||
Launcher launcher = new Launcher();
|
||||
if (getEnumByKey(Task.class, req.getTaskName()) == null) {
|
||||
Task task = getEnumByKey(Task.class, req.getTaskName());
|
||||
if (task == null) {
|
||||
throw new IllegalStateException("Illegal task name:\t" + req.getTaskName());
|
||||
}
|
||||
if (Task.dbfExport_OUTV == task) {
|
||||
IValidator validator = launcherRequestValidator.apply(req);
|
||||
Optional<EnumMessage> errorMessage = validator.tillFirstError();
|
||||
if (errorMessage.isPresent()) {
|
||||
String error = messageResolver.resolve(errorMessage.get());
|
||||
return makeErrorResponse(userRequest, error);
|
||||
}
|
||||
}
|
||||
Instant created = Instant.now();
|
||||
Launcher launcher = new Launcher();
|
||||
launcher.setTask(req.getTaskName());
|
||||
launcher.setSenderId(req.getUserId());
|
||||
launcher.setCreated(created);
|
||||
launcher.setUpdated(created);
|
||||
launcherMap.insert(launcher);
|
||||
log.debug("successfully processed, new id {}", launcher.getId());
|
||||
if (Task.dbfExport_OUTV.equalsByKey(req.getTaskName())) {
|
||||
if (Task.dbfExport_OUTV == task) {
|
||||
return processRequestOUTV(userRequest, req);
|
||||
} else {
|
||||
kafkaProducer.send(new ProducerRecord<>("launcher-" + launcher.getTask(), userRequest));
|
||||
|
|
@ -90,7 +109,7 @@ public class LauncherService extends QueueConsumer implements InitializingBean {
|
|||
|
||||
private RequestInfoUpdate processRequestOUTV(BaseRequest<LauncherCommandRequest> userRequest, LauncherCommandRequest launcherNew) {
|
||||
log.debug("Redirect {} (userRequest.id={}) to queue {}", launcherNew.getTaskName(),
|
||||
userRequest.getId(), Consts.PAYMENT_INSTRUCTION_CLEARING_OUTBOUND_ACTION);
|
||||
userRequest.getId(), Consts.PAYMENT_INSTRUCTION_CLEARING_OUTBOUND_ACTION);
|
||||
var req = new PIClearingOutbondActionNewRequest();
|
||||
req.setSenderId(launcherNew.getSenderId());
|
||||
req.setAddresseeId(launcherNew.getAddresseeId());
|
||||
|
|
@ -134,4 +153,13 @@ public class LauncherService extends QueueConsumer implements InitializingBean {
|
|||
return successRouting;
|
||||
}
|
||||
|
||||
private RequestInfoUpdate makeErrorResponse(BaseRequest<LauncherCommandRequest> launcherCommandRequest,
|
||||
String errorMessage) {
|
||||
RequestInfoUpdate requestInfoUpdate = new RequestInfoUpdate();
|
||||
requestInfoUpdate.setId(launcherCommandRequest.getId());
|
||||
requestInfoUpdate.setStatus(Status.Error);
|
||||
requestInfoUpdate.setMessage(errorMessage);
|
||||
return requestInfoUpdate;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,135 @@
|
|||
package ru.spcex.clearing.securities.service.builder;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Optional;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.util.StringUtils;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.DigitalCertificateSecurityGatewayRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.DigitalCertificateSecurityNewRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.DigitalCertificateSecurityUpdateRequest;
|
||||
import ru.spcex.platform.enumeration.Allowed;
|
||||
import ru.spcex.platform.enumeration.InstrumentType;
|
||||
import ru.spcex.platform.enumeration.NominalTypeCode;
|
||||
|
||||
public class DigitalCertificateRequestBuilder {
|
||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
private DigitalCertificateSecurityGatewayRequest gatewayRequest;
|
||||
private Long companyId;
|
||||
private Long digitalSecurityId;
|
||||
|
||||
private DigitalCertificateRequestBuilder() {
|
||||
}
|
||||
|
||||
public static DigitalCertificateRequestBuilder builder() {
|
||||
return new DigitalCertificateRequestBuilder();
|
||||
}
|
||||
|
||||
public DigitalCertificateRequestBuilder gatewayRequest(final DigitalCertificateSecurityGatewayRequest gatewayRequest) {
|
||||
this.gatewayRequest = gatewayRequest;
|
||||
return this;
|
||||
}
|
||||
|
||||
public DigitalCertificateRequestBuilder companyId(final Long companyId) {
|
||||
this.companyId = companyId;
|
||||
return this;
|
||||
}
|
||||
|
||||
public DigitalCertificateRequestBuilder digitalSecurityId(final Long digitalSecurityId) {
|
||||
this.digitalSecurityId = digitalSecurityId;
|
||||
return this;
|
||||
}
|
||||
|
||||
public DigitalCertificateSecurityNewRequest buildNewRequest() {
|
||||
DigitalCertificateSecurityNewRequest newRequest = new DigitalCertificateSecurityNewRequest();
|
||||
|
||||
Optional<InstrumentType> clrInstrumentType = resolveInstrumentType(gatewayRequest.getInstrumentType());
|
||||
Optional<NominalTypeCode> clrNominalTypeCode = resolveTypeCode(gatewayRequest.getTypeCode());
|
||||
Optional<Allowed> nominalIndexationSign = resolveNominalIndexFact(gatewayRequest.getNominalIndexFact());
|
||||
clrInstrumentType.ifPresent(instrumentType -> newRequest.setInstrumentType(instrumentType.getKey()));
|
||||
clrNominalTypeCode.ifPresent(nominalTypeCode -> newRequest.setNominalTypeCode(nominalTypeCode.getKey()));
|
||||
nominalIndexationSign.ifPresent(indexFact -> newRequest.setNominalIndexationSign(indexFact.getKey()));
|
||||
|
||||
newRequest.setBaseCode(gatewayRequest.getDepoDcId());
|
||||
newRequest.setIssuerId(companyId);
|
||||
newRequest.setShortName(gatewayRequest.getShortName());
|
||||
newRequest.setFullName(gatewayRequest.getFullName());
|
||||
newRequest.setShortNameEng(gatewayRequest.getShortNameEng());
|
||||
newRequest.setFullNameEng(gatewayRequest.getFullNameEng());
|
||||
newRequest.setBaseUnitSize(gatewayRequest.getNumberOfUcp().longValue());
|
||||
newRequest.setPriceVarianceLimit(gatewayRequest.getDeltaPrice());
|
||||
newRequest.setSecuritySymbol(gatewayRequest.getSecuritySymbol());
|
||||
newRequest.setWorkflowStatus(gatewayRequest.getWorkflowStatus());
|
||||
newRequest.setSettlementHouse(gatewayRequest.getSettlementOrganization());
|
||||
newRequest.setDepository(gatewayRequest.getSettlementDepository());
|
||||
newRequest.setNominalIndexationDate(gatewayRequest.getNominalIndexDate());
|
||||
newRequest.setNominalValue(gatewayRequest.getNominalDenominationUnitForDate());
|
||||
return newRequest;
|
||||
}
|
||||
|
||||
public DigitalCertificateSecurityUpdateRequest buildUpdateRequest() {
|
||||
DigitalCertificateSecurityUpdateRequest updateRequest = new DigitalCertificateSecurityUpdateRequest();
|
||||
|
||||
updateRequest.setId(digitalSecurityId);
|
||||
Optional<InstrumentType> clrInstrumentType = resolveInstrumentType(gatewayRequest.getInstrumentType());
|
||||
Optional<NominalTypeCode> clrNominalTypeCode = resolveTypeCode(gatewayRequest.getTypeCode());
|
||||
Optional<Allowed> nominalIndexationSign = resolveNominalIndexFact(gatewayRequest.getNominalIndexFact());
|
||||
clrInstrumentType.ifPresent(instrumentType -> updateRequest.setInstrumentType(instrumentType.getKey()));
|
||||
clrNominalTypeCode.ifPresent(nominalTypeCode -> updateRequest.setNominalTypeCode(nominalTypeCode.getKey()));
|
||||
nominalIndexationSign.ifPresent(indexFact -> updateRequest.setNominalIndexationSign(indexFact.getKey()));
|
||||
|
||||
updateRequest.setBaseCode(gatewayRequest.getDepoDcId());
|
||||
updateRequest.setIssuerId(companyId);
|
||||
updateRequest.setShortName(gatewayRequest.getShortName());
|
||||
updateRequest.setFullName(gatewayRequest.getFullName());
|
||||
updateRequest.setShortNameEng(gatewayRequest.getShortNameEng());
|
||||
updateRequest.setFullNameEng(gatewayRequest.getFullNameEng());
|
||||
updateRequest.setBaseUnitSize(gatewayRequest.getNumberOfUcp().longValue());
|
||||
updateRequest.setPriceVarianceLimit(gatewayRequest.getDeltaPrice());
|
||||
updateRequest.setSecuritySymbol(gatewayRequest.getSecuritySymbol());
|
||||
updateRequest.setWorkflowStatus(gatewayRequest.getWorkflowStatus());
|
||||
updateRequest.setSettlementHouse(gatewayRequest.getSettlementOrganization());
|
||||
updateRequest.setDepository(gatewayRequest.getSettlementDepository());
|
||||
updateRequest.setNominalIndexationDate(gatewayRequest.getNominalIndexDate());
|
||||
updateRequest.setNominalValue(gatewayRequest.getNominalDenominationUnitForDate());
|
||||
return updateRequest;
|
||||
}
|
||||
|
||||
private Optional<InstrumentType> resolveInstrumentType(final String instrumentType) {
|
||||
InstrumentType clrInstrumentType = Arrays.asList("DC", "D")
|
||||
.contains(instrumentType) ? InstrumentType.DGCT : null;
|
||||
if (clrInstrumentType == null) {
|
||||
log.warn("Not defined instrumentType={}", instrumentType);
|
||||
return Optional.empty();
|
||||
}
|
||||
return Optional.of(clrInstrumentType);
|
||||
}
|
||||
|
||||
private Optional<NominalTypeCode> resolveTypeCode(final String nominalTypeCode) {
|
||||
NominalTypeCode clrNominalTypeCode = null;
|
||||
if (StringUtils.hasLength(nominalTypeCode)) {
|
||||
clrNominalTypeCode =
|
||||
nominalTypeCode.equals("X") ? NominalTypeCode.INDX :
|
||||
nominalTypeCode.equals("U") ? NominalTypeCode.FIXD : null;
|
||||
}
|
||||
if (clrNominalTypeCode == null) {
|
||||
log.warn("Not defined NominalTypeCode={}", nominalTypeCode);
|
||||
return Optional.empty();
|
||||
}
|
||||
return Optional.of(clrNominalTypeCode);
|
||||
}
|
||||
|
||||
private Optional<Allowed> resolveNominalIndexFact(final String nominalIndexFact) {
|
||||
Allowed allowed = null;
|
||||
if (StringUtils.hasLength(nominalIndexFact)) {
|
||||
allowed =
|
||||
nominalIndexFact.equals("Y") ? Allowed.ALLOWED :
|
||||
nominalIndexFact.equals("N") ? Allowed.DENIED : null;
|
||||
}
|
||||
if (allowed == null) {
|
||||
log.warn("Not defined nominalIndexFact={}", nominalIndexFact);
|
||||
return Optional.empty();
|
||||
}
|
||||
return Optional.of(allowed);
|
||||
}
|
||||
}
|
||||
|
|
@ -52,6 +52,7 @@ import ru.spcex.clearing.platform.messaging.domain.cud.security.CurrencyPairSecu
|
|||
import ru.spcex.clearing.platform.messaging.domain.cud.security.CurrencyPairSecurityUpdateRequest;
|
||||
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
||||
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
|
||||
import ru.spcex.clearing.securities.service.builder.DigitalCertificateRequestBuilder;
|
||||
import ru.spcex.clearing.securities.service.facade.DigitalCertificateSecurityFacade;
|
||||
import ru.spcex.clearing.securities.service.facade.ListingFacade;
|
||||
import ru.spcex.clearing.securities.validation.ListingValidationProvider;
|
||||
|
|
@ -478,36 +479,34 @@ public class GatewaySecurityService extends QueueConsumer implements Initializin
|
|||
|
||||
private RequestInfoUpdate newDigitalSecurities(BaseRequest<DigitalCertificateSecurityGatewayRequest> baseRequest) {
|
||||
DigitalCertificateSecurityGatewayRequest request = baseRequest.getRequestPayload();
|
||||
DigitalCertificateSecurityNewRequest newRequest = new DigitalCertificateSecurityNewRequest();
|
||||
newRequest.setBaseCode(request.getDepoDcId());
|
||||
newRequest.setInstrumentType(request.getInstrumentType());
|
||||
|
||||
Map<String, Comparable<?>> query = new HashMap<>();
|
||||
query.put("companySymbol", CompanySymbol.UUID.getKey());
|
||||
query.put("companySymbolValue", request.getIssuerId());
|
||||
query.put("companySymbol", CompanySymbol.INN.getKey());
|
||||
query.put("companySymbolValue", request.getInn());
|
||||
|
||||
CompanySymbols companySymbols = companySymbolsImdg.getSingleObjectByFieldValues(query);
|
||||
Long companyId = companySymbols.getCompanyId();
|
||||
newRequest.setIssuerId(companyId);
|
||||
|
||||
newRequest.setShortName(request.getShortName());
|
||||
newRequest.setFullName(request.getFullName());
|
||||
newRequest.setShortNameEng(request.getShortNameEng());
|
||||
newRequest.setFullNameEng(request.getFullNameEng());
|
||||
newRequest.setBaseUnitSize(request.getNumberOfUcp().longValue());
|
||||
newRequest.setPriceVarianceLimit(request.getDeltaPrice());
|
||||
newRequest.setSecuritySymbol(request.getSecuritySymbol());
|
||||
newRequest.setWorkflowStatus(request.getWorkflowStatus());
|
||||
newRequest.setNominalTypeCode(request.getTypeCode());
|
||||
newRequest.setSettlementHouse(request.getSettlementOrganization());
|
||||
newRequest.setDepository(request.getSettlementDepository());
|
||||
newRequest.setNominalIndexationDate(request.getNominalIndexDate());
|
||||
newRequest.setNominalValue(request.getNominalDenominationUnitForDate());
|
||||
newRequest.setNominalIndexationSign(request.getNominalIndexFact());
|
||||
|
||||
digitalCertificateSecurityFacade.newDigitalCertificate(newRequest);
|
||||
Long companyId = null;
|
||||
if (companySymbols != null) {
|
||||
companyId = companySymbols.getCompanyId();
|
||||
} else {
|
||||
log.warn("Not found company symbols..");
|
||||
}
|
||||
DigitalCertificateRequestBuilder builder = DigitalCertificateRequestBuilder.builder()
|
||||
.gatewayRequest(request)
|
||||
.companyId(companyId);
|
||||
|
||||
Security security = securitySelector.selectSecurityBySymbol(request.getSecuritySymbol());
|
||||
if (security == null) {
|
||||
DigitalCertificateSecurityNewRequest newRequest = builder.buildNewRequest();
|
||||
digitalCertificateSecurityFacade.newDigitalCertificate(newRequest);
|
||||
} else {
|
||||
DigitalCertificateSecurityUpdateRequest updateRequest = builder
|
||||
.digitalSecurityId(security.getId())
|
||||
.buildUpdateRequest();
|
||||
digitalCertificateSecurityFacade.updateDigitalCertificate(updateRequest);
|
||||
}
|
||||
|
||||
security = securitySelector.selectSecurityBySymbol(request.getSecuritySymbol());
|
||||
Long securityId = security.getId();
|
||||
for (ListingNewRequest listingReq : request.getListing()) {
|
||||
try {
|
||||
|
|
@ -515,11 +514,11 @@ public class GatewaySecurityService extends QueueConsumer implements Initializin
|
|||
Listing existListing = findListing(listingReq);
|
||||
if (existListing == null) {
|
||||
validationHelper.validateTillFirstErrorAndThrow(listingReq, listingValidation.listingNewValidator());
|
||||
log.trace("For company[{}] do new Listing", companyId);
|
||||
log.trace("For securityId[{}] do new Listing", securityId);
|
||||
Listing listing = listingFacade.newListing(listingReq);
|
||||
log.debug("New listing.id={}", listing.getId());
|
||||
} else {
|
||||
log.trace("For company[{}] do update Listing[{}]", companyId, existListing.getId());
|
||||
log.trace("For securityId[{}] do update Listing[{}]", securityId, existListing.getId());
|
||||
ListingUpdateRequest partUpdateRequest = toUpdateRequest(existListing, listingReq);
|
||||
validationHelper.validateTillFirstErrorAndThrow(partUpdateRequest, listingValidation.listingUpdateValidator());
|
||||
Listing listing = listingFacade.updateListing(partUpdateRequest);
|
||||
|
|
|
|||
|
|
@ -8,12 +8,12 @@
|
|||
<name>security-util clearing</name>
|
||||
<description>Clearing misc util for verify user roles</description>
|
||||
<packaging>jar</packaging>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
|
||||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
|
|
@ -35,13 +35,13 @@
|
|||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>classes</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>dictionary</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
|||
|
|
@ -3,13 +3,13 @@
|
|||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>swt-exporter</artifactId>
|
||||
<name>Swt exporter</name>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<parent>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
|
|
@ -35,7 +35,7 @@
|
|||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>classes</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
|
|
|||
|
|
@ -4,11 +4,11 @@
|
|||
<parent>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
<artifactId>test-clearing</artifactId>
|
||||
<name>Test-clearing</name>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>ru.spcex.platform</groupId>
|
||||
|
|
|
|||
|
|
@ -4,12 +4,12 @@
|
|||
<parent>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
<artifactId>trade-importer</artifactId>
|
||||
<name>trade-importer</name>
|
||||
<description>Trade importer module</description>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
|
|
@ -55,7 +55,7 @@
|
|||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>classes</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package ru.spcex.clearing.utility.service;
|
||||
|
||||
import java.util.function.Function;
|
||||
import org.apache.kafka.clients.consumer.Consumer;
|
||||
import org.apache.kafka.clients.producer.Producer;
|
||||
import org.slf4j.Logger;
|
||||
|
|
@ -8,45 +9,22 @@ import org.springframework.beans.factory.InitializingBean;
|
|||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.clearing.classes.statics.data.account.ClientCode;
|
||||
import ru.clearing.classes.statics.data.misc.ValidationSymbols;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||
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.account.ClientCodeNewRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonIdRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.misc.ValidationSymbolsNewRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.misc.ValidationSymbolsUpdateRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.utilities.NotificationNewRequest;
|
||||
import ru.spcex.clearing.platform.messaging.serialization.LogFormatter;
|
||||
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
||||
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
|
||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
import ru.spcex.clearing.util.security.UserRoleVerification;
|
||||
import ru.spcex.clearing.validation.common.ValidationHelper;
|
||||
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.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||
import ru.spcex.platform.imdg.iml.hazelcast.adapter.predicate.ImdgPredicateBuilderHazelcast;
|
||||
import ru.spcex.platform.utils.collection.Pair;
|
||||
import ru.spcex.platform.utils.number.BigDecimalUtil;
|
||||
import ru.spcex.platform.utils.validation.IValidator;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class ValidationSymbolsService extends QueueConsumer implements InitializingBean {
|
||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
|
|
@ -116,7 +94,7 @@ public class ValidationSymbolsService extends QueueConsumer implements Initializ
|
|||
|
||||
ValidationSymbols vs = new ValidationSymbols();
|
||||
vs.setId(validationSymbolsImdg.nextIDSequenceFor());
|
||||
vs.setCode(req.getCode());
|
||||
vs.setCode(req.getCode().toUpperCase());
|
||||
vs.setSymbols(req.getSymbols());
|
||||
vs.setComment(req.getComment());
|
||||
validationSymbolsImdg.insert(vs);
|
||||
|
|
@ -136,7 +114,7 @@ public class ValidationSymbolsService extends QueueConsumer implements Initializ
|
|||
|
||||
ValidationSymbolsUpdateRequest req = userRequest.getRequestPayload();
|
||||
ValidationSymbols vs = validationSymbolsImdg.getSingleObjectByID(req.getId());
|
||||
vs.setCode(req.getCode());
|
||||
vs.setCode(req.getCode().toUpperCase());
|
||||
vs.setSymbols(req.getSymbols());
|
||||
vs.setComment(req.getComment());
|
||||
validationSymbolsImdg.update(vs);
|
||||
|
|
|
|||
|
|
@ -7,12 +7,12 @@
|
|||
<artifactId>xml-exporter</artifactId>
|
||||
<name>xml-exporter</name>
|
||||
<description>XML exporter for XML files</description>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
|
||||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
|
|
|
|||
|
|
@ -8,12 +8,12 @@
|
|||
<artifactId>xml-importer</artifactId>
|
||||
<name>xml-importer</name>
|
||||
<description>XML loader for XML files</description>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
|
||||
<parent>
|
||||
<artifactId>clearing-parent</artifactId>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -131,8 +131,8 @@ fi
|
|||
if [ "$TESTER_EXIT_CODE" -eq "0" ]
|
||||
then
|
||||
echo "Test case ${CLR_TEST_NAME} passed successfully"
|
||||
exit 0
|
||||
else
|
||||
echo "Test case ${CLR_TEST_NAME} failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
exit 0
|
||||
10
clr_test/db-updater/Dockerfile
Normal file
10
clr_test/db-updater/Dockerfile
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
FROM alpine
|
||||
|
||||
ADD combined_update_ddl.sql /init.sql
|
||||
ADD init.sh /init.sh
|
||||
|
||||
RUN apk add --update --no-cache postgresql-client
|
||||
RUN chmod +x init.sh
|
||||
RUN find . -name "*.sh" | xargs sed -i 's/\r$//'
|
||||
|
||||
ENTRYPOINT [ "./init.sh" ]
|
||||
19
clr_test/db-updater/init.sh
Normal file
19
clr_test/db-updater/init.sh
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
#!/bin/sh
|
||||
|
||||
until pg_isready -U clearing -h db -p 5432 -d clearing -t 1; do
|
||||
echo "Waiting for database to be ready..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
echo "PSQL version: $(psql --version)"
|
||||
echo "DB password is $PGPASSWORD"
|
||||
echo "Database connection test:"
|
||||
psql -U clearing -h db -p 5432 -d clearing -c "SELECT 'Database is connected!' AS status"
|
||||
|
||||
echo "Executing SQL file:"
|
||||
cat init.sql
|
||||
|
||||
echo "Updating database"
|
||||
psql -U clearing -h db -p 5432 -d clearing -f init.sql
|
||||
|
||||
tail -f /dev/null
|
||||
|
|
@ -13,6 +13,14 @@ services:
|
|||
timeout: 5s
|
||||
retries: 100
|
||||
|
||||
db-updater:
|
||||
build: db-updater
|
||||
environment:
|
||||
- PGPASSWORD=Aa111111
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
|
||||
clearing_system:
|
||||
build:
|
||||
context: ./clearing-all
|
||||
|
|
@ -21,36 +29,33 @@ services:
|
|||
environment:
|
||||
- CLR_TEST_NAME=${CLR_TEST_NAME}
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
kafka:
|
||||
db-updater:
|
||||
condition: service_started
|
||||
kafka:
|
||||
condition: service_healthy
|
||||
volumes:
|
||||
- logs_volume:/opt/clearing/bin/log_artifacts
|
||||
# restart: always
|
||||
|
||||
zookeeper:
|
||||
image: mirror.gcr.io/confluentinc/cp-zookeeper:6.2.3.amd64
|
||||
container_name: zookeeper
|
||||
environment:
|
||||
ZOOKEEPER_SERVER_ID: 1
|
||||
ZOOKEEPER_CLIENT_PORT: 2181
|
||||
ZOOKEEPER_TICK_TIME: 2000
|
||||
|
||||
kafka:
|
||||
image: mirror.gcr.io/confluentinc/cp-kafka:6.2.3.amd64
|
||||
build: kafka
|
||||
container_name: kafka
|
||||
environment:
|
||||
KAFKA_BROKER_ID: 1
|
||||
KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"
|
||||
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
|
||||
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
|
||||
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
|
||||
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
|
||||
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
|
||||
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
|
||||
depends_on:
|
||||
- zookeeper
|
||||
KAFKA_CFG_NODE_ID: 1
|
||||
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093
|
||||
KAFKA_ENABLE_KRAFT: yes
|
||||
KAFKA_CFG_PROCESS_ROLES: broker,controller
|
||||
KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
|
||||
KAFKA_CFG_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093
|
||||
KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
|
||||
KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
|
||||
ALLOW_PLAINTEXT_LISTENER: yes
|
||||
KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: true
|
||||
healthcheck:
|
||||
test: kafka-topics.sh --list --bootstrap-server kafka:9092 || exit 1
|
||||
interval: 1s
|
||||
timeout: 60s
|
||||
retries: 100
|
||||
|
||||
sftp:
|
||||
build: sftp
|
||||
|
|
|
|||
3
clr_test/kafka/Dockerfile
Normal file
3
clr_test/kafka/Dockerfile
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
FROM mirror.gcr.io/bitnami/kafka:4.0.0
|
||||
|
||||
ADD log4j2.yaml /opt/bitnami/kafka/config/
|
||||
135
clr_test/kafka/log4j2.yaml
Normal file
135
clr_test/kafka/log4j2.yaml
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
Configuration:
|
||||
Properties:
|
||||
Property:
|
||||
# Fallback if the system property is not set
|
||||
- name: "kafka.logs.dir"
|
||||
value: "."
|
||||
- name: "logPattern"
|
||||
value: "[%d] %p %m (%c)%n"
|
||||
|
||||
# Appenders configuration
|
||||
# See: https://logging.apache.org/log4j/2.x/manual/appenders.html
|
||||
Appenders:
|
||||
Console:
|
||||
name: STDOUT
|
||||
PatternLayout:
|
||||
pattern: "${logPattern}"
|
||||
|
||||
RollingFile:
|
||||
- name: KafkaAppender
|
||||
fileName: "${sys:kafka.logs.dir}/server.log"
|
||||
filePattern: "${sys:kafka.logs.dir}/server.log.%d{yyyy-MM-dd-HH}"
|
||||
PatternLayout:
|
||||
pattern: "${logPattern}"
|
||||
TimeBasedTriggeringPolicy:
|
||||
modulate: true
|
||||
interval: 1
|
||||
# State Change appender
|
||||
- name: StateChangeAppender
|
||||
fileName: "${sys:kafka.logs.dir}/state-change.log"
|
||||
filePattern: "${sys:kafka.logs.dir}/stage-change.log.%d{yyyy-MM-dd-HH}"
|
||||
PatternLayout:
|
||||
pattern: "${logPattern}"
|
||||
TimeBasedTriggeringPolicy:
|
||||
modulate: true
|
||||
interval: 1
|
||||
# Request appender
|
||||
- name: RequestAppender
|
||||
fileName: "${sys:kafka.logs.dir}/kafka-request.log"
|
||||
filePattern: "${sys:kafka.logs.dir}/kafka-request.log.%d{yyyy-MM-dd-HH}"
|
||||
PatternLayout:
|
||||
pattern: "${logPattern}"
|
||||
TimeBasedTriggeringPolicy:
|
||||
modulate: true
|
||||
interval: 1
|
||||
# Cleaner appender
|
||||
- name: CleanerAppender
|
||||
fileName: "${sys:kafka.logs.dir}/log-cleaner.log"
|
||||
filePattern: "${sys:kafka.logs.dir}/log-cleaner.log.%d{yyyy-MM-dd-HH}"
|
||||
PatternLayout:
|
||||
pattern: "${logPattern}"
|
||||
TimeBasedTriggeringPolicy:
|
||||
modulate: true
|
||||
interval: 1
|
||||
# Controller appender
|
||||
- name: ControllerAppender
|
||||
fileName: "${sys:kafka.logs.dir}/controller.log"
|
||||
filePattern: "${sys:kafka.logs.dir}/controller.log.%d{yyyy-MM-dd-HH}"
|
||||
PatternLayout:
|
||||
pattern: "${logPattern}"
|
||||
TimeBasedTriggeringPolicy:
|
||||
modulate: true
|
||||
interval: 1
|
||||
# Authorizer appender
|
||||
- name: AuthorizerAppender
|
||||
fileName: "${sys:kafka.logs.dir}/kafka-authorizer.log"
|
||||
filePattern: "${sys:kafka.logs.dir}/kafka-authorizer.log.%d{yyyy-MM-dd-HH}"
|
||||
PatternLayout:
|
||||
pattern: "${logPattern}"
|
||||
TimeBasedTriggeringPolicy:
|
||||
modulate: true
|
||||
interval: 1
|
||||
|
||||
# Loggers configuration
|
||||
# See: https://logging.apache.org/log4j/2.x/manual/configuration.html#configuring-loggers
|
||||
Loggers:
|
||||
Root:
|
||||
level: WARN
|
||||
AppenderRef:
|
||||
- ref: STDOUT
|
||||
- ref: KafkaAppender
|
||||
Logger:
|
||||
# Kafka logger
|
||||
- name: kafka
|
||||
level: WARN
|
||||
# Kafka org.apache logger
|
||||
- name: org.apache.kafka
|
||||
level: WARN
|
||||
# Kafka request logger
|
||||
- name: kafka.request.logger
|
||||
level: WARN
|
||||
additivity: false
|
||||
AppenderRef:
|
||||
ref: RequestAppender
|
||||
# Uncomment the lines below and change log4j.logger.kafka.network.RequestChannel$ to TRACE
|
||||
# for additional output related to the handling of requests
|
||||
# - name: kafka.network.Processor
|
||||
# level: TRACE
|
||||
# additivity: false
|
||||
# AppenderRef:
|
||||
# ref: RequestAppender
|
||||
# - name: kafka.server.KafkaApis
|
||||
# level: TRACE
|
||||
# additivity: false
|
||||
# AppenderRef:
|
||||
# ref: RequestAppender
|
||||
# Kafka network RequestChannel$ logger
|
||||
- name: kafka.network.RequestChannel$
|
||||
level: WARN
|
||||
additivity: false
|
||||
AppenderRef:
|
||||
ref: RequestAppender
|
||||
# Controller logger
|
||||
- name: org.apache.kafka.controller
|
||||
level: WARN
|
||||
additivity: false
|
||||
AppenderRef:
|
||||
ref: ControllerAppender
|
||||
# LogCleaner logger
|
||||
- name: kafka.log.LogCleaner
|
||||
level: WARN
|
||||
additivity: false
|
||||
AppenderRef:
|
||||
ref: CleanerAppender
|
||||
# State change logger
|
||||
- name: state.change.logger
|
||||
level: WARN
|
||||
additivity: false
|
||||
AppenderRef:
|
||||
ref: StateChangeAppender
|
||||
# Authorizer logger
|
||||
- name: kafka.authorizer.logger
|
||||
level: WARN
|
||||
additivity: false
|
||||
AppenderRef:
|
||||
ref: AuthorizerAppender
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
from glob import glob
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
|
|
@ -12,6 +13,7 @@ logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(me
|
|||
DATA_ROOT_DIR = os.environ['CLEARING_TEST_DIR']
|
||||
CLR_TEST_DIR = os.environ['CLR_TEST_DIR']
|
||||
RESULT_FILES_DIR = os.environ['RESULT_FILES_DIR']
|
||||
DDL_VERSION_FROM = (3, 18, 0)
|
||||
|
||||
|
||||
def run_docker(folder_name: str) -> int:
|
||||
|
|
@ -37,6 +39,9 @@ def run_docker(folder_name: str) -> int:
|
|||
logging.info("Removing all clr_test-db images")
|
||||
subprocess.call('docker rmi -f clr_test-db', shell=True)
|
||||
|
||||
logging.info("Removing all clr_test-db-updater images")
|
||||
subprocess.call('docker rmi -f clr_test-db-updater', shell=True)
|
||||
|
||||
logging.info("Removing all clr_test-clearing_system images")
|
||||
subprocess.call('docker rmi -f clr_test-clearing_system', shell=True)
|
||||
|
||||
|
|
@ -45,9 +50,6 @@ def run_docker(folder_name: str) -> int:
|
|||
|
||||
os.chdir("..")
|
||||
|
||||
if code != 0:
|
||||
sys.exit(code)
|
||||
|
||||
return code
|
||||
|
||||
|
||||
|
|
@ -86,6 +88,14 @@ def copy_directory(path_from: str, path_to: str) -> None:
|
|||
shutil.copytree(path_from, path_to, dirs_exist_ok=True)
|
||||
|
||||
|
||||
def append_to_log_file(test_case: str, code: int) -> None:
|
||||
with open("clr_test/results.txt", 'a') as f:
|
||||
if code == 0:
|
||||
f.write(f"Test case {test_case} passed successfully\n")
|
||||
else:
|
||||
f.write(f"Test case {test_case} failed\n")
|
||||
|
||||
|
||||
def apply_test_case(folder: str) -> None:
|
||||
remove_directory(f"{CLR_TEST_DIR}/clearing-all/clearing_testing_utils/store/expected")
|
||||
remove_directory(f"{CLR_TEST_DIR}/clearing-all/clearing_testing_utils/store/input")
|
||||
|
|
@ -98,7 +108,8 @@ def apply_test_case(folder: str) -> None:
|
|||
|
||||
remove_files_with_extensions(".xml")
|
||||
# change_date(folder)
|
||||
run_docker(folder)
|
||||
exit_code = run_docker(folder)
|
||||
append_to_log_file(folder, exit_code)
|
||||
|
||||
|
||||
def stop_docker_compose() -> None:
|
||||
|
|
@ -108,9 +119,47 @@ def stop_docker_compose() -> None:
|
|||
os.chdir("..")
|
||||
|
||||
|
||||
def combine_ddl_updates_into_file():
|
||||
logging.info(f"Combining DDLs...")
|
||||
logging.info(f"Found files = {os.listdir(f'{CLR_TEST_DIR}/clearing-all/db')}")
|
||||
pattern = re.compile(r'updateDDL_(\d+(?:\.\d+)+)\.sql$', re.IGNORECASE)
|
||||
|
||||
files = []
|
||||
for filepath in glob(f"{CLR_TEST_DIR}/clearing-all/db/updateDDL_*.sql"):
|
||||
filename = os.path.basename(filepath)
|
||||
match = pattern.match(filename)
|
||||
if match:
|
||||
version_str = match.group(1)
|
||||
parts = version_str.split('.')
|
||||
|
||||
try:
|
||||
version_numbers = [int(p) for p in parts]
|
||||
padded_version = version_numbers[:3] + [0] * max(0, 3 - len(version_numbers))
|
||||
|
||||
if tuple(padded_version) > DDL_VERSION_FROM:
|
||||
files.append((version_numbers, padded_version, filepath))
|
||||
|
||||
except ValueError:
|
||||
continue
|
||||
|
||||
files.sort(key=lambda x: x[0])
|
||||
logging.info(f"Found files: {files}")
|
||||
|
||||
with open(f"{CLR_TEST_DIR}/db-updater/combined_update_ddl.sql", 'w', encoding='utf-8') as outfile:
|
||||
for orig_ver, padded_ver, filepath in files:
|
||||
with open(filepath, 'r', encoding='utf-8') as infile:
|
||||
content = infile.read().rstrip('\n')
|
||||
outfile.write(content + '\n\n')
|
||||
|
||||
logging.info(f"Result: {os.listdir(f'{CLR_TEST_DIR}/db-updater')}")
|
||||
|
||||
|
||||
def main() -> None:
|
||||
folders = [i for i in sorted(os.listdir(DATA_ROOT_DIR)) if re.search("\\d{1,}.\\d{1,}.*", i)]
|
||||
|
||||
remove_if_exists("clr_test/results.txt")
|
||||
|
||||
combine_ddl_updates_into_file()
|
||||
for folder in folders:
|
||||
stop_docker_compose()
|
||||
apply_test_case(folder)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,21 @@
|
|||
package ru.spcex.platform.enumeration;
|
||||
|
||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||
|
||||
public enum NominalTypeCode implements IEnumKey {
|
||||
INDX("INDX"),
|
||||
FIXD("FIXD")
|
||||
;
|
||||
|
||||
private final String key;
|
||||
|
||||
NominalTypeCode(String key) {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -15,6 +15,8 @@ public class RegistryChangeRefundDateRequest {
|
|||
@JsonSerialize(using = LocalDateSerializer.class)
|
||||
@JsonDeserialize(using = LocalDateDeserializer.class)
|
||||
private LocalDate refundDate;
|
||||
@JsonProperty
|
||||
public String market;
|
||||
|
||||
public Long getGroupId() {
|
||||
return groupId;
|
||||
|
|
@ -31,4 +33,12 @@ public class RegistryChangeRefundDateRequest {
|
|||
public void setRefundDate(LocalDate refundDate) {
|
||||
this.refundDate = refundDate;
|
||||
}
|
||||
|
||||
public String getMarket() {
|
||||
return market;
|
||||
}
|
||||
|
||||
public void setMarket(String market) {
|
||||
this.market = market;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@ public class RegistryReturnDepositRequest implements WithId {
|
|||
private Long id;
|
||||
@JsonProperty
|
||||
private BigDecimal balance;
|
||||
@JsonProperty
|
||||
public String market;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
|
|
@ -26,4 +28,12 @@ public class RegistryReturnDepositRequest implements WithId {
|
|||
public void setBalance(BigDecimal balance) {
|
||||
this.balance = balance;
|
||||
}
|
||||
|
||||
public String getMarket() {
|
||||
return market;
|
||||
}
|
||||
|
||||
public void setMarket(String market) {
|
||||
this.market = market;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@ public class RegistrySplitDepositActionRequest {
|
|||
private String contract;
|
||||
@JsonProperty
|
||||
private String direction;
|
||||
@JsonProperty
|
||||
public String market;
|
||||
|
||||
public String getComment() {
|
||||
return comment;
|
||||
|
|
@ -63,4 +65,12 @@ public class RegistrySplitDepositActionRequest {
|
|||
public void setDirection(String direction) {
|
||||
this.direction = direction;
|
||||
}
|
||||
|
||||
public String getMarket() {
|
||||
return market;
|
||||
}
|
||||
|
||||
public void setMarket(String market) {
|
||||
this.market = market;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
package ru.spcex.clearing.platform.messaging.domain.cud.securitites;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalDateDeserializer;
|
||||
import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalDateSerializer;
|
||||
import ru.spcex.platform.classes.base.interfaces.WithInstrumentType;
|
||||
import ru.spcex.platform.classes.base.interfaces.WithSecuritySymbol;
|
||||
|
|
@ -19,6 +21,8 @@ public class DigitalCertificateSecurityGatewayRequest implements WithSecuritySym
|
|||
@JsonProperty
|
||||
private UUID issuerId;
|
||||
@JsonProperty
|
||||
private String inn;
|
||||
@JsonProperty
|
||||
private String shortName;
|
||||
@JsonProperty
|
||||
private String fullName;
|
||||
|
|
@ -41,6 +45,7 @@ public class DigitalCertificateSecurityGatewayRequest implements WithSecuritySym
|
|||
@JsonProperty
|
||||
private String settlementDepository;
|
||||
@JsonSerialize(using = LocalDateSerializer.class)
|
||||
@JsonDeserialize(using = LocalDateDeserializer.class)
|
||||
@JsonProperty
|
||||
private LocalDate nominalIndexDate;
|
||||
@JsonProperty
|
||||
|
|
@ -75,6 +80,14 @@ public class DigitalCertificateSecurityGatewayRequest implements WithSecuritySym
|
|||
this.issuerId = issuerId;
|
||||
}
|
||||
|
||||
public String getInn() {
|
||||
return inn;
|
||||
}
|
||||
|
||||
public void setInn(String inn) {
|
||||
this.inn = inn;
|
||||
}
|
||||
|
||||
public String getShortName() {
|
||||
return shortName;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
<parent>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>clearing</artifactId>
|
||||
<version>SPCEX-3.18.240</version>
|
||||
<version>SPCEX-3.18.244</version>
|
||||
</parent>
|
||||
|
||||
<modules>
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue