Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

English | Русский | Українська | Srpski | Српски

Швидкий старт

Автоматична генерація податкового звіту ППДГ-3Р (податок на приріст капіталу) та ПП ОПО (податок на доходи від капіталу) для користувачів Interactive Brokers у Сербії. Програма автоматично отримує дані про транзакції та створює готовий XML-файл для завантаження, конвертуючи всі ціни в динари (RSD).

Встановіть ibkr-porez ↗

Якщо ви використовуєте графічний інтерфейс, налаштуйте свої дані (кнопка Config) і для оновлення даних та створення декларацій просто натискайте кнопку Sync.

Якщо ви встановили GUI + CLI, ви можете використовувати як графічний інтерфейс (запускається як ibkr-porez без параметрів), так і командний рядок — див. нижче.

Графічний інтерфейс і командний рядок використовують одну й ту саму БД.

⚠️ Поки запущено графічний інтерфейс, не використовуйте командний рядок, оскільки одночасна робота може призвести до помилок у БД.

Якщо ви хочете все робити через командний рядок, далі потрібно:

⚠️ Імпорт потрібен лише якщо у вас понад рік історії транзакцій в Interactive Brokers. Flex Query дозволяє завантажити дані не більше ніж за останній рік, тому старіші дані потрібно завантажити з повного експорту в CSV-файл ↗.

Швидко створити потрібну декларацію

Якщо ви хочете швидко створити конкретну декларацію.

Завантаження останніх даних (fetch) ↗

Створення звіту (report) ↗

Завантажте створений XML на портал ePorezi (розділ ППДГ-3Р).

ППДГ-3Р

Автоматичне створення декларацій

Якщо ви хочете автоматично отримувати всі потрібні декларації та відстежувати їхній стан (подано, сплачено).

Завантаження останніх даних і створення декларацій (sync) ↗

Керування деклараціями ↗

English | Русский | Українська | Srpski | Српски

Встановлення

Інсталятор (GUI + CLI)

Завантажте готовий інсталятор зі сторінки релізів:

https://github.com/andgineer/ibkr-porez/releases

Інсталятор встановлює графічний застосунок (GUI) та команду ibkr-porez для терміналу (CLI).

macOS

Завантажте останній .pkg файл. Оскільки інсталятор не підписаний сертифікатом Apple, macOS заблокує його під час відкриття.

“IBKR Porez” пошкоджено й не можна відкрити. Слід перемістити його в кошик.

Не переміщуйте в кошик. Замість цього:

  1. Відкрийте Системні налаштування → Конфіденційність і безпека
  2. У нижній частині розділу «Безпека» з’явиться повідомлення про заблокований застосунок — натисніть «Все одно відкрити»
  3. У наступному діалоговому вікні підтвердьте відкриття

Може знадобитися повторити ці кроки двічі:

  • спочатку під час відкриття завантаженого інсталятора (.dmg)
  • а потім під час першого запуску встановленого застосунку з /Applications

Після цього застосунок має запускатися без попереджень.

Windows

Завантажте останній .msi файл. Оскільки інсталятор не підписаний цифровим підписом, Windows може показувати попередження безпеки.

Якщо браузер блокує завантаження (наприклад, у Microsoft Edge):

  1. Відкрийте панель завантажень браузера (Ctrl+J)
  2. Знайдіть заблоковане завантаження .msi
  3. Натисніть «Зберегти»«Показати більше»«Зберегти все одно»

Під час запуску інсталятора Windows може показати Windows захистив ваш ПК:

  1. Натисніть «Докладніше»
  2. Натисніть «Запустити все одно»

Також може з’явитися вікно контролю облікових записів із написом Невідомий видавець. Якщо файл завантажено з офіційної сторінки релізів, натисніть «Так», щоб продовжити.

Після встановлення:

  • IBKR Porez з’явиться в меню Пуск
  • Команда ibkr-porez буде доступна в терміналі (може знадобитися перезапуск терміналу)

