diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionDepositComponent.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionDepositComponent.java index e9b33c2b4..e6bec9ad8 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionDepositComponent.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionDepositComponent.java @@ -217,9 +217,13 @@ public class ExecutionDepositComponent { eDeposit.setFirstLegSettlementDate(sTrades.getTradeDate()); { LocalDate sTrdSettleDate = sTrades.getSettleDate(); - if (sTrdSettleDate != null) { - long repoTerm = sTrades.getRepoTerm() != null ? sTrades.getRepoTerm().longValue() : 0; - eDeposit.setSecondLegSettlementDate(sTrdSettleDate.plusDays(repoTerm)); + if (sTrdSettleDate != null && sTrades.getRepoTerm() != null) { + eDeposit.setSecondLegSettlementDate(sTrdSettleDate.plusDays(sTrades.getRepoTerm())); + } else if (sTrdSettleDate != null && sTrades.getSecCode() != null && (sTrades.getSecCode().length() > 7)) { + Optional daysNumber = stripDaysFromSecCode(sTrades.getSecCode()); + daysNumber.ifPresentOrElse( + days -> eDeposit.setSecondLegSettlementDate(sTrdSettleDate.plusDays(days)), + () -> log.info("couldn't extract #days for secondLegSettlementDate from secCode {}", sTrades.getSecCode())); } } eDeposit.setFirstLegSettlementCode(sTrades.getSettleCode()); @@ -237,6 +241,22 @@ public class ExecutionDepositComponent { return eDeposit; } + private Optional stripDaysFromSecCode(String secCode) { + if (secCode == null || secCode.length() <= 7) { + return Optional.empty(); + } + String digitsFromSecCode = secCode.substring(7).replaceAll("[^\\d]", ""); + if (digitsFromSecCode.length() == 0) { + return Optional.empty(); + } + try { + Long days = Long.valueOf(digitsFromSecCode); + return Optional.of(days); + } catch (Throwable e) { + return Optional.empty(); + } + } + private void logError(IEnumId subject, Object... args) { log.warn("{}", msgResolver.resolve(new EnumMessage(subject, args))); }