diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepCashRegistersReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepCashRegistersReportBuilder.java index dba30618b..d3842f122 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepCashRegistersReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepCashRegistersReportBuilder.java @@ -2,6 +2,7 @@ package ru.spcex.clearing.reports.builders.ks; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.account.Account; +import ru.clearing.classes.statics.data.company.ClearingMemberCategory; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.registry.Registry; @@ -31,6 +32,7 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder registryCodeDictionaryImdg; private final Imdg sessionImdg; private final Imdg accountImdg; + private final Imdg clearingMemberCategoryImdg; private List rows = null; @@ -41,6 +43,7 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder contracts = new HashSet<>(); BigDecimal cmtBalanceSum = BigDecimal.ZERO; for (Registry cmtRegistry : cmtRegistries) { + Long counterPartyId = cmtRegistry.getCounterPartyId(); + if (counterPartyId != null) { + Collection clearingMemberCategory = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues( + Map.of("companyId", counterPartyId) + ); + if (!clearingMemberCategory.isEmpty()) { + ClearingMemberCategory next = clearingMemberCategory.iterator().next(); + ClearingCategory category = IEnumKey.getEnumByKey(ClearingCategory.class, next.getClearingMemberCategory()); + SessionType sessionType = IEnumKey.getEnumByKey(SessionType.class, cmtRegistry.getSessionType()); + if (category == ClearingCategory.I && sessionType == SessionType.XDEP) { + continue; + } + } + } BigDecimal balance = cmtRegistry.getBalance(); cmtBalanceSum = cmtBalanceSum.add(balance); contracts.add(cmtRegistry.getContract()); @@ -169,7 +186,24 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder { + Long counterPartyId = reg.getCounterPartyId(); + if (counterPartyId != null) { + Collection clearingMemberCategory = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues( + Map.of("companyId", counterPartyId) + ); + if (!clearingMemberCategory.isEmpty()) { + ClearingMemberCategory next = clearingMemberCategory.iterator().next(); + ClearingCategory category = IEnumKey.getEnumByKey(ClearingCategory.class, next.getClearingMemberCategory()); + SessionType sessionType = IEnumKey.getEnumByKey(SessionType.class, reg.getSessionType()); + return category != ClearingCategory.I || sessionType != SessionType.XDEP; + } + } + return true; + }) + .map(Registry::getBalance) + .reduce(BigDecimal.ZERO, BigDecimal::add); ksRepCashRegistersReport.setChangeBalance(cmtBalanceSum.subtract(lmtBalanceSum).subtract(dmxBalanceSum)); diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java index 8baaff5f4..c319f92d6 100644 --- a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java @@ -16,6 +16,7 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.account.AccountSymbols; +import ru.clearing.classes.statics.data.company.ClearingMemberCategory; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.CompanySymbols; import ru.clearing.classes.statics.data.execution.ExecutionDeposit; @@ -93,6 +94,7 @@ public class ReportServiceTest_KS { private Imdg tradingClearingRegistryImdg; private Imdg sTradesImdg; private Imdg accountSymbolsImdg; + private Imdg clearingMemberCategoryImdg; private Long COMPANY_ID; @Autowired @@ -200,6 +202,14 @@ public class ReportServiceTest_KS { cmtRegistry_2.setRegistryDesignation(RegistryDesignation.C.getKey()); cmtRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); cmtRegistry_2.setRegistryUnit(RegistryUnit.T.getKey()); + + ClearingMemberCategory clearingMemberCategory = new ClearingMemberCategory(); + clearingMemberCategory.setCompanyId(COMPANY_ID); + clearingMemberCategory.setClearingMemberCategory(ClearingCategory.I.getKey()); + clearingMemberCategoryImdg.insert(clearingMemberCategory); + cmtRegistry_2.setSessionType(SessionType.XDEP.getKey()); + cmtRegistry_2.setCounterPartyId(COMPANY_ID); + cmtRegistry_2.setSessionId(SESSION_ID_FOR_DAY); cmtRegistry_2.setTradingCode("TRADING_CODE"); cmtRegistry_2.setCompanyId(COMPANY_ID); @@ -240,6 +250,10 @@ public class ReportServiceTest_KS { lmtRegistry_2.setRegistryDesignation(RegistryDesignation.L.getKey()); lmtRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); lmtRegistry_2.setRegistryUnit(RegistryUnit.T.getKey()); + + lmtRegistry_2.setSessionType(SessionType.XDEP.getKey()); + lmtRegistry_2.setCounterPartyId(COMPANY_ID); + lmtRegistry_2.setSessionId(SESSION_ID_FOR_DAY); lmtRegistry_2.setTradingCode("TRADING_CODE"); lmtRegistry_2.setCompanyId(COMPANY_ID); @@ -359,6 +373,7 @@ public class ReportServiceTest_KS { registryImdg.delete(dmxRegistry_2); sessionImdg.delete(sessionForDay); accountImdg.delete(account); + clearingMemberCategoryImdg.delete(clearingMemberCategory); } @Test @@ -1242,6 +1257,7 @@ public class ReportServiceTest_KS { accountSymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_AccountSymbols, AccountSymbols.class); sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class); accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class); + clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); } private void clearTestDir() throws IOException { diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv index fdce8854f..36c9eb47c 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv @@ -1,3 +1,3 @@ "FIRMID","ACCOUNT","TKR","DATE","REGISTER_CODE","REGISTER_NAME","OPEN_BALANCE","CHANGE_BALANCE","ADD_WITHDRAW","CLOSE_BALANCE","REMARKS","TRADE_NUM" -"TRADING_CODE","ACCOUNT_FROM_ACCOUNT","TRADING_CLEARING_REGISTRY","01.11.2023","AM_T","AM_T_NAME","77.78",278.00,"111.00","466.78","","" -"TRADING_CODE","ACCOUNT","TRADING_CLEARING_REGISTRY","01.11.2023","AM_T","AM_T_NAME","77.78",278.00,"111.00",466.78,"","" +"TRADING_CODE","ACCOUNT_FROM_ACCOUNT","TRADING_CLEARING_REGISTRY","29.12.2023","AM_T","AM_T_NAME","77.78","189.00","111.00","377.78",, +"TRADING_CODE","ACCOUNT","TRADING_CLEARING_REGISTRY","29.12.2023","AM_T","AM_T_NAME","77.78","189.00","111.00","377.78",,