http://jira.mfd.msk:8088/browse/CLS-795 KSRepLccValueReport
This commit is contained in:
parent
82ec3869db
commit
4a31317f85
5 changed files with 473 additions and 3 deletions
|
|
@ -60,12 +60,12 @@ public class KSRepLccValueReport {
|
|||
private BigDecimal lockQuantity;
|
||||
|
||||
@CsvBindByName(column = "FREE_QUANTITY")
|
||||
@CsvBindByPosition(position = 10)
|
||||
@CsvBindByPosition(position = 11)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal freeQuantity;
|
||||
|
||||
@CsvBindByName(column = "VALUE")
|
||||
@CsvBindByPosition(position = 11)
|
||||
@CsvBindByPosition(position = 12)
|
||||
private BigDecimal value;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,29 +1,52 @@
|
|||
package ru.spcex.clearing.reports.builders.ks;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.clearing.classes.statics.data.security.Rates;
|
||||
import ru.clearing.classes.statics.data.security.RiskParameter;
|
||||
import ru.clearing.platform.dictionary.CurrencyPairDictionary;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.reports.builders.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.builders.EmptyParams;
|
||||
import ru.spcex.clearing.reports.builders.bean.KSRepLccValueReport;
|
||||
import ru.spcex.platform.enumeration.RegistryDesignation;
|
||||
import ru.spcex.platform.enumeration.RegistryInstrumentType;
|
||||
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
import ru.spcex.platform.enumeration.RegistryUnit;
|
||||
import ru.spcex.platform.enumeration.ReportBuilderType;
|
||||
import ru.spcex.platform.enumeration.ReportKeys;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||
|
||||
@Component
|
||||
public class KSRepLccValueReportBuilder extends CSVReportBuilder<EmptyParams, KSRepLccValueReport> {
|
||||
private final Imdg<Registry> registryImdg;
|
||||
private final Imdg<Rates> ratesImdg;
|
||||
private final Imdg<RiskParameter> riskParameterImdg;
|
||||
private final Imdg<CurrencyPairDictionary> currencyPairDictionaryImdg;
|
||||
|
||||
private List<KSRepLccValueReport> rows = null;
|
||||
|
||||
public KSRepLccValueReportBuilder(ImdgProvider imdgProvider) {
|
||||
registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
ratesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Rates, Rates.class);
|
||||
riskParameterImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_RiskParameter, RiskParameter.class);
|
||||
currencyPairDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairDictionary, CurrencyPairDictionary.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -53,9 +76,231 @@ public class KSRepLccValueReportBuilder extends CSVReportBuilder<EmptyParams, KS
|
|||
|
||||
@Override
|
||||
protected void collect(EmptyParams params) {
|
||||
|
||||
rows = new ArrayList<>();
|
||||
|
||||
ImdgPredicateBuilder registryPB = registryImdg.predicateBuilder();
|
||||
ImdgPredicate baseRegistriesPredicate = RegistryCodeSqlBuilder.getInstance(
|
||||
RegistryTradingParams.AM_F,
|
||||
RegistryTradingParams.OM_T,
|
||||
RegistryTradingParams.TM_T
|
||||
).buildPredicate(registryPB);
|
||||
Collection<Registry> baseRegistries = registryImdg.getCollectionObjectsByPredicate(baseRegistriesPredicate);
|
||||
|
||||
Map<String, List<Registry>> groupedByTKR = baseRegistries.stream()
|
||||
.filter(registry -> {
|
||||
if (registry.getTradingClearingRegistry() == null) {
|
||||
log.warn("Skip registry (id = {}): empty trading_clearing_registry", registry.getId());
|
||||
return false;
|
||||
}
|
||||
if (registry.getSecuritySymbol() == null) {
|
||||
log.warn("Skip registry (id = {}): empty security_symbol", registry.getId());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
})
|
||||
.collect(Collectors.groupingBy(Registry::getTradingClearingRegistry));
|
||||
|
||||
Map<String, Rates> currencyRates = new HashMap<>();
|
||||
LocalDateTime nowTime = LocalDateTime.now();
|
||||
for (Map.Entry<String, List<Registry>> entryTKR : groupedByTKR.entrySet()) {
|
||||
try {
|
||||
String tkr = entryTKR.getKey();
|
||||
List<Registry> registriesForTKR = entryTKR.getValue();
|
||||
|
||||
String firmId = registriesForTKR.iterator().next().getTradingCode();
|
||||
|
||||
BigDecimal sumValue = BigDecimal.ZERO;
|
||||
Map<Long, BigDecimal> quantities = new HashMap<>();
|
||||
Map<Long, BigDecimal> demandMoneys = new HashMap<>();
|
||||
Map<Long, BigDecimal> obligMoneys = new HashMap<>();
|
||||
Map<Long, BigDecimal> values = new HashMap<>();
|
||||
Map<Long, String> currencies = new HashMap<>();
|
||||
Map<Long, BigDecimal> rates = new HashMap<>();
|
||||
for (Registry registry : registriesForTKR) {
|
||||
String securitySymbol = registry.getSecuritySymbol();
|
||||
RegistryStatus status = IEnumKey.getEnumByKey(RegistryStatus.class, registry.getRegistryStatus());
|
||||
Rates currencyRate = getRate(securitySymbol, currencyRates);
|
||||
rates.computeIfAbsent(currencyRate.getCurrencyId(), c -> currencyRate.getValue());
|
||||
|
||||
String currency = currencies.computeIfAbsent(currencyRate.getCurrencyId(), s -> registry.getSecuritySymbol());
|
||||
BigDecimal quantity = quantities.computeIfAbsent(currencyRate.getCurrencyId(), s -> BigDecimal.ZERO);
|
||||
BigDecimal demandMoney = demandMoneys.computeIfAbsent(currencyRate.getCurrencyId(), s -> BigDecimal.ZERO);
|
||||
BigDecimal obligMoney = obligMoneys.computeIfAbsent(currencyRate.getCurrencyId(), s -> BigDecimal.ZERO);
|
||||
BigDecimal value = values.computeIfAbsent(currencyRate.getCurrencyId(), s -> BigDecimal.ZERO);
|
||||
|
||||
if (
|
||||
registry.getRegistryDesignation().equals(RegistryDesignation.A.getKey()) &&
|
||||
registry.getRegistryInstrumentType().equals(RegistryInstrumentType.M.getKey()) &&
|
||||
registry.getRegistryUnit().equals(RegistryUnit.F.getKey())
|
||||
) {
|
||||
if (registry.getBalance() == null) continue;
|
||||
BigDecimal forAdd = registry.getBalance().multiply(currencyRate.getValue());
|
||||
sumValue = sumValue.add(forAdd);
|
||||
value = value.add(forAdd);
|
||||
quantity = quantity.add(registry.getBalance());
|
||||
}
|
||||
|
||||
|
||||
if (
|
||||
List.of(RegistryStatus.MNG, RegistryStatus.PROC).contains(status) &&
|
||||
registry.getRegistryInstrumentType().equals(RegistryInstrumentType.M.getKey()) &&
|
||||
registry.getRegistryUnit().equals(RegistryUnit.T.getKey())
|
||||
) {
|
||||
if (registry.getRegistryDesignation().equals(RegistryDesignation.T.getKey())) {
|
||||
demandMoney = demandMoney.add(registry.getBalance());
|
||||
} else if (registry.getRegistryDesignation().equals(RegistryDesignation.O.getKey())) {
|
||||
obligMoney = obligMoney.add(registry.getBalance());
|
||||
}
|
||||
}
|
||||
|
||||
currencies.put(currencyRate.getCurrencyId(), currency);
|
||||
quantities.put(currencyRate.getCurrencyId(), quantity);
|
||||
demandMoneys.put(currencyRate.getCurrencyId(), demandMoney);
|
||||
obligMoneys.put(currencyRate.getCurrencyId(), obligMoney);
|
||||
values.put(currencyRate.getCurrencyId(), value);
|
||||
|
||||
}
|
||||
|
||||
BigDecimal sValue = BigDecimal.ZERO;
|
||||
BigDecimal m0Value = BigDecimal.ZERO;
|
||||
Map<Long, BigDecimal> posMoneys = new HashMap<>();
|
||||
Map<Long, RiskParameter> risk = new HashMap<>();
|
||||
for (Rates rate : currencyRates.values()) {
|
||||
Long currencyId = rate.getCurrencyId();
|
||||
BigDecimal posMoney = posMoneys.computeIfAbsent(currencyId, c -> BigDecimal.ZERO);
|
||||
posMoney = posMoney.add(
|
||||
quantities.get(currencyId).add(
|
||||
demandMoneys.get(currencyId)).subtract(obligMoneys.get(currencyId)
|
||||
)
|
||||
);
|
||||
posMoneys.put(currencyId, posMoney);
|
||||
|
||||
ImdgPredicateBuilder currencyPairPB = currencyPairDictionaryImdg.predicateBuilder();
|
||||
Collection<CurrencyPairDictionary> currencyPair = currencyPairDictionaryImdg.getCollectionObjectsByPredicate(
|
||||
currencyPairPB.equals("baseCurrency", currencies.get(currencyId))
|
||||
);
|
||||
BigDecimal riskValue = BigDecimal.ONE;
|
||||
boolean riskFound = false;
|
||||
if (!currencyPair.isEmpty()) {
|
||||
Long pairId = currencyPair.iterator().next().getId();
|
||||
ImdgPredicateBuilder riskParameterImdgPB = riskParameterImdg.predicateBuilder();
|
||||
Collection<RiskParameter> risks = riskParameterImdg.getCollectionObjectsByPredicate(
|
||||
riskParameterImdgPB.and(
|
||||
riskParameterImdgPB.equals("settlementType", "T1"),
|
||||
riskParameterImdgPB.equals("currencyPairId", pairId)
|
||||
)
|
||||
);
|
||||
if (!risks.isEmpty()) {
|
||||
RiskParameter currRisk = risks.iterator().next();
|
||||
risk.put(currencyId, currRisk);
|
||||
riskValue = currRisk.getValue();
|
||||
riskFound = true;
|
||||
}
|
||||
}
|
||||
if (!riskFound) {
|
||||
RiskParameter riskParameter = new RiskParameter();
|
||||
riskParameter.setValue(riskValue);
|
||||
risk.put(currencyId, riskParameter);
|
||||
}
|
||||
|
||||
|
||||
m0Value = m0Value.add(posMoney.multiply(rate.getValue()).multiply(riskValue));
|
||||
sValue = sValue.add(posMoney.multiply(rate.getValue()));
|
||||
|
||||
}
|
||||
|
||||
BigDecimal NPR = sValue.subtract(m0Value);
|
||||
|
||||
|
||||
BigDecimal lockValue = BigDecimal.ZERO;
|
||||
BigDecimal freeValue = BigDecimal.ZERO;
|
||||
List<KSRepLccValueReport> rowsForAdd = new ArrayList<>(currencyRates.size());
|
||||
for (Rates rate : currencyRates.values()) {
|
||||
try {
|
||||
KSRepLccValueReport row = new KSRepLccValueReport();
|
||||
row.setFirmId(firmId);
|
||||
row.setReportDate(nowTime);
|
||||
row.setTkr(tkr);
|
||||
row.setSumValue(sumValue);
|
||||
row.setValue(values.get(rate.getCurrencyId()));
|
||||
row.setSingleLimit(NPR);
|
||||
row.setCurrency(rate.getCurrency());
|
||||
row.setNccRealAccount("");
|
||||
|
||||
BigDecimal quantity = quantities.get(rate.getCurrencyId());
|
||||
BigDecimal freeQuantity;
|
||||
if (quantity.compareTo(BigDecimal.ZERO) <= 0 || NPR.compareTo(BigDecimal.ZERO) < 0) {
|
||||
freeQuantity = BigDecimal.ZERO;
|
||||
} else {
|
||||
BigDecimal constValue;
|
||||
BigDecimal sValueExt = BigDecimal.ZERO;
|
||||
BigDecimal m0ValueExt = BigDecimal.ZERO;
|
||||
for (Rates currRate : currencyRates.values()) {
|
||||
if (currRate.getId().equals(rate.getId())) continue;
|
||||
BigDecimal value = posMoneys.get(currRate.getCurrencyId()).multiply(currRate.getValue());
|
||||
sValueExt = sValueExt.add(value);
|
||||
m0ValueExt = m0ValueExt.add(value.multiply(risk.get(currRate.getCurrencyId()).getValue()));
|
||||
}
|
||||
constValue = sValueExt.subtract(m0ValueExt);
|
||||
BigDecimal posMoney = posMoneys.get(rate.getCurrencyId());
|
||||
BigDecimal riskValue = risk.get(rate.getCurrencyId()).getValue();
|
||||
BigDecimal NPRExt = posMoney.multiply(rate.getValue()).multiply(BigDecimal.ONE.subtract(riskValue)).add(constValue);
|
||||
BigDecimal minPos = constValue.negate().divide(BigDecimal.ONE.subtract(riskValue).multiply(rate.getValue()), RoundingMode.HALF_UP);
|
||||
|
||||
BigDecimal delta = posMoney.subtract(minPos);
|
||||
if (delta.compareTo(BigDecimal.ZERO) >= 0 && delta.compareTo(quantity) <= 0) {
|
||||
freeQuantity = delta;
|
||||
} else if (delta.compareTo(BigDecimal.ZERO) < 0 && delta.compareTo(quantity) > 0) {
|
||||
freeQuantity = quantity;
|
||||
} else freeQuantity = BigDecimal.ZERO;
|
||||
}
|
||||
BigDecimal lockQuantity = quantity.subtract(freeQuantity);
|
||||
row.setQuantity(quantity);
|
||||
row.setLockQuantity(lockQuantity);
|
||||
row.setFreeQuantity(freeQuantity);
|
||||
|
||||
lockValue = lockValue.add(lockQuantity.multiply(rate.getValue()));
|
||||
freeValue = freeValue.add(freeQuantity.multiply(rate.getValue()));
|
||||
|
||||
rowsForAdd.add(row);
|
||||
} catch (Exception e) {
|
||||
log.error("Error with currency (currency_id = %s), skipped".formatted(rate.getCurrencyId()), e);
|
||||
}
|
||||
}
|
||||
|
||||
for (KSRepLccValueReport row : rowsForAdd) {
|
||||
row.setLockValue(lockValue);
|
||||
row.setFreeValue(freeValue);
|
||||
}
|
||||
rows.addAll(rowsForAdd);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("Error with group (tkr = %s), skipped".formatted(entryTKR.getKey()), e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private Rates getRate(String securitySymbol, Map<String, Rates> currencyRates) {
|
||||
Rates currencyRate = currencyRates.get(securitySymbol);
|
||||
if (currencyRate == null) {
|
||||
ImdgPredicateBuilder ratesPB = ratesImdg.predicateBuilder();
|
||||
Collection<Rates> rates = ratesImdg.getCollectionObjectsByPredicate(
|
||||
ratesPB.and(
|
||||
ratesPB.equals("currency", securitySymbol),
|
||||
ratesPB.notNull("value"),
|
||||
ratesPB.equals("valueDate", LocalDate.now())
|
||||
)
|
||||
);
|
||||
if (!rates.isEmpty()) {
|
||||
currencyRate = rates.iterator().next();
|
||||
} else {
|
||||
currencyRate = new Rates();
|
||||
currencyRate.setValue(BigDecimal.ONE);
|
||||
}
|
||||
currencyRates.put(securitySymbol, currencyRate);
|
||||
}
|
||||
return currencyRate;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@ public class ValidationConfig {
|
|||
ReportBuilderType.KS_COMMISSION_TRADES,
|
||||
ReportBuilderType.KS_REP_LCC_TRADES,
|
||||
ReportBuilderType.KS_REP_LCC_NETTO,
|
||||
ReportBuilderType.KS_REP_LCC_VALUE,
|
||||
},
|
||||
ReportError.WrongFieldValue,
|
||||
ReportError.RequiredFieldEmpty)
|
||||
|
|
|
|||
|
|
@ -57,6 +57,8 @@ import ru.clearing.classes.statics.data.profile.ProfileDocument;
|
|||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
|
||||
import ru.clearing.classes.statics.data.security.Rates;
|
||||
import ru.clearing.classes.statics.data.security.RiskParameter;
|
||||
import ru.clearing.classes.statics.data.statement.Statement;
|
||||
import ru.clearing.platform.dictionary.CurrencyPairDictionary;
|
||||
import ru.clearing.platform.dictionary.RegistryCodeDictionary;
|
||||
|
|
@ -130,6 +132,8 @@ public class ReportServiceTest_KS {
|
|||
private Imdg<ClearingMemberCategory> clearingMemberCategoryImdg;
|
||||
private Imdg<CurrencyPairSecurity> currencyPairSecurityImdg;
|
||||
private Imdg<CurrencyPairDictionary> currencyPairDictionaryImdg;
|
||||
private Imdg<RiskParameter> riskParameterImdg;
|
||||
private Imdg<Rates> ratesImdg;
|
||||
|
||||
private Long COMPANY_ID;
|
||||
@Autowired
|
||||
|
|
@ -1634,6 +1638,221 @@ public class ReportServiceTest_KS {
|
|||
registryImdg.delete(registry_OMT_2_nextDay);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(14)
|
||||
public void createReportTest_KSRepLccValueReport() throws Exception {
|
||||
CurrencyPairDictionary currencyPairDictionary_rub = new CurrencyPairDictionary();
|
||||
currencyPairDictionary_rub.setBaseCurrency("RUB");
|
||||
Long currPairRubId = currencyPairDictionaryImdg.insert(currencyPairDictionary_rub);
|
||||
Long currRubId = 1L;
|
||||
|
||||
RiskParameter riskParameter_rub = new RiskParameter();
|
||||
riskParameter_rub.setValue(BigDecimal.valueOf(0.8));
|
||||
riskParameter_rub.setCurrencyPairId(currPairRubId);
|
||||
riskParameter_rub.setSettlementType("T1");
|
||||
riskParameterImdg.insert(riskParameter_rub);
|
||||
|
||||
Rates rates_rub = new Rates();
|
||||
rates_rub.setCurrency("RUB");
|
||||
rates_rub.setValue(BigDecimal.ONE);
|
||||
rates_rub.setCurrencyId(currRubId);
|
||||
rates_rub.setValueDate(LocalDate.now());
|
||||
ratesImdg.insert(rates_rub);
|
||||
|
||||
Registry amf_1_rub = new Registry();
|
||||
amf_1_rub.setTradingClearingRegistry("tkr");
|
||||
amf_1_rub.setTradingClearingRegistryId(7L);
|
||||
amf_1_rub.setSecuritySymbol("RUB");
|
||||
amf_1_rub.setSecurityId(currRubId);
|
||||
amf_1_rub.setRegistryDesignation(RegistryDesignation.A.getKey());
|
||||
amf_1_rub.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
amf_1_rub.setRegistryUnit(RegistryUnit.F.getKey());
|
||||
amf_1_rub.setRegistryStatus(RegistryStatus.OK.getKey());
|
||||
amf_1_rub.setBalance(BigDecimal.valueOf(100));
|
||||
registryImdg.insert(amf_1_rub);
|
||||
|
||||
Registry tmt_1_rub = new Registry();
|
||||
tmt_1_rub.setTradingClearingRegistry("tkr");
|
||||
tmt_1_rub.setTradingClearingRegistryId(7L);
|
||||
tmt_1_rub.setSecuritySymbol("RUB");
|
||||
tmt_1_rub.setSecurityId(currRubId);
|
||||
tmt_1_rub.setRegistryDesignation(RegistryDesignation.T.getKey());
|
||||
tmt_1_rub.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
tmt_1_rub.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
tmt_1_rub.setRegistryStatus(RegistryStatus.MNG.getKey());
|
||||
tmt_1_rub.setBalance(BigDecimal.valueOf(10000));
|
||||
registryImdg.insert(tmt_1_rub);
|
||||
|
||||
Registry omt_1_rub = new Registry();
|
||||
omt_1_rub.setTradingClearingRegistry("tkr");
|
||||
omt_1_rub.setTradingClearingRegistryId(7L);
|
||||
omt_1_rub.setSecuritySymbol("RUB");
|
||||
omt_1_rub.setSecurityId(currRubId);
|
||||
omt_1_rub.setRegistryDesignation(RegistryDesignation.O.getKey());
|
||||
omt_1_rub.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
omt_1_rub.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
omt_1_rub.setRegistryStatus(RegistryStatus.PROC.getKey());
|
||||
omt_1_rub.setBalance(BigDecimal.valueOf(1000));
|
||||
registryImdg.insert(omt_1_rub);
|
||||
|
||||
Registry amf_2_rub = new Registry();
|
||||
amf_2_rub.setTradingClearingRegistry("tkr");
|
||||
amf_2_rub.setTradingClearingRegistryId(7L);
|
||||
amf_2_rub.setSecuritySymbol("RUB");
|
||||
amf_2_rub.setSecurityId(currRubId);
|
||||
amf_2_rub.setRegistryDesignation(RegistryDesignation.A.getKey());
|
||||
amf_2_rub.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
amf_2_rub.setRegistryUnit(RegistryUnit.F.getKey());
|
||||
amf_2_rub.setRegistryStatus(RegistryStatus.OK.getKey());
|
||||
amf_2_rub.setBalance(BigDecimal.valueOf(200));
|
||||
registryImdg.insert(amf_2_rub);
|
||||
|
||||
Registry tmt_2_rub = new Registry();
|
||||
tmt_2_rub.setTradingClearingRegistry("tkr");
|
||||
tmt_2_rub.setTradingClearingRegistryId(7L);
|
||||
tmt_2_rub.setSecuritySymbol("RUB");
|
||||
tmt_2_rub.setSecurityId(currRubId);
|
||||
tmt_2_rub.setRegistryDesignation(RegistryDesignation.T.getKey());
|
||||
tmt_2_rub.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
tmt_2_rub.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
tmt_2_rub.setRegistryStatus(RegistryStatus.MNG.getKey());
|
||||
tmt_2_rub.setBalance(BigDecimal.valueOf(20000));
|
||||
registryImdg.insert(tmt_2_rub);
|
||||
|
||||
Registry omt_2_rub = new Registry();
|
||||
omt_2_rub.setTradingClearingRegistry("tkr");
|
||||
omt_2_rub.setTradingClearingRegistryId(7L);
|
||||
omt_2_rub.setSecuritySymbol("RUB");
|
||||
omt_2_rub.setSecurityId(currRubId);
|
||||
omt_2_rub.setRegistryDesignation(RegistryDesignation.O.getKey());
|
||||
omt_2_rub.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
omt_2_rub.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
omt_2_rub.setRegistryStatus(RegistryStatus.PROC.getKey());
|
||||
omt_2_rub.setBalance(BigDecimal.valueOf(2000));
|
||||
registryImdg.insert(omt_2_rub);
|
||||
|
||||
|
||||
CurrencyPairDictionary currencyPairDictionary_eur = new CurrencyPairDictionary();
|
||||
currencyPairDictionary_eur.setBaseCurrency("EUR");
|
||||
Long currPairEurId = currencyPairDictionaryImdg.insert(currencyPairDictionary_eur);
|
||||
Long currEurId = 2L;
|
||||
|
||||
RiskParameter riskParameter_eur = new RiskParameter();
|
||||
riskParameter_eur.setValue(BigDecimal.valueOf(0.9));
|
||||
riskParameter_eur.setCurrencyPairId(currPairEurId);
|
||||
riskParameter_eur.setSettlementType("T1");
|
||||
riskParameterImdg.insert(riskParameter_eur);
|
||||
|
||||
Rates rates_eur = new Rates();
|
||||
rates_eur.setCurrency("EUR");
|
||||
rates_eur.setValue(BigDecimal.valueOf(100));
|
||||
rates_eur.setCurrencyId(currEurId);
|
||||
rates_eur.setValueDate(LocalDate.now());
|
||||
ratesImdg.insert(rates_eur);
|
||||
|
||||
Registry amf_1_eur = new Registry();
|
||||
amf_1_eur.setTradingClearingRegistry("tkr");
|
||||
amf_1_eur.setTradingClearingRegistryId(7L);
|
||||
amf_1_eur.setSecuritySymbol("EUR");
|
||||
amf_1_eur.setSecurityId(currEurId);
|
||||
amf_1_eur.setRegistryDesignation(RegistryDesignation.A.getKey());
|
||||
amf_1_eur.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
amf_1_eur.setRegistryUnit(RegistryUnit.F.getKey());
|
||||
amf_1_eur.setRegistryStatus(RegistryStatus.OK.getKey());
|
||||
amf_1_eur.setBalance(BigDecimal.valueOf(100));
|
||||
registryImdg.insert(amf_1_eur);
|
||||
|
||||
Registry tmt_1_eur = new Registry();
|
||||
tmt_1_eur.setTradingClearingRegistry("tkr");
|
||||
tmt_1_eur.setTradingClearingRegistryId(7L);
|
||||
tmt_1_eur.setSecuritySymbol("EUR");
|
||||
tmt_1_eur.setSecurityId(currEurId);
|
||||
tmt_1_eur.setRegistryDesignation(RegistryDesignation.T.getKey());
|
||||
tmt_1_eur.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
tmt_1_eur.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
tmt_1_eur.setRegistryStatus(RegistryStatus.MNG.getKey());
|
||||
tmt_1_eur.setBalance(BigDecimal.valueOf(10000));
|
||||
registryImdg.insert(tmt_1_eur);
|
||||
|
||||
Registry omt_1_eur = new Registry();
|
||||
omt_1_eur.setTradingClearingRegistry("tkr");
|
||||
omt_1_eur.setTradingClearingRegistryId(7L);
|
||||
omt_1_eur.setSecuritySymbol("EUR");
|
||||
omt_1_eur.setSecurityId(currEurId);
|
||||
omt_1_eur.setRegistryDesignation(RegistryDesignation.O.getKey());
|
||||
omt_1_eur.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
omt_1_eur.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
omt_1_eur.setRegistryStatus(RegistryStatus.PROC.getKey());
|
||||
omt_1_eur.setBalance(BigDecimal.valueOf(1000));
|
||||
registryImdg.insert(omt_1_eur);
|
||||
|
||||
Registry amf_2_eur = new Registry();
|
||||
amf_2_eur.setTradingClearingRegistry("tkr");
|
||||
amf_2_eur.setTradingClearingRegistryId(7L);
|
||||
amf_2_eur.setSecuritySymbol("EUR");
|
||||
amf_2_eur.setSecurityId(currEurId);
|
||||
amf_2_eur.setRegistryDesignation(RegistryDesignation.A.getKey());
|
||||
amf_2_eur.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
amf_2_eur.setRegistryUnit(RegistryUnit.F.getKey());
|
||||
amf_2_eur.setRegistryStatus(RegistryStatus.OK.getKey());
|
||||
amf_2_eur.setBalance(BigDecimal.valueOf(200));
|
||||
registryImdg.insert(amf_2_eur);
|
||||
|
||||
Registry tmt_2_eur = new Registry();
|
||||
tmt_2_eur.setTradingClearingRegistry("tkr");
|
||||
tmt_2_eur.setTradingClearingRegistryId(7L);
|
||||
tmt_2_eur.setSecuritySymbol("EUR");
|
||||
tmt_2_eur.setSecurityId(currEurId);
|
||||
tmt_2_eur.setRegistryDesignation(RegistryDesignation.T.getKey());
|
||||
tmt_2_eur.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
tmt_2_eur.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
tmt_2_eur.setRegistryStatus(RegistryStatus.MNG.getKey());
|
||||
tmt_2_eur.setBalance(BigDecimal.valueOf(20000));
|
||||
registryImdg.insert(tmt_2_eur);
|
||||
|
||||
Registry omt_2_eur = new Registry();
|
||||
omt_2_eur.setTradingClearingRegistry("tkr");
|
||||
omt_2_eur.setTradingClearingRegistryId(7L);
|
||||
omt_2_eur.setSecuritySymbol("EUR");
|
||||
omt_2_eur.setSecurityId(currEurId);
|
||||
omt_2_eur.setRegistryDesignation(RegistryDesignation.O.getKey());
|
||||
omt_2_eur.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
omt_2_eur.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
omt_2_eur.setRegistryStatus(RegistryStatus.PROC.getKey());
|
||||
omt_2_eur.setBalance(BigDecimal.valueOf(2000));
|
||||
registryImdg.insert(omt_2_eur);
|
||||
|
||||
|
||||
ReportRequest reportRequest = new ReportRequest();
|
||||
reportRequest.setReportId(ReportBuilderType.KS_REP_LCC_VALUE.getKey());
|
||||
String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L);
|
||||
|
||||
TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(),
|
||||
Consts.CREATE_REPORT,
|
||||
reportRequestCnt++,
|
||||
0,
|
||||
jsonString);
|
||||
|
||||
TestUtils.waitingSendAndCheckRecord(0L, producer);
|
||||
|
||||
File outFile = outFolder.listFiles()[0];
|
||||
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/ks/KS_REP_LCC_VALUE_REPORT_expected.csv").getFile());
|
||||
compareCSVFiles(expectedFile, outFile, Arrays.asList("REPORT_DATE"));
|
||||
|
||||
registryImdg.delete(amf_1_rub);
|
||||
registryImdg.delete(amf_2_rub);
|
||||
registryImdg.delete(amf_1_eur);
|
||||
registryImdg.delete(amf_2_eur);
|
||||
registryImdg.delete(tmt_1_rub);
|
||||
registryImdg.delete(tmt_2_rub);
|
||||
registryImdg.delete(tmt_1_eur);
|
||||
registryImdg.delete(tmt_2_eur);
|
||||
registryImdg.delete(omt_1_rub);
|
||||
registryImdg.delete(omt_2_rub);
|
||||
registryImdg.delete(omt_1_eur);
|
||||
registryImdg.delete(omt_2_eur);
|
||||
}
|
||||
|
||||
|
||||
private void compareCSVFiles(File expectedFile, File actualFile, List<String> columnsForSkip) throws IOException, CsvValidationException {
|
||||
if (columnsForSkip == null) columnsForSkip = Collections.emptyList();
|
||||
|
|
@ -1746,6 +1965,8 @@ public class ReportServiceTest_KS {
|
|||
clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
|
||||
currencyPairSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class);
|
||||
currencyPairDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairDictionary, CurrencyPairDictionary.class);
|
||||
riskParameterImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_RiskParameter, RiskParameter.class);
|
||||
ratesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Rates, Rates.class);
|
||||
}
|
||||
|
||||
private void clearTestDir() throws IOException {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
"FIRM_ID","REPORT_DATE","TKR","SUM_VALUE","LOCK_VALUE","FREE_VALUE","SINGLE_LIMIT","CURRENCY","NCC_REAL_ACCOUNT","QUANTITY","LOCK_QUANTITY","FREE_QUANTITY","VALUE"
|
||||
,"03.12.2024T13:28:26","tkr","30300.00","30300.00","0.00","278460.00","EUR",,"300.00","300.00","0.00","30000"
|
||||
,"03.12.2024T13:28:26","tkr","30300.00","30300.00","0.00","278460.00","RUB",,"300.00","300.00","0.00","300"
|
||||
|
Loading…
Add table
Reference in a new issue