Завантажити готовий бінарний файл

Також можна завантажити бінарні файли для вашої платформи зі сторінки релізів:

https://github.com/andgineer/ibkr-porez/releases

Архів містить обидва бінарні файли: ibkr-porez (CLI) та ibkr-porez-gui (GUI). Розпакуйте архів і помістіть файли в директорію, що є в PATH.

Збірка з вихідного коду

Якщо у вас встановлено Rust:

cargo install ibkr-porez

English | Русский | Українська | Srpski | Српски

Використання

Налаштування (config)

ibkr-porez config

Створення або зміна особистих даних і параметрів доступу до IBKR.

Вам буде запропоновано ввести:

  • IBKR Flex Token: Отримання токена ↗
  • IBKR Query ID: Створення Flex Query ↗
  • Personal ID: JMBG / EBS
  • Full Name: Ім’я та прізвище
  • Address: Адреса реєстрації
  • City Code: 3-значний код муніципалітету. Приклад: 223 (Новий Сад). Код можна знайти в довіднику (дивіться колонку “Шифра”). Також код доступний у випадаючому списку на порталі ePorezi.
  • Phone: Телефон
  • Email: Email
  • Data Directory: Абсолютний шлях до папки з файлами даних (transactions.json, declarations.json, rates.json тощо). За замовчуванням: ibkr-porez-data у папці застосунку.
  • Output Folder: Абсолютний шлях до папки для збереження файлів із команд sync, export, export-flex, report. За замовчуванням: папка Downloads вашої системи.

Отримання даних (fetch)

ibkr-porez fetch

Завантажує останні дані з IBKR і синхронізує курси валют із НБС (Національний банк Сербії).

Зберігає їх у локальне сховище.

Імпорт історичних даних (import)

ibkr-porez import /path/to/activity_statement.csv

Завантаження історії транзакцій старше 365 днів, які неможливо отримати через Flex Query (fetch).

Щоб створити файл із транзакціями на порталі Interactive Brokers, дивіться Експорт повної історії ↗

⚠️ Не забудьте після import виконати fetch, щоб застосунок додав максимум деталей принаймні за останній рік до менш детальних даних, завантажених із CSV.

Логіка синхронізації (import + fetch)

Під час завантаження даних із CSV (import) і Flex Query (fetch) система надає пріоритет більш повним даним Flex Query:

  • Дані Flex Query (fetch) є джерелом правди. Вони перезаписують дані CSV за будь-які дати, що збігаються.
  • Якщо запис Flex Query збігається з CSV за змістом (Дата, Тікер, Ціна, Кількість), це вважається оновленням (заміною на офіційний ID).
  • Якщо структура даних відрізняється (наприклад, спліт ордерів у Flex Query проти “склеєного” запису в CSV), старий запис CSV видаляється, а нові записи Flex Query додаються.
  • Повністю ідентичні записи пропускаються.

Синхронізація даних і створення декларацій (sync)

ibkr-porez sync

Робить усе те саме, що й fetch:

  • Завантажує останні транзакції з IBKR через Flex Query
  • Синхронізує курси валют із НБС

Після цього створює всі необхідні декларації за останні 45 днів (якщо вони ще не були створені).

Далі ви можете Керувати створеними деклараціями.

💡 Якщо ви запустили sync уперше і вона створила декларації, які ви вже подали до початку використання застосунку, ви можете швидко позначити їх усі як сплачені й прибрати з виводу list:

ibkr-porez list --status submitted -1 | ibkr-porez pay

Перегляд статистики (stat)

ibkr-porez stat --year 2025
ibkr-porez stat --ticker AAPL
ibkr-porez stat --month 2025-01

Показує:

  • Отримані дивіденди (у RSD)
  • Кількість продажів (оподатковуваних подій)
  • Оцінку реалізованого P/L (Капітальний дохід) (у RSD)
  • Детальну розбивку за тікерами або місяцями (під час використання фільтрів)

