This commit is contained in:
parent
06b38cc61f
commit
ee0f95fcde
2 changed files with 18 additions and 24 deletions
|
|
@ -38,7 +38,6 @@ import ru.spcex.platform.utils.time.TimeUtil;
|
||||||
import ru.spcex.platform.utils.validation.IValidator;
|
import ru.spcex.platform.utils.validation.IValidator;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.MathContext;
|
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
|
@ -69,7 +68,6 @@ public class ExecutionFondComponent {
|
||||||
private final KafkaSender kafkaSender;
|
private final KafkaSender kafkaSender;
|
||||||
private final NotificationSender notifications;
|
private final NotificationSender notifications;
|
||||||
private final boolean valuation;
|
private final boolean valuation;
|
||||||
private static MathContext prec2 = new MathContext(2, RoundingMode.HALF_UP);
|
|
||||||
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|
@ -238,37 +236,28 @@ public class ExecutionFondComponent {
|
||||||
FixedIncomeSecurity fixedIncome = (FixedIncomeSecurity) security;
|
FixedIncomeSecurity fixedIncome = (FixedIncomeSecurity) security;
|
||||||
BigDecimal nominalValue;
|
BigDecimal nominalValue;
|
||||||
Listing listing = listingImdg.getFirstObjectBySQL("securityId = %d and market = '%s'".formatted(fixedIncome.getId(), sTrades.getClassCode()));
|
Listing listing = listingImdg.getFirstObjectBySQL("securityId = %d and market = '%s'".formatted(fixedIncome.getId(), sTrades.getClassCode()));
|
||||||
BigDecimal lotSize = listing != null ? safeBD(listing.getLotSize()) : BigDecimal.ZERO;
|
BigDecimal lotSize = listing != null ? safeBD(listing.getLotSize()) : BigDecimal.ONE;
|
||||||
BigDecimal ncd = safeBD(sTrades.getAccruedint());// eFond.interestAmount
|
ImdgPredicateBuilder pb = fixedIncomeCashFlowImdg.predicateBuilder();
|
||||||
if (BondType.I.equalsByKey(fixedIncome.getBondType())) {
|
ImdgPredicate prdct = pb.and(
|
||||||
ImdgPredicateBuilder pb = fixedIncomeCashFlowImdg.predicateBuilder();
|
pb.equals("securityId", fixedIncome.getId()),
|
||||||
ImdgPredicate prdct = pb.and(
|
sTrades.getSettleDate() != null ?
|
||||||
pb.equals("securityId", fixedIncome.getId()),
|
pb.equals("valueDate", sTrades.getSettleDate()) : pb.alwaysFalse()
|
||||||
sTrades.getSettleDate() != null ?
|
);
|
||||||
pb.equals("valueDate", sTrades.getSettleDate()) : pb.alwaysFalse()
|
FixedIncomeCashFlow cashFlow = fixedIncomeCashFlowImdg.getFirstObjectByPredicate(prdct);
|
||||||
//fixme в тз settlementDate
|
if (cashFlow != null) {
|
||||||
);
|
nominalValue = safeBD(cashFlow.getNominalValue());
|
||||||
FixedIncomeCashFlow cashFlow = fixedIncomeCashFlowImdg.getFirstObjectByPredicate(prdct);
|
|
||||||
if (cashFlow != null) {
|
|
||||||
nominalValue = safeBD(cashFlow.getNominalValue());
|
|
||||||
} else {
|
|
||||||
nominalValue = BigDecimal.ZERO;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
nominalValue = safeBD(fixedIncome.getNominalValue());
|
nominalValue = safeBD(fixedIncome.getNominalValue());
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
lotSize.multiply(lots);
|
|
||||||
settlementAmount = lotSize.multiply(lots)
|
settlementAmount = lotSize.multiply(lots)
|
||||||
.multiply(nominalValue)
|
.multiply(nominalValue)
|
||||||
.multiply(price)
|
.multiply(price)
|
||||||
.divide(new BigDecimal(100), prec2) //first rounding
|
.divide(new BigDecimal(100), RoundingMode.HALF_UP)
|
||||||
.add(ncd.setScale(2, RoundingMode.HALF_UP)); //second rounding
|
.setScale(2, RoundingMode.HALF_UP);
|
||||||
}
|
}
|
||||||
eFond.setSettlementAmount(settlementAmount);
|
|
||||||
//ОКРУГЛЕНИЕ( NV* quantity * price/100) + ОКРУГЛЕНИЕ (executionFond.interestAmount) для каждой сделки
|
|
||||||
} else if (InstrumentType.EQTY.equalsByKey(security.getInstrumentType())) {
|
} else if (InstrumentType.EQTY.equalsByKey(security.getInstrumentType())) {
|
||||||
settlementAmount = lots.multiply(price, prec2);
|
settlementAmount = lots.multiply(price).setScale(2, RoundingMode.HALF_UP);
|
||||||
}
|
}
|
||||||
eFond.setSettlementAmount(settlementAmount);
|
eFond.setSettlementAmount(settlementAmount);
|
||||||
if (settlementAmount.compareTo(safeBD(sTrades.getValue())) != 0) {
|
if (settlementAmount.compareTo(safeBD(sTrades.getValue())) != 0) {
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,11 @@ public class ImdgPredicateBuilderSqlMock implements ImdgPredicateBuilder {
|
||||||
return sql("true");
|
return sql("true");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ImdgPredicate alwaysFalse() {
|
||||||
|
return sql("false");
|
||||||
|
}
|
||||||
|
|
||||||
static class SimpleSQLPredicate implements ImdgPredicate {
|
static class SimpleSQLPredicate implements ImdgPredicate {
|
||||||
protected String sql;
|
protected String sql;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue