diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java index 61ae83d20..e121a51c7 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java @@ -83,18 +83,11 @@ public class OrderCalculationService { BigDecimal planPosition = registry.getBalance(); BigDecimal sum1 = planPosition.abs(); - Registry rubRegistry = imdgQueryService.findAmtRegistry(registry, "RUB"); - BigDecimal planPositionRub = rubRegistry.getBalance(); - - Rates rates = imdgQueryService.getRate(registry.getSecuritySymbol(), LocalDate.now()); - SCrossRate sCrossRates = imdgQueryService.getSCrossRates(registry.getSecuritySymbol(), LocalDate.now()); if (sCrossRates == null) { throw new IllegalStateException(String.format("Not fond rate by security symbol: %s", CurrencyCode.CNY.getKey())); } BigDecimal rateValue = sCrossRates.getUnitRate(); - BigDecimal sum2 = planPositionRub.divide(rateValue, lotSize, RoundingMode.HALF_DOWN); - //Математическое округление кратное lotSize BigDecimal sum3 = mathCeil(sum1, lotSize); BigDecimal sum4 = sum3.multiply(rateValue, MC).negate(); BigDecimal sum5 = sum3.negate(); @@ -106,7 +99,7 @@ public class OrderCalculationService { BigDecimal sum6 = sum3.multiply(rateValue, MC).multiply(multiplier, MC); - return new CalculationResult(sum1, sum2, sum3, sum4, sum5, sum6); + return new CalculationResult(sum1, BigDecimal.ZERO, sum3, sum4, sum5, sum6); } private CalculationResult calculationRubSums(Registry registry, Integer lotSize, BigDecimal s, BigDecimal n) { @@ -154,6 +147,6 @@ public class OrderCalculationService { } private BigDecimal mathCeil(BigDecimal val, Integer multiplicity) { - return BigDecimal.valueOf(Math.ceil(val.doubleValue() / multiplicity) * multiplicity); + return BigDecimal.valueOf(Math.ceil(val.doubleValue() / multiplicity)); } } diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/SpotOvernightOrderService.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/SpotOvernightOrderService.java index e7bb83d53..e1d27f8c7 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/SpotOvernightOrderService.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/SpotOvernightOrderService.java @@ -1,5 +1,6 @@ package ru.spcex.clearing.dflt.management.service; +import java.math.BigDecimal; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -12,11 +13,13 @@ import ru.spcex.clearing.dflt.management.model.FinalCalculationResult; import ru.spcex.clearing.dflt.management.model.OrderCurrencyContext; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.platform.enumeration.CompanyRole; +import ru.spcex.platform.enumeration.CurrencyCode; import ru.spcex.platform.enumeration.OvernightType; import ru.spcex.platform.enumeration.RegistryStatus; import ru.spcex.platform.enumeration.SettleCode; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.utils.enumeration.IEnumKey; @Service public class SpotOvernightOrderService { @@ -47,6 +50,7 @@ public class SpotOvernightOrderService { CounterpartyInfo categoryP = imdgQueryService.getCompanyByClearingCategory("P"); CounterpartyInfo clcc = imdgQueryService.getCompanyByRole(CompanyRole.CLCC); CounterpartyInfo rgcm = imdgQueryService.getCompanyByRole(CompanyRole.RGCM); + CurrencyCode currency = IEnumKey.getEnumByKey(CurrencyCode.class, registry.getSecuritySymbol()); OrderCurrencyContext context = OrderCurrencyContext.builder() .registry(registry) @@ -61,6 +65,12 @@ public class SpotOvernightOrderService { FinalCalculationResult finalCalculationResultT0 = swapCalculationService.calcAndEnrichSpot(SettleCode.T0, context); FinalCalculationResult finalCalculationResultT1 = swapCalculationService.calcAndEnrichSpot(SettleCode.T1, context); + + if (CurrencyCode.RUB == currency && + finalCalculationResultT0.calculationResult().sum3().compareTo(BigDecimal.ZERO) >= 0) { + log.warn("QuantityLot greater than zero; skip forming order currency"); + return; + } OrderCurrency primaryTransferT0 = templateBuilder.buildPrimaryTransfer(context, SettleCode.T0, finalCalculationResultT0); OrderCurrency counterTransferT0 = templateBuilder.buildCounterTransfer(context, SettleCode.T0, finalCalculationResultT0); OrderCurrency primaryTransferT1 = templateBuilder.buildPrimaryTransfer(context, SettleCode.T1, finalCalculationResultT1); diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/SwapOvernightOrderService.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/SwapOvernightOrderService.java index 8d55b7cb6..1f9ecb8a6 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/SwapOvernightOrderService.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/SwapOvernightOrderService.java @@ -13,11 +13,13 @@ import ru.spcex.clearing.dflt.management.model.FinalCalculationResult; import ru.spcex.clearing.dflt.management.model.OrderCurrencyContext; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.platform.enumeration.CompanyRole; +import ru.spcex.platform.enumeration.CurrencyCode; import ru.spcex.platform.enumeration.OvernightType; import ru.spcex.platform.enumeration.RegistryStatus; import ru.spcex.platform.enumeration.SettleCode; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.utils.enumeration.IEnumKey; @Service public class SwapOvernightOrderService { @@ -48,7 +50,7 @@ public class SwapOvernightOrderService { CounterpartyInfo categoryP = imdgQueryService.getCompanyByClearingCategory("P"); CounterpartyInfo clcc = imdgQueryService.getCompanyByRole(CompanyRole.CLCC); CounterpartyInfo rgcm = imdgQueryService.getCompanyByRole(CompanyRole.RGCM); - + CurrencyCode currency = IEnumKey.getEnumByKey(CurrencyCode.class, registry.getSecuritySymbol()); OrderCurrencyContext context = OrderCurrencyContext.builder() .registry(registry) .orderCategory(orderCategory) @@ -61,7 +63,8 @@ public class SwapOvernightOrderService { .build(); FinalCalculationResult finalCalculationResult = swapCalculationService.calcAndEnrichSwap(SettleCode.T1, context); - if (finalCalculationResult.calculationResult().sum3().compareTo(BigDecimal.ZERO) >= 0) { + if (CurrencyCode.RUB == currency && + finalCalculationResult.calculationResult().sum3().compareTo(BigDecimal.ZERO) >= 0) { log.warn("QuantityLot greater than zero; skip forming order currency"); return; }