diff --git a/clearing-parent/reports-service/pom.xml b/clearing-parent/reports-service/pom.xml
index 969ee84ed..4c4ff1026 100644
--- a/clearing-parent/reports-service/pom.xml
+++ b/clearing-parent/reports-service/pom.xml
@@ -40,17 +40,27 @@
jackson-dataformat-xml
+
com.thoughtworks.xstream
xstream
1.4.19
+
+
org.apache.poi
poi-ooxml
5.1.0
+
+
+ com.opencsv
+ opencsv
+ 5.5.2
+
+
ru.spcex.clearing
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportId.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportId.java
index a235a2a83..00b21d565 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportId.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportId.java
@@ -5,6 +5,7 @@ import ru.spcex.platform.utils.enumeration.IEnumKey;
/**
* Идентификаторы отчётов
*/
+// todo create new ID
public enum ReportId implements IEnumKey {
PA_B("REPPA.B"), PA_IV("REPPA.IV"),
@@ -22,8 +23,18 @@ public enum ReportId implements IEnumKey {
BR_0420312_P1("REPBR.0420312_р1-1"), BR_0420312_P2("REPBR.0420312_р1-2"), BR_0420312_P3("REPBR.0420312_р1-3"), BR_0420312_P4("REPBR.0420312_р1-4"),
BR_0420312_P5("REPBR.0420312_р1-5"), BR_0420312_P6("REPBR.0420312_р1-6"), BR_0420312_P7("REPBR.0420312_р1-7"), BR_0420312_P8("REPBR.0420312_р3-1"),
- BR_0420312_P9("REPBR.0420312_р3-2"), BR_0420312_P10("REPBR.0420312_р3-3");
+ BR_0420312_P9("REPBR.0420312_р3-2"), BR_0420312_P10("REPBR.0420312_р3-3"),
+ OPERATIONAL_LIABILITIES_CLAIMS("operational_liabilities_claims"),
+ OPERATIONAL_MONEY_CHANGE("operational_money_change"),
+ SUMMARY_LIABILITIES_CLAIMS("summary_liabilities_claims"),
+ SUMMARY_L_MONEY_CHANGE("summary_lmoney_change"),
+ PERIOD_LIABILITIES_CLAIMS("period_liabilities_claims"),
+ PERIOD_MONEY_CHANGE("period_money_change"),
+ EXECUTED_DEAL_REPORT("executed_deal_report"),
+ UNFULFILLED_DEAL_REPORT("unfulfilled_deal_report"),
+
+ ;
private final String key;
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReport.java
new file mode 100644
index 000000000..ab4b4faf2
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReport.java
@@ -0,0 +1,40 @@
+package ru.spcex.clearing.reports.reports.bp;
+
+import ru.spcex.clearing.reports.reports.ReportId;
+import ru.spcex.clearing.reports.reports.ReportWithPeriod;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+public class ExecutedDealReport extends ReportWithPeriod {
+
+ private final String[] headers = {
+ "id", "securityId", "tradeNo", "tradeDate", "tradeTime", "settleDate", "settleCode", "price", "quanity", "value"
+ };
+
+ public ExecutedDealReport(LocalDate startDate, LocalDate endDate) {
+ super(ReportId.EXECUTED_DEAL_REPORT,
+ "0.0.1",
+ "BP",
+ "Реестр сделок, принятых на клиринг",
+ startDate,
+ endDate);
+ }
+
+ @Override
+ public String getReportName(LocalDateTime reportDateTime) {
+ return "executed_deal_report.%s-%s.%s".formatted(
+ DATE_FORMATTER.format(startDate),
+ DATE_FORMATTER.format(endDate),
+ DATE_TIME_FORMATTER.format(reportDateTime)
+ );
+ }
+
+ public String[] getHeaders() {
+ return headers;
+ }
+
+ public record InfoExecutedDeal(String id, String securityId, String tradeNo, String tradeDate, String tradeTime,
+ String settleDate, String settleCode, String price, String quanity, String value) {
+ }
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReport.java
new file mode 100644
index 000000000..7953a2614
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReport.java
@@ -0,0 +1,53 @@
+package ru.spcex.clearing.reports.reports.bp;
+
+import ru.spcex.clearing.reports.reports.ReportId;
+import ru.spcex.clearing.reports.reports.ReportWithPeriod;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+// todo check typo
+public class OperationalLiabilitiesClaimsReport extends ReportWithPeriod {
+
+ private final String[] headers = {
+ "id", "doc_date", "doc_time", "doc_type", "clearingHouse", "firmId", "firName", "session_id",
+ "clearing_date", "clearing_time", "trdAccId", "account", "depo_account", "currency", "tr_id", "securityId",
+ "tr_buySell", "tr_date", "tr_execDate", "exec_status", "repaym_date", "tr_price", "nominal", "lot_value",
+ "tr_lot", "tr_quantity", "tr_value", "tr_accruedint", "accruedint", "tr_clrComm", "tr_exhComm", "cash_liability",
+ "depo_liability", "cash_netto", "depo_netto"
+ };
+
+ public OperationalLiabilitiesClaimsReport(LocalDate startDate, LocalDate endDate) {
+ super(ReportId.OPERATIONAL_LIABILITIES_CLAIMS,
+ "0.0.1",
+ "BP2",
+ "Операционный отчет. Отчет об обязательствах",
+ startDate,
+ endDate);
+ }
+
+ @Override
+ public String getReportName(LocalDateTime reportDateTime) {
+ return "operational_liabilities_claims.%s-%s.%s".formatted(
+ DATE_FORMATTER.format(startDate),
+ DATE_FORMATTER.format(endDate),
+ DATE_TIME_FORMATTER.format(reportDateTime)
+ );
+ }
+
+ public String[] getHeaders() {
+ return headers;
+ }
+
+ public record InfoOperationalLiabilitiesClaims(String id, String docDate, String docTime, String docName,
+ String docType, String clearingHouse, String firmId, String firName,
+ String sessionId, String clearingDate, String clearingTime,
+ String trdAccId, String account, String depoAccount, String currency,
+ String trId, String securityId, String trBuySell, String trDate,
+ String trExecDate, String execStatus, String repaymDate, String trPrice,
+ String nominal, String lotValue, String trLot, String trQuantity,
+ String trValue, String trAccruedInt, String accruedInt, String trClrComm,
+ String trExhComm, String cashLiability, String depoLiability,
+ String cashNetto, String depoNetto) {
+ }
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReport.java
new file mode 100644
index 000000000..2f253b5b2
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReport.java
@@ -0,0 +1,49 @@
+package ru.spcex.clearing.reports.reports.bp;
+
+import ru.spcex.clearing.reports.reports.ReportId;
+import ru.spcex.clearing.reports.reports.ReportWithPeriod;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+public class OperationalMoneyChangeReport extends ReportWithPeriod {
+
+ private final String[] headers = {
+ "id", "doc_date", "doc_time", "doc_name", "doc_type", "clearingHouse", "firmId", "firName", "trdAccId",
+ "account", "currency", "registry_code", "registry_name", "open_balance", "change_balance", "add_withdraw",
+ "close_balance", "remarks", "add_sum", "add_time", "withdraw_sum", "withdraw_time"
+ };
+
+
+ public OperationalMoneyChangeReport(LocalDate startDate, LocalDate endDate) {
+ super(ReportId.OPERATIONAL_MONEY_CHANGE,
+ "0.0.1",
+ "BP3",
+ "Операционный отчет. Отчет о денежных средствах",
+ startDate,
+ endDate);
+ }
+
+ @Override
+ public String getReportName(LocalDateTime reportDateTime) {
+ return "operational_money_change.%s-%s.%s".formatted(
+ DATE_FORMATTER.format(startDate),
+ DATE_FORMATTER.format(endDate),
+ DATE_TIME_FORMATTER.format(reportDateTime)
+ );
+ }
+
+ public String[] getHeaders() {
+ return headers;
+ }
+
+ public record InfoOperationalMoneyChangeReport(String id, String docDate, String docTime, String docName,
+ String docType, String clearingHouse, String firmId, String firName,
+ String trdAccId, String account, String currency, String registryCode,
+ String registryName, String openBalance, String changeBalance,
+ String addWithdraw, String closeBalance, String remarks, String addSum,
+ String addTime, String withdrawSum, String withdrawTime) {
+
+ }
+
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaims.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaims.java
new file mode 100644
index 000000000..5ed9d1367
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaims.java
@@ -0,0 +1,51 @@
+package ru.spcex.clearing.reports.reports.bp;
+
+import ru.spcex.clearing.reports.reports.ReportId;
+import ru.spcex.clearing.reports.reports.ReportWithPeriod;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+public class PeriodLiabilitiesClaims extends ReportWithPeriod {
+
+ private final String[] headers = {
+ "id", "doc_date", "doc_time", "doc_name", "doc_type", "clearingHouse", "firmId", "firName", "session_id",
+ "clearing_date", "clearing_time", "trdAccId", "account", "depo_account", "currency", "tr_id", "securityId",
+ "tr_buySell", "tr_date", "tr_execDate", "exec_status", "repaym_date", "tr_price", "nominal", "lot_value",
+ "tr_lot", "tr_quantity", "tr_value", "tr_accruedint", "accruedint", "tr_clrComm", "tr_exhComm",
+ "cash_liability", "depo_liability", "cash_netto", "depo_netto"
+ };
+
+ public PeriodLiabilitiesClaims(LocalDate startDate, LocalDate endDate) {
+ super(ReportId.PERIOD_LIABILITIES_CLAIMS,
+ "0.0.1",
+ "BP",
+ "Отчет за период. Отчет об обязательствах",
+ startDate,
+ endDate);
+ }
+
+ @Override
+ public String getReportName(LocalDateTime reportDateTime) {
+ return "period_liabilities_claims.%s-%s.%s".formatted(
+ DATE_FORMATTER.format(startDate),
+ DATE_FORMATTER.format(endDate),
+ DATE_TIME_FORMATTER.format(reportDateTime)
+ );
+ }
+
+ public String[] getHeaders() {
+ return headers;
+ }
+
+ public record InfoPeriodLiabilitiesClaims(String id, String docDate, String docTime, String docName,
+ String docType, String clearingHouse, String firmId, String firName,
+ String sessionId, String clearingDate, String clearingTime, String trdAccId,
+ String account, String depoAccount, String currency, String trId, String securityId,
+ String trBuySell, String trDate, String trExecDate, String execStatus,
+ String repaymDate, String trPrice, String nominal, String lotValue,
+ String trLot, String trQuantity, String trValue, String trAccruedInt,
+ String accruedInt, String trClrComm, String trExhComm, String cashLiability,
+ String depoLiability, String cashNetto, String depoNetto) {
+ }
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChange.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChange.java
new file mode 100644
index 000000000..999b3b903
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChange.java
@@ -0,0 +1,46 @@
+package ru.spcex.clearing.reports.reports.bp;
+
+import ru.spcex.clearing.reports.reports.ReportId;
+import ru.spcex.clearing.reports.reports.ReportWithPeriod;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+public class PeriodMoneyChange extends ReportWithPeriod {
+
+ private final String[] headers = {
+ "id", "doc_date", "doc_time", "doc_name", "doc_type", "clearingHouse", "firmId", "firName", "trdAccId",
+ "account", "currency", "registry_code", "registry_name", "open_balance", "change_balance", "add_withdraw",
+ "close_balance", "remarks", "add_sum", "add_time", "withdraw_sum", "withdraw_time"
+ };
+
+ public PeriodMoneyChange(LocalDate startDate, LocalDate endDate) {
+ super(ReportId.PERIOD_MONEY_CHANGE,
+ "0.0.1",
+ "BP",
+ "Отчет за период. Отчет о денежных средствах",
+ startDate,
+ endDate);
+ }
+
+ @Override
+ public String getReportName(LocalDateTime reportDateTime) {
+ return "period_money_change.%s-%s.%s".formatted(
+ DATE_FORMATTER.format(startDate),
+ DATE_FORMATTER.format(endDate),
+ DATE_TIME_FORMATTER.format(reportDateTime)
+ );
+ }
+
+ public String[] getHeaders() {
+ return headers;
+ }
+
+ public record InfoPeriodMoneyChange(String id, String docDate, String docTime, String docName, String docType,
+ String clearingHouse, String firmId, String firName, String trdAccId,
+ String account, String currency, String registryCode, String registryName,
+ String openBalance, String changeBalance, String addWithdraw,
+ String closeBalance, String remarks, String addSum, String addTime,
+ String withdrawSum, String withdrawTime) {
+ }
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReport.java
new file mode 100644
index 000000000..bcc9611c8
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReport.java
@@ -0,0 +1,52 @@
+package ru.spcex.clearing.reports.reports.bp;
+
+import ru.spcex.clearing.reports.reports.ReportId;
+import ru.spcex.clearing.reports.reports.ReportWithPeriod;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+// todo check typo
+public class SummaryLiabilitiesClaimsReport extends ReportWithPeriod {
+
+ private final String[] headers = {
+ "id", "doc_date", "doc_time", "doc_name", "doc_type", "clearingHouse", "firmId", "firName", "session_id",
+ "clearing_date", "clearing_time", "trdAccId", "account", "depo_account", "currency", "tr_id", "securityId",
+ "tr_buySell", "tr_date", "tr_execDate", "exec_status", "repaym_date", "tr_price", "nominal", "lot_value",
+ "tr_lot", "tr_quantity", "tr_value", "tr_accruedint", "accruedint", "tr_clrComm", "tr_exhComm",
+ "cash_liability", "depo_liability", "cash_netto", "depo_netto"
+ };
+
+ public SummaryLiabilitiesClaimsReport(LocalDate startDate, LocalDate endDate) {
+ super(ReportId.SUMMARY_LIABILITIES_CLAIMS,
+ "0.0.1",
+ "BP4",
+ "Сводный отчет. Отчет об обязательствах",
+ startDate,
+ endDate);
+ }
+
+ @Override
+ public String getReportName(LocalDateTime reportDateTime) {
+ return "summary_liabilities_claims.%s-%s.%s".formatted(
+ DATE_FORMATTER.format(startDate),
+ DATE_FORMATTER.format(endDate),
+ DATE_TIME_FORMATTER.format(reportDateTime)
+ );
+ }
+
+ public String[] getHeaders() {
+ return headers;
+ }
+
+ public record InfoSummaryLiabilitiesClaims(String id, String docDate, String docTime, String docName,
+ String docType, String clearingHouse, String firmId, String firName,
+ String sessionId, String clearingDate, String clearingTime, String trdAccId,
+ String account, String depoAccount, String currency, String trId,
+ String securityId, String trBuySell, String trDate, String trExecDate,
+ String execStatus, String repaymDate, String trPrice, String nominal,
+ String lotValue, String trLot, String trQuantity, String trValue,
+ String trAccruedInt, String accruedInt, String trClrComm, String trExhComm,
+ String cashLiability, String depoLiability, String cashNetto, String depoNetto) {
+ }
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummarylMoneyChange.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummarylMoneyChange.java
new file mode 100644
index 000000000..d76496894
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummarylMoneyChange.java
@@ -0,0 +1,46 @@
+package ru.spcex.clearing.reports.reports.bp;
+
+import ru.spcex.clearing.reports.reports.ReportId;
+import ru.spcex.clearing.reports.reports.ReportWithPeriod;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+// todo check typo
+public class SummarylMoneyChange extends ReportWithPeriod {
+
+ private final String[] headers = {
+ "id", "doc_date", "doc_time", "doc_name", "doc_type", "clearingHouse", "firmId", "firName", "trdAccId",
+ "account", "currency", "registry_code", "registry_name", "open_balance", "change_balance", "add_withdraw",
+ "close_balance", "remarks", "add_sum", "add_time", "withdraw_sum", "withdraw_time",
+ };
+
+ public SummarylMoneyChange(LocalDate startDate, LocalDate endDate) {
+ super(ReportId.SUMMARY_L_MONEY_CHANGE,
+ "0.0.1",
+ "BP5",
+ "Сводный отчет. Отчет о денежных средствах",
+ startDate,
+ endDate);
+ }
+
+ @Override
+ public String getReportName(LocalDateTime reportDateTime) {
+ return "summary_lmoney_change.%s-%s.%s".formatted(
+ DATE_FORMATTER.format(startDate),
+ DATE_FORMATTER.format(endDate),
+ DATE_TIME_FORMATTER.format(reportDateTime)
+ );
+ }
+
+ public String[] getHeaders() {
+ return headers;
+ }
+
+ public record InfoSummarylMoneyChange(String id, String docDate, String docTime, String docName, String docType,
+ String clearingHouse, String firmId, String firName, String trdAccId, String account,
+ String currency, String registryCode, String registryName, String openBalance,
+ String changeBalance, String addWithdraw, String closeBalance, String remarks,
+ String addSum, String addTime, String withdrawSum, String withdrawTime) {
+ }
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReport.java
new file mode 100644
index 000000000..8de76a447
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReport.java
@@ -0,0 +1,39 @@
+package ru.spcex.clearing.reports.reports.bp;
+
+import ru.spcex.clearing.reports.reports.ReportId;
+import ru.spcex.clearing.reports.reports.ReportWithPeriod;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+public class UnfulfilledDealReport extends ReportWithPeriod {
+
+ private final String[] headers = {
+ "id", "securityId", "tradeNo", "tradeDate", "settleCode"
+ };
+
+ public UnfulfilledDealReport(LocalDate startDate, LocalDate endDate) {
+ super(ReportId.UNFULFILLED_DEAL_REPORT,
+ "0.0.1",
+ "BP",
+ "Реестр сделок, принятых на клиринг",
+ startDate,
+ endDate);
+ }
+
+ @Override
+ public String getReportName(LocalDateTime reportDateTime) {
+ return "unfulfilled_deal_report.%s-%s.%s".formatted(
+ DATE_FORMATTER.format(startDate),
+ DATE_FORMATTER.format(endDate),
+ DATE_TIME_FORMATTER.format(reportDateTime)
+ );
+ }
+
+ public String[] getHeaders() {
+ return headers;
+ }
+
+ public record InfoUnfulfilledDealReport(String id, String securityId, String tradeNo, String tradeDate, String settleCode) {
+ }
+}