Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Проблема с прочтением Interactive Brokers statements (.csv) #11

Closed
IlyaKarpelyuk opened this issue May 22, 2020 · 7 comments

Comments

@IlyaKarpelyuk
Copy link

IlyaKarpelyuk commented May 22, 2020

Добрый день, Дмитрий!

Предыстория (возможно имеет смысл дополнить инструкцию по установке, так как строго следовал ей сначала):
Изначально у меня не компилировалась Ваша программа investments, на свежеразвернутый Ubuntu Server 20.04 LTS, вылетала ошибка error E0658, вылечил установкой rustc nightly.

Далее у меня никак не хотел считываться statement экспортированный (согласно Вашей инструкции) из Interactive Brokers (E: "/root/ib" doesn't contain any broker statement.), оказалось, что необходимо открыть этот statement в MS Office Excel и пересохранить в том же формате (CSV разделители - запятые), после чего Ваша программа начинает видеть сохраненные таким образом statements.

Но вот уже несколько дней я бьюсь над следующей проблемой: Ваша программа при попытке прочитать statements Interactive Brokers, выдает следующую ошибку E: Error while reading "/root/ib": Error while reading "/root/ib/empty-trade-confirmation.csv": "Trade confirmation" record doesn't have "AssetClass" field. Я уже всё перепробывал, даже взял Ваш файл из ~/investments/src/broker_statement/ib/testdata/empty-trade-confirmation.csv, добавил в него пару сделок, что бы он небыл пустым, но Ваша программа продолжает ругаться на Trade confirmation" record doesn't have "AssetClass" field.

P.S. В конфигурационном файле единственное что я поменял, это путь к statements.
empty-trade-confirmation.zip

@KonishchevDmitry
Copy link
Owner

Добрый день!

вылетала ошибка error E0658, вылечил установкой rustc nightly

А остались какие-то подробности? Это довольно странно - я nightly никогда не использовал, и регулярно пересобираю проект под stable - даже простенький CI есть. Не удивлюсь, если я где-то мог завязаться на последний stable, но вот на nightly - точно нет - иначе у меня бы просто ничего не собралось.

Далее у меня никак не хотел считываться statement экспортированный (согласно Вашей инструкции) из Interactive Brokers (E: "/root/ib" doesn't contain any broker statement.), оказалось, что необходимо открыть этот statement в MS Office Excel и пересохранить в том же формате (CSV разделители - запятые), после чего Ваша программа начинает видеть сохраненные таким образом statements.

Но вот уже несколько дней я бьюсь над следующей проблемой: Ваша программа при попытке прочитать statements Interactive Brokers, выдает следующую ошибку E: Error while reading "/root/ib": Error while reading "/root/ib/empty-trade-confirmation.csv": "Trade confirmation" record doesn't have "AssetClass" field.

Исключительно по вашему описанию сложно сказать, в чем именно проблема, но предположу, что вы скачали только Trade Confirmation Report, а Activity Statement не скачали.

Давайте пока упростим задачу и забудем про Trade Confirmation Report (empty-trade-confirmation.csv) - они все равно опциональны:

  • Очистите свою директорию /root/ib
  • Скачайте Activity Statement в *.csv
  • При скачивании не открывайте его никакими просмотрщиками и пр., которые могут его поправить - его править совершенно точно не нужно - только навредит.

Сообщите, что получилось.

@IlyaKarpelyuk
Copy link
Author

Добрый день, Дмитрий!
Спасибо за Ваш ответ.

Что бы воспроизвести ошибку, вчера установил по новой чистую Ubuntu Server 20.04 LTS, а так же установил стабильную rustc (stable installed - rustc 1.43.1 (8d69840ab 2020-05-04)). И ошибка действительно воспроизвелась. Привожу ее ниже:

_Compiling investments v1.2.0
error[E0658]: use of unstable library feature 'matches_macro'
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/investments-1.2.0/src/broker_statement/tinkoff/cash_assets.rs:172:33
|
172 | if amount.is_zero() || !matches!((deposit.is_zero(), withdrawal.is_zero()), (true, false) | (false, true)) {
| ^^^^^^^
|
= note: for more information, see rust-lang/rust#65721

error[E0658]: use of unstable library feature 'matches_macro'
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/investments-1.2.0/src/broker_statement/tinkoff/common.rs:32:57
|
32 | let non_empty_cells = row.iter().filter(|cell| !matches!(cell, Cell::Empty)).count();
| ^^^^^^^
|
= note: for more information, see rust-lang/rust#65721

error[E0658]: use of unstable library feature 'matches_macro'
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/investments-1.2.0/src/broker_statement/tinkoff/mod.rs:88:25
|
88 | if !matches!(state, State::None) || !CURRENT_PAGE_REGEX.is_match(value.trim()) {
| ^^^^^^^
|
= note: for more information, see rust-lang/rust#65721

error[E0658]: use of unstable library feature 'matches_macro'
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/investments-1.2.0/src/broker_statement/tinkoff/mod.rs:94:25
|
94 | if !matches!(state, State::CurrentPage) {
| ^^^^^^^
|
= note: for more information, see rust-lang/rust#65721

error[E0658]: use of unstable library feature 'matches_macro'
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/investments-1.2.0/src/broker_statement/tinkoff/mod.rs:103:9
|
103 | matches!(state, State::TotalPages)
| ^^^^^^^
|
= note: for more information, see rust-lang/rust#65721

error[E0658]: use of unstable library feature 'matches_macro'
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/investments-1.2.0/src/cash_flow/mod.rs:22:9
|
22 | if !matches!(portfolio.broker, Broker::InteractiveBrokers | Broker::Tinkoff) {
| ^^^^^^^
|
= note: for more information, see rust-lang/rust#65721

error: aborting due to 6 previous errors

For more information about this error, try rustc --explain E0658.
error: failed to compile investments v1.2.0, intermediate artifacts can be found at /tmp/cargo-installct31Uk

Caused by:
could not compile investments._

Но я нашел как решить эту проблему (так же можно добавить в readme). После установки rustc, cargo и libsqlite3-dev необходимо перезагрузить виртуальную машину и после этого investments успешно компилируется.

Далее, Вы были правы, я не выгружал Activity Statement.
Соответственно, после Ваших рекоммендаций, я, выгрузив Activity Statement, разместил его в /root/ib, предварительно очистив директорию. Правда, все равно пришлось редактировать файл, так как у меня счет Margin (переименовал его в Cash), а так же была одна сделка по покупке валюты за рубли (удалил эти строки) - на это все у меня программа ругалась и не формировала tax-statement. После всех произведенных манипуляций у меня успешно отображается tax-statement в терминале по команде: investments tax-statement ib
И, что самое главное, успешно добавляется необходимая информация и далее формируется НДФЛ-3 отчет в формате .dcX, через Декларацию.

Огромное спасибо за программу!

@KonishchevDmitry
Copy link
Owner

После установки rustc, cargo и libsqlite3-dev необходимо перезагрузить виртуальную машину и после этого investments успешно компилируется.

А вы rustc и cargo ставили еще и через Ubuntu'ный apt? Если да, то тогда такое поведение объяснимо: вы сначала поставили в систему Rust из репозитория Ubuntu (не самый свежий), а затем поставили свежий с сайта, но т. к. он прописывает себя в PATH в .bashrc, то для того, чтобы он подхватился, необходимо запустить новую shell-сессию - иначе сборка будет производиться старым системным.

а так же была одна сделка по покупке валюты за рубли (удалил эти строки) - на это все у меня программа ругалась и не формировала tax-statement

А можете поделиться этой строчкой? USD <-> RUB конвертацию я поддерживаю, и я бы у себя поправил ошибку.

Или у вас там была какая-то другая валюта? Другие валюты я пока что не поддерживаю - хотелось бы сначала, как минимум, увидеть, как это все будет отображаться в отчете, т. к. порой брокеры умеют удивить и представить некоторые данные таким образом, как бы ты сам никогда не подумал. Если готовы поделиться обезличенной версией отчета со мной по email konishchev@gmail.com, я готов поддержать и какие-нибудь евро.

@esemi
Copy link

esemi commented Jan 23, 2021

@KonishchevDmitry Приветствую. Пришёл потестить тулу для расчётов налогов и хожу по тем же граблям с activity-statement.csv, что и в данном тикете. Решил не пложить сущности, а продолжить тут.
Что делаю:

  • по инструкции выгружаю activity statement за один год в csv формате
    image

  • следом выгружаю Trade Confirmation Flex Query в csv формате (строго по инструкции)
    image

  • кладу оба файла в одну папку
    image

  • настраиваю тулу по примеру, удалив всё не используемое
    image

  • запускаю
    investments tax-statement ib

  • получаю в ответ ошибку
    E: Error while reading "/home/esemi/.investments/ib_reports/activity_2020.csv" broker statement: Failed to parse ("Trades", "Data", "Order", "Forex", "RUB", "USD.RUB", "2020-01-31, 04:02:50", "1,000", "63.23343", "", "-63233.43", "-2", "", "", "11.535022", "") record: Unexpected Forex quantity/volume values: $1,000/-63,233.43₽.

По треду вышел я так понял, что конвертацию RUB -> USD тула поддерживает, но выглядит, как будто не всегда)
Буду благодарен за разбор кейса, сам в расте боюсь закопаться) Отчёты обезличил и прилагаю

@KonishchevDmitry
Copy link
Owner

KonishchevDmitry commented Jan 23, 2021

@esemi, долго не мог понять в чем проблема, и как вы этого у себя добились :) - у меня она никак не хотела воспроизводиться. Да и не должна была.

В итоге смог-таки найти причину - два дня назад вышла rust_decimal 1.10.0, и при установке у вас поставилась именно она. В ней есть какой-то баг, который я пока еще не успел осознать. Пока что просто запинил версию и выпустил v2.6.9.

С rust_decimal 1.9.0 команда tax-statement работает без проблем (а вот analyse, правда, отказывается, т. к. не может найти котировки EIMI - Лондонские биржи я пока не поддерживаю, но для расчета налогов эта команда вам не нужна).

Спасибо! Буду искать багу в rust_decimal и общаться с автором.

@esemi
Copy link

esemi commented Jan 23, 2021

Большое спасибо за скорый ответ. Да, действительно дело в слишком свежем расте) Отчёт получил, пойду сверять. Спасибо)

@KonishchevDmitry
Copy link
Owner

Я тем временем смог докопаться до сути проблемы и отправил автору PR - paupino/rust-decimal#312 8-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants