SummaryLiabilitiesClaimsReportBuilder

SummaryMoneyChangeReportBuilder
This commit is contained in:
akulikov 2023-05-15 11:37:27 +03:00
parent c3a1cc41de
commit 75e8a83aad
11 changed files with 344 additions and 369 deletions

View file

@ -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,

View file

@ -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);
}
}
}

View file

@ -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;

View file

@ -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);
}
}
}

View file

@ -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;
}
}

View file

@ -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) {
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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) {
}
}

View file

@ -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

View file

@ -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"),