ialbert 2025-05-27 18:07:06 +03:00
parent 7f81e47fb6
commit 040e0e359d
6 changed files with 37 additions and 196 deletions

View file

@ -31,6 +31,7 @@ import ru.clearing.classes.statics.data.sdf.SDf54;
import ru.clearing.classes.statics.data.sdf.SDf55; import ru.clearing.classes.statics.data.sdf.SDf55;
import ru.clearing.classes.statics.data.sdf.SDf57; import ru.clearing.classes.statics.data.sdf.SDf57;
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity; import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
import ru.clearing.classes.statics.data.security.DigitalCertificateSecurity;
import ru.clearing.classes.statics.data.security.MoneyMarketSecurity; import ru.clearing.classes.statics.data.security.MoneyMarketSecurity;
import ru.clearing.classes.statics.data.security.Security; import ru.clearing.classes.statics.data.security.Security;
import ru.clearing.classes.statics.data.statement.Statement; import ru.clearing.classes.statics.data.statement.Statement;
@ -91,6 +92,7 @@ public class ValidationConfig {
Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg; Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
Imdg<EquitySecurity> equitySecurityImdg; Imdg<EquitySecurity> equitySecurityImdg;
Imdg<CurrencyPairSecurity> currencyPairSecurityImdg; Imdg<CurrencyPairSecurity> currencyPairSecurityImdg;
Imdg<DigitalCertificateSecurity> digitalCertificateSecurityImdg;
Imdg<CompanySymbols> imdgCompanySymbols; Imdg<CompanySymbols> imdgCompanySymbols;
Imdg<Registry> imdgRegistry; Imdg<Registry> imdgRegistry;
@ -138,6 +140,7 @@ public class ValidationConfig {
this.pmtImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class); this.pmtImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
this.ctgrImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); this.ctgrImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
this.currencyPairSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class); this.currencyPairSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class);
this.digitalCertificateSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_DigitalCertificateSecurity, DigitalCertificateSecurity.class);
this.imdgProvider = imdgProvider; this.imdgProvider = imdgProvider;
} }
@ -216,6 +219,7 @@ public class ValidationConfig {
context.addImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, currencyPairSecurityImdg); context.addImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, currencyPairSecurityImdg);
context.addImdg(IMDGDistributedNames.Map_Registry, imdgRegistry); context.addImdg(IMDGDistributedNames.Map_Registry, imdgRegistry);
context.addImdg(IMDGDistributedNames.Map_SDf20, imdgSdf20); context.addImdg(IMDGDistributedNames.Map_SDf20, imdgSdf20);
context.addImdg(IMDGDistributedNames.Map_DigitalCertificateSecurity, digitalCertificateSecurityImdg);
context.setLogPrefix(LogPrefixId.INSTANCE); context.setLogPrefix(LogPrefixId.INSTANCE);
return new ValidatorImpl<>(context, return new ValidatorImpl<>(context,
CompanyByTradingCodeValidationRule.instance(SDf21::getDepoCodeCl), CompanyByTradingCodeValidationRule.instance(SDf21::getDepoCodeCl),
@ -305,6 +309,7 @@ public class ValidationConfig {
context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany);
context.addImdg(IMDGDistributedNames.Map_Registry, imdgRegistry); context.addImdg(IMDGDistributedNames.Map_Registry, imdgRegistry);
context.addImdg(IMDGDistributedNames.Map_Session, imdgSession); context.addImdg(IMDGDistributedNames.Map_Session, imdgSession);
context.addImdg(IMDGDistributedNames.Map_DigitalCertificateSecurity, digitalCertificateSecurityImdg);
context.setLogPrefix(LogPrefixId.INSTANCE); context.setLogPrefix(LogPrefixId.INSTANCE);
return new ValidatorImpl<>(context, return new ValidatorImpl<>(context,
Sdf10ValidationRule.DepoAccountPresent, Sdf10ValidationRule.DepoAccountPresent,
@ -458,6 +463,7 @@ public class ValidationConfig {
ctx.addImdg(IMDGDistributedNames.Map_MoneyMarketSecurity , imdgMoneyMarketSecurity); ctx.addImdg(IMDGDistributedNames.Map_MoneyMarketSecurity , imdgMoneyMarketSecurity);
ctx.addImdg(IMDGDistributedNames.Map_EquitySecurity , equitySecurityImdg); ctx.addImdg(IMDGDistributedNames.Map_EquitySecurity , equitySecurityImdg);
ctx.addImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, currencyPairSecurityImdg); ctx.addImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, currencyPairSecurityImdg);
ctx.addImdg(IMDGDistributedNames.Map_DigitalCertificateSecurity, digitalCertificateSecurityImdg);
return new ValidatorImpl<>(ctx, return new ValidatorImpl<>(ctx,
Sdf20ValidationRule.Fields, Sdf20ValidationRule.Fields,
Sdf20ValidationRule.AccountPresent, Sdf20ValidationRule.AccountPresent,

View file

@ -1,167 +0,0 @@
package ru.spcex.clearing.service.validation;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.misc.STrades;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
import ru.clearing.classes.statics.data.security.MoneyMarketSecurity;
import ru.clearing.classes.statics.data.security.Security;
import ru.spcex.clearing.error.ClearingError;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.platform.enumeration.ServiceStatus;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.predicate.specific.SecuritySelector;
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.text.TextUtil;
import ru.spcex.platform.utils.validation.IValidationRule;
import java.util.Map;
import java.util.Optional;
public enum STradesValidationRule implements IValidationRule<ImdgValidationContext<STrades>> {
// 2.1. Найти в security запись, у которой security.securitySymbol=sTrades.secCode.
// Если такой записи нет, записать в лог ошибку (5416) "Инструмент %s не найден".
SecurityPresentFond() {
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<STrades> context) {
STrades validatedObject = context.getValidatedObject();
if (TextUtil.isEmpty(validatedObject.getSecCode())) {
return of(ClearingError.SecurityNotFound, validatedObject.getSecCode());
}
SecuritySelector<Security> slctr = new SecuritySelector<>(
context.obtainMap(IMDGDistributedNames.Map_FixedIncomeSecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_MoneyMarketSecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_EquitySecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_CurrencyPairSecurity, Security.class)
);
Security security = slctr.selectSecurityBySymbol(validatedObject.getSecCode().trim());
if (security == null) {
return of(ClearingError.SecurityNotFound, validatedObject.getSecCode());
}
context.storeObject(ValidationStored.STradesSecurity, security);
return empty();
}
},
SecurityPresentDeposit() {
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<STrades> context) {
STrades validatedObject = context.getValidatedObject();
if (TextUtil.isEmpty(validatedObject.getSecCode())) {
return of(ClearingError.SecurityNotFound, validatedObject.getSecCode());
}
String secCode = validatedObject.getSecCode().trim();
secCode = secCode.substring(0, Math.min(7, secCode.length()));
Imdg<MoneyMarketSecurity> securityImdg = context.obtainMap(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class);
Security security = securityImdg.getFirstObjectByFieldValues(Map.of("securitySymbol", secCode));
if (security == null) {
return of(ClearingError.SecurityNotFound, secCode);
}
context.storeObject(ValidationStored.STradesSecurity, security);
return empty();
}
},
SecurityPresentCurrencyPair() {
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<STrades> context) {
STrades validatedObject = context.getValidatedObject();
if (TextUtil.isEmpty(validatedObject.getSecCode())) {
return of(ClearingError.SecurityNotFound, validatedObject.getSecCode());
}
String secCode = validatedObject.getSecCode().trim();
SecuritySelector<Security> slctr = new SecuritySelector<>(
context.obtainMap(IMDGDistributedNames.Map_FixedIncomeSecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_MoneyMarketSecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_EquitySecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_CurrencyPairSecurity, Security.class)
);
Security security = slctr.selectSecurityBySymbol(secCode);
/*
Imdg<CurrencyPairSecurity> securityImdg = context.obtainMap(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class);
String secCode = validatedObject.getSecCode();
Security security = securityImdg.getFirstObjectByFieldValues(Map.of("securitySymbol", secCode));
*/
if (security == null) {
return of(ClearingError.SecurityNotFound, secCode);
}
context.storeObject(ValidationStored.STradesSecurity, security);
return empty();
}
},
// 2.2. Найти в company запись, у которой company.tradingCode=sTrades.firmId.
// Если такой записи нет, записать в лог ошибку (5410) "Компания %s не найдена".
CompanyPresent() {
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<STrades> context) {
STrades validatedObject = context.getValidatedObject();
if (TextUtil.isEmpty(validatedObject.getFirmId())) {
return of(ClearingError.CompanyNotFound, validatedObject.getFirmId());
}
Imdg<Company> companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class);
Company company = companyImdg.getFirstObjectByFieldValues(Map.of("tradingCode", validatedObject.getFirmId()));
if (company == null) {
return of(ClearingError.CompanyNotFound, validatedObject.getFirmId());
}
context.storeObject(ValidationStored.STradesCompany, company);
return empty();
}
},
CounterCompanyPresent() {
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<STrades> context) {
STrades validatedObject = context.getValidatedObject();
if (TextUtil.isEmpty(validatedObject.getCpFirmId())) {
return of(ClearingError.CompanyNotFound, validatedObject.getCpFirmId());
}
Imdg<Company> companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class);
Company company = companyImdg.getFirstObjectByFieldValues(Map.of("tradingCode", validatedObject.getCpFirmId()));
if (company == null) {
return of(ClearingError.CompanyNotFound, validatedObject.getCpFirmId());
}
context.storeObject(ValidationStored.STradesCounterCompany, company);
return empty();
}
},
// 2.3. Найти в tradingClearingRegistry запись, у которой tradingClearingRegistry.code=sTrades.account
// и tradingClearingRegistry.companyId=companyId, найденому в предыдущем пункте.
// Если такой записи нет, записать в лог ошибку (5418) "Торгово-клиринговый регистр %s не найден для компании %s".
TradingClearingRegistryPresent() {
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<STrades> context) {
STrades validatedObject = context.getValidatedObject();
if (TextUtil.isEmpty(validatedObject.getAccount())) {
return of(ClearingError.TradingClearingRegistryNotFound, "", validatedObject.getAccount());
}
if (context.getStoredObject(ValidationStored.STradesCompany) == null) { //maybe unnecessary
return of(ClearingError.CompanyNotFound, validatedObject.getSecCode());
}
Imdg<TradingClearingRegistry> registryImdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
TradingClearingRegistry tcRegister = registryImdg.getFirstObjectByFieldValues(
Map.of("code", validatedObject.getAccount().trim(),
"companyId", ((Company) context.getStoredObject(ValidationStored.STradesCompany)).getId()
));
if (tcRegister == null) {
return of(ClearingError.TradingClearingRegistryNotFound, "", validatedObject.getAccount());
}
// 2.4. Проверить, что найденный торгово-клиринговый регистр в активном состоянии:
// tradingClearingRegistry.statusBLKD/SSPD/CLOS (см. справочник serviceStatus).
// Иначе записать в лог ошибку (5419) "Торгово-клиринговый регистр %s неактивен".
ServiceStatus status = IEnumKey.getEnumByKey(ServiceStatus.class, tcRegister.getStatus());
if (IEnumKey.contains(status, ServiceStatus.Blocked, ServiceStatus.Suspended, ServiceStatus.Closed)) {
return of(ClearingError.TradingClearingRegistryNotActive, validatedObject.getAccount());
}
context.storeObject(ValidationStored.STradesTradingClearingRegistry, tcRegister);
return empty();
}
};
@Override
public String ruleName() {
return "STradesValidationRule." + name();
}
}

