akulikov 2023-09-20 18:05:38 +03:00
parent d9e2796185
commit 488adfa605
11 changed files with 100 additions and 118 deletions

View file

@ -23,7 +23,6 @@ import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@Component
public class KSCommissionTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSCommissionTradesReport> {
@ -102,42 +101,15 @@ public class KSCommissionTradesReportBuilder extends CSVReportBuilder<EmptyParam
String firmId = "";
String firmIdInitiator = "";
if (registryUnit == RegistryUnit.X) {
if (registry.getCounterPartyId() != null) {
Company companyForFirmId = companyImdg.getSingleObjectByID(registry.getCounterPartyId());
if (companyForFirmId != null) firmId = companyForFirmId.getClearingCode();
else {
log.warn("For registry id = {}, counterPartyId = {} company not found, can't set FIRM_ID",
registry.getId(),
registry.getCounterPartyId());
}
}
CompanySymbols companySymbols = companySymbolsImdg.getFirstObjectByFieldValues(
Map.of(
"companyId", registry.getCompanyId(),
"companySymbol", CompanySymbol.INTC.getKey()
)
);
if (companySymbols != null) firmIdInitiator = companySymbols.getCompanySymbolValue();
else {
log.warn("For registry id = {} can't find CompanySymbols {} for company.id = {}, can't set FIRM_ID_INITIATOR",
registry.getId(),
CompanySymbol.INTC.getKey(),
registry.getCompanyId());
}
firmIdInitiator = registry.getTradingCode();
} else if (registryUnit == RegistryUnit.T) {
firmId = registry.getClearingCode();
if (registry.getCounterPartyId() != null) {
CompanySymbols companySymbols = companySymbolsImdg.getFirstObjectByFieldValues(
Map.of(
"companyId", registry.getCounterPartyId(),
"companySymbol", CompanySymbol.INTC.getKey()
)
);
if (companySymbols != null) firmIdInitiator = companySymbols.getCompanySymbolValue();
Company companyForInitiator = companyImdg.getSingleObjectByID(registry.getCounterPartyId());
if (companyForInitiator != null) firmIdInitiator = companyForInitiator.getTradingCode();
else {
log.warn("For registry id = {} can't find CompanySymbols {} for registry.counterPartyId = {}, can't set FIRM_ID_INITIATOR",
log.warn("For registry id = {} can't find Company id = {}, can't set FIRM_ID_INITIATOR",
registry.getId(),
CompanySymbol.INTC.getKey(),
registry.getCompanyId());
}
}
@ -173,8 +145,6 @@ public class KSCommissionTradesReportBuilder extends CSVReportBuilder<EmptyParam
agreementNumber = agreementNumber.substring(0, agreementNumber.indexOf("~"));
String agreementNumberPostfix = registry.getContract();
if (agreementNumberPostfix != null && !agreementNumberPostfix.contains("~"))
agreementNumberPostfix = "";
pb = executionDepositImdg.predicateBuilder();
Collection<ExecutionDeposit> executionDeposits = executionDepositImdg.getCollectionObjectsByPredicate(
@ -200,7 +170,7 @@ public class KSCommissionTradesReportBuilder extends CSVReportBuilder<EmptyParam
ksCommissionTradesReport.setAgreementDate(registry.getTradingDate());
ksCommissionTradesReport.setSum(registry.getBalance() != null ? registry.getBalance() : BigDecimal.ZERO);
ksCommissionTradesReport.setRepaymDate(registry.getRefundDate());
ksCommissionTradesReport.setExecStatus(registry.getRegistryStatus());
ksCommissionTradesReport.setExecStatus("Исполнено");
rows.add(ksCommissionTradesReport);
} catch (Throwable e) {

View file

@ -3,6 +3,7 @@ package ru.spcex.clearing.reports.reports.ks;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.clearing.classes.statics.data.statement.Statement;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
@ -23,12 +24,14 @@ import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@Component
public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyParams, KSRepCashRegisterSumsReport> {
private final Imdg<Statement> statementImdg;
private final Imdg<Registry> registryImdg;
private final Imdg<Company> companyImdg;
private final Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
private List<KSRepCashRegisterSumsReport> rows = null;
@ -36,6 +39,7 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyPa
statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class);
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
}
@Override
@ -70,8 +74,8 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyPa
ImdgPredicateBuilder pb = statementImdg.predicateBuilder();
ImdgPredicate finalPredicate = pb.and(
pb.greatEqual("updated", instantNow.truncatedTo(ChronoUnit.DAYS)),
pb.less("updated", instantNow.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS)),
pb.greatEqual("created", instantNow.truncatedTo(ChronoUnit.DAYS)),
pb.less("created", instantNow.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS)),
pb.equals("inOutSDfType", InOutSDfType.type57.getKey()),
pb.equals("operationStatus", OperationStatus.Executed.getKey()),
pb.notNull("amount")
@ -88,6 +92,22 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyPa
continue;
}
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
Long accountId = statement.getAccountId();
if (accountId == null) {
log.warn("For statement id = {} empty accountId, statement was skipped", statement.getId());
continue;
}
TradingClearingRegistry tkr = tradingClearingRegistryImdg.getFirstObjectByFieldValues(
Map.of("moneyAccountId", accountId)
);
if (tkr == null) {
log.warn(
"For statement id = {} and accountId = {} not found TradingClearingRegistry",
statement.getId(),
accountId
);
continue;
}
ImdgPredicateBuilder pbRegistry = registryImdg.predicateBuilder();
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(
@ -122,7 +142,8 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyPa
ksRepCashRegisterSumsReport.setTkr(registry.getTradingClearingRegistry());
ksRepCashRegisterSumsReport.setRegisterCode(registry.getRegistryCode());
ksRepCashRegisterSumsReport.setAddDate(nowDate);
ksRepCashRegisterSumsReport.setAddTime(LocalTime.ofInstant(statement.getUpdated(), getReportZoneId()));
if (statement.getCreated() != null)
ksRepCashRegisterSumsReport.setAddTime(LocalTime.ofInstant(statement.getCreated(), getReportZoneId()));
InOutDirection inOutDirection = IEnumKey.getEnumByKey(InOutDirection.class, statement.getInOutDirection());
if (inOutDirection == InOutDirection.in) {

View file

@ -70,9 +70,10 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParam
Instant instantNow = Instant.now();
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AM_T).build(); // todo refactoring: использовать buildPredicate() - короче код, см. классы рядом.
ImdgPredicate registryPredicate = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AM_T).buildPredicate(pb);
ImdgPredicate finalPredicate = pb.and(
pb.sql(sql),
pb.notNull("tradingClearingRegistry"),
registryPredicate,
pb.greatEqual("updated", instantNow.truncatedTo(ChronoUnit.DAYS)),
pb.less("updated", instantNow.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS)),
pb.or(
@ -101,9 +102,7 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParam
ksRepCashRegistersReport.setRegisterCode(registry.getRegistryCode());
BigDecimal openBalance = registry.getOpenBalance() != null ? registry.getOpenBalance() : BigDecimal.ZERO;
BigDecimal closeBalance = registry.getCloseBalance() != null ? registry.getCloseBalance() : BigDecimal.ZERO;
ksRepCashRegistersReport.setOpenBalance(openBalance);
ksRepCashRegistersReport.setCloseBalance(closeBalance);
ksRepCashRegistersReport.setRemarks("");
@ -118,6 +117,11 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParam
BigDecimal debit = registry.getDebit() != null ? registry.getDebit() : BigDecimal.ZERO;
ksRepCashRegistersReport.setAddWithdraw(credit.subtract(debit));
BigDecimal closeBalance = ksRepCashRegistersReport.getOpenBalance()
.add(ksRepCashRegistersReport.getChangeBalance())
.add(ksRepCashRegistersReport.getAddWithdraw());
ksRepCashRegistersReport.setCloseBalance(closeBalance);
rows.add(ksRepCashRegistersReport);
} catch (Throwable e) {
log.error("Can't create report row for registry (id = %d), skipped".formatted(registry.getId()), e);

View file

@ -80,8 +80,8 @@ public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder<E
ImdgPredicateBuilder pb = statementImdg.predicateBuilder();
ImdgPredicate finalPredicate = pb.and(
pb.greatEqual("updated", instantNow.truncatedTo(ChronoUnit.DAYS)),
pb.less("updated", instantNow.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS)),
pb.greatEqual("created", instantNow.truncatedTo(ChronoUnit.DAYS)),
pb.less("created", instantNow.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS)),
pb.equals("inOutSDfType", InOutSDfType.type21.getKey()),
pb.equals("operationStatus", OperationStatus.Executed.getKey()),
pb.notNull("amount")
@ -144,7 +144,8 @@ public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder<E
ksRepDepoRegisterQuantitiesReport.setSecurityId(security.getSecuritySymbol());
ksRepDepoRegisterQuantitiesReport.setRegisterCode(registry.getRegistryCode());
ksRepDepoRegisterQuantitiesReport.setAddDate(nowDate);
ksRepDepoRegisterQuantitiesReport.setAddTime(LocalTime.ofInstant(statement.getUpdated(), getReportZoneId()));
if (statement.getUpdated() != null)
ksRepDepoRegisterQuantitiesReport.setAddTime(LocalTime.ofInstant(statement.getUpdated(), getReportZoneId()));
InOutDirection inOutDirection = IEnumKey.getEnumByKey(InOutDirection.class, statement.getInOutDirection());
if (inOutDirection == InOutDirection.in) {

View file

@ -74,7 +74,8 @@ public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder<EmptyParam
pb.sql(sql),
pb.greatEqual("updated", instantNow.truncatedTo(ChronoUnit.DAYS)),
pb.less("updated", instantNow.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS)),
pb.equals("accountType", AccountType.Depo.getKey())
pb.equals("accountType", AccountType.Depo.getKey()),
pb.notNull("tradingClearingRegistry")
);
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate);
@ -99,9 +100,7 @@ public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder<EmptyParam
ksRepDepoRegistersReport.setRegisterCode(registry.getRegistryCode());
BigDecimal openBalance = registry.getOpenBalance() != null ? registry.getOpenBalance() : BigDecimal.ZERO;
BigDecimal closeBalance = registry.getCloseBalance() != null ? registry.getCloseBalance() : BigDecimal.ZERO;
ksRepDepoRegistersReport.setOpenQuantity(openBalance);
ksRepDepoRegistersReport.setCloseQuantity(closeBalance);
ksRepDepoRegistersReport.setRemarks(null);
@ -116,6 +115,11 @@ public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder<EmptyParam
BigDecimal debit = registry.getDebit() != null ? registry.getDebit() : BigDecimal.ZERO;
ksRepDepoRegistersReport.setAddWithdrawDepo(credit.subtract(debit));
BigDecimal closeBalance = ksRepDepoRegistersReport.getOpenQuantity()
.add(ksRepDepoRegistersReport.getChangeQuantity())
.add(ksRepDepoRegistersReport.getAddWithdrawDepo());
ksRepDepoRegistersReport.setCloseQuantity(closeBalance);
rows.add(ksRepDepoRegistersReport);
} catch (Throwable e) {
log.error("Can't create report row for registry (id = %d), skipped".formatted(registry.getId()), e);

View file

@ -16,6 +16,7 @@ import ru.spcex.clearing.reports.reports.bean.KSRepTradesReport;
import ru.spcex.platform.enumeration.*;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
import ru.spcex.platform.utils.enumeration.IEnumKey;
@ -26,8 +27,6 @@ import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Component
public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRepTradesReport> {
@ -97,17 +96,17 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
try {
KSRepTradesReport ksRepTradesReport = new KSRepTradesReport();
ksRepTradesReport.setSessionId(execution.getSessionId());
ksRepTradesReport.setTrId(execution.getId());
ksRepTradesReport.setTrId(execution.getExchangeExecutionId());
TradingClearingRegistry registry = tradingClearingRegistryImdg.getSingleObjectByID(execution.getTradingClearingRegistryId());
if (registry == null) {
TradingClearingRegistry tkr = tradingClearingRegistryImdg.getSingleObjectByID(execution.getTradingClearingRegistryId());
if (tkr == null) {
log.info("Execution id = {} was skipped: trading_clearing_registry for id {} not found",
execution.getId(),
execution.getTradingClearingRegistryId());
continue;
}
ksRepTradesReport.setTkr(registry.getCode());
ksRepTradesReport.setTkr(tkr.getCode());
if (execution.getCompanyId() != null) {
Company company = companyImdg.getSingleObjectByID(execution.getCompanyId());
@ -155,71 +154,47 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
} else if (coverage == CoverageStatus.ALWD) {
status = "1";
} else if (coverage == CoverageStatus.DNED) {
String marketCode = execution.getMarket();
Market market = marketImdg.getFirstObjectByFieldValues(Map.of("code", marketCode));
if (market == null) {
log.warn(
"Broken execution (can't find market for market.code = {}). Execution (id = {}) skipped",
marketCode,
execution.getId()
if (execution instanceof ExecutionDeposit) {
ksRepTradesReport.setStatus("2");
} else {
ImdgPredicate registryPredicate = RegistryCodeSqlBuilder.getInstance(
RegistryTradingParams.OS_T,
RegistryTradingParams.TS_T,
RegistryTradingParams.OM_T,
RegistryTradingParams.TM_T
).buildPredicate(pbExecutionFond);
Long groupId = execution.getExchangeExecutionId();
Collection<Registry> registryCollection = registryImdg.getCollectionObjectsByPredicate(
pbExecutionFond.and(
registryPredicate, pbExecutionFond.equals("groupId", groupId)
)
);
continue;
}
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
String groupId = "%s%d%s".formatted(
dateFormatter_yyyyMMdd.format(nowDate),
execution.getExchangeExecutionId(),
market.getId()
);
String sql = RegistryCodeSqlBuilder.getInstance(
RegistryTradingParams.OS_T,
RegistryTradingParams.TS_T,
RegistryTradingParams.OM_T,
RegistryTradingParams.TM_T
).build();
Collection<Registry> registryCollection = registryImdg.getCollectionObjectsByPredicate(
pb.and(
pb.sql(sql),
pb.equals("groupId", groupId)
)
);
if (registryCollection.isEmpty()) {
log.warn(
"Broken execution (empty registries). Registry for groupId = {} not found. Execution (id = {}) skipped",
groupId,
execution.getId()
);
continue;
}
boolean allNACCorNACK = checkRegistryStatus(registryCollection, List.of(RegistryStatus.NACK, RegistryStatus.NACC));
boolean allFAILorUNCV = checkRegistryStatus(registryCollection, List.of(RegistryStatus.FAIL, RegistryStatus.UNCV));
if (!allFAILorUNCV && !allNACCorNACK) {
log.warn(
"Broken execution (invalid registry statuses). Registry for groupId = {} has invalid registry set. Id = [{}]. Execution (id = {}) skipped",
groupId,
registryCollection.stream().map(r -> String.valueOf(r.getId())).collect(Collectors.joining(",")),
execution.getId()
);
continue;
}
if (allFAILorUNCV) {
boolean allS = checkRegistryInstrumentType(registryCollection, List.of(RegistryInstrumentType.S));
boolean allM = checkRegistryInstrumentType(registryCollection, List.of(RegistryInstrumentType.M));
if (!allS && !allM) {
if (registryCollection.isEmpty()) {
log.warn(
"Broken execution (different instrument types). Registry for groupId = {} has invalid registry set. Id = [{}]. Execution (id = {}) skipped",
"Broken execution (empty registries). Registry for groupId = {} not found. Execution (id = {}) skipped",
groupId,
registryCollection.stream().map(r -> String.valueOf(r.getId())).collect(Collectors.joining(",")),
execution.getId()
);
continue;
}
status = allS ? "3" : "2";
} else status = "0";
boolean allOk = checkRegistryStatus(
registryCollection,
List.of(RegistryStatus.NACK, RegistryStatus.NACC, RegistryStatus.FAIL, RegistryStatus.UNCV)
);
if (allOk) {
for (Registry registry : registryCollection) {
RegistryInstrumentType registryInstrumentType = IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType());
if (registryInstrumentType == RegistryInstrumentType.M) {
ksRepTradesReport.setStatus("2");
break;
}
if (registryInstrumentType == RegistryInstrumentType.S) {
ksRepTradesReport.setStatus("3");
break;
}
}
}
}
}
}

View file

@ -181,14 +181,19 @@ public class ReportServiceTest_KS {
registry_1.setTradingClearingRegistry("TRADING_CLEARING_REGISTRY");
registryImdg.insert(registry_1);
TradingClearingRegistry tkr = new TradingClearingRegistry();
tkr.setMoneyAccountId(777L);
tradingClearingRegistryImdg.insert(tkr);
Statement statement_1 = new Statement();
statement_1.setAddresseeId(COMPANY_ID);
statement_1.setAccount("ACCOUNT");
statement_1.setAccountId(777L);
statement_1.setInOutDirection(InOutDirection.in.getKey());
statement_1.setInOutSDfType(InOutSDfType.type57.getKey());
statement_1.setOperationStatus(OperationStatus.Executed.getKey());
statement_1.setAmount(BigDecimal.valueOf(7777.777777777));
statement_1.setUpdated(Instant.now());
statement_1.setCreated(Instant.now());
statementImdg.insert(statement_1);
String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L);
@ -207,6 +212,7 @@ public class ReportServiceTest_KS {
registryImdg.delete(registry_1);
statementImdg.delete(statement_1);
tradingClearingRegistryImdg.delete(tkr);
}
@Test
@ -276,6 +282,7 @@ public class ReportServiceTest_KS {
registry_1.setRegistryDesignation("A");
registry_1.setRegistryInstrumentType("S");
registry_1.setRegistryUnit("T");
registryImdg.insert(registry_1);
EquitySecurity equitySecurity = new EquitySecurity();
@ -290,7 +297,7 @@ public class ReportServiceTest_KS {
statement_1.setInOutSDfType(InOutSDfType.type21.getKey());
statement_1.setOperationStatus(OperationStatus.Executed.getKey());
statement_1.setAmount(BigDecimal.valueOf(7777.777777777));
statement_1.setUpdated(Instant.now());
statement_1.setCreated(Instant.now());
statement_1.setSecurityId(777L);
statementImdg.insert(statement_1);

View file

@ -1,2 +1,2 @@
"FIRM_ID","FIRM_ID_INITIATOR","SECCODE","CLASS_CODE","AGREEMENT_NUMBER","AGREEMENT_NUMBER_POSTFIX","AGREEMENT_DATE","SUM","REPAYM_DATE","EXEC_STATUS"
"CLEARING_CODE","COMPANY_SYMBOL_VALUE","SECURITY_SYMBOL","market","CONT","CONT~RACT","01.01.1991","77.78","05.09.2023","OK"
"CLEARING_CODE","TRADING_CODE","SECURITY_SYMBOL","market","CONT","CONT~RACT","01.01.1991","77.78","05.09.2023","Исполнено"

1 FIRM_ID FIRM_ID_INITIATOR SECCODE CLASS_CODE AGREEMENT_NUMBER AGREEMENT_NUMBER_POSTFIX AGREEMENT_DATE SUM REPAYM_DATE EXEC_STATUS
2 CLEARING_CODE COMPANY_SYMBOL_VALUE TRADING_CODE SECURITY_SYMBOL market CONT CONT~RACT 01.01.1991 77.78 05.09.2023 OK Исполнено

View file

@ -1,2 +1,2 @@
"FIRMID","ACCOUNT","TKR","DATE","REGISTER_CODE","REGISTER_NAME","OPEN_BALANCE","CHANGE_BALANCE","ADD_WITHDRAW","CLOSE_BALANCE","REMARKS","TRADE_NUM"
"TRADING_CODE","ACCOUNT","TRADING_CLEARING_REGISTRY","01.08.2023","AM_T","AM_T_NAME","77.78","66.67","66.67","11.11","",""
"TRADING_CODE","ACCOUNT","TRADING_CLEARING_REGISTRY","01.08.2023","AM_T","AM_T_NAME","77.78","66.67","66.67","211.11","",""

1 FIRMID ACCOUNT TKR DATE REGISTER_CODE REGISTER_NAME OPEN_BALANCE CHANGE_BALANCE ADD_WITHDRAW CLOSE_BALANCE REMARKS TRADE_NUM
2 TRADING_CODE ACCOUNT TRADING_CLEARING_REGISTRY 01.08.2023 AM_T AM_T_NAME 77.78 66.67 66.67 11.11 211.11

View file

@ -1,2 +1,2 @@
"FIRMID","ACCOUNT","TKR","DATE","SECURITYID","REGISTER_CODE","REGISTER_NAME","OPEN_QUANTITY","CHANGE_QUANTITY","ADD_WITHDRAW_DEPO","CLOSE_QUANTITY","REMARKS","TRADE_NUM"
"TRADING_CODE","ACCOUNT","TRADING_CLEARING_REGISTRY","01.08.2023","","AS_T","AS_T_NAME","78","67","67","11","",""
"TRADING_CODE","ACCOUNT","TRADING_CLEARING_REGISTRY","01.08.2023","","AS_T","AS_T_NAME","78","67","67","211","",""

1 FIRMID ACCOUNT TKR DATE SECURITYID REGISTER_CODE REGISTER_NAME OPEN_QUANTITY CHANGE_QUANTITY ADD_WITHDRAW_DEPO CLOSE_QUANTITY REMARKS TRADE_NUM
2 TRADING_CODE ACCOUNT TRADING_CLEARING_REGISTRY 01.08.2023 AS_T AS_T_NAME 78 67 67 11 211

View file

@ -1,3 +1,3 @@
"SESSION_ID","SESSION_DATE","TR_ID","FIRM_ID","TKR","CASH_LIABILITY","DEPO_LIABILITY","TRADE_NUM","CLASS_CODE","TRADE_DATE","STATUS"
"4","20.01.1970T07:09:07","8","TRADING_CODE","TKR","8888.89","0","222",3333,"20.01.1970T02:49:58","3"
"4","20.01.1970T07:09:07","8","TRADING_CODE","TKR","8888.89","0","222",3333,"20.01.1970T02:49:58","0"
"3","20.01.1970T15:54:43","5","TRADING_CODE","TKR","8888.89","123","222",3333,"20.01.1970T02:49:58","1"

1 SESSION_ID SESSION_DATE TR_ID FIRM_ID TKR CASH_LIABILITY DEPO_LIABILITY TRADE_NUM CLASS_CODE TRADE_DATE STATUS
2 4 20.01.1970T07:09:07 8 TRADING_CODE TKR 8888.89 0 222 3333 20.01.1970T02:49:58 3 0
3 3 20.01.1970T15:54:43 5 TRADING_CODE TKR 8888.89 123 222 3333 20.01.1970T02:49:58 1