Генерація податкового звіту (report)

ibkr-porez report

Якщо не вказати тип звіту та період, за замовчуванням генерується ППДГ-3Р за останнє повне півріччя.

  • Створить ppdg3r_XXXX_HY.xml в Output Folder
  • Імпортуйте цей файл на портал Податкової адміністрації Сербії (ePorezi)
  • Вручну завантажте в пункт 8 файл із Документ-підтвердження

Як вибрати інший тип декларації або період часу, дивіться в документації:

ibkr-porez report --help

Керування деклараціями

Після створення декларацій через команду sync ви можете переглядати їх, змінювати статус і експортувати для завантаження на податковий портал.

Список декларацій (list)

Показує список усіх декларацій із можливістю фільтрації за статусом.

# Показати активні декларації (за замовчуванням):
# draft + submitted + pending
ibkr-porez list

# Показати всі декларації
ibkr-porez list --all

# Фільтр за статусом
ibkr-porez list --status draft
ibkr-porez list --status submitted
ibkr-porez list --status pending
ibkr-porez list --status finalized

# Лише ID декларацій (для використання в пайпах)
ibkr-porez list --ids-only
ibkr-porez list --status draft -1

Приклад використання в linux-стилі:

# Відправити всі чернетки
ibkr-porez list --status draft -1 | ibkr-porez submit

Перегляд деталей декларації (show)

Показує детальну інформацію про конкретну декларацію.

ibkr-porez show <declaration_id>

Відображає:

  • Тип декларації (PPDG-3R або PP OPO)
  • Період декларації
  • Статус (чернетка, подана, в очікуванні, завершена)
  • Деталі транзакцій і розрахунків
  • Прикріплені файли

Подання декларації (submit)

ibkr-porez submit <id> [<id> ...]

Позначає декларацію як подану (імпортовану на податковий портал).

Поведінка залежить від типу декларації:

  • PPDG-3R після submit переходить у статус pending (очікування рішення податкової щодо суми податку).
  • PP OPO після submit:
    • переходить у submitted, якщо є податок до сплати;
    • одразу переходить у finalized, якщо податок до сплати 0.

Оплата декларації (pay)

ibkr-porez pay <id> [<id> ...]
ibkr-porez pay <id> --tax 1234.56

Позначає декларацію як завершену (finalized) і зберігає дату оплати.

Опція --tax дозволяє одразу зафіксувати суму податку під час оплати, без окремого кроку assess.

Після цього вона зникне зі списку, який показує list (без --all).

Фіксація суми за рішенням податкової (assess)

# Записати офіційну суму податку за рішенням
ibkr-porez assess <declaration_id> --tax-due 1234.56

# Записати суму й одразу позначити як уже сплачену
ibkr-porez assess <declaration_id> --tax-due 1234.56 --paid

Команда потрібна насамперед для PPDG-3R, де суму податку визначає податкова після подання декларації.

Що робить команда:

  • записує офіційну суму податку в метадані декларації;
  • з --paid одразу переводить декларацію в finalized;
  • без --paid:
    • якщо сума більша за нуль, залишає декларацію активною (submitted) для подальшої оплати;
    • якщо сума дорівнює нулю, переводить декларацію в finalized.

Експорт декларації (export)

ibkr-porez export <declaration_id>
ibkr-porez export <declaration_id> -o /path/to/output

Копіює XML і всі прикріплені файли (attach) в Output Folder або в каталог, вказаний у параметрах.

Відкат статусу декларації (revert)

# Відкотити до чернетки (за замовчуванням)
ibkr-porez revert <id> [<id> ...]

# Відкотити до поданої
ibkr-porez revert <id> [<id> ...] --to submitted

Відкочує статус декларації.

Прикріплення файлу до декларації (attach)

# Прикріпити файл
ibkr-porez attach <declaration_id> /path/to/file.pdf

# Видалити прикріплений файл
ibkr-porez attach <declaration_id> <file_id> --delete
ibkr-porez attach <declaration_id> --delete --file-id <file_id>

