diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java index 489b8b496..e7e0f306a 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java @@ -6,6 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.company.ClearingMemberCategory; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.service.registry.RegistryManager; @@ -34,12 +35,14 @@ import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD; public class InspectionObligationsDepositReturn implements ISessionStage { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg registryImdg; + private final Imdg categoryImdg; private SessionType sessionType; private final RegistryManager rgsMng; @Autowired public InspectionObligationsDepositReturn(ImdgProvider imdgProvider, RegistryManager rgsMng) { this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + this.categoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); this.rgsMng = rgsMng; } @@ -128,7 +131,7 @@ public class InspectionObligationsDepositReturn implements ISessionStage { group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK)); // updateStatus(dmtInfo.get(), RegistryStatus.POOL); } else { - group.forEach(rgs -> updateStatus(rgs, registryStatusFailed())); + group.forEach(rgs -> updateStatus(rgs, registryStatusFailed(rgs))); updateStatus(dmtInfo.get(), RegistryStatus.UNCV); } continue; @@ -143,20 +146,39 @@ public class InspectionObligationsDepositReturn implements ISessionStage { ); if (dmtBalance.compareTo(omtBalance) >= 0 && amfBalance.compareTo(omtBalance) >= 0) { group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK)); -// updateStatus(dmtClnr.get(), RegistryStatus.POOL); } else { - group.forEach(rgs -> updateStatus(rgs, registryStatusFailed())); + group.forEach(rgs -> updateStatus(rgs, registryStatusFailed(rgs))); updateStatus(dmtClnr.get(), RegistryStatus.UNCV); } continue; } - log.info("OM*T.id={} -> no DM*X/DM*T(INFO/CLRN) registry found. setting {} status to group", - omtRgs.getId(), registryStatusFailed()); - group.forEach(rgs -> updateStatus(rgs, registryStatusFailed())); + + if (SessionType.FINL.equals(sessionType) + && amfBalance.compareTo(omtBalance) >= 0 + && initiatorV(omtRgs)) { + log.debug("OM*T.id={} -> no DM*X/DM*T(INFO/CLRN) registry found. " + + "FINL, initiator.category='V' and am*f > om*t: setting OK status to group", + omtRgs.getId()); + group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK)); + } else { + log.info("OM*T.id={} -> no DM*X/DM*T(INFO/CLRN) registry found. setting {} status to group", + omtRgs.getId(), registryStatusFailed()); + group.forEach(rgs -> updateStatus(rgs, registryStatusFailed(rgs))); + } } return new StageResult<>(null, true); } + private boolean initiatorV(Registry omtRgs) { + if (omtRgs.getCounterPartyId() == null) { + return false; + } + ClearingMemberCategory ctgr = categoryImdg.getFirstObjectBySQL( + "companyId = %d and clearingMemberCategory = '%s'" + .formatted(omtRgs.getCounterPartyId(), ClearingCategory.V.getKey())); + return ctgr != null; + } + private void updateStatus(Registry registry, RegistryStatus registryStatus) { log.trace("Update registry.id: {} to {}", registry.getId(), registryStatus.getKey()); registry.setRegistryStatus(registryStatus.getKey());