From 15abb8cbfaf229aa5b71d4828e7542075c44ebc8 Mon Sep 17 00:00:00 2001 From: akulikov Date: Wed, 17 May 2023 11:00:15 +0300 Subject: [PATCH] tests done --- .../reports/config/ReportBuildersConfig.java | 40 +- .../reports/reports/CSVReportBuilder.java | 2 +- ...a => ExecutedDealReportBuilderCommon.java} | 35 +- .../ExecutedDealReportBuilder_INFTYPE_1.java | 34 + .../ExecutedDealReportBuilder_INFTYPE_2.java | 34 + .../ExecutedDealReportBuilder_INFTYPE_3.java | 28 + .../ExecutedDealReportBuilder_INFTYPE_4.java | 34 + .../reports/bp/MoneyChangeReportBuilder.java | 22 +- ...ationalLiabilitiesClaimsReportBuilder.java | 2 +- .../OperationalMoneyChangeReportBuilder.java | 6 +- .../PeriodLiabilitiesClaimsReportBuilder.java | 6 +- .../bp/PeriodMoneyChangeReportBuilder.java | 6 +- ...SummaryLiabilitiesClaimsReportBuilder.java | 6 +- .../bp/SummaryMoneyChangeReportBuilder.java | 6 +- .../bp/UnfulfilledDealReportBuilder.java | 10 +- .../reports/services/ReportService.java | 104 ++- .../reports/services/ReportServiceTest.java | 707 +++++++++++++++--- .../KS_BR_PFX64_INFTYPE_1_expected.csv | 2 + .../KS_BR_PFX64_INFTYPE_2_expected.csv | 2 + .../KS_BR_PFX64_INFTYPE_3_expected.csv | 2 + .../KS_BR_PFX64_INFTYPE_4_expected.csv | 2 + .../KS_BR_PFX64_empty_expected.csv | 1 + ...perational_liabilities_claims_expected.csv | 3 + .../operational_money_change_expected.csv | 3 + .../period_liabilities_claims_expected.csv | 3 + .../period_money_change_expected.csv | 3 + .../summary_liabilities_claims_expected.csv} | 4 +- .../summary_money_change_expected.csv | 3 + .../unfulfilled_deal_report_expected.csv | 2 + 29 files changed, 909 insertions(+), 203 deletions(-) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/{ExecutedDealReportBuilder.java => ExecutedDealReportBuilderCommon.java} (74%) create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_1.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_2.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_3.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_4.java create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_1_expected.csv create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_2_expected.csv create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_3_expected.csv create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_4_expected.csv create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_empty_expected.csv create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/operational_liabilities_claims_expected.csv create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/operational_money_change_expected.csv create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/period_liabilities_claims_expected.csv create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/period_money_change_expected.csv rename clearing-parent/reports-service/src/test/resources/{operational_liabilities_claims_expected.csv => expected_reports_csv/summary_liabilities_claims_expected.csv} (65%) create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/summary_money_change_expected.csv create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/unfulfilled_deal_report_expected.csv diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java index baa895609..b88e8fd6f 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java @@ -8,39 +8,47 @@ import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; import java.util.HashMap; +import java.util.List; import java.util.Map; @Configuration public class ReportBuildersConfig { @Bean("reportBuildersWithoutParams") - public Map> reportBuildersWithoutParams(ImdgProvider imdgProvider) { - Map> resultMap = new HashMap<>(); - resultMap.put(ReportType.SUMMARY_LIABILITIES_CLAIMS, new SummaryLiabilitiesClaimsReportBuilder(imdgProvider)); - resultMap.put(ReportType.SUMMARY_MONEY_CHANGE, new SummaryMoneyChangeReportBuilder(imdgProvider)); + public Map>> reportBuildersWithoutParams(ImdgProvider imdgProvider) { + Map>> resultMap = new HashMap<>(); + resultMap.put(ReportType.SUMMARY_LIABILITIES_CLAIMS, List.of(new SummaryLiabilitiesClaimsReportBuilder(imdgProvider))); + resultMap.put(ReportType.SUMMARY_MONEY_CHANGE, List.of(new SummaryMoneyChangeReportBuilder(imdgProvider))); return resultMap; } @Bean("reportBuildersWithSessionIdParam") - public Map> reportBuildersWithSessionIdParam(ImdgProvider imdgProvider) { - Map> resultMap = new HashMap<>(); - resultMap.put(ReportType.OPERATIONAL_LIABILITIES_CLAIMS, new OperationalLiabilitiesClaimsReportBuilder(imdgProvider)); - resultMap.put(ReportType.OPERATIONAL_MONEY_CHANGE, new OperationalMoneyChangeReportBuilder(imdgProvider)); - resultMap.put(ReportType.EXECUTED_DEAL_REPORT, new ExecutedDealReportBuilder(imdgProvider)); - resultMap.put(ReportType.UNFULFILLED_DEAL_REPORT, new UnfulfilledDealReportBuilder(imdgProvider)); + public Map>> reportBuildersWithSessionIdParam(ImdgProvider imdgProvider) { + Map>> resultMap = new HashMap<>(); + resultMap.put(ReportType.OPERATIONAL_LIABILITIES_CLAIMS, List.of(new OperationalLiabilitiesClaimsReportBuilder(imdgProvider))); + resultMap.put(ReportType.OPERATIONAL_MONEY_CHANGE, List.of(new OperationalMoneyChangeReportBuilder(imdgProvider))); + resultMap.put(ReportType.EXECUTED_DEAL_REPORT, + List.of( + new ExecutedDealReportBuilder_INFTYPE_1(imdgProvider), + new ExecutedDealReportBuilder_INFTYPE_2(imdgProvider), + new ExecutedDealReportBuilder_INFTYPE_3(imdgProvider), + new ExecutedDealReportBuilder_INFTYPE_4(imdgProvider) + ) + ); + resultMap.put(ReportType.UNFULFILLED_DEAL_REPORT, List.of(new UnfulfilledDealReportBuilder(imdgProvider))); return resultMap; } @Bean("reportBuildersWithSessionIdListParam") - public Map> reportBuildersWithSessionIdListParams(ImdgProvider imdgProvider) { - Map> resultMap = new HashMap<>(); - resultMap.put(ReportType.PERIOD_LIABILITIES_CLAIMS, new PeriodLiabilitiesClaimsReportBuilder(imdgProvider)); + public Map>> reportBuildersWithSessionIdListParams(ImdgProvider imdgProvider) { + Map>> resultMap = new HashMap<>(); + resultMap.put(ReportType.PERIOD_LIABILITIES_CLAIMS, List.of(new PeriodLiabilitiesClaimsReportBuilder(imdgProvider))); return resultMap; } @Bean("reportBuildersWithPeriodParams") - public Map> reportBuildersWithPeriodParams(ImdgProvider imdgProvider) { - Map> resultMap = new HashMap<>(); - resultMap.put(ReportType.PERIOD_MONEY_CHANGE, new PeriodMoneyChangeReportBuilder(imdgProvider)); + public Map>> reportBuildersWithPeriodParams(ImdgProvider imdgProvider) { + Map>> resultMap = new HashMap<>(); + resultMap.put(ReportType.PERIOD_MONEY_CHANGE, List.of(new PeriodMoneyChangeReportBuilder(imdgProvider))); return resultMap; } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java index 3570a0744..aa1c830fb 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java @@ -45,7 +45,7 @@ public abstract class CSVReportBuilder

{ /** * Тип отчета по {@link ReportType} */ - protected abstract ReportType getReportType(); + public abstract ReportType getReportType(); /** * Формирование отчета на основе параметров diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilderCommon.java similarity index 74% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilderCommon.java index e44f37993..3affaeedb 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilderCommon.java @@ -5,24 +5,23 @@ import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.clearing.classes.statics.data.misc.STrades; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.CSVReportBuilder; -import ru.spcex.clearing.reports.reports.SessionIdParam; -import ru.spcex.platform.enumeration.Allowed; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.enumeration.WorkflowStatus; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; -import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; -import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import java.math.RoundingMode; -import java.time.LocalDateTime; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; -public class ExecutedDealReportBuilder extends CSVReportBuilder { - private final Imdg executionFondImdg; +public abstract class ExecutedDealReportBuilderCommon extends CSVReportBuilder { + protected final DateTimeFormatter fileNameDateTimeFormatter = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS"); + protected final Imdg executionFondImdg; private final Imdg companyImdg; private final Imdg sTradesImdg; @@ -32,7 +31,7 @@ public class ExecutedDealReportBuilder extends CSVReportBuilder }; private List lines = null; - public ExecutedDealReportBuilder(ImdgProvider imdgProvider) { + public ExecutedDealReportBuilderCommon(ImdgProvider imdgProvider) { this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); this.sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class); @@ -49,23 +48,15 @@ public class ExecutedDealReportBuilder extends CSVReportBuilder } @Override - protected String getReportFilename(SessionIdParam params) { - return "executed_deal_report.%s".formatted(LocalDateTime.now()); - } - - @Override - protected ReportType getReportType() { + public ReportType getReportType() { return ReportType.EXECUTED_DEAL_REPORT; } + protected abstract Collection getExecutionFondsForReport(T params); + @Override - protected void collect(SessionIdParam params) { - ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); - ImdgPredicate predicate = pb.and( - pb.equals("sessionId", params.getSessionId()), - pb.equals("coverageStatus", Allowed.DENIED.getKey()) - ); - Collection executionFonds = executionFondImdg.getCollectionObjectsByPredicate(predicate); + protected void collect(T params) { + Collection executionFonds = getExecutionFondsForReport(params); lines = new ArrayList<>(executionFonds.size()); for (ExecutionFond executionFond : executionFonds) { @@ -82,7 +73,7 @@ public class ExecutedDealReportBuilder extends CSVReportBuilder String securityId = String.valueOf(executionFond.getSecurityId()); String tradeNo = String.valueOf(executionFond.getExchangeExecutionId()); String tradeDate = dateFormatter.format(executionFond.getTradingDate()); - String tradeTime = dateFormatter.format(executionFond.getCreated()); + String tradeTime = dateFormatter.format(LocalDate.ofInstant(executionFond.getCreated(), ZoneId.systemDefault())); String settleDate = dateFormatter.format(executionFond.getSettlementDate()); String settleCode = sTrade != null ? sTrade.getSettleCode() : ""; String quantity = String.valueOf(executionFond.getQuantity()); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_1.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_1.java new file mode 100644 index 000000000..065ff9f5e --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_1.java @@ -0,0 +1,34 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.clearing.classes.statics.data.execution.ExecutionFond; +import ru.spcex.clearing.reports.reports.SessionIdParam; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Collection; + +public class ExecutedDealReportBuilder_INFTYPE_1 extends ExecutedDealReportBuilderCommon { + + public ExecutedDealReportBuilder_INFTYPE_1(ImdgProvider imdgProvider) { + super(imdgProvider); + } + + @Override + protected String getReportFilename(SessionIdParam params) { + return "KS_BR_PFX64_INFTYPE_1_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now())); + } + + @Override + protected Collection getExecutionFondsForReport(SessionIdParam params) { + ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); + return executionFondImdg.getCollectionObjectsByPredicate( + pb.and( + pb.equals("sessionId", params.getSessionId()), + pb.less("tradingDate", LocalDate.now()), + pb.equals("settlementDate", LocalDate.now()) + ) + ); + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_2.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_2.java new file mode 100644 index 000000000..72fadba5e --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_2.java @@ -0,0 +1,34 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.clearing.classes.statics.data.execution.ExecutionFond; +import ru.spcex.clearing.reports.reports.SessionIdParam; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Collection; + +public class ExecutedDealReportBuilder_INFTYPE_2 extends ExecutedDealReportBuilderCommon { + + public ExecutedDealReportBuilder_INFTYPE_2(ImdgProvider imdgProvider) { + super(imdgProvider); + } + + @Override + protected String getReportFilename(SessionIdParam params) { + return "KS_BR_PFX64_INFTYPE_2_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now())); + } + + @Override + protected Collection getExecutionFondsForReport(SessionIdParam params) { + ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); + return executionFondImdg.getCollectionObjectsByPredicate( + pb.and( + pb.equals("sessionId", params.getSessionId()), + pb.equals("tradingDate", LocalDate.now()), + pb.equals("settlementDate", LocalDate.now()) + ) + ); + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_3.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_3.java new file mode 100644 index 000000000..0e3c8e934 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_3.java @@ -0,0 +1,28 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.clearing.classes.statics.data.execution.ExecutionFond; +import ru.spcex.clearing.reports.reports.SessionIdParam; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Collection; + +public class ExecutedDealReportBuilder_INFTYPE_3 extends ExecutedDealReportBuilderCommon { + + public ExecutedDealReportBuilder_INFTYPE_3(ImdgProvider imdgProvider) { + super(imdgProvider); + } + + @Override + protected String getReportFilename(SessionIdParam params) { + return "KS_BR_PFX64_INFTYPE_3_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now())); + } + + @Override + protected Collection getExecutionFondsForReport(SessionIdParam params) { + ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); + return executionFondImdg.getCollectionObjectsByPredicate(pb.greater("settlementDate", LocalDate.now())); + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_4.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_4.java new file mode 100644 index 000000000..1135aab9f --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_4.java @@ -0,0 +1,34 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.clearing.classes.statics.data.execution.ExecutionFond; +import ru.spcex.clearing.reports.reports.SessionIdParam; +import ru.spcex.platform.enumeration.Allowed; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Collection; + +public class ExecutedDealReportBuilder_INFTYPE_4 extends ExecutedDealReportBuilderCommon { + + public ExecutedDealReportBuilder_INFTYPE_4(ImdgProvider imdgProvider) { + super(imdgProvider); + } + + @Override + protected String getReportFilename(SessionIdParam params) { + return "KS_BR_PFX64_INFTYPE_4_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now())); + } + + @Override + protected Collection getExecutionFondsForReport(SessionIdParam params) { + ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); + return executionFondImdg.getCollectionObjectsByPredicate( + pb.and( + pb.equals("coverageStatus", Allowed.DENIED.getKey()), + pb.equals("settlementDate", LocalDate.now()) + ) + ); + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/MoneyChangeReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/MoneyChangeReportBuilder.java index 827b0eae0..b72a2a004 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/MoneyChangeReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/MoneyChangeReportBuilder.java @@ -11,9 +11,11 @@ import ru.spcex.platform.enumeration.InOutDirection; import ru.spcex.platform.enumeration.WorkflowStatus; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; -import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; -import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -30,6 +32,7 @@ public abstract class MoneyChangeReportBuilder

extends CSVReportBuilder

{ "account", "currency", "registry_code", "registry_name", "open_balance", "change_balance", "add_withdraw", "close_balance", "remarks", "add_sum", "add_time", "withdraw_sum", "withdraw_time" }; + protected List lines = null; public MoneyChangeReportBuilder(ImdgProvider imdgProvider) { @@ -54,13 +57,13 @@ public abstract class MoneyChangeReportBuilder

extends CSVReportBuilder

{ @Override protected void collect(P params) { - ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); Collection registries = getRegistryForReport(params); Company clearingHouseCompany = companyImdg.getSingleObjectByID(1L); String clearingHouse = clearingHouseCompany.getFullName(); - Instant now = Instant.now(); + LocalDate nowDate = LocalDate.now(); + LocalTime nowTime = LocalTime.now(); lines = new ArrayList<>(registries.size()); for (Registry registry : registries) { Company company = companyImdg.getSingleObjectByID(registry.getCompanyId()); @@ -71,13 +74,13 @@ public abstract class MoneyChangeReportBuilder

extends CSVReportBuilder

{ PaymentInstruction paymentInstruction = paymentInstructionImdg.getSingleObjectByFieldValues( Map.of( "id", registry.getPaymentId(), - "creditLegDirection", InOutDirection.out.getKey() + "creditLeg_direction", InOutDirection.out.getKey() ) ); String id = String.valueOf(registry.getId()); - String docDate = dateFormatter.format(now); - String docTime = timeFormatter.format(now); + String docDate = dateFormatter.format(nowDate); + String docTime = timeFormatter.format(nowTime); String docName = "Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга"; String docType = "KS_FIRMID_ASSETS"; String firmId = String.valueOf(registry.getCompanyId()); @@ -93,9 +96,9 @@ public abstract class MoneyChangeReportBuilder

extends CSVReportBuilder

{ String closeBalance = String.valueOf(registry.getCloseBalance()); String remarks = ""; String addSum = String.valueOf(registry.getCredit()); - String addTime = dateTimeFormatter.format(statement.getCreated()); + String addTime = dateTimeFormatter.format(LocalDateTime.ofInstant(statement.getCreated(), ZoneId.systemDefault())); String withdrawSum = String.valueOf(registry.getDebit()); - String withdrawTime = dateTimeFormatter.format(paymentInstruction.getPaymentDate()); + String withdrawTime = dateTimeFormatter.format(LocalDateTime.ofInstant(paymentInstruction.getPaymentDate(), ZoneId.systemDefault())); int valueIdx = 0; String[] line = new String[getHeaders().length]; @@ -103,7 +106,6 @@ public abstract class MoneyChangeReportBuilder

extends CSVReportBuilder

{ line[valueIdx++] = docDate; line[valueIdx++] = docTime; line[valueIdx++] = docName; - line[valueIdx++] = docTime; line[valueIdx++] = docType; line[valueIdx++] = clearingHouse; line[valueIdx++] = firmId; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java index 7f985a9a5..dd7e6f9d5 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java @@ -37,7 +37,7 @@ public class OperationalLiabilitiesClaimsReportBuilder extends LiabilitiesClaims } @Override - protected ReportType getReportType() { + public ReportType getReportType() { return ReportType.OPERATIONAL_LIABILITIES_CLAIMS; } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReportBuilder.java index 0f014e4a4..24a1283d6 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReportBuilder.java @@ -5,7 +5,7 @@ import ru.spcex.clearing.reports.reports.SessionIdParam; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; -import java.time.Instant; +import java.time.LocalDateTime; import java.util.Collection; import java.util.Map; @@ -23,11 +23,11 @@ public class OperationalMoneyChangeReportBuilder extends MoneyChangeReportBuilde @Override protected String getReportFilename(SessionIdParam params) { - return "operational_money_change.%s".formatted(dateTimeFormatter.format(Instant.now())); + return "operational_money_change.%s".formatted(dateTimeFormatter.format(LocalDateTime.now())); } @Override - protected ReportType getReportType() { + public ReportType getReportType() { return ReportType.OPERATIONAL_MONEY_CHANGE; } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaimsReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaimsReportBuilder.java index bdea9b7f9..3b5e48a3c 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaimsReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaimsReportBuilder.java @@ -6,7 +6,7 @@ import ru.spcex.clearing.reports.reports.SessionIdListParams; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; -import java.time.Instant; +import java.time.LocalDateTime; import java.util.Collection; import java.util.Collections; @@ -18,11 +18,11 @@ public class PeriodLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsRepor @Override protected String getReportFilename(SessionIdListParams params) { - return "period_liabilities_claims.%s".formatted(dateTimeFormatter.format(Instant.now())); + return "period_liabilities_claims.%s".formatted(dateTimeFormatter.format(LocalDateTime.now())); } @Override - protected ReportType getReportType() { + public ReportType getReportType() { return ReportType.PERIOD_LIABILITIES_CLAIMS; } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChangeReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChangeReportBuilder.java index c56dbbcda..6e35c0cab 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChangeReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChangeReportBuilder.java @@ -6,7 +6,7 @@ import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; -import java.time.Instant; +import java.time.LocalDateTime; import java.util.Collection; public class PeriodMoneyChangeReportBuilder extends MoneyChangeReportBuilder { @@ -31,12 +31,12 @@ public class PeriodMoneyChangeReportBuilder extends MoneyChangeReportBuilder { @@ -26,11 +26,11 @@ public class SummaryLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsRepo @Override protected String getReportFilename(EmptyParams params) { - return "summary_money_change.%s".formatted(dateTimeFormatter.format(Instant.now())); + return "summary_money_change.%s".formatted(dateTimeFormatter.format(LocalDateTime.now())); } @Override - protected ReportType getReportType() { + public ReportType getReportType() { return ReportType.SUMMARY_LIABILITIES_CLAIMS; } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryMoneyChangeReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryMoneyChangeReportBuilder.java index aa14c1055..a636c5911 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryMoneyChangeReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryMoneyChangeReportBuilder.java @@ -5,7 +5,7 @@ import ru.spcex.clearing.reports.reports.EmptyParams; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; -import java.time.Instant; +import java.time.LocalDateTime; import java.util.Collection; public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder { @@ -20,11 +20,11 @@ public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder lines = null; + private List lines = null; public UnfulfilledDealReportBuilder(ImdgProvider imdgProvider) { executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); @@ -46,11 +47,11 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder(executionFonds.size()); String[] line = new String[getHeaders().length]; line[valueIdx++] = id; line[valueIdx++] = securityId; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java index 084c20422..c442c425e 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java @@ -25,6 +25,8 @@ import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.validation.IValidator; import java.io.File; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.function.Function; @@ -38,10 +40,10 @@ public class ReportService extends QueueConsumer implements InitializingBean { private final Function reportRequestWithSessionIdValidator; private final Function reportRequestWithSessionIdListValidator; private final Function reportRequestWithPeriodValidator; - private final Map> reportBuildersWithoutParams; - private final Map> reportBuildersWithSessionIdParam; - private final Map> reportBuildersWithSessionIdListParam; - private final Map> reportBuildersWithPeriodParams; + private final Map>> reportBuildersWithoutParams; + private final Map>> reportBuildersWithSessionIdParam; + private final Map>> reportBuildersWithSessionIdListParam; + private final Map>> reportBuildersWithPeriodParams; private final File outFolder; @@ -52,13 +54,13 @@ public class ReportService extends QueueConsumer implements InitializingBean { RequestHelper requestHelper, ReportsServiceSettings reportsServiceSettings, @Qualifier("reportBuildersWithoutParams") - Map> reportBuildersWithoutParams, + Map>> reportBuildersWithoutParams, @Qualifier("reportBuildersWithSessionIdParam") - Map> reportBuildersWithSessionIdParam, + Map>> reportBuildersWithSessionIdParam, @Qualifier("reportBuildersWithSessionIdListParam") - Map> reportBuildersWithSessionIdListParam, + Map>> reportBuildersWithSessionIdListParam, @Qualifier("reportBuildersWithPeriodParams") - Map> reportBuildersWithPeriodParams, + Map>> reportBuildersWithPeriodParams, @Qualifier("reportRequestValidator") Function reportRequestValidator, @Qualifier("reportRequestWithSessionIdValidator") @@ -111,14 +113,24 @@ public class ReportService extends QueueConsumer implements InitializingBean { ReportRequest req = userRequest.getRequestPayload(); log.debug("Create report type {}...", req.getReportId()); - CSVReportBuilder builder = reportBuildersWithoutParams.get( + List> builders = reportBuildersWithoutParams.get( IEnumKey.getEnumByKey(ReportType.class, req.getReportId()) ); - File outFile = builder.createReport(new EmptyParams(), outFolder); - if (outFile == null) { + List outFilenames = new ArrayList<>(); + for (CSVReportBuilder builder : builders) { + File outFile = builder.createReport(new EmptyParams(), outFolder); + if (outFile == null) continue; + outFilenames.add(outFile.getAbsolutePath()); } - log.debug("Report {} successfully created. Output file: {}", req.getReportId(), outFile.getAbsolutePath()); + int outFilesCnt = outFilenames.size(); + if (outFilesCnt == 0) { + log.error("Create report {} failed, see log", req.getReportId()); + } else if (outFilesCnt < builders.size()) { + log.error("Create some error for {} failed, see log", req.getReportId()); + } else { + log.debug("Reports {} successfully created. Output files: {}", req.getReportId(), String.join(", ", outFilenames)); + } return null; } @@ -133,14 +145,26 @@ public class ReportService extends QueueConsumer implements InitializingBean { ReportRequestWithSessionId req = userRequest.getRequestPayload(); log.debug("Create report type {}...", req.getReportId()); - CSVReportBuilder builder = reportBuildersWithSessionIdParam.get( + List> builders = reportBuildersWithSessionIdParam.get( IEnumKey.getEnumByKey(ReportType.class, req.getReportId()) ); - SessionIdParam sessionIdParam = new SessionIdParam(); - sessionIdParam.setSessionId(req.getSessionId()); - File outFile = builder.createReport(sessionIdParam, outFolder); + List outFilenames = new ArrayList<>(); + for (CSVReportBuilder builder : builders) { + SessionIdParam sessionIdParam = new SessionIdParam(); + sessionIdParam.setSessionId(req.getSessionId()); + File outFile = builder.createReport(sessionIdParam, outFolder); + if (outFile == null) continue; + outFilenames.add(outFile.getAbsolutePath()); + } - log.debug("Report {} successfully created. Output file: {}", req.getReportId(), outFile.getAbsolutePath()); + int outFilesCnt = outFilenames.size(); + if (outFilesCnt == 0) { + log.error("Create report {} failed, see log", req.getReportId()); + } else if (outFilesCnt < builders.size()) { + log.error("Create some error for {} failed, see log", req.getReportId()); + } else { + log.debug("Reports {} successfully created. Output files: {}", req.getReportId(), String.join(", ", outFilenames)); + } return null; } @@ -155,14 +179,26 @@ public class ReportService extends QueueConsumer implements InitializingBean { ReportRequestWithSessionIdList req = userRequest.getRequestPayload(); log.debug("Create report type {}...", req.getReportId()); - CSVReportBuilder builder = reportBuildersWithSessionIdListParam.get( + List> builders = reportBuildersWithSessionIdListParam.get( IEnumKey.getEnumByKey(ReportType.class, req.getReportId()) ); - SessionIdListParams sessionIdListParams = new SessionIdListParams(); - sessionIdListParams.setSessionIdList(req.getSessionIdList()); - File outFile = builder.createReport(sessionIdListParams, outFolder); + List outFilenames = new ArrayList<>(); + for (CSVReportBuilder builder : builders) { + SessionIdListParams sessionIdListParams = new SessionIdListParams(); + sessionIdListParams.setSessionIdList(req.getSessionIdList()); + File outFile = builder.createReport(sessionIdListParams, outFolder); + if (outFile == null) continue; + outFilenames.add(outFile.getAbsolutePath()); + } - log.debug("Report {} successfully created. Output file: {}", req.getReportId(), outFile.getAbsolutePath()); + int outFilesCnt = outFilenames.size(); + if (outFilesCnt == 0) { + log.error("Create report {} failed, see log", req.getReportId()); + } else if (outFilesCnt < builders.size()) { + log.error("Create some error for {} failed, see log", req.getReportId()); + } else { + log.debug("Reports {} successfully created. Output files: {}", req.getReportId(), String.join(", ", outFilenames)); + } return null; } @@ -177,15 +213,27 @@ public class ReportService extends QueueConsumer implements InitializingBean { ReportRequestWithPeriod req = userRequest.getRequestPayload(); log.debug("Create report type {}...", req.getReportId()); - CSVReportBuilder builder = reportBuildersWithPeriodParams.get( + List> builders = reportBuildersWithPeriodParams.get( IEnumKey.getEnumByKey(ReportType.class, req.getReportId()) ); - PeriodParams periodParams = new PeriodParams(); - periodParams.setStartDate(req.getStartDate()); - periodParams.setEndDate(req.getEndDate()); - File outFile = builder.createReport(periodParams, outFolder); + List outFilenames = new ArrayList<>(); + for (CSVReportBuilder builder : builders) { + PeriodParams periodParams = new PeriodParams(); + periodParams.setStartDate(req.getStartDate()); + periodParams.setEndDate(req.getEndDate()); + File outFile = builder.createReport(periodParams, outFolder); + if (outFile == null) continue; + outFilenames.add(outFile.getAbsolutePath()); + } - log.debug("Report {} successfully created. Output file: {}", req.getReportId(), outFile.getAbsolutePath()); + int outFilesCnt = outFilenames.size(); + if (outFilesCnt == 0) { + log.error("Create report {} failed, see log", req.getReportId()); + } else if (outFilesCnt < builders.size()) { + log.error("Create some error for {} failed, see log", req.getReportId()); + } else { + log.debug("Reports {} successfully created. Output files: {}", req.getReportId(), String.join(", ", outFilenames)); + } return null; } diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java index 48164120b..03a1ea5ac 100644 --- a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java @@ -9,10 +9,7 @@ import org.apache.commons.io.FileUtils; import org.apache.kafka.clients.consumer.MockConsumer; import org.apache.kafka.clients.producer.MockProducer; import org.apache.kafka.clients.producer.ProducerRecord; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.*; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; @@ -26,11 +23,17 @@ import ru.clearing.classes.statics.data.execution.ExecutionDeposit; import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; import ru.clearing.classes.statics.data.misc.Listing; +import ru.clearing.classes.statics.data.misc.STrades; +import ru.clearing.classes.statics.data.payment.PaymentInstruction; import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; +import ru.clearing.classes.statics.data.statement.Statement; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithPeriod; import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionId; +import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionIdList; import ru.spcex.clearing.reports.config.BeanConfiguration; import ru.spcex.clearing.reports.config.ReportBuildersConfig; import ru.spcex.clearing.reports.config.TestConfig; @@ -64,25 +67,18 @@ import static org.junit.jupiter.api.Assertions.assertEquals; ReportBuildersConfig.class, TestConfig.class }) +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class ReportServiceTest { - private Imdg executionFondImdg; - private Imdg executionDepositImdg; - private Imdg companyImdg; - private Imdg registryImdg; - private Imdg

listingImdg; - private Imdg fixedIncomeSecurityImdg; - private Imdg tradingClearingRegistryImdg; - + private static File outFolder; private final ExecutionFond testExecutionFond = new ExecutionFond(); private final ExecutionDeposit testExecutionDeposit = new ExecutionDeposit(); - + private final Registry testRegistry_1 = new Registry(); + private final Registry testRegistry_2 = new Registry(); private final Company testCompany_1 = new Company(); private final Company testCompany_2 = new Company(); private final Company testCompanyHouse = new Company(); - private final Registry testRegistryForCompanyId_1 = new Registry(); private final Registry testRegistryForCompanyId_2 = new Registry(); - private final Registry tm_tRegistry_1 = new Registry(); private final Registry om_tRegistry_1 = new Registry(); private final Registry ts_tRegistry_1 = new Registry(); @@ -91,31 +87,88 @@ public class ReportServiceTest { private final Registry om_tRegistry_2 = new Registry(); private final Registry ts_tRegistry_2 = new Registry(); private final Registry os_tRegistry_2 = new Registry(); - private final Listing testListing_1 = new Listing(); private final Listing testListing_2 = new Listing(); - private final FixedIncomeSecurity testFixedIncomeSecurity_1 = new FixedIncomeSecurity(); private final FixedIncomeSecurity testFixedIncomeSecurity_2 = new FixedIncomeSecurity(); - private final TradingClearingRegistry testTradingClearingRegistry_1 = new TradingClearingRegistry(); private final TradingClearingRegistry testTradingClearingRegistry_2 = new TradingClearingRegistry(); - - private static File outFolder; - + private final PaymentInstruction testPaymentInstruction_1 = new PaymentInstruction(); + private final PaymentInstruction testPaymentInstruction_2 = new PaymentInstruction(); + private final Statement testStatement_1 = new Statement(); + private final Statement testStatement_2 = new Statement(); + private final STrades testSTrade = new STrades(); + private final Instant TEST_EXCHANGE_EXECUTION_TIME_1 = Instant.ofEpochMilli(777777777777L); + private final Instant TEST_EXCHANGE_EXECUTION_TIME_2 = Instant.ofEpochMilli(888888888888L); + private final LocalDate TEST_TRADING_DATE_1 = LocalDate.now().minus(10, ChronoUnit.DAYS); + private final LocalDate TEST_TRADING_DATE_2 = LocalDate.now().minus(20, ChronoUnit.DAYS); + private final String TEST_MARKET_1 = Market.fond.getKey(); + private final String TEST_MARKET_2 = Market.mkrs.getKey(); + private final BigDecimal TEST_PRICE_1 = BigDecimal.valueOf(77L); + private final BigDecimal TEST_PRICE_2 = BigDecimal.valueOf(88L); + private final BigDecimal TEST_LOTS_1 = BigDecimal.valueOf(777L); + private final BigDecimal TEST_LOTS_2 = BigDecimal.valueOf(888L); + private final BigDecimal TEST_QUANTITY_1 = BigDecimal.valueOf(7777L); + private final BigDecimal TEST_QUANTITY_2 = BigDecimal.valueOf(8888L); + private final BigDecimal TEST_INTEREST_AMOUNT_1 = BigDecimal.valueOf(77777L); + private final BigDecimal TEST_INTEREST_AMOUNT_2 = BigDecimal.valueOf(88888L); + private final String TEST_SIDE_1 = Side.SELL.getKey(); + private final String TEST_SIDE_2 = Side.BUY.getKey(); + private final String TEST_COVERAGE_STATUS_1 = Allowed.DENIED.getKey(); + private final String TEST_COVERAGE_STATUS_2 = Allowed.ALLOWED.getKey(); + private final Long TEST_SESSION_ID_1 = 10007L; + private final Long TEST_SESSION_ID_2 = 10008L; + private final Long TEST_SESSION_ID_3 = 10009L; + private final LocalDate TEST_CLEARING_DATE_1 = LocalDate.now().minus(30, ChronoUnit.DAYS); + private final LocalDate TEST_CLEARING_DATE_2 = LocalDate.now().minus(40, ChronoUnit.DAYS); + private final BigDecimal TEST_SETTLEMENT_AMOUNT = BigDecimal.valueOf(7777777L); + private final LocalDate TEST_SETTLEMENT_DATE = LocalDate.now().minus(22, ChronoUnit.DAYS); + private final Instant TEST_EXCHANGE_EXECUTION_MICROSECONDS = Instant.now().minus(777L, ChronoUnit.SECONDS); + private final BigDecimal TEST_FIRST_LEG_AMOUNT = BigDecimal.valueOf(1L); + private final BigDecimal TEST_SECOND_LEG_AMOUNT = BigDecimal.valueOf(2L); + private final LocalDate TEST_FIRST_LEG_SETTLEMENT_DATE = LocalDate.now().minus(1, ChronoUnit.DAYS); + private final LocalDate TEST_SECOND_LEG_SETTLEMENT_DATE = LocalDate.now().minus(2, ChronoUnit.DAYS); + private final BigDecimal TEST_LOT_SIZE_1 = BigDecimal.valueOf(12L); + private final BigDecimal TEST_LOT_SIZE_2 = BigDecimal.valueOf(34L); + private final BigDecimal TEST_NOMINAL_1 = BigDecimal.valueOf(333L); + private final BigDecimal TEST_NOMINAL_2 = BigDecimal.valueOf(444L); + private final BigDecimal TEST_COUPON_1 = BigDecimal.valueOf(3333L); + private final BigDecimal TEST_COUPON_2 = BigDecimal.valueOf(4444L); + private final BigDecimal TEST_OPEN_BALANCE_1 = BigDecimal.valueOf(3L); + private final BigDecimal TEST_CLOSE_BALANCE_1 = BigDecimal.valueOf(780L); + private final BigDecimal TEST_OPEN_BALANCE_2 = BigDecimal.valueOf(2L); + private final BigDecimal TEST_CLOSE_BALANCE_2 = BigDecimal.valueOf(890L); + private final BigDecimal TEST_CREDIT_1 = BigDecimal.valueOf(777777L); + private final BigDecimal TEST_CREDIT_2 = BigDecimal.valueOf(999999L); + private final BigDecimal TEST_DEBIT_1 = BigDecimal.valueOf(77777L); + private final BigDecimal TEST_DEBIT_2 = BigDecimal.valueOf(99999L); + private final LocalDate TEST_START_CLEARING_DATE = LocalDate.now(); + private final LocalDate TEST_END_CLEARING_DATE = LocalDate.now(); + private Imdg executionFondImdg; + private Imdg executionDepositImdg; + private Imdg companyImdg; + private Imdg registryImdg; + private Imdg listingImdg; + private Imdg fixedIncomeSecurityImdg; + private Imdg tradingClearingRegistryImdg; + private Imdg paymentInstructionImdg; + private Imdg statementImdg; + private Imdg sTradeImdg; @Autowired private ReportService reportService; - @Autowired @Qualifier("hazelcastServiceTest") private ImdgProvider imdgProvider; - @Captor private ArgumentCaptor producerRecord; - @SpyBean private MockProducer producer; + private static int reportRequestCnt = 0; + private static int reportRequestWithSessionIdCnt = 0; + private static int reportRequestWithSessionIdListCnt = 0; + private static int reportRequestWithPeriodCnt = 0; + @BeforeAll public static void createTestFolder() { outFolder = new File("out"); @@ -128,7 +181,9 @@ public class ReportServiceTest { } @Test - public void createReportTest_OPERATIONAL_LIABILITIES_CLAIMS() throws InterruptedException, IOException, CsvValidationException { + @Order(1) + public void createReportTest_OPERATIONAL_LIABILITIES_CLAIMS() throws IOException, CsvValidationException { + clearTestDir(); final Long oldSessionIdDeposit = testExecutionDeposit.getSessionId(); final Long oldSessionIdFond = testExecutionFond.getSessionId(); @@ -145,17 +200,15 @@ public class ReportServiceTest { TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, - 0, + reportRequestWithSessionIdCnt++, 0, jsonString); TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); File outFile = outFolder.listFiles()[0]; - File expectedFile = new File(getClass().getClassLoader().getResource("operational_liabilities_claims_expected.csv").getFile()); - compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time")); - - System.out.println("hello"); + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/operational_liabilities_claims_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time", "doc_date", "tr_date", "clearing_date", "tr_execDate", "clearing_time", "repaym_date")); testExecutionDeposit.setSessionId(oldSessionIdDeposit); testExecutionFond.setSessionId(oldSessionIdFond); @@ -165,7 +218,405 @@ public class ReportServiceTest { outFile.delete(); } - public void compareCSVFiles(File expectedFile, File actualFile, List columnsForSkip) throws IOException, CsvValidationException { + @Test + @Order(2) + public void createReportTest_PERIOD_LIABILITIES_CLAIMS() throws CsvValidationException, IOException { + clearTestDir(); + ReportRequestWithSessionIdList reportRequestWithPeriod = new ReportRequestWithSessionIdList(); + reportRequestWithPeriod.setReportId(ReportType.PERIOD_LIABILITIES_CLAIMS.getKey()); + reportRequestWithPeriod.setSessionIdList(Arrays.asList(testExecutionDeposit.getSessionId(), testExecutionFond.getSessionId())); + + String jsonString = TestUtils.getJsonStringForSystem(reportRequestWithPeriod, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID_LIST, + reportRequestWithSessionIdListCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles()[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/period_liabilities_claims_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time", "doc_date", "tr_date", "clearing_date", "tr_execDate", "clearing_time", "repaym_date")); + + outFile.delete(); + } + + @Test + @Order(3) + public void createReportTest_SUMMARY_LIABILITIES_CLAIMS() throws CsvValidationException, IOException { + clearTestDir(); + ReportRequest reportRequest = new ReportRequest(); + reportRequest.setReportId(ReportType.SUMMARY_LIABILITIES_CLAIMS.getKey()); + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.DESTINATION_CREATE_REPORT, + reportRequestCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles()[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/summary_liabilities_claims_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time", "doc_date", "tr_date", "clearing_date", "tr_execDate", "clearing_time", "repaym_date")); + + outFile.delete(); + } + + @Test + @Order(4) + public void createReportTest_OPERATIONAL_MONEY_CHANGE() throws CsvValidationException, IOException { + clearTestDir(); + final Long oldRegistrySessionId_1 = testRegistry_1.getSessionId(); + final Long oldRegistrySessionId_2 = testRegistry_2.getSessionId(); + testRegistry_1.setSessionId(TEST_SESSION_ID_3); + testRegistry_2.setSessionId(TEST_SESSION_ID_3); + registryImdg.update(testRegistry_1); + registryImdg.update(testRegistry_2); + + ReportRequestWithSessionId reportRequest = new ReportRequestWithSessionId(); + reportRequest.setReportId(ReportType.OPERATIONAL_MONEY_CHANGE.getKey()); + reportRequest.setSessionId(TEST_SESSION_ID_3); + + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + reportRequestWithSessionIdCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles()[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/operational_money_change_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time", "doc_date", "add_time", "withdraw_time")); + + testRegistry_1.setSessionId(oldRegistrySessionId_1); + testRegistry_2.setSessionId(oldRegistrySessionId_2); + registryImdg.update(testRegistry_1); + registryImdg.update(testRegistry_2); + outFile.delete(); + } + + @Test + @Order(5) + public void createReportTest_PERIOD_MONEY_CHANGE() throws CsvValidationException, IOException { + clearTestDir(); + ReportRequestWithPeriod reportRequest = new ReportRequestWithPeriod(); + reportRequest.setReportId(ReportType.PERIOD_MONEY_CHANGE.getKey()); + reportRequest.setStartDate(TEST_START_CLEARING_DATE); + reportRequest.setEndDate(TEST_END_CLEARING_DATE); + + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.DESTINATION_CREATE_REPORT_FOR_PERIOD, + reportRequestWithPeriodCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles()[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/period_money_change_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time", "doc_date", "add_time", "withdraw_time")); + + outFile.delete(); + } + + @Test + @Order(6) + public void createReportTest_SUMMARY_MONEY_CHANGE() throws CsvValidationException, IOException { + clearTestDir(); + ReportRequest reportRequest = new ReportRequest(); + reportRequest.setReportId(ReportType.SUMMARY_MONEY_CHANGE.getKey()); + TestUtils.clearAllInImdg(registryImdg); + registryImdg.insert(testRegistry_1); + registryImdg.insert(testRegistry_2); + + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.DESTINATION_CREATE_REPORT, + reportRequestCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles()[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/summary_money_change_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time", "doc_date", "add_time", "withdraw_time")); + + registryImdg.insert(testRegistryForCompanyId_1); + registryImdg.insert(testRegistryForCompanyId_2); + registryImdg.insert(tm_tRegistry_1); + registryImdg.insert(om_tRegistry_1); + registryImdg.insert(ts_tRegistry_1); + registryImdg.insert(os_tRegistry_1); + registryImdg.insert(tm_tRegistry_2); + registryImdg.insert(om_tRegistry_2); + registryImdg.insert(ts_tRegistry_2); + registryImdg.insert(os_tRegistry_2); + registryImdg.insert(testRegistry_1); + registryImdg.insert(testRegistry_2); + outFile.delete(); + } + + @Test + @Order(7) + public void createReportTest_EXECUTED_DEAL_REPORT_INFTYPE_1() throws CsvValidationException, IOException { + clearTestDir(); + File expectedEmptyFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_empty_expected.csv").getFile()); + + ReportRequestWithSessionId reportRequest = new ReportRequestWithSessionId(); + reportRequest.setReportId(ReportType.EXECUTED_DEAL_REPORT.getKey()); + reportRequest.setSessionId(TEST_SESSION_ID_3); + + final Long oldExecutionFondSessionId = testExecutionFond.getSessionId(); + final LocalDate oldExecutionFondTradingDate = testExecutionFond.getTradingDate(); + final LocalDate oldExecutionFondSettlementDate = testExecutionFond.getSettlementDate(); + final String oldExecutionFondCoverageStatus = testExecutionFond.getCoverageStatus(); + + testExecutionFond.setSessionId(TEST_SESSION_ID_3); + executionFondImdg.update(testExecutionFond); + + // TEST INFTYPE_1 + testExecutionFond.setTradingDate(LocalDate.now().minus(10, ChronoUnit.DAYS)); + testExecutionFond.setSettlementDate(LocalDate.now()); + testExecutionFond.setCoverageStatus(Allowed.ALLOWED.getKey()); + executionFondImdg.update(testExecutionFond); + + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + reportRequestWithSessionIdCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_1"))[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_INFTYPE_1_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate")); + + for (File file : outFolder.listFiles()) { + if (!outFile.getName().equalsIgnoreCase(file.getName())) { + compareCSVFiles(expectedEmptyFile, file, null); + } + FileUtils.delete(file); + } + + testExecutionFond.setSessionId(oldExecutionFondSessionId); + testExecutionFond.setTradingDate(oldExecutionFondTradingDate); + testExecutionFond.setSettlementDate(oldExecutionFondSettlementDate); + testExecutionFond.setCoverageStatus(oldExecutionFondCoverageStatus); + executionFondImdg.update(testExecutionFond); + } + + @Test + @Order(8) + public void createReportTest_EXECUTED_DEAL_REPORT_INFTYPE_2() throws CsvValidationException, IOException { + clearTestDir(); + File expectedEmptyFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_empty_expected.csv").getFile()); + + ReportRequestWithSessionId reportRequest = new ReportRequestWithSessionId(); + reportRequest.setReportId(ReportType.EXECUTED_DEAL_REPORT.getKey()); + reportRequest.setSessionId(TEST_SESSION_ID_3); + + final Long oldExecutionFondSessionId = testExecutionFond.getSessionId(); + final LocalDate oldExecutionFondTradingDate = testExecutionFond.getTradingDate(); + final LocalDate oldExecutionFondSettlementDate = testExecutionFond.getSettlementDate(); + final String oldExecutionFondCoverageStatus = testExecutionFond.getCoverageStatus(); + + testExecutionFond.setSessionId(TEST_SESSION_ID_3); + executionFondImdg.update(testExecutionFond); + + // TEST INFTYPE_2 + testExecutionFond.setTradingDate(LocalDate.now()); + testExecutionFond.setSettlementDate(LocalDate.now()); + testExecutionFond.setCoverageStatus(Allowed.ALLOWED.getKey()); + executionFondImdg.update(testExecutionFond); + + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + reportRequestWithSessionIdCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_2"))[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_INFTYPE_2_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate")); + + for (File file : outFolder.listFiles()) { + if (!outFile.getName().equalsIgnoreCase(file.getName())) { + compareCSVFiles(expectedEmptyFile, file, null); + } + FileUtils.delete(file); + } + + testExecutionFond.setSessionId(oldExecutionFondSessionId); + testExecutionFond.setTradingDate(oldExecutionFondTradingDate); + testExecutionFond.setSettlementDate(oldExecutionFondSettlementDate); + testExecutionFond.setCoverageStatus(oldExecutionFondCoverageStatus); + executionFondImdg.update(testExecutionFond); + } + + @Test + @Order(9) + public void createReportTest_EXECUTED_DEAL_REPORT_INFTYPE_3() throws CsvValidationException, IOException { + clearTestDir(); + File expectedEmptyFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_empty_expected.csv").getFile()); + + ReportRequestWithSessionId reportRequest = new ReportRequestWithSessionId(); + reportRequest.setReportId(ReportType.EXECUTED_DEAL_REPORT.getKey()); + reportRequest.setSessionId(TEST_SESSION_ID_3); + + final Long oldExecutionFondSessionId = testExecutionFond.getSessionId(); + final LocalDate oldExecutionFondTradingDate = testExecutionFond.getTradingDate(); + final LocalDate oldExecutionFondSettlementDate = testExecutionFond.getSettlementDate(); + final String oldExecutionFondCoverageStatus = testExecutionFond.getCoverageStatus(); + + // TEST INFTYPE_3 + testExecutionFond.setSettlementDate(LocalDate.now().plus(10, ChronoUnit.DAYS)); + testExecutionFond.setTradingDate(LocalDate.now().plus(10, ChronoUnit.DAYS)); + testExecutionFond.setCoverageStatus(Allowed.ALLOWED.getKey()); + executionFondImdg.update(testExecutionFond); + + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + reportRequestWithSessionIdCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_3"))[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_INFTYPE_3_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate")); + + for (File file : outFolder.listFiles()) { + if (!outFile.getName().equalsIgnoreCase(file.getName())) { + compareCSVFiles(expectedEmptyFile, file, null); + } + FileUtils.delete(file); + } + + testExecutionFond.setSessionId(oldExecutionFondSessionId); + testExecutionFond.setTradingDate(oldExecutionFondTradingDate); + testExecutionFond.setSettlementDate(oldExecutionFondSettlementDate); + testExecutionFond.setCoverageStatus(oldExecutionFondCoverageStatus); + executionFondImdg.update(testExecutionFond); + } + + @Test + @Order(10) + public void createReportTest_EXECUTED_DEAL_REPORT_INFTYPE_4() throws CsvValidationException, IOException { + clearTestDir(); + File expectedEmptyFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_empty_expected.csv").getFile()); + + ReportRequestWithSessionId reportRequest = new ReportRequestWithSessionId(); + reportRequest.setReportId(ReportType.EXECUTED_DEAL_REPORT.getKey()); + reportRequest.setSessionId(TEST_SESSION_ID_3); + + final Long oldExecutionFondSessionId = testExecutionFond.getSessionId(); + final LocalDate oldExecutionFondTradingDate = testExecutionFond.getTradingDate(); + final LocalDate oldExecutionFondSettlementDate = testExecutionFond.getSettlementDate(); + final String oldExecutionFondCoverageStatus = testExecutionFond.getCoverageStatus(); + + // TEST INFTYPE_4 + testExecutionFond.setSessionId(TEST_SESSION_ID_1); + testExecutionFond.setSettlementDate(LocalDate.now()); + testExecutionFond.setTradingDate(LocalDate.now().plus(10, ChronoUnit.DAYS)); + testExecutionFond.setCoverageStatus(Allowed.DENIED.getKey()); + executionFondImdg.update(testExecutionFond); + + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + reportRequestWithSessionIdCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_4"))[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_INFTYPE_4_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate")); + + for (File file : outFolder.listFiles()) { + if (!outFile.getName().equalsIgnoreCase(file.getName())) { + compareCSVFiles(expectedEmptyFile, file, null); + } + FileUtils.delete(file); + } + + testExecutionFond.setSessionId(oldExecutionFondSessionId); + testExecutionFond.setTradingDate(oldExecutionFondTradingDate); + testExecutionFond.setSettlementDate(oldExecutionFondSettlementDate); + testExecutionFond.setCoverageStatus(oldExecutionFondCoverageStatus); + executionFondImdg.update(testExecutionFond); + } + + @Test + @Order(11) + public void createReportTest_UNFULFILLED_DEAL_REPORT() throws IOException, CsvValidationException { + clearTestDir(); + + ReportRequestWithSessionId reportRequest = new ReportRequestWithSessionId(); + reportRequest.setReportId(ReportType.UNFULFILLED_DEAL_REPORT.getKey()); + reportRequest.setSessionId(TEST_SESSION_ID_3); + + final Long oldExecutionFondSessionId = testExecutionFond.getSessionId(); + final String oldExecutionFondCoverageStatus = testExecutionFond.getCoverageStatus(); + + testExecutionFond.setSessionId(TEST_SESSION_ID_3); + testExecutionFond.setCoverageStatus(Allowed.DENIED.getKey()); + executionFondImdg.update(testExecutionFond); + + final String oldSTradeSettleCode = testSTrade.getSettleCode(); + final String oldSTradeOperation = testSTrade.getOperation(); + testSTrade.setSettleCode(testExecutionFond.getSettlementCode()); + testSTrade.setOperation(testExecutionFond.getSide()); + sTradeImdg.update(testSTrade); + + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + reportRequestWithSessionIdCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles()[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/unfulfilled_deal_report_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate")); + + testExecutionFond.setSessionId(oldExecutionFondSessionId); + testExecutionFond.setCoverageStatus(oldExecutionFondCoverageStatus); + executionFondImdg.update(testExecutionFond); + + testSTrade.setSettleCode(oldSTradeSettleCode); + testSTrade.setOperation(oldSTradeOperation); + sTradeImdg.update(testSTrade); + } + + + private void compareCSVFiles(File expectedFile, File actualFile, List columnsForSkip) throws IOException, CsvValidationException { if (columnsForSkip == null) columnsForSkip = Collections.emptyList(); CSVParser csvParser = new CSVParserBuilder().withSeparator(',').withQuoteChar('\"').build(); CSVReader expectedCSVReader = new CSVReaderBuilder(new FileReader(expectedFile)).withCSVParser(csvParser).build(); @@ -199,7 +650,7 @@ public class ReportServiceTest { int actualIdx = actualValueForColumn.get(expectedHeader); String expected = expectedLines[expectedIdx]; String actual = actualLines[actualIdx]; - assertEquals(expected, actual); + assertEquals(expected, actual, expectedHeader); } } while (true); @@ -207,14 +658,17 @@ public class ReportServiceTest { actualCSVReader.close(); } - @PostConstruct private void init() { ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId(); + Long TEST_EXECUTION_FOND_ID = 888L; + testExecutionFond.setId(TEST_EXECUTION_FOND_ID); + Long TEST_EXCHANGE_EXECUTION_ID_1 = 777L; testExecutionFond.setExchangeExecutionId(TEST_EXCHANGE_EXECUTION_ID_1); testExecutionFond.setExchangeExecutionTime(TEST_EXCHANGE_EXECUTION_TIME_1); testExecutionFond.setTradingDate(TEST_TRADING_DATE_1); + Long TEST_TRADING_CLEARING_REGISTRY_ID_1 = 777L; testExecutionFond.setTradingClearingRegistryId(TEST_TRADING_CLEARING_REGISTRY_ID_1); testExecutionFond.setMarket(TEST_MARKET_1); testExecutionFond.setPrice(TEST_PRICE_1); @@ -222,27 +676,43 @@ public class ReportServiceTest { testExecutionFond.setQuantity(TEST_QUANTITY_1); testExecutionFond.setInterestAmount(TEST_INTEREST_AMOUNT_1); testExecutionFond.setSide(TEST_SIDE_1); + String TEST_SETTLEMENT_CURRENCY_1 = "test-settlement-currency-1"; testExecutionFond.setSettlementCurrency(TEST_SETTLEMENT_CURRENCY_1); + Long TEST_COMPANY_ID_1 = 1007L; testExecutionFond.setCompanyId(TEST_COMPANY_ID_1); + Long TEST_DURATION_1 = 2007L; testExecutionFond.setDuration(TEST_DURATION_1); + String TEST_SECURITY_FULL_NAME_1 = "test-security-full-name-1"; testExecutionFond.setSecurityFullName(TEST_SECURITY_FULL_NAME_1); + String TEST_SECURITY_SYMBOL_1 = "test-security-symbol-1"; testExecutionFond.setSecuritySymbol(TEST_SECURITY_SYMBOL_1); + Long TEST_SECURITY_ID_1 = 3007L; testExecutionFond.setSecurityId(TEST_SECURITY_ID_1); + Long TEST_COUNTER_PARTY_ID_1 = 4007L; testExecutionFond.setCounterPartyId(TEST_COUNTER_PARTY_ID_1); testExecutionFond.setCoverageStatus(TEST_COVERAGE_STATUS_1); testExecutionFond.setSessionId(TEST_SESSION_ID_1); testExecutionFond.setClearingDate(TEST_CLEARING_DATE_1); + Long TEST_EXCHANGE_ORDER_ID = 20007L; testExecutionFond.setExchangeOrderId(TEST_EXCHANGE_ORDER_ID); testExecutionFond.setSettlementAmount(TEST_SETTLEMENT_AMOUNT); + String TEST_COMMENT = "test-comment"; testExecutionFond.setComment(TEST_COMMENT); + Long TEST_CLIENT_CODE_ID = 222222L; testExecutionFond.setClientCodeId(TEST_CLIENT_CODE_ID); + String TEST_SETTLEMENT_CODE = "test-settlement-code"; testExecutionFond.setSettlementCode(TEST_SETTLEMENT_CODE); testExecutionFond.setSettlementDate(TEST_SETTLEMENT_DATE); testExecutionFond.setExchangeExecutionMicroseconds(TEST_EXCHANGE_EXECUTION_MICROSECONDS); + testExecutionFond.setCreated(Instant.now()); + Long TEST_EXECUTION_DEPOSIT_ID = 777L; + testExecutionDeposit.setId(TEST_EXECUTION_DEPOSIT_ID); + Long TEST_EXCHANGE_EXECUTION_ID_2 = 888L; testExecutionDeposit.setExchangeExecutionId(TEST_EXCHANGE_EXECUTION_ID_2); testExecutionDeposit.setExchangeExecutionTime(TEST_EXCHANGE_EXECUTION_TIME_2); testExecutionDeposit.setTradingDate(TEST_TRADING_DATE_2); + Long TEST_TRADING_CLEARING_REGISTRY_ID_2 = 888L; testExecutionDeposit.setTradingClearingRegistryId(TEST_TRADING_CLEARING_REGISTRY_ID_2); testExecutionDeposit.setMarket(TEST_MARKET_2); testExecutionDeposit.setPrice(TEST_PRICE_2); @@ -250,12 +720,19 @@ public class ReportServiceTest { testExecutionDeposit.setQuantity(TEST_QUANTITY_2); testExecutionDeposit.setInterestAmount(TEST_INTEREST_AMOUNT_2); testExecutionDeposit.setSide(TEST_SIDE_2); + String TEST_SETTLEMENT_CURRENCY_2 = "test-settlement-currency-2"; testExecutionDeposit.setSettlementCurrency(TEST_SETTLEMENT_CURRENCY_2); + Long TEST_COMPANY_ID_2 = 1008L; testExecutionDeposit.setCompanyId(TEST_COMPANY_ID_2); + Long TEST_DURATION_2 = 2008L; testExecutionDeposit.setDuration(TEST_DURATION_2); + String TEST_SECURITY_FULL_NAME_2 = "test-security-full-name-2"; testExecutionDeposit.setSecurityFullName(TEST_SECURITY_FULL_NAME_2); + String TEST_SECURITY_SYMBOL_2 = "test-security-symbol-2"; testExecutionDeposit.setSecuritySymbol(TEST_SECURITY_SYMBOL_2); + Long TEST_SECURITY_ID_2 = 3008L; testExecutionDeposit.setSecurityId(TEST_SECURITY_ID_2); + Long TEST_COUNTER_PARTY_ID_2 = 4008L; testExecutionDeposit.setCounterPartyId(TEST_COUNTER_PARTY_ID_2); testExecutionDeposit.setCoverageStatus(TEST_COVERAGE_STATUS_2); testExecutionDeposit.setSessionId(TEST_SESSION_ID_2); @@ -264,8 +741,11 @@ public class ReportServiceTest { testExecutionDeposit.setSecondLegAmount(TEST_SECOND_LEG_AMOUNT); testExecutionDeposit.setFirstLegSettlementDate(TEST_FIRST_LEG_SETTLEMENT_DATE); testExecutionDeposit.setSecondLegSettlementDate(TEST_SECOND_LEG_SETTLEMENT_DATE); + String TEST_FIRST_LEG_SETTLEMENT_CODE = "test-first-leg-settlement-code"; testExecutionDeposit.setFirstLegSettlementCode(TEST_FIRST_LEG_SETTLEMENT_CODE); + String TEST_SECOND_LEG_SETTLEMENT_CODE = "test-second-leg-settlement-code"; testExecutionDeposit.setSecondLegSettlementCode(TEST_SECOND_LEG_SETTLEMENT_CODE); + String TEST_CONTRACT = "test_contract"; testExecutionDeposit.setContract(TEST_CONTRACT); executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); @@ -276,9 +756,11 @@ public class ReportServiceTest { testCompany_1.setWorkflowStatus(WorkflowStatus.Active.getKey()); testCompany_1.setId(TEST_COMPANY_ID_1); + String TEST_COMPANY_FULLNAME_1 = "test-company-fullname-1"; testCompany_1.setFullName(TEST_COMPANY_FULLNAME_1); testCompany_2.setWorkflowStatus(WorkflowStatus.Active.getKey()); testCompany_2.setId(TEST_COMPANY_ID_2); + String TEST_COMPANY_FULLNAME_2 = "test-company-fullname-2"; testCompany_2.setFullName(TEST_COMPANY_FULLNAME_2); testCompanyHouse.setId(1L); testCompanyHouse.setFullName("COMPANY_HOUSE"); @@ -289,36 +771,83 @@ public class ReportServiceTest { registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + + Long TEST_REGISTRY_ID_1 = 999L; + testRegistry_1.setId(TEST_REGISTRY_ID_1); + testRegistry_1.setCompanyId(TEST_COMPANY_ID_1); + testRegistry_1.setSecurityId(TEST_SECURITY_ID_1); + Long TEST_PAYMT_ID_1 = 222L; + testRegistry_1.setPaymentId(TEST_PAYMT_ID_1); + String TEST_TRADING_CLEARING_REGISTRY_1 = "test-trading-clearing-registry-1"; + testRegistry_1.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_1); + Long TEST_MONEY_ACCOUNT_1 = 11L; + testRegistry_1.setAccountId(TEST_MONEY_ACCOUNT_1); + String TEST_REGISTRY_CODE_1 = "test-registry-code-1"; + testRegistry_1.setRegistryCode(TEST_REGISTRY_CODE_1); + testRegistry_1.setOpenBalance(TEST_OPEN_BALANCE_1); + testRegistry_1.setCloseBalance(TEST_CLOSE_BALANCE_1); + testRegistry_1.setCredit(TEST_CREDIT_1); + testRegistry_1.setDebit(TEST_DEBIT_1); + testRegistry_1.setClearingDate(TEST_START_CLEARING_DATE); + testRegistry_1.setUpdated(Instant.now()); + Long TEST_REGISTRY_ID_2 = 666L; + testRegistry_2.setId(TEST_REGISTRY_ID_2); + testRegistry_2.setCompanyId(TEST_COMPANY_ID_2); + testRegistry_2.setSecurityId(TEST_SECURITY_ID_2); + Long TEST_PAYMT_ID_2 = 333L; + testRegistry_2.setPaymentId(TEST_PAYMT_ID_2); + String TEST_TRADING_CLEARING_REGISTRY_2 = "test-trading-clearing-registry-2"; + testRegistry_2.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_2); + Long TEST_MONEY_ACCOUNT_2 = 12L; + testRegistry_2.setAccountId(TEST_MONEY_ACCOUNT_2); + String TEST_REGISTRY_CODE_2 = "test-registry-code-2"; + testRegistry_2.setRegistryCode(TEST_REGISTRY_CODE_2); + testRegistry_2.setOpenBalance(TEST_OPEN_BALANCE_2); + testRegistry_2.setCloseBalance(TEST_CLOSE_BALANCE_2); + testRegistry_2.setCredit(TEST_CREDIT_2); + testRegistry_2.setDebit(TEST_DEBIT_2); + testRegistry_2.setClearingDate(TEST_END_CLEARING_DATE); + testRegistry_2.setUpdated(Instant.now()); testRegistryForCompanyId_1.setCompanyId(TEST_COMPANY_ID_1); testRegistryForCompanyId_1.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_1); + testRegistryForCompanyId_1.setUpdated(Instant.now()); testRegistryForCompanyId_2.setCompanyId(TEST_COMPANY_ID_2); testRegistryForCompanyId_2.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_2); - registryImdg.insert(testRegistryForCompanyId_1); - registryImdg.insert(testRegistryForCompanyId_2); + testRegistryForCompanyId_2.setUpdated(Instant.now()); tm_tRegistry_1.setRegistryCode("TM_T"); tm_tRegistry_1.setBalance(BigDecimal.valueOf(779L)); + tm_tRegistry_1.setUpdated(Instant.now()); om_tRegistry_1.setRegistryCode("OM_T"); om_tRegistry_1.setBalance(BigDecimal.valueOf(2L)); + om_tRegistry_1.setUpdated(Instant.now()); ts_tRegistry_1.setRegistryCode("TS_T"); ts_tRegistry_1.setBalance(BigDecimal.valueOf(889L)); + ts_tRegistry_1.setUpdated(Instant.now()); os_tRegistry_1.setRegistryCode("OS_T"); os_tRegistry_1.setBalance(BigDecimal.valueOf(1L)); + os_tRegistry_1.setUpdated(Instant.now()); tm_tRegistry_1.setSessionId(TEST_SESSION_ID_1); om_tRegistry_1.setSessionId(TEST_SESSION_ID_1); ts_tRegistry_1.setSessionId(TEST_SESSION_ID_1); os_tRegistry_1.setSessionId(TEST_SESSION_ID_1); tm_tRegistry_2.setRegistryCode("TM_T"); tm_tRegistry_2.setBalance(BigDecimal.valueOf(779L)); + tm_tRegistry_2.setUpdated(Instant.now()); om_tRegistry_2.setRegistryCode("OM_T"); om_tRegistry_2.setBalance(BigDecimal.valueOf(2L)); + om_tRegistry_2.setUpdated(Instant.now()); ts_tRegistry_2.setRegistryCode("TS_T"); ts_tRegistry_2.setBalance(BigDecimal.valueOf(889L)); + ts_tRegistry_2.setUpdated(Instant.now()); os_tRegistry_2.setRegistryCode("OS_T"); os_tRegistry_2.setBalance(BigDecimal.valueOf(1L)); + os_tRegistry_2.setUpdated(Instant.now()); tm_tRegistry_2.setSessionId(TEST_SESSION_ID_2); om_tRegistry_2.setSessionId(TEST_SESSION_ID_2); ts_tRegistry_2.setSessionId(TEST_SESSION_ID_2); os_tRegistry_2.setSessionId(TEST_SESSION_ID_2); + registryImdg.insert(testRegistryForCompanyId_1); + registryImdg.insert(testRegistryForCompanyId_2); registryImdg.insert(tm_tRegistry_1); registryImdg.insert(om_tRegistry_1); registryImdg.insert(ts_tRegistry_1); @@ -327,12 +856,18 @@ public class ReportServiceTest { registryImdg.insert(om_tRegistry_2); registryImdg.insert(ts_tRegistry_2); registryImdg.insert(os_tRegistry_2); + registryImdg.insert(testRegistry_1); + registryImdg.insert(testRegistry_2); listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); testListing_1.setSecurityId(TEST_SECURITY_ID_1); testListing_1.setLotSize(TEST_LOT_SIZE_1); + String TEST_TRADING_CURRENCY_1 = "test-trading-currency-1"; + testListing_1.setTradingCurrency(TEST_TRADING_CURRENCY_1); testListing_2.setSecurityId(TEST_SECURITY_ID_2); testListing_2.setLotSize(TEST_LOT_SIZE_2); + String TEST_TRADING_CURRENCY_2 = "test-trading-currency-2"; + testListing_2.setTradingCurrency(TEST_TRADING_CURRENCY_2); listingImdg.insert(testListing_1); listingImdg.insert(testListing_2); @@ -349,81 +884,45 @@ public class ReportServiceTest { tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); testTradingClearingRegistry_1.setId(TEST_TRADING_CLEARING_REGISTRY_ID_1); testTradingClearingRegistry_1.setMoneyAccountId(TEST_MONEY_ACCOUNT_1); + Long TEST_DEPO_ACCOUNT_1 = 13L; testTradingClearingRegistry_1.setDepoAccountId(TEST_DEPO_ACCOUNT_1); tradingClearingRegistryImdg.insert(testTradingClearingRegistry_1); testTradingClearingRegistry_2.setId(TEST_TRADING_CLEARING_REGISTRY_ID_2); testTradingClearingRegistry_2.setMoneyAccountId(TEST_MONEY_ACCOUNT_2); + Long TEST_DEPO_ACCOUNT_2 = 14L; testTradingClearingRegistry_2.setDepoAccountId(TEST_DEPO_ACCOUNT_2); tradingClearingRegistryImdg.insert(testTradingClearingRegistry_2); + + statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class); + testStatement_1.setAddresseeId(TEST_COMPANY_ID_1); + testStatement_1.setCreated(Instant.now()); + testStatement_2.setAddresseeId(TEST_COMPANY_ID_2); + testStatement_2.setCreated(Instant.now()); + statementImdg.insert(testStatement_1); + statementImdg.insert(testStatement_2); + + paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class); + testPaymentInstruction_1.setId(TEST_PAYMT_ID_1); + testPaymentInstruction_1.setCreditLeg_direction(InOutDirection.out.getKey()); + testPaymentInstruction_1.setPaymentDate(Instant.now()); + testPaymentInstruction_2.setId(TEST_PAYMT_ID_2); + testPaymentInstruction_2.setCreditLeg_direction(InOutDirection.out.getKey()); + testPaymentInstruction_2.setPaymentDate(Instant.now()); + paymentInstructionImdg.insert(testPaymentInstruction_1); + paymentInstructionImdg.insert(testPaymentInstruction_2); + + sTradeImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class); + testSTrade.setTradeNum(testExecutionFond.getExchangeExecutionId()); + testSTrade.setOperation(testExecutionFond.getSide()); + String TEST_SETTLE_CODE = "test-settle-code"; + testSTrade.setSettleCode(TEST_SETTLE_CODE); + String TEST_CLASS_CODE = "test-class-code"; + testSTrade.setClassCode(TEST_CLASS_CODE); + sTradeImdg.insert(testSTrade); } - private final Long TEST_EXCHANGE_EXECUTION_ID_1 = 777L; - private final Long TEST_EXCHANGE_EXECUTION_ID_2 = 888L; - private final Instant TEST_EXCHANGE_EXECUTION_TIME_1 = Instant.ofEpochMilli(777777777777L); - private final Instant TEST_EXCHANGE_EXECUTION_TIME_2 = Instant.ofEpochMilli(888888888888L); - private final LocalDate TEST_TRADING_DATE_1 = LocalDate.now().minus(10, ChronoUnit.DAYS); - private final LocalDate TEST_TRADING_DATE_2 = LocalDate.now().minus(20, ChronoUnit.DAYS); - private final Long TEST_TRADING_CLEARING_REGISTRY_ID_1 = 777L; - private final Long TEST_TRADING_CLEARING_REGISTRY_ID_2 = 888L; - private final String TEST_MARKET_1 = Market.fond.getKey(); - private final String TEST_MARKET_2 = Market.mkrs.getKey(); - private final BigDecimal TEST_PRICE_1 = BigDecimal.valueOf(77L); - private final BigDecimal TEST_PRICE_2 = BigDecimal.valueOf(88L); - private final BigDecimal TEST_LOTS_1 = BigDecimal.valueOf(777L); - private final BigDecimal TEST_LOTS_2 = BigDecimal.valueOf(888L); - private final BigDecimal TEST_QUANTITY_1 = BigDecimal.valueOf(7777L); - private final BigDecimal TEST_QUANTITY_2 = BigDecimal.valueOf(8888L); - private final BigDecimal TEST_INTEREST_AMOUNT_1 = BigDecimal.valueOf(77777L); - private final BigDecimal TEST_INTEREST_AMOUNT_2 = BigDecimal.valueOf(88888L); - private final String TEST_SIDE_1 = Side.SELL.getKey(); - private final String TEST_SIDE_2 = Side.BUY.getKey(); - private final String TEST_SETTLEMENT_CURRENCY_1 = "test-settlement-currency-1"; - private final String TEST_SETTLEMENT_CURRENCY_2 = "test-settlement-currency-2"; - private final Long TEST_COMPANY_ID_1 = 1007L; - private final Long TEST_COMPANY_ID_2 = 1008L; - private final String TEST_COMPANY_FULLNAME_1 = "test-company-fullname-1"; - private final String TEST_COMPANY_FULLNAME_2 = "test-company-fullname-2"; - private final Long TEST_DURATION_1 = 2007L; - private final Long TEST_DURATION_2 = 2008L; - private final String TEST_SECURITY_FULL_NAME_1 = "test-security-full-name-1"; - private final String TEST_SECURITY_FULL_NAME_2 = "test-security-full-name-2"; - private final String TEST_SECURITY_SYMBOL_1 = "test-security-symbol-1"; - private final String TEST_SECURITY_SYMBOL_2 = "test-security-symbol-2"; - private final Long TEST_SECURITY_ID_1 = 3007L; - private final Long TEST_SECURITY_ID_2 = 3008L; - private final Long TEST_COUNTER_PARTY_ID_1 = 4007L; - private final Long TEST_COUNTER_PARTY_ID_2 = 4008L; - private final String TEST_COVERAGE_STATUS_1 = Allowed.ALLOWED.getKey(); - private final String TEST_COVERAGE_STATUS_2 = Allowed.DENIED.getKey(); - private final Long TEST_SESSION_ID_1 = 10007L; - private final Long TEST_SESSION_ID_2 = 10008L; - private final LocalDate TEST_CLEARING_DATE_1 = LocalDate.now().minus(30, ChronoUnit.DAYS); - private final LocalDate TEST_CLEARING_DATE_2 = LocalDate.now().minus(40, ChronoUnit.DAYS); - private final Long TEST_EXCHANGE_ORDER_ID = 20007L; - private final BigDecimal TEST_SETTLEMENT_AMOUNT = BigDecimal.valueOf(7777777L); - private final String TEST_COMMENT = "test-comment"; - private final Long TEST_CLIENT_CODE_ID = 222222L; - private final String TEST_SETTLEMENT_CODE = "test-settlement-code"; - private final LocalDate TEST_SETTLEMENT_DATE = LocalDate.now().minus(22, ChronoUnit.DAYS); - private final Instant TEST_EXCHANGE_EXECUTION_MICROSECONDS = Instant.now().minus(777L, ChronoUnit.SECONDS); - private final BigDecimal TEST_FIRST_LEG_AMOUNT = BigDecimal.valueOf(1L); - private final BigDecimal TEST_SECOND_LEG_AMOUNT = BigDecimal.valueOf(2L); - private final LocalDate TEST_FIRST_LEG_SETTLEMENT_DATE = LocalDate.now().minus(1, ChronoUnit.DAYS); - private final LocalDate TEST_SECOND_LEG_SETTLEMENT_DATE = LocalDate.now().minus(2, ChronoUnit.DAYS); - private final String TEST_FIRST_LEG_SETTLEMENT_CODE = "test-first-leg-settlement-code"; - private final String TEST_SECOND_LEG_SETTLEMENT_CODE = "test-second-leg-settlement-code"; - private final String TEST_CONTRACT = "test_contract"; - private final String TEST_TRADING_CLEARING_REGISTRY_1 = "test-trading-clearing-registry-1"; - private final String TEST_TRADING_CLEARING_REGISTRY_2 = "test-trading-clearing-registry-2"; - private final BigDecimal TEST_LOT_SIZE_1 = BigDecimal.valueOf(12L); - private final BigDecimal TEST_LOT_SIZE_2 = BigDecimal.valueOf(34L); - private final BigDecimal TEST_NOMINAL_1 = BigDecimal.valueOf(333L); - private final BigDecimal TEST_NOMINAL_2 = BigDecimal.valueOf(444L); - private final BigDecimal TEST_COUPON_1 = BigDecimal.valueOf(3333L); - private final BigDecimal TEST_COUPON_2 = BigDecimal.valueOf(4444L); - private final Long TEST_MONEY_ACCOUNT_1 = 11L; - private final Long TEST_MONEY_ACCOUNT_2 = 12L; - private final Long TEST_DEPO_ACCOUNT_1 = 13L; - private final Long TEST_DEPO_ACCOUNT_2 = 14L; - + private void clearTestDir() throws IOException { + FileUtils.deleteDirectory(outFolder); + outFolder.mkdir(); + } } diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_1_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_1_expected.csv new file mode 100644 index 000000000..e56f1778b --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_1_expected.csv @@ -0,0 +1,2 @@ +id,securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value +"888","3007","777","07.05.2023","17.05.2023","17.05.2023","test-settle-code","1000","7777","7777777" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_2_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_2_expected.csv new file mode 100644 index 000000000..0e82e2d79 --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_2_expected.csv @@ -0,0 +1,2 @@ +id,securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value +"888","3007","777","17.05.2023","17.05.2023","17.05.2023","test-settle-code","1000","7777","7777777" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_3_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_3_expected.csv new file mode 100644 index 000000000..473063b11 --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_3_expected.csv @@ -0,0 +1,2 @@ +id,securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value +"888","3007","777","27.05.2023","17.05.2023","27.05.2023","test-settle-code","1000","7777","7777777" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_4_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_4_expected.csv new file mode 100644 index 000000000..fae8b0a3f --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_4_expected.csv @@ -0,0 +1,2 @@ +id,securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value +"888","3007","777","27.05.2023","17.05.2023","17.05.2023","test-settle-code","1000","7777","7777777" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_empty_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_empty_expected.csv new file mode 100644 index 000000000..a5e3347ef --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_empty_expected.csv @@ -0,0 +1 @@ +id,securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/operational_liabilities_claims_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/operational_liabilities_claims_expected.csv new file mode 100644 index 000000000..262bcead4 --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/operational_liabilities_claims_expected.csv @@ -0,0 +1,3 @@ +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 +"888","16.05.2023","20:45:22","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1007","test-company-fullname-1","10007","16.04.2023","16.04.2023","test-trading-clearing-registry-1","11","13","test-settlement-currency-1","777","3007","S","06.05.2023","24.04.2023","","","1000","333","12","777","7777","7777777","3333","0","","","7777777","7777","777","888" +"777","16.05.2023","20:45:25","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1008","test-company-fullname-2","10007","06.04.2023","06.04.2023","test-trading-clearing-registry-2","12","14","test-settlement-currency-2","888","3008","B","26.04.2023","14.05.2023","Y","14.05.2023","88","","34","888","","1","","","","","1","","777","888" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/operational_money_change_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/operational_money_change_expected.csv new file mode 100644 index 000000000..0e4a9fb03 --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/operational_money_change_expected.csv @@ -0,0 +1,3 @@ +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 +"999","17.05.2023","12:10:51","Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга","KS_FIRMID_ASSETS","COMPANY_HOUSE","1007","test-company-fullname-1","test-trading-clearing-registry-1","11","test-trading-currency-1","999","test-registry-code-1","3","777","700000","780","","777777","17.05.2023T12:10:50","77777","17.05.2023T12:10:50" +"666","17.05.2023","12:10:51","Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга","KS_FIRMID_ASSETS","COMPANY_HOUSE","1008","test-company-fullname-2","test-trading-clearing-registry-2","12","test-trading-currency-2","666","test-registry-code-2","2","888","900000","890","","999999","17.05.2023T12:10:50","99999","17.05.2023T12:10:50" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/period_liabilities_claims_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/period_liabilities_claims_expected.csv new file mode 100644 index 000000000..56594dd85 --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/period_liabilities_claims_expected.csv @@ -0,0 +1,3 @@ +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 +"888","17.05.2023","10:51:13","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1007","test-company-fullname-1","10007","17.04.2023","17.04.2023","test-trading-clearing-registry-1","11","13","test-settlement-currency-1","777","3007","S","07.05.2023","25.04.2023","","","1000","333","12","777","7777","7777777","3333","0","","","7777777","7777","777","888" +"777","17.05.2023","10:51:13","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1008","test-company-fullname-2","10008","07.04.2023","07.04.2023","test-trading-clearing-registry-2","12","14","test-settlement-currency-2","888","3008","B","27.04.2023","15.05.2023","Y","15.05.2023","88","","34","888","","1","","","","","1","","777","888" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/period_money_change_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/period_money_change_expected.csv new file mode 100644 index 000000000..655fa902b --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/period_money_change_expected.csv @@ -0,0 +1,3 @@ +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 +"999","17.05.2023","12:18:01","Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга","KS_FIRMID_ASSETS","COMPANY_HOUSE","1007","test-company-fullname-1","test-trading-clearing-registry-1","11","test-trading-currency-1","999","test-registry-code-1","3","777","700000","780","","777777","17.05.2023T12:18:01","77777","17.05.2023T12:18:01" +"666","17.05.2023","12:18:01","Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга","KS_FIRMID_ASSETS","COMPANY_HOUSE","1008","test-company-fullname-2","test-trading-clearing-registry-2","12","test-trading-currency-2","666","test-registry-code-2","2","888","900000","890","","999999","17.05.2023T12:18:01","99999","17.05.2023T12:18:01" diff --git a/clearing-parent/reports-service/src/test/resources/operational_liabilities_claims_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/summary_liabilities_claims_expected.csv similarity index 65% rename from clearing-parent/reports-service/src/test/resources/operational_liabilities_claims_expected.csv rename to clearing-parent/reports-service/src/test/resources/expected_reports_csv/summary_liabilities_claims_expected.csv index d830c5b3b..7f5048002 100644 --- a/clearing-parent/reports-service/src/test/resources/operational_liabilities_claims_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/summary_liabilities_claims_expected.csv @@ -1,3 +1,3 @@ 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 -"1","16.05.2023","20:45:22","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1007","test-company-fullname-1","10007","16.04.2023","16.04.2023","test-trading-clearing-registry-1","11","13","test-settlement-currency-1","777","3007","S","06.05.2023","24.04.2023","","","1000","333","12","777","7777","7777777","3333","0","","","7777777","7777","777","888" -"2","16.05.2023","20:45:25","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1008","test-company-fullname-2","10007","06.04.2023","06.04.2023","test-trading-clearing-registry-2","12","14","test-settlement-currency-2","888","3008","B","26.04.2023","14.05.2023","N","14.05.2023","88","","34","888","","1","","","","","1","","777","888" +888,"17.05.2023","10:58:08","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1007","test-company-fullname-1","10007","17.04.2023","17.04.2023","test-trading-clearing-registry-1","11","13","test-settlement-currency-1","777","3007","S","07.05.2023","25.04.2023","","","1000","333","12","777","7777","7777777","3333","0","","","7777777","7777","777","888" +777,"17.05.2023","10:58:08","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1008","test-company-fullname-2","10008","07.04.2023","07.04.2023","test-trading-clearing-registry-2","12","14","test-settlement-currency-2","888","3008","B","27.04.2023","15.05.2023",Y,"15.05.2023","88","","34","888","","1","","","","","1","","777","888" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/summary_money_change_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/summary_money_change_expected.csv new file mode 100644 index 000000000..a9085ae59 --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/summary_money_change_expected.csv @@ -0,0 +1,3 @@ +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 +"999","17.05.2023","12:25:42","Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга","KS_FIRMID_ASSETS","COMPANY_HOUSE","1007","test-company-fullname-1","test-trading-clearing-registry-1","11","test-trading-currency-1","999","test-registry-code-1","3","777","700000","780","","777777","17.05.2023T12:25:42","77777","17.05.2023T12:25:42" +"666","17.05.2023","12:25:42","Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга","KS_FIRMID_ASSETS","COMPANY_HOUSE","1008","test-company-fullname-2","test-trading-clearing-registry-2","12","test-trading-currency-2","666","test-registry-code-2","2","888","900000","890","","999999","17.05.2023T12:25:42","99999","17.05.2023T12:25:42" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/unfulfilled_deal_report_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/unfulfilled_deal_report_expected.csv new file mode 100644 index 000000000..866e1ccdb --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/unfulfilled_deal_report_expected.csv @@ -0,0 +1,2 @@ +id,securityId,tradeNo,tradeDate,settleCode +"888","3007","777","07.05.2023","test-class-code"