Перейти до основного вмісту

Запис податків у Beancount (практичний підхід)

· 7 хвилин читання
Mike Thrift
Mike Thrift
Marketing Manager

Податки часто здаються особливим, складним звіром у світі особистих фінансів. Але що, якщо їх не так? Що, якщо розглядати їх так само, як будь‑який інший потік грошей у вашому реєстрі? Хороша новина: можна. Розглядаючи податки як прості переміщення вартості, ваш реєстр Beancount залишатиметься чистим, легким для запитів і, найголовніше, зрозумілим.

Нижче наведено практичний, беззаперечний шаблон, який ви можете вставити у файл Beancount для особистих фінансів або малого бізнесу. Це проста система для обробки зарплат, сплати податків і навіть тих нав’язливих повернень, що переходять у новий рік. Ми розглянемо необхідні рахунки, пройдемо реальні приклади та покажемо точні запити, які треба виконати, щоб отримати потрібні відповіді.

2025-08-25-recording-taxes-in-beancount


Основні принципи

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

  • Відокремлюйте «що це» від «коли рухається готівка». 🗓️
    Це найважливіша концепція. Податкова витрата належить до року, у якому ви отримали дохід (наприклад, 2024), навіть якщо ви сплачуєте рахунок IRS у квітні 2025. Якщо не розділити час витрати та час готівкової оплати, ваші річні звіти стануть безладними та вводитимуть в оману.

  • Тримайте ієрархію рахунків простою і нудною. 📁
    Давайте рахункам зрозумілі назви, орієнтовані на тип податку (наприклад, IncomeTax, SocialSecurity). Це робить ваші запити надзвичайно простими. Не захаращуйте назви рахунків іменами постачальників або номерами форм, як «W‑2» чи «1099»; для цих деталей використовуйте метадані та теги.

  • Приймайте нарахування для коригувань в кінці року. ⚖️
    Навіть у особистому реєстрі використання простого запису нарахування в кінці року — найчистіший спосіб зробити ваші звіти точними. Це означає визнання витрати або повернення у правильному році, навіть якщо гроші перемістяться лише наступного року. Це один невеликий крок, який заощаджує вас від ментальних акробатик пізніше.

  • Пишіть для свого майбутнього «я». 🧠
    Ваша мета — ясність. Додавайте додаткові деталі, такі як податковий рік, до назви рахунку лише тоді, коли це дійсно спрощує ваші запити. Уникайте створення нових наборів рахунків кожного року (Expenses:Taxes:2024:Federal, Expenses:Taxes:2025:Federal тощо), якщо немає вагомої причини. Плоска структура часто легша у керуванні.


Мінімальний скелет рахунків

Ось базовий набір рахунків, щоб розпочати. Ця структура орієнтована на США, але ви легко адаптуєте назви під податкову систему вашої країни. Просто додайте ці директиви open у ваш файл Beancount.

; --- US Federal Income & Payroll Taxes ---
; For money withheld from your paycheck
2024-01-01 open Expenses:Taxes:Federal:IncomeTax:Withheld USD
; For estimated payments or tax-day bills you pay directly
2024-01-01 open Expenses:Taxes:Federal:IncomeTax:Payments USD
; For tax refunds you receive
2024-01-01 open Expenses:Taxes:Federal:IncomeTax:Refunds USD

; Your FICA contributions
2024-01-01 open Expenses:Taxes:Federal:SocialSecurity USD
2024-01-01 open Expenses:Taxes:Federal:Medicare USD

; --- Other Common Taxes ---
; For sales/use taxes you pay on purchases
2024-01-01 open Expenses:Taxes:Sales USD

; --- Accounts for Year-End Adjustments (Optional but Recommended!) ---
; A temporary holding account for taxes you owe but haven't paid yet
2024-01-01 open Liabilities:AccruedTaxes:Federal:Income USD
; A temporary holding account for a refund you're owed but haven't received
2024-01-01 open Assets:Tax:Receivable USD

Ця настройка розділяє утримані податки від прямих платежів і повернень, що дозволяє легко бачити, куди пішли ваші гроші. Рахунки Liabilities і Assets — наш секретний інструмент для точного звітування в кінці року.


Приклад 1: Зарплатня

Занотуємо типову зарплатню, коли податки утримуються автоматично. Ключовим є спочатку записати валовий дохід, а потім показати, як він розподілився між податками та готівкою, що фактично потрапила на ваш рахунок.

2025-07-15 * "Employer Inc." "Salary for first half of July"
Income:Work:Salary -6,000.00 USD
Expenses:Taxes:Federal:IncomeTax:Withheld 1,200.00 USD
Expenses:Taxes:Federal:SocialSecurity 372.00 USD
Expenses:Taxes:Federal:Medicare 87.00 USD
Assets:Cash:Checking 4,341.00 USD

Ця одна транзакція розповідає всю історію:

  • Ви заробили $6 000 валового доходу.
  • $1 200 з них було передано IRS як федеральний податок на доходи.
  • 372пішлонасоціальнестрахуванняі372 пішло на соціальн�е страхування і 87 — на Medicare.
  • Залишок $4 341 — це те, що ви отримали «на руки».

Порада: Ви можете додати метадані зі свого розрахункового листа (наприклад, pay_period_end: "2025-07-15") до транзакції для простого аудиту.


Приклад 2: Подання декларації (проблема переходу між роками)

Ось сценарій, який часто збиває людей з пантелику: квітень 2025 року, і ви подаєте податки за 2024. Після всіх утримань ви дізнаєтеся, що ще винні $3 000.

Як це записати? Ви хочете, щоб витрата відносилась до 2024 року, а готівковий платіж відбувся у 2025. Ось два відмінних способи.

