diff --git a/clearing-parent/backend-api/src/main/resources/meta/meta.json b/clearing-parent/backend-api/src/main/resources/meta/meta.json
index c8d296dbb..f89a1dbc8 100644
--- a/clearing-parent/backend-api/src/main/resources/meta/meta.json
+++ b/clearing-parent/backend-api/src/main/resources/meta/meta.json
@@ -1,6 +1,6 @@
{
- "version": "3.9.0.72",
+ "version": "3.9.0.73",
"enums": {
@@ -5492,6 +5492,17 @@
"fields": []
}
,
+ {"method":"post",
+
+ "destination": "LBSR",
+
+ "group": "Формирование реестров",
+
+ "name": "Формирование реестра учета обязательств",
+
+ "fields": []
+ }
+ ,
{"method":"post",
"destination": "ECNR",
diff --git a/clearing-parent/backend-api/src/main/resources/meta/meta.xml b/clearing-parent/backend-api/src/main/resources/meta/meta.xml
index 5fc5eea94..c5fa8b302 100644
--- a/clearing-parent/backend-api/src/main/resources/meta/meta.xml
+++ b/clearing-parent/backend-api/src/main/resources/meta/meta.xml
@@ -1,6 +1,6 @@
-
+
@@ -1270,6 +1270,8 @@
+
+
diff --git a/clearing-parent/backend-api/src/test/resources/meta.json b/clearing-parent/backend-api/src/test/resources/meta.json
index c8d296dbb..f89a1dbc8 100644
--- a/clearing-parent/backend-api/src/test/resources/meta.json
+++ b/clearing-parent/backend-api/src/test/resources/meta.json
@@ -1,6 +1,6 @@
{
- "version": "3.9.0.72",
+ "version": "3.9.0.73",
"enums": {
@@ -5492,6 +5492,17 @@
"fields": []
}
,
+ {"method":"post",
+
+ "destination": "LBSR",
+
+ "group": "Формирование реестров",
+
+ "name": "Формирование реестра учета обязательств",
+
+ "fields": []
+ }
+ ,
{"method":"post",
"destination": "ECNR",
diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/bean/LiabilitiesRegistryReport.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/bean/LiabilitiesRegistryReport.java
new file mode 100644
index 000000000..5b89f17a4
--- /dev/null
+++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/bean/LiabilitiesRegistryReport.java
@@ -0,0 +1,121 @@
+package ru.spcex.clearing.registry.reports.bean;
+
+import com.opencsv.bean.CsvBindByName;
+import com.opencsv.bean.CsvBindByPosition;
+import com.opencsv.bean.CsvDate;
+import com.opencsv.bean.CsvNumber;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+public class LiabilitiesRegistryReport implements FileReport {
+ @CsvBindByName(column = "клиринговый код")
+ @CsvBindByPosition(position = 0)
+ private String clearing_code;
+
+ @CsvBindByName(column = "счет")
+ @CsvBindByPosition(position = 1)
+ private String account;
+
+ @CsvBindByName(column = "код регистра")
+ @CsvBindByPosition(position = 2)
+ private String registry_code;
+
+ @CsvBindByName(column = "статус")
+ @CsvBindByPosition(position = 3)
+ private String registry_status;
+
+ @CsvBindByName(column = "инструмент валюта")
+ @CsvBindByPosition(position = 4)
+ private String security_symbol;
+
+ @CsvBindByName(column = "баланс")
+ @CsvBindByPosition(position = 5)
+ @CsvNumber(value = "#0.00", writeFormat = "#0.00")
+ private BigDecimal balance;
+
+ @CsvBindByName(column = "дата расчета")
+ @CsvBindByPosition(position = 6)
+ @CsvDate(value = "dd.MM.yyyy")
+ private LocalDate settlement_date;
+
+ @CsvBindByName(column = "продукт")
+ @CsvBindByPosition(position = 7)
+ private String contract;
+
+ @CsvBindByName(column = "тип сессии")
+ @CsvBindByPosition(position = 8)
+ private String session_type;
+
+ public String getClearing_code() {
+ return clearing_code;
+ }
+
+ public void setClearing_code(String clearing_code) {
+ this.clearing_code = clearing_code;
+ }
+
+ public String getAccount() {
+ return account;
+ }
+
+ public void setAccount(String account) {
+ this.account = account;
+ }
+
+ public String getRegistry_code() {
+ return registry_code;
+ }
+
+ public void setRegistry_code(String registry_code) {
+ this.registry_code = registry_code;
+ }
+
+ public String getRegistry_status() {
+ return registry_status;
+ }
+
+ public void setRegistry_status(String registry_status) {
+ this.registry_status = registry_status;
+ }
+
+ public String getSecurity_symbol() {
+ return security_symbol;
+ }
+
+ public void setSecurity_symbol(String security_symbol) {
+ this.security_symbol = security_symbol;
+ }
+
+ public BigDecimal getBalance() {
+ return balance;
+ }
+
+ public void setBalance(BigDecimal balance) {
+ this.balance = balance;
+ }
+
+ public LocalDate getSettlement_date() {
+ return settlement_date;
+ }
+
+ public void setSettlement_date(LocalDate settlement_date) {
+ this.settlement_date = settlement_date;
+ }
+
+ public String getContract() {
+ return contract;
+ }
+
+ public void setContract(String contract) {
+ this.contract = contract;
+ }
+
+ public String getSession_type() {
+ return session_type;
+ }
+
+ public void setSession_type(String session_type) {
+ this.session_type = session_type;
+ }
+}
diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/builders/LiabilitiesRegistryReportBuilder.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/builders/LiabilitiesRegistryReportBuilder.java
new file mode 100644
index 000000000..2fed707e9
--- /dev/null
+++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/builders/LiabilitiesRegistryReportBuilder.java
@@ -0,0 +1,74 @@
+package ru.spcex.clearing.registry.reports.builders;
+
+import ru.clearing.classes.statics.data.registry.Registry;
+import ru.clearing.platform.dictionary.RegistryStatusDictionary;
+import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.clearing.registry.reports.bean.LiabilitiesRegistryReport;
+import ru.spcex.platform.imdg.api.Imdg;
+import ru.spcex.platform.imdg.api.ImdgProvider;
+
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class LiabilitiesRegistryReportBuilder extends XLSXReportBuilder {
+
+ private final Imdg registryStatusDictionaryImdg;
+
+ public LiabilitiesRegistryReportBuilder(ImdgProvider imdgProvider) {
+ registryStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_RegistryStatusDictionary, RegistryStatusDictionary.class);
+ }
+
+ @Override
+ protected String reportName() {
+ return "registry";
+ }
+
+ @Override
+ protected Class getReportClass() {
+ return LiabilitiesRegistryReport.class;
+ }
+
+ @Override
+ protected LiabilitiesRegistryReport toRow(Registry input) {
+ LiabilitiesRegistryReport entity = new LiabilitiesRegistryReport();
+
+ entity.setClearing_code(input.getClearingCode());
+ entity.setAccount(input.getAccount());
+ entity.setRegistry_code(input.getRegistryCode());
+ entity.setRegistry_status(describeRegistryStatus(input.getRegistryStatus())); // CLRD
+ entity.setSecurity_symbol(input.getSecuritySymbol());
+ entity.setBalance(input.getBalance());
+ entity.setSettlement_date(input.getSettlementDate());
+ entity.setContract(input.getContract());
+ entity.setSession_type(input.getSessionType());
+
+ return entity;
+ }
+
+ /**
+ * @param registryStatus 'CLRD', ...
+ * @return из справочника
+ */
+ private String describeRegistryStatus(String registryStatus) {
+ if (registryStatus == null)
+ return registryStatus;
+ RegistryStatusDictionary dictionary = registryStatusDictionaryImdg.getFirstObjectByFieldValues(Map.of(
+ "code", registryStatus
+ ));
+ if (dictionary == null) {
+ log.warn("Dictionary not found for status=\"{}\"", dictionary);
+ return registryStatus;
+ }
+ return dictionary.getName();
+ }
+
+ @Override
+ protected Collection sortInput(Collection input) {
+ return input.stream()
+ .sorted(Comparator.comparing(Registry::getCreated))
+ .collect(Collectors.toList());
+ }
+
+}
diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/builders/XLSXReportBuilder.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/builders/XLSXReportBuilder.java
index 4da5360e4..88cd78c03 100644
--- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/builders/XLSXReportBuilder.java
+++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/builders/XLSXReportBuilder.java
@@ -70,6 +70,7 @@ public abstract class XLSXReportBuilder constructor = Objects.requireNonNull(getReportClass()).getDeclaredConstructor();
@@ -166,6 +167,7 @@ public abstract class XLSXReportBuilder securitySelector;
private final Function