diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/PaymentInstructionBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/PaymentInstructionBuilder.java index ff1f9ecde..80479f8c9 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/PaymentInstructionBuilder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/PaymentInstructionBuilder.java @@ -7,6 +7,7 @@ import ru.clearing.classes.statics.data.payment.PaymentInstruction; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.platform.enumeration.CompanySymbol; +import ru.spcex.platform.enumeration.InOutDirection; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; @@ -66,7 +67,7 @@ public class PaymentInstructionBuilder { } paymentInstruction.setDebitLeg_accountId(registry.getAccountId()); - + paymentInstruction.setDebitLeg_direction(InOutDirection.in.getKey()); // Account account = accountImdg.getSingleObjectByID(registry.get()); // paymentInstruction.setDebitLeg_account(); return paymentInstruction; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java index 3efdc6c1e..9749bc9b6 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java @@ -171,11 +171,12 @@ public class Sdf57Executor extends AbstractExecutor { Registry registry = createRegistryByStatement(stmt, company, account, dsgn); Registry registryB = registry.clone(); + registryB.setId(imdgProvider.getImdgIdGenerator().nextId()); registryB.setRegistryUnit(RegistryUnit.B.getKey()); registryB.setRegistryCode(RegistryUtil.clearingCode(registryB)); - registryB.setId(imdgProvider.getImdgIdGenerator().nextId()); registryB.setBalance(BigDecimal.ZERO); registryB.setDebit(BigDecimal.ZERO); + registryB.setCredit(BigDecimal.ZERO); Registry registryF = registry.clone(); registryF.setRegistryUnit(RegistryUnit.F.getKey()); @@ -291,10 +292,13 @@ public class Sdf57Executor extends AbstractExecutor { //Если значение statement.inOutDirection=OUT, то: //= текущее значение registry.balance - statement.amount switch (inOutDirection) { - case in -> rgs.setBalance(statement.getAmount()); + case in -> { + rgs.setBalance(statement.getAmount()); + rgs.setCredit(statement.getAmount()); + } case out -> { rgs.setBalance(statement.getAmount().negate()); - rgs.setDebit(statement.getAmount()); + rgs.setDebit(statement.getAmount().negate()); } } rgs.setBalanceDimension(BalanceDimension.MONY.getKey()); //fixme ! смотри описание и ссылка на начало html'ки diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java index 18f16b394..b19291e9f 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java @@ -2,10 +2,13 @@ package ru.spcex.clearing.session.stage.impl; import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.account.ClearingAccount; +import ru.clearing.classes.statics.data.account.DepoAccount; +import ru.clearing.classes.statics.data.account.InformationAccount; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.execution.ExecutionCommon; import ru.clearing.classes.statics.data.execution.ExecutionDeposit; import ru.clearing.classes.statics.data.execution.ExecutionFond; +import ru.clearing.classes.statics.data.misc.Currency; import ru.clearing.classes.statics.data.misc.Market; import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.registry.Registry; @@ -20,6 +23,7 @@ import ru.spcex.platform.imdg.api.ImdgProvider; import java.time.Instant; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.Map; public class RegistryBuilder { private Imdg companyImdg; @@ -28,6 +32,9 @@ public class RegistryBuilder { private Imdg marketImdg; private Imdg sessionImdg; private Imdg clearingAccountImdg; + private Imdg informationAccountImdg; + private Imdg depoAccountImdg; + private Imdg currencyImdg; private ExecutionCommon exec; private RegistryDesignation regDsgn; @@ -45,6 +52,9 @@ public class RegistryBuilder { this.marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, Market.class); this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); this.clearingAccountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingAccount, ClearingAccount.class); + this.depoAccountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_DepoAccount, DepoAccount.class); + this.informationAccountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_InformationAccount, InformationAccount.class); + this.currencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Currency, Currency.class); return this; } @@ -69,32 +79,51 @@ public class RegistryBuilder { reg.setShortName(company.getShortName()); reg.setFullName(company.getFullName()); TradingClearingRegistry tcr = searchTradingClearingRegistry(); - ClearingAccount accountForStatement = null; + String capacityByAccount = null; + boolean isMoney = false; + Account account = accountImdg.getSingleObjectByID(reg.getAccountId()); if ((regDsgn.equals(RegistryDesignation.O) && side.isBuy()) || (regDsgn.equals(RegistryDesignation.T) && side.isSell())) { + isMoney = true; reg.setAccountId(tcr.getMoneyAccountId()); reg.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); reg.setBalanceDimension(BalanceDimension.MONY.getKey()); //fixme add second leg code branch - accountForStatement = clearingAccountImdg.getSingleObjectByID(tcr.getMoneyAccountId()); + Currency currency = currencyImdg.getSingleObjectByFieldValues(Map.of("currencyCode", exec.getSettlementCurrency())); + reg.setSecurityId(currency.getId()); + reg.setSecuritySymbol(currency.getCurrencyCode()); + if (AccountType.Clrn.equalsByKey(account.getAccountType())) { + ClearingAccount clearingAccount = clearingAccountImdg.getSingleObjectByID(tcr.getMoneyAccountId()); + if (clearingAccount != null) { + capacityByAccount = clearingAccount.getClearingAccountType(); + } + } else if (AccountType.Info.equalsByKey(account.getAccountType())){ + InformationAccount informationAccount = informationAccountImdg.getSingleObjectByID(tcr.getMoneyAccountId()); + if (informationAccount != null) { + capacityByAccount = "A"; //todo сделать enum + } + } } else if ((regDsgn.equals(RegistryDesignation.T) && side.isBuy()) || (regDsgn.equals(RegistryDesignation.O) && side.isSell())) { + isMoney = false; reg.setAccountId(tcr.getDepoAccountId()); reg.setRegistryInstrumentType(RegistryInstrumentType.S.getKey()); reg.setBalanceDimension(BalanceDimension.PICS.getKey()); //fixme add second leg code branch - accountForStatement = clearingAccountImdg.getSingleObjectByID(tcr.getDepoAccountId()); + reg.setSecurityId(exec.getSecurityId()); + reg.setSecuritySymbol(exec.getSecuritySymbol()); + DepoAccount depoAccount = depoAccountImdg.getSingleObjectByID(tcr.getDepoAccountId()); + if (depoAccount != null) { + capacityByAccount = depoAccount.getDepoAccountType(); + } } - Account account = accountImdg.getSingleObjectByID(reg.getAccountId()); reg.setAccountType(account.getAccountType()); reg.setAccount(account.getAccount()); reg.setRegistryDesignation(regDsgn.getKey()); - if (accountForStatement != null) { - reg.setRegistryCapacity(accountForStatement.getClearingAccountType()); + if (capacityByAccount != null) { + reg.setRegistryCapacity(capacityByAccount); } reg.setRegistryUnit(RegistryUnit.T.getKey()); reg.setRegistryCode(RegistryUtil.clearingCode(reg)); reg.setTradingClearingRegistryId(exec.getTradingClearingRegistryId()); reg.setTradingClearingRegistry(tcr.getCode()); reg.setRegistryStatus(RegistryStatus.PROC.getKey()); - reg.setSecurityId(exec.getSecurityId()); - reg.setSecuritySymbol(exec.getSecuritySymbol()); switch (exec.type()) { case ExecutionDeposit -> { ExecutionDeposit execDep = (ExecutionDeposit) this.exec; @@ -112,7 +141,13 @@ public class RegistryBuilder { } case ExecutionFond -> { ExecutionFond execFond = (ExecutionFond) this.exec; - reg.setBalance(execFond.getSettlementAmount()); + if (isMoney) { + //todo ОКРУГЛЕНИЕ(fixedIncomeSecurity.nominalValue * quantity * price/100) + ОКРУГЛЕНИЕ (executionFond.interestAmount) + reg.setBalance(execFond.getSettlementAmount()); + } else { + reg.setBalance(execFond.getQuantity()); + } + reg.setSettlementDate(execFond.getSettlementDate()); reg.setSettlementCode(execFond.getSettlementCode()); }