diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/Account.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/Account.java
new file mode 100644
index 000000000..bc20ffbbe
--- /dev/null
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/Account.java
@@ -0,0 +1,51 @@
+package ru.clearing.classes.StaticData.Account;
+
+import ru.clearing.classes.ConstSerializable;
+import ru.clearing.classes.objects.BusinessObject;
+
+/**
+ * Счета
+ *
+ * DB table: ACCOUNT
+ **/
+public class Account extends BusinessObject {
+ private static final long serialVersionUID = ConstSerializable.serialVersionUID;
+
+ private String account;
+ private String accountType;
+ private Long relationId;
+ private String status;
+
+ public String getAccount() {
+ return account;
+ }
+
+ public void setAccount(String value) {
+ this.account = value;
+ }
+
+ public String getAccountType() {
+ return accountType;
+ }
+
+ public void setAccountType(String value) {
+ this.accountType = value;
+ }
+
+ public Long getRelationId() {
+ return relationId;
+ }
+
+ public void setRelationId(Long value) {
+ this.relationId = value;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String value) {
+ this.status = value;
+ }
+
+}
\ No newline at end of file
diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/AccountRouting.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/AccountRouting.java
new file mode 100644
index 000000000..bfd8bdd20
--- /dev/null
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/AccountRouting.java
@@ -0,0 +1,45 @@
+package ru.clearing.classes.StaticData.Account;
+
+import ru.clearing.classes.ConstSerializable;
+import ru.spcex.platform.classes.base.SpcexObjectBase;
+
+import java.io.Serial;
+
+/**
+ * Маршрутизация счета
+ *
+ * DB table: ACCOUNT_ROUTING
+ **/
+public class AccountRouting extends SpcexObjectBase {
+ @Serial
+ private static final long serialVersionUID = ConstSerializable.serialVersionUID;
+
+ private Long destinationId;
+ private Long relationId;
+ private Long sourceId;
+
+ public Long getDestinationId() {
+ return destinationId;
+ }
+
+ public void setDestinationId(Long value) {
+ this.destinationId = value;
+ }
+
+ public Long getRelationId() {
+ return relationId;
+ }
+
+ public void setRelationId(Long value) {
+ this.relationId = value;
+ }
+
+ public Long getSourceId() {
+ return sourceId;
+ }
+
+ public void setSourceId(Long value) {
+ this.sourceId = value;
+ }
+
+}
\ No newline at end of file
diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/BankAccount.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/BankAccount.java
new file mode 100644
index 000000000..ed83035b1
--- /dev/null
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/BankAccount.java
@@ -0,0 +1,123 @@
+package ru.clearing.classes.StaticData.Account;
+
+import ru.clearing.classes.ConstSerializable;
+import ru.spcex.platform.classes.base.SpcexObjectBase;
+
+/**
+ * Банковские счета
+ *
+ * DB table: BANK_ACCOUNT
+ **/
+public class BankAccount extends SpcexObjectBase {
+ private static final long serialVersionUID = ConstSerializable.serialVersionUID;
+
+ private Long accountId;
+ private String bankIdentificationCode;
+ private String bankName;
+ private String correspondentAccountName;
+ private String currency;
+ private String destination;
+ private String iban;
+ private String internationalTransferSign;
+ private String swiftCode;
+ private String taxpayerIdentificationNumber;
+ private String taxRegistrationReasonCode;
+ private String correspondentAccount;
+
+ public Long getAccountId() {
+ return accountId;
+ }
+
+ public void setAccountId(Long value) {
+ this.accountId = value;
+ }
+
+ public String getBankIdentificationCode() {
+ return bankIdentificationCode;
+ }
+
+ public void setBankIdentificationCode(String value) {
+ this.bankIdentificationCode = value;
+ }
+
+ public String getBankName() {
+ return bankName;
+ }
+
+ public void setBankName(String value) {
+ this.bankName = value;
+ }
+
+ public String getCorrespondentAccountName() {
+ return correspondentAccountName;
+ }
+
+ public void setCorrespondentAccountName(String value) {
+ this.correspondentAccountName = value;
+ }
+
+ public String getCurrency() {
+ return currency;
+ }
+
+ public void setCurrency(String value) {
+ this.currency = value;
+ }
+
+ public String getDestination() {
+ return destination;
+ }
+
+ public void setDestination(String value) {
+ this.destination = value;
+ }
+
+ public String getIban() {
+ return iban;
+ }
+
+ public void setIban(String value) {
+ this.iban = value;
+ }
+
+ public String getInternationalTransferSign() {
+ return internationalTransferSign;
+ }
+
+ public void setInternationalTransferSign(String value) {
+ this.internationalTransferSign = value;
+ }
+
+ public String getSwiftCode() {
+ return swiftCode;
+ }
+
+ public void setSwiftCode(String value) {
+ this.swiftCode = value;
+ }
+
+ public String getTaxpayerIdentificationNumber() {
+ return taxpayerIdentificationNumber;
+ }
+
+ public void setTaxpayerIdentificationNumber(String value) {
+ this.taxpayerIdentificationNumber = value;
+ }
+
+ public String getTaxRegistrationReasonCode() {
+ return taxRegistrationReasonCode;
+ }
+
+ public void setTaxRegistrationReasonCode(String value) {
+ this.taxRegistrationReasonCode = value;
+ }
+
+ public String getCorrespondentAccount() {
+ return correspondentAccount;
+ }
+
+ public void setCorrespondentAccount(String value) {
+ this.correspondentAccount = value;
+ }
+
+}
\ No newline at end of file
diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/ClearingAccount.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/ClearingAccount.java
new file mode 100644
index 000000000..2422fbbb0
--- /dev/null
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/ClearingAccount.java
@@ -0,0 +1,51 @@
+package ru.clearing.classes.StaticData.Account;
+
+import ru.clearing.classes.ConstSerializable;
+import ru.spcex.platform.classes.base.SpcexObjectBase;
+
+/**
+ * Клиринговые счета
+ *
+ * DB table: CLEARING_ACCOUNT
+ **/
+public class ClearingAccount extends SpcexObjectBase {
+ private static final long serialVersionUID = ConstSerializable.serialVersionUID;
+
+ private Long accountId;
+ private Long cashAccountId;
+ private Long depoAccountId;
+ private String settlementCode;
+
+ public Long getAccountId() {
+ return accountId;
+ }
+
+ public void setAccountId(Long value) {
+ this.accountId = value;
+ }
+
+ public Long getCashAccountId() {
+ return cashAccountId;
+ }
+
+ public void setCashAccountId(Long value) {
+ this.cashAccountId = value;
+ }
+
+ public Long getDepoAccountId() {
+ return depoAccountId;
+ }
+
+ public void setDepoAccountId(Long value) {
+ this.depoAccountId = value;
+ }
+
+ public String getSettlementCode() {
+ return settlementCode;
+ }
+
+ public void setSettlementCode(String value) {
+ this.settlementCode = value;
+ }
+
+}
\ No newline at end of file
diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/Relation/Relation.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/Relation/Relation.java
new file mode 100644
index 000000000..b74bb58a8
--- /dev/null
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/Relation/Relation.java
@@ -0,0 +1,70 @@
+package ru.clearing.classes.StaticData.Company.Relation;
+
+import ru.clearing.classes.ConstSerializable;
+import ru.clearing.classes.objects.BusinessObject;
+import ru.spcex.platform.classes.base.SpcexObjectBase;
+
+/**
+ * Договорные отношения
+ *
+ * DB table: RELATION
+ **/
+public class Relation extends BusinessObject {
+ private static final long serialVersionUID = ConstSerializable.serialVersionUID;
+
+ private Long consumerId;
+ private Long supplierId;
+ private String serviceStatus;
+ private Long serviceId;
+ private Long serviceProductId;
+ private String comment;
+
+ public Long getConsumerId() {
+ return consumerId;
+ }
+
+ public void setConsumerId(Long value) {
+ this.consumerId = value;
+ }
+
+ public Long getSupplierId() {
+ return supplierId;
+ }
+
+ public void setSupplierId(Long value) {
+ this.supplierId = value;
+ }
+
+ public String getServiceStatus() {
+ return serviceStatus;
+ }
+
+ public void setServiceStatus(String value) {
+ this.serviceStatus = value;
+ }
+
+ public Long getServiceId() {
+ return serviceId;
+ }
+
+ public void setServiceId(Long value) {
+ this.serviceId = value;
+ }
+
+ public Long getServiceProductId() {
+ return serviceProductId;
+ }
+
+ public void setServiceProductId(Long value) {
+ this.serviceProductId = value;
+ }
+
+ public String getComment() {
+ return comment;
+ }
+
+ public void setComment(String value) {
+ this.comment = value;
+ }
+
+}
\ No newline at end of file
diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/generated/ClearingMemberCategory.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/generated/ClearingMemberCategory.java
new file mode 100644
index 000000000..720c73cfa
--- /dev/null
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/generated/ClearingMemberCategory.java
@@ -0,0 +1,33 @@
+package ru.clearing.classes.StaticData.generated;
+
+import ru.clearing.classes.ConstSerializable;
+import ru.spcex.platform.classes.base.SpcexObjectBase;
+
+/**
+ * Категории участника клиринга
+ *
+ * DB table: CLEARING_MEMBER_CATEGORY
+ **/
+public class ClearingMemberCategory extends SpcexObjectBase {
+ private static final long serialVersionUID = ConstSerializable.serialVersionUID;
+
+ private Long companyId;
+ private String clearingMemberCategory;
+
+ public Long getCompanyId() {
+ return companyId;
+ }
+
+ public void setCompanyId(Long value) {
+ this.companyId = value;
+ }
+
+ public String getClearingMemberCategory() {
+ return clearingMemberCategory;
+ }
+
+ public void setClearingMemberCategory(String value) {
+ this.clearingMemberCategory = value;
+ }
+
+}
\ No newline at end of file
diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/Company.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/Company.java
similarity index 92%
rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/Company.java
rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/Company.java
index 56ba80c6a..0acf9f092 100644
--- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/Company.java
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/Company.java
@@ -1,7 +1,7 @@
-package ru.clearing.classes.StaticData.Company;
+package ru.clearing.classes.statics.data.company;
import ru.clearing.classes.ConstSerializable;
-import ru.clearing.classes.StaticData.Profile.CompanyInfo;
+import ru.clearing.classes.statics.data.profile.CompanyInfo;
import ru.clearing.classes.objects.BusinessObject;
import java.io.Serial;
diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyRoleSet.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/CompanyRoleSet.java
similarity index 92%
rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyRoleSet.java
rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/CompanyRoleSet.java
index b2e5d0472..52dff6067 100644
--- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyRoleSet.java
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/CompanyRoleSet.java
@@ -1,4 +1,4 @@
-package ru.clearing.classes.StaticData.Company;
+package ru.clearing.classes.statics.data.company;
import ru.clearing.classes.ConstSerializable;
import ru.spcex.platform.classes.base.SpcexObjectBase;
diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanySymbols.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/CompanySymbols.java
similarity index 94%
rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanySymbols.java
rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/CompanySymbols.java
index 43563f3a9..4ae40a8d0 100644
--- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanySymbols.java
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/CompanySymbols.java
@@ -1,4 +1,4 @@
-package ru.clearing.classes.StaticData.Company;
+package ru.clearing.classes.statics.data.company;
import ru.clearing.classes.ConstSerializable;
import ru.spcex.platform.classes.base.SpcexObjectBase;
diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyUpdate.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/CompanyUpdate.java
similarity index 91%
rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyUpdate.java
rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/CompanyUpdate.java
index f022c7796..354b2feb6 100644
--- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyUpdate.java
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/CompanyUpdate.java
@@ -1,4 +1,4 @@
-package ru.clearing.classes.StaticData.Company;
+package ru.clearing.classes.statics.data.company;
import ru.clearing.classes.ConstSerializable;
import ru.clearing.classes.objects.BusinessEvent;
diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Misc/KeyRate.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/KeyRate.java
similarity index 81%
rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Misc/KeyRate.java
rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/KeyRate.java
index fa0891ef5..d107be73e 100644
--- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Misc/KeyRate.java
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/KeyRate.java
@@ -1,59 +1,58 @@
-package ru.clearing.classes.StaticData.Misc;
-
-import ru.spcex.platform.classes.base.SpcexObjectBase;
-
-import java.math.BigDecimal;
-import java.time.Instant;
-
-/**
- * Ключевая ставка ЦБ
- *
- * DB table: KEY_RATE
- **/
-public class KeyRate extends SpcexObjectBase {
- private BigDecimal rate;
- private Instant startDate;
- private Instant endDate;
- private String document;
- private String workflowStatus;
-
- public BigDecimal getRate() {
- return rate;
- }
-
- public void setRate(BigDecimal rate) {
- this.rate = rate;
- }
-
- public Instant getStartDate() {
- return startDate;
- }
-
- public void setStartDate(Instant startDate) {
- this.startDate = startDate;
- }
-
- public Instant getEndDate() {
- return endDate;
- }
-
- public void setEndDate(Instant endDate) {
- this.endDate = endDate;
- }
-
- public String getDocument() {
- return document;
- }
-
- public void setDocument(String document) {
- this.document = document;
- }
-
- public String getWorkflowStatus() {
- return workflowStatus;
- }
-
- public void setWorkflowStatus(String workflowStatus) {
- this.workflowStatus = workflowStatus;
- }
-}
+package ru.clearing.classes.statics.data.misc;
+
+import ru.spcex.platform.classes.base.SpcexObjectBase;
+
+import java.time.Instant;
+
+/**
+ * Ключевая ставка ЦБ
+ *
+ * DB table: KEY_RATE
+ **/
+public class KeyRate extends SpcexObjectBase {
+ private Double rate;
+ private Instant startDate;
+ private Instant endDate;
+ private String document;
+ private String workflowStatus;
+
+ public Double getRate() {
+ return rate;
+ }
+
+ public void setRate(Double rate) {
+ this.rate = rate;
+ }
+
+ public Instant getStartDate() {
+ return startDate;
+ }
+
+ public void setStartDate(Instant startDate) {
+ this.startDate = startDate;
+ }
+
+ public Instant getEndDate() {
+ return endDate;
+ }
+
+ public void setEndDate(Instant endDate) {
+ this.endDate = endDate;
+ }
+
+ public String getDocument() {
+ return document;
+ }
+
+ public void setDocument(String document) {
+ this.document = document;
+ }
+
+ public String getWorkflowStatus() {
+ return workflowStatus;
+ }
+
+ public void setWorkflowStatus(String workflowStatus) {
+ this.workflowStatus = workflowStatus;
+ }
+}
diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Misc/MoneyMarketSecurity.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/MoneyMarketSecurity.java
similarity index 94%
rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Misc/MoneyMarketSecurity.java
rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/MoneyMarketSecurity.java
index 40f57035e..feca98c31 100644
--- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Misc/MoneyMarketSecurity.java
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/MoneyMarketSecurity.java
@@ -1,95 +1,95 @@
-package ru.clearing.classes.StaticData.Misc;
-
-import ru.spcex.platform.classes.base.SpcexObjectBase;
-
-import java.math.BigDecimal;
-import java.time.Instant;
-
-/**
- * Инструменты Денежного рынка
- *
- * DB table: MONEY_MARKET_SECURITY
- **/
-public class MoneyMarketSecurity extends SpcexObjectBase {
- private Long securityId;// (linked to security)
- private String description;
- private Instant startDate;
- private Instant endDate;
- private BigDecimal nominalValue;
- private Long nominalCurrency; // (linked to currencyCode)
- private String instrumentType; // (linked to instrumentType)
- private String fullName;
- private String securitySymbol;
-
- public Long getSecurityId() {
- return securityId;
- }
-
- public void setSecurityId(Long securityId) {
- this.securityId = securityId;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public Instant getStartDate() {
- return startDate;
- }
-
- public void setStartDate(Instant startDate) {
- this.startDate = startDate;
- }
-
- public Instant getEndDate() {
- return endDate;
- }
-
- public void setEndDate(Instant endDate) {
- this.endDate = endDate;
- }
-
- public BigDecimal getNominalValue() {
- return nominalValue;
- }
-
- public void setNominalValue(BigDecimal nominalValue) {
- this.nominalValue = nominalValue;
- }
-
- public Long getNominalCurrency() {
- return nominalCurrency;
- }
-
- public void setNominalCurrency(Long nominalCurrency) {
- this.nominalCurrency = nominalCurrency;
- }
-
- public String getInstrumentType() {
- return instrumentType;
- }
-
- public void setInstrumentType(String instrumentType) {
- this.instrumentType = instrumentType;
- }
-
- public String getFullName() {
- return fullName;
- }
-
- public void setFullName(String fullName) {
- this.fullName = fullName;
- }
-
- public String getSecuritySymbol() {
- return securitySymbol;
- }
-
- public void setSecuritySymbol(String securitySymbol) {
- this.securitySymbol = securitySymbol;
- }
-}
+package ru.clearing.classes.statics.data.misc;
+
+import ru.spcex.platform.classes.base.SpcexObjectBase;
+
+import java.math.BigDecimal;
+import java.time.Instant;
+
+/**
+ * Инструменты Денежного рынка
+ *
+ * DB table: MONEY_MARKET_SECURITY
+ **/
+public class MoneyMarketSecurity extends SpcexObjectBase {
+ private Long securityId;// (linked to security)
+ private String description;
+ private Instant startDate;
+ private Instant endDate;
+ private BigDecimal nominalValue;
+ private Long nominalCurrency; // (linked to currencyCode)
+ private String instrumentType; // (linked to instrumentType)
+ private String fullName;
+ private String securitySymbol;
+
+ public Long getSecurityId() {
+ return securityId;
+ }
+
+ public void setSecurityId(Long securityId) {
+ this.securityId = securityId;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public Instant getStartDate() {
+ return startDate;
+ }
+
+ public void setStartDate(Instant startDate) {
+ this.startDate = startDate;
+ }
+
+ public Instant getEndDate() {
+ return endDate;
+ }
+
+ public void setEndDate(Instant endDate) {
+ this.endDate = endDate;
+ }
+
+ public BigDecimal getNominalValue() {
+ return nominalValue;
+ }
+
+ public void setNominalValue(BigDecimal nominalValue) {
+ this.nominalValue = nominalValue;
+ }
+
+ public Long getNominalCurrency() {
+ return nominalCurrency;
+ }
+
+ public void setNominalCurrency(Long nominalCurrency) {
+ this.nominalCurrency = nominalCurrency;
+ }
+
+ public String getInstrumentType() {
+ return instrumentType;
+ }
+
+ public void setInstrumentType(String instrumentType) {
+ this.instrumentType = instrumentType;
+ }
+
+ public String getFullName() {
+ return fullName;
+ }
+
+ public void setFullName(String fullName) {
+ this.fullName = fullName;
+ }
+
+ public String getSecuritySymbol() {
+ return securitySymbol;
+ }
+
+ public void setSecuritySymbol(String securitySymbol) {
+ this.securitySymbol = securitySymbol;
+ }
+}
diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/CompanyInfo.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/CompanyInfo.java
similarity index 98%
rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/CompanyInfo.java
rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/CompanyInfo.java
index 5bc4eab1a..52f899e00 100644
--- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/CompanyInfo.java
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/CompanyInfo.java
@@ -1,4 +1,4 @@
-package ru.clearing.classes.StaticData.Profile;
+package ru.clearing.classes.statics.data.profile;
import ru.clearing.classes.ConstSerializable;
import ru.spcex.platform.classes.base.SpcexObjectBase;
diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/Contact.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/Contact.java
similarity index 94%
rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/Contact.java
rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/Contact.java
index 547e288ac..e2aeeeca1 100644
--- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/Contact.java
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/Contact.java
@@ -1,4 +1,4 @@
-package ru.clearing.classes.StaticData.Profile;
+package ru.clearing.classes.statics.data.profile;
import ru.clearing.classes.ConstSerializable;
import ru.spcex.platform.classes.base.SpcexObjectBase;
diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/ProfileDocument.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/ProfileDocument.java
similarity index 97%
rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/ProfileDocument.java
rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/ProfileDocument.java
index bb38c616c..043aa2d1d 100644
--- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/ProfileDocument.java
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/ProfileDocument.java
@@ -1,4 +1,4 @@
-package ru.clearing.classes.StaticData.Profile;
+package ru.clearing.classes.statics.data.profile;
import ru.clearing.classes.ConstSerializable;
import ru.spcex.platform.classes.base.SpcexObjectBase;
diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/User/ClearingUser.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/user/ClearingUser.java
similarity index 92%
rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/User/ClearingUser.java
rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/user/ClearingUser.java
index a0e4f93d6..50fbff743 100644
--- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/User/ClearingUser.java
+++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/user/ClearingUser.java
@@ -1,4 +1,4 @@
-package ru.clearing.classes.StaticData.User;
+package ru.clearing.classes.statics.data.user;
import ru.clearing.classes.ConstSerializable;
diff --git a/clearing-parent/company-service/pom.xml b/clearing-parent/company-service/pom.xml
new file mode 100644
index 000000000..cd323c846
--- /dev/null
+++ b/clearing-parent/company-service/pom.xml
@@ -0,0 +1,70 @@
+
+
+
+ clearing-parent
+ ru.spcex.clearing
+ SPCEX-1.0.0.0
+
+ 4.0.0
+
+ company-service
+
+
+ 17
+ 17
+
+
+
+ ru.spcex.platform
+ platform-messaging
+
+
+ ru.spcex.platform
+ platform-imdg-api-hazelcast-impl
+
+
+ ru.spcex.clearing
+ classes
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+
+
+
+
+ src/main/resources
+
+ application.properties
+
+ false
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+ ${project.artifactId}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/CompanyServiceApplication.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/CompanyServiceApplication.java
new file mode 100644
index 000000000..19bdaf7b1
--- /dev/null
+++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/CompanyServiceApplication.java
@@ -0,0 +1,12 @@
+package ru.spcex.clearing.company;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class CompanyServiceApplication {
+ public static void main(String[] args) {
+ SpringApplication app = new SpringApplication(CompanyServiceApplication.class);
+ app.run(args);
+ }
+}
diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/KafkaConfig.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/KafkaConfig.java
new file mode 100644
index 000000000..d63ecf6c5
--- /dev/null
+++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/KafkaConfig.java
@@ -0,0 +1,17 @@
+package ru.spcex.clearing.company.config;
+
+import org.apache.kafka.clients.consumer.Consumer;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import ru.spcex.clearing.company.config.settings.CompanyServiceSettings;
+import ru.spcex.clearing.platform.messaging.config.KafkaConsumerFactory;
+
+@Configuration
+public class KafkaConfig {
+ @Autowired
+ @Bean
+ public Consumer createProducer(CompanyServiceSettings settings) {
+ return KafkaConsumerFactory.consumer(settings.getKafka());
+ }
+}
diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/UtilityServiceImdgConfig.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/UtilityServiceImdgConfig.java
new file mode 100644
index 000000000..bbe41d92f
--- /dev/null
+++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/UtilityServiceImdgConfig.java
@@ -0,0 +1,47 @@
+package ru.spcex.clearing.company.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import ru.spcex.clearing.company.config.settings.CompanyServiceSettings;
+import ru.spcex.platform.imdg.api.ImdgProvider;
+import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
+
+@Configuration
+public class UtilityServiceImdgConfig {
+ private static ThreadPoolTaskExecutor createThreadPoolTaskExecutor(int maxPoolSz, boolean waitForCompletion) {
+ ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor();
+ if (maxPoolSz > 2) {
+ pool.setKeepAliveSeconds(60);
+ pool.setAllowCoreThreadTimeOut(true);
+ }
+ pool.setCorePoolSize(maxPoolSz);
+ pool.setWaitForTasksToCompleteOnShutdown(waitForCompletion);
+ return pool;
+ }
+
+ @Bean(name = "taskExecutorHazelcastClientInitializer")
+ public ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer() {
+ return createThreadPoolTaskExecutor(1, true);
+ }
+
+ @Bean(name = "taskExecutorIdGeneratorAwaiter")
+ public ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter() {
+ return createThreadPoolTaskExecutor(1, false);
+ }
+
+ @Autowired
+ @Bean
+ public ImdgProvider imdgProvider(
+ @Qualifier("taskExecutorHazelcastClientInitializer") ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer,
+ @Qualifier("taskExecutorIdGeneratorAwaiter") ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter,
+ CompanyServiceSettings settings
+ ) {
+ return new HazelcastService(taskExecutorHazelcastClientInitializer,
+ taskExecutorIdGeneratorAwaiter,
+ settings.getHazelcast());
+ }
+
+}
diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/settings/CompanyServiceSettings.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/settings/CompanyServiceSettings.java
new file mode 100644
index 000000000..98f925d5f
--- /dev/null
+++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/settings/CompanyServiceSettings.java
@@ -0,0 +1,31 @@
+package ru.spcex.clearing.company.config.settings;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.stereotype.Component;
+import ru.spcex.clearing.platform.messaging.config.element.KafkaConsumerSettings;
+import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams;
+
+@Component
+@PropertySource("file:${spring.config.location}/application.properties")
+@ConfigurationProperties("utility-service")
+public class CompanyServiceSettings {
+ private HazelcastClientParams hazelcast;
+ private KafkaConsumerSettings kafka;
+
+ public HazelcastClientParams getHazelcast() {
+ return hazelcast;
+ }
+
+ public void setHazelcast(HazelcastClientParams hazelcast) {
+ this.hazelcast = hazelcast;
+ }
+
+ public KafkaConsumerSettings getKafka() {
+ return kafka;
+ }
+
+ public void setKafka(KafkaConsumerSettings kafka) {
+ this.kafka = kafka;
+ }
+}
diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java
new file mode 100644
index 000000000..07c867578
--- /dev/null
+++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java
@@ -0,0 +1,56 @@
+package ru.spcex.clearing.company.service;
+
+import org.apache.kafka.clients.consumer.Consumer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import ru.clearing.classes.statics.data.profile.CompanyInfo;
+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.company.CompanyInfoUpdateRequest;
+import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
+import ru.spcex.platform.imdg.api.Imdg;
+import ru.spcex.platform.imdg.api.ImdgProvider;
+
+@Service
+public class CompanyInfoService extends QueueConsumer implements InitializingBean {
+ private final Logger log = LoggerFactory.getLogger(getClass());
+ private final Imdg companyInfoMap;
+
+ @Autowired
+ public CompanyInfoService(Consumer kafkaQueue, ImdgProvider imdgProvider) {
+ super(kafkaQueue);
+ this.companyInfoMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, CompanyInfo.class);
+ }
+
+ @Override
+ public void afterPropertiesSet() {
+ callback(CompanyInfoUpdateRequest.class)
+ .setConsumer(this::companyInfoUpdate)
+ .forDestination(Consts.DESTINATION_COMPANY_INFO_UPDATE, callbacks::put);
+ init();
+ }
+
+ public void companyInfoUpdate(BaseRequest userRequest) {
+ CompanyInfoUpdateRequest req = userRequest.getRequestPayload();
+ log.debug("CompanyInfoUpdateRequest received");
+ CompanyInfo companyInfo = companyInfoMap.getSingleObjectByID(req.getId());
+
+ companyInfo.setCorporationSoleType(req.getCorporationSoleType());
+ companyInfo.setCountryCode(req.getCountryCode());
+ companyInfo.setDescription(req.getDescription());
+ companyInfo.setProfessionalSign(req.getProfessionalSign());
+ companyInfo.setLegalKind(req.getLegalKind());
+ companyInfo.setOrganizationType(req.getOrganizationType());
+ companyInfo.setResidence(req.getResidence());
+ companyInfo.setShortNameEng(req.getShortNameEng());
+ companyInfo.setFullNameEng(req.getFullNameEng());
+ companyInfo.setShortName(req.getShortName());
+ companyInfo.setFullName(req.getFullName());
+ companyInfoMap.update(companyInfo);
+ log.debug("successfully processed, id {}", companyInfo.getId());
+ }
+}
diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java
new file mode 100644
index 000000000..fc16ae75c
--- /dev/null
+++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java
@@ -0,0 +1,43 @@
+package ru.spcex.clearing.company.service;
+
+import org.apache.kafka.clients.consumer.Consumer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import ru.clearing.classes.statics.data.company.Company;
+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.common.CommonDeleteRequest;
+import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
+import ru.spcex.platform.imdg.api.Imdg;
+import ru.spcex.platform.imdg.api.ImdgProvider;
+
+@Service
+public class CompanyService extends QueueConsumer implements InitializingBean {
+ private final Logger log = LoggerFactory.getLogger(getClass());
+ private final Imdg companyMap;
+
+ @Autowired
+ public CompanyService(Consumer kafkaQueue, ImdgProvider imdgProvider) {
+ super(kafkaQueue);
+ this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
+ }
+
+ @Override
+ public void afterPropertiesSet() {
+ callback(CommonDeleteRequest.class)
+ .setConsumer(this::deleteCompany)
+ .forDestination(Consts.DESTINATION_COMPANY_DELETE, callbacks::put);
+ init();
+ }
+
+ private void deleteCompany(BaseRequest userRequest) {
+ CommonDeleteRequest req = userRequest.getRequestPayload();
+ log.debug("CommonDeleteRequest received id = {}", req.getId());
+ Company company = companyMap.getSingleObjectByID(req.getId());
+ companyMap.delete(company);
+ }
+}
diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanySymbolService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanySymbolService.java
new file mode 100644
index 000000000..c62cd502e
--- /dev/null
+++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanySymbolService.java
@@ -0,0 +1,48 @@
+package ru.spcex.clearing.company.service;
+
+
+import org.apache.kafka.clients.consumer.Consumer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import ru.clearing.classes.statics.data.company.CompanySymbols;
+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.company.CompanySymbolUpdateRequest;
+import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
+import ru.spcex.platform.imdg.api.Imdg;
+import ru.spcex.platform.imdg.api.ImdgProvider;
+
+@Service
+public class CompanySymbolService extends QueueConsumer implements InitializingBean {
+ private final Logger log = LoggerFactory.getLogger(getClass());
+ private final Imdg companySymbolsMap;
+
+ @Autowired
+ public CompanySymbolService(Consumer kafkaQueue, ImdgProvider imdgProvider) {
+ super(kafkaQueue);
+ this.companySymbolsMap = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
+ }
+
+ @Override
+ public void afterPropertiesSet() {
+ callback(CompanySymbolUpdateRequest.class)
+ .setConsumer(this::companySymbolUpdate)
+ .forDestination(Consts.DESTINATION_COMPANY_SYMBOL_UPDATE, callbacks::put);
+ init();
+ }
+
+ public void companySymbolUpdate(BaseRequest userRequest) {
+ CompanySymbolUpdateRequest req = userRequest.getRequestPayload();
+ log.debug("CompanySymbolUpdateRequest received");
+ CompanySymbols companySymbols = companySymbolsMap.getSingleObjectByID(req.getId());
+ companySymbols.setCompanySymbol(req.getCompanySymbol());
+ companySymbols.setCompanySymbolValue(req.getCompanySymbolValue());
+
+ companySymbolsMap.update(companySymbols);
+ log.debug("successfully processed, id {}", companySymbols.getId());
+ }
+}
diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ContactService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ContactService.java
new file mode 100644
index 000000000..f28ef832f
--- /dev/null
+++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ContactService.java
@@ -0,0 +1,45 @@
+package ru.spcex.clearing.company.service;
+
+import org.apache.kafka.clients.consumer.Consumer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import ru.clearing.classes.statics.data.profile.Contact;
+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.company.ContactUpdateRequest;
+import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
+import ru.spcex.platform.imdg.api.Imdg;
+import ru.spcex.platform.imdg.api.ImdgProvider;
+
+public class ContactService extends QueueConsumer implements InitializingBean {
+ private final Logger log = LoggerFactory.getLogger(getClass());
+ private final Imdg contactMap;
+
+ @Autowired
+ public ContactService(Consumer kafkaQueue, ImdgProvider imdgProvider) {
+ super(kafkaQueue);
+ this.contactMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Contact, Contact.class);
+ }
+
+ @Override
+ public void afterPropertiesSet() {
+ callback(ContactUpdateRequest.class)
+ .setConsumer(this::contactUpdate)
+ .forDestination(Consts.DESTINATION_CONTACT_UPDATE, callbacks::put);
+ init();
+ }
+
+ public void contactUpdate(BaseRequest userRequest) {
+ ContactUpdateRequest req = userRequest.getRequestPayload();
+ log.debug("CompanySymbolUpdateRequest received");
+ Contact contact = contactMap.getSingleObjectByID(req.getId());
+ contact.setContactType(req.getContactType());
+ contact.setContactValue(req.getContactValue());
+
+ contactMap.update(contact);
+ log.debug("successfully processed, id {}", contact.getId());
+ }
+}
\ No newline at end of file
diff --git a/clearing-parent/company-service/src/main/resources/application.properties b/clearing-parent/company-service/src/main/resources/application.properties
new file mode 100644
index 000000000..f3f6bd027
--- /dev/null
+++ b/clearing-parent/company-service/src/main/resources/application.properties
@@ -0,0 +1,13 @@
+spring.main.web-application-type=none
+
+utility-service.hazelcast.cluster-members=127.0.0.1
+utility-service.hazelcast.login=dev
+utility-service.hazelcast.password=dev-pass
+
+utility-service.kafka.bootstrap-servers=localhost:9092
+utility-service.kafka.group-id=dev-group
+utility-service.kafka.enable-auto-commit=false
+utility-service.kafka.session-timeout-ms=30000
+utility-service.kafka.auto-offset-reset=latest
+utility-service.kafka.linger-ms=1
+utility-service.kafka.buffer-memory=33554432
\ No newline at end of file
diff --git a/clearing-parent/company-service/src/main/resources/logback.xml b/clearing-parent/company-service/src/main/resources/logback.xml
new file mode 100644
index 000000000..bc21772aa
--- /dev/null
+++ b/clearing-parent/company-service/src/main/resources/logback.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+ %date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n
+ utf-8
+
+
+
+ ./logs/company-service.log
+
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n
+ utf8
+
+
+
+ ./logs/company-service.%i.log
+
+ 1
+ 10
+
+
+ 500MB
+
+
+
+
+
+
+
+
+
+
+
+
+
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 b6acee77f..253cf259c 100644
--- a/clearing-parent/db-scripts/src/main/resources/db/DDL.sql
+++ b/clearing-parent/db-scripts/src/main/resources/db/DDL.sql
@@ -1,6 +1,26 @@
-- DB version: 0.0.0.5
/* Dictionaries */
+-- interestStatus - Справочник статусов возваращения процентов
+CREATE TABLE IF NOT EXISTS INTEREST_STATUS_DICTIONARY(ID bigint PRIMARY KEY, CODE char(4), NAME varchar(255));
+COMMENT ON TABLE INTEREST_STATUS_DICTIONARY IS 'Справочник статусов возваращения процентов';
+
+COMMENT ON COLUMN INTEREST_STATUS_DICTIONARY.ID IS 'Идентификатор записи';
+
+COMMENT ON COLUMN INTEREST_STATUS_DICTIONARY.CODE IS 'Код';
+
+COMMENT ON COLUMN INTEREST_STATUS_DICTIONARY.NAME IS 'Наименование';
+
+-- clearingStatus - Справочник результатов клиринга
+CREATE TABLE IF NOT EXISTS CLEARING_STATUS_DICTIONARY(ID bigint PRIMARY KEY, CODE char(4), NAME varchar(255));
+COMMENT ON TABLE CLEARING_STATUS_DICTIONARY IS 'Справочник результатов клиринга';
+
+COMMENT ON COLUMN CLEARING_STATUS_DICTIONARY.ID IS 'Идентификатор записи';
+
+COMMENT ON COLUMN CLEARING_STATUS_DICTIONARY.CODE IS 'Код';
+
+COMMENT ON COLUMN CLEARING_STATUS_DICTIONARY.NAME IS 'Наименование';
+
-- workflowStatus - Справочник статусов бизнес-процессов
CREATE TABLE IF NOT EXISTS WORKFLOW_STATUS_DICTIONARY(ID bigint PRIMARY KEY, CODE char(4), NAME varchar(255));
COMMENT ON TABLE WORKFLOW_STATUS_DICTIONARY IS 'Справочник статусов бизнес-процессов';
@@ -253,7 +273,7 @@ COMMENT ON COLUMN RESULT_STATUS_DICTIONARY.CODE IS 'Код';
COMMENT ON COLUMN RESULT_STATUS_DICTIONARY.NAME IS 'Статус обработки';
--- extError -
+-- extError -
CREATE TABLE IF NOT EXISTS EXT_ERROR_DICTIONARY(ID bigint PRIMARY KEY, CODE char(4), NAME varchar(255));
COMMENT ON TABLE EXT_ERROR_DICTIONARY IS '';
@@ -305,9 +325,9 @@ COMMENT ON COLUMN COMPANY.CREATED_AT IS 'Дата и время создания
COMMENT ON COLUMN COMPANY.UPDATED_AT IS 'Дата и время изменения записи';
-COMMENT ON COLUMN COMPANY.TRADING_CODE IS 'Торговый код';
+COMMENT ON COLUMN COMPANY.TRADING_CODE IS 'Код участника торгов';
-COMMENT ON COLUMN COMPANY.CLEARING_CODE IS 'Клиринговый код';
+COMMENT ON COLUMN COMPANY.CLEARING_CODE IS 'Код участника клиринга';
COMMENT ON COLUMN COMPANY.WORKFLOW_STATUS IS 'Статус (linked to workflowStatus)';
@@ -316,7 +336,7 @@ COMMENT ON COLUMN COMPANY.SHORT_NAME IS 'Краткое наименование
COMMENT ON COLUMN COMPANY.FULL_NAME IS 'Полное наименование Компании';
-- companyInfo - Профиль Компании
-CREATE TABLE IF NOT EXISTS COMPANY_INFO(ID bigint PRIMARY KEY, COMPANY_ID bigint, CORPORATION_SOLE_TYPE char(4), COUNTRY_CODE char(4), DESCRIPTION varchar, PROFESSIONAL_SIGN char(4), LEGAL_KIND char(4), ORGANIZATION_TYPE char(4), RESIDENCE char(4), SHORT_NAME_ENG varchar(255), FULL_NAME_ENG varchar(255));
+CREATE TABLE IF NOT EXISTS COMPANY_INFO(ID bigint PRIMARY KEY, COMPANY_ID bigint, CORPORATION_SOLE_TYPE char(4), COUNTRY_CODE char(4), DESCRIPTION varchar, PROFESSIONAL_SIGN char(4), LEGAL_KIND char(4), ORGANIZATION_TYPE char(4), RESIDENCE char(4), SHORT_NAME_ENG varchar(255), FULL_NAME_ENG varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255), TRADING_CODE varchar(255), CLEARING_CODE varchar(255));
COMMENT ON TABLE COMPANY_INFO IS 'Профиль Компании';
COMMENT ON COLUMN COMPANY_INFO.ID IS 'Идентификатор записи';
@@ -341,9 +361,17 @@ COMMENT ON COLUMN COMPANY_INFO.SHORT_NAME_ENG IS 'Краткое наимено
COMMENT ON COLUMN COMPANY_INFO.FULL_NAME_ENG IS 'Полное наименование Компании на английском';
+COMMENT ON COLUMN COMPANY_INFO.SHORT_NAME IS 'Краткое наименование Компании';
+
+COMMENT ON COLUMN COMPANY_INFO.FULL_NAME IS 'Полное наименование Компании';
+
+COMMENT ON COLUMN COMPANY_INFO.TRADING_CODE IS 'Код участника торгов';
+
+COMMENT ON COLUMN COMPANY_INFO.CLEARING_CODE IS 'Код участника клиринга';
+
-- Update log of companyInfo - Профиль Компании
-CREATE TABLE IF NOT EXISTS COMPANY_INFO_UPDATE(COMPANY_INFO_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, COMPANY_ID bigint, CORPORATION_SOLE_TYPE char(4), COUNTRY_CODE char(4), DESCRIPTION varchar, PROFESSIONAL_SIGN char(4), LEGAL_KIND char(4), ORGANIZATION_TYPE char(4), RESIDENCE char(4), SHORT_NAME_ENG varchar(255), FULL_NAME_ENG varchar(255));
+CREATE TABLE IF NOT EXISTS COMPANY_INFO_UPDATE(COMPANY_INFO_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, COMPANY_ID bigint, CORPORATION_SOLE_TYPE char(4), COUNTRY_CODE char(4), DESCRIPTION varchar, PROFESSIONAL_SIGN char(4), LEGAL_KIND char(4), ORGANIZATION_TYPE char(4), RESIDENCE char(4), SHORT_NAME_ENG varchar(255), FULL_NAME_ENG varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255), TRADING_CODE varchar(255), CLEARING_CODE varchar(255) );
COMMENT ON TABLE COMPANY_INFO_UPDATE IS 'Журнал изменений таблицы companyInfo';
COMMENT ON COLUMN COMPANY_INFO_UPDATE.COMPANY_INFO_ID IS 'Идентификатор записи в таблице COMPANY_INFO';
COMMENT ON COLUMN COMPANY_INFO_UPDATE.EVENT_TIME IS 'Дата и время изменения';
@@ -371,6 +399,14 @@ COMMENT ON COLUMN COMPANY_INFO_UPDATE.SHORT_NAME_ENG IS 'Краткое наим
COMMENT ON COLUMN COMPANY_INFO_UPDATE.FULL_NAME_ENG IS 'Полное наименование Компании на английском';
+COMMENT ON COLUMN COMPANY_INFO_UPDATE.SHORT_NAME IS 'Краткое наименование Компании';
+
+COMMENT ON COLUMN COMPANY_INFO_UPDATE.FULL_NAME IS 'Полное наименование Компании';
+
+COMMENT ON COLUMN COMPANY_INFO_UPDATE.TRADING_CODE IS 'Код участника торгов';
+
+COMMENT ON COLUMN COMPANY_INFO_UPDATE.CLEARING_CODE IS 'Код участника клиринга';
+
-- clearingMemberCategory - Категории участника клиринга
CREATE TABLE IF NOT EXISTS CLEARING_MEMBER_CATEGORY(ID bigint PRIMARY KEY, COMPANY_ID bigint, CLEARING_MEMBER_CATEGORY char(4));
COMMENT ON TABLE CLEARING_MEMBER_CATEGORY IS 'Категории участника клиринга';
@@ -860,7 +896,7 @@ COMMENT ON COLUMN LISTING_UPDATE.TRADING_CURRENCY IS 'Идентификатор
COMMENT ON COLUMN LISTING_UPDATE.WORKFLOW_STATUS IS 'Идентификатор статуса листинга в системе (linked to workflowStatus)';
-- market - Торговые площадки
-CREATE TABLE IF NOT EXISTS MARKET(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, DESCRIPTION varchar(255), EXCHANGE_ID bigint, NAME varchar(255), MARKET_CODE varchar(255), SETTLEMENT_CURRENCY char(4), SECTOR char(4));
+CREATE TABLE IF NOT EXISTS MARKET(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, DESCRIPTION varchar(255), EXCHANGE_ID bigint, NAME varchar(255), CODE char(4), SETTLEMENT_CURRENCY char(4), SECTOR char(4));
COMMENT ON TABLE MARKET IS 'Торговые площадки';
COMMENT ON COLUMN MARKET.ID IS 'Идентификатор записи';
@@ -875,7 +911,7 @@ COMMENT ON COLUMN MARKET.EXCHANGE_ID IS 'Идентификатор площад
COMMENT ON COLUMN MARKET.NAME IS 'Наименование';
-COMMENT ON COLUMN MARKET.MARKET_CODE IS 'Режим';
+COMMENT ON COLUMN MARKET.CODE IS 'Режим';
COMMENT ON COLUMN MARKET.SETTLEMENT_CURRENCY IS 'Валютный код расчетов (linked to currency)';
@@ -883,7 +919,7 @@ COMMENT ON COLUMN MARKET.SECTOR IS 'Идентификатор сектора (l
-- Update log of market - Торговые площадки
-CREATE TABLE IF NOT EXISTS MARKET_UPDATE(MARKET_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, DESCRIPTION varchar(255), EXCHANGE_ID bigint, NAME varchar(255), MARKET_CODE varchar(255), SETTLEMENT_CURRENCY char(4), SECTOR char(4));
+CREATE TABLE IF NOT EXISTS MARKET_UPDATE(MARKET_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, DESCRIPTION varchar(255), EXCHANGE_ID bigint, NAME varchar(255), CODE char(4), SETTLEMENT_CURRENCY char(4), SECTOR char(4));
COMMENT ON TABLE MARKET_UPDATE IS 'Журнал изменений таблицы market';
COMMENT ON COLUMN MARKET_UPDATE.MARKET_ID IS 'Идентификатор записи в таблице MARKET';
COMMENT ON COLUMN MARKET_UPDATE.EVENT_TIME IS 'Дата и время изменения';
@@ -901,7 +937,7 @@ COMMENT ON COLUMN MARKET_UPDATE.EXCHANGE_ID IS 'Идентификатор пл
COMMENT ON COLUMN MARKET_UPDATE.NAME IS 'Наименование';
-COMMENT ON COLUMN MARKET_UPDATE.MARKET_CODE IS 'Режим';
+COMMENT ON COLUMN MARKET_UPDATE.CODE IS 'Режим';
COMMENT ON COLUMN MARKET_UPDATE.SETTLEMENT_CURRENCY IS 'Валютный код расчетов (linked to currency)';
@@ -1193,7 +1229,7 @@ COMMENT ON COLUMN CONTRACT_REGISTER.VALID_FROM_DATE IS 'Дата начала с
COMMENT ON COLUMN CONTRACT_REGISTER.VALID_TO_DATE IS 'Дата окончания срока действия';
-- liabilitiesClaimsMoney - Требования и обязательства денежных средств
-CREATE TABLE IF NOT EXISTS LIABILITIES_CLAIMS_MONEY(ID bigint PRIMARY KEY, COMPANY_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT_ID bigint, ACCOUNT_TYPE bigint, ACCOUNT bigint, LIABILITIES_AMOUNT numeric(72,2), CLAIMS_AMOUNT numeric(72,2), SETTLEMENT_DATE date, TRADING_DATE date, CURRENCY_CODE char(4), TRADING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255));
+CREATE TABLE IF NOT EXISTS LIABILITIES_CLAIMS_MONEY(ID bigint PRIMARY KEY, COMPANY_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT_ID bigint, ACCOUNT_TYPE bigint, ACCOUNT bigint, LIABILITIES_AMOUNT numeric(72,2), REFUND_INTEREST numeric(72,2), ACCRUED_INTEREST numeric(72,2), CLAIMS_AMOUNT numeric(72,2), SETTLEMENT_DATE date, TRADING_DATE date, CURRENCY char(4), TRADING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255));
COMMENT ON TABLE LIABILITIES_CLAIMS_MONEY IS 'Требования и обязательства денежных средств';
COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.ID IS 'Идентификатор записи';
@@ -1210,15 +1246,19 @@ COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.ACCOUNT_TYPE IS 'Тип счета (l
COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.ACCOUNT IS 'Счет (linked to account)';
-COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.LIABILITIES_AMOUNT IS 'Регистр «Обязательства по денежным средствам, сформированные по результатам собственных сделок Участника клиринга»';
+COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.LIABILITIES_AMOUNT IS 'Регистр «Обязательства по денежным средствам, сформированные по результатам собственных сделок Участника клиринга», исключая проценты';
-COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.CLAIMS_AMOUNT IS 'Сумма требований';
+COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.REFUND_INTEREST IS 'Проценты к возврату';
+
+COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.ACCRUED_INTEREST IS 'Начисленные проценты';
+
+COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.CLAIMS_AMOUNT IS 'Сумма требований, исключая проценты';
COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.SETTLEMENT_DATE IS 'Дата расчета';
COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.TRADING_DATE IS 'Дата торгов';
-COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.CURRENCY_CODE IS 'Код валюты (linked to currency)';
+COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.CURRENCY IS 'Код валюты (linked to currencyCode)';
COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.TRADING_CODE IS 'Торговый код Участника (linked to company)';
@@ -1227,7 +1267,7 @@ COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.SHORT_NAME IS 'Короткое на
COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.FULL_NAME IS 'Полное наименование Участника (linked to company)';
-- liabilitiesClaimsAssets - Требования и обязательства финансовых активов
-CREATE TABLE IF NOT EXISTS LIABILITIES_CLAIMS_ASSETS(ID bigint PRIMARY KEY, COMPANY_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT_ID bigint, ACCOUNT_TYPE bigint, ACCOUNT bigint, LIABILITIES_QUANTITY numeric(72,18), CLAIMS_QUANTITY numeric(72,18), SETTLEMENT_DATE date, TRADING_DATE date, REFUND_DATE date, SECURITY_ID bigint, TRADING_CODE varchar(255), SHORT_NAME varchar(255), CONTRACT varchar(255), COMMENT varchar(255), FULL_NAME varchar(255), PARENT_ID bigint);
+CREATE TABLE IF NOT EXISTS LIABILITIES_CLAIMS_ASSETS(ID bigint PRIMARY KEY, COMPANY_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT_ID bigint, ACCOUNT_TYPE bigint, ACCOUNT bigint, LIABILITIES_QUANTITY numeric(72,18), CLAIMS_QUANTITY numeric(72,18), CURRENCY char(4), SETTLEMENT_DATE date, TRADING_DATE date, REFUND_DATE date, PRICE numeric(72,18), SECURITY_ID bigint, TRADING_CODE varchar(255), SHORT_NAME varchar(255), CONTRACT varchar(255), COMMENT varchar(255), FULL_NAME varchar(255), PARENT_ID bigint, LIABILITIES_CLAIMS_MONEY_ID bigint, INTEREST_STATUS bigint, CLEARING_STATUS bigint, PAYMENT_ID bigint, REFUND_PAYMENT_ID bigint);
COMMENT ON TABLE LIABILITIES_CLAIMS_ASSETS IS 'Требования и обязательства финансовых активов';
COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.ID IS 'Идентификатор записи';
@@ -1248,12 +1288,16 @@ COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.LIABILITIES_QUANTITY IS 'Сумма
COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.CLAIMS_QUANTITY IS 'Сумма требований';
+COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.CURRENCY IS 'Код валюты (linked to currencyCode)';
+
COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.SETTLEMENT_DATE IS 'Дата расчета';
COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.TRADING_DATE IS 'Дата торгов';
COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.REFUND_DATE IS 'Дата возврата';
+COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.PRICE IS 'Ставка по депозиту';
+
COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.SECURITY_ID IS 'Инструмент (linked to security)';
COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.TRADING_CODE IS 'Торговый код Участника (linked to company)';
@@ -1268,6 +1312,16 @@ COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.FULL_NAME IS 'Полное наим
COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.PARENT_ID IS 'Идентификатор записи основного договора без разделения';
+COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.LIABILITIES_CLAIMS_MONEY_ID IS 'Регистры денежных средств (linked to liabilitiesClaimsMoney)';
+
+COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.INTEREST_STATUS IS 'Статус возврата процентов (linked to interestStatus)';
+
+COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.CLEARING_STATUS IS 'Статус клиринга (linked to clearingStatus)';
+
+COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.PAYMENT_ID IS 'Платеж';
+
+COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.REFUND_PAYMENT_ID IS 'Обратный платежа';
+
-- statement - Денежные средства от расчетной организации
CREATE TABLE IF NOT EXISTS STATEMENT(ID bigint PRIMARY KEY, ADDRESSEE_ID bigint, SENDER_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, STATEMENT_TYPE_ID bigint, COMMENT varchar(255), ACCOUNT_ID bigint, ACCOUNT bigint, IN_OUT_DIRECTION bigint, SETTLEMENT_DATE date, AMOUNT numeric(72,2), CASH_MOVEMENTCURRENCY_CODE char(4), STATUS_ID bigint);
COMMENT ON TABLE STATEMENT IS 'Денежные средства от расчетной организации';
@@ -1386,6 +1440,144 @@ COMMENT ON COLUMN MARKET_DATA.UPDATED_AT IS 'Время изменения сд
COMMENT ON COLUMN MARKET_DATA.TRADING_DATE IS 'Дата торгов';
+-- chargeTariff - Тарифы комиссий
+CREATE TABLE IF NOT EXISTS CHARGE_TARIFF(ID bigint PRIMARY KEY, MARKET bigint, CLEARING_MEMBER_CATEGORY char(4), CHARGE_TYPE_ID bigint, CHARGE_RATE numeric(72,18), CURRENCY bigint, VALID_FROM_DATE date, VALID_TO_DATE date, CREATED_AT timestamp, UPDATED_AT timestamp);
+COMMENT ON TABLE CHARGE_TARIFF IS 'Тарифы комиссий';
+
+COMMENT ON COLUMN CHARGE_TARIFF.ID IS 'Идентификатор';
+
+COMMENT ON COLUMN CHARGE_TARIFF.MARKET IS 'Секция (linked to market)';
+
+COMMENT ON COLUMN CHARGE_TARIFF.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingCategory)';
+
+COMMENT ON COLUMN CHARGE_TARIFF.CHARGE_TYPE_ID IS 'Тип комиссии (linked to chargeType)';
+
+COMMENT ON COLUMN CHARGE_TARIFF.CHARGE_RATE IS 'Ставка комиссионного сбора';
+
+COMMENT ON COLUMN CHARGE_TARIFF.CURRENCY IS 'Валюта начисления комиссии (linked to currencyCode)';
+
+COMMENT ON COLUMN CHARGE_TARIFF.VALID_FROM_DATE IS 'Дата начала срока действия';
+
+COMMENT ON COLUMN CHARGE_TARIFF.VALID_TO_DATE IS 'Дата окончания срока действия';
+
+COMMENT ON COLUMN CHARGE_TARIFF.CREATED_AT IS 'Создано';
+
+COMMENT ON COLUMN CHARGE_TARIFF.UPDATED_AT IS 'Изменено';
+
+
+-- Update log of chargeTariff - Тарифы комиссий
+CREATE TABLE IF NOT EXISTS CHARGE_TARIFF_UPDATE(CHARGE_TARIFF_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, MARKET bigint, CLEARING_MEMBER_CATEGORY char(4), CHARGE_TYPE_ID bigint, CHARGE_RATE numeric(72,18), CURRENCY bigint, VALID_FROM_DATE date, VALID_TO_DATE date, CREATED_AT timestamp, UPDATED_AT timestamp);
+COMMENT ON TABLE CHARGE_TARIFF_UPDATE IS 'Журнал изменений таблицы chargeTariff';
+COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.CHARGE_TARIFF_ID IS 'Идентификатор записи в таблице CHARGE_TARIFF';
+COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.EVENT_TIME IS 'Дата и время изменения';
+COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.EVENT_USER_ID IS 'Инициатор изменения';
+
+COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.ID IS 'Идентификатор';
+
+COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.MARKET IS 'Секция (linked to market)';
+
+COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingCategory)';
+
+COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.CHARGE_TYPE_ID IS 'Тип комиссии (linked to chargeType)';
+
+COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.CHARGE_RATE IS 'Ставка комиссионного сбора';
+
+COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.CURRENCY IS 'Валюта начисления комиссии (linked to currencyCode)';
+
+COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.VALID_FROM_DATE IS 'Дата начала срока действия';
+
+COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.VALID_TO_DATE IS 'Дата окончания срока действия';
+
+COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.CREATED_AT IS 'Создано';
+
+COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.UPDATED_AT IS 'Изменено';
+
+-- individualChargeTariff - Индивидуальные тарифы комиссий для Участника
+CREATE TABLE IF NOT EXISTS INDIVIDUAL_CHARGE_TARIFF(ID bigint PRIMARY KEY, COMPANY_ID bigint, MARKET bigint, CLEARING_MEMBER_CATEGORY char(4), CHARGE_TYPE_ID bigint, CHARGE_RATE numeric(72,18), CURRENCY bigint, VALID_FROM_DATE date, VALID_TO_DATE date, CREATED_AT timestamp, UPDATED_AT timestamp);
+COMMENT ON TABLE INDIVIDUAL_CHARGE_TARIFF IS 'Индивидуальные тарифы комиссий для Участника';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.ID IS 'Идентификатор';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.COMPANY_ID IS 'Участник (linked to company)';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.MARKET IS 'Секция (linked to market)';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingCategory)';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.CHARGE_TYPE_ID IS 'Тип комиссии (linked to chargeType)';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.CHARGE_RATE IS 'Ставка комиссионного сбора';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.CURRENCY IS 'Валюта начисления комиссии (linked to currencyCode)';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.VALID_FROM_DATE IS 'Дата начала срока действия';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.VALID_TO_DATE IS 'Дата окончания срока действия';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.CREATED_AT IS 'Создано';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.UPDATED_AT IS 'Изменено';
+
+
+-- Update log of individualChargeTariff - Индивидуальные тарифы комиссий для Участника
+CREATE TABLE IF NOT EXISTS INDIVIDUAL_CHARGE_TARIFF_UPDATE(INDIVIDUAL_CHARGE_TARIFF_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, COMPANY_ID bigint, MARKET bigint, CLEARING_MEMBER_CATEGORY char(4), CHARGE_TYPE_ID bigint, CHARGE_RATE numeric(72,18), CURRENCY bigint, VALID_FROM_DATE date, VALID_TO_DATE date, CREATED_AT timestamp, UPDATED_AT timestamp);
+COMMENT ON TABLE INDIVIDUAL_CHARGE_TARIFF_UPDATE IS 'Журнал изменений таблицы individualChargeTariff';
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.INDIVIDUAL_CHARGE_TARIFF_ID IS 'Идентификатор записи в таблице INDIVIDUAL_CHARGE_TARIFF';
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.EVENT_TIME IS 'Дата и время изменения';
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.EVENT_USER_ID IS 'Инициатор изменения';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.ID IS 'Идентификатор';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.COMPANY_ID IS 'Участник (linked to company)';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.MARKET IS 'Секция (linked to market)';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingCategory)';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.CHARGE_TYPE_ID IS 'Тип комиссии (linked to chargeType)';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.CHARGE_RATE IS 'Ставка комиссионного сбора';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.CURRENCY IS 'Валюта начисления комиссии (linked to currencyCode)';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.VALID_FROM_DATE IS 'Дата начала срока действия';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.VALID_TO_DATE IS 'Дата окончания срока действия';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.CREATED_AT IS 'Создано';
+
+COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.UPDATED_AT IS 'Изменено';
+
+-- companyTariff - Тарифы комиссий в разрезе Участника
+CREATE TABLE IF NOT EXISTS COMPANY_TARIFF(ID bigint PRIMARY KEY, MARKET bigint, CLEARING_MEMBER_CATEGORY char(4), FULL_NAME varchar(255), CONTRACT varchar(255), CHARGE_TYPE_ID bigint, CHARGE_RATE numeric(72,18), CURRENCY bigint, VALID_FROM_DATE date, VALID_TO_DATE date, CREATED_AT timestamp, UPDATED_AT timestamp, COMPANY_ID bigint);
+COMMENT ON TABLE COMPANY_TARIFF IS 'Тарифы комиссий в разрезе Участника';
+
+COMMENT ON COLUMN COMPANY_TARIFF.ID IS 'Идентификатор';
+
+COMMENT ON COLUMN COMPANY_TARIFF.MARKET IS 'Секция (linked to market)';
+
+COMMENT ON COLUMN COMPANY_TARIFF.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingCategory)';
+
+COMMENT ON COLUMN COMPANY_TARIFF.FULL_NAME IS 'Полное наименование Участника (linked to company)';
+
+COMMENT ON COLUMN COMPANY_TARIFF.CONTRACT IS 'Номер договора';
+
+COMMENT ON COLUMN COMPANY_TARIFF.CHARGE_TYPE_ID IS 'Тип комиссии (linked to chargeType)';
+
+COMMENT ON COLUMN COMPANY_TARIFF.CHARGE_RATE IS 'Ставка комиссионного сбора';
+
+COMMENT ON COLUMN COMPANY_TARIFF.CURRENCY IS 'Валюта начисления комиссии (linked to currencyCode)';
+
+COMMENT ON COLUMN COMPANY_TARIFF.VALID_FROM_DATE IS 'Дата начала срока действия';
+
+COMMENT ON COLUMN COMPANY_TARIFF.VALID_TO_DATE IS 'Дата окончания срока действия';
+
+COMMENT ON COLUMN COMPANY_TARIFF.CREATED_AT IS 'Создано';
+
+COMMENT ON COLUMN COMPANY_TARIFF.UPDATED_AT IS 'Изменено';
+
+COMMENT ON COLUMN COMPANY_TARIFF.COMPANY_ID IS 'Участник (linked to company)';
+
-- sDf01 - ДФ 02 - Направление уведомлений об операциях загрузки
CREATE TABLE IF NOT EXISTS S_DF01(ID bigint PRIMARY KEY, DATE date, CURR_CODE char(4), ACCOUNT varchar(25), REMAINDER_SUM varchar(20), DEAL char(4), ACC_CODE varchar(5), DAT varchar(8), MARKET varchar(1), ACC_NAME varchar(1), ACC_TYPE varchar(1), SUMENGAGE varchar(22), SUMUNBLOCK varchar(22), FILE_TYPE varchar(1), RESULT_CODE varchar(1), ERROR_TEXT varchar(255), EXT_ERROR_CODE char(4));
COMMENT ON TABLE S_DF01 IS 'ДФ 02 - Направление уведомлений об операциях загрузки';
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/ObjectBaseMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/ObjectBaseMapStore.java
index c87d157c7..c9b65f572 100644
--- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/ObjectBaseMapStore.java
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/ObjectBaseMapStore.java
@@ -77,6 +77,7 @@ public abstract class ObjectBaseMapStore extends Simp
return rs.getObject(columnName, Long.class);
}
+ // todo отрефакторить метод - длинное название
protected Instant getInstantFromTimestamp(ResultSet rs, String column) throws SQLException {
Timestamp date = rs.getTimestamp(column);
return date != null ? date.toInstant() : null;
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/CompanyUpdateMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/CompanyUpdateMapStore.java
index 21ab5d97c..64dc14d4d 100644
--- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/CompanyUpdateMapStore.java
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/CompanyUpdateMapStore.java
@@ -2,9 +2,9 @@ package ru.spcex.clearing.imdg.businessevent;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.lang.NonNull;
-import ru.clearing.classes.StaticData.Company.Company;
-import ru.clearing.classes.StaticData.Company.CompanyUpdate;
-import ru.clearing.classes.StaticData.Profile.CompanyInfo;
+import ru.clearing.classes.statics.data.company.Company;
+import ru.clearing.classes.statics.data.company.CompanyUpdate;
+import ru.clearing.classes.statics.data.profile.CompanyInfo;
import ru.spcex.clearing.imdg.base.BusinessEventMapStore;
import ru.spcex.clearing.imdg.utils.DbUtilsHelper;
import ru.spcex.clearing.imdg.utils.TimeUtil;
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/AccountMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/AccountMapStore.java
new file mode 100644
index 000000000..b696a0622
--- /dev/null
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/AccountMapStore.java
@@ -0,0 +1,66 @@
+package ru.spcex.clearing.imdg.businessobject;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Component;
+import ru.clearing.classes.StaticData.Account.Account;
+import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.clearing.imdg.base.TemplateMapStore;
+import ru.spcex.clearing.imdg.utils.DbUtilsHelper;
+import ru.spcex.clearing.imdg.utils.TimeUtil;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.*;
+
+@Component
+public class AccountMapStore extends TemplateMapStore {
+
+ public AccountMapStore(JdbcTemplate jdbcTemplate) {
+ super(jdbcTemplate);
+ }
+
+ @Override
+ public String getMapName() {
+ return IMDGDistributedNames.Map_Account;
+ }
+
+ @Override
+ public String getTableName() {
+ return "ACCOUNT";
+ }
+
+ @Override
+ public String[] getFields() {
+ return new String[]{
+ "ID", "CREATED_AT", "UPDATED_AT", "ACCOUNT", "ACCOUNT_TYPE", "RELATION_ID", "STATUS"
+ };
+ }
+
+ @Override
+ public Account objectReader(ResultSet resultSet) throws SQLException {
+ Account object = new Account();
+ object.setId(resultSet.getObject("ID", Long.class));
+ object.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT"));
+ object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT"));
+ object.setAccount(resultSet.getObject("ACCOUNT", String.class));
+ object.setAccountType(resultSet.getObject("ACCOUNT_TYPE", String.class));
+ object.setRelationId(resultSet.getObject("RELATION_ID", Long.class));
+ object.setStatus(resultSet.getObject("STATUS", String.class));
+ return object;
+ }
+
+ @Override
+ public Object[] objectToField(Account object) {
+ Object[] args = new Object[]{
+ object.getId(),
+ TimeUtil.fromInstant(object.getCreated()),
+ TimeUtil.fromInstant(object.getUpdated()),
+ object.getAccount(),
+ object.getAccountType(),
+ object.getRelationId(),
+ object.getStatus()
+ };
+ return args;
+ }
+
+}//todo updatemapstore !!!
\ No newline at end of file
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java
index 30e21db9e..801be1c1c 100644
--- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java
@@ -4,8 +4,8 @@ import org.springframework.dao.support.DataAccessUtils;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;
-import ru.clearing.classes.StaticData.Company.Company;
-import ru.clearing.classes.StaticData.Profile.CompanyInfo;
+import ru.clearing.classes.statics.data.company.Company;
+import ru.clearing.classes.statics.data.profile.CompanyInfo;
import ru.spcex.clearing.imdg.base.BusinessObjectMapStore;
import ru.spcex.clearing.imdg.utils.DbUtilsHelper;
import ru.spcex.clearing.imdg.utils.TimeUtil;
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/RelationMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/RelationMapStore.java
new file mode 100644
index 000000000..bdb505435
--- /dev/null
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/RelationMapStore.java
@@ -0,0 +1,71 @@
+package ru.spcex.clearing.imdg.businessobject;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Component;
+import ru.clearing.classes.StaticData.Company.Relation.Relation;
+import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.clearing.imdg.base.TemplateMapStore;
+import ru.spcex.clearing.imdg.utils.DbUtilsHelper;
+import ru.spcex.clearing.imdg.utils.TimeUtil;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.*;
+
+@Component
+public class RelationMapStore extends TemplateMapStore {
+
+ public RelationMapStore(JdbcTemplate jdbcTemplate) {
+ super(jdbcTemplate);
+ }
+
+ @Override
+ public String getMapName() {
+ return IMDGDistributedNames.Map_Relation;
+ }
+
+ @Override
+ public String getTableName() {
+ return "RELATION";
+ }
+
+ @Override
+ public String[] getFields() {
+ return new String[]{
+ "ID", "CREATED_AT", "UPDATED_AT", "CONSUMER_ID", "SUPPLIER_ID", "SERVICE_STATUS", "SERVICE_ID", "SERVICE_PRODUCT_ID", "COMMENT"
+ };
+ }
+
+ @Override
+ public Relation objectReader(ResultSet resultSet) throws SQLException {
+ Relation object = new Relation();
+ object.setId(resultSet.getObject("ID", Long.class));
+ object.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT"));
+ object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT"));
+ object.setConsumerId(resultSet.getObject("CONSUMER_ID", Long.class));
+ object.setSupplierId(resultSet.getObject("SUPPLIER_ID", Long.class));
+ object.setServiceStatus(resultSet.getObject("SERVICE_STATUS", String.class));
+ object.setServiceId(resultSet.getObject("SERVICE_ID", Long.class));
+ object.setServiceProductId(resultSet.getObject("SERVICE_PRODUCT_ID", Long.class));
+ object.setComment(resultSet.getObject("COMMENT", String.class));
+ return object;
+ }
+
+ @Override
+ public Object[] objectToField(Relation object) {
+ Object[] args = new Object[]{
+ object.getId(),
+ TimeUtil.fromInstant(object.getCreated()),
+ TimeUtil.fromInstant(object.getUpdated()),
+ object.getConsumerId(),
+ object.getSupplierId(),
+ object.getServiceStatus(),
+ object.getServiceId(),
+ object.getServiceProductId(),
+ object.getComment()
+ };
+ return args;
+ }
+
+}
+// todo Сделать BusinessEventMapStore RelationUpdateMapStore
\ No newline at end of file
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/AccountRoutingMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/AccountRoutingMapStore.java
new file mode 100644
index 000000000..f4250d264
--- /dev/null
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/AccountRoutingMapStore.java
@@ -0,0 +1,61 @@
+package ru.spcex.clearing.imdg.object;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Component;
+import ru.clearing.classes.StaticData.Account.AccountRouting;
+import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.clearing.imdg.base.TemplateMapStore;
+import ru.spcex.clearing.imdg.utils.DbUtilsHelper;
+import ru.spcex.clearing.imdg.utils.TimeUtil;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.*;
+
+@Component
+public class AccountRoutingMapStore extends TemplateMapStore {
+
+ public AccountRoutingMapStore(JdbcTemplate jdbcTemplate) {
+ super(jdbcTemplate);
+ }
+
+ @Override
+ public String getMapName() {
+ return IMDGDistributedNames.Map_AccountRouting;
+ }
+
+ @Override
+ public String getTableName() {
+ return "ACCOUNT_ROUTING";
+ }
+
+ @Override
+ public String[] getFields() {
+ return new String[]{
+ "ID", "DESTINATION_ID", "RELATION_ID", "SOURCE_ID"
+ };
+ }
+
+ @Override
+ public AccountRouting objectReader(ResultSet resultSet) throws SQLException {
+ AccountRouting object = new AccountRouting();
+ object.setId(resultSet.getObject("ID", Long.class));
+ object.setDestinationId(resultSet.getObject("DESTINATION_ID", Long.class));
+ object.setRelationId(resultSet.getObject("RELATION_ID", Long.class));
+ object.setSourceId(resultSet.getObject("SOURCE_ID", Long.class));
+ return object;
+ }
+
+ @Override
+ public Object[] objectToField(AccountRouting object) {
+ Object[] args = new Object[]{
+ object.getId(),
+ object.getDestinationId(),
+ object.getRelationId(),
+ object.getSourceId()
+ };
+ return args;
+ }
+
+}
+// todo Сделать BusinessEventMapStore AccountRoutingUpdateMapStore
\ No newline at end of file
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/BankAccountMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/BankAccountMapStore.java
new file mode 100644
index 000000000..62970e8a8
--- /dev/null
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/BankAccountMapStore.java
@@ -0,0 +1,79 @@
+package ru.spcex.clearing.imdg.object;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Component;
+import ru.clearing.classes.StaticData.Account.BankAccount;
+import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.clearing.imdg.base.TemplateMapStore;
+import ru.spcex.clearing.imdg.utils.DbUtilsHelper;
+import ru.spcex.clearing.imdg.utils.TimeUtil;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.*;
+
+@Component
+public class BankAccountMapStore extends TemplateMapStore {
+
+ public BankAccountMapStore(JdbcTemplate jdbcTemplate) {
+ super(jdbcTemplate);
+ }
+
+ @Override
+ public String getMapName() {
+ return IMDGDistributedNames.Map_BankAccount;
+ }
+
+ @Override
+ public String getTableName() {
+ return "BANK_ACCOUNT";
+ }
+
+ @Override
+ public String[] getFields() {
+ return new String[]{
+ "ID", "ACCOUNT_ID", "BANK_IDENTIFICATION_CODE", "BANK_NAME", "CORRESPONDENT_ACCOUNT_NAME", "CURRENCY", "DESTINATION", "IBAN", "INTERNATIONAL_TRANSFER_SIGN", "SWIFT_CODE", "TAXPAYER_IDENTIFICATION_NUMBER", "TAX_REGISTRATION_REASON_CODE", "CORRESPONDENT_ACCOUNT"
+ };
+ }
+
+ @Override
+ public BankAccount objectReader(ResultSet resultSet) throws SQLException {
+ BankAccount object = new BankAccount();
+ object.setId(resultSet.getObject("ID", Long.class));
+ object.setAccountId(resultSet.getObject("ACCOUNT_ID", Long.class));
+ object.setBankIdentificationCode(resultSet.getObject("BANK_IDENTIFICATION_CODE", String.class));
+ object.setBankName(resultSet.getObject("BANK_NAME", String.class));
+ object.setCorrespondentAccountName(resultSet.getObject("CORRESPONDENT_ACCOUNT_NAME", String.class));
+ object.setCurrency(resultSet.getObject("CURRENCY", String.class));
+ object.setDestination(resultSet.getObject("DESTINATION", String.class));
+ object.setIban(resultSet.getObject("IBAN", String.class));
+ object.setInternationalTransferSign(resultSet.getObject("INTERNATIONAL_TRANSFER_SIGN", String.class));
+ object.setSwiftCode(resultSet.getObject("SWIFT_CODE", String.class));
+ object.setTaxpayerIdentificationNumber(resultSet.getObject("TAXPAYER_IDENTIFICATION_NUMBER", String.class));
+ object.setTaxRegistrationReasonCode(resultSet.getObject("TAX_REGISTRATION_REASON_CODE", String.class));
+ object.setCorrespondentAccount(resultSet.getObject("CORRESPONDENT_ACCOUNT", String.class));
+ return object;
+ }
+
+ @Override
+ public Object[] objectToField(BankAccount object) {
+ Object[] args = new Object[]{
+ object.getId(),
+ object.getAccountId(),
+ object.getBankIdentificationCode(),
+ object.getBankName(),
+ object.getCorrespondentAccountName(),
+ object.getCurrency(),
+ object.getDestination(),
+ object.getIban(),
+ object.getInternationalTransferSign(),
+ object.getSwiftCode(),
+ object.getTaxpayerIdentificationNumber(),
+ object.getTaxRegistrationReasonCode(),
+ object.getCorrespondentAccount()
+ };
+ return args;
+ }
+
+}
+// todo Сделать BusinessEventMapStore BankAccountUpdateMapStore
\ No newline at end of file
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ClearingAccountMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ClearingAccountMapStore.java
new file mode 100644
index 000000000..0abaf390f
--- /dev/null
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ClearingAccountMapStore.java
@@ -0,0 +1,63 @@
+package ru.spcex.clearing.imdg.object;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Component;
+import ru.clearing.classes.StaticData.Account.ClearingAccount;
+import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.clearing.imdg.base.TemplateMapStore;
+import ru.spcex.clearing.imdg.utils.DbUtilsHelper;
+import ru.spcex.clearing.imdg.utils.TimeUtil;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.*;
+
+@Component
+public class ClearingAccountMapStore extends TemplateMapStore {
+
+ public ClearingAccountMapStore(JdbcTemplate jdbcTemplate) {
+ super(jdbcTemplate);
+ }
+
+ @Override
+ public String getMapName() {
+ return IMDGDistributedNames.Map_ClearingAccount;
+ }
+
+ @Override
+ public String getTableName() {
+ return "CLEARING_ACCOUNT";
+ }
+
+ @Override
+ public String[] getFields() {
+ return new String[]{
+ "ID", "ACCOUNT_ID", "CASH_ACCOUNT_ID", "DEPO_ACCOUNT_ID", "SETTLEMENT_CODE"
+ };
+ }
+
+ @Override
+ public ClearingAccount objectReader(ResultSet resultSet) throws SQLException {
+ ClearingAccount object = new ClearingAccount();
+ object.setId(resultSet.getObject("ID", Long.class));
+ object.setAccountId(resultSet.getObject("ACCOUNT_ID", Long.class));
+ object.setCashAccountId(resultSet.getObject("CASH_ACCOUNT_ID", Long.class));
+ object.setDepoAccountId(resultSet.getObject("DEPO_ACCOUNT_ID", Long.class));
+ object.setSettlementCode(resultSet.getObject("SETTLEMENT_CODE", String.class));
+ return object;
+ }
+
+ @Override
+ public Object[] objectToField(ClearingAccount object) {
+ Object[] args = new Object[]{
+ object.getId(),
+ object.getAccountId(),
+ object.getCashAccountId(),
+ object.getDepoAccountId(),
+ object.getSettlementCode()
+ };
+ return args;
+ }
+
+}
+// todo Сделать BusinessEventMapStore ClearingAccountUpdateMapStore
\ No newline at end of file
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ClearingMemberCategoryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ClearingMemberCategoryMapStore.java
new file mode 100644
index 000000000..881d614fe
--- /dev/null
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ClearingMemberCategoryMapStore.java
@@ -0,0 +1,55 @@
+package ru.spcex.clearing.imdg.object;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Component;
+import ru.clearing.classes.StaticData.generated.ClearingMemberCategory;
+import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.clearing.imdg.base.TemplateMapStore;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+@Component
+public class ClearingMemberCategoryMapStore extends TemplateMapStore {
+
+ public ClearingMemberCategoryMapStore(JdbcTemplate jdbcTemplate) {
+ super(jdbcTemplate);
+ }
+
+ @Override
+ public String getMapName() {
+ return IMDGDistributedNames.Map_ClearingMemberCategory;
+ }
+
+ @Override
+ public String getTableName() {
+ return "CLEARING_MEMBER_CATEGORY";
+ }
+
+ @Override
+ public String[] getFields() {
+ return new String[]{
+ "ID", "COMPANY_ID", "CLEARING_MEMBER_CATEGORY"
+ };
+ }
+
+ @Override
+ public ClearingMemberCategory objectReader(ResultSet resultSet) throws SQLException {
+ ClearingMemberCategory object = new ClearingMemberCategory();
+ object.setId(resultSet.getObject("ID", Long.class));
+ object.setCompanyId(resultSet.getObject("COMPANY_ID", Long.class));
+ object.setClearingMemberCategory(resultSet.getObject("CLEARING_MEMBER_CATEGORY", String.class));
+ return object;
+ }
+
+ @Override
+ public Object[] objectToField(ClearingMemberCategory object) {
+ Object[] args = new Object[]{
+ object.getId(),
+ object.getCompanyId(),
+ object.getClearingMemberCategory()
+ };
+ return args;
+ }
+
+}
\ No newline at end of file
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/CompanyRoleSetMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/CompanyRoleSetMapStore.java
index e6dc11297..ee62a53af 100644
--- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/CompanyRoleSetMapStore.java
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/CompanyRoleSetMapStore.java
@@ -2,7 +2,7 @@ package ru.spcex.clearing.imdg.object;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
-import ru.clearing.classes.StaticData.Company.CompanyRoleSet;
+import ru.clearing.classes.statics.data.company.CompanyRoleSet;
import ru.spcex.clearing.imdg.base.TemplateMapStore;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/CompanySymbolsMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/CompanySymbolsMapStore.java
index 74dfa90af..5952a177b 100644
--- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/CompanySymbolsMapStore.java
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/CompanySymbolsMapStore.java
@@ -2,7 +2,7 @@ package ru.spcex.clearing.imdg.object;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
-import ru.clearing.classes.StaticData.Company.CompanySymbols;
+import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.spcex.clearing.imdg.base.ObjectBaseMapStore;
import ru.spcex.clearing.imdg.utils.DbUtilsHelper;
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ContactMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ContactMapStore.java
index cab560cc2..f03a3c79f 100644
--- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ContactMapStore.java
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ContactMapStore.java
@@ -2,7 +2,7 @@ package ru.spcex.clearing.imdg.object;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
-import ru.clearing.classes.StaticData.Profile.Contact;
+import ru.clearing.classes.statics.data.profile.Contact;
import ru.spcex.clearing.imdg.base.ObjectBaseMapStore;
import ru.spcex.clearing.imdg.utils.DbUtilsHelper;
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/KeyRateMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/KeyRateMapStore.java
index 9cfe9c445..ace520cd7 100644
--- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/KeyRateMapStore.java
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/KeyRateMapStore.java
@@ -2,12 +2,11 @@ package ru.spcex.clearing.imdg.object;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
-import ru.clearing.classes.StaticData.Misc.KeyRate;
+import ru.clearing.classes.statics.data.misc.KeyRate;
import ru.spcex.clearing.imdg.base.TemplateMapStore;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.utils.TimeUtil;
-import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -42,7 +41,7 @@ public class KeyRateMapStore extends TemplateMapStore {
protected KeyRate objectReader(ResultSet resultSet) throws SQLException {
KeyRate keyRate = new KeyRate();
keyRate.setId(resultSet.getObject("ID", Long.class));
- keyRate.setRate(resultSet.getObject("RATE", BigDecimal.class));
+ keyRate.setRate(resultSet.getObject("RATE", Double.class));
keyRate.setStartDate(getInstantFromTimestamp(resultSet,"START_DATE"));
keyRate.setEndDate(getInstantFromTimestamp(resultSet, "END_DATE"));
keyRate.setDocument(resultSet.getObject("DOCUMENT", String.class));
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/MoneyMarketSecurityMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/MoneyMarketSecurityMapStore.java
index 113780189..cd635835b 100644
--- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/MoneyMarketSecurityMapStore.java
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/MoneyMarketSecurityMapStore.java
@@ -2,7 +2,7 @@ package ru.spcex.clearing.imdg.object;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
-import ru.clearing.classes.StaticData.Misc.MoneyMarketSecurity;
+import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity;
import ru.spcex.clearing.imdg.base.TemplateMapStore;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.utils.TimeUtil;
diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ProfileDocumentMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ProfileDocumentMapStore.java
index ca3519005..8b21fffdb 100644
--- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ProfileDocumentMapStore.java
+++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ProfileDocumentMapStore.java
@@ -2,7 +2,7 @@ package ru.spcex.clearing.imdg.object;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
-import ru.clearing.classes.StaticData.Profile.ProfileDocument;
+import ru.clearing.classes.statics.data.profile.ProfileDocument;
import ru.spcex.clearing.imdg.base.ObjectBaseMapStore;
import ru.spcex.clearing.imdg.utils.DbUtilsHelper;
import ru.spcex.clearing.imdg.utils.TimeUtil;
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 1f652cdf2..fdb081b63 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
@@ -7,8 +7,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import ru.clearing.classes.StaticData.Company.Company;
-import ru.clearing.classes.StaticData.Company.CompanyUpdate;
+import ru.clearing.classes.statics.data.company.Company;
+import ru.clearing.classes.statics.data.company.CompanyUpdate;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
@Service
diff --git a/clearing-parent/pom.xml b/clearing-parent/pom.xml
index 3c0360f3e..717490f8d 100644
--- a/clearing-parent/pom.xml
+++ b/clearing-parent/pom.xml
@@ -24,6 +24,9 @@
dbf-importer
dbf-exporter
securities-service
+ utility-service
+ company-service
+ reports-service
diff --git a/clearing-parent/reports-service/pom.xml b/clearing-parent/reports-service/pom.xml
new file mode 100644
index 000000000..f5c8ebac9
--- /dev/null
+++ b/clearing-parent/reports-service/pom.xml
@@ -0,0 +1,62 @@
+
+
+
+ 4.0.0
+
+ reports-service
+ reports-service
+ Service for creating reports
+ SPCEX-1.0.0.0
+
+
+ clearing
+ ru.spcex.clearing
+ SPCEX-1.0.0.0
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-autoconfigure
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-xml
+
+
+ com.thoughtworks.xstream
+ xstream
+ 1.4.19
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+ ${project.artifactId}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/ReportsServiceApplication.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/ReportsServiceApplication.java
new file mode 100644
index 000000000..9c9f83420
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/ReportsServiceApplication.java
@@ -0,0 +1,21 @@
+package ru.spcex.clearing.reports_service;
+
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import ru.spcex.clearing.reports_service.services.ReportsService;
+
+@SpringBootApplication
+public class ReportsServiceApplication {
+ public static void main(String[] args) {
+ try {
+ SpringApplicationBuilder builder = new SpringApplicationBuilder(ReportsServiceApplication.class);
+ builder.run(args);
+ } catch (Throwable e) {
+ LoggerFactory.getLogger(ReportsServiceApplication.class).error("DBF-Loader start failed: {} -> {}", e.getClass().getSimpleName(), e.getMessage());
+ System.exit(-1);
+ }
+ ReportsService reportsService = new ReportsService();
+ reportsService.writeXML(null);
+ }
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/config/ReportsServiceConfig.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/config/ReportsServiceConfig.java
new file mode 100644
index 000000000..44345db8c
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/config/ReportsServiceConfig.java
@@ -0,0 +1,12 @@
+package ru.spcex.clearing.reports_service.config;
+
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@EnableConfigurationProperties
+@ComponentScan(basePackages = {"ru.spcex.clearing.reports_service"})
+public class ReportsServiceConfig {
+
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/controller/DefaultController.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/controller/DefaultController.java
new file mode 100644
index 000000000..5206e9db4
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/controller/DefaultController.java
@@ -0,0 +1,27 @@
+package ru.spcex.clearing.reports_service.controller;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+@Controller("/")
+public class DefaultController implements InitializingBean {
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ @RequestMapping(method = RequestMethod.GET, path = "/test", produces = MediaType.TEXT_PLAIN_VALUE)
+ @ResponseBody
+ public String processGet() {
+ log.info("Call test method for exporter controller");
+ return "exporter controller test method";
+ }
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ log.info("controller started");
+ }
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/exceptions/ConfigException.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/exceptions/ConfigException.java
new file mode 100644
index 000000000..b51da9820
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/exceptions/ConfigException.java
@@ -0,0 +1,6 @@
+package ru.spcex.clearing.reports_service.exceptions;
+
+public class ConfigException extends RuntimeException {
+ public ConfigException(String msg) { super(msg); }
+ public ConfigException(String msg, Throwable cause) { super(msg, cause); }
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/properties/AProperties.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/properties/AProperties.java
new file mode 100644
index 000000000..6dac8567b
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/properties/AProperties.java
@@ -0,0 +1,8 @@
+package ru.spcex.clearing.reports_service.properties;
+
+import org.springframework.stereotype.Component;
+
+@Component("reportsServiceProperties")
+public class AProperties {
+
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/services/ReportsService.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/services/ReportsService.java
new file mode 100644
index 000000000..b94cba214
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/services/ReportsService.java
@@ -0,0 +1,24 @@
+package ru.spcex.clearing.reports_service.services;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.AbstractDriver;
+import ru.spcex.clearing.reports_service.xml_test.ChildElementForWrite;
+import ru.spcex.clearing.reports_service.xml_test.CustomLocalDateConverter;
+import ru.spcex.clearing.reports_service.xml_test.RootElementForWrite;
+
+public class ReportsService {
+ public void writeXML(AbstractDriver driver) {
+ XStream xStream = driver == null ? new XStream() : new XStream(driver);
+
+ // достаточно только для рутового объекта вызвать обработку аннотаций
+ xStream.processAnnotations(RootElementForWrite.class);
+ xStream.registerConverter(new CustomLocalDateConverter(), -100);
+
+ RootElementForWrite elementForWrite = new RootElementForWrite();
+ elementForWrite.getTestList().add(new ChildElementForWrite());
+ elementForWrite.getTestList().add(new ChildElementForWrite());
+ String dataXml = xStream.toXML(elementForWrite);
+
+ System.out.println(dataXml);
+ }
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/ChildElementForWrite.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/ChildElementForWrite.java
new file mode 100644
index 000000000..ba1db7e10
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/ChildElementForWrite.java
@@ -0,0 +1,80 @@
+package ru.spcex.clearing.reports_service.xml_test;
+
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamConverter;
+import com.thoughtworks.xstream.annotations.XStreamOmitField;
+import com.thoughtworks.xstream.converters.basic.BooleanConverter;
+import com.thoughtworks.xstream.converters.basic.DateConverter;
+
+import java.util.Date;
+
+// without aliases
+public class ChildElementForWrite {
+ @XStreamAlias("childStr") // alias for field name
+ private String testChildString = "testChildStr";
+
+ @XStreamAsAttribute
+ private Integer testAttributeInt = Integer.MIN_VALUE;
+
+ // при использовании настраевомого встроенного конвертора, ему необходимо передать параметры в конструктор
+ // делается это посредством параметров strings, booleans, nulls.
+ // т.е. такая запись эквивалентна:
+ // new DateConverter("MM-yyyy-dd", null)
+ @XStreamConverter(value = DateConverter.class, strings = {"MM-yyyy-dd"}, nulls = {String[].class})
+ private Date testDate = new Date();
+
+ @XStreamAsAttribute
+ @XStreamAlias("isBoolean")
+ @XStreamConverter(value = BooleanConverter.class, booleans = {true}, strings = {"yes", "no"})
+ private Boolean testYesAttributeBool = Boolean.TRUE;
+
+ private Integer testChildInt = Integer.MAX_VALUE;
+
+ @XStreamOmitField
+ private String testIgnoredString = "testIgnore";
+
+
+
+ public String getTestChildString() {
+ return testChildString;
+ }
+
+ public void setTestChildString(String testChildString) {
+ this.testChildString = testChildString;
+ }
+
+ public Integer getTestAttributeInt() {
+ return testAttributeInt;
+ }
+
+ public void setTestAttributeInt(Integer testAttributeInt) {
+ this.testAttributeInt = testAttributeInt;
+ }
+
+ public Integer getTestChildInt() {
+ return testChildInt;
+ }
+
+ public void setTestChildInt(Integer testChildInt) {
+ this.testChildInt = testChildInt;
+ }
+
+ public String getTestIgnoredString() {
+ return testIgnoredString;
+ }
+
+ public void setTestIgnoredString(String testIgnoredString) {
+ this.testIgnoredString = testIgnoredString;
+ }
+
+ public Boolean getTestYesAttributeBool() {
+ return testYesAttributeBool;
+ }
+
+ public void setTestYesAttributeBool(Boolean testYesAttributeBool) {
+ this.testYesAttributeBool = testYesAttributeBool;
+ }
+
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/CustomLocalDateConverter.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/CustomLocalDateConverter.java
new file mode 100644
index 000000000..11a414756
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/CustomLocalDateConverter.java
@@ -0,0 +1,32 @@
+package ru.spcex.clearing.reports_service.xml_test;
+
+import com.thoughtworks.xstream.converters.Converter;
+import com.thoughtworks.xstream.converters.MarshallingContext;
+import com.thoughtworks.xstream.converters.UnmarshallingContext;
+import com.thoughtworks.xstream.io.HierarchicalStreamReader;
+import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
+// самый большой минус работы с датами: если у какой то даты отличается формат, для нее нужен кастомный конвертер
+public class CustomLocalDateConverter implements Converter {
+ private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
+ @Override
+ public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
+ LocalDate date = (LocalDate) source;
+ writer.setValue(formatter.format(date));
+ writer.addAttribute("formatted", "true");
+ }
+
+ @Override
+ public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
+ // not implemented (not used)
+ return null;
+ }
+
+ @Override
+ public boolean canConvert(Class type) {
+ return LocalDate.class.isAssignableFrom(type);
+ }
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/ElementWithAttributeOnly.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/ElementWithAttributeOnly.java
new file mode 100644
index 000000000..9ee1da75d
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/ElementWithAttributeOnly.java
@@ -0,0 +1,29 @@
+package ru.spcex.clearing.reports_service.xml_test;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+@XStreamAlias("withAttrsOnly")
+public class ElementWithAttributeOnly {
+ @XStreamAsAttribute
+ private String attrStr = "attrStr";
+
+ @XStreamAsAttribute
+ private Long attrLong = Long.MIN_VALUE;
+
+ public String getAttrStr() {
+ return attrStr;
+ }
+
+ public void setAttrStr(String attrStr) {
+ this.attrStr = attrStr;
+ }
+
+ public Long getAttrLong() {
+ return attrLong;
+ }
+
+ public void setAttrLong(Long attrLong) {
+ this.attrLong = attrLong;
+ }
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/RootElementForWrite.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/RootElementForWrite.java
new file mode 100644
index 000000000..f8ae35408
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/RootElementForWrite.java
@@ -0,0 +1,155 @@
+package ru.spcex.clearing.reports_service.xml_test;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamConverter;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import java.math.BigDecimal;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.OffsetDateTime;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@XStreamAlias("root") // alias for classname
+public class RootElementForWrite {
+
+ @XStreamAlias("string") // alias for field
+ private String testString = "testString";
+
+ private BigDecimal testBigDecimal = new BigDecimal("666.666");
+
+ private Double testDouble = Double.MAX_VALUE;
+
+ private Long testLong = Long.MIN_VALUE;
+
+ private Boolean testBoolean = Boolean.FALSE;
+
+ private LocalDate testLocalDateDefault = LocalDate.now();
+
+ @XStreamConverter(CustomLocalDateConverter.class)
+ private LocalDate testLocalDateCustom = LocalDate.now();
+
+ private LocalDateTime testLocalDateTime = LocalDateTime.now();
+
+ private OffsetDateTime testOffsetDateTime = OffsetDateTime.now();
+
+ private Instant testInstant = Instant.now();
+
+ @XStreamAlias("namedList")
+ private List testList = new ArrayList<>();
+
+ @XStreamImplicit
+ private List testListTwo = Arrays.asList(new ChildElementForWrite(), new ChildElementForWrite());
+
+ // can marshal without getter/setter
+ private ElementWithAttributeOnly elementWithAttributeOnly = new ElementWithAttributeOnly();
+
+ public String getTestString() {
+ return testString;
+ }
+
+ public void setTestString(String testString) {
+ this.testString = testString;
+ }
+
+ public BigDecimal getTestBigDecimal() {
+ return testBigDecimal;
+ }
+
+ public void setTestBigDecimal(BigDecimal testBigDecimal) {
+ this.testBigDecimal = testBigDecimal;
+ }
+
+ public Double getTestDouble() {
+ return testDouble;
+ }
+
+ public void setTestDouble(Double testDouble) {
+ this.testDouble = testDouble;
+ }
+
+ public Long getTestLong() {
+ return testLong;
+ }
+
+ public void setTestLong(Long testLong) {
+ this.testLong = testLong;
+ }
+
+ public Boolean getTestBoolean() {
+ return testBoolean;
+ }
+
+ public void setTestBoolean(Boolean testBoolean) {
+ this.testBoolean = testBoolean;
+ }
+
+ public LocalDate getTestLocalDate() {
+ return testLocalDateCustom;
+ }
+
+ public void setTestLocalDate(LocalDate testLocalDate) {
+ this.testLocalDateCustom = testLocalDate;
+ }
+
+ public LocalDateTime getTestLocalDateTime() {
+ return testLocalDateTime;
+ }
+
+ public void setTestLocalDateTime(LocalDateTime testLocalDateTime) {
+ this.testLocalDateTime = testLocalDateTime;
+ }
+
+ public OffsetDateTime getTestOffsetDateTime() {
+ return testOffsetDateTime;
+ }
+
+ public void setTestOffsetDateTime(OffsetDateTime testOffsetDateTime) {
+ this.testOffsetDateTime = testOffsetDateTime;
+ }
+
+ public Instant getTestInstant() {
+ return testInstant;
+ }
+
+ public void setTestInstant(Instant testInstant) {
+ this.testInstant = testInstant;
+ }
+
+ public List getTestList() {
+ return testList;
+ }
+
+ public void setTestList(List testList) {
+ this.testList = testList;
+ }
+
+ public List getTestListTwo() {
+ return testListTwo;
+ }
+
+ public void setTestListTwo(List testListTwo) {
+ this.testListTwo = testListTwo;
+ }
+
+ public LocalDate getTestLocalDateDefault() {
+ return testLocalDateDefault;
+ }
+
+ public void setTestLocalDateDefault(LocalDate testLocalDateDefault) {
+ this.testLocalDateDefault = testLocalDateDefault;
+ }
+
+ public LocalDate getTestLocalDateCustom() {
+ return testLocalDateCustom;
+ }
+
+ public void setTestLocalDateCustom(LocalDate testLocalDateCustom) {
+ this.testLocalDateCustom = testLocalDateCustom;
+ }
+
+}
+
diff --git a/clearing-parent/reports-service/src/main/resources/application.properties b/clearing-parent/reports-service/src/main/resources/application.properties
new file mode 100644
index 000000000..fdc884583
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/resources/application.properties
@@ -0,0 +1,3 @@
+server.port=8080
+server.servlet.context-path=/reports_service
+spring.main.web-application-type=servlet
\ No newline at end of file
diff --git a/clearing-parent/reports-service/src/main/resources/logback.xml b/clearing-parent/reports-service/src/main/resources/logback.xml
new file mode 100644
index 000000000..865483aab
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/resources/logback.xml
@@ -0,0 +1,37 @@
+
+
+
+
+ UTF-8
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+ ./logs/reports_service.log
+
+ UTF-8
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+ ../logs/reports_service.%i.log
+
+ 1
+ 10
+
+
+ 500MB
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java
index 02ddfbcf4..33f330bc6 100644
--- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java
+++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java
@@ -6,7 +6,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import ru.clearing.classes.StaticData.Misc.MoneyMarketSecurity;
+import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.Consts;
diff --git a/clearing-parent/utility-service/pom.xml b/clearing-parent/utility-service/pom.xml
new file mode 100644
index 000000000..2aed17aef
--- /dev/null
+++ b/clearing-parent/utility-service/pom.xml
@@ -0,0 +1,70 @@
+
+
+
+ clearing-parent
+ ru.spcex.clearing
+ SPCEX-1.0.0.0
+
+ 4.0.0
+
+ utility-service
+
+
+ 17
+ 17
+
+
+
+ ru.spcex.platform
+ platform-messaging
+
+
+ ru.spcex.platform
+ platform-imdg-api-hazelcast-impl
+
+
+ ru.spcex.clearing
+ classes
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+
+
+
+
+ src/main/resources
+
+ application.properties
+
+ false
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+ ${project.artifactId}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/UtilityServiceApplication.java b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/UtilityServiceApplication.java
new file mode 100644
index 000000000..e4775c6e5
--- /dev/null
+++ b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/UtilityServiceApplication.java
@@ -0,0 +1,12 @@
+package ru.spcex.clearing.utility;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class UtilityServiceApplication {
+ public static void main(String[] args) {
+ SpringApplication springApplication = new SpringApplication(UtilityServiceApplication.class);
+ springApplication.run(args);
+ }
+}
diff --git a/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/KafkaConfig.java b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/KafkaConfig.java
new file mode 100644
index 000000000..e9284ce25
--- /dev/null
+++ b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/KafkaConfig.java
@@ -0,0 +1,17 @@
+package ru.spcex.clearing.utility.config;
+
+import org.apache.kafka.clients.consumer.Consumer;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import ru.spcex.clearing.platform.messaging.config.KafkaConsumerFactory;
+import ru.spcex.clearing.utility.config.settings.UtilityServiceSettings;
+
+@Configuration
+public class KafkaConfig {
+ @Autowired
+ @Bean
+ public Consumer createProducer(UtilityServiceSettings settings) {
+ return KafkaConsumerFactory.consumer(settings.getKafka());
+ }
+}
diff --git a/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/UtilityServiceImdgConfig.java b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/UtilityServiceImdgConfig.java
new file mode 100644
index 000000000..2330cb2f6
--- /dev/null
+++ b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/UtilityServiceImdgConfig.java
@@ -0,0 +1,49 @@
+package ru.spcex.clearing.utility.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import ru.spcex.clearing.utility.config.settings.UtilityServiceSettings;
+import ru.spcex.platform.imdg.api.ImdgProvider;
+import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
+
+@Configuration
+public class UtilityServiceImdgConfig {
+ @Bean(name = "taskExecutorHazelcastClientInitializer")
+ public ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer() {
+ return createThreadPoolTaskExecutor(1, true);
+ }
+
+ @Bean(name = "taskExecutorIdGeneratorAwaiter")
+ public ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter() {
+ return createThreadPoolTaskExecutor(1, false);
+ }
+
+ @Autowired
+ @Bean
+ public ImdgProvider imdgProvider(
+ @Qualifier("taskExecutorHazelcastClientInitializer") ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer,
+ @Qualifier("taskExecutorIdGeneratorAwaiter") ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter,
+ UtilityServiceSettings settings
+ ) {
+ return new HazelcastService(taskExecutorHazelcastClientInitializer,
+ taskExecutorIdGeneratorAwaiter,
+ settings.getHazelcast());
+ }
+
+
+ private static ThreadPoolTaskExecutor createThreadPoolTaskExecutor(int maxPoolSz, boolean waitForCompletion) {
+ ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor();
+ if (maxPoolSz > 2) {
+ pool.setKeepAliveSeconds(60);
+ pool.setAllowCoreThreadTimeOut(true);
+ }
+ pool.setCorePoolSize(maxPoolSz);
+ pool.setWaitForTasksToCompleteOnShutdown(waitForCompletion);
+ return pool;
+ }
+
+}
diff --git a/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/settings/UtilityServiceSettings.java b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/settings/UtilityServiceSettings.java
new file mode 100644
index 000000000..54f22e60c
--- /dev/null
+++ b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/settings/UtilityServiceSettings.java
@@ -0,0 +1,31 @@
+package ru.spcex.clearing.utility.config.settings;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.stereotype.Component;
+import ru.spcex.clearing.platform.messaging.config.element.KafkaConsumerSettings;
+import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams;
+
+@Component
+@PropertySource("file:${spring.config.location}/application.properties")
+@ConfigurationProperties("utility-service")
+public class UtilityServiceSettings {
+ private HazelcastClientParams hazelcast;
+ private KafkaConsumerSettings kafka;
+
+ public HazelcastClientParams getHazelcast() {
+ return hazelcast;
+ }
+
+ public void setHazelcast(HazelcastClientParams hazelcast) {
+ this.hazelcast = hazelcast;
+ }
+
+ public KafkaConsumerSettings getKafka() {
+ return kafka;
+ }
+
+ public void setKafka(KafkaConsumerSettings kafka) {
+ this.kafka = kafka;
+ }
+}
diff --git a/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/KeyRateService.java b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/KeyRateService.java
new file mode 100644
index 000000000..92c3cdf26
--- /dev/null
+++ b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/KeyRateService.java
@@ -0,0 +1,75 @@
+package ru.spcex.clearing.utility.service;
+
+import org.apache.kafka.clients.consumer.Consumer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import ru.clearing.classes.statics.data.misc.KeyRate;
+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.common.CommonDeleteRequest;
+import ru.spcex.clearing.platform.messaging.domain.cud.utilities.KeyRateNewRequest;
+import ru.spcex.clearing.platform.messaging.domain.cud.utilities.KeyRateUpdateRequest;
+import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
+import ru.spcex.platform.imdg.api.Imdg;
+import ru.spcex.platform.imdg.api.ImdgProvider;
+
+@Service
+public class KeyRateService extends QueueConsumer implements InitializingBean {
+ private final Logger log = LoggerFactory.getLogger(getClass());
+ private final Imdg keyRateMap;
+
+ @Autowired
+ public KeyRateService(Consumer kafkaQueue, ImdgProvider imdgProvider) {
+ super(kafkaQueue);
+ this.keyRateMap = imdgProvider.getImdg(IMDGDistributedNames.Map_KeyRate, KeyRate.class);
+ }
+
+ @Override
+ public void afterPropertiesSet() {
+ callback(KeyRateNewRequest.class)
+ .setConsumer(this::newKeyRate)
+ .forDestination(Consts.DESTINATION_KEY_RATE_NEW, callbacks::put);
+ callback(KeyRateUpdateRequest.class)
+ .setConsumer(this::updateKeyRate)
+ .forDestination(Consts.DESTINATION_KEY_RATE_UPDATE, callbacks::put);
+ callback(CommonDeleteRequest.class)
+ .setConsumer(this::deleteKeyRate)
+ .forDestination(Consts.DESTINATION_KEY_RATE_DELETE, callbacks::put);
+ init();
+ }
+
+ private void newKeyRate(BaseRequest userRequest) {
+ KeyRateNewRequest req = userRequest.getRequestPayload();
+ log.debug("MoneyMarketSecurityNewRequest received");
+ KeyRate keyRate = new KeyRate();
+ keyRate.setEndDate(req.getEndDate());
+ keyRate.setDocument(req.getDocument());
+ keyRate.setRate(req.getKeyRate());
+ keyRate.setStartDate(req.getStartDate());
+ keyRateMap.insert(keyRate);
+ log.debug("successfully processed, new id {}", keyRate.getId());
+ }
+
+ private void updateKeyRate(BaseRequest userRequest) {
+ KeyRateUpdateRequest req = userRequest.getRequestPayload();
+ log.debug("MoneyMarketSecurityUpdateRequest received id = {}", req.getId());
+ KeyRate keyRate = keyRateMap.getSingleObjectByID(req.getId());
+ keyRate.setEndDate(req.getEndDate());
+ keyRate.setDocument(req.getDocument());
+ keyRate.setRate(req.getKeyRate());
+ keyRate.setStartDate(req.getStartDate());
+ keyRateMap.update(keyRate);
+ }
+
+ private void deleteKeyRate(BaseRequest userRequest) {
+ CommonDeleteRequest req = userRequest.getRequestPayload();
+ log.debug("CommonDeleteRequest received id = {}", req.getId());
+ KeyRate keyRate = keyRateMap.getSingleObjectByID(req.getId());
+ keyRateMap.delete(keyRate);
+ }
+
+}
diff --git a/clearing-parent/utility-service/src/main/resources/application.properties b/clearing-parent/utility-service/src/main/resources/application.properties
new file mode 100644
index 000000000..f3f6bd027
--- /dev/null
+++ b/clearing-parent/utility-service/src/main/resources/application.properties
@@ -0,0 +1,13 @@
+spring.main.web-application-type=none
+
+utility-service.hazelcast.cluster-members=127.0.0.1
+utility-service.hazelcast.login=dev
+utility-service.hazelcast.password=dev-pass
+
+utility-service.kafka.bootstrap-servers=localhost:9092
+utility-service.kafka.group-id=dev-group
+utility-service.kafka.enable-auto-commit=false
+utility-service.kafka.session-timeout-ms=30000
+utility-service.kafka.auto-offset-reset=latest
+utility-service.kafka.linger-ms=1
+utility-service.kafka.buffer-memory=33554432
\ No newline at end of file
diff --git a/clearing-parent/utility-service/src/main/resources/logback.xml b/clearing-parent/utility-service/src/main/resources/logback.xml
new file mode 100644
index 000000000..e3e8a4454
--- /dev/null
+++ b/clearing-parent/utility-service/src/main/resources/logback.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+ %date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n
+ utf-8
+
+
+
+ ./logs/utility-service.log
+
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n
+ utf8
+
+
+
+ ./logs/utility-service.%i.log
+
+ 1
+ 10
+
+
+ 500MB
+
+
+
+
+
+
+
+
+
+
+
+
+
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 b6eee8392..a1eb7515a 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
@@ -14,6 +14,12 @@ public final class IMDGDistributedNames {
// public static final String Map_CompanyInfo = "Map_CompanyInfo"; интегрировано в Map_Company
public static final String Map_Contact = "Map_Contact";
public static final String Map_ProfileDocument = "Map_ProfileDocument";
+ public static final String Map_Account = "Map_Account";
+ public static final String Map_Relation = "Map_Relation";
+ public static final String Map_ClearingAccount = "Map_ClearingAccount";
+ public static final String Map_BankAccount = "Map_BankAccount";
+ public static final String Map_ClearingMemberCategory = "Map_ClearingMemberCategory";
+ public static final String Map_AccountRouting = "Map_AccountRouting";
// public static final String Map_InterestStatusDictionary = "Map_InterestStatusDictionary"; future
public static final String Map_AllowedDictionary = "Map_AllowedDictionary";