View file

@ -1,5 +1,8 @@
package ru.spcex.clearing.service.validation; package ru.spcex.clearing.service.validation;
import java.math.BigDecimal;
import java.util.Map;
import java.util.Optional;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.account.Account;
@ -7,13 +10,17 @@ import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.clearing.classes.statics.data.sdf.SDf20; import ru.clearing.classes.statics.data.sdf.SDf20;
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
import ru.clearing.classes.statics.data.security.Security; import ru.clearing.classes.statics.data.security.Security;
import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.error.ClearingError;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.service.AssetTrio; import ru.spcex.clearing.service.AssetTrio;
import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.clearing.service.registry.RegistryManager;
import ru.spcex.platform.enumeration.*; import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.enumeration.NoRef;
import ru.spcex.platform.enumeration.OperationCode;
import static ru.spcex.platform.enumeration.RegistryTradingParams.*;
import ru.spcex.platform.enumeration.ServiceStatus;
import ru.spcex.platform.enumeration.WorkflowStatus;
import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
@ -22,16 +29,10 @@ import ru.spcex.platform.imdg.api.predicate.specific.SecuritySelector;
import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.imdg.validation.ImdgValidationContext;
import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.text.TextUtil;
import ru.spcex.platform.utils.validation.IValidationRule;
import java.math.BigDecimal;
import java.util.Map;
import java.util.Optional;
import static ru.spcex.platform.enumeration.RegistryTradingParams.*;
import static ru.spcex.platform.utils.number.BigDecimalUtil.parseLeadingZeroes; import static ru.spcex.platform.utils.number.BigDecimalUtil.parseLeadingZeroes;
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD; import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
import ru.spcex.platform.utils.text.TextUtil;
import ru.spcex.platform.utils.validation.IValidationRule;
public enum Sdf20ValidationRule implements IValidationRule<ImdgValidationContext<SDf20>> { public enum Sdf20ValidationRule implements IValidationRule<ImdgValidationContext<SDf20>> {
Fields() { Fields() {
@ -109,7 +110,8 @@ public enum Sdf20ValidationRule implements IValidationRule<ImdgValidationContext
context.obtainMap(IMDGDistributedNames.Map_FixedIncomeSecurity, Security.class), context.obtainMap(IMDGDistributedNames.Map_FixedIncomeSecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_MoneyMarketSecurity, Security.class), context.obtainMap(IMDGDistributedNames.Map_MoneyMarketSecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_EquitySecurity, Security.class), context.obtainMap(IMDGDistributedNames.Map_EquitySecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_CurrencyPairSecurity, Security.class) context.obtainMap(IMDGDistributedNames.Map_CurrencyPairSecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_DigitalCertificateSecurity, Security.class)
); );
Security securityFound = slctr.selectSecurityBySymbol(security); Security securityFound = slctr.selectSecurityBySymbol(security);
if (securityFound == null) { if (securityFound == null) {

View file

@ -1,5 +1,8 @@
package ru.spcex.clearing.service.validation; package ru.spcex.clearing.service.validation;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Function;
import ru.clearing.classes.statics.data.security.Security; import ru.clearing.classes.statics.data.security.Security;
import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.error.ClearingError;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
@ -9,10 +12,6 @@ import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.text.TextUtil; import ru.spcex.platform.utils.text.TextUtil;
import ru.spcex.platform.utils.validation.IValidationRule; import ru.spcex.platform.utils.validation.IValidationRule;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Function;
public class SecurityBySecurityCodeValidationRule<T> implements IValidationRule<ImdgValidationContext<T>> { public class SecurityBySecurityCodeValidationRule<T> implements IValidationRule<ImdgValidationContext<T>> {
private final Function<T, String> securitySymbolExtractor; private final Function<T, String> securitySymbolExtractor;
@ -37,7 +36,8 @@ public class SecurityBySecurityCodeValidationRule<T> implements IValidationRule<
context.obtainMap(IMDGDistributedNames.Map_FixedIncomeSecurity, Security.class), context.obtainMap(IMDGDistributedNames.Map_FixedIncomeSecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_MoneyMarketSecurity, Security.class), context.obtainMap(IMDGDistributedNames.Map_MoneyMarketSecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_EquitySecurity, Security.class), context.obtainMap(IMDGDistributedNames.Map_EquitySecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_CurrencyPairSecurity, Security.class) context.obtainMap(IMDGDistributedNames.Map_CurrencyPairSecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_DigitalCertificateSecurity, Security.class)
); );
Security security = secSel.selectSecurityBySymbol(securitySymbol); Security security = secSel.selectSecurityBySymbol(securitySymbol);
if (security == null) { if (security == null) {

View file

@ -31,6 +31,7 @@ import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistryList; import ru.clearing.classes.statics.data.registry.TradingClearingRegistryList;
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity; import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
import ru.clearing.classes.statics.data.security.DigitalCertificateSecurity;
import ru.clearing.classes.statics.data.security.MoneyMarketSecurity; import ru.clearing.classes.statics.data.security.MoneyMarketSecurity;
import ru.clearing.classes.statics.data.security.Security; import ru.clearing.classes.statics.data.security.Security;
import ru.clearing.platform.dictionary.CurrencyPairDictionary; import ru.clearing.platform.dictionary.CurrencyPairDictionary;
@ -88,6 +89,7 @@ public class RequirementsAndObligationCreation implements ISessionStage {
private final Imdg<ClearingAccount> clAccImdg; private final Imdg<ClearingAccount> clAccImdg;
private final Imdg<DepoAccount> dpAccImdg; private final Imdg<DepoAccount> dpAccImdg;
private final Imdg<CurrencyPairSecurity> currPairSecImdg; private final Imdg<CurrencyPairSecurity> currPairSecImdg;
private final Imdg<DigitalCertificateSecurity> digitCertSecImdg;
private final Imdg<FixedIncomeSecurity> fixIncSecImdg; private final Imdg<FixedIncomeSecurity> fixIncSecImdg;
private final Imdg<MoneyMarketSecurity> monMrktSecImdg; private final Imdg<MoneyMarketSecurity> monMrktSecImdg;
private final Imdg<EquitySecurity> eqtySecImdg; private final Imdg<EquitySecurity> eqtySecImdg;
@ -118,6 +120,7 @@ public class RequirementsAndObligationCreation implements ISessionStage {
this.clAccImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_ClearingAccount, ClearingAccount.class, null); this.clAccImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_ClearingAccount, ClearingAccount.class, null);
this.dpAccImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_DepoAccount, DepoAccount.class, null); this.dpAccImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_DepoAccount, DepoAccount.class, null);
this.currPairSecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class, cash.currPairCash); this.currPairSecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class, cash.currPairCash);
this.digitCertSecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_DigitalCertificateSecurity, DigitalCertificateSecurity.class, cash.digitCertSecCash);
this.fixIncSecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class, cash.fixIncSecCash); this.fixIncSecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class, cash.fixIncSecCash);
this.monMrktSecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class, cash.monMrktSecCash); this.monMrktSecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class, cash.monMrktSecCash);
this.eqtySecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class, cash.eqtySecCash); this.eqtySecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class, cash.eqtySecCash);
@ -130,7 +133,8 @@ public class RequirementsAndObligationCreation implements ISessionStage {
this.secSelector = new SecuritySelector<>(castSecImdg(fixIncSecImdg), this.secSelector = new SecuritySelector<>(castSecImdg(fixIncSecImdg),
castSecImdg(monMrktSecImdg), castSecImdg(monMrktSecImdg),
castSecImdg(eqtySecImdg), castSecImdg(eqtySecImdg),
castSecImdg(currPairSecImdg)); castSecImdg(currPairSecImdg),
castSecImdg(digitCertSecImdg));
} }
private static <T extends Security> Imdg<Security> castSecImdg(Imdg<T> m) { private static <T extends Security> Imdg<Security> castSecImdg(Imdg<T> m) {
@ -497,6 +501,7 @@ public class RequirementsAndObligationCreation implements ISessionStage {
protected final CashV2<Long, ClearingAccount> clrAccCash; protected final CashV2<Long, ClearingAccount> clrAccCash;
protected final CashV2<Long, Session> ssnCash; protected final CashV2<Long, Session> ssnCash;
protected final CashV2<Long, CurrencyPairSecurity> currPairCash; protected final CashV2<Long, CurrencyPairSecurity> currPairCash;
protected final CashV2<Long, DigitalCertificateSecurity> digitCertSecCash;
protected final CashV2<Long, FixedIncomeSecurity> fixIncSecCash; protected final CashV2<Long, FixedIncomeSecurity> fixIncSecCash;
protected final CashV2<Long, MoneyMarketSecurity> monMrktSecCash; protected final CashV2<Long, MoneyMarketSecurity> monMrktSecCash;
protected final CashV2<Long, EquitySecurity> eqtySecCash; protected final CashV2<Long, EquitySecurity> eqtySecCash;
@ -513,6 +518,7 @@ public class RequirementsAndObligationCreation implements ISessionStage {
clrAccCash = add(new CashV2ById<>("clrAccCash")); clrAccCash = add(new CashV2ById<>("clrAccCash"));
ssnCash = add(new CashV2ById<>("ssnCash")); ssnCash = add(new CashV2ById<>("ssnCash"));
currPairCash = add(new CashV2ById<>("currPairCash")); currPairCash = add(new CashV2ById<>("currPairCash"));
digitCertSecCash = add(new CashV2ById<>("digitCertSecCash"));
fixIncSecCash = add(new CashV2ById<>("fixIncSecCash")); fixIncSecCash = add(new CashV2ById<>("fixIncSecCash"));
monMrktSecCash = add(new CashV2ById<>("monMrktSecCash")); monMrktSecCash = add(new CashV2ById<>("monMrktSecCash"));
eqtySecCash = add(new CashV2ById<>("eqtySecCash")); eqtySecCash = add(new CashV2ById<>("eqtySecCash"));

View file

@ -21,7 +21,7 @@ public class SecuritySelector<T extends SpcexObjectBase> {
private CashV2ByString<T> equitySecurityCash = null; private CashV2ByString<T> equitySecurityCash = null;
private final Imdg<T> currencyPairSecurity; private final Imdg<T> currencyPairSecurity;
private CashV2ByString<T> currencyPairSecurityCash = null; private CashV2ByString<T> currencyPairSecurityCash = null;
private Imdg<T> digitCertSecurity; private final Imdg<T> digitCertSecurity;
private CashV2ByString<T> digitCertSecCash = null; private CashV2ByString<T> digitCertSecCash = null;
public SecuritySelector(ImdgProvider imdgProvider, Class<T> clazz) { public SecuritySelector(ImdgProvider imdgProvider, Class<T> clazz) {
@ -35,20 +35,12 @@ public class SecuritySelector<T extends SpcexObjectBase> {
public SecuritySelector(Imdg<T> fixedIncomeSecurityImdg, public SecuritySelector(Imdg<T> fixedIncomeSecurityImdg,
Imdg<T> moneyMarketSecurityImdg, Imdg<T> moneyMarketSecurityImdg,
Imdg<T> equitySecurity, Imdg<T> equitySecurity,
Imdg<T> currencyPairSecurity) { Imdg<T> currencyPairSecurity,
Imdg<T> digitCertSecurity) {
this.fixedIncomeSecurityImdg = fixedIncomeSecurityImdg; this.fixedIncomeSecurityImdg = fixedIncomeSecurityImdg;
this.moneyMarketSecurityImdg = moneyMarketSecurityImdg; this.moneyMarketSecurityImdg = moneyMarketSecurityImdg;
this.equitySecurity = equitySecurity; this.equitySecurity = equitySecurity;
this.currencyPairSecurity = currencyPairSecurity; this.currencyPairSecurity = currencyPairSecurity;
this.digitCertSecurity = null;
}
public SecuritySelector(Imdg<T> fixedIncomeSecurityImdg,
Imdg<T> moneyMarketSecurityImdg,
Imdg<T> equitySecurity,
Imdg<T> currencyPairSecurity,
Imdg<T> digitCertSecurity) {
this(fixedIncomeSecurityImdg, moneyMarketSecurityImdg, equitySecurity, currencyPairSecurity);
this.digitCertSecurity = digitCertSecurity; this.digitCertSecurity = digitCertSecurity;
} }
@ -89,7 +81,9 @@ public class SecuritySelector<T extends SpcexObjectBase> {
security = retriever.apply(equitySecurity); security = retriever.apply(equitySecurity);
if (security != null) return security; if (security != null) return security;
security = retriever.apply(currencyPairSecurity); security = retriever.apply(currencyPairSecurity);
return security;// null if (security != null) return security;
security = retriever.apply(digitCertSecurity);
return security;
} }
private T selectSecurityByAnything(BiFunction<Imdg<T>, CashV2ByString<T>, T> retriever) { private T selectSecurityByAnything(BiFunction<Imdg<T>, CashV2ByString<T>, T> retriever) {