diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegisterSumsReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegisterSumsReportBuilder.java index 71da38339..b23ff0e41 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegisterSumsReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegisterSumsReportBuilder.java @@ -100,23 +100,19 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder= 0) { - code = code.substring(i + 3).trim(); - } - if (i < 0 || code.isBlank()) { + String code = parseCodeFromStatementComment(statement.getComment()); + if (code == null || code.isBlank()) { log.warn("For statement id = {} empty or unparseable code=\"{}\" (comment \"{}\"), statement was skipped", code, statement.getComment(), statement.getId()); continue; } - log.debug("Search TCR by code={}", code); + log.debug("Search TradingClearingRegistry by code={}", code); tkr = tradingClearingRegistryImdg.getFirstObjectByFieldValues(Map.of("code", code)); if (tkr == null) { log.warn( - "For statement id = {} and code = {} not found TradingClearingRegistry", + "For statement id = {} and code = {} (or unparseable comment=\"{}\") not found TradingClearingRegistry, statement was skipped", statement.getId(), - code + code, statement.getComment() ); continue; } @@ -130,7 +126,7 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder= 0) { + code = code.substring(i + 3).trim(); + } else { + return null; + } + i = -1; + for (String end : Arrays.asList(".", ";", " ")) { + int p = code.indexOf(end); + if (p > 0 && (i <= 0 || i > p)) i = p; + } + if (i > 0) { + code = code.substring(0, i); + } + return code; + } } diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegisterSumsReportBuilderTest.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegisterSumsReportBuilderTest.java new file mode 100644 index 000000000..b9ec67e23 --- /dev/null +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegisterSumsReportBuilderTest.java @@ -0,0 +1,23 @@ +package ru.spcex.clearing.reports.reports.ks; + +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import static org.junit.jupiter.api.Assertions.*; + +class KSRepCashRegisterSumsReportBuilderTest { + + @Test + void parseCodeFromStatementComment() { + KSRepCashRegisterSumsReportBuilder reportB = new KSRepCashRegisterSumsReportBuilder(Mockito.mock(ImdgProvider.class)); + assertNull(reportB.parseCodeFromStatementComment(null)); + assertEquals(null, reportB.parseCodeFromStatementComment("")); + assertEquals(null, reportB.parseCodeFromStatementComment(" TTTAAA ")); + assertEquals("0045CAT00001", reportB.parseCodeFromStatementComment("Возврат на депозит №DSTAA10S003/150923/45/23091500000008 по ТКР 0045CAT00001")); + assertEquals("0574MAT00001", reportB.parseCodeFromStatementComment("Вывод средств по ТКР 0574MAT00001. Поручения 777.")); + assertEquals("0574MAT00001", reportB.parseCodeFromStatementComment("ТКР 0574MAT00001")); + assertEquals("0574MAT00001", reportB.parseCodeFromStatementComment("ТКР0574MAT00001")); + assertEquals("", reportB.parseCodeFromStatementComment("ТКР")); + } +} \ No newline at end of file