Прикріплює файл до декларації або видаляє прикріплений файл зі сховища декларацій.

Для збереження у сховищі декларацій використовується лише ім’я файлу (шлях відкидається), тому імена мають бути унікальними - інакше файл із тим самим ім’ям перезапише раніше завантажений файл з таким самим ім’ям навіть з іншого шляху.

💡 Прикріплені файли копіюються разом з XML декларації під час експорту (export)

Експорт Flex Query (export-flex)

ibkr-porez export-flex 2025-01-15
ibkr-porez export-flex 2025-01-15 -o /path/to/output.xml
ibkr-porez export-flex 2025-01-15 -o -  # Вивід у stdout (для пайпів)

Експортує XML-файл Flex Query, отриманий під час fetch або sync, на вказану дату.

Приклад використання в linux-стилі:

ibkr-porez export-flex 2025-01-15 | ibkr-porez import

English | Русский | Українська | Srpski | Српски

Interactive Brokers (IBKR)

Flex Web Service

  1. Performance & Reports > Flex Queries.
  2. Натисніть на значок Налаштувань (шестерня) у “Flex Web Service Configuration”.
  3. Увімкніть Flex Web Service.
  4. Згенеруйте Token (Generate Token).
    • Важливо: Скопіюйте цей токен одразу. Ви не зможете побачити його повністю ще раз.
    • Встановіть термін дії (рекомендується максимум - 1 рік).

Flex Query

  1. Performance & Reports > Flex Queries.
  2. Натисніть +, щоб створити новий Activity Flex Query.
  3. Name: наприклад, ibkr-porez-data.
  4. Delivery Configuration (внизу сторінки):
    • Period: Виберіть Last 365 Calendar Days.
  5. Format: XML.

Розділи для увімкнення (Sections):

Увімкніть такі розділи і позначте Select All (Вибрати все) для колонок.

Якщо ви нікому не довіряєте 8-) замість Select All виберіть щонайменше поля, перелічені в Обов'язкові колонки.

Trades - Угоди

Знаходиться у розділі Trade Confirmations або Activity.

Обов'язкові колонки
  • Symbol
  • Description
  • Currency
  • Quantity
  • TradePrice
  • TradeDate
  • TradeID
  • OrigTradeDate
  • OrigTradePrice
  • AssetClass
  • Buy/Sell

Cash Transactions - Грошові транзакції

Обов'язкові колонки
  • Type
  • Amount
  • Currency
  • DateTime / Date
  • Symbol
  • Description
  • TransactionID

Збережіть і отримайте Query ID

Запишіть Query ID (число, яке зазвичай відображається поруч із назвою запиту у списку).

Вам знадобляться Token і Query ID для налаштування ibkr-porez.

Документ-підтвердження

Для Пункту 8 (Докази уз пријаву) податкової декларації ППДГ-3Р вам знадобиться PDF-звіт від брокера. Його потрібно прикріпити вручну на порталі ePorezi після імпорту XML.

Як завантажити відповідний звіт:

  1. У IBKR перейдіть до Performance & Reports > Statements > Activity Statement.
  2. Period: Виберіть Custom Date Range.
  3. Вкажіть дати, що відповідають вашому податковому періоду (наприклад, 01-01-2024 до 30-06-2024 для першого півріччя).
  4. Натисніть Download PDF.
  5. На порталі ePorezi, у розділі 8. Докази уз пријаву завантажте цей файл.

Експорт повної історії (для команди import)

Якщо вам потрібно завантажити історію транзакцій за період понад 1 рік (що недоступно через Flex Web Service), експортуйте дані в CSV:

  1. У IBKR перейдіть до Performance & Reports > Statements > Activity Statement.
  2. Period: Виберіть Custom Date Range і вкажіть увесь період від моменту відкриття рахунку.
  3. Натисніть Download CSV.
  4. Цей файл можна використати з командою import ↗.