Варіант A: Ручне двокрокове нарахування

Цей метод — чистий Beancount, без плагінів. Це зрозумілий двокроковий процес.

Крок 1: Визнати витрату в кінці податкового року.
Останнього дня 2024 року створюємо запис «корекції». Готівка ще не рухається; ми лише визнаємо витрату і паркуємо її у тимчасовому рахунку зобов’язань.

2024-12-31 * "Federal income tax true-up for 2024"
Expenses:Taxes:Federal:IncomeTax:Payments 3,000.00 USD
Liabilities:AccruedTaxes:Federal:Income -3,000.00 USD

Тепер ваш звіт за 2024 рік правильно відображає цю витрату у $3 000.

Крок 2: Записати готівковий платіж, коли він відбудеться.
У квітні 2025 року, коли ви фактично переказуєте гроші до IRS, сплачуємо зобов’язання.

2025-04-15 * "IRS" "Payment for 2024 tax return"
Liabilities:AccruedTaxes:Federal:Income 3,000.00 USD
Assets:Cash:Checking -3,000.00 USD

Ваші звіти за 2024 рік залишаються правильними, а грошовий потік за 2025 — точним. Ідеально! Та сама схема працює у зворотному напрямку для повернень — використовуйте Assets:Tax:Receivable замість рахунку зобов’язань.

Варіант B: Автоматизація за допомогою плагіна

Якщо ви хочете об’єднати платіж в одну транзакцію, чудовий плагін спільноти beancount_reds_plugins.effective_date допоможе. Він дозволяє задати іншу «дату ефективності» для окремого рядка.

Спочатку увімкніть плагін у головному файлі Beancount: plugin "beancount_reds_plugins.effective_date"

Тепер можна написати одну транзакцію. Плагін автоматично розділить її за лаштунками, щоб ваші звіти були точними.

; One entry; the plugin handles the rest
2025-04-15 * "IRS" "Payment for 2024 tax return"
Assets:Cash:Checking -3,000.00 USD
Expenses:Taxes:Federal:IncomeTax:Payments 3,000.00 USD
effective_date: 2024-12-31

Тут готівковий рядок записується 15 квітня 2025 року, а витратний — ретроспективно застосовується до 31 грудня 2024 року. Результат такий же, як у Варіанті A, лише інший робочий процес.


А що з податком з продажу?

Для більшості особистих реєстрів податок з продажу простий. Якщо ви його не відшкодовуєте, просто розділіть його як окрему витрату під час покупки.

2025-07-19 * "Local Grocery Store"
Expenses:Groceries 12.32 USD
Expenses:Taxes:Sales 1.28 USD
Assets:Cash:Checking -13.60 USD

Тепер ви легко відстежуєте, скільки витрачаєте на податок з продажу протягом року. Якщо ви керуєте бізнесом, що працює з ПДВ, використовуйте більш формальну схему з рахунками зобов’язань і дебіторської заборгованості, але принцип залишається тим же.


Запити, які ви дійсно будете виконувати

Уся ідея цієї структури — полегшити отримання відповідей. Ось кілька BQL‑запитів, які покажуть вашу податкову картину.

1. Який був мій загальний федеральний податок на доходи за 2024 рік?

SELECT cost(sum(position))
WHERE account "Expenses:Taxes:Federal:IncomeTax"
AND date >= 2024-01-01 AND date < 2025-01-01;

2. Як ця сума розподіляється між утриманнями, платежами та поверненнями?

SELECT account, cost(sum(position))
WHERE account "Expenses:Taxes:Federal:IncomeTax"
AND date >= 2024-01-01 AND date < 2025-01-01
GROUP BY account
ORDER BY account;

3. Чи залишилися у мене незакриті податкові зобов’язання або дебіторські суми? (Корисно для перевірки вашої роботи!)

SELECT account, units(sum(position))
WHERE account "Liabilities:AccruedTaxes" OR account "Assets:Tax"
GROUP BY account
ORDER BY account;

Якщо цей запит повертає ненульові залишки, це означає, що у вас є нарахування, які ще не погашені.


Швидкі FAQ

  • Чи потрібні мені окремі рахунки за кожен рік, наприклад Expenses:Taxes:2024?
    Швидше за все, ні. Метод нарахування (або плагін) підтримує плоску структуру, яка залишається чистою і читабельною. Створюйте окремі рахунки за роками лише тоді, коли це дійсно спрощує ваші запити.

  • Чи може Beancount сам розраховувати мої податки?
    Не безпосередньо, але він може підготувати дані. Досвідчені користувачі пишуть скрипти, які передають результати BQL у програми для розрахунку податків — це зручно для оцінки зобов’язань протягом року.

  • Чи це податкова консультація?
    Ні. Це лише шаблон бухгалтерського обліку для організації даних. Сам облік правильний, проте щодо конкретних порад завжди консультуйтеся з податковим фахівцем.


Ваш чек‑лист «вставити і працювати»

Готові розпочати?

  1. Додайте скелет рахунків у ваш файл Beancount (і адаптуйте назви під вашу країну).
  2. Записуйте зарплатні, починаючи з валового доходу і розподіляючи податки.
  3. В кінці року нарахуйте корекції для платежів або повернень, використовуючи рахунок зобов’язань/активу (або плагін effective_date).
  4. Відстежуйте повернення як дебіторську заборгованість і погашайте їх, коли гроші надходять.
  5. Запускайте наведені вище BQL‑запити, щоб перевірити підсумки перед подачею декларації.

Тримайте все простим, послідовним, і ваш податковий сезон нарешті стане лише ще однією частиною вашої фінансової історії — а не загадкою, яку треба розгадувати.