ialbert 2023-11-16 16:12:22 +03:00
parent 06b38cc61f
commit ee0f95fcde
2 changed files with 18 additions and 24 deletions

View file

@ -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) {

View file

@ -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;