Skip to content

Commit

Permalink
Merge pull request #605 from spacious-team/task-tbank
Browse files Browse the repository at this point in the history
Поддержка брокера ТБанк
  • Loading branch information
vananiev authored Aug 22, 2024
2 parents 2f78ce2 + 041686d commit 47446be
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 7 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ Investbook в сравнении с [Intelinvest](https://intelinvest.ru) и [Sn
при необходимости позволит безболезненно перенести накопленные данные в другое приложение учета инвестиций.

### Брокеры
Приложение анализирует отчеты брокеров Тинькофф (xlsx), Сбербанк (xlsx), ВТБ (xls), Промсвязьбанк (xlsx, xml)
Приложение анализирует отчеты брокеров ТБанк / Тинькофф (xlsx), Сбербанк (xlsx), ВТБ (xls), Промсвязьбанк (xlsx, xml)
и Твой Брокер / Уралсиб (zip с xls). Если ваш счет открыт у другого брокера,
напишите [нам](https://t.me/investbook_support). Также вы можете уже на вашей версии приложения воспользоваться
[формами](src/main/asciidoc/investbook-forms.adoc) ввода информации или
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ public class TinkoffBrokerReport extends AbstractExcelBrokerReport {
private static final String PORTFOLIO_MARKER = "Инвестор:";
private static final Predicate<Object> tinkoffReportPredicate = cell ->
(cell instanceof String) && ((String) cell).contains("Тинькофф");
private static final Predicate<Object> tbankReportPredicate = cell ->
(cell instanceof String) && ((String) cell).contains("ТБанк");
private static final Predicate<Object> dateMarkerPredicate = cell ->
(cell instanceof String) && ((String) cell).contains("за период");

Expand All @@ -61,8 +63,9 @@ public TinkoffBrokerReport(String excelFileName, InputStream is, SecurityRegistr
}

public static void checkReportFormat(String excelFileName, ReportPage reportPage) {
if (reportPage.find(0, 2, tinkoffReportPredicate) == TableCellAddress.NOT_FOUND) {
throw new RuntimeException("В файле " + excelFileName + " не содержится отчет брокера Тинькофф");
if (reportPage.find(0, 2, tbankReportPredicate) == TableCellAddress.NOT_FOUND &&
reportPage.find(0, 2, tinkoffReportPredicate) == TableCellAddress.NOT_FOUND) {
throw new RuntimeException("В файле " + excelFileName + " не содержится отчет брокера ТБанк (Тинькофф)");
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import java.math.BigDecimal;
import java.time.Instant;

import static org.springframework.util.StringUtils.hasLength;
import static ru.investbook.parser.tinkoff.TinkoffSecurityTransactionTable.TransactionTableHeader.*;

@Slf4j
Expand Down Expand Up @@ -77,12 +78,20 @@ private TinkoffSecurityTransactionTable(String tableNamePrefix,

@Override
protected AbstractTransaction parseRow(TableRow row) {
long _tradeId = row.getLongCellValueOrDefault(TRADE_ID, -1);
if (_tradeId == -1) return null;
String tradeId = String.valueOf(_tradeId);
String tradeId = row.getStringCellValueOrDefault(TRADE_ID, "");
if (!hasLength(tradeId)) return null;
String operation = row.getStringCellValue(OPERATION).toLowerCase();
boolean isBuy = operation.contains("покупка");
boolean isRepo = operation.contains("репо");
if (isRepo) {
// Сделки переноса РЕПО "РЕПО 1 Покупка" и "РЕПО 2 Продажа" имеют одинаковый tradeId и timestamp.
// Это синтетические сделки, но эти сделки имеют комиссии, поэтому их нужно иметь возможность сохранить в БД.
// Требуется уникальный tradeId для обоих РЕПО сделок.
String tradeIdSuffix = isBuy ? "repobuy" : "reposell";
tradeId += tradeIdSuffix;
}

int securityId = transactionTableHelper.getSecurityId(row, codeAndIsin, getReport().getSecurityRegistrar());
boolean isBuy = row.getStringCellValue(OPERATION).toLowerCase().contains("покупка");
int count = Math.abs(row.getIntCellValue(COUNT));
BigDecimal amount = row.getBigDecimalCellValue(AMOUNT).abs();
amount = isBuy ? amount.negate() : amount;
Expand Down

0 comments on commit 47446be

Please sign in to comment.