Code Monkey home page Code Monkey logo

investments's Introduction

Investments

Библиотека для анализа брокерских отчетов + утилиты для подготовки налоговой отчетности

Tests status

Установка/обновление

$ pip3 install investments --upgrade --user

или с помощью poetry

Утилита ibtax

Расчет прибыли Interactive Brokers для уплаты налогов для резидентов РФ

  • расчет сделок по методу ФИФО, учет даты расчетов (settle date)
  • конвертация по курсу ЦБ
  • поддержка валют USD, RUB, EUR, CNH(CNY), AUD, GBP, CAD, CZK, DKK, HKD, HUF, YEN, KRW, NOK, PLN, SGD, ZAR, SEK, CHF, TRY
  • раздельный результат сделок по акциям и опционам + дивиденды
  • учёт начисленных процентов на остаток по счету
  • учёт комисий по сделкам
  • пока НЕ поддерживаются валюты ILS, MXN, NZD
  • пока НЕ поддерживаются сплиты
  • пока НЕ поддерживаются сделки Forex, сделка пропускается и выводится сообщение о том, что это может повлиять на итоговый отчет

Пример отчета: ibtax report example

Запуск

$ python3 -m investments.ibtax --activity-reports-dir /path/to/activity/dir --confirmation-reports-dir /path/to/confirmation/dir

Отчеты activity & confirmation должны:

  • быть выгружены из IB в формате CSV
  • лежать в разных директориях (см. Подготовка отчетов Interactive Brokers)

Просмотр неокруглённых цифр в расчётах

$ python3 -m investments.ibtax --verbose --activity-reports-dir /path/to/activity/dir --confirmation-reports-dir /path/to/confirmation/dir

Экспорт отчёта в pdf файл

$ python3 -m investments.ibtax --save-to /path/to/ibtax-report.pdf --activity-reports-dir /path/to/activity/dir --confirmation-reports-dir /path/to/confirmation/dir

Утилита ibdds

Утилита для подготовки отчёта о движении денежных средств по счетам у брокера Interactive Brokers (USA) для резидентов РФ

  • выводит отчёт по каждой валюте счёта отдельно
  • вывод максимально приближен к форме отчёта о ДДС

Пример отчета: ibdds report example

Запуск

$ python3 -m investments.ibdds --activity-report-filepath /path/to/activity/report.csv

Отчет activity должен:

  • быть выгружен из IB в формате CSV
  • отражать активность за один год (см. Подготовка отчетов Interactive Brokers)

Подготовка отчетов Interactive Brokers

Для работы нужно выгрузить из личного кабинета два типа отчетов: Activity statement (сделки, дивиденды, информация по инструментам и т.п.) и Trade Confirmation (settlement date, необходимая для правильной конвертации сумм по курсу ЦБ)

Отчёты должны быть названы так, чтобы сортировались естественным образом по годам начиная от старого к новому. Такого можно достичь называя файлик номером года (например 2019.csv).

Activity statement

Для загрузки нужно перейти в Reports / Tax Docs > Default Statements > Activity

Выбрать Format: CSV и скачать данные за все доступное время (Perioid: Annual для прошлых лет + Period: Year to Date для текущего года)

Обязательно выгрузите отчеты за все время существования вашего счета!

Activity Statement

Trade Confirmation

Для загрузки нужно перейти в Reports / Tax Docs > Flex Queries > Trade Confirmation Flex Query и создать новый тип отчетов, выбрав в Sections > Trade Confirmation все пункты в группе Executions, остальные настройки - как на скриншоте:

Trade Confirmation Flex Query

После этого в Reports / Tax Docs > Custom Statements выгрузите отчеты за все время существования вашего счета, используя Custom date range периодами по 1 году (больше IB поставить не дает):

Trade Confirmation Statement

Разворачивание проекта для внесения изменений

  • Install poetry
  • Clone & modify & run
$ git clone https://github.com/cdump/investments

$ cd investments

$ poetry install
$ poetry run ibtax
usage: ibtax [-h] --activity-reports-dir ACTIVITY_REPORTS_DIR --confirmation-reports-dir CONFIRMATION_REPORTS_DIR [--cache-dir CACHE_DIR] [--years YEARS] [--verbose]
ibtax: error: the following arguments are required: --activity-reports-dir, --confirmation-reports-dir

$ vim investments/ibtax/ibtax.py # edit main file for example

$ poetry run ibtax # run updated version

investments's People

Contributors

cdump avatar esemi avatar flamefactory avatar mladshij avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

investments's Issues

KeyError: 'LevelOfDetail'

OS: MacOs Catalina
Python: 3.7.6

❯ /System/Volumes/Data/Users/thatguy/Library/Python/3.7/bin/ibtax --activity-reports-dir "/Users/thatguy/Yandex.Disk.localized/Финансы/Interactive Brokers/2019" --confirmation-reports-dir "/Users/thatguy/Yandex.Disk.localized/Финансы/Interactive Brokers/2019"
[*] Activity report /Users/thatguy/Yandex.Disk.localized/Финансы/Interactive Brokers/2019/U2790801_2019_2019.csv
[*] Activity report /Users/thatguy/Yandex.Disk.localized/Финансы/Interactive Brokers/2019/Trade_Confirmation.csv
[*] Confirmation report /Users/thatguy/Yandex.Disk.localized/Финансы/Interactive Brokers/2019/U2790801_2019_2019.csv
[*] Confirmation report /Users/thatguy/Yandex.Disk.localized/Финансы/Interactive Brokers/2019/Trade_Confirmation.csv
================================================================

