Skip to content

Commit

Permalink
:fix: Поправлена обработка возврата удержанного у источника налога дл…
Browse files Browse the repository at this point in the history
…я дивидендов: отчёты брокера строго необходимо парсить начиная с самого давнего года.
  • Loading branch information
esemi committed Apr 26, 2021
1 parent bfae5ad commit 54d84c0
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 1 deletion.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ $ python3 -m investments.ibdds --activity-report-filepath /path/to/activity/repo
## Подготовка отчетов Interactive Brokers
Для работы нужно выгрузить из [личного кабинета](https://www.interactivebrokers.co.uk/sso/Login) два типа отчетов: *Activity statement* (сделки, дивиденды, информация по инструментам и т.п.) и *Trade Confirmation* (settlement date, необходимая для правильной конвертации сумм по курсу ЦБ)

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

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

Expand Down
2 changes: 1 addition & 1 deletion investments/ibtax/ibtax.py
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ def csvs_in_dir(directory: str):
if not filename.name.lower().endswith('.csv'):
continue
ret.append(filename.path)
return ret
return sorted(ret)


def parse_reports(activity_reports_dir: str, confirmation_reports_dir: str) -> InteractiveBrokersReportParser:
Expand Down
27 changes: 27 additions & 0 deletions tests/report_parsers/ib_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,33 @@ def test_parse_dividends_with_tax():
assert d[1].tax == Money(0.8, Currency.USD)


def test_parse_dividends_with_changed_tax():
"""Обработка возврата WHT по дивидендам в начале следующего года."""

p = InteractiveBrokersReportParser()

lines = """Financial Instrument Information,Header,Asset Category,Symbol,Description,Conid,Security ID,Multiplier,Type,Code
Financial Instrument Information,Data,Stocks,FREL,FIDELITY REAL ESTATE ETF,183005003,US3160928574,1,ETF,
Dividends,Header,Currency,Date,Description,Amount
Dividends,Data,USD,2020-03-25,FREL(US3160928574) Cash Dividend USD 0.282 per Share (Ordinary Dividend),54.14
Withholding Tax,Header,Currency,Date,Description,Amount,Code
Withholding Tax,Data,USD,2020-03-25,FREL(US3160928574) Cash Dividend USD 0.282 per Share - US Tax,-5.41,
Withholding Tax,Data,USD,2020-03-25,FREL(US3160928574) Cash Dividend USD 0.282 per Share - US Tax,5.41,
Withholding Tax,Data,USD,2020-03-25,FREL(US3160928574) Cash Dividend USD 0.282 per Share - US Tax,-3.07,"""

lines = lines.split('\n')
p._real_parse_activity_csv(csv.reader(lines, delimiter=','), {
'Financial Instrument Information': p._parse_instrument_information,
'Dividends': p._parse_dividends,
'Withholding Tax': p._parse_withholding_tax,
})

d = p.dividends
assert d[0].ticker.symbol == 'FREL'
assert d[0].amount == Money(54.14, Currency.USD)
assert d[0].tax == Money(3.07, Currency.USD)


def test_parse_ticker_description_changed():
p = InteractiveBrokersReportParser()

Expand Down

0 comments on commit 54d84c0

Please sign in to comment.