From 5b70542ff723749303c36a3824cfd5d9a5d24b43 Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 28 Nov 2025 18:34:43 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-919 --- .../execution/ExecutionFondComponent.java | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionFondComponent.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionFondComponent.java index ac3a0867a..ce28f33c3 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionFondComponent.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionFondComponent.java @@ -1,6 +1,5 @@ package ru.spcex.clearing.service.execution; -import static java.lang.String.format; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.Instant; @@ -10,6 +9,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Optional; +import static java.lang.String.format; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.event.Level; @@ -299,14 +299,9 @@ public class ExecutionFondComponent implements IExecutionUploadComponent { eFond.setMarket(sTrades.getClassCode()); BigDecimal price = sTrades.getPrice(); - if (InstrumentType.DGCT.equalsByKey(security.getInstrumentType())) { - DigitalCertificateSecurity dcs = (DigitalCertificateSecurity) security; - BigDecimal baseUnitSize = BigDecimal.valueOf(Optional.ofNullable(dcs.getBaseUnitSize()).orElse(0L)); - price = safeBD(sTrades.getPrice()) - .multiply(safeBD(dcs.getNominalValue())) - .multiply(baseUnitSize); + if (!InstrumentType.DGCT.equalsByKey(security.getInstrumentType())) { + eFond.setPrice(price); } - eFond.setPrice(price); eFond.setLots(sTrades.getQty()); eFond.setQuantity(sTrades.getQtyPcs()); { @@ -342,7 +337,20 @@ public class ExecutionFondComponent implements IExecutionUploadComponent { eFond.setQuantity(qty); BigDecimal settlementAmount = BigDecimal.ZERO; if (InstrumentType.DGCT.equalsByKey(security.getInstrumentType())) { - settlementAmount = qty.multiply(eFond.getPrice()).setScale(2, RoundingMode.HALF_UP); + DigitalCertificateSecurity dcs = (DigitalCertificateSecurity) security; + BigDecimal baseUnitSize = BigDecimal.valueOf(Optional.ofNullable(dcs.getBaseUnitSize()).orElse(0L)); + int precision; + if (listing != null && listing.getPrecision() != null) { + precision = listing.getPrecision().intValue(); + } else { + precision = 2; + } + price = safeBD(sTrades.getPrice()) + .multiply(safeBD(dcs.getNominalValue())) + .multiply(baseUnitSize) + .setScale(precision, RoundingMode.HALF_UP); + eFond.setPrice(price); + settlementAmount = qty.multiply(price).setScale(2, RoundingMode.HALF_UP); } else if (InstrumentType.BOND.equalsByKey(security.getInstrumentType())) { FixedIncomeSecurity fixedIncome = (FixedIncomeSecurity) security; BigDecimal nominalValue;