diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/DigitalCertificateSecurity.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/DigitalCertificateSecurity.java
new file mode 100644
index 000000000..054412667
--- /dev/null
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/DigitalCertificateSecurity.java
@@ -0,0 +1,117 @@
+package ru.clearing.classes.statics.data.security;
+
+import ru.clearing.classes.ConstSerializable;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * Цифровые свидетельства
+ *
+ * DB table: DIGITAL_CERTIFICATE_SECURITY
+ **/
+public class DigitalCertificateSecurity extends Security {
+ private static final long serialVersionUID = ConstSerializable.serialVersionUID;
+
+ private Long securityId;
+ // extend: private String shortName;
+ // extend: private String securitySymbol;
+ // extend: private String fullName;
+ // extend: private String isin;
+ // extend: private String instrumentType;
+ // extend: private Long issuerId;
+ // extend: private String shortNameEng;
+ // extend: private String fullNameEng;
+ // extend: private String workflowStatus;
+ private String baseCode;
+ // extend: private BigDecimal lotSize;
+ private Long baseUnitSize;
+ private BigDecimal priceVarianceLimit;
+ private String nominalTypeCode;
+ private BigDecimal nominalValue;
+ private LocalDate nominalIndexationDate;
+ private String nominalIndexationSign;
+ private String settlementHouse;
+ private String depository;
+
+
+ public Long getSecurityId() {
+ return securityId;
+ }
+
+ public void setSecurityId(Long securityId) {
+ this.securityId = securityId;
+ }
+
+ public String getBaseCode() {
+ return baseCode;
+ }
+
+ public void setBaseCode(String baseCode) {
+ this.baseCode = baseCode;
+ }
+
+ public Long getBaseUnitSize() {
+ return baseUnitSize;
+ }
+
+ public void setBaseUnitSize(Long baseUnitSize) {
+ this.baseUnitSize = baseUnitSize;
+ }
+
+ public BigDecimal getPriceVarianceLimit() {
+ return priceVarianceLimit;
+ }
+
+ public void setPriceVarianceLimit(BigDecimal priceVarianceLimit) {
+ this.priceVarianceLimit = priceVarianceLimit;
+ }
+
+ public String getNominalTypeCode() {
+ return nominalTypeCode;
+ }
+
+ public void setNominalTypeCode(String nominalTypeCode) {
+ this.nominalTypeCode = nominalTypeCode;
+ }
+
+ public BigDecimal getNominalValue() {
+ return nominalValue;
+ }
+
+ public void setNominalValue(BigDecimal nominalValue) {
+ this.nominalValue = nominalValue;
+ }
+
+ public LocalDate getNominalIndexationDate() {
+ return nominalIndexationDate;
+ }
+
+ public void setNominalIndexationDate(LocalDate nominalIndexationDate) {
+ this.nominalIndexationDate = nominalIndexationDate;
+ }
+
+ public String getNominalIndexationSign() {
+ return nominalIndexationSign;
+ }
+
+ public void setNominalIndexationSign(String nominalIndexationSign) {
+ this.nominalIndexationSign = nominalIndexationSign;
+ }
+
+ public String getSettlementHouse() {
+ return settlementHouse;
+ }
+
+ public void setSettlementHouse(String settlementHouse) {
+ this.settlementHouse = settlementHouse;
+ }
+
+ public String getDepository() {
+ return depository;
+ }
+
+ public void setDepository(String depository) {
+ this.depository = depository;
+ }
+}
\ No newline at end of file
diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/DigitalCertificateSecurityHistory.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/DigitalCertificateSecurityHistory.java
new file mode 100644
index 000000000..5a4629c29
--- /dev/null
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/DigitalCertificateSecurityHistory.java
@@ -0,0 +1,28 @@
+package ru.clearing.classes.statics.data.security;
+
+import ru.clearing.classes.ConstSerializable;
+import ru.clearing.classes.objects.BusinessEvent;
+
+import java.io.Serial;
+
+/**
+ * Изменение состояния объекта Цифровые свидетельства
+ *
+ * DB table: DIGITAL_CERTIFICATE_SECURITY_HISTORY
+ **/
+public class DigitalCertificateSecurityHistory extends BusinessEvent {
+ @Serial
+ private static final long serialVersionUID = ConstSerializable.serialVersionUID;
+
+ private DigitalCertificateSecurity object;
+
+ @Override
+ public DigitalCertificateSecurity getObject() {
+ return object;
+ }
+
+ @Override
+ public void setObject(DigitalCertificateSecurity object) {
+ this.object = object;
+ }
+}
diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/UtilitarianDigitalRight.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/UtilitarianDigitalRight.java
new file mode 100644
index 000000000..a4ece469d
--- /dev/null
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/UtilitarianDigitalRight.java
@@ -0,0 +1,151 @@
+package ru.clearing.classes.statics.data.security;
+
+import ru.clearing.classes.ConstSerializable;
+import ru.spcex.platform.classes.base.SpcexObjectBase;
+
+import java.math.BigDecimal;
+
+/**
+ * Утилитарные цифровые права
+ *
+ * DB table: UTILITARIAN_DIGITAL_RIGHT
+ **/
+public class UtilitarianDigitalRight extends SpcexObjectBase {
+ private static final long serialVersionUID = ConstSerializable.serialVersionUID;
+
+ private Long securityId;
+ private String investmentAttractingCompany;
+ private String investmentAttractingInn;
+ private BigDecimal issueAmount;
+ private BigDecimal issuePrice;
+ private Long issueSize;
+ private String nominalIndexation;
+ private String platformOperator;
+ private String platformOperatorCode;
+ private String platformOperatorInn;
+ private String platformOperatorWeb;
+ private String platformProposalWeb;
+ private String rightEssence;
+ private String rightUnit;
+ private String rightUnitMeasurement;
+
+ public Long getSecurityId() {
+ return securityId;
+ }
+
+ public void setSecurityId(Long securityId) {
+ this.securityId = securityId;
+ }
+
+ public String getInvestmentAttractingCompany() {
+ return investmentAttractingCompany;
+ }
+
+ public void setInvestmentAttractingCompany(String investmentAttractingCompany) {
+ this.investmentAttractingCompany = investmentAttractingCompany;
+ }
+
+ public String getInvestmentAttractingInn() {
+ return investmentAttractingInn;
+ }
+
+ public void setInvestmentAttractingInn(String investmentAttractingInn) {
+ this.investmentAttractingInn = investmentAttractingInn;
+ }
+
+ public BigDecimal getIssueAmount() {
+ return issueAmount;
+ }
+
+ public void setIssueAmount(BigDecimal issueAmount) {
+ this.issueAmount = issueAmount;
+ }
+
+ public BigDecimal getIssuePrice() {
+ return issuePrice;
+ }
+
+ public void setIssuePrice(BigDecimal issuePrice) {
+ this.issuePrice = issuePrice;
+ }
+
+ public Long getIssueSize() {
+ return issueSize;
+ }
+
+ public void setIssueSize(Long issueSize) {
+ this.issueSize = issueSize;
+ }
+
+ public String getNominalIndexation() {
+ return nominalIndexation;
+ }
+
+ public void setNominalIndexation(String nominalIndexation) {
+ this.nominalIndexation = nominalIndexation;
+ }
+
+ public String getPlatformOperator() {
+ return platformOperator;
+ }
+
+ public void setPlatformOperator(String platformOperator) {
+ this.platformOperator = platformOperator;
+ }
+
+ public String getPlatformOperatorCode() {
+ return platformOperatorCode;
+ }
+
+ public void setPlatformOperatorCode(String platformOperatorCode) {
+ this.platformOperatorCode = platformOperatorCode;
+ }
+
+ public String getPlatformOperatorInn() {
+ return platformOperatorInn;
+ }
+
+ public void setPlatformOperatorInn(String platformOperatorInn) {
+ this.platformOperatorInn = platformOperatorInn;
+ }
+
+ public String getPlatformOperatorWeb() {
+ return platformOperatorWeb;
+ }
+
+ public void setPlatformOperatorWeb(String platformOperatorWeb) {
+ this.platformOperatorWeb = platformOperatorWeb;
+ }
+
+ public String getPlatformProposalWeb() {
+ return platformProposalWeb;
+ }
+
+ public void setPlatformProposalWeb(String platformProposalWeb) {
+ this.platformProposalWeb = platformProposalWeb;
+ }
+
+ public String getRightEssence() {
+ return rightEssence;
+ }
+
+ public void setRightEssence(String rightEssence) {
+ this.rightEssence = rightEssence;
+ }
+
+ public String getRightUnit() {
+ return rightUnit;
+ }
+
+ public void setRightUnit(String rightUnit) {
+ this.rightUnit = rightUnit;
+ }
+
+ public String getRightUnitMeasurement() {
+ return rightUnitMeasurement;
+ }
+
+ public void setRightUnitMeasurement(String rightUnitMeasurement) {
+ this.rightUnitMeasurement = rightUnitMeasurement;
+ }
+}
\ No newline at end of file
diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/UtilitarianDigitalRightHistory.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/UtilitarianDigitalRightHistory.java
new file mode 100644
index 000000000..09f73571b
--- /dev/null
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/UtilitarianDigitalRightHistory.java
@@ -0,0 +1,28 @@
+package ru.clearing.classes.statics.data.security;
+
+import ru.clearing.classes.ConstSerializable;
+import ru.clearing.classes.objects.BusinessEvent;
+
+import java.io.Serial;
+
+/**
+ * Изменение состояния объекта Утилитарные цифровые права
+ *
+ * DB table: UTILITARIAN_DIGITAL_RIGHT_HISTORY
+ **/
+public class UtilitarianDigitalRightHistory extends BusinessEvent {
+ @Serial
+ private static final long serialVersionUID = ConstSerializable.serialVersionUID;
+
+ private UtilitarianDigitalRight object;
+
+ @Override
+ public UtilitarianDigitalRight getObject() {
+ return object;
+ }
+
+ @Override
+ public void setObject(UtilitarianDigitalRight object) {
+ this.object = object;
+ }
+}
diff --git a/clearing-parent/db-scripts/src/main/resources/db/DDL.sql b/clearing-parent/db-scripts/src/main/resources/db/DDL.sql
index ca5757bbe..46569b4ae 100644
--- a/clearing-parent/db-scripts/src/main/resources/db/DDL.sql
+++ b/clearing-parent/db-scripts/src/main/resources/db/DDL.sql
@@ -852,6 +852,32 @@ COMMENT ON COLUMN PRIORITY_DICTIONARY.NAME IS 'Приоритет отображ
GRANT ALL PRIVILEGES ON TABLE PRIORITY_DICTIONARY TO clearing;
+-- nominalTypeCode - Справочник типов номинала УЦП
+DROP TABLE IF EXISTS NOMINAL_TYPE_CODE_DICTIONARY;
+CREATE TABLE NOMINAL_TYPE_CODE_DICTIONARY(ID bigint PRIMARY KEY, CODE varchar(4), NAME varchar(255));
+COMMENT ON TABLE NOMINAL_TYPE_CODE_DICTIONARY IS 'Справочник типов номинала УЦП';
+
+COMMENT ON COLUMN NOMINAL_TYPE_CODE_DICTIONARY.ID IS 'Идентификатор записи';
+
+COMMENT ON COLUMN NOMINAL_TYPE_CODE_DICTIONARY.CODE IS 'Код';
+
+COMMENT ON COLUMN NOMINAL_TYPE_CODE_DICTIONARY.NAME IS 'Наименование';
+
+GRANT ALL PRIVILEGES ON TABLE NOMINAL_TYPE_CODE_DICTIONARY TO clearing;
+
+-- unitMeasurement - Справочник единиц измерения
+DROP TABLE IF EXISTS UNIT_MEASUREMENT_DICTIONARY;
+CREATE TABLE UNIT_MEASUREMENT_DICTIONARY(ID bigint PRIMARY KEY, CODE varchar(4), NAME varchar(255));
+COMMENT ON TABLE UNIT_MEASUREMENT_DICTIONARY IS 'Справочник единиц измерения';
+
+COMMENT ON COLUMN UNIT_MEASUREMENT_DICTIONARY.ID IS 'Идентификатор записи';
+
+COMMENT ON COLUMN UNIT_MEASUREMENT_DICTIONARY.CODE IS 'Код';
+
+COMMENT ON COLUMN UNIT_MEASUREMENT_DICTIONARY.NAME IS 'Наименование';
+
+GRANT ALL PRIVILEGES ON TABLE UNIT_MEASUREMENT_DICTIONARY TO clearing;
+
/* Business objects */
-- dbVersion - Версия базы данных
@@ -5356,6 +5382,153 @@ COMMENT ON COLUMN VALIDATION_SYMBOLS.SYMBOLS IS 'Допустимые симво
COMMENT ON COLUMN VALIDATION_SYMBOLS.COMMENT IS 'Описание группы символов';
GRANT ALL PRIVILEGES ON TABLE VALIDATION_SYMBOLS TO clearing;
+
+-- digitalCertificateSecurity - Цифровые свидетельства
+DROP TABLE IF EXISTS DIGITAL_CERTIFICATE_SECURITY;
+CREATE TABLE DIGITAL_CERTIFICATE_SECURITY(ID bigint PRIMARY KEY, SECURITY_ID bigint, BASE_CODE varchar(50), BASE_UNIT_SIZE bigint, PRICE_VARIANCE_LIMIT numeric(72,18), NOMINAL_TYPE_CODE varchar(4), NOMINAL_VALUE numeric(72,18), NOMINAL_INDEXATION_DATE date, NOMINAL_INDEXATION_SIGN varchar(4), SETTLEMENT_HOUSE varchar(255), DEPOSITORY varchar(255));
+COMMENT ON TABLE DIGITAL_CERTIFICATE_SECURITY IS 'Цифровые свидетельства';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.ID IS 'Идентификатор записи';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.SECURITY_ID IS 'Идентификатор инструмента (linked to security)';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.BASE_CODE IS 'Код ЦС, присвоенный депозитарием';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.BASE_UNIT_SIZE IS 'Количество УЦП в одном ЦС';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.PRICE_VARIANCE_LIMIT IS 'Пределы изменения цены';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.NOMINAL_TYPE_CODE IS 'Тип индексации номинала (linked to nominalTypeCode)';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.NOMINAL_VALUE IS 'Индексируемый номинал';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.NOMINAL_INDEXATION_DATE IS 'Дата индексации номинала';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.NOMINAL_INDEXATION_SIGN IS 'Фактическая индексация (linked to allowed)';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.SETTLEMENT_HOUSE IS 'Наименование расчетной организации';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.DEPOSITORY IS 'Наименование депозитария';
+
+GRANT ALL PRIVILEGES ON TABLE DIGITAL_CERTIFICATE_SECURITY TO clearing;
+
+
+-- History log of digitalCertificateSecurity - Цифровые свидетельства
+DROP TABLE IF EXISTS DIGITAL_CERTIFICATE_SECURITY_HISTORY;
+CREATE TABLE DIGITAL_CERTIFICATE_SECURITY_HISTORY(DIGITAL_CERTIFICATE_SECURITY_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), ID bigint PRIMARY KEY, SECURITY_ID bigint, BASE_CODE varchar(50), BASE_UNIT_SIZE bigint, PRICE_VARIANCE_LIMIT numeric(72,18), NOMINAL_TYPE_CODE varchar(4), NOMINAL_VALUE numeric(72,18), NOMINAL_INDEXATION_DATE date, NOMINAL_INDEXATION_SIGN varchar(4), SETTLEMENT_HOUSE varchar(255), DEPOSITORY varchar(255));
+COMMENT ON TABLE DIGITAL_CERTIFICATE_SECURITY_HISTORY IS 'История изменений таблицы digitalCertificateSecurity';
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.DIGITAL_CERTIFICATE_SECURITY_ID IS 'Идентификатор записи в таблице DIGITAL_CERTIFICATE_SECURITY';
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.EVENT_TIME IS 'Дата и время изменения';
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.EVENT_USER_ID IS 'Инициатор изменения';
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.EVENT_TYPE IS 'Тип изменения';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.ID IS 'Идентификатор записи';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.SECURITY_ID IS 'Идентификатор инструмента (linked to security)';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.BASE_CODE IS 'Код ЦС, присвоенный депозитарием';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.BASE_UNIT_SIZE IS 'Количество УЦП в одном ЦС';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.PRICE_VARIANCE_LIMIT IS 'Пределы изменения цены';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.NOMINAL_TYPE_CODE IS 'Тип индексации номинала (linked to nominalTypeCode)';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.NOMINAL_VALUE IS 'Индексируемый номинал';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.NOMINAL_INDEXATION_DATE IS 'Дата индексации номинала';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.NOMINAL_INDEXATION_SIGN IS 'Фактическая индексация (linked to allowed)';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.SETTLEMENT_HOUSE IS 'Наименование расчетной организации';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.DEPOSITORY IS 'Наименование депозитария';
+
+GRANT ALL PRIVILEGES ON TABLE DIGITAL_CERTIFICATE_SECURITY_HISTORY TO clearing;
+
+-- utilitarianDigitalRight - Утилитарные цифровые права
+DROP TABLE IF EXISTS UTILITARIAN_DIGITAL_RIGHT;
+CREATE TABLE UTILITARIAN_DIGITAL_RIGHT(ID bigint PRIMARY KEY, SECURITY_ID bigint, INVESTMENT_ATTRACTING_COMPANY varchar(255), INVESTMENT_ATTRACTING_INN varchar(255), ISSUE_AMOUNT numeric(72,2), ISSUE_PRICE numeric(72,18), ISSUE_SIZE bigint, NOMINAL_INDEXATION varchar(255), PLATFORM_OPERATOR varchar(255), PLATFORM_OPERATOR_CODE varchar(255), PLATFORM_OPERATOR_INN varchar(255), PLATFORM_OPERATOR_WEB varchar(255), PLATFORM_PROPOSAL_WEB varchar(255), RIGHT_ESSENCE varchar(255), RIGHT_UNIT varchar(255), RIGHT_UNIT_MEASUREMENT varchar(4));
+COMMENT ON TABLE UTILITARIAN_DIGITAL_RIGHT IS 'Утилитарные цифровые права';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.ID IS 'Идентификатор записи';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.SECURITY_ID IS 'Идентификатор инструмента (linked to security)';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.INVESTMENT_ATTRACTING_COMPANY IS 'Наименование лица, обязанного по УЦП (linked to company)';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.INVESTMENT_ATTRACTING_INN IS 'ИНН лица, обязанного по УЦП';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.ISSUE_AMOUNT IS 'Общий объем выпуска';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.ISSUE_PRICE IS 'Цена УЦП в инвестиционном предложении';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.ISSUE_SIZE IS 'Общее количество УЦП в выпуске';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.NOMINAL_INDEXATION IS 'Порядок определения номинала УЦП в случае предусмотренной индексации';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.PLATFORM_OPERATOR IS 'Наименование оператора инвестиционной платформы';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.PLATFORM_OPERATOR_CODE IS 'Код УЦП, присвоенный оператором инвестиционной платформы';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.PLATFORM_OPERATOR_INN IS 'ИНН оператора инвестиционной платформы';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.PLATFORM_OPERATOR_WEB IS 'Адрес сайта оператора инвестиционной платформы';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.PLATFORM_PROPOSAL_WEB IS 'Ссылка на описание условий инвестиционного предложения';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.RIGHT_ESSENCE IS 'Существо права требования';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.RIGHT_UNIT IS 'Количество единиц существа права (требования)';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.RIGHT_UNIT_MEASUREMENT IS 'Единица измерения существа права (требования) (linked to unitMeasurement)';
+
+GRANT ALL PRIVILEGES ON TABLE UTILITARIAN_DIGITAL_RIGHT TO clearing;
+
+
+-- History log of utilitarianDigitalRight - Утилитарные цифровые права
+DROP TABLE IF EXISTS UTILITARIAN_DIGITAL_RIGHT_HISTORY;
+CREATE TABLE UTILITARIAN_DIGITAL_RIGHT_HISTORY(UTILITARIAN_DIGITAL_RIGHT_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), ID bigint PRIMARY KEY, SECURITY_ID bigint, INVESTMENT_ATTRACTING_COMPANY varchar(255), INVESTMENT_ATTRACTING_INN varchar(255), ISSUE_AMOUNT numeric(72,2), ISSUE_PRICE numeric(72,18), ISSUE_SIZE bigint, NOMINAL_INDEXATION varchar(255), PLATFORM_OPERATOR varchar(255), PLATFORM_OPERATOR_CODE varchar(255), PLATFORM_OPERATOR_INN varchar(255), PLATFORM_OPERATOR_WEB varchar(255), PLATFORM_PROPOSAL_WEB varchar(255), RIGHT_ESSENCE varchar(255), RIGHT_UNIT varchar(255), RIGHT_UNIT_MEASUREMENT varchar(4));
+COMMENT ON TABLE UTILITARIAN_DIGITAL_RIGHT_HISTORY IS 'История изменений таблицы utilitarianDigitalRight';
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.UTILITARIAN_DIGITAL_RIGHT_ID IS 'Идентификатор записи в таблице UTILITARIAN_DIGITAL_RIGHT';
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.EVENT_TIME IS 'Дата и время изменения';
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.EVENT_USER_ID IS 'Инициатор изменения';
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.EVENT_TYPE IS 'Тип изменения';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.ID IS 'Идентификатор записи';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.SECURITY_ID IS 'Идентификатор инструмента (linked to security)';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.INVESTMENT_ATTRACTING_COMPANY IS 'Наименование лица, обязанного по УЦП (linked to company)';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.INVESTMENT_ATTRACTING_INN IS 'ИНН лица, обязанного по УЦП';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.ISSUE_AMOUNT IS 'Общий объем выпуска';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.ISSUE_PRICE IS 'Цена УЦП в инвестиционном предложении';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.ISSUE_SIZE IS 'Общее количество УЦП в выпуске';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.NOMINAL_INDEXATION IS 'Порядок определения номинала УЦП в случае предусмотренной индексации';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.PLATFORM_OPERATOR IS 'Наименование оператора инвестиционной платформы';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.PLATFORM_OPERATOR_CODE IS 'Код УЦП, присвоенный оператором инвестиционной платформы';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.PLATFORM_OPERATOR_INN IS 'ИНН оператора инвестиционной платформы';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.PLATFORM_OPERATOR_WEB IS 'Адрес сайта оператора инвестиционной платформы';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.PLATFORM_PROPOSAL_WEB IS 'Ссылка на описание условий инвестиционного предложения';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.RIGHT_ESSENCE IS 'Существо права требования';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.RIGHT_UNIT IS 'Количество единиц существа права (требования)';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.RIGHT_UNIT_MEASUREMENT IS 'Единица измерения существа права (требования) (linked to unitMeasurement)';
+
+GRANT ALL PRIVILEGES ON TABLE UTILITARIAN_DIGITAL_RIGHT_HISTORY TO clearing;
+
/* views */
-- Data types
diff --git a/clearing-parent/db-scripts/src/main/resources/db/DICTIONARIES.sql b/clearing-parent/db-scripts/src/main/resources/db/DICTIONARIES.sql
index d25ea94d7..69035893d 100644
--- a/clearing-parent/db-scripts/src/main/resources/db/DICTIONARIES.sql
+++ b/clearing-parent/db-scripts/src/main/resources/db/DICTIONARIES.sql
@@ -80,6 +80,8 @@ INSERT INTO CONTACT_TYPE_DICTIONARY(ID, CODE, NAME) values (9, 'INFO', 'Конт
INSERT INTO CONTACT_TYPE_DICTIONARY(ID, CODE, NAME) values (10, 'CMNT', 'Примечание') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
+INSERT INTO CONTACT_TYPE_DICTIONARY(ID, CODE, NAME) values (11, 'WEB', 'Веб-сайт') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
+
INSERT INTO DOCUMENT_TYPE_DICTIONARY(ID, CODE, NAME) values (1, 'PASP', 'Паспорт') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO DOCUMENT_TYPE_DICTIONARY(ID, CODE, NAME) values (2, 'ICRT', 'Удостоверение личности') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
@@ -232,6 +234,8 @@ INSERT INTO INSTRUMENT_TYPE_DICTIONARY(ID, CODE, NAME) values (5, 'MFND', 'ПА
INSERT INTO INSTRUMENT_TYPE_DICTIONARY(ID, CODE, NAME) values (6, 'CURR', 'Валютная пара') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
+INSERT INTO INSTRUMENT_TYPE_DICTIONARY(ID, CODE, NAME) values (7, 'DGCT', 'Цифровое свидетельство') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
+
INSERT INTO TERM_TYPE_DICTIONARY(ID, CODE, NAME) values (1, 'S', 'Срочный') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO TERM_TYPE_DICTIONARY(ID, CODE, NAME) values (2, 'K', 'Комбинированный') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
@@ -684,6 +688,12 @@ INSERT INTO PRIORITY_DICTIONARY(ID, CODE, NAME) values (1, 'HIGH', 'Высоки
INSERT INTO PRIORITY_DICTIONARY(ID, CODE, NAME) values (2, 'LOW', 'Низкий') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
+INSERT INTO NOMINAL_TYPE_CODE_DICTIONARY(ID, CODE, NAME) values (1, 'FIXD', 'Фиксированный') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
+
+INSERT INTO NOMINAL_TYPE_CODE_DICTIONARY(ID, CODE, NAME) values (2, 'INDX', 'Индексируемый') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
+
+INSERT INTO UNIT_MEASUREMENT_DICTIONARY(ID, CODE, NAME) values (1, 'KG', 'Килограмм') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
+
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1000, 'SECR', 'Общая ошибка модуля securities-service.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1001, 'SECR', 'Нет прав на проведение данной операции.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
@@ -870,6 +880,8 @@ INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5030, 'ACNT', 'Ком
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5031, 'ACNT', 'Для данной валюты в ТКР уже задан счет.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
+INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5032, 'ACNT', 'В поле %s недопустимый символ %s.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
+
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5200, 'BLNC', 'Общая ошибка модуля balance-service.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5210, 'BLNC', 'Клиринговая сессия неактивна.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
@@ -984,6 +996,8 @@ INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (6003, 'GTWA', 'Пре
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (6004, 'GTWA', 'Получен отрицательный ответ на запрос системы') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
+INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (6005, 'GTWA', 'Не удается найти запись %s в dc') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
+
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7000, 'SCHD', 'Общая ошибка модуля scheduler-service.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7001, 'SCHD', 'Нет прав на проведение данной операции.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
@@ -1014,6 +1028,8 @@ INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7016, 'SCHD', 'Воз
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7017, 'SCHD', 'Возможно добавить задачу только на будущее время.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
+INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7018, 'SCHD', 'В поле %s недопустимый символ %s.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
+
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (8000, 'CNTR', 'Общая ошибка модуля control-service.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (9000, 'BAPI', 'Ошибка проверки поля %s.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
@@ -1036,4 +1052,4 @@ INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (10001, 'TRDI', 'Сде
/* Business objects */
-INSERT INTO DB_VERSION(ID, DICTIONARY_VERSION) values (1, '3.17.0.98') ON CONFLICT (ID) DO UPDATE SET DICTIONARY_VERSION = EXCLUDED.DICTIONARY_VERSION
+INSERT INTO DB_VERSION(ID, DICTIONARY_VERSION) values (1, '3.18.0.99') ON CONFLICT (ID) DO UPDATE SET DICTIONARY_VERSION = EXCLUDED.DICTIONARY_VERSION
diff --git a/clearing-parent/db-scripts/src/main/resources/db/updateDDL_3.18.sql b/clearing-parent/db-scripts/src/main/resources/db/updateDDL_3.18.sql
index e13effac4..964399b30 100644
--- a/clearing-parent/db-scripts/src/main/resources/db/updateDDL_3.18.sql
+++ b/clearing-parent/db-scripts/src/main/resources/db/updateDDL_3.18.sql
@@ -15,4 +15,181 @@ COMMENT ON COLUMN VALIDATION_SYMBOLS.SYMBOLS IS '
COMMENT ON COLUMN VALIDATION_SYMBOLS.COMMENT IS ' ';
GRANT ALL PRIVILEGES ON TABLE VALIDATION_SYMBOLS TO clearing;
+
+-- nominalTypeCode -
+DROP TABLE IF EXISTS NOMINAL_TYPE_CODE_DICTIONARY;
+CREATE TABLE NOMINAL_TYPE_CODE_DICTIONARY(ID bigint PRIMARY KEY, CODE varchar(4), NAME varchar(255));
+COMMENT ON TABLE NOMINAL_TYPE_CODE_DICTIONARY IS ' ';
+
+COMMENT ON COLUMN NOMINAL_TYPE_CODE_DICTIONARY.ID IS ' ';
+
+COMMENT ON COLUMN NOMINAL_TYPE_CODE_DICTIONARY.CODE IS '';
+
+COMMENT ON COLUMN NOMINAL_TYPE_CODE_DICTIONARY.NAME IS '';
+
+GRANT ALL PRIVILEGES ON TABLE NOMINAL_TYPE_CODE_DICTIONARY TO clearing;
+
+-- unitMeasurement -
+DROP TABLE IF EXISTS UNIT_MEASUREMENT_DICTIONARY;
+CREATE TABLE UNIT_MEASUREMENT_DICTIONARY(ID bigint PRIMARY KEY, CODE varchar(4), NAME varchar(255));
+COMMENT ON TABLE UNIT_MEASUREMENT_DICTIONARY IS ' ';
+
+COMMENT ON COLUMN UNIT_MEASUREMENT_DICTIONARY.ID IS ' ';
+
+COMMENT ON COLUMN UNIT_MEASUREMENT_DICTIONARY.CODE IS '';
+
+COMMENT ON COLUMN UNIT_MEASUREMENT_DICTIONARY.NAME IS '';
+
+GRANT ALL PRIVILEGES ON TABLE UNIT_MEASUREMENT_DICTIONARY TO clearing;
+
+
+
+
+-- digitalCertificateSecurity -
+DROP TABLE IF EXISTS DIGITAL_CERTIFICATE_SECURITY;
+CREATE TABLE DIGITAL_CERTIFICATE_SECURITY(ID bigint PRIMARY KEY, SECURITY_ID bigint, BASE_CODE varchar(50), BASE_UNIT_SIZE bigint, PRICE_VARIANCE_LIMIT numeric(72,18), NOMINAL_TYPE_CODE varchar(4), NOMINAL_VALUE numeric(72,18), NOMINAL_INDEXATION_DATE date, NOMINAL_INDEXATION_SIGN varchar(4), SETTLEMENT_HOUSE varchar(255), DEPOSITORY varchar(255));
+COMMENT ON TABLE DIGITAL_CERTIFICATE_SECURITY IS ' ';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.ID IS ' ';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.SECURITY_ID IS ' (linked to security)';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.BASE_CODE IS ' , ';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.BASE_UNIT_SIZE IS ' ';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.PRICE_VARIANCE_LIMIT IS ' ';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.NOMINAL_TYPE_CODE IS ' (linked to nominalTypeCode)';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.NOMINAL_VALUE IS ' ';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.NOMINAL_INDEXATION_DATE IS ' ';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.NOMINAL_INDEXATION_SIGN IS ' (linked to allowed)';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.SETTLEMENT_HOUSE IS ' ';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY.DEPOSITORY IS ' ';
+
+GRANT ALL PRIVILEGES ON TABLE DIGITAL_CERTIFICATE_SECURITY TO clearing;
+
+
+-- History log of digitalCertificateSecurity -
+DROP TABLE IF EXISTS DIGITAL_CERTIFICATE_SECURITY_HISTORY;
+CREATE TABLE DIGITAL_CERTIFICATE_SECURITY_HISTORY(DIGITAL_CERTIFICATE_SECURITY_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), ID bigint PRIMARY KEY, SECURITY_ID bigint, BASE_CODE varchar(50), BASE_UNIT_SIZE bigint, PRICE_VARIANCE_LIMIT numeric(72,18), NOMINAL_TYPE_CODE varchar(4), NOMINAL_VALUE numeric(72,18), NOMINAL_INDEXATION_DATE date, NOMINAL_INDEXATION_SIGN varchar(4), SETTLEMENT_HOUSE varchar(255), DEPOSITORY varchar(255));
+COMMENT ON TABLE DIGITAL_CERTIFICATE_SECURITY_HISTORY IS ' digitalCertificateSecurity';
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.DIGITAL_CERTIFICATE_SECURITY_ID IS ' DIGITAL_CERTIFICATE_SECURITY';
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.EVENT_TIME IS ' ';
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.EVENT_USER_ID IS ' ';
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.EVENT_TYPE IS ' ';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.ID IS ' ';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.SECURITY_ID IS ' (linked to security)';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.BASE_CODE IS ' , ';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.BASE_UNIT_SIZE IS ' ';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.PRICE_VARIANCE_LIMIT IS ' ';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.NOMINAL_TYPE_CODE IS ' (linked to nominalTypeCode)';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.NOMINAL_VALUE IS ' ';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.NOMINAL_INDEXATION_DATE IS ' ';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.NOMINAL_INDEXATION_SIGN IS ' (linked to allowed)';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.SETTLEMENT_HOUSE IS ' ';
+
+COMMENT ON COLUMN DIGITAL_CERTIFICATE_SECURITY_HISTORY.DEPOSITORY IS ' ';
+
+GRANT ALL PRIVILEGES ON TABLE DIGITAL_CERTIFICATE_SECURITY_HISTORY TO clearing;
+
+-- utilitarianDigitalRight -
+DROP TABLE IF EXISTS UTILITARIAN_DIGITAL_RIGHT;
+CREATE TABLE UTILITARIAN_DIGITAL_RIGHT(ID bigint PRIMARY KEY, SECURITY_ID bigint, INVESTMENT_ATTRACTING_COMPANY varchar(255), INVESTMENT_ATTRACTING_INN varchar(255), ISSUE_AMOUNT numeric(72,2), ISSUE_PRICE numeric(72,18), ISSUE_SIZE bigint, NOMINAL_INDEXATION varchar(255), PLATFORM_OPERATOR varchar(255), PLATFORM_OPERATOR_CODE varchar(255), PLATFORM_OPERATOR_INN varchar(255), PLATFORM_OPERATOR_WEB varchar(255), PLATFORM_PROPOSAL_WEB varchar(255), RIGHT_ESSENCE varchar(255), RIGHT_UNIT varchar(255), RIGHT_UNIT_MEASUREMENT varchar(4));
+COMMENT ON TABLE UTILITARIAN_DIGITAL_RIGHT IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.ID IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.SECURITY_ID IS ' (linked to security)';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.INVESTMENT_ATTRACTING_COMPANY IS ' , (linked to company)';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.INVESTMENT_ATTRACTING_INN IS ' , ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.ISSUE_AMOUNT IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.ISSUE_PRICE IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.ISSUE_SIZE IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.NOMINAL_INDEXATION IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.PLATFORM_OPERATOR IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.PLATFORM_OPERATOR_CODE IS ' , ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.PLATFORM_OPERATOR_INN IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.PLATFORM_OPERATOR_WEB IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.PLATFORM_PROPOSAL_WEB IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.RIGHT_ESSENCE IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.RIGHT_UNIT IS ' ()';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT.RIGHT_UNIT_MEASUREMENT IS ' () (linked to unitMeasurement)';
+
+GRANT ALL PRIVILEGES ON TABLE UTILITARIAN_DIGITAL_RIGHT TO clearing;
+
+
+-- History log of utilitarianDigitalRight -
+DROP TABLE IF EXISTS UTILITARIAN_DIGITAL_RIGHT_HISTORY;
+CREATE TABLE UTILITARIAN_DIGITAL_RIGHT_HISTORY(UTILITARIAN_DIGITAL_RIGHT_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), ID bigint PRIMARY KEY, SECURITY_ID bigint, INVESTMENT_ATTRACTING_COMPANY varchar(255), INVESTMENT_ATTRACTING_INN varchar(255), ISSUE_AMOUNT numeric(72,2), ISSUE_PRICE numeric(72,18), ISSUE_SIZE bigint, NOMINAL_INDEXATION varchar(255), PLATFORM_OPERATOR varchar(255), PLATFORM_OPERATOR_CODE varchar(255), PLATFORM_OPERATOR_INN varchar(255), PLATFORM_OPERATOR_WEB varchar(255), PLATFORM_PROPOSAL_WEB varchar(255), RIGHT_ESSENCE varchar(255), RIGHT_UNIT varchar(255), RIGHT_UNIT_MEASUREMENT varchar(4));
+COMMENT ON TABLE UTILITARIAN_DIGITAL_RIGHT_HISTORY IS ' utilitarianDigitalRight';
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.UTILITARIAN_DIGITAL_RIGHT_ID IS ' UTILITARIAN_DIGITAL_RIGHT';
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.EVENT_TIME IS ' ';
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.EVENT_USER_ID IS ' ';
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.EVENT_TYPE IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.ID IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.SECURITY_ID IS ' (linked to security)';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.INVESTMENT_ATTRACTING_COMPANY IS ' , (linked to company)';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.INVESTMENT_ATTRACTING_INN IS ' , ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.ISSUE_AMOUNT IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.ISSUE_PRICE IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.ISSUE_SIZE IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.NOMINAL_INDEXATION IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.PLATFORM_OPERATOR IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.PLATFORM_OPERATOR_CODE IS ' , ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.PLATFORM_OPERATOR_INN IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.PLATFORM_OPERATOR_WEB IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.PLATFORM_PROPOSAL_WEB IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.RIGHT_ESSENCE IS ' ';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.RIGHT_UNIT IS ' ()';
+
+COMMENT ON COLUMN UTILITARIAN_DIGITAL_RIGHT_HISTORY.RIGHT_UNIT_MEASUREMENT IS ' () (linked to unitMeasurement)';
+
+GRANT ALL PRIVILEGES ON TABLE UTILITARIAN_DIGITAL_RIGHT_HISTORY TO clearing;
+
+
INSERT INTO DB_VERSION(ID, VERSION) values (1, '3.18') ON CONFLICT (ID) DO UPDATE SET VERSION = EXCLUDED.VERSION
diff --git a/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/NominalTypeCodeDictionary.java b/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/NominalTypeCodeDictionary.java
new file mode 100644
index 000000000..8f264b76a
--- /dev/null
+++ b/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/NominalTypeCodeDictionary.java
@@ -0,0 +1,11 @@
+package ru.clearing.platform.dictionary;
+
+/**
+ * Справочник типов номинала УЦП
+ *
+ * Dictionary DB table: NOMINAL_TYPE_CODE_DICTIONARY
+ **/
+public class NominalTypeCodeDictionary extends AbstractDictionary {
+ private static final long serialVersionUID = ConstDictionarySerializable.serialVersionUID;
+
+}
diff --git a/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/UnitMeasurementDictionary.java b/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/UnitMeasurementDictionary.java
new file mode 100644
index 000000000..d61a53ac9
--- /dev/null
+++ b/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/UnitMeasurementDictionary.java
@@ -0,0 +1,11 @@
+package ru.clearing.platform.dictionary;
+
+/**
+ * Справочник единиц измерения
+ *
+ * Dictionary DB table: UNIT_MEASUREMENT_DICTIONARY
+ **/
+public class UnitMeasurementDictionary extends AbstractDictionary {
+ private static final long serialVersionUID = ConstDictionarySerializable.serialVersionUID;
+
+}
\ No newline at end of file
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/DigitalCertificateSecurityHistoryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/DigitalCertificateSecurityHistoryMapStore.java
new file mode 100644
index 000000000..7350d3f03
--- /dev/null
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/DigitalCertificateSecurityHistoryMapStore.java
@@ -0,0 +1,68 @@
+package ru.spcex.clearing.imdg.businessevent;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Component;
+import ru.clearing.classes.statics.data.security.DigitalCertificateSecurity;
+import ru.clearing.classes.statics.data.security.DigitalCertificateSecurityHistory;
+import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.platform.utils.time.TimeUtil;
+
+@Component
+public class DigitalCertificateSecurityHistoryMapStore extends ASecurityHistoryMapStore {
+
+ public DigitalCertificateSecurityHistoryMapStore(JdbcTemplate jdbcTemplate) {
+ super(jdbcTemplate);
+ }
+
+ @Override
+ public String getMapName() {
+ return IMDGDistributedNames.Map_DigitalCertificateSecurityHistory;
+ }
+
+ @Override
+ public String getTableName() {
+ return "DIGITAL_CERTIFICATE_SECURITY_HISTORY";
+ }
+
+ @Override
+ public String[] getFields() {
+ return new String[]{"ID", "EVENT_TIME", "EVENT_USER_ID", "EVENT_TYPE",
+ "DIGITAL_CERTIFICATE_SECURITY_ID", "SECURITY_ID", "BASE_CODE", "BASE_UNIT_SIZE", "PRICE_VARIANCE_LIMIT", "NOMINAL_TYPE_CODE", "NOMINAL_VALUE", "NOMINAL_INDEXATION_DATE", "NOMINAL_INDEXATION_SIGN", "SETTLEMENT_HOUSE", "DEPOSITORY"
+ };
+ }
+
+ @Override
+ public Object[] objectToField(DigitalCertificateSecurityHistory historyLog) {
+ DigitalCertificateSecurity object = historyLog.getObject();
+ Object[] args = new Object[]{
+ historyLog.getId(),
+ TimeUtil.toDateFromInstant(historyLog.getEventTime()),
+ historyLog.getUserId(),
+ historyLog.getEventType(),
+
+ object.getId(),
+ object.getSecurityId(),
+//ext: object.getShortName()
+//ext: object.getSecuritySymbol()
+//ext: object.getFullName()
+//ext: object.getIsin()
+//ext: object.getInstrumentType()
+//ext: object.getIssuerId()
+//ext: object.getShortNameEng()
+//ext: object.getFullNameEng()
+//ext: object.getWorkflowStatus(),
+ object.getBaseCode(),
+//ext: object.getLotSize(),
+ object.getBaseUnitSize(),
+ object.getPriceVarianceLimit(),
+ object.getNominalTypeCode(),
+ object.getNominalValue(),
+ TimeUtil.toDateFromLocalDate(object.getNominalIndexationDate()),
+ object.getNominalIndexationSign(),
+ object.getSettlementHouse(),
+ object.getDepository()
+ };
+ return args;
+ }
+
+}
\ No newline at end of file
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/UtilitarianDigitalRightHistoryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/UtilitarianDigitalRightHistoryMapStore.java
new file mode 100644
index 000000000..6f2fa5372
--- /dev/null
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/UtilitarianDigitalRightHistoryMapStore.java
@@ -0,0 +1,64 @@
+package ru.spcex.clearing.imdg.businessevent;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Component;
+import ru.clearing.classes.statics.data.security.UtilitarianDigitalRight;
+import ru.clearing.classes.statics.data.security.UtilitarianDigitalRightHistory;
+import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.clearing.imdg.base.TemplateEventMapStore;
+import ru.spcex.platform.utils.time.TimeUtil;
+
+@Component
+public class UtilitarianDigitalRightHistoryMapStore extends TemplateEventMapStore {
+
+ public UtilitarianDigitalRightHistoryMapStore(JdbcTemplate jdbcTemplate) {
+ super(jdbcTemplate);
+ }
+
+ @Override
+ public String getMapName() {
+ return IMDGDistributedNames.Map_UtilitarianDigitalRightHistory;
+ }
+
+ @Override
+ public String getTableName() {
+ return "UTILITARIAN_DIGITAL_RIGHT_HISTORY";
+ }
+
+ @Override
+ public String[] getFields() {
+ return new String[]{"ID", "EVENT_TIME", "EVENT_USER_ID", "EVENT_TYPE",
+ "UTILITARIAN_DIGITAL_RIGHT_ID", "SECURITY_ID", "INVESTMENT_ATTRACTING_COMPANY", "INVESTMENT_ATTRACTING_INN", "ISSUE_AMOUNT", "ISSUE_PRICE", "ISSUE_SIZE", "NOMINAL_INDEXATION", "PLATFORM_OPERATOR", "PLATFORM_OPERATOR_CODE", "PLATFORM_OPERATOR_INN", "PLATFORM_OPERATOR_WEB", "PLATFORM_PROPOSAL_WEB", "RIGHT_ESSENCE", "RIGHT_UNIT", "RIGHT_UNIT_MEASUREMENT"
+ };
+ }
+
+ @Override
+ public Object[] objectToField(UtilitarianDigitalRightHistory historyLog) {
+ UtilitarianDigitalRight object = historyLog.getObject();
+ Object[] args = new Object[]{
+ historyLog.getId(),
+ TimeUtil.toDateFromInstant(historyLog.getEventTime()),
+ historyLog.getUserId(),
+ historyLog.getEventType(),
+
+ object.getId(),
+ object.getSecurityId(),
+ object.getInvestmentAttractingCompany(),
+ object.getInvestmentAttractingInn(),
+ object.getIssueAmount(),
+ object.getIssuePrice(),
+ object.getIssueSize(),
+ object.getNominalIndexation(),
+ object.getPlatformOperator(),
+ object.getPlatformOperatorCode(),
+ object.getPlatformOperatorInn(),
+ object.getPlatformOperatorWeb(),
+ object.getPlatformProposalWeb(),
+ object.getRightEssence(),
+ object.getRightUnit(),
+ object.getRightUnitMeasurement()
+ };
+ return args;
+ }
+
+}
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/dictionary/NominalTypeCodeDictionaryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/dictionary/NominalTypeCodeDictionaryMapStore.java
new file mode 100644
index 000000000..764697f74
--- /dev/null
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/dictionary/NominalTypeCodeDictionaryMapStore.java
@@ -0,0 +1,30 @@
+package ru.spcex.clearing.imdg.dictionary;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Component;
+import ru.clearing.platform.dictionary.NominalTypeCodeDictionary;
+import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.clearing.imdg.base.DictionaryTMapStore;
+
+@Component
+public class NominalTypeCodeDictionaryMapStore extends DictionaryTMapStore {
+
+ public NominalTypeCodeDictionaryMapStore(JdbcTemplate jdbcTemplate) {
+ super(jdbcTemplate);
+ }
+
+ @Override
+ public String getMapName() {
+ return IMDGDistributedNames.Map_NominalTypeCodeDictionary;
+ }
+
+ @Override
+ public String getTableName() {
+ return "NOMINAL_TYPE_CODE_DICTIONARY";
+ }
+
+ @Override
+ public NominalTypeCodeDictionary getDictionaryObject() {
+ return new NominalTypeCodeDictionary();
+ }
+}
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/dictionary/UnitMeasurementDictionaryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/dictionary/UnitMeasurementDictionaryMapStore.java
new file mode 100644
index 000000000..807ffc929
--- /dev/null
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/dictionary/UnitMeasurementDictionaryMapStore.java
@@ -0,0 +1,30 @@
+package ru.spcex.clearing.imdg.dictionary;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Component;
+import ru.clearing.platform.dictionary.UnitMeasurementDictionary;
+import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.clearing.imdg.base.DictionaryTMapStore;
+
+@Component
+public class UnitMeasurementDictionaryMapStore extends DictionaryTMapStore {
+
+ public UnitMeasurementDictionaryMapStore(JdbcTemplate jdbcTemplate) {
+ super(jdbcTemplate);
+ }
+
+ @Override
+ public String getMapName() {
+ return IMDGDistributedNames.Map_UnitMeasurementDictionary;
+ }
+
+ @Override
+ public String getTableName() {
+ return "UNIT_MEASUREMENT_DICTIONARY";
+ }
+
+ @Override
+ public UnitMeasurementDictionary getDictionaryObject() {
+ return new UnitMeasurementDictionary();
+ }
+}
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/DigitalCertificateSecurityMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/DigitalCertificateSecurityMapStore.java
new file mode 100644
index 000000000..089ffde0a
--- /dev/null
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/DigitalCertificateSecurityMapStore.java
@@ -0,0 +1,95 @@
+package ru.spcex.clearing.imdg.object;
+
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Component;
+import ru.clearing.classes.statics.data.security.DigitalCertificateSecurity;
+import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.clearing.imdg.businessobject.ASecurityMapStore;
+import ru.spcex.platform.utils.time.TimeUtil;
+
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+@Component
+public class DigitalCertificateSecurityMapStore extends ASecurityMapStore {
+
+ public DigitalCertificateSecurityMapStore(JdbcTemplate jdbcTemplate) {
+ super(jdbcTemplate);
+ }
+
+ @Override
+ public String getMapName() {
+ return IMDGDistributedNames.Map_DigitalCertificateSecurity;
+ }
+
+ @Override
+ public String getTableName() {
+ return "DIGITAL_CERTIFICATE_SECURITY";
+ }
+
+ @Override
+ public String[] getFields() {
+ return new String[]{
+ "ID", "SECURITY_ID", "BASE_CODE", "BASE_UNIT_SIZE", "PRICE_VARIANCE_LIMIT", "NOMINAL_TYPE_CODE", "NOMINAL_VALUE", "NOMINAL_INDEXATION_DATE", "NOMINAL_INDEXATION_SIGN", "SETTLEMENT_HOUSE", "DEPOSITORY"
+ };
+ }
+
+ @Override
+ public DigitalCertificateSecurity objectReader(ResultSet resultSet) throws SQLException {
+ DigitalCertificateSecurity object = new DigitalCertificateSecurity();
+ object.setId(resultSet.getObject("ID", Long.class));
+ object.setSecurityId(resultSet.getObject("SECURITY_ID", Long.class));
+//ext: object.setShortName(resultSet.getObject("SHORT_NAME", String.class));
+//ext: object.setSecuritySymbol(resultSet.getObject("SECURITY_SYMBOL", String.class));
+//ext: object.setFullName(resultSet.getObject("FULL_NAME", String.class));
+//ext: object.setIsin(resultSet.getObject("ISIN", String.class));
+//ext: object.setInstrumentType(resultSet.getObject("INSTRUMENT_TYPE", String.class));
+//ext: object.setIssuerId(resultSet.getObject("ISSUER_ID", Long.class));
+//ext: object.setShortNameEng(resultSet.getObject("SHORT_NAME_ENG", String.class));
+//ext: object.setFullNameEng(resultSet.getObject("FULL_NAME_ENG", String.class));
+//ext: object.setWorkflowStatus(resultSet.getObject("WORKFLOW_STATUS", String.class));
+ object.setBaseCode(resultSet.getObject("BASE_CODE", String.class));
+//ext: object.setLotSize(resultSet.getObject("LOT_SIZE", BigDecimal.class));
+ object.setBaseUnitSize(resultSet.getObject("BASE_UNIT_SIZE", Long.class));
+ object.setPriceVarianceLimit(resultSet.getObject("PRICE_VARIANCE_LIMIT", BigDecimal.class));
+ object.setNominalTypeCode(resultSet.getObject("NOMINAL_TYPE_CODE", String.class));
+ object.setNominalValue(resultSet.getObject("NOMINAL_VALUE", BigDecimal.class));
+ object.setNominalIndexationDate(getLocalDateFromSqlDate(resultSet, "NOMINAL_INDEXATION_DATE"));
+ object.setNominalIndexationSign(resultSet.getObject("NOMINAL_INDEXATION_SIGN", String.class));
+ object.setSettlementHouse(resultSet.getObject("SETTLEMENT_HOUSE", String.class));
+ object.setDepository(resultSet.getObject("DEPOSITORY", String.class));
+ return object;
+ }
+
+ @Override
+ public Object[] objectToField(DigitalCertificateSecurity object) {
+ Object[] args = new Object[]{
+ object.getId(),
+ object.getSecurityId(),
+//ext: object.getShortName()
+//ext: object.getSecuritySymbol()
+//ext: object.getFullName()
+//ext: object.getIsin()
+//ext: object.getInstrumentType()
+//ext: object.getIssuerId()
+//ext: object.getShortNameEng()
+//ext: object.getFullNameEng()
+//ext: object.getWorkflowStatus(),
+ object.getBaseCode(),
+//ext: object.getLotSize(),
+ object.getBaseUnitSize(),
+ object.getPriceVarianceLimit(),
+ object.getNominalTypeCode(),
+ object.getNominalValue(),
+ TimeUtil.toDateFromLocalDate(object.getNominalIndexationDate()),
+ object.getNominalIndexationSign(),
+ object.getSettlementHouse(),
+ object.getDepository()
+ };
+ return args;
+ }
+
+
+}
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/UtilitarianDigitalRightMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/UtilitarianDigitalRightMapStore.java
new file mode 100644
index 000000000..356c50f9b
--- /dev/null
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/UtilitarianDigitalRightMapStore.java
@@ -0,0 +1,82 @@
+package ru.spcex.clearing.imdg.object;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Component;
+import ru.clearing.classes.statics.data.security.UtilitarianDigitalRight;
+import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.clearing.imdg.base.TemplateMapStore;
+
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+@Component
+public class UtilitarianDigitalRightMapStore extends TemplateMapStore {
+
+ public UtilitarianDigitalRightMapStore(JdbcTemplate jdbcTemplate) {
+ super(jdbcTemplate);
+ }
+
+ @Override
+ public String getMapName() {
+ return IMDGDistributedNames.Map_UtilitarianDigitalRight;
+ }
+
+ @Override
+ public String getTableName() {
+ return "UTILITARIAN_DIGITAL_RIGHT";
+ }
+
+ @Override
+ public String[] getFields() {
+ return new String[]{
+ "ID", "SECURITY_ID", "INVESTMENT_ATTRACTING_COMPANY", "INVESTMENT_ATTRACTING_INN", "ISSUE_AMOUNT", "ISSUE_PRICE", "ISSUE_SIZE", "NOMINAL_INDEXATION", "PLATFORM_OPERATOR", "PLATFORM_OPERATOR_CODE", "PLATFORM_OPERATOR_INN", "PLATFORM_OPERATOR_WEB", "PLATFORM_PROPOSAL_WEB", "RIGHT_ESSENCE", "RIGHT_UNIT", "RIGHT_UNIT_MEASUREMENT"
+ };
+ }
+
+ @Override
+ public UtilitarianDigitalRight objectReader(ResultSet resultSet) throws SQLException {
+ UtilitarianDigitalRight object = new UtilitarianDigitalRight();
+ object.setId(resultSet.getObject("ID", Long.class));
+ object.setSecurityId(resultSet.getObject("SECURITY_ID", Long.class));
+ object.setInvestmentAttractingCompany(resultSet.getObject("INVESTMENT_ATTRACTING_COMPANY", String.class));
+ object.setInvestmentAttractingInn(resultSet.getObject("INVESTMENT_ATTRACTING_INN", String.class));
+ object.setIssueAmount(resultSet.getObject("ISSUE_AMOUNT", BigDecimal.class));
+ object.setIssuePrice(resultSet.getObject("ISSUE_PRICE", BigDecimal.class));
+ object.setIssueSize(resultSet.getObject("ISSUE_SIZE", Long.class));
+ object.setNominalIndexation(resultSet.getObject("NOMINAL_INDEXATION", String.class));
+ object.setPlatformOperator(resultSet.getObject("PLATFORM_OPERATOR", String.class));
+ object.setPlatformOperatorCode(resultSet.getObject("PLATFORM_OPERATOR_CODE", String.class));
+ object.setPlatformOperatorInn(resultSet.getObject("PLATFORM_OPERATOR_INN", String.class));
+ object.setPlatformOperatorWeb(resultSet.getObject("PLATFORM_OPERATOR_WEB", String.class));
+ object.setPlatformProposalWeb(resultSet.getObject("PLATFORM_PROPOSAL_WEB", String.class));
+ object.setRightEssence(resultSet.getObject("RIGHT_ESSENCE", String.class));
+ object.setRightUnit(resultSet.getObject("RIGHT_UNIT", String.class));
+ object.setRightUnitMeasurement(resultSet.getObject("RIGHT_UNIT_MEASUREMENT", String.class));
+ return object;
+ }
+
+ @Override
+ public Object[] objectToField(UtilitarianDigitalRight object) {
+ Object[] args = new Object[]{
+ object.getId(),
+ object.getSecurityId(),
+ object.getInvestmentAttractingCompany(),
+ object.getInvestmentAttractingInn(),
+ object.getIssueAmount(),
+ object.getIssuePrice(),
+ object.getIssueSize(),
+ object.getNominalIndexation(),
+ object.getPlatformOperator(),
+ object.getPlatformOperatorCode(),
+ object.getPlatformOperatorInn(),
+ object.getPlatformOperatorWeb(),
+ object.getPlatformProposalWeb(),
+ object.getRightEssence(),
+ object.getRightUnit(),
+ object.getRightUnitMeasurement()
+ };
+ return args;
+ }
+
+}
\ No newline at end of file
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/UpdateMapService.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/UpdateMapService.java
index 2566cf8f9..5703e6155 100644
--- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/UpdateMapService.java
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/UpdateMapService.java
@@ -235,6 +235,16 @@ public class UpdateMapService extends AbstractUpdateMapService {
createBusinessEvent(tradingClearingRegistryListHistory, eventType);
tradingClearingRegistryListHistory.setObject((TradingClearingRegistryList) value);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_TradingClearingRegistryListHistory).put(tradingClearingRegistryListHistory.getId(), tradingClearingRegistryListHistory);
+ } else if (value instanceof DigitalCertificateSecurity) {
+ DigitalCertificateSecurityHistory digitalCertificateSecurityHistory = new DigitalCertificateSecurityHistory();
+ createBusinessEvent(digitalCertificateSecurityHistory, eventType);
+ digitalCertificateSecurityHistory.setObject((DigitalCertificateSecurity) value);
+ hazelcastServerInstance.getMap(IMDGDistributedNames.Map_TradingClearingRegistryListHistory).put(digitalCertificateSecurityHistory.getId(), digitalCertificateSecurityHistory);
+ } else if (value instanceof UtilitarianDigitalRight) {
+ UtilitarianDigitalRightHistory utilitarianDigitalRightHistory = new UtilitarianDigitalRightHistory();
+ createBusinessEvent(utilitarianDigitalRightHistory, eventType);
+ utilitarianDigitalRightHistory.setObject((UtilitarianDigitalRight) value);
+ hazelcastServerInstance.getMap(IMDGDistributedNames.Map_TradingClearingRegistryListHistory).put(utilitarianDigitalRightHistory.getId(), utilitarianDigitalRightHistory);
} else if (value instanceof Security) { // Существуют наследники этой таблицы, по этому в последнюю очередь делать эту проверку.
diff --git a/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/structure/RunnableMapNamesForTesting.java b/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/structure/RunnableMapNamesForTesting.java
index 72f2eaff3..b6a018f39 100644
--- a/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/structure/RunnableMapNamesForTesting.java
+++ b/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/structure/RunnableMapNamesForTesting.java
@@ -22,10 +22,7 @@ import ru.clearing.classes.statics.data.registry.TradingClearingRegistryList;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistryListHistory;
import ru.clearing.classes.statics.data.scheduler.*;
import ru.clearing.classes.statics.data.sdf.*;
-import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
-import ru.clearing.classes.statics.data.security.CurrencyPairSecurityHistory;
-import ru.clearing.classes.statics.data.security.MoneyMarketSecurity;
-import ru.clearing.classes.statics.data.security.MoneyMarketSecurityHistory;
+import ru.clearing.classes.statics.data.security.*;
import ru.clearing.classes.statics.data.statement.Statement;
import ru.clearing.classes.statics.data.user.*;
import ru.clearing.platform.dictionary.*;
@@ -148,6 +145,19 @@ public class RunnableMapNamesForTesting {
"object.shortName", "object.shortNameEng",
"object.uuid", "object.workflowStatus"
)));
+ checkerBusinessMapStores.add(new CheckerBusinessMapStore<>(IMDGDistributedNames.Map_DigitalCertificateSecurityHistory, DigitalCertificateSecurityHistory.class,
+ usingIgnoringFieldsComparator( // todo поправить тест для ASecurityHistoryMapStore
+ "object.created", "object.updated",
+ "object.fullName", "object.fullNameEng",
+ "object.instrumentType",
+ "object.isin", "object.issuerId",
+ "object.lotSize",
+ "object.securitySymbol",
+ "object.shortName", "object.shortNameEng",
+ "object.uuid", "object.workflowStatus"
+ )));
+ checkerBusinessMapStores.add(new CheckerBusinessMapStore<>(IMDGDistributedNames.Map_UtilitarianDigitalRightHistory, UtilitarianDigitalRightHistory.class));
+
checkerBusinessMapStores.add(new CheckerBusinessMapStore<>(IMDGDistributedNames.Map_FixedIncomeCashFlowHistory, FixedIncomeCashFlowHistory.class,
usingIgnoringFieldsComparator("object.accruedCoupon")
/* new SettingOperation("getObject.setAccruedCoupon", new Object[]{new BigDecimal("870.680000000000000000")})*/));
@@ -288,6 +298,8 @@ public class RunnableMapNamesForTesting {
checkerDictionaryMapStores.add(new CheckerDictionaryMapStore<>(IMDGDistributedNames.Map_BalanceDimensionDictionary, BalanceDimensionDictionary.class));
checkerDictionaryMapStores.add(new CheckerDictionaryMapStore<>(IMDGDistributedNames.Map_DepoAccountTypeDictionary, DepoAccountTypeDictionary.class));
checkerDictionaryMapStores.add(new CheckerDictionaryMapStore<>(IMDGDistributedNames.Map_ClearingAccountTypeDictionary, ClearingAccountTypeDictionary.class));
+ checkerDictionaryMapStores.add(new CheckerDictionaryMapStore<>(IMDGDistributedNames.Map_NominalTypeCodeDictionary, NominalTypeCodeDictionary.class));
+ checkerDictionaryMapStores.add(new CheckerDictionaryMapStore<>(IMDGDistributedNames.Map_UnitMeasurementDictionary, UnitMeasurementDictionary.class));
//object
checkerBusinessMapStores.add(new CheckerBusinessMapStore<>(IMDGDistributedNames.Map_BankAccount, BankAccount.class));
@@ -442,6 +454,8 @@ public class RunnableMapNamesForTesting {
new SettingOperation("setOp_type", new Object[]{"OT"})
));
checkerBusinessMapStores.add(new CheckerBusinessMapStore<>(IMDGDistributedNames.Map_ValidationSymbols, ValidationSymbols.class));
+ checkerBusinessMapStores.add(new CheckerBusinessMapStore<>(IMDGDistributedNames.Map_DigitalCertificateSecurity, DigitalCertificateSecurity.class));
+ checkerBusinessMapStores.add(new CheckerBusinessMapStore<>(IMDGDistributedNames.Map_UtilitarianDigitalRight, UtilitarianDigitalRight.class));
}
}
diff --git a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java
index 932244664..23d82a81c 100644
--- a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java
+++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java
@@ -187,6 +187,13 @@ public final class IMDGDistributedNames {
public static final String Map_TradingClearingRegistry = "Map_TradingClearingRegistry";
public static final String Map_TradingClearingRegistryHistory = "Map_TradingClearingRegistryHistory";
public static final String Map_Registry = "Map_Registry";
+ public static final String Map_NominalTypeCodeDictionary = "Map_NominalTypeCodeDictionary";
+ public static final String Map_UnitMeasurementDictionary = "Map_UnitMeasurementDictionary";
+ public static final String Map_DigitalCertificateSecurity = "Map_DigitalCertificateSecurity";
+ public static final String Map_DigitalCertificateSecurityHistory = "Map_DigitalCertificateSecurityHistory";
+ public static final String Map_UtilitarianDigitalRight = "Map_UtilitarianDigitalRight";
+ public static final String Map_UtilitarianDigitalRightHistory = "Map_UtilitarianDigitalRightHistory";
+
//----------------SPECIFIC REGISTRY MAP STORES BY STATUS AND DESIGNATION---------------
public static final String Map_OkObligationRegistry = "Map_OkObligationRegistry";
public static final String Map_ProcObligationRegistry = "Map_ProcObligationRegistry";