Traceback (most recent call last):
  File "/System/Volumes/Data/Users/thatguy/Library/Python/3.7/bin/ibtax", line 8, in <module>
    sys.exit(main())
  File "/Users/thatguy/Library/Python/3.7/lib/python/site-packages/investments/ibtax/ibtax.py", line 115, in main
    trade_confirmation_csvs=confirmation_reports,
  File "/Users/thatguy/Library/Python/3.7/lib/python/site-packages/investments/report_parsers/ib.py", line 102, in parse_csv
    self._parse_trade_confirmation_csv(csv.reader(tc_fh, delimiter=','))
  File "/Users/thatguy/Library/Python/3.7/lib/python/site-packages/investments/report_parsers/ib.py", line 128, in _parse_trade_confirmation_csv
    if f['LevelOfDetail'] != 'EXECUTION':
KeyError: 'LevelOfDetail'

No support for Forex orders

❯ /System/Volumes/Data/Users/thatguy/Library/Python/3.7/bin/ibtax --activity-reports-dir "/Users/thatguy/Yandex.Disk.localized/Финансы/Interactive Brokers/2019" --confirmation-reports-dir "/Users/thatguy/Yandex.Disk.localized/Финансы/Interactive Brokers/2019/1"
[*] Activity report /Users/thatguy/Yandex.Disk.localized/Финансы/Interactive Brokers/2019/U2790801_2019_2019.csv
[*] Confirmation report /Users/thatguy/Yandex.Disk.localized/Финансы/Interactive Brokers/2019/1/Trade_Confirmation.csv
================================================================

Traceback (most recent call last):
  File "/System/Volumes/Data/Users/thatguy/Library/Python/3.7/bin/ibtax", line 8, in <module>
    sys.exit(main())
  File "/Users/thatguy/Library/Python/3.7/lib/python/site-packages/investments/ibtax/ibtax.py", line 115, in main
    trade_confirmation_csvs=confirmation_reports,
  File "/Users/thatguy/Library/Python/3.7/lib/python/site-packages/investments/report_parsers/ib.py", line 111, in parse_csv
    'Deposits & Withdrawals': self._parse_deposits,
  File "/Users/thatguy/Library/Python/3.7/lib/python/site-packages/investments/report_parsers/ib.py", line 157, in _real_parse_activity_csv
    parser_fn(fields)
  File "/Users/thatguy/Library/Python/3.7/lib/python/site-packages/investments/report_parsers/ib.py", line 170, in _parse_trades
    ticker = self._tickers.get_ticker(f['Symbol'], _parse_tickerkind(f['Asset Category']))
  File "/Users/thatguy/Library/Python/3.7/lib/python/site-packages/investments/report_parsers/ib.py", line 25, in _parse_tickerkind
    raise ValueError(strval)
ValueError: Forex

Trade fees support

Хочется добавлять комиссии за трейд (покупка/продажа) в расход/доход по сделке.

ValueError: U.S. Treasury Bills

Подгрузил все Activity Statement, получаю ошибку. В 2022 я покупал US Treasury Bills, Fixed Income не поддерживаются?

В Activity statement имею следующую строчку:

Realized & Unrealized Performance Summary | Data | U.S. Treasury Bills | 912796ZM4 - United States Treasury B 01/31/23 | 0 | 0 | 0 | 0 | 0 | 0 | 50.64 | 0 | 0 | 0 | 50.64 | 50.64

image

Traceback (most recent call last):
File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/usr/lib/python3.10/runpy.py", line 86, in _run_code
exec(code, run_globals)
File "/home/raian/.local/lib/python3.10/site-packages/investments/ibtax/main.py", line 3, in
main()
File "/home/raian/.local/lib/python3.10/site-packages/investments/ibtax/ibtax.py", line 181, in main
parser_object = parse_reports(args.activity_reports_dir, args.confirmation_reports_dir)
File "/home/raian/.local/lib/python3.10/site-packages/investments/ibtax/ibtax.py", line 144, in parse_reports
parser_object.parse_csv(
File "/home/raian/.local/lib/python3.10/site-packages/investments/report_parsers/ib.py", line 189, in parse_csv
self._real_parse_activity_csv(csv.reader(ac_fh, delimiter=','), {
File "/home/raian/.local/lib/python3.10/site-packages/investments/report_parsers/ib.py", line 259, in _real_parse_activity_csv
parser_fn(fields)
File "/home/raian/.local/lib/python3.10/site-packages/investments/report_parsers/ib.py", line 268, in _parse_instrument_information
kind=_parse_tickerkind(f['Asset Category']),
File "/home/raian/.local/lib/python3.10/site-packages/investments/report_parsers/ib.py", line 43, in _parse_tickerkind
raise ValueError(strval)
ValueError: U.S. Treasury Bills

Отрицательные дивиденды и позиция в +1k

Добрый день.
Добавьте пожалуйста обработку:

  1. Отрицательных дивидендов (да, бывает такое - сам заплатил с короткой продажи)
  2. Сделок по позициям размером больше 1000 штук. В отчетах количество указано с запятой в качестве разделителя разрядов.

KeyError: 'Amount'

Привет! С чем может быть связана такая ошибка:

Traceback (most recent call last):
File "", line 198, in _run_module_as_main
File "", line 88, in run_code
File "D:\investments-master\investments\ibtax_main
.py", line 3, in
main()
File "D:\investments-master\investments\ibtax\ibtax.py", line 181, in main
parser_object = parse_reports(args.activity_reports_dir, args.confirmation_reports_dir)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\investments-master\investments\ibtax\ibtax.py", line 144, in parse_reports
parser_object.parse_csv(
File "D:\investments-master\investments\report_parsers\ib.py", line 201, in parse_csv
self._real_parse_activity_csv(csv.reader(activity_fh, delimiter=','), {
File "D:\investments-master\investments\report_parsers\ib.py", line 259, in _real_parse_activity_csv
parser_fn(fields)
File "D:\investments-master\investments\report_parsers\ib.py", line 355, in _parse_deposits
amount = Money(f['Amount'], currency)
~^^^^^^^^^^
KeyError: 'Amount'

Parse 1042-S

На протяжение года IB автоматически удерживают с россиян 10% withholding tax с акций, ETF, ADR, а к 15 февраля пересматривают, что было в составе ETF и могут уменьшить налог соответственно.
Вроде бы эти корректировки задним числом суммы налога по дивам не видны нигде, кроме 1042-S формы.
Выходит, в нашу налоговую мы недоплатим 10%, которые нам вернули)

Просьба добавить поддержку валют. В частности CAD

Traceback (most recent call last):
File "/Users/kostya/.pyenv/versions/3.9.1/lib/python3.9/runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/Users/kostya/.pyenv/versions/3.9.1/lib/python3.9/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/Users/kostya/.local/lib/python3.9/site-packages/investments/ibdds/main.py", line 3, in
main()
File "/Users/kostya/.local/lib/python3.9/site-packages/investments/ibdds/ibdds.py", line 86, in main
parser_object = parse_reports(args.activity_report_filepath)
File "/Users/kostya/.local/lib/python3.9/site-packages/investments/ibdds/ibdds.py", line 39, in parse_reports
parser_object.parse_csv(activity_report_filepath=activity_report)
File "/Users/kostya/.local/lib/python3.9/site-packages/investments/ibdds/ibdds.py", line 27, in parse_csv
self._real_parse_activity_csv(csv.reader(activity_fh, delimiter=','), {
File "/Users/kostya/.local/lib/python3.9/site-packages/investments/report_parsers/ib.py", line 211, in _real_parse_activity_csv
parser_fn(fields)
File "/Users/kostya/.local/lib/python3.9/site-packages/investments/report_parsers/ib.py", line 327, in _parse_cash_report
currency = Currency.parse(currency_code)
File "/Users/kostya/.local/lib/python3.9/site-packages/investments/currency.py", line 17, in parse
raise ValueError(strval)
ValueError: CAD

Ошибка в TickersStorage

Приветствую!

У меня на отчётах за 2022 год, выводит ошибку, подскажите в чём может быть причина или как диагностировать её? замечу что на отчётах за 2021 г. всё работает!


>python -m investments.ibtax --activity-reports-dir D:\NDFL\Reports\ --confirmation-reports-dir D:\Config\

Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\ibtax\__main__.py", line 3, in <module>
    main()
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\ibtax\ibtax.py", line 291, in main
    parser_object = parse_reports(args.activity_reports_dir, args.confirmation_reports_dir)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\ibtax\ibtax.py", line 263, in parse_reports
    parser_object.parse_csv(
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\report_parsers\ib.py", line 190, in parse_csv
    self._real_parse_activity_csv(csv.reader(ac_fh, delimiter=','), {
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\report_parsers\ib.py", line 260, in _real_parse_activity_csv
    parser_fn(fields)
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\report_parsers\ib.py", line 265, in _parse_instrument_information
    self._tickers.put(
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\report_parsers\ib.py", line 79, in put
    assert self._conid_to_ticker[conid] == ticker
           ~~~~~~~~~~~~~~~~~~~~~^^^^^^^
Указывает на ошибку conid: KeyError: '589316229' 

Заранее благодарен за ваш отзыв!

Show tax percent in dividends table

Поговаривают, не всякие диво-подобные выплаты проходят по ставке 10% налога для нерезов в США. Хочется вывести ставку в таблице
image

Генерация 3-НДФЛ не работает - assert conid not in self._conid_to_ticker

% python3 -m investments.ibtax --activity-reports-dir ./activity --confirmation-reports-dir ./confirmation
Traceback (most recent call last):
File "/Users/kostya/.pyenv/versions/3.9.1/lib/python3.9/runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/Users/kostya/.pyenv/versions/3.9.1/lib/python3.9/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/Users/kostya/.local/lib/python3.9/site-packages/investments/ibtax/main.py", line 3, in
main()
File "/Users/kostya/.local/lib/python3.9/site-packages/investments/ibtax/ibtax.py", line 251, in main
parser_object = parse_reports(args.activity_reports_dir, args.confirmation_reports_dir)
File "/Users/kostya/.local/lib/python3.9/site-packages/investments/ibtax/ibtax.py", line 226, in parse_reports
parser_object.parse_csv(
File "/Users/kostya/.local/lib/python3.9/site-packages/investments/report_parsers/ib.py", line 142, in parse_csv
self._real_parse_activity_csv(csv.reader(ac_fh, delimiter=','), {
File "/Users/kostya/.local/lib/python3.9/site-packages/investments/report_parsers/ib.py", line 211, in _real_parse_activity_csv
parser_fn(fields)
File "/Users/kostya/.local/lib/python3.9/site-packages/investments/report_parsers/ib.py", line 216, in _parse_instrument_information
self._tickers.put(
File "/Users/kostya/.local/lib/python3.9/site-packages/investments/report_parsers/ib.py", line 65, in put
assert conid not in self._conid_to_ticker
AssertionError

Подсказать по алгоритму расчёта

Извините, наверное это не баг, но никак не могу понять - как программа выходит на сумму 159663.38 рублей в примере ниже? Ни в Excel, ни в калькуляторе не смог воспроизвести.

ticker (VOO, Stock)
trade_date 2019-01-16
settle_date 2019-01-18
quantity 10
price 240.1975$
fee -1.0000$
total -2402.98$
total_rub -159663.38₽
settle_rate 66.4438₽
fee_rate 67.0820₽
profit_rub 0₽

AssertionError

Ubuntu 18.04.4 LTS
Python 3.6.9

root@linux:~/investments-master/investments/ibtax# poetry run ibtax.py --activity-reports-dir "/home/croot/ACT/" --confirmation-reports-dir "/home/croot/TC/"
The currently activated Python version 2.7.17 is not supported by the project (^3.6.1 || ^3.7).
Trying to find and use a compatible version. 
Using python3 (3.6.9)
[*] Activity report /home/croot/ACT/2018.csv
[*] Activity report /home/croot/ACT/2020.csv
[*] Activity report /home/croot/ACT/2019.csv
[*] Confirmation report /home/croot/TC/TC2018.csv
[*] Confirmation report /home/croot/TC/TC2020.csv
[*] Confirmation report /home/croot/TC/TC2019.csv
================================================================

Traceback (most recent call last):
  File "/home/croot/.cache/pypoetry/virtualenvs/investments-yjvgpkFm-py3.6/bin/ibtax", line 11, in <module>
    load_entry_point('investments', 'console_scripts', 'ibtax')()
  File "/home/croot/investments-master/investments/ibtax/ibtax.py", line 115, in main
    trade_confirmation_csvs=confirmation_reports,
  File "/home/croot/investments-master/investments/report_parsers/ib.py", line 96, in parse_csv
    'Financial Instrument Information': self._parse_instrument_information,
  File "/home/croot/investments-master/investments/report_parsers/ib.py", line 157, in _real_parse_activity_csv
    parser_fn(fields)
  File "/home/croot/investments-master/investments/report_parsers/ib.py", line 166, in _parse_instrument_information
    multiplier=int(f['Multiplier']),
  File "/home/croot/investments-master/investments/report_parsers/ib.py", line 49, in put
    assert description not in self._description_to_ticker
AssertionError

FIFO profit calculation bug (?)

Вот два тестовых лога трейдов, отличающиеся последней транзакцией: в одном она цельная, в другом — разделена на 2 (переход через момент, когда портфель пуст).

По профиту они должны быть идентичны, но почему-то результаты программы оочень отличаются:
aaa
(или я что-то не так понимаю?)

Bond trades support

Реализовать поддержку сделок по облигациям.
Видимо нужен пример отчёта и расширить _parse_tickerkind

Проблема с Timestamp

Почему-то скрипту январские праздники не нравятся:

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\pandas\core\indexes\base.py", line 3803, in get_loc
    return self._engine.get_loc(casted_key)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "pandas\_libs\index.pyx", line 516, in pandas._libs.index.DatetimeEngine.get_loc
  File "pandas\_libs\index.pyx", line 550, in pandas._libs.index.DatetimeEngine.get_loc
KeyError: Timestamp('2022-01-04 00:00:00')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\pandas\core\indexes\datetimes.py", line 736, in get_loc
    return Index.get_loc(self, key, method, tolerance)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\pandas\core\indexes\base.py", line 3805, in get_loc
    raise KeyError(key) from err
KeyError: Timestamp('2022-01-04 00:00:00')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\ibtax\__main__.py", line 3, in <module>
    main()
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\ibtax\ibtax.py", line 307, in main
    fees_report = prepare_fees_report(fees, cbr_client_usd, args.verbose) if fees else None
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\ibtax\ibtax.py", line 94, in prepare_fees_report
    df['rate'] = df.apply(lambda x: cbr_client_usd.get_rate(x['amount'].currency, x[operation_date_column]), axis=1)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\pandas\core\frame.py", line 9565, in apply
    return op.apply().__finalize__(self, method="apply")
           ^^^^^^^^^^
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\pandas\core\apply.py", line 746, in apply
    return self.apply_standard()
           ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\pandas\core\apply.py", line 873, in apply_standard
    results, res_index = self.apply_series_generator()
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\pandas\core\apply.py", line 889, in apply_series_generator
    results[i] = self.f(v)
                 ^^^^^^^^^
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\ibtax\ibtax.py", line 94, in <lambda>
    df['rate'] = df.apply(lambda x: cbr_client_usd.get_rate(x['amount'].currency, x[operation_date_column]), axis=1)
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\investments\data_providers\cbr.py", line 41, in get_rate
    return rates.loc[dt].item()
           ~~~~~~~~~^^^^
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\pandas\core\indexing.py", line 1073, in __getitem__
    return self._getitem_axis(maybe_callable, axis=axis)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\pandas\core\indexing.py", line 1312, in _getitem_axis
    return self._get_label(key, axis=axis)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\pandas\core\indexing.py", line 1260, in _get_label
    return self.obj.xs(label, axis=axis)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\pandas\core\generic.py", line 4056, in xs
    loc = index.get_loc(key)
          ^^^^^^^^^^^^^^^^^^
  File "C:\Users\AppData\Roaming\Python\Python311\site-packages\pandas\core\indexes\datetimes.py", line 738, in get_loc
    raise KeyError(orig_key) from err
KeyError: Timestamp('2022-01-04 00:00:00')

windows: Ломается на fee при одинаковых суммах в один день

Если в activity отчёте между разделами "Deposits & Withdrawals" и "Dividends" есть такие строки:

Fees,Header,Subtitle,Currency,Date,Description,Amount
Fees,Data,Other Fees,USD,2022-08-03,V23:GLOBAL SNAPSHOT PNP FOR JUL 2022,-0.03
Fees,Data,Other Fees,USD,2022-08-03,V
23:GLOBAL SNAPSHOT PNP FOR JUL 2022,0.03
Fees,Data,Total,,,,0
Fees,Notes,"Market data is provided by Global Financial Information Services (GmbH). Your local broker collects amounts owed for fees and tax for such data on behalf of Global Financial Information Services (GmbH). Note, you are responsible for any applicable taxes relating to the provision of these services."

то всё ломается с ошибкой:

ValueError: Cannot set a DataFrame with multiple columns to the single column amount_rub

в ibtax.py, line 102, in prepare_fees_report:

df['amount_rub'] = df.apply(lambda x: cbr_client_usd.convert_to_rub(x['amount'], x[operation_date_column]), axis=1)

Проблема именно из-за одинаковых (по модулю) сумм. Если суммы разные (например -0.04 и 0.03), то ничего не ломается.

ValueError: time data '' does not match format '%Y-%m-%d'

Согласно readme сложил в директорию отчеты за все года. Но были года, где не было операций. Вероятней всего, оттуда берутся пустые даты и программа дальше не работает. Убрал "пустые" отчеты — заработало.

P.S. Огромное спасибо, что написали и выложили программу. Если есть возможность donation автору — я бы поучаствовал.
Из фичереквестов на будущее:

  1. поддержка фьючерсов
  2. поддержка других валют (покупки акций за другие валюты в т.ч.)
  3. поддержка форекс-операций

Про CFD не проверял, но если не поддерживается, то это 4-е пожелание.

InteractiveBrokers: support Futures

Здравствуйте,

Обнаружил ошибку что не поддерживаются фьючерсы.

Было бы отлично, если бы вы могли их добавить или подсказать как это сделать.

Traceback (most recent call last):
File "/Users/seven/miniconda3/envs/py37/bin/ibtax", line 8, in
sys.exit(main())
File "/Users/seven/miniconda3/envs/py37/lib/python3.7/site-packages/investments/ibtax/ibtax.py", line 135, in main
trade_confirmation_csvs=confirmation_reports,
File "/Users/seven/miniconda3/envs/py37/lib/python3.7/site-packages/investments/report_parsers/ib.py", line 118, in parse_csv
'Financial Instrument Information': self._parse_instrument_information,
File "/Users/seven/miniconda3/envs/py37/lib/python3.7/site-packages/investments/report_parsers/ib.py", line 180, in _real_parse_activity_csv
parser_fn(fields)
File "/Users/seven/miniconda3/envs/py37/lib/python3.7/site-packages/investments/report_parsers/ib.py", line 189, in _parse_instrument_information
kind=_parse_tickerkind(f['Asset Category']),
File "/Users/seven/miniconda3/envs/py37/lib/python3.7/site-packages/investments/report_parsers/ib.py", line 36, in _parse_tickerkind
raise ValueError(strval)
ValueError: Futures

Я резидент Украины, у нас есть двузначности в законе, и при расчёте фьючерсов мы пока используем формулу "(сумма покупки - сумма продажи) * мультипликатор фьючерса(например 37500 для кофе/какао)*курс доллара на дату продажи".
В РФ я так понимаю должна использоваться формула
"(сумма покупки*курс доллара на дату покупки - сумма продажи*курс доллара на дату продажи)*мультипликатор фьючерса"

Спасибо!

KeyError: 'VANGUARD REIT ETF'

Привет, Максим! Запустил на своих отчётах. Вот что получил:

nikzolotov@Nikitas-MacBook-Pro investments % poetry run ibtax --activity-reports-dir "/Users/nikzolotov/Desktop/as/" --confirmation-reports-dir "/Users/nikzolotov/Desktop/flex"
[*] Activity report /Users/nikzolotov/Desktop/as/2020.csv
[*] Activity report /Users/nikzolotov/Desktop/as/2019.csv
[*] Activity report /Users/nikzolotov/Desktop/as/2018.csv
[*] Activity report /Users/nikzolotov/Desktop/as/2017.csv
[*] Confirmation report /Users/nikzolotov/Desktop/flex/2020.csv
[*] Confirmation report /Users/nikzolotov/Desktop/flex/2019.csv
[*] Confirmation report /Users/nikzolotov/Desktop/flex/2018.csv
[*] Confirmation report /Users/nikzolotov/Desktop/flex/2017.csv
================================================================

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/Users/nikzolotov/Desktop/investments/investments/ibtax/ibtax.py", line 125, in main
    trade_confirmation_csvs=confirmation_reports,
  File "/Users/nikzolotov/Desktop/investments/investments/report_parsers/ib.py", line 107, in parse_csv
    'Financial Instrument Information': self._parse_instrument_information,
  File "/Users/nikzolotov/Desktop/investments/investments/report_parsers/ib.py", line 168, in _real_parse_activity_csv
    parser_fn(fields)
  File "/Users/nikzolotov/Desktop/investments/investments/report_parsers/ib.py", line 177, in _parse_instrument_information
    multiplier=int(f['Multiplier']),
  File "/Users/nikzolotov/Desktop/investments/investments/report_parsers/ib.py", line 66, in put
    assert self._description_to_ticker[description] == ticker
KeyError: 'VANGUARD REIT ETF'

Support credit Interest

IB начисляет процент на остаток средств на счету. С этих процентов тоже нужно заплатить 13% в ФНС РФ
Выглядит в отчёте примерно так

Interest,Header,Currency,Date,Description,Amount
Interest,Data,RUB,2020-03-04,RUB Credit Interest for Feb-2020,3.21
Interest,Data,Total,,,3.21
Interest,Data,Total in USD,,,0.04844211
Interest,Data,USD,2020-03-04,USD Credit Interest for Feb-2020,0.09
Interest,Data,Total,,,0.09
Interest,Data,Total Interest in USD,,,0.13844211

Не поддерживается дробное количество акций

Привет!

На примере кейса с KD (спинофф IBM). Я получил в портфель дробное количество акций.

$ cat ~/.ibtax/activity-statements/2021.csv | grep KD
Mark-to-Market Performance Summary,Data,Stocks,KD,0,0,--,--,-2.672,0.1,-0.08002695,0,-2.65202695,
Realized & Unrealized Performance Summary,Data,Stocks,KD,0,0,-2.21282695,0,0,-2.21282695,0,0,0,0,0,-2.21282695,
Trades,Data,Order,Stocks,USD,KD,"2021-11-16, 12:30:01",-0.4,19.95,19.7,7.98,-0.080026951,-10.1128,-2.212827,0.1,C;FP
Trades,SubTotal,,Stocks,USD,KD,,-0.4,,,7.98,-0.080026951,-10.1128,-2.212827,0.1,
Corporate Actions,Data,Stocks,USD,2021-11-04,"2021-11-03, 20:25:00","IBM(US4592001014) Spinoff  2 for 10 (KD, KYNDRYL HOLDINGS INC-W/I, US50155Q1004)",0.4,0,0,0,
Financial Instrument Information,Data,Stocks,KD,KYNDRYL HOLDINGS INC,520488080,US50155Q1004,NYSE,1,COMMON,
$ ibtax --activity-reports-dir ~/.ibtax/activity-statements/ --confirmation-reports-dir ~/.ibtax/trade-confirmation/
Traceback (most recent call last):
  File "/Users/xkrt/Library/Python/3.9/bin/ibtax", line 8, in <module>
    sys.exit(main())
  File "/Users/xkrt/Library/Python/3.9/lib/python/site-packages/investments/ibtax/ibtax.py", line 251, in main
    parser_object = parse_reports(args.activity_reports_dir, args.confirmation_reports_dir)
  File "/Users/xkrt/Library/Python/3.9/lib/python/site-packages/investments/ibtax/ibtax.py", line 226, in parse_reports
    parser_object.parse_csv(
  File "/Users/xkrt/Library/Python/3.9/lib/python/site-packages/investments/report_parsers/ib.py", line 154, in parse_csv
    self._real_parse_activity_csv(csv.reader(activity_fh, delimiter=','), {
  File "/Users/xkrt/Library/Python/3.9/lib/python/site-packages/investments/report_parsers/ib.py", line 211, in _real_parse_activity_csv
    parser_fn(fields)
  File "/Users/xkrt/Library/Python/3.9/lib/python/site-packages/investments/report_parsers/ib.py", line 243, in _parse_trades
    quantity=int(f['Quantity']) * quantity_multiplier,
ValueError: invalid literal for int() with base 10: '-0.4'

Курс валют для маржинальных аккаунтов!

Приветствую!

В вашей программе реализован расчёт курса в режиме Т+2 для кэш аккаунтов, но как произвести расчёт курса по курсу дня продажи для маржин аккаунтов? Ведь на маржин аккаунте расчёт производиться в день продажи активов, без выдержки в 3и дня!

Offshore dividends tax

Привет, спасибо за работу над ibtax!

Кажется я нашёл недоработку. У меня в портфеле есть 15 шт. IVZ, которая платит дивиденды. IB не удерживает налог с этих дивов, поскольку компания зарегистрирована в оффшоре (Бермуды). Соответственно в Activity statement записи о этих дивидендах есть в разеделе Dividends и нет в разделе Withholding Tax.

Насколько я понимаю, в этом случае я должен заплатить в налоговую РФ все 13% от этих дивов. При этом ibtax насчитывает tax_paid_rub = 0₽.

Урезанный output ibtax:

>>> DIVIDENDS <<<
                            amount tax_paid      rate amount_rub tax_paid_rub
N  ticker        date
4  (IVZ, Stock)  2020-09-01  2.33$       0$  73.8039₽    171.96₽        0.00₽
11 (IVZ, Stock)  2020-12-02  2.33$       0$  76.3203₽    177.83₽        0.00₽

JFYI насколько я вижу, "конкурирующий" тул https://github.com/KonishchevDmitry/investments верно указывет 22₽ и 23₽ к доплате соответственно.

Ошибка парсинга тикера

Здравствуйте, возникает вот такая ошибка при попытке генерации отчета:
Что - то связанное со сплитом Apple?

$ python -m investments.ibtax --activity-reports-dir ./activity/ --confirmation-reports-dir ./tradeconfirmation/
Traceback (most recent call last):
  File "Python\Python38-32\lib\runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "Python\Python38-32\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "Python38\site-packages\investments\ibtax\__main__.py", line 3, in <module>
    main()
  File "Python38\site-packages\investments\ibtax\ibtax.py", line 251, in main
    parser_object = parse_reports(args.activity_reports_dir, args.confirmation_reports_dir)
  File "Python38\site-packages\investments\ibtax\ibtax.py", line 226, in parse_reports
    parser_object.parse_csv(
  File "Python38\site-packages\investments\report_parsers\ib.py", line 154, in parse_csv
    self._real_parse_activity_csv(csv.reader(activity_fh, delimiter=','), {
  File "Python38\site-packages\investments\report_parsers\ib.py", line 211, in _real_parse_activity_csv
    parser_fn(fields)
  File "Python38\site-packages\investments\report_parsers\ib.py", line 230, in _parse_trades
    ticker = self._tickers.get_ticker(f['Symbol'], ticker_kind)
  File "Python38\site-packages\investments\report_parsers\ib.py", line 94, in get_ticker
    raise KeyError(name)
KeyError: 'AAPL 15JAN21 180.0 C'

Установка через pip на macos: не находит pango

Привет! Пока не поставил pango руками - не запускалось при установке через pip.

brew install pango

Мб стоит добавить в доку?

Падало так:

python -m investments.ibtax --activity-reports-dir data/activity --confirmation-reports-dir data/trade_confirmation

-----

WeasyPrint could not import some external libraries. Please carefully follow the installation steps before reporting an issue:
https://doc.courtbouillon.org/weasyprint/stable/first_steps.html#installation
https://doc.courtbouillon.org/weasyprint/stable/first_steps.html#troubleshooting

-----

Traceback (most recent call last):
  File "/opt/homebrew/Cellar/[email protected]/3.10.10/Frameworks/Python.framework/Versions/3.10/lib/python3.10/runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/opt/homebrew/Cellar/[email protected]/3.10.10/Frameworks/Python.framework/Versions/3.10/lib/python3.10/runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "/opt/homebrew/lib/python3.10/site-packages/investments/ibtax/__main__.py", line 1, in <module>
    from investments.ibtax.ibtax import main
  File "/opt/homebrew/lib/python3.10/site-packages/investments/ibtax/ibtax.py", line 14, in <module>
    from investments.ibtax.report_presenter import NativeReportPresenter, ReportPresenter  # noqa: I001
  File "/opt/homebrew/lib/python3.10/site-packages/investments/ibtax/report_presenter.py", line 7, in <module>
    from weasyprint import CSS, HTML  # type: ignore
  File "/opt/homebrew/lib/python3.10/site-packages/weasyprint/__init__.py", line 341, in <module>
    from .css import preprocess_stylesheet  # noqa isort:skip
  File "/opt/homebrew/lib/python3.10/site-packages/weasyprint/css/__init__.py", line 25, in <module>
    from . import computed_values, counters, media_queries
  File "/opt/homebrew/lib/python3.10/site-packages/weasyprint/css/computed_values.py", line 11, in <module>
    from ..text.ffi import ffi, pango, units_to_double
  File "/opt/homebrew/lib/python3.10/site-packages/weasyprint/text/ffi.py", line 431, in <module>
    pango = _dlopen(
  File "/opt/homebrew/lib/python3.10/site-packages/weasyprint/text/ffi.py", line 417, in _dlopen
    return ffi.dlopen(names[0])  # pragma: no cover
  File "/opt/homebrew/lib/python3.10/site-packages/cffi/api.py", line 150, in dlopen
    lib, function_cache = _make_ffi_library(self, name, flags)
  File "/opt/homebrew/lib/python3.10/site-packages/cffi/api.py", line 832, in _make_ffi_library
    backendlib = _load_backend_lib(backend, libname, flags)
  File "/opt/homebrew/lib/python3.10/site-packages/cffi/api.py", line 827, in _load_backend_lib
    raise OSError(msg)
OSError: cannot load library 'pango-1.0-0': dlopen(pango-1.0-0, 0x0002): tried: '/opt/homebrew/lib/pango-1.0-0' (no such file), 'pango-1.0-0' (no such file), '/usr/local/lib/pango-1.0-0' (no such file), '/usr/lib/pango-1.0-0' (no such file), '/Users/monitorius/Yandex.Disk.localized/code/finance/nalog/pango-1.0-0' (no such file).  Additionally, ctypes.util.find_library() did not manage to locate a library called 'pango-1.0-0'

Ignoring invalid distribution ~nvestments

Не могу обновить скрипт:

C:\Users\Roman>pip3 install investments --upgrade --user
WARNING: Ignoring invalid distribution ~nvestments (C:\Users\AppData\Roaming\Python\Python311\site-packages)

Ошибка при создании отчета interactivebrokers

Доброго всем времени суток!
Подскажите пожалуйста в чем моя ошибка.
При формировании отчета о движении денежных средств все работает, команды ввожу следующие:

cd /Users/Пользователь_2/Desktop/interactivebrokers/Activity/
python3 -m investments.ibdds --activity-report-filepath U3303333_2023.csv
Отчет работает

При формировании отчета по дивидендам ввожу следующую команду:

python3 -m investments.ibtax --activity-reports- /Users/Пользователь_2/Desktop/interactivebrokers/Activity/ --confirmation-reports- /Users/ Пользователь_2/Desktop/interactivebrokers/Trade/

получаю следующее:

C:\Users\Пользователь_2>python3 -m investments.ibtax --activity-reports- /Users/Пользователь_2/Desktop/interactivebrokers/Activity/ --confirmation-reports- /Users/ Пользователь_2/Desktop/interactivebrokers/Trade/
usage: main.py [-h] --activity-reports-dir ACTIVITY_REPORTS_DIR --confirmation-reports-dir
CONFIRMATION_REPORTS_DIR [--cache-dir CACHE_DIR] [--years YEARS] [--verbose [VERBOSE]]
[--quiet [QUIET]] [--report-type {native}] [--save-to SAVE_TO]
main.py: error: unrecognized arguments: Пользователь_2/Desktop/interactivebrokers/Trade/

Quick Start Contributor's Guide

Хорошо бы иметь краткий гайд для тех, кто хочет помочь в разработке)
Банально:

  • как поставить дев зависимости
  • какие модули за что в ответе
  • как оформлять мержи

Exception: dividend not found for XXX при перевыгрузке отчета

Перевыгрузил отчет activity за 2016 год и получил следующую ошибку:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/user/devel/invest/investments/ibtax/ibtax.py", line 133, in main
    p.parse_csv(
  File "/home/user/devel/invest/investments/report_parsers/ib.py", line 129, in parse_csv
    self._real_parse_activity_csv(csv.reader(activity_fh, delimiter=','), {
  File "/home/user/devel/invest/investments/report_parsers/ib.py", line 180, in _real_parse_activity_csv
    parser_fn(fields)
  File "/home/user/devel/invest/investments/report_parsers/ib.py", line 250, in _parse_withholding_tax
    raise Exception(f'dividend not found for {ticker} on {date}')
Exception: dividend not found for HPQ (Stock) on 2017-01-04

Отчет за 2016 год, который выгружал в 2019 году:

Statement,Data,WhenGenerated,"2019-03-09, 03:43:46 EST"
Dividends,Data,USD,2016-06-01,INTC (US4581401001) Cash Dividend USD 0.26000000 (Ordinary Dividend),6.5                                                                                                                   
Withholding Tax,Data,USD,2016-06-01,INTC (US4581401001) Cash Dividend USD 0.26000000 - US Tax,-0.65, 

Отчет за 2016 год, который выгрузил в 2020 году:

Statement,Data,WhenGenerated,"2020-10-02, 01:59:30 EDT"                                              
Dividends,Data,USD,2016-06-01,INTC (US4581401001) Cash Dividend USD 0.26000000 (Ordinary Dividend),6.5                                                                                                                   
Withholding Tax,Data,USD,2016-06-01,INTC(US4581401001) Choice Dividend  0.26000000 USD Distribution Value - US Tax,-0.65,

Пока выглядит как баг на стороне отчетов IB, но надо поддержать оба случая

Interactive Brokers: поддержка split

Сейчас нет поддержки сплитов акций, в csv отчете они выглядят так:

Corporate Actions,Header,Asset Category,Currency,Report Date,Date/Time,Description,Quantity,Proceeds,Value,Realized P/L,Code
Corporate Actions,Data,Stocks,USD,2019-04-02,"2019-04-01, 20:25:00","DWDP(US26078J1007) Spinoff  1 for 3 (DOW, DOW INC-W/I, 260557103)",5,0,0,0,
Corporate Actions,Data,Stocks,USD,2019-06-03,"2019-05-31, 20:25:00","DWDP(US26078J1007) Spinoff  1 for 3 (CTVA, CORTEVA INC-W/I, 22052L104)",5,0,0,0,
Corporate Actions,Data,Stocks,USD,2019-06-03,"2019-05-31, 20:25:00","DWDP(US26078J1007) Split 1 for 3 (DD, DUPONT DE NEMOURS INC, 26614N102)",5,0,0,0,
Corporate Actions,Data,Stocks,USD,2019-06-03,"2019-05-31, 20:25:00","DWDP(US26078J1007) Split 1 for 3 (DWDP.OLD, DOWDUPONT INC, 26078J100)",-15,0,0,0,
Corporate Actions,Data,Total,,,,,,0,0,0,

Нужно собрать больше примеров из отчетов перед тем, как реализовывать.

Inactivity fees support

У IB есть комиссия за неактивность от $20 до $0 в месяц. Сумму данных комиссий за год можно вычесть из доходов от сделок за следующие три года. Хочется учесть это в калькуляции

Подготовка отчетов - устаревшая инструкция по выгрузке Trade Confirmation отчетов

В инструкции по подготовке Trade Confirmation отчетов указано, что необходимо создать Flex Query, а затем проследовать в Reports / Tax Docs > Custom Statements для генерации отчета.

Данные элементы в интерфейсе в данный момент изменены/отсутствуют, и в Tax Documents нет "Custom Statement".

При использовании документа, созданного с помощью Flex Query получаю следующую ошибку:

(base) igor@markin-io ibkr_tax % python3 -m investments.ibtax --activity-reports-dir ./activity_reports --confirmation-reports-dir ./confirmation_reports
Traceback (most recent call last):
  File "/Users/igorwork/development/anaconda3/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/Users/igorwork/development/anaconda3/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/Users/igorwork/.local/lib/python3.8/site-packages/investments/ibtax/__main__.py", line 3, in <module>
    main()
  File "/Users/igorwork/.local/lib/python3.8/site-packages/investments/ibtax/ibtax.py", line 291, in main
    parser_object = parse_reports(args.activity_reports_dir, args.confirmation_reports_dir)
  File "/Users/igorwork/.local/lib/python3.8/site-packages/investments/ibtax/ibtax.py", line 263, in parse_reports
    parser_object.parse_csv(
  File "/Users/igorwork/.local/lib/python3.8/site-packages/investments/report_parsers/ib.py", line 189, in parse_csv
    self._real_parse_activity_csv(csv.reader(ac_fh, delimiter=','), {
  File "/Users/igorwork/.local/lib/python3.8/site-packages/investments/report_parsers/ib.py", line 259, in _real_parse_activity_csv
    parser_fn(fields)
  File "/Users/igorwork/.local/lib/python3.8/site-packages/investments/report_parsers/ib.py", line 264, in _parse_instrument_information
    self._tickers.put(
  File "/Users/igorwork/.local/lib/python3.8/site-packages/investments/report_parsers/ib.py", line 69, in put
    assert conid not in self._conid_to_ticker
AssertionError

Необходимо обновить инструкцию в соответствии с новым интерфейсом IBKR, и прошу кого-нибудь подсказать как можно корректно выгрузить Trade Confirmation.

IB/OpenBroker FR report needed

Привет!

Очень понравился проект, но моего брокера нет в списке, и захотелось дополнить. Желание большое есть, а опыта серьезного программирования мало, и поэтому, кажется, для экспериментов и отладки тут пригодился бы пример какого-нибудь отчета IB/OpenBroker, на котором скрипты полноценно генерят отчетность.

Могли бы вы добавить, если не трудно? Обезличенный, с каким-нибудь минимальным объемом данных, но чтоб скрипт работал на нем. Можно даже не сюда, а в одноименный телеграм напрямую ) Заранее большое спасибо!

З.Ы.: А если у меня получится с парсером для своего брокера, то потом и сплиты бы попробовал реализовать )

Simple report usage for nalog.ru guide

Хочется зафиксировать в документации как использовать данные из репорта ibtax для подачи 3НДФЛ через ЛК налоговой.
Тут же записать с какими кодами какие доходы вбивать
Чтобы не приходилось каждый год вспоминать всё заново

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.