SummaryLiabilitiesClaimsReportBuilder
SummaryMoneyChangeReportBuilder
This commit is contained in:
parent
c3a1cc41de
commit
75e8a83aad
11 changed files with 344 additions and 369 deletions
|
|
@ -90,7 +90,7 @@ public class ValidationConfig {
|
|||
ReportRequestFromRegistry::getReportId,
|
||||
new ReportType[]{
|
||||
ReportType.OPERATIONAL_MONEY_CHANGE,
|
||||
ReportType.SUMMARY_L_MONEY_CHANGE,
|
||||
ReportType.SUMMARY_MONEY_CHANGE,
|
||||
ReportType.PERIOD_MONEY_CHANGE
|
||||
},
|
||||
ReportError.WrongFieldValue,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,253 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
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.instrument.issue.FixedIncomeSecurity;
|
||||
import ru.clearing.classes.statics.data.misc.Listing;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.reports.SessionIdParam;
|
||||
import ru.spcex.platform.enumeration.Market;
|
||||
import ru.spcex.platform.enumeration.Side;
|
||||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||
|
||||
import java.math.RoundingMode;
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
// todo check typo
|
||||
public abstract class LiabilitiesClaimsReportBuilder extends CSVReportBuilder<SessionIdParam> {
|
||||
private final Imdg<ExecutionFond> executionFondImdg;
|
||||
private final Imdg<ExecutionDeposit> executionDepositImdg;
|
||||
private final Imdg<Company> companyImdg;
|
||||
private final Imdg<Registry> registryImdg;
|
||||
private final Imdg<Listing> listingImdg;
|
||||
private final Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
|
||||
private final Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
|
||||
|
||||
private final String[] headers = {
|
||||
"id", "doc_date", "doc_time", "doc_type", "clearingHouse", "firmId", "firName", "session_id",
|
||||
"clearing_date", "clearing_time", "trdAccId", "account", "depo_account", "currency", "tr_id", "securityId",
|
||||
"tr_buySell", "tr_date", "tr_execDate", "exec_status", "repaym_date", "tr_price", "nominal", "lot_value",
|
||||
"tr_lot", "tr_quantity", "tr_value", "tr_accruedint", "accruedint", "tr_clrComm", "tr_exhComm", "cash_liability",
|
||||
"depo_liability", "cash_netto", "depo_netto"
|
||||
};
|
||||
private List<String[]> lines = null;
|
||||
|
||||
public LiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) {
|
||||
this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
|
||||
this.executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class);
|
||||
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class);
|
||||
this.fixedIncomeSecurityImdg = imdgProvider.getImdg(
|
||||
IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class
|
||||
);
|
||||
this.tradingClearingRegistryImdg = imdgProvider.getImdg(
|
||||
IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getHeaders() {
|
||||
return headers;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String[]> getLines() {
|
||||
return lines;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(SessionIdParam params) {
|
||||
ImdgPredicate executionFondPredicate = executionFondImdg
|
||||
.predicateBuilder()
|
||||
.equals("sessionId", params.getSessionId());
|
||||
Collection<ExecutionFond> executionFonds = executionFondImdg.getCollectionObjectsByPredicate(executionFondPredicate);
|
||||
|
||||
ImdgPredicate executionDepositPredicate = executionDepositImdg
|
||||
.predicateBuilder()
|
||||
.equals("sessionId", params.getSessionId());
|
||||
Collection<ExecutionDeposit> executionDeposits = executionDepositImdg.getCollectionObjectsByPredicate(executionDepositPredicate);
|
||||
|
||||
List<ExecutionCommon> executions = new ArrayList<>(executionFonds.size() + executionDeposits.size());
|
||||
executions.addAll(executionFonds);
|
||||
executions.addAll(executionDeposits);
|
||||
|
||||
Company clearingHouseCompany = companyImdg.getSingleObjectByID(1L);
|
||||
String clearingHouse = clearingHouseCompany.getFullName();
|
||||
|
||||
Instant now = Instant.now();
|
||||
lines = new ArrayList<>(executions.size());
|
||||
for (ExecutionCommon execution : executions) {
|
||||
Company company = companyImdg.getSingleObjectByID(execution.getCompanyId());
|
||||
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
|
||||
|
||||
Registry registry = registryImdg.getSingleObjectByFieldValues(Map.of("companyId", execution.getCompanyId()));
|
||||
Collection<Registry> registriesForSessionId = registryImdg.getCollectionObjectsByFieldValues(
|
||||
Map.of("sessionId", execution.getSessionId())
|
||||
);
|
||||
Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", execution.getSecurityId()));
|
||||
FixedIncomeSecurity fixedIncomeSecurity = fixedIncomeSecurityImdg.getSingleObjectByFieldValues(
|
||||
Map.of("securityId", execution.getSecurityId())
|
||||
);
|
||||
TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryImdg.getSingleObjectByID(
|
||||
execution.getTradingClearingRegistryId()
|
||||
);
|
||||
|
||||
String id = String.valueOf(execution.getId());
|
||||
String docDate = dateFormatter.format(now);
|
||||
String docTime = timeFormatter.format(now);
|
||||
String docName = "Отчет об обязательствах/требованиях Участника клиринга";
|
||||
String docType = "KS_FIRMID_LIABILITIES";
|
||||
String firmId = String.valueOf(execution.getCompanyId());
|
||||
String firName = company.getFullName();
|
||||
String sessionId = String.valueOf(execution.getSessionId());
|
||||
String clearingDate = dateFormatter.format(execution.getClearingDate());
|
||||
String clearingTime = dateFormatter.format(execution.getClearingDate()); // todo check it
|
||||
String trdAccId = registry.getTradingClearingRegistry();
|
||||
String account = String.valueOf(tradingClearingRegistry.getMoneyAccountId());
|
||||
String depoAccount = String.valueOf(tradingClearingRegistry.getDepoAaccountId());
|
||||
String currency = execution.getSettlementCurrency();
|
||||
String trId = String.valueOf(execution.getExchangeExecutionId());
|
||||
String securityId = String.valueOf(execution.getSecurityId());
|
||||
|
||||
String trBuySell = "";
|
||||
if (Side.BUY.equalsByKey(execution.getSide()))
|
||||
trBuySell = "B";
|
||||
else if (Side.SELL.equalsByKey(execution.getSide()))
|
||||
trBuySell = "S";
|
||||
String trDate = dateFormatter.format(execution.getTradingDate());
|
||||
|
||||
String trExecDate = "";
|
||||
String execStatus = "";
|
||||
String repaymDate = "";
|
||||
String trPrice = "";
|
||||
String nominal = "";
|
||||
String trQuantity = "";
|
||||
String trValue = "";
|
||||
String trAccruedInt = "";
|
||||
String accruedInt = "";
|
||||
String cashLiability = "";
|
||||
String depoLiability = "";
|
||||
if (execution instanceof ExecutionDeposit executionDeposit) {
|
||||
trExecDate = dateFormatter.format(executionDeposit.getSecondLegSettlementDate());
|
||||
if (Market.mkrs.equalsByKey(execution.getMarket())) {
|
||||
execStatus = "Y";
|
||||
repaymDate = dateFormatter.format(executionDeposit.getSecondLegSettlementDate());
|
||||
trPrice = String.valueOf(executionDeposit.getPrice());
|
||||
trValue = String.valueOf(executionDeposit.getFirstLegAmount());
|
||||
cashLiability = String.valueOf(executionDeposit.getFirstLegAmount());
|
||||
}
|
||||
} else if (execution instanceof ExecutionFond executionFond) {
|
||||
trExecDate = dateFormatter.format(executionFond.getSettlementDate());
|
||||
if (Market.fond.equalsByKey(execution.getMarket())) {
|
||||
trPrice = String.valueOf(
|
||||
executionFond.getSettlementAmount().divide(executionFond.getQuantity(), RoundingMode.HALF_UP)
|
||||
);
|
||||
trQuantity = String.valueOf(executionFond.getQuantity());
|
||||
nominal = String.valueOf(fixedIncomeSecurity.getNominalValue());
|
||||
trValue = String.valueOf(executionFond.getSettlementAmount());
|
||||
trAccruedInt = String.valueOf(fixedIncomeSecurity.getCoupon());
|
||||
accruedInt = String.valueOf(
|
||||
fixedIncomeSecurity.getCoupon().divide(executionFond.getQuantity(), RoundingMode.HALF_UP)
|
||||
);
|
||||
cashLiability = String.valueOf(executionFond.getSettlementAmount());
|
||||
depoLiability = String.valueOf(executionFond.getQuantity());
|
||||
}
|
||||
}
|
||||
|
||||
String lotValue = String.valueOf(listing.getLotSize());
|
||||
String trLot = String.valueOf(execution.getLots());
|
||||
String trClrComm = "";
|
||||
String trExhComm = "";
|
||||
|
||||
Registry tm_tRegistry = null;
|
||||
Registry om_tRegistry = null;
|
||||
Registry ts_tRegistry = null;
|
||||
Registry os_tRegistry = null;
|
||||
for (Registry currRegistry : registriesForSessionId) {
|
||||
String registryCode = currRegistry.getRegistryCode();
|
||||
if (registryCode.endsWith("T")) {
|
||||
if (registryCode.startsWith("TM")) {
|
||||
if (tm_tRegistry != null && tm_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue;
|
||||
tm_tRegistry = currRegistry;
|
||||
}
|
||||
if (registryCode.startsWith("OM")) {
|
||||
if (om_tRegistry != null && om_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue;
|
||||
om_tRegistry = currRegistry;
|
||||
}
|
||||
if (registryCode.startsWith("TS")) {
|
||||
if (ts_tRegistry != null && ts_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue;
|
||||
ts_tRegistry = currRegistry;
|
||||
}
|
||||
if (registryCode.startsWith("OS")) {
|
||||
if (os_tRegistry != null && os_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue;
|
||||
os_tRegistry = currRegistry;
|
||||
}
|
||||
}
|
||||
}
|
||||
String cashNetto = "";
|
||||
if (tm_tRegistry != null && om_tRegistry != null) {
|
||||
cashNetto = String.valueOf(tm_tRegistry.getBalance().subtract(om_tRegistry.getBalance()));
|
||||
}
|
||||
|
||||
String depoNetto = "";
|
||||
if (ts_tRegistry != null && os_tRegistry != null) {
|
||||
depoNetto = String.valueOf(ts_tRegistry.getBalance().subtract(os_tRegistry.getBalance()));
|
||||
}
|
||||
|
||||
|
||||
int valueIdx = 0;
|
||||
String[] line = new String[getHeaders().length];
|
||||
line[valueIdx++] = id;
|
||||
line[valueIdx++] = docDate;
|
||||
line[valueIdx++] = docTime;
|
||||
line[valueIdx++] = docName;
|
||||
line[valueIdx++] = docType;
|
||||
line[valueIdx++] = clearingHouse;
|
||||
line[valueIdx++] = firmId;
|
||||
line[valueIdx++] = firName;
|
||||
line[valueIdx++] = sessionId;
|
||||
line[valueIdx++] = clearingDate;
|
||||
line[valueIdx++] = clearingTime;
|
||||
line[valueIdx++] = trdAccId;
|
||||
line[valueIdx++] = account;
|
||||
line[valueIdx++] = depoAccount;
|
||||
line[valueIdx++] = currency;
|
||||
line[valueIdx++] = trId;
|
||||
line[valueIdx++] = securityId;
|
||||
line[valueIdx++] = trBuySell;
|
||||
line[valueIdx++] = trDate;
|
||||
line[valueIdx++] = trExecDate;
|
||||
line[valueIdx++] = execStatus;
|
||||
line[valueIdx++] = repaymDate;
|
||||
line[valueIdx++] = trPrice;
|
||||
line[valueIdx++] = nominal;
|
||||
line[valueIdx++] = lotValue;
|
||||
line[valueIdx++] = trLot;
|
||||
line[valueIdx++] = trQuantity;
|
||||
line[valueIdx++] = trValue;
|
||||
line[valueIdx++] = trAccruedInt;
|
||||
line[valueIdx++] = accruedInt;
|
||||
line[valueIdx++] = trClrComm;
|
||||
line[valueIdx++] = trExhComm;
|
||||
line[valueIdx++] = cashLiability;
|
||||
line[valueIdx++] = depoLiability;
|
||||
line[valueIdx++] = cashNetto;
|
||||
line[valueIdx] = depoNetto;
|
||||
lines.add(line);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -9,20 +9,18 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
|||
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.reports.PeriodParams;
|
||||
import ru.spcex.platform.enumeration.InOutDirection;
|
||||
import ru.spcex.platform.enumeration.ReportType;
|
||||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class OperationalMoneyChangeReport extends CSVReportBuilder<PeriodParams> {
|
||||
public abstract class MoneyChangeReportBuilder extends CSVReportBuilder<PeriodParams> {
|
||||
private final Imdg<Registry> registryImdg;
|
||||
private final Imdg<Company> companyImdg;
|
||||
private final Imdg<Listing> listingImdg;
|
||||
|
|
@ -35,7 +33,7 @@ public class OperationalMoneyChangeReport extends CSVReportBuilder<PeriodParams>
|
|||
};
|
||||
private List<String[]> lines = null;
|
||||
|
||||
public OperationalMoneyChangeReport(ImdgProvider imdgProvider) {
|
||||
public MoneyChangeReportBuilder(ImdgProvider imdgProvider) {
|
||||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||
this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class);
|
||||
|
|
@ -53,20 +51,6 @@ public class OperationalMoneyChangeReport extends CSVReportBuilder<PeriodParams>
|
|||
return lines;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getReportFilename(PeriodParams params) {
|
||||
return "operational_money_change.%s-%s.%s".formatted(
|
||||
dateFormatter.format(params.getStartDate()),
|
||||
dateFormatter.format(params.getEndDate()),
|
||||
dateTimeFormatter.format(LocalDateTime.now())
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ReportType getReportType() {
|
||||
return ReportType.OPERATIONAL_MONEY_CHANGE;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(PeriodParams params) {
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
|
|
@ -103,10 +87,10 @@ public class OperationalMoneyChangeReport extends CSVReportBuilder<PeriodParams>
|
|||
String firmId = String.valueOf(registry.getCompanyId());
|
||||
String firName = company.getFullName();
|
||||
String trdAccId = registry.getTradingClearingRegistry();
|
||||
String account = String.valueOf(registry.getAccountId()); // todo *
|
||||
String currency = listing.getTradingCurrency(); // todo *
|
||||
String account = String.valueOf(registry.getAccountId());
|
||||
String currency = listing.getTradingCurrency();
|
||||
String registryCode = String.valueOf(registry.getId());
|
||||
String registryName = registry.getFullName(); // todo *
|
||||
String registryName = registry.getRegistryCode();
|
||||
String openBalance = String.valueOf(registry.getOpenBalance());
|
||||
String changeBalance = String.valueOf(registry.getCloseBalance().subtract(registry.getOpenBalance()));
|
||||
String addWithdraw = String.valueOf(registry.getCredit().subtract(registry.getDebit()));
|
||||
|
|
@ -124,6 +108,7 @@ public class OperationalMoneyChangeReport extends CSVReportBuilder<PeriodParams>
|
|||
line[valueIdx++] = docTime;
|
||||
line[valueIdx++] = docName;
|
||||
line[valueIdx++] = docTime;
|
||||
line[valueIdx++] = docType;
|
||||
line[valueIdx++] = clearingHouse;
|
||||
line[valueIdx++] = firmId;
|
||||
line[valueIdx++] = firName;
|
||||
|
|
@ -1,263 +1,23 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
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.instrument.issue.FixedIncomeSecurity;
|
||||
import ru.clearing.classes.statics.data.misc.Listing;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.reports.SessionIdParam;
|
||||
import ru.spcex.platform.enumeration.Market;
|
||||
import ru.spcex.platform.enumeration.ReportType;
|
||||
import ru.spcex.platform.enumeration.Side;
|
||||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||
|
||||
import java.math.RoundingMode;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
// todo check typo
|
||||
public class OperationalLiabilitiesClaimsReportBuilder extends CSVReportBuilder<SessionIdParam> {
|
||||
private final Imdg<ExecutionFond> executionFondImdg;
|
||||
private final Imdg<ExecutionDeposit> executionDepositImdg;
|
||||
private final Imdg<Company> companyImdg;
|
||||
private final Imdg<Registry> registryImdg;
|
||||
private final Imdg<Listing> listingImdg;
|
||||
private final Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
|
||||
private final Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
|
||||
|
||||
private final String[] headers = {
|
||||
"id", "doc_date", "doc_time", "doc_type", "clearingHouse", "firmId", "firName", "session_id",
|
||||
"clearing_date", "clearing_time", "trdAccId", "account", "depo_account", "currency", "tr_id", "securityId",
|
||||
"tr_buySell", "tr_date", "tr_execDate", "exec_status", "repaym_date", "tr_price", "nominal", "lot_value",
|
||||
"tr_lot", "tr_quantity", "tr_value", "tr_accruedint", "accruedint", "tr_clrComm", "tr_exhComm", "cash_liability",
|
||||
"depo_liability", "cash_netto", "depo_netto"
|
||||
};
|
||||
private List<String[]> lines = null;
|
||||
|
||||
public class OperationalLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder {
|
||||
public OperationalLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) {
|
||||
this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
|
||||
this.executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class);
|
||||
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class);
|
||||
this.fixedIncomeSecurityImdg = imdgProvider.getImdg(
|
||||
IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class
|
||||
);
|
||||
this.tradingClearingRegistryImdg = imdgProvider.getImdg(
|
||||
IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getHeaders() {
|
||||
return headers;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String[]> getLines() {
|
||||
return lines;
|
||||
super(imdgProvider);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getReportFilename(SessionIdParam params) {
|
||||
return "operational_liabilities_claims.%s".formatted(LocalDateTime.now());
|
||||
return "operational_liabilities_claims.%s".formatted(Instant.now());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ReportType getReportType() {
|
||||
return ReportType.OPERATIONAL_LIABILITIES_CLAIMS;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(SessionIdParam params) {
|
||||
ImdgPredicate executionFondPredicate = executionFondImdg
|
||||
.predicateBuilder()
|
||||
.equals("sessionId", params.getSessionId());
|
||||
Collection<ExecutionFond> executionFonds = executionFondImdg.getCollectionObjectsByPredicate(executionFondPredicate);
|
||||
|
||||
ImdgPredicate executionDepositPredicate = executionDepositImdg
|
||||
.predicateBuilder()
|
||||
.equals("sessionId", params.getSessionId());
|
||||
Collection<ExecutionDeposit> executionDeposits = executionDepositImdg.getCollectionObjectsByPredicate(executionDepositPredicate);
|
||||
|
||||
List<ExecutionCommon> executions = new ArrayList<>(executionFonds.size() + executionDeposits.size());
|
||||
executions.addAll(executionFonds);
|
||||
executions.addAll(executionDeposits);
|
||||
|
||||
Company clearingHouseCompany = companyImdg.getSingleObjectByID(1L);
|
||||
String clearingHouse = clearingHouseCompany.getFullName();
|
||||
|
||||
Instant now = Instant.now();
|
||||
lines = new ArrayList<>(executions.size());
|
||||
for (ExecutionCommon execution : executions) {
|
||||
Company company = companyImdg.getSingleObjectByID(execution.getCompanyId());
|
||||
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
|
||||
|
||||
Registry registry = registryImdg.getSingleObjectByFieldValues(Map.of("companyId", execution.getCompanyId()));
|
||||
Collection<Registry> registriesForSessionId = registryImdg.getCollectionObjectsByFieldValues(
|
||||
Map.of("sessionId", execution.getSessionId())
|
||||
);
|
||||
Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", execution.getSecurityId()));
|
||||
FixedIncomeSecurity fixedIncomeSecurity = fixedIncomeSecurityImdg.getSingleObjectByFieldValues(
|
||||
Map.of("securityId", execution.getSecurityId())
|
||||
);
|
||||
TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryImdg.getSingleObjectByID(
|
||||
execution.getTradingClearingRegistryId()
|
||||
);
|
||||
|
||||
String id = String.valueOf(execution.getId());
|
||||
String docDate = dateFormatter.format(now);
|
||||
String docTime = timeFormatter.format(now);
|
||||
String docName = "Отчет об обязательствах/требованиях Участника клиринга";
|
||||
String docType = "KS_FIRMID_LIABILITIES";
|
||||
String firmId = String.valueOf(execution.getCompanyId());
|
||||
String firName = company.getFullName();
|
||||
String sessionId = String.valueOf(execution.getSessionId());
|
||||
String clearingDate = dateFormatter.format(execution.getClearingDate());
|
||||
String trdAccId = registry.getTradingClearingRegistry();
|
||||
String account = String.valueOf(tradingClearingRegistry.getMoneyAccountId());
|
||||
String depoAccount = String.valueOf(tradingClearingRegistry.getDepoAaccountId());
|
||||
String currency = execution.getSettlementCurrency();
|
||||
String trId = String.valueOf(execution.getExchangeExecutionId());
|
||||
String securityId = String.valueOf(execution.getSecurityId());
|
||||
|
||||
String trBuySell = "";
|
||||
if (Side.BUY.equalsByKey(execution.getSide()))
|
||||
trBuySell = "B";
|
||||
else if (Side.SELL.equalsByKey(execution.getSide()))
|
||||
trBuySell = "S";
|
||||
String trDate = dateFormatter.format(execution.getTradingDate());
|
||||
|
||||
String trExecDate = "";
|
||||
String execStatus = "";
|
||||
String repaymDate = "";
|
||||
String trPrice = "";
|
||||
String nominal = "";
|
||||
String trQuantity = "";
|
||||
String trValue = "";
|
||||
String trAccruedInt = "";
|
||||
String accruedInt = "";
|
||||
String cashLiability = "";
|
||||
String depoLiability = "";
|
||||
if (execution instanceof ExecutionDeposit executionDeposit) {
|
||||
trExecDate = dateFormatter.format(executionDeposit.getSecondLegSettlementDate());
|
||||
if (Market.mkrs.equalsByKey(execution.getMarket())) {
|
||||
execStatus = "Y";
|
||||
repaymDate = dateFormatter.format(executionDeposit.getSecondLegSettlementDate());
|
||||
trPrice = String.valueOf(executionDeposit.getPrice());
|
||||
trValue = String.valueOf(executionDeposit.getFirstLegAmount());
|
||||
cashLiability = String.valueOf(executionDeposit.getFirstLegAmount());
|
||||
}
|
||||
} else if (execution instanceof ExecutionFond executionFond) {
|
||||
trExecDate = dateFormatter.format(executionFond.getSettlementDate());
|
||||
if (Market.fond.equalsByKey(execution.getMarket())) {
|
||||
trPrice = String.valueOf(
|
||||
executionFond.getSettlementAmount().divide(executionFond.getQuantity(), RoundingMode.HALF_UP)
|
||||
);
|
||||
trQuantity = String.valueOf(executionFond.getQuantity());
|
||||
nominal = String.valueOf(fixedIncomeSecurity.getNominalValue());
|
||||
trValue = String.valueOf(executionFond.getSettlementAmount());
|
||||
trAccruedInt = String.valueOf(fixedIncomeSecurity.getCoupon());
|
||||
accruedInt = String.valueOf(
|
||||
fixedIncomeSecurity.getCoupon().divide(executionFond.getQuantity(), RoundingMode.HALF_UP)
|
||||
);
|
||||
cashLiability = String.valueOf(executionFond.getSettlementAmount());
|
||||
depoLiability = String.valueOf(executionFond.getQuantity());
|
||||
}
|
||||
}
|
||||
|
||||
String lotValue = String.valueOf(listing.getLotSize());
|
||||
String trLot = String.valueOf(execution.getLots());
|
||||
String trClrComm = "";
|
||||
String trExhComm = "";
|
||||
|
||||
Registry tm_tRegistry = null;
|
||||
Registry om_tRegistry = null;
|
||||
Registry ts_tRegistry = null;
|
||||
Registry os_tRegistry = null;
|
||||
for (Registry currRegistry : registriesForSessionId) {
|
||||
String registryCode = currRegistry.getRegistryCode();
|
||||
if (registryCode.endsWith("T")) {
|
||||
if (registryCode.startsWith("TM")) {
|
||||
if (tm_tRegistry != null && tm_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue;
|
||||
tm_tRegistry = currRegistry;
|
||||
}
|
||||
if (registryCode.startsWith("OM")) {
|
||||
if (om_tRegistry != null && om_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue;
|
||||
om_tRegistry = currRegistry;
|
||||
}
|
||||
if (registryCode.startsWith("TS")) {
|
||||
if (ts_tRegistry != null && ts_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue;
|
||||
ts_tRegistry = currRegistry;
|
||||
}
|
||||
if (registryCode.startsWith("OS")) {
|
||||
if (os_tRegistry != null && os_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue;
|
||||
os_tRegistry = currRegistry;
|
||||
}
|
||||
}
|
||||
}
|
||||
String cashNetto = "";
|
||||
if (tm_tRegistry != null && om_tRegistry != null) {
|
||||
cashNetto = String.valueOf(tm_tRegistry.getBalance().subtract(om_tRegistry.getBalance()));
|
||||
}
|
||||
|
||||
String depoNetto = "";
|
||||
if (ts_tRegistry != null && os_tRegistry != null) {
|
||||
depoNetto = String.valueOf(ts_tRegistry.getBalance().subtract(os_tRegistry.getBalance()));
|
||||
}
|
||||
|
||||
|
||||
int valueIdx = 0;
|
||||
String[] line = new String[getHeaders().length];
|
||||
line[valueIdx++] = id;
|
||||
line[valueIdx++] = docDate;
|
||||
line[valueIdx++] = docTime;
|
||||
line[valueIdx++] = docName;
|
||||
line[valueIdx++] = docType;
|
||||
line[valueIdx++] = clearingHouse;
|
||||
line[valueIdx++] = firmId;
|
||||
line[valueIdx++] = firName;
|
||||
line[valueIdx++] = sessionId;
|
||||
line[valueIdx++] = clearingDate;
|
||||
line[valueIdx++] = trdAccId;
|
||||
line[valueIdx++] = account;
|
||||
line[valueIdx++] = depoAccount;
|
||||
line[valueIdx++] = currency;
|
||||
line[valueIdx++] = trId;
|
||||
line[valueIdx++] = securityId;
|
||||
line[valueIdx++] = trBuySell;
|
||||
line[valueIdx++] = trDate;
|
||||
line[valueIdx++] = trExecDate;
|
||||
line[valueIdx++] = execStatus;
|
||||
line[valueIdx++] = repaymDate;
|
||||
line[valueIdx++] = trPrice;
|
||||
line[valueIdx++] = nominal;
|
||||
line[valueIdx++] = lotValue;
|
||||
line[valueIdx++] = trLot;
|
||||
line[valueIdx++] = trQuantity;
|
||||
line[valueIdx++] = trValue;
|
||||
line[valueIdx++] = trAccruedInt;
|
||||
line[valueIdx++] = accruedInt;
|
||||
line[valueIdx++] = trClrComm;
|
||||
line[valueIdx++] = trExhComm;
|
||||
line[valueIdx++] = cashLiability;
|
||||
line[valueIdx++] = depoLiability;
|
||||
line[valueIdx++] = cashNetto;
|
||||
line[valueIdx] = depoNetto;
|
||||
lines.add(line);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import ru.spcex.clearing.reports.reports.PeriodParams;
|
||||
import ru.spcex.platform.enumeration.ReportType;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
public class OperationalMoneyChangeReportBuilder extends MoneyChangeReportBuilder {
|
||||
public OperationalMoneyChangeReportBuilder(ImdgProvider imdgProvider) {
|
||||
super(imdgProvider);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getReportFilename(PeriodParams params) {
|
||||
return "operational_money_change.%s-%s.%s".formatted(
|
||||
dateFormatter.format(params.getStartDate()),
|
||||
dateFormatter.format(params.getEndDate()),
|
||||
dateTimeFormatter.format(Instant.now())
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ReportType getReportType() {
|
||||
return ReportType.OPERATIONAL_MONEY_CHANGE;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import ru.spcex.clearing.reports.reports.ReportId;
|
||||
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
// todo check typo
|
||||
public class SummaryLiabilitiesClaimsReport extends ReportWithPeriod {
|
||||
|
||||
private final String[] headers = {
|
||||
"id", "doc_date", "doc_time", "doc_name", "doc_type", "clearingHouse", "firmId", "firName", "session_id",
|
||||
"clearing_date", "clearing_time", "trdAccId", "account", "depo_account", "currency", "tr_id", "securityId",
|
||||
"tr_buySell", "tr_date", "tr_execDate", "exec_status", "repaym_date", "tr_price", "nominal", "lot_value",
|
||||
"tr_lot", "tr_quantity", "tr_value", "tr_accruedint", "accruedint", "tr_clrComm", "tr_exhComm",
|
||||
"cash_liability", "depo_liability", "cash_netto", "depo_netto"
|
||||
};
|
||||
|
||||
public SummaryLiabilitiesClaimsReport(LocalDate startDate, LocalDate endDate) {
|
||||
super(ReportId.SUMMARY_LIABILITIES_CLAIMS,
|
||||
"0.0.1",
|
||||
"BP4",
|
||||
"Сводный отчет. Отчет об обязательствах",
|
||||
startDate,
|
||||
endDate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getReportName(LocalDateTime reportDateTime) {
|
||||
return "summary_liabilities_claims.%s-%s.%s".formatted(
|
||||
DATE_FORMATTER.format(startDate),
|
||||
DATE_FORMATTER.format(endDate),
|
||||
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||
);
|
||||
}
|
||||
|
||||
public String[] getHeaders() {
|
||||
return headers;
|
||||
}
|
||||
|
||||
public record InfoSummaryLiabilitiesClaims(String id, String docDate, String docTime, String docName,
|
||||
String docType, String clearingHouse, String firmId, String firName,
|
||||
String sessionId, String clearingDate, String clearingTime, String trdAccId,
|
||||
String account, String depoAccount, String currency, String trId,
|
||||
String securityId, String trBuySell, String trDate, String trExecDate,
|
||||
String execStatus, String repaymDate, String trPrice, String nominal,
|
||||
String lotValue, String trLot, String trQuantity, String trValue,
|
||||
String trAccruedInt, String accruedInt, String trClrComm, String trExhComm,
|
||||
String cashLiability, String depoLiability, String cashNetto, String depoNetto) {
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import ru.spcex.clearing.reports.reports.SessionIdParam;
|
||||
import ru.spcex.platform.enumeration.ReportType;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
public class SummaryLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder {
|
||||
public SummaryLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) {
|
||||
super(imdgProvider);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getReportFilename(SessionIdParam params) {
|
||||
return "summary_money_change.%s".formatted(dateTimeFormatter.format(Instant.now()));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ReportType getReportType() {
|
||||
return ReportType.SUMMARY_LIABILITIES_CLAIMS;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import ru.spcex.clearing.reports.reports.PeriodParams;
|
||||
import ru.spcex.platform.enumeration.ReportType;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder {
|
||||
public SummaryMoneyChangeReportBuilder(ImdgProvider imdgProvider) {
|
||||
super(imdgProvider);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getReportFilename(PeriodParams params) {
|
||||
return "summary_money_change.%s-%s.%s".formatted(
|
||||
dateFormatter.format(params.getStartDate()),
|
||||
dateFormatter.format(params.getEndDate()),
|
||||
dateTimeFormatter.format(Instant.now())
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ReportType getReportType() {
|
||||
return ReportType.SUMMARY_MONEY_CHANGE;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,46 +0,0 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import ru.spcex.clearing.reports.reports.ReportId;
|
||||
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
// todo check typo
|
||||
public class SummarylMoneyChange extends ReportWithPeriod {
|
||||
|
||||
private final String[] headers = {
|
||||
"id", "doc_date", "doc_time", "doc_name", "doc_type", "clearingHouse", "firmId", "firName", "trdAccId",
|
||||
"account", "currency", "registry_code", "registry_name", "open_balance", "change_balance", "add_withdraw",
|
||||
"close_balance", "remarks", "add_sum", "add_time", "withdraw_sum", "withdraw_time",
|
||||
};
|
||||
|
||||
public SummarylMoneyChange(LocalDate startDate, LocalDate endDate) {
|
||||
super(ReportId.SUMMARY_L_MONEY_CHANGE,
|
||||
"0.0.1",
|
||||
"BP5",
|
||||
"Сводный отчет. Отчет о денежных средствах",
|
||||
startDate,
|
||||
endDate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getReportName(LocalDateTime reportDateTime) {
|
||||
return "summary_lmoney_change.%s-%s.%s".formatted(
|
||||
DATE_FORMATTER.format(startDate),
|
||||
DATE_FORMATTER.format(endDate),
|
||||
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||
);
|
||||
}
|
||||
|
||||
public String[] getHeaders() {
|
||||
return headers;
|
||||
}
|
||||
|
||||
public record InfoSummarylMoneyChange(String id, String docDate, String docTime, String docName, String docType,
|
||||
String clearingHouse, String firmId, String firName, String trdAccId, String account,
|
||||
String currency, String registryCode, String registryName, String openBalance,
|
||||
String changeBalance, String addWithdraw, String closeBalance, String remarks,
|
||||
String addSum, String addTime, String withdrawSum, String withdrawTime) {
|
||||
}
|
||||
}
|
||||
|
|
@ -19,7 +19,7 @@ import java.util.Collection;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class UnfulfilledDealReport extends CSVReportBuilder<SessionIdParam> {
|
||||
public class UnfulfilledDealReportBuilder extends CSVReportBuilder<SessionIdParam> {
|
||||
private final Imdg<ExecutionFond> executionFondImdg;
|
||||
private final Imdg<Company> companyImdg;
|
||||
private final Imdg<STrades> sTradesImdg;
|
||||
|
|
@ -28,7 +28,7 @@ public class UnfulfilledDealReport extends CSVReportBuilder<SessionIdParam> {
|
|||
};
|
||||
private final List<String[]> lines = null;
|
||||
|
||||
public UnfulfilledDealReport(ImdgProvider imdgProvider) {
|
||||
public UnfulfilledDealReportBuilder(ImdgProvider imdgProvider) {
|
||||
executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
|
||||
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||
sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class);
|
||||
|
|
@ -46,9 +46,7 @@ public class UnfulfilledDealReport extends CSVReportBuilder<SessionIdParam> {
|
|||
|
||||
@Override
|
||||
protected String getReportFilename(SessionIdParam params) {
|
||||
return "unfulfilled_deal_report.%s".formatted(
|
||||
dateTimeFormatter.format(Instant.now())
|
||||
);
|
||||
return "unfulfilled_deal_report.%s".formatted(dateTimeFormatter.format(Instant.now()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -10,7 +10,7 @@ public enum ReportType implements IEnumKey {
|
|||
OPERATIONAL_LIABILITIES_CLAIMS("operational_liabilities_claims"),
|
||||
OPERATIONAL_MONEY_CHANGE("operational_money_change"),
|
||||
SUMMARY_LIABILITIES_CLAIMS("summary_liabilities_claims"),
|
||||
SUMMARY_L_MONEY_CHANGE("summary_lmoney_change"), // todo check typo
|
||||
SUMMARY_MONEY_CHANGE("summary_money_change"),
|
||||
PERIOD_LIABILITIES_CLAIMS("period_liabilities_claims"),
|
||||
PERIOD_MONEY_CHANGE("period_money_change"),
|
||||
EXECUTED_DEAL_REPORT("executed_deal_report"),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue