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,
|
ReportRequestFromRegistry::getReportId,
|
||||||
new ReportType[]{
|
new ReportType[]{
|
||||||
ReportType.OPERATIONAL_MONEY_CHANGE,
|
ReportType.OPERATIONAL_MONEY_CHANGE,
|
||||||
ReportType.SUMMARY_L_MONEY_CHANGE,
|
ReportType.SUMMARY_MONEY_CHANGE,
|
||||||
ReportType.PERIOD_MONEY_CHANGE
|
ReportType.PERIOD_MONEY_CHANGE
|
||||||
},
|
},
|
||||||
ReportError.WrongFieldValue,
|
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.CSVReportBuilder;
|
||||||
import ru.spcex.clearing.reports.reports.PeriodParams;
|
import ru.spcex.clearing.reports.reports.PeriodParams;
|
||||||
import ru.spcex.platform.enumeration.InOutDirection;
|
import ru.spcex.platform.enumeration.InOutDirection;
|
||||||
import ru.spcex.platform.enumeration.ReportType;
|
|
||||||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
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.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
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<Registry> registryImdg;
|
||||||
private final Imdg<Company> companyImdg;
|
private final Imdg<Company> companyImdg;
|
||||||
private final Imdg<Listing> listingImdg;
|
private final Imdg<Listing> listingImdg;
|
||||||
|
|
@ -35,7 +33,7 @@ public class OperationalMoneyChangeReport extends CSVReportBuilder<PeriodParams>
|
||||||
};
|
};
|
||||||
private List<String[]> lines = null;
|
private List<String[]> lines = null;
|
||||||
|
|
||||||
public OperationalMoneyChangeReport(ImdgProvider imdgProvider) {
|
public MoneyChangeReportBuilder(ImdgProvider imdgProvider) {
|
||||||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||||
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||||
this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class);
|
this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class);
|
||||||
|
|
@ -53,20 +51,6 @@ public class OperationalMoneyChangeReport extends CSVReportBuilder<PeriodParams>
|
||||||
return lines;
|
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
|
@Override
|
||||||
protected void collect(PeriodParams params) {
|
protected void collect(PeriodParams params) {
|
||||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||||
|
|
@ -103,10 +87,10 @@ public class OperationalMoneyChangeReport extends CSVReportBuilder<PeriodParams>
|
||||||
String firmId = String.valueOf(registry.getCompanyId());
|
String firmId = String.valueOf(registry.getCompanyId());
|
||||||
String firName = company.getFullName();
|
String firName = company.getFullName();
|
||||||
String trdAccId = registry.getTradingClearingRegistry();
|
String trdAccId = registry.getTradingClearingRegistry();
|
||||||
String account = String.valueOf(registry.getAccountId()); // todo *
|
String account = String.valueOf(registry.getAccountId());
|
||||||
String currency = listing.getTradingCurrency(); // todo *
|
String currency = listing.getTradingCurrency();
|
||||||
String registryCode = String.valueOf(registry.getId());
|
String registryCode = String.valueOf(registry.getId());
|
||||||
String registryName = registry.getFullName(); // todo *
|
String registryName = registry.getRegistryCode();
|
||||||
String openBalance = String.valueOf(registry.getOpenBalance());
|
String openBalance = String.valueOf(registry.getOpenBalance());
|
||||||
String changeBalance = String.valueOf(registry.getCloseBalance().subtract(registry.getOpenBalance()));
|
String changeBalance = String.valueOf(registry.getCloseBalance().subtract(registry.getOpenBalance()));
|
||||||
String addWithdraw = String.valueOf(registry.getCredit().subtract(registry.getDebit()));
|
String addWithdraw = String.valueOf(registry.getCredit().subtract(registry.getDebit()));
|
||||||
|
|
@ -124,6 +108,7 @@ public class OperationalMoneyChangeReport extends CSVReportBuilder<PeriodParams>
|
||||||
line[valueIdx++] = docTime;
|
line[valueIdx++] = docTime;
|
||||||
line[valueIdx++] = docName;
|
line[valueIdx++] = docName;
|
||||||
line[valueIdx++] = docTime;
|
line[valueIdx++] = docTime;
|
||||||
|
line[valueIdx++] = docType;
|
||||||
line[valueIdx++] = clearingHouse;
|
line[valueIdx++] = clearingHouse;
|
||||||
line[valueIdx++] = firmId;
|
line[valueIdx++] = firmId;
|
||||||
line[valueIdx++] = firName;
|
line[valueIdx++] = firName;
|
||||||
|
|
@ -1,263 +1,23 @@
|
||||||
package ru.spcex.clearing.reports.reports.bp;
|
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.clearing.reports.reports.SessionIdParam;
|
||||||
import ru.spcex.platform.enumeration.Market;
|
|
||||||
import ru.spcex.platform.enumeration.ReportType;
|
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.ImdgProvider;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
|
||||||
|
|
||||||
import java.math.RoundingMode;
|
|
||||||
import java.time.Instant;
|
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) {
|
public OperationalLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) {
|
||||||
this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
|
super(imdgProvider);
|
||||||
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
|
@Override
|
||||||
protected String getReportFilename(SessionIdParam params) {
|
protected String getReportFilename(SessionIdParam params) {
|
||||||
return "operational_liabilities_claims.%s".formatted(LocalDateTime.now());
|
return "operational_liabilities_claims.%s".formatted(Instant.now());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ReportType getReportType() {
|
protected ReportType getReportType() {
|
||||||
return ReportType.OPERATIONAL_LIABILITIES_CLAIMS;
|
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.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class UnfulfilledDealReport extends CSVReportBuilder<SessionIdParam> {
|
public class UnfulfilledDealReportBuilder extends CSVReportBuilder<SessionIdParam> {
|
||||||
private final Imdg<ExecutionFond> executionFondImdg;
|
private final Imdg<ExecutionFond> executionFondImdg;
|
||||||
private final Imdg<Company> companyImdg;
|
private final Imdg<Company> companyImdg;
|
||||||
private final Imdg<STrades> sTradesImdg;
|
private final Imdg<STrades> sTradesImdg;
|
||||||
|
|
@ -28,7 +28,7 @@ public class UnfulfilledDealReport extends CSVReportBuilder<SessionIdParam> {
|
||||||
};
|
};
|
||||||
private final List<String[]> lines = null;
|
private final List<String[]> lines = null;
|
||||||
|
|
||||||
public UnfulfilledDealReport(ImdgProvider imdgProvider) {
|
public UnfulfilledDealReportBuilder(ImdgProvider imdgProvider) {
|
||||||
executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
|
executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
|
||||||
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||||
sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class);
|
sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class);
|
||||||
|
|
@ -46,9 +46,7 @@ public class UnfulfilledDealReport extends CSVReportBuilder<SessionIdParam> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getReportFilename(SessionIdParam params) {
|
protected String getReportFilename(SessionIdParam params) {
|
||||||
return "unfulfilled_deal_report.%s".formatted(
|
return "unfulfilled_deal_report.%s".formatted(dateTimeFormatter.format(Instant.now()));
|
||||||
dateTimeFormatter.format(Instant.now())
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -10,7 +10,7 @@ public enum ReportType implements IEnumKey {
|
||||||
OPERATIONAL_LIABILITIES_CLAIMS("operational_liabilities_claims"),
|
OPERATIONAL_LIABILITIES_CLAIMS("operational_liabilities_claims"),
|
||||||
OPERATIONAL_MONEY_CHANGE("operational_money_change"),
|
OPERATIONAL_MONEY_CHANGE("operational_money_change"),
|
||||||
SUMMARY_LIABILITIES_CLAIMS("summary_liabilities_claims"),
|
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_LIABILITIES_CLAIMS("period_liabilities_claims"),
|
||||||
PERIOD_MONEY_CHANGE("period_money_change"),
|
PERIOD_MONEY_CHANGE("period_money_change"),
|
||||||
EXECUTED_DEAL_REPORT("executed_deal_report"),
|
EXECUTED_DEAL_REPORT("executed_deal_report"),
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue