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

90 записів з тегом "Accounting"

Переглянути всі теги

Коригувальні проводки в Beancount: Ваше налаштування на кінець місяця

· 5 хв. читання
Mike Thrift
Mike Thrift
Marketing Manager

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

У текстовому журналі Beancount ці важливі записи є прозорими, контрольованими за версіями та легко перевіряються, перетворюючи нудне завдання на чіткий та повторюваний процес.

2022-01-25-adjusting-entries-in-beancount-your-month-end-tune-up


Чому коригувальні проводки важливі

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

  • Точність нарахувань: Коригувальні проводки є рушієм методу нарахування. Вони переміщують доходи та витрати в той період, коли вони були фактично зароблені або понесені, незалежно від того, коли відбувся рух грошових коштів. Це відповідає основним принципам визнання доходів та зіставлення, які є основою сучасного бухгалтерського обліку (AccountingCoach.com).

  • Надійні КПІ: Ключові показники ефективності є настільки ж добрими, як і дані, на яких вони базуються. Такі показники, як валова маржа, чистий прибуток та прогнози руху грошових коштів, відображають правду лише після того, як відстрочки, нарахування та оцінки будуть належним чином проведені (Corporate Finance Institute).

  • Чистий аудит: Чіткі коригування на кінець місяця створюють чіткий запис вашої фінансової логіки. Це допомагає аудиторам (і вам у майбутньому) легко відстежити, що змінилося і чому, створюючи впевненість у ваших цифрах (Accountingverse).


Шість поширених категорій (зі фрагментами Beancount)

Ось шість найпоширеніших типів коригувальних проводок з прикладами того, як їх записувати у вашому журналі Beancount. Зверніть увагу на використання метаданих, таких як adj:"accrual", щоб ці записи було легко знайти та проаналізувати пізніше.

1. Нарахований дохід

Це стосується доходу, який ви заробили, але ще не виставили рахунок або не отримали оплату.

2025-07-31 * "Консалтинг—липневі години"
Assets:AccountsReceivable 12000.00 USD
Income:Consulting
; adj:"accrual" period:"Jul-25"

2. Нараховані витрати

Витрати, які ви понесли, але ще не оплатили, наприклад, рахунок за комунальні послуги, який надійде наступного місяця.

2025-07-31 * "Адвокат—липневий гонорар"
Expenses:Legal 2500.00 USD
Liabilities:AccruedPayables
; adj:"accrual"

3. Відстрочений (незароблений) дохід

Це застосовується, коли клієнт платить вам авансом. Ви визнаєте частину цього доходу в міру його отримання з часом.

2025-07-31 * "Річна передплата SaaS (визнання 1/12)"
Liabilities:UnearnedRevenue 833.33 USD
Income:SaaS
; adj:"deferral"

4. Передоплачені (відстрочені) витрати

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

2025-07-31 * "Страхування—1 міс. витрат з передоплати"
Expenses:Insurance 400.00 USD
Assets:PrepaidInsurance
; adj:"deferral"

5. Амортизація

Цей запис розподіляє вартість довгострокового активу (наприклад, комп'ютера або транспортного засобу) протягом терміну його корисного використання.

2025-07-31 * "Амортизація Mac Studio"
Expenses:Depreciation 1250.00 USD
Assets:Computers:AccumDepr
; asset_id:"MAC-03" adj:"estimate"

6. Резерв сумнівних боргів

Оцінка дебіторської заборгованості, яку ви не очікуєте стягнути, яка записується як витрати на безнадійні борги.

2025-07-31 * "Резерв на безнадійні борги (2% від ДЗ)"
Expenses:BadDebt 700.00 USD
Assets:AllowanceForBadDebt
; basis:"A/R" rate:0.02 adj:"estimate"

Повторюваний робочий процес

Щоб забезпечити ефективність та безпомилковість закриття місяця, дотримуйтесь послідовного робочого процесу.

  • Використовуйте окремий файл. Зберігайте всі коригування за період в одному місці, наприклад, adjustments-2025-07.bean. У вашому основному файлі журналу використовуйте директиву include, щоб імпортувати його останнім. Це гарантує, що коригування застосовуються безпосередньо перед створенням остаточних звітів.

  • Стандартизуйте свої метадані. Завжди використовуйте послідовні ключі та значення метаданих, такі як adj:"accrual|deferral|estimate" та period:"Jul-25". Це спрощує запит та перегляд певних типів коригувань.

  • Виконайте попередню перевірку. Перед тим, як зафіксувати зміни в Git, запустіть bean-check у вашому файлі коригувань, щоб виявити будь-які помилки або незбалансовані проводки.

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

    bean-query main.bean "SELECT account, SUM(number) WHERE meta('adj') AND meta('period') = 'Jul-25' GROUP BY account"

Поради щодо швидкого усунення несправностей 🤔

  • Чи зростає ваш баланс Liabilities:UnearnedRevenue? Перегляньте етапи вашого контракту. Можливо, ви визнаєте дохід занадто повільно порівняно з роботою, яку ви виконуєте.

  • Чи є ваш баланс Assets:PrepaidInsurance від’ємним? Ви, ймовірно, списуєте його швидше, ніж дозволяє графік активу. Перевірте свій графік амортизації.

  • Чи погіршується ваш період оборотності дебіторської заборгованості (DSO) після нарахувань? Ваш нарахований дохід може маскувати основні проблеми зі стягненням. Поєднайте цей КПІ зі звітом про старіння дебіторської заборгованості, щоб виявити клієнтів, які прострочують платежі, перш ніж це стане проблемою з рухом грошових коштів.


Заключні думки

Коригувальні проводки можуть здаватися нудними, але їх цінність стає очевидною, коли ви порівнюєте свої звіти про прибутки та збитки "до" та "після" — різниця часто є суттєвою. З Beancount ці коригування стають малими, доступними для пошуку виправленнями, які ви можете автоматизувати та переглядати, як код.

Сформуйте звичку до закриття місяця, і ваші цифри будуть такими ж точними, як і ваша інженерія.

Щасливого балансування!

Революціонізація управління особистими фінансами з Beancount.io

· 4 хв. читання
Mike Thrift
Mike Thrift
Marketing Manager

Традиційно, користувачі Beancount (бухгалтери, що працюють з Beancount) використовують інструменти командного рядка або самостійно розміщують сервери у приватних мережах, де їм доводиться працювати через комп'ютер або універсальний текстовий редактор на мобільному пристрої. Beancount.io зменшує ці труднощі, пропонуючи мобільні додатки з відкритим вихідним кодом для Android та iOS, а також захищене хмарне сховище, завдяки чому ваш реєстр тепер доступний за кілька дотиків від вашого відбитка пальця.

Beancount — це комп'ютерна мова, яка дозволяє вести бухгалтерський облік за принципом подвійного запису у текстових файлах. Щойно ви визначите фінансові транзакції у файлі, вона згенерує різноманітні звіти. Мартін Блейс, розробник цієї мови, стверджує, що ведення бухгалтерії через командний рядок має багато переваг — це швидко, портативно, відкрито та налаштовувано.

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

Миттєвий доступ до вашого хмарного реєстру Beancount у будь-який час, будь-де

Не кожен є ентузіастом командного рядка, і саме тому ми створили Beancount.io — менеджер особистих фінансів для кожного. Ось як це працює:

Для інтенсивної роботи користувачі Beancount все ще можуть використовувати свої комп'ютери для редагування або перегляду реєстру за допомогою браузерів, відвідуючи https://beancount.io або синхронізуючись з Dropbox. Це зберігає гнучкість інструментів командного рядка, не втрачаючи при цьому крос-пристроєвого доступу хмарного рішення.

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

Майк Тріфт, інженер з бекенду, що працює над цим продуктом, говорить:

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

Чжі Лі, інженер-програміст з Facebook, розповідає нам:

Я переніс усі свої файли Beancount на Beancount.io, і тепер це ідеально працює для мого щоденного використання. Я заплатив за Pro-функції, такі як автоматичне резервне копіювання даних, але відчуваю, що ви могли б зробити ще більше для покращення сервісу.

Ви можете зареєструватися зараз на https://beancount.io/sign-up/ або завантажити додаток для iOS чи додаток для Android. Ми спростили реєстрацію, щоб зібрати мінімально можливу інформацію від вас для запуску сервісу. Потім ви отримаєте попередньо налаштований порожній реєстр, готовий для негайного додавання записів.

Часті запитання

Чи буде beancount.io продавати мої дані реєстру третім сторонам?

  • Ні. Ми зобов'язуємося зберігати ваші дані захищеними та приватними, і ми ніколи не будемо продавати ваші дані реєстру.

Чи захищені мої дані?

  • Так. Ми захищаємо вашу електронну пошту та реєстр за допомогою AES256, ваш пароль — за допомогою BCrypt, а ваші мережеві запити — за допомогою SSL.

Чи зашифровані мої дані реєстру наскрізним шифруванням?

  • Ні. Через технічні обмеження нам все ще доводиться розшифровувати ваші дані в пам'яті під час індексації файлу реєстру на виробничих серверах. Тому ми обмежуємо прямий доступ для будь-кого з членів нашої команди. На жаль, ми не можемо реалізувати це в Intel SGX або будь-якому безпечному сховищі через високі витрати.

Чи є це надійним сервісом, якому я можу довіряти протягом наступних кількох років?

  • Так. Ми вперше запустили Beancount.io 4 липня 2019 року, і вже більше двох років ми безпечно та надійно експлуатуємо цей сервіс. Тому у нас немає причин не продовжувати його роботу в майбутньому.

Чи можу я запросити нові функції та спонсорувати проєкт?

  • Так. Будь ласка, не соромтеся звертатися до нас за адресою https://t.me/beancount для будь-яких відгуків та підтримайте нас, ставши Pro-користувачем за адресою https://beancount.io/pricing.

Посібник з міграції з QuickBooks до Beancount

· 28 хв. читання
Mike Thrift
Mike Thrift
Marketing Manager

Етап 1: Експорт даних із QuickBooks

Міграція даних за п'ять років починається з вивантаження всіх записів із QuickBooks у придатному для використання форматі. QuickBooks Desktop та QuickBooks Online мають різні опції експорту:

2021-12-01-from-quickbooks-to-plain-text-a-migration-playbook

1.1 QuickBooks Desktop – Опції експорту

IIF (Intuit Interchange Format): QuickBooks Desktop може експортувати списки (як-от план рахунків, клієнти, постачальники) у текстові файли .IIF. У QuickBooks Desktop перейдіть до Файл → Утиліти → Експорт → Списки до IIF, а потім виберіть потрібні списки (наприклад, План рахунків, Клієнти, Постачальники). Це створить текстовий файл, що містить назви рахунків, їхні типи та дані списків. IIF — це пропрієтарний, але текстовий формат, який відносно легко аналізувати. Використовуйте його для отримання вашого Плану рахунків та списків контактів для подальшого використання в Beancount.

Головна книга/Журнал через CSV: Для експорту транзакцій QuickBooks Desktop не надає повного експорту в один клік, але можна використовувати звіти. Рекомендований метод — експортувати Головний журнал (усі транзакції) за потрібний період. У QuickBooks Desktop відкрийте Звіти → Бухгалтер та податки → Журнал, встановіть Дати від найранішої транзакції до сьогодні, та натисніть Експорт → Excel. Збережіть результат як CSV, видаливши заголовки/нижні колонтитули звіту та порожні стовпці. Переконайтеся, що числові дані чисті: вони мають містити центи (наприклад, 3.00, а не 3), не мати зайвих лапок, символів валют або подвійних мінусів у CSV. CSV-файл повинен мати стовпці, такі як Дата, № транзакції, Назва, Рахунок, Примітка, Дебет, Кредит, Залишок (або єдиний стовпець "Сума" залежно від формату звіту).

Порада: QuickBooks Desktop 2015+ також може експортувати транзакції через діалогове вікно Знайти. Використовуйте Редагувати → Знайти → Розширений пошук, встановіть діапазон дат на п'ять років, а потім експортуйте результати у CSV. Увага: Деякі версії обмежують експорт 32,768 рядками. Якщо у вас дуже великий обсяг даних, експортуйте їх по роках (або меншими частинами), щоб уникнути обрізання, а потім об'єднайте їх. Переконайтеся, що діапазони дат не перетинаються, щоб уникнути дублікатів.

Інші формати (QBO/QFX/QIF): QuickBooks Desktop може імпортувати банківські транзакції через файли .QBO (Web Connect) або .QFX/.OFX, але для експорту з QuickBooks вони зазвичай не використовуються. Якщо ваша мета — витягти лише банківські транзакції, ви, можливо, вже маєте їх у форматі QBO/OFX від вашого банку. Однак для повного експорту книги дотримуйтесь IIF та CSV. QuickBooks Desktop не може безпосередньо експортувати у QIF (Quicken Interchange Format) без сторонніх інструментів. Якщо ви все ж знайдете спосіб отримати QIF, зауважте, що деякі інструменти для ведення обліку (старі версії Ledger 2.x) могли читати QIF, але для нашого процесу краще працювати з CSV.

1.2 QuickBooks Online – Опції експорту

Вбудований експорт в Excel/CSV: QuickBooks Online (QBO) надає інструмент Експортувати дані. Перейдіть до Налаштування ⚙ → Інструменти → Експортувати дані. У діалоговому вікні експорту на вкладці Звіти виберіть дані (наприклад, Головна книга або Список транзакцій), а на вкладці Списки — списки (план рахунків тощо), оберіть Усі дати та експортуйте в Excel. QuickBooks Online завантажить ZIP-архів, що містить кілька файлів Excel для вибраних звітів та списків (наприклад, Звіт про прибутки та збитки, Балансовий звіт, Головна книга, Клієнти, Постачальники, План рахунків тощо). Потім ви можете конвертувати ці файли Excel у CSV для обробки.

Звіт про деталізацію транзакцій: Якщо стандартний експорт QBO не містить єдиного файлу Головної книги, ви можете вручну створити детальний звіт:

  1. Перейдіть до Звіти та знайдіть Деталізація транзакцій за рахунком (або Головна книга в деяких версіях QBO).
  2. Встановіть Період звіту на повний п'ятирічний діапазон.
  3. В опціях звіту встановіть Групувати за = Немає (щоб перелічити окремі транзакції без проміжних підсумків).
  4. Налаштуйте стовпці, щоб включити принаймні: Дата, Тип транзакції, Номер, Назва (Одержувач/Клієнт), Примітка/Опис, Рахунок, Дебет, Кредит (або єдиний стовпець Сума), та Залишок. Включіть будь-який клас або місцезнаходження, якщо вони використовуються.
  5. Запустіть звіт, а потім Експортуйте в Excel.

Це дасть детальну книгу всіх транзакцій. Збережіть її як CSV. Кожен рядок представлятиме одне проведення (запис) транзакції. Пізніше вам потрібно буде згрупувати рядки за транзакціями для конвертації.

План рахунків та інші списки: QuickBooks Online може експортувати план рахунків через Бухгалтерія → План рахунків → Пакетні дії → Експортувати в Excel. Зробіть це, щоб отримати назви та типи рахунків. Так само експортуйте Клієнтів, Постачальників тощо, якщо хочете перенести імена для метаданих.

API QuickBooks Online (Необов'язково): Для програмного підходу Intuit надає REST API для даних QBO. Досвідчені користувачі можуть створити додаток QuickBooks Online (потрібен акаунт розробника) та використовувати API для отримання даних у форматі JSON. Наприклад, ви можете запитати ендпоінт Account для плану рахунків та ендпоінти звітів JournalEntry або GeneralLedger для транзакцій. Існують Python SDK, як-от python-quickbooks, що є обгортками для API. Однак використання API включає OAuth-аутентифікацію і є надмірним для одноразової міграції, якщо ви не віддаєте перевагу автоматизації. У більшості випадків ручний експорт у CSV/Excel є простішим та менш схильним до помилок.


Етап 2: Трансформація та очищення даних

Коли ви маєте дані з QuickBooks у форматі CSV (та/або IIF), наступним кроком є їх конвертація у текстовий формат книги Beancount. Це включає аналіз експортованих файлів, зіставлення рахунків QuickBooks із планом рахунків Beancount та форматування транзакцій у синтаксисі Beancount.

2.1 Аналіз експортованих даних QuickBooks за допомогою Python

Використання Python забезпечить точність та відтворюваність трансформації. Ми окреслимо скрипти для двох ключових завдань: імпорту плану рахунків та конвертації транзакцій.

Імпорт та зіставлення рахунків: Важливо налаштувати ваші рахунки в Beancount перед додаванням транзакцій. Рахунки QuickBooks мають типи (Банк, Дебіторська заборгованість, Витрати тощо), які ми зіставимо з ієрархією Beancount (Активи, Зобов'язання, Доходи, Витрати тощо). Наприклад, ми можемо використовувати таке зіставлення:

# Відповідність типу рахунку QuickBooks до кореневої категорії Beancount
AccountTypeMap = {
'BANK': 'Assets',
'CCARD': 'Liabilities',
'AR': 'Assets', # Дебіторська заборгованість як актив
'AP': 'Liabilities', # Кредиторська заборгованість як зобов'язання
'FIXASSET': 'Assets',
'OASSET': 'Assets', # Інший актив
'OCASSET': 'Assets', # Інший поточний актив
'LTLIAB': 'Liabilities', # Довгострокове зобов'язання
'OCLIAB': 'Liabilities', # Інше поточне зобов'язання
'EQUITY': 'Equity',
'INC': 'Income',
'EXP': 'Expenses',
'EXINC': 'Income', # Інший дохід
'EXEXP': 'Expenses', # Інша витрата
}

Використовуючи експорт IIF з QuickBooks Desktop або CSV-файл списку рахунків з QBO, ми отримуємо назву та тип кожного рахунку. Потім:

  • Створюємо назви рахунків Beancount: QuickBooks іноді використовує двокрапки (:) у назвах рахунків для позначення субрахунків (наприклад, “Поточні Активи:Розрахунковий”). Beancount використовує ту саму нотацію для ієрархії. Часто можна використовувати назву безпосередньо. Якщо назви рахунків QuickBooks не починаються з категорії, додайте зіставлену категорію. Наприклад, рахунок QuickBooks типу BANK з назвою "Розрахунковий" стане Assets:Розрахунковий у Beancount. Рахунок EXP (витрати) "Харчування" стане Expenses:Харчування і т.д.

  • Забезпечуємо валідність назв: Видаліть або замініть будь-які символи, які можуть заплутати Beancount. QuickBooks дозволяє символи на кшталт & або / у назвах. Розумно видалити або замінити спеціальні символи (наприклад, замінити & на and, видалити слеші або пробіли). Також переконайтеся, що всі назви рахунків унікальні після трансформації — QuickBooks міг дозволяти однакові назви субрахунків під різними батьківськими, що нормально, але в Beancount повна назва (з батьківськими) має бути унікальною. За потреби перейменуйте або додайте кваліфікатор для їх розрізнення.

  • Генеруємо відкриття рахунків: У Beancount кожен використаний рахунок повинен бути відкритий за допомогою директиви open. Ви можете вибрати дату перед вашою першою транзакцією (наприклад, якщо мігруєте дані за 2019–2023 роки, використовуйте 2018-12-31 або ще ранішу дату для всіх відкриттів). Скрипт запише рядки на кшталт: 2018-12-31 open Assets:Checking USD 2018-12-31 open Expenses:Meals USD для кожного рахунку (припускаючи, що USD є основною валютою). Використовуйте відповідну валюту для кожного рахунку (див. нотатки про мультивалютність нижче).

Конвертація транзакцій: Основна складність полягає в конвертації експортованих транзакцій QuickBooks (CSV) у записи Beancount. Кожна транзакція QuickBooks (рахунок-фактура, рахунок, чек, журнальний запис тощо) може мати кілька проведень (рядків), які необхідно зібрати в одну транзакцію Beancount.

Ми використаємо CSV-рідер Python для ітерації по експортованих рядках та накопичення проведень:

import csv
from collections import defaultdict

# Читаємо всі рядки з CSV журналу QuickBooks
rows = []
with open('quickbooks_exported_journal.csv', 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for line in reader:
rows.append(line)

# Групуємо рядки за транзакцією (припускаючи, що '№ транзакції' ідентифікує транзакції)
transactions = defaultdict(list)
for line in rows:
trans_id = line.get('Trans #') or line.get('Transaction ID') or line.get('Num')
transactions[trans_id].append(line)

Тепер transactions — це словник, де кожен ключ — це ID/номер транзакції, а значення — список проведень для цієї транзакції. Далі ми конвертуємо кожну групу в Beancount:

def format_date(qb_date):
# Дати в QuickBooks можуть бути у форматі "12/31/2019"
m, d, y = qb_date.split('/')
return f"{y}-{int(m):02d}-{int(d):02d}"

output_lines = []
for trans_id, splits in transactions.items():
# Сортуємо проведення за порядком, якщо потрібно (зазвичай вони йдуть по порядку)
splits = sorted(splits, key=lambda x: x.get('Line') or 0)
first = splits[0]
date = format_date(first['Date'])
payee = first.get('Name', "").strip()
memo = first.get('Memo', "").strip()
# Заголовок транзакції
output_lines.append(f"{date} * \"{payee}\" \"{memo}\"")
if first.get('Num'): # додаємо номер, якщо є
output_lines.append(f" number: \"{first['Num']}\"")
# Проходимо по кожному проведенню/запису
for split in splits:
acct_name = split['Account'].strip()
# Зіставляємо назву рахунку QuickBooks з рахунком Beancount (використовуючи попередню мапу)
beancount_acct = account_map.get(acct_name, acct_name)
# Визначаємо суму зі знаком:
amount = split.get('Amount') or ""
debit = split.get('Debit') or ""
credit = split.get('Credit') or ""
if amount:
# Деякі експорти мають один стовпець "Сума" (негативний для кредитів)
amt_str = amount
else:
# Якщо окремі стовпці "Дебет"/"Кредит"
amt_str = debit if debit else f"-{credit}"
# Видаляємо коми в числах для безпеки
amt_str = amt_str.replace(",", "")
# Додаємо валюту
currency = split.get('Currency') or "USD"
amt_str = f"{amt_str} {currency}"
# Примітка/опис для проведення
line_memo = split.get('Memo', "").strip()
comment = f" ; {line_memo}" if line_memo else ""
output_lines.append(f" {beancount_acct:<40} {amt_str}{comment}")
# Кінець транзакції – порожній рядок
output_lines.append("")

Ця логіка скрипта виконує наступне:

  • Форматує дату в YYYY-MM-DD для Beancount.

  • Використовує отримувача (Name) та примітку (Memo) для опису транзакції. Наприклад: 2020-05-01 * "ACME Corp" "Оплата рахунку" (Якщо отримувача немає, можна використати Тип транзакції QuickBooks або залишити лапки порожніми).

  • Додає метадані number, якщо є номер (номер чека, рахунку-фактури тощо).

  • Ітерує по кожному рядку проведення:

    • Зіставляє назву рахунку QuickBooks з рахунком Beancount за допомогою словника account_map (заповненого на етапі роботи з планом рахунків).
    • Визначає суму. Залежно від вашого експорту, у вас може бути один стовпець Сума (з позитивними/негативними значеннями) або окремі стовпці Дебет та Кредит. Наведений вище код обробляє обидва випадки. Він забезпечує, що кредити представлені як негативні суми для Beancount (оскільки в Beancount для кожного проведення використовується одне число зі знаком).
    • Додає валюту (припускаючи USD, якщо немає окремого стовпця з валютою).
    • Записує рядок проведення Beancount з рахунком, сумою та коментарем з примітки до рядка. Наприклад: Assets:Checking 500.00 USD ; Депозит Income:Sales -500.00 USD ; Депозит Це відображає депозит у $500 (з Доходів на Розрахунковий рахунок).
  • Після переліку всіх проведень, транзакцію відокремлює порожній рядок.

Обробка мультивалютності: Якщо ваші дані QuickBooks включають кілька валют, додайте код валюти до кожного проведення (як показано вище). Переконайтеся, що рахунки в іноземних валютах відкриті з цією валютою. Наприклад, якщо у вас є банківський рахунок в EUR, ви б вивели open Assets:Bank:Checking EUR, і транзакції на цьому рахунку використовуватимуть EUR. Beancount підтримує мультивалютні книги й відстежуватиме неявні конвертації, але вам може знадобитися додати записи про курси, якщо ви хочете бачити конвертацію в базову валюту у звітах. Також рекомендується оголосити вашу основну операційну валюту на початку файлу Beancount (наприклад, option "operating_currency" "USD").

Запуск конвертації: Збережіть скрипт Python (наприклад, як qb_to_beancount.py) і запустіть його на ваших експортованих файлах. Він повинен створити файл .beancount, що містить усі рахунки та транзакції.

2.2 Обробка крайніх випадків та очищення даних

Під час трансформації звертайте увагу на ці поширені проблеми та способи їх вирішення:

  • Невідповідності в назвах рахунків: QuickBooks може мати назви рахунків, що конфліктують з ієрархічними назвами Beancount. Наприклад, у QuickBooks може бути два різні батьківські рахунки, кожен із субрахунком "Страхування". У Beancount Expenses:Insurance має бути унікальним. Вирішіть це, перейменувавши один з них (наприклад, "Страхування-Авто" проти "Страхування-Здоров'я") перед експортом або зіставте їх з унікальними рахунками Beancount у вашому скрипті. Послідовні правила іменування (без спеціальних символів та використання ієрархії) заощадять вам головний біль. Використовуйте підхід з файлом перепризначення, якщо потрібно: ведіть CSV або словник "стара назва" → "нова назва Beancount" і застосовуйте його під час конвертації (наш приклад коду використовує account_map і може завантажувати перевизначення з файлу).

  • Дати та формати: Переконайтеся, що всі дати мають послідовний формат. Наведений вище скрипт нормалізує M/D/Y до формату ISO. Також слідкуйте за проблемами фіскального та календарного року, якщо ваш п'ятирічний період перетинає кінець року. Beancount не зважає на межі фіскального року, але ви можете пізніше захотіти розділити файли за роками для зручності.

  • Числова точність: QuickBooks обробляє валюту з центами, тому робота в центах зазвичай не є проблемою. Всі суми в CSV ідеально повинні мати два десяткових знаки. Якщо якісь суми перетворилися на цілі числа (без десяткової частини) або мають коми/дужки (для негативних значень), очистіть їх у скрипті (видаліть коми, перетворіть (100.00) на -100.00 тощо). Експорт у CSV, якщо зроблений правильно (згідно з інструкціями), вже повинен уникнути цих проблем з форматуванням.

  • Від'ємні суми та знаки: Звіти QuickBooks іноді показують негативні значення як -100.00, (100.00) або навіть --100.00 у певних експортах Excel. Крок очищення повинен обробляти це. Переконайтеся, що дебети та кредити кожної транзакції збалансовані до нуля. Beancount вимагатиме цього (якщо не збалансовано, він видасть помилку під час імпорту).

  • Дублікати транзакцій: Якщо вам довелося експортувати транзакції партіями (наприклад, рік за роком або рахунок за рахунком), будьте обережні, щоб об'єднати їх без перекриття. Перевірте, чи перша транзакція року не є також останньою з попередньої партії тощо. Легко випадково продублювати кілька транзакцій на межах. Якщо ви підозрюєте дублікати, ви можете відсортувати кінцеві записи Beancount за датою та шукати ідентичні записи, або використовувати унікальні теги транзакцій Beancount для їх виявлення. Одна зі стратегій — включати номери транзакцій QuickBooks як метадані (наприклад, використовувати № транзакції або номер рахунку-фактури як тег txn або метадані quickbooks_id), а потім переконатися, що дублікатів цих ID немає.

  • Незбалансовані проведення / Транзитні рахунки: QuickBooks може мати дивні випадки, як-от транзакція з дисбалансом, який QuickBooks автоматично скоригував на рахунок “Початковий власний капітал” або “Нерозподілений прибуток”. Наприклад, при встановленні початкових залишків на рахунках QuickBooks часто проводить різницю на рахунок власного капіталу. Вони з'являться в експортованих транзакціях. Beancount вимагатиме явного балансування. Вам може знадобитися ввести рахунок власного капіталу для початкових залишків (зазвичай Equity:Opening-Balances), щоб відобразити дії QuickBooks. Хорошою практикою є створення запису про початкові залишки в перший день вашої книги, який встановлює стартові баланси всіх рахунків (див. Етап 5).

  • Крайні випадки з мультивалютністю: При використанні кількох валют експорт з QuickBooks може містити всі суми в домашній валюті або в їхній рідній валюті. Ідеально отримати дані в рідній валюті для кожного рахунку (звіти QuickBooks Online зазвичай так роблять). У Beancount кожне проведення несе валюту. Якщо QuickBooks надав обмінні курси або конвертацію в домашню валюту, ви можете проігнорувати їх і покластися на записи про ціни Beancount. Якщо QuickBooks не експортував обмінні курси, вам може знадобитися вручну додати записи про ціни (наприклад, за допомогою директиви price Beancount) для ключових дат, щоб відповідати оцінці. Однак для базової цілісності книги достатньо, щоб транзакції балансувалися у своїх оригінальних валютах — нереалізовані прибутки/збитки не потрібно явно записувати, якщо ви не хочете мати такі ж звіти.

  • Дебіторська / Кредиторська заборгованість: QuickBooks відстежує деталі рахунків-фактур та рахунків (терміни оплати, статус оплати тощо), які не будуть повністю перенесені в просту книгу. Ви отримаєте транзакції по ДЗ та КЗ (рахунки-фактури, що збільшують ДЗ, платежі, що зменшують ДЗ тощо), але не документи рахунків-фактур або баланси клієнтів за кожним рахунком. Як результат, після міграції ви повинні перевірити, чи баланси ваших рахунків ДЗ та КЗ у Beancount дорівнюють відкритим балансам клієнтів/постачальників у QuickBooks. Якщо вам потрібно відстежувати рахунки-фактури, ви можете використовувати метадані Beancount (наприклад, включити тег invoice або посилання). Номери рахунків-фактур QuickBooks повинні були перейти в поля Num або Memo — наш скрипт зберігає Num як number: "..." у метаданих транзакції.

  • Неактивні або закриті рахунки: Експорт IIF може включати неактивні рахунки (якщо ви вибрали їх включення). Це нормально — імпортувати їх (вони просто не матимуть транзакцій і нульовий баланс, якщо справді неактивні). Ви можете позначити їх як закриті в Beancount після дати останньої транзакції за допомогою директиви close. Це підтримує вашу книгу в порядку. Наприклад: 2023-12-31 close Expenses:OldAccount ; закрито після міграції Це необов'язково і в основному для чистоти.

Ретельно очистивши та зіставивши дані, як описано вище, ви отримаєте файл книги Beancount, який структурно відображає ваші дані з QuickBooks. Наступний крок — перевірити, чи він також чисельно відповідає QuickBooks.


Етап 3: Перевірка та звірка даних

Перевірка є критично важливим етапом у міграції бухгалтерських даних. Нам потрібно переконатися, що книга Beancount відповідає записам QuickBooks до копійки. Для цього можна використовувати кілька стратегій та інструментів:

3.1 Звірка за оборотним балансом

Звіт оборотний баланс (або пробний баланс) перелічує кінцеві залишки всіх рахунків (з дебетами та кредитами, або позитивними/негативними значеннями) і в сумі має давати нуль. Запуск оборотного балансу в обох системах на ту саму дату — найшвидший спосіб підтвердити загальну точність.

  • У QuickBooks: Сформуйте звіт Оборотний баланс на останній день фінального року (наприклад, 31 грудня 2023 року). Цей звіт показує баланс кожного рахунку. Експортуйте його або запишіть ключові показники.

  • У Beancount: Використовуйте звіти Beancount для генерації оборотного балансу. Один з легких способів — через командний рядок:

    bean-report migrated.beancount balances

    Звіт balances є оборотним балансом, що перелічує всі рахунки та їхні залишки. Ви також можете відкрити файл у Fava (веб-інтерфейс Beancount) і подивитися розділ Balances або Balance Sheet. Кожен залишок рахунку в Beancount повинен збігатися з оборотним балансом QuickBooks. Наприклад, якщо QuickBooks показує Дебіторська заборгованість = 5,000 грн, то рахунок Assets:Accounts Receivable у Beancount повинен мати загальну суму 5,000 грн (дебет). Якщо Дохід від продажів = 200,000 грн, то Income:Sales у Beancount повинен показувати 200,000 грн (кредит, що може відображатися як -200,000, якщо використовується оборотний баланс, який представляє кредити як негативні значення).

Якщо є розбіжності, знайдіть їх:

  • Перевірте, чи не відсутній або не є зайвим цілий рахунок (чи не забули ми рахунок, чи не включили той, що був закритий до періоду міграції?).
  • Якщо баланс не збігається, заглибтеся: QuickBooks може сформувати Account QuickReport або деталізацію книги для цього рахунку, і ви можете порівняти її з регістром Beancount для цього рахунку (bean-report migrated.beancount register -a AccountName). Іноді розбіжності виникають через відсутню або дубльовану транзакцію.

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

3.2 Порівняння залишків на рахунках

Крім оборотного балансу, ви можете порівняти конкретні фінансові звіти:

  • Балансовий звіт: Сформуйте Балансовий звіт у QuickBooks на кінцеву дату та балансовий звіт у Beancount (bean-report migrated.beancount balsheet). Це схоже на оборотний баланс, але організовано за Активами, Зобов'язаннями, Власним капіталом. Цифри повинні збігатися за категоріями. Для більш детальної перевірки порівняйте загальні суми основних рахунків: грошові кошти, ДЗ, основні засоби, КЗ, власний капітал тощо.

  • Звіт про прибутки та збитки (Income Statement): Сформуйте Звіт про прибутки та збитки за п'ятирічний період (або рік за роком) у QuickBooks та в Beancount (bean-report migrated.beancount income для звіту про прибутки за весь період). Чистий прибуток з Beancount повинен дорівнювати прибутку з QuickBooks для кожного періоду. Якщо ви мігрували всі п'ять років, сукупний чистий прибуток повинен збігатися. Ви також можете порівняти окремі суми доходів та витрат, щоб переконатися, що жодна категорія не була пропущена або подвоєна.

  • Випадкова вибірка транзакцій: Виберіть кілька випадкових транзакцій (особливо з кожного року та кожного основного рахунку) і перевірте, чи вони мігрували правильно. Наприклад, знайдіть рахунок-фактуру трирічної давності в QuickBooks, а потім знайдіть його суму або примітку у файлі Beancount (оскільки всі транзакції є текстом, ви можете відкрити файл .beancount у текстовому редакторі або використовувати інструменти пошуку). Перевірте, чи збігаються дата, суми та рахунки. Це допоможе виявити будь-які проблеми з форматуванням дати або неправильно зіставлені рахунки.

3.3 Автоматизовані перевірки цілісності

Використовуйте власні інструменти перевірки Beancount:

  • bean-check: Запустіть bean-check migrated.beancount. Це проаналізує файл і повідомить про будь-які помилки в синтаксисі або балансуванні. Якщо скрипт щось пропустив, наприклад, невідкритий рахунок або незбалансовану транзакцію, bean-check позначить це. Чистий прохід (без виводу) означає, що файл принаймні внутрішньо узгоджений.

  • Асерції залишків (Balance Assertions): Ви можете додати явні асерції залишків у книгу для ключових рахунків як додаткову перевірку. Наприклад, якщо ви знаєте залишок на банківському рахунку на певну дату, додайте рядок: 2023-12-31 balance Assets:Bank:Checking 10000.00 USD Тоді bean-check переконається, що в книзі на цю дату залишок дійсно становить 10,000 USD. Це необов'язково, але може бути корисним для важливих рахунків. Ви можете взяти кінцеві залишки з QuickBooks (наприклад, на кінець кожного року) і підтвердити їх у файлі Beancount. Якщо будь-яка асерція не пройде, Beancount повідомить про різницю.

  • Перевірка оборотного балансу за періодами: Якщо бажаєте, ви можете зробити перевірку по періодах. Для кожного року порівняйте чисту зміну. Наприклад, чистий прибуток у QuickBooks 2020 проти Beancount 2020 тощо, щоб переконатися, що кожен рік правильно закрився на власний капітал (QuickBooks автоматично переносить чистий прибуток на Нерозподілений прибуток кожного нового року; в Beancount ви просто побачите сукупний власний капітал). Якщо ви бачите розбіжності, це може вказувати на проблему в даних конкретного року.

  • Кількість транзакцій та дублікати: Підрахуйте кількість транзакцій у QuickBooks та Beancount. QuickBooks не показує пряму кількість легко, але ви можете оцінити її, підрахувавши рядки в CSV (кожен заголовок транзакції проти проведень). У Beancount швидкий спосіб — підрахувати кількість входжень txn або * " у файлі. Вони повинні бути рівними або трохи більшими, ніж у QuickBooks (якщо ви додали транзакції початкових залишків або коригування). Значна розбіжність означає, що щось могло бути пропущено або продубльовано. Наше використання унікальних ID в метаданих може допомогти: якщо ви підозрюєте дублікати, знайдіть у файлі Beancount той самий номер чека або рахунку-фактури, що з'являється двічі, коли не повинен.

  • Статус звірки: Ми включили метадані rec: "y" або "n" на основі статусу звірки в QuickBooks у нашому скрипті (як rec у прикладі). Це не є стандартною функцією Beancount (Beancount не відстежує звірені/незавершені транзакції так само, як Ledger), але це може бути корисною метаданою. Ви можете перевірити, чи всі звірені в QuickBooks транзакції присутні. Зрештою, нова звірка банківських рахунків у Beancount (використовуючи ваші виписки) може бути остаточним доказом того, що нічого не пропущено.

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


Етап 4: Фіксація даних у книзі Beancount

Після очищення та перевірки настав час формалізувати дані у вашій структурі книги Beancount. “Фіксація” тут означає як фіналізацію файлів книги, так і потенційне їх додавання до системи контролю версій для можливості аудиту.

4.1 Організація файлів книги та конфігурація

Вирішіть, як структурувати файли книги Beancount. Для даних за п'ять років ви можете зберігати все в одному файлі або розділити за роками чи категоріями. Поширена, зрозуміла структура така:

  • Основний файл книги: наприклад, ledger.beancount — це точка входу, яка може include інші файли. Він може містити глобальні опції, а потім включати річні файли.
  • Файл рахунків: Визначте план рахунків та початкові залишки. Наприклад, accounts.beancount з усіма директивами open (згенерованими скриптом). Тут ви також можете перелічити товари (валюти).
  • Файли транзакцій: Один на рік, наприклад, 2019.beancount, 2020.beancount і т.д., що містять транзакції за цей рік. Це зберігає кожен файл у керованому розмірі та дозволяє зосередитися на конкретному році, якщо потрібно. Альтернативно, ви можете розділити за сутностями або рахунками, але поділ за часом є простим для фінансових даних.

Приклад основного файлу:

option "title" "Моя бізнес-книга"
option "operating_currency" "USD"

include "accounts.beancount"
include "2019.beancount"
include "2020.beancount"
...
include "2023.beancount"

Таким чином, усі дані агрегуються під час запуску звітів, але ви підтримуєте порядок.

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

4.2 Встановлення початкових залишків та власного капіталу

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

  • Книги з нуля: Якщо п'ятирічний період починається з моменту заснування бізнесу (наприклад, ви почали використовувати QuickBooks у січні 2019 року з усіма рахунками на нулі, крім початкового капіталу), то вам може не знадобитися окрема транзакція початкових залишків. Перші транзакції у 2019 році (наприклад, початкове фінансування на банківський рахунок) природним чином встановлять початкові баланси. Просто переконайтеся, що будь-який початковий капітал або попередній нерозподілений прибуток враховані через транзакції з власним капіталом.

  • Книги в середині процесу (часткова історія): Якщо ви почали використовувати QuickBooks раніше, і 2019 рік — це середина, то на 1 січня 2019 року кожен рахунок мав залишок, перенесений з попереднього періоду. QuickBooks мав би їх як початкові залишки або нерозподілений прибуток. У Beancount типово створювати запис про початкові залишки на день перед датою початку:

    • Використовуйте рахунок власного капіталу під назвою Equity:Opening-Balances (або подібний) для компенсації суми всіх початкових залишків.
    • Приклад: якщо на 31.12.2018 р. Грошові кошти становили 10,000 грн, а ДЗ — 5,000 грн, а КЗ — 3,000 грн (кредит), ви б написали транзакцію: 2018-12-31 * "Початкові залишки" Assets:Cash 10000.00 UAH Assets:Accounts Receivable 5000.00 UAH Liabilities:Accounts Payable -3000.00 UAH Equity:Opening-Balances -12000.00 UAH Це залишає на Opening-Balances негативну суму (–12 тис. грн), що балансує запис. Тепер усі рахунки активів/зобов'язань починають 2019 рік з правильними залишками. Це повинно відображати будь-які "Нерозподілені прибутки" QuickBooks або перенесені залишки.
    • Альтернативно, використовуйте директиви Beancount pad та balance: для кожного рахунку ви можете pad його з Opening-Balances та підтвердити залишок. Це більш автоматизований спосіб. Наприклад: 2018-12-31 pad Assets:Cash Equity:Opening-Balances 2018-12-31 balance Assets:Cash 10000.00 UAH Це каже Beancount вставити будь-який необхідний запис (на Opening-Balances), щоб Грошові кошти дорівнювали 10000 UAH на цю дату. Зробіть це для кожного рахунку. Результат схожий, але написання явної транзакції, як у першому методі, також є простим.
  • Нерозподілений прибуток: QuickBooks не експортує явно транзакцію “Нерозподілений прибуток” — він просто його обчислює. Після міграції ви можете помітити, що Equity:Retained Earnings дорівнює нулю, якщо ви його не створили. У Beancount нерозподілений прибуток — це просто прибуток попередніх років. Ви можете створити рахунок нерозподіленого прибутку і переносити на нього прибуток попередніх років у перший день кожного нового року, або просто дозволити власному капіталу бути сумою всіх доходів/витрат (що з'являється у розділі Власний капітал у звітах). Для прозорості деякі користувачі щорічно створюють закриваючі записи. Це необов'язково і в основному для презентації. Оскільки ми мігрували всі транзакції, прибуток за кожен рік природним чином згортатиметься, якщо ви запускаєте звіт за рік.

  • Порівняльні перевірки: Після встановлення початкових залишків запустіть балансовий звіт на дату початку, щоб переконатися, що все правильно (він повинен показувати ці початкові залишки проти початкового власного капіталу, що в сумі дає нуль).

4.3 Фіналізація та контроль версій

Тепер, коли дані у форматі Beancount і структуровані, розумно зафіксувати файли у репозиторії системи контролю версій (наприклад, git). Кожну зміну в книзі можна відстежувати, і ви маєте аудиторський слід усіх модифікацій. Це головна перевага текстової бухгалтерії. Наприклад, у QuickBooks зміни можуть бути нелегко порівняти, але в Beancount ви можете бачити різницю рядок за рядком. Як зазначають деякі користувачі, з Beancount ви отримуєте прозорість та можливість скасовувати зміни, якщо потрібно — кожен запис можна пов'язати з історією змін.

Розгляньте можливість позначити комміт цієї початкової міграції як v1.0 або подібним чином, щоб ви знали, що він представляє стан книг, імпортованих з QuickBooks. Надалі ви будете вводити нові транзакції безпосередньо в Beancount (або імпортувати з банківських виписок тощо), і ви можете використовувати звичайні практики розробки програмного забезпечення (коммітити щомісяця або щодня, використовувати гілки для експериментів тощо).

Налаштування Fava або інших інструментів: Fava — це веб-інтерфейс для Beancount, який полегшує перегляд звітів. Після фіксації запустіть fava ledger.beancount, щоб переглянути фінансові звіти та порівняти їх з вашими звітами QuickBooks востаннє. Ви можете легше помітити невеликі відмінності в інтерфейсі (наприклад, рахунок, який повинен бути нульовим, але показує невеликий залишок, вказує на відсутній закриваючий запис або випадкову транзакцію).

Правила іменування та послідовність: Тепер у вас повний контроль, тому забезпечте послідовність:

  • Всі рахунки повинні мати чіткі назви, що починаються з великих літер назв категорій (Assets, Liabilities тощо). Якщо якісь виглядають дивно (наприклад, Assets:assets:SomeAccount через розбіжність регістру з QuickBooks), перейменуйте їх у файлі рахунків та оновіть транзакції (швидкий пошук/заміна у файлі може це зробити, або використовуйте bean-format Beancount або мультикурсор редактора).
  • Символи товарів (коди валют) повинні бути послідовними. Для USD використовуйте USD скрізь (не $ або US$). Для інших використовуйте стандартні коди (EUR, GBP, UAH тощо). Ця послідовність важлива для пошуку цін та звітів Beancount.
  • Видаліть будь-які тимчасові або фіктивні рахунки, які могли бути створені (наприклад, якщо ви використовували Expenses:Miscellaneous для невідомих рахунків у скрипті як універсальний варіант, спробуйте усунути їх, правильно зіставивши всі рахунки).

Закриття QuickBooks: На цьому етапі ви повинні мати паралельні книги в Beancount, які збігаються з QuickBooks. Деякі обирають вести обидві системи паралельно протягом короткого періоду, щоб переконатися, що нічого не було пропущено. Але якщо перевірка надійна, ви можете “закрити” книги QuickBooks:

  • Якщо це корпоративне середовище, розгляньте експорт усіх вихідних документів QuickBooks (рахунки-фактури, рахунки, квитанції) для архівів, оскільки їх не буде в Beancount, якщо ви не прикріпите їх вручну.
  • Зберігайте резервну копію даних QuickBooks (як файл компанії, так і експортовані файли).
  • Надалі ведіть книгу Beancount як основну систему обліку.

Зафіксувавши дані в книзі Beancount, ви завершили процес міграції. Останній крок — провести аудит і продемонструвати узгодженість фінансової звітності, щоб переконати себе (і будь-яких зацікавлених сторін чи аудиторів), що міграція пройшла успішно.


Етап 5: Аудит після міграції та приклади

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

5.1 Перевірка фінансової звітності

Створіть ключові фінансові звіти з QuickBooks та Beancount на ті самі дати та порівняйте їх:

  • Балансовий звіт на 31 грудня 2023 року: Порівняйте загальні суми Активів, Зобов'язань та Власного капіталу рядок за рядком. Вони повинні збігатися. Наприклад, якщо QuickBooks показував Загальні активи = 150,000 грн та Загальні зобов'язання + Власний капітал = 150,000 грн, балансовий звіт Beancount повинен показувати ті ж самі суми. Якщо ви структурували рахунки трохи інакше (скажімо, об'єднали деякі субрахунки), врахуйте це при порівнянні або розбийте до наступного рівня, щоб переконатися, що суми рівні.

  • Звіт про прибутки та збитки 2019–2023: Переконайтеся, що загальний Дохід, загальні Витрати та Чистий прибуток за кожен рік (або за весь діапазон) ідентичні. Невеликі відмінності можуть виникнути, якщо QuickBooks робив деякі округлення у звітах, але транзакції зазвичай несуть центи точно, тому чистий прибуток повинен бути точним. Якщо прибуток будь-якого року відрізняється, заглибтеся в дані цього року — це часто є індикатором відсутнього або дубльованого запису в цьому періоді.

  • Різниці в оборотному балансі: Якщо можливо, створіть таблицю, де ви перелічите кожен рахунок та залишок з QuickBooks проти Beancount. Оскільки ми очікуємо, що вони збігатимуться, це може бути стовпець з нульовою різницею. Це, по суті, перехресна перевірка оборотного балансу, яку ми обговорювали, але її запис допомагає задокументувати це.

5.2 Приклад порівняння (до та після)

Нижче наведено приклад фрагмента, що демонструє узгодженість даних. Припустимо, наш оборотний баланс QuickBooks на 31 грудня 2023 року був таким:

РахунокБаланс QuickBooks (31.12.2023)
Активи
Assets:Bank:Checking12,500.00 грн (дебет)
Assets:Accounts Receivable3,200.00 грн (дебет)
Зобов'язання
Liabilities:Credit Card-1,200.00 грн (кредит)
Liabilities:Loans Payable-5,000.00 грн (кредит)
Власний капітал
Equity:Opening-Balances-7,500.00 грн (кредит)
Equity:Retained Earnings-2,000.00 грн (кредит)
Equity:Current Year Profit0.00 грн

У Beancount, після імпорту та проведення всіх транзакцій до 2023 року, звіт bean-report balances (оборотний баланс) видає:

РахунокБаланс Beancount (31.12.2023)
Активи
Assets:Bank:Checking12,500.00 UAH (дебет)
Assets:Accounts Receivable3,200.00 UAH (дебет)
Зобов'язання
Liabilities:Credit Card-1,200.00 UAH (кредит)
Liabilities:Loans Payable-5,000.00 UAH (кредит)
Власний капітал
Equity:Opening-Balances-7,500.00 UAH (кредит)
Equity:Retained Earnings-2,000.00 UAH (кредит)
Equity:Profit (2019-2023)0.00 UAH

(Примітка: розділи власного капіталу можуть бути структуровані по-різному; ключовим є збіг загальних сум. Тут "Прибуток (2019-2023)" у Beancount відіграє роль поточного річного прибутку/нерозподіленого прибутку разом, показуючи нуль, оскільки прибуток був закритий на Нерозподілений прибуток.)

Як показано, кожен рахунок збігається до копійки. Сума дебетів дорівнює сумі кредитів з обох сторін.

Крім того, якщо ми запустимо Звіт про прибутки та збитки за 2023 рік:

  • QuickBooks: Дохід 50,000 грн, Витрати 48,000 грн, Чистий прибуток 2,000 грн.
  • Beancount: Дохід 50,000 грн, Витрати 48,000 грн, Чистий прибуток 2,000 грн (який потім був закритий на Нерозподілений прибуток або з'являється у розділі Власний капітал у балансовому звіті на кінець року).

Ви можете створити порівняння транзакцій, якщо потрібно, але оскільки дані QuickBooks не у форматі книги, ефективніше покладатися на звіти. Можна відсортувати як CSV з QuickBooks, так і транзакції Beancount за датою і порівняти ключові поля як фінальну перевірку (це можна зробити в Excel або за допомогою скрипта). Однак, враховуючи, що ми довіряємо нашій попередній перевірці, перевірка фінансової звітності зазвичай є достатньою.

5.3 Поради щодо аудиту

  • Якщо аудитору або зацікавленій стороні потрібне запевнення, представте фінансову звітність до і після пліч-о-пліч. Прозорість Beancount може насправді спростити аудит, оскільки ви можете швидко відстежити кожне число зі звіту до вихідного запису (особливо використовуючи функцію деталізації Fava).
  • Зберігайте резервну копію QuickBooks та експортовані CSV як частину вашого аудиторського сліду. Задокументуйте будь-які коригування, зроблені під час міграції (наприклад, “Перейменовано рахунок X на Y для послідовності” або “Розділено транзакцію Z на два записи для ясності”, якщо ви робили такі зміни).
  • Надалі впроваджуйте регулярні перевірки в Beancount. Наприклад, щомісячна звірка банківських рахунків та асерція їхнього кінцевого залишку допомагає виявляти будь-які проблеми з даними або помилки в записах. Міграція дає хороший базовий рівень; підтримання дисципліни в новій системі забезпечить подальшу точність.

Нарешті, відсвяткуйте завершення міграції: ви успішно перенесли п'ять років бухгалтерських даних з QuickBooks до Beancount. Дані тепер у легкому, версіонованому текстовому форматі з повною цілісністю подвійного запису. Ви експортували дані, трансформували їх за допомогою скриптів Python, перевірили цілісність через оборотні баланси та звіти, і зафіксували їх у добре організованій книзі Beancount. Цей комплексний процес гарантує, що книга Beancount є точною, вірною копією ваших книг QuickBooks за п'ятирічний період, що налаштовує вас на спрощений облік у майбутньому.

Представляємо багатофайлову підтримку в Beancount

· 2 хв. читання
Mike Thrift
Mike Thrift
Marketing Manager

Багато наших клієнтів з лютого запитували нас, як додати кілька файлів до однієї бухгалтерської книги. Їм потрібна структура файлів для архівування або категоризації транзакцій. Отже, нарешті, після кількох місяців роботи, ми раді оголосити, що функція випущена безкоштовно.

Ось як це використовувати:

Файл > створити новий файл

Багатофайлова підтримка однієї бухгалтерської книги

Перейдіть на вкладку редактора файлів у лівій навігаційній бічній панелі. Потім відкрийте спадне меню "Файл" і натисніть "Створити новий файл".

Файл > створити новий файл

Назвіть свій новий файл

Дайте своєму файлу дійсну назву та збережіть його. Усі назви файлів повинні закінчуватися на ".bean".

Назвіть свій новий файл

Включіть файл

Це важливий крок: ви повинні включити щойно створений файл у main.bean.

Наприклад, якщо ви додали stock.bean, тоді вкажіть include "stock.bean" у main.bean.

Включіть файл

Оновіть та перейдіть до файлу

Оновіть сторінку, і ви побачите, що файл з'явиться у спадному меню "Файл".

Оновіть та перейдіть до файлу

Перейменувати або видалити файл

Перейшовши до файлу, ви можете перейменувати або видалити його у спадному меню "Редагувати".

Перейменувати або видалити файл

Виникли проблеми?

Задавайте питання в https://t.me/beancount.

Оновлення Fava до версії 1.19: Ключові зміни та покращення

· 1 хв. читання
Mike Thrift
Mike Thrift
Marketing Manager

Ми оновили програмне забезпечення Fava з відкритим кодом, ліцензоване за MIT, до версії 1.19. Ось зміни з моменту нашого останнього оновлення:

  • v1.19 (18.05.2021)
    • міграція з опцій conversion та interval на опцію default-page
    • додано опцію invert-income-liabilities-equity
    • оновлення до CodeMirror 6
    • додано болгарський переклад
    • інші невеликі покращення та виправлення помилок
  • v1.18 (16.01.2021)
    • кілька невеликих покращень та різні виправлення помилок.

Відчуваєте захоплення? Спробуйте зараз за посиланням https://beancount.io/ledger/

2021-07-16-upgrade-fava-to-1-19

Маєте запитання? Ми будемо поруч з вами за посиланням https://t.me/beancount :)

Розуміння амортизації в Beancount

· 2 хв. читання
Mike Thrift
Mike Thrift
Marketing Manager

Амортизація розподіляє платежі на багато частин протягом певного часу. У beancount.io ви можете використовувати плагін fava.plugins.amortize_over для досягнення цієї мети.

2021-01-09-amortize

Без амортизації, якщо ви хочете застрахувати свій автомобіль на 6 місяців вартістю $600, вам доведеться записати це як одноразову витрату на певну дату.

2017-06-01 open Assets:Bank:Checking
2017-06-01 open Assets:Prepaid-Expenses
2017-06-01 open Expenses:Insurance:Auto


2017-06-01 * "Pay car insurance"
Assets:Bank:Checking -600.00 USD
Assets:Prepaid-Expenses

Однак, за допомогою амортизації ви можете розподілити витрати на шість місяців, додавши plugin "fava.plugins.amortize_over" на початку файлу та використовуючи amortize_months: 6 для транзакції.

plugin "fava.plugins.amortize_over"

2020-06-01 open Assets:Bank:Checking
2020-06-01 open Assets:Prepaid-Expenses
2020-06-01 open Expenses:Insurance:Auto

2020-06-01 * "Amortize car insurance over six months"
amortize_months: 6
Assets:Prepaid-Expenses -600.00 USD
Expenses:Insurance:Auto

І тоді в Журналі ви побачите, що транзакція розділена на 6 проводок.

2020-11-01 * Amortize car insurance over six months (6/6) am
2020-10-01 * Amortize car insurance over six months (5/6) am
2020-09-01 * Amortize car insurance over six months (4/6) am
2020-08-01 * Amortize car insurance over six months (3/6) am
2020-07-01 * Amortize car insurance over six months (2/6) am
2020-06-01 * Amortize car insurance over six months (1/6) am

Знімок екрана транзакції амортизації

Представляємо мобільні додатки Beancount для iOS та Android

· 2 хв. читання
Mike Thrift
Mike Thrift
Marketing Manager

Ми раді оголосити про важливу віху в еволюції Beancount: запуск наших спеціалізованих мобільних додатків для платформ iOS та Android! Цей реліз безпосередньо відповідає на один з найчастіших запитів нашої спільноти – можливість ефективно керувати вашою бухгалтерською книгою на мобільних пристроях.

Мобільний додаток Beancount для iOS

Ключові функції

  • Швидке введення транзакцій: Легко додавайте нові транзакції на ходу
  • Мобільні фінансові звіти: Отримуйте доступ до своїх фінансових даних будь-де, будь-коли
  • Пряме редагування книги: Повний доступ до файлу вашої бухгалтерської книги через оптимізований веб-перегляд
  • Кросплатформна синхронізація: Зберігайте свої фінансові дані узгодженими на всіх ваших пристроях

2020-08-19-beancount-mobile-app

Розробка, керована спільнотою

Цей реліз знаменує лише початок нашого мобільного шляху. Ми прагнемо розвивати ці додатки на основі ваших потреб та відгуків. Приєднуйтесь до нашої активної спільноти в Telegram за посиланням https://t.me/beancount, щоб обговорювати Beancount, ділитися своїм досвідом та допомагати формувати майбутні функції.

Наше бачення

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

завантажити з App Storeзавантажити з Play Store

Чистий дохід 101 — і як його відстежувати в Beancount

· 5 хв. читання
Mike Thrift
Mike Thrift
Marketing Manager

Серед усіх показників, що описують бізнес, один виділяється найбільше: чистий дохід. Це кінцевий показник прибутковості, відомий як "підсумковий рядок". Але що він насправді означає, і як його можна точно відстежувати за допомогою системи простого текстового обліку, такої як Beancount?

Давайте розберемося.

2020-03-12-net-income-101-how-to-track-it-in-beancount

Що насправді означає чистий дохід

По суті, чистий дохід – це гроші, що залишаються після того, як ви сплатили абсолютно все, що потрібно для ведення вашого бізнесу. Це включає собівартість реалізованої продукції (COGS), всі операційні витрати, відсотки за боргами та податки.

Це найчіткіший показник фінансового здоров'я компанії. Це критично важливий показник для всіх:

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

Позитивний чистий дохід означає, що ви прибуткові. Негативний – що ви втрачаєте гроші. Все просто.

Основна формула (виберіть потрібний рівень деталізації)

Ви можете розрахувати чистий дохід з різним ступенем деталізації. Вибір залежить від того, наскільки детальний аналіз вам потрібен.

  • Повна формула: Дохід – COGS – Операційні витрати – Відсотки – Податки = Чистий дохід
  • Стандартна формула: Дохід – COGS – Витрати = Чистий дохід
  • Швидка і приблизна формула: Загальний дохід – Загальні витрати = Чистий дохід

Коротка порада щодо витрат: Яка різниця між COGS та операційними витратами? COGS (собівартість реалізованої продукції) охоплює прямі витрати, пов'язані з виробництвом ваших товарів або послуг (наприклад, сировина, пряма праця). Операційні витрати охоплюють все інше, що підтримує роботу бізнесу — зарплати, оренда, підписки на програмне забезпечення, страхування тощо.

Міні-приклад

Давайте зробимо це наочним. Уявіть, що невеликий бізнес з обсмажування кави мав такі результати минулого місяця.

ПоказникСумаПриклад рахунку в журналі
Дохід від продажів$60,000Income:Sales
COGS (зелені кавові зерна)$20,000Expenses:COGS
Операційні витрати$18,000Expenses:Ops:*
Відсотки (за кредитом на обладнання)$1,000Expenses:Interest
Податки$1,000Expenses:Taxes

Використовуючи повну формулу, розрахунок простий:

Чистий;дохід = \60,000 - $20,000 - $18,000 - $1,000 - $1,000 = $20,000$

Бізнес отримав чистий прибуток у розмірі $20,000 за місяць.

Як зафіксувати це в Beancount

Структура Beancount ідеально підходить для цього. Завдяки логічній організації ваших рахунків, розрахунок чистого доходу стає автоматичним побічним продуктом належного бухгалтерського обліку.

  • Позначте всі доходи під батьківським рахунком Income, наприклад, Income:Sales або Income:Services.
  • Розділіть свої витрати, щоб розрізняти прямі та непрямі витрати. Використовуйте Expenses:COGS для прямих витрат та підрахунки, такі як Expenses:Ops:Salaries або Expenses:Ops:Software, для всього іншого.
  • Записуйте відсотки та податки на їхні власні рахунки (Expenses:Interest, Expenses:Taxes). Це значно спрощує подальший аналіз, особливо для підготовки податкової звітності.
  • Регулярно звіряйте свій баланс. Фундаментальне бухгалтерське рівняння, Активи = Зобов'язання + Власний капітал, завжди має бути вірним.

Наприкінці періоду (наприклад, місяця) ви можете використовувати твердження balance, щоб підтвердити стан ваших рахунків. Ці записи не переміщують гроші; вони декларують, яким має бути баланс, і bean-check повідомить про помилку, якщо це не так.

; 2025-07-31 Coffee Roaster Enterprises — Липневе закриття
2025-07-31 balance Assets:Bank:Operating 42000.00 USD
2025-07-31 balance Expenses:COGS 20000.00 USD
2025-07-31 balance Expenses:Ops 18000.00 USD
2025-07-31 balance Expenses:Interest 1000.00 USD
2025-07-31 balance Expenses:Taxes 1000.00 USD
2025-07-31 balance Income:Sales -60000.00 USD

Однорядковий запит на чистий дохід

Тут відбувається магія. З добре структурованим журналом ви можете розрахувати свій чистий дохід за будь-який період за допомогою однієї команди.

bean-query books.beancount \
"SELECT period, sum(number) WHERE account =~ '^(Income|Expenses)' \
AND year = 2025 GROUP BY month"

Цей запит підсумовує всі значення у ваших рахунках Income та Expenses за 2025 рік та групує їх за місяцями. У Beancount дохід представлений від’ємними числами, а витрати – додатними, тому результат буде від’ємним значенням вашого чистого доходу.

Ще краще, вам навіть не потрібно запускати цей запит вручну. Fava, веб-інтерфейс для Beancount, автоматично побудує це для вас у своєму поданні Звіти → Звіт про доходи.

Швидкі висновки, які ви можете автоматизувати

Оскільки ваш журнал – це просто текстовий файл, ви можете створювати потужні автоматизовані робочі процеси навколо нього.

  • Щомісячний дайджест електронною поштою: Налаштуйте завдання cron для запуску bean-report books.beancount income_statement > net-income.txt, а потім надсилайте отриманий текстовий файл собі електронною поштою першого числа кожного місяця.
  • Сповіщення про прибутковість: Використовуйте Git pre-commit hook, який запускає запит для перевірки прибутковості з початку місяця. Ви можете запрограмувати його на відмову від фіксації, якщо чистий дохід від’ємний, що змусить вас визнати збитковий місяць.
  • Моделювання сценаріїв: Хочете провести стрес-тест свого бізнесу? Просто скопіюйте books.beancount в scenarios/recession.bean, зменште свої записи Income на 20% та перезапустіть запит на чистий дохід, щоб миттєво побачити вплив.

Ключові висновки

  • Чистий дохід – це ваш справжній підсумковий рядок. Мета полягає в тому, щоб підтримувати його позитивним та розуміти його тенденцію з часом.
  • Beancount робить базові математичні розрахунки явними, доступними для пошуку та контролю версій. Немає прихованих формул.
  • З дисциплінованою структурою обліку та одним запитом ви завжди знатимете, чи дійсно ваш бізнес заробляє гроші.

Вступ до Beancount.io

· 5 хв. читання
Mike Thrift
Mike Thrift
Marketing Manager

Чому сучасний бухгалтерський облік важливий

Все ще керуєте своїми інвестиціями за допомогою електронних таблиць? Хоча електронні таблиці є універсальними, вони можуть стати громіздкими та схильними до помилок у міру зростання вашого інвестиційного портфеля. Представляємо Beancount.io – складну, але зручну у використанні платформу для відстеження інвестицій, розроблену спеціально для управління портфелями акцій та криптовалют. Створена з урахуванням потреб інженерів та фінансових мінімалістів, Beancount.io поєднує потужні функції з інтуїтивно зрозумілим інтерфейсом для оптимізації вашого досвіду відстеження інвестицій.

2019-09-07-introduction-to-beancount

Expenses

Income Statement

Balance Sheet

Подвійний запис: Основа точності

Beancount.io побудований на принципах подвійного запису – перевіреної часом методології, що використовується фінансовими установами по всьому світу. Ця система забезпечує математичну точність завдяки простій, але потужній концепції: кожна фінансова транзакція повинна ідеально балансувати.

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

1970-01-01 open Income:BeancountCorp
1970-01-01 open Assets:Cash
1970-01-01 open Expenses:Food
1970-01-01 open Assets:Receivables:Alice
1970-01-01 open Assets:Receivables:Bob
1970-01-01 open Assets:Receivables:Charlie
1970-01-01 open Liabilities:CreditCard

2019-05-31 * "BeancountCorp" "Salary of May 15th to May 31st"
Income:BeancountCorp -888 USD
Assets:Cash 888 USD

2019-07-12 * "Popeyes chicken sandwiches" "dinner with Alice, Bob, and Charlie"
Expenses:Food 20 USD
Assets:Receivables:Alice 20 USD
Assets:Receivables:Bob 20 USD
Assets:Receivables:Charlie 20 USD
Liabilities:CreditCard -80 USD

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

Assets = Liabilities + Equity(aka Net Assets)

Ми використали синтаксис Beancount від Мартіна Блейса та веб-проєкт Fava від Якоба Шнітцера для створення цього веб-сайту. І він сповістить вас, якщо будь-яка транзакція матиме будь-які частини, що не сумуються до нуля.

Error Alert

Тепер ви розумієте, як ми забезпечуємо коректність головної книги. Але ви можете запитати, що таке ці "рахунки"?

Розуміння рахунків: Аналогія з відрами води

Уявіть свої фінансові рахунки як систему взаємопов'язаних відер з водою, де гроші течуть як вода між ними. Ця аналогія робить подвійний запис інтуїтивно зрозумілим: коли ви переказуєте гроші з одного рахунку на інший, це схоже на переливання води з одного відра в інше – загальна кількість води (грошей) у системі залишається постійною.

Beancount.io пропонує п'ять типів рахунків.

  1. Доходи — Їх сума завжди від'ємна або в дебеті. Це тому, що ви заробляєте гроші, і тоді гроші дебетуються з рахунку "Доходи" та кредитуються на ваші "Активи".
  2. Витрати — Їх сума завжди позитивна або в кредиті. Це тому, що ви витрачаєте гроші, і гроші надходять з "Активів" або "Зобов'язань" на "Витрати".
  3. Зобов'язання — Їх сума позитивна або нульова. Ваші зобов'язання за кредитною карткою є хорошим прикладом, які зростають і падають циклами.
  4. Активи — Їх сума позитивна або нульова. Ваші готівкові кошти або будинки завжди мають певну вартість.
  5. Власний капітал — Ваші чисті активи. Система розрахує це автоматично для вас. Власний капітал = Активи - Зобов'язання, і це відображає ваш рівень достатку.

Тепер ви можете відкрити свої індивідуальні рахунки за допомогою цих ключових слів вище:

1970-01-01 open Assets:Cash
1970-01-01 open Assets:Stock:Robinhood
1970-01-01 open Assets:Crypto:Coinbase
1970-01-01 open Expenses:Transportation:Taxi
1970-01-01 open Equity:OpeningBalance

Розширене відстеження інвестицій за допомогою активів

Beancount.io чудово відстежує різноманітні інвестиції, від акцій до криптовалют. Давайте розглянемо, як він обробляє складні інвестиційні сценарії. Наприклад, ось як ви б записали купівлю 10 біткоїнів по 100 доларів кожен у 2014 році:

2014-08-08 * "Buy 10 Bitcoin"
Assets:Trade:Cash -1000.00 USD
Assets:Trade:Positions 10 BTC {100.00 USD}

А потім, через три роки, ви продаєте їх (спочатку з витратами 100 доларів за одиницю, позначеними {100.00 USD}) за ціною 10 000 доларів за одиницю, позначеною @ 10,000.00 USD.

2017-12-12 * "Sell 2 Bitcoin"
Assets:Trade:Positions -2 BTC {100.00 USD} @ 10,000.00 USD
Assets:Trade:Cash 20,000.00 USD
Income:Trade:PnL -19,800.00 USD

Або та ж транзакція з @@ 20,000.00 USD означає, що за ціною 20 000 доларів загалом.

2017-12-12 * "Sell 2 Bitcoin"
Assets:Trade:Positions -2 BTC {100.00 USD} @@ 20,000.00 USD
Assets:Trade:Cash 20,000.00 USD
Income:Trade:PnL -19,800.00 USD

Сума всіх частин транзакції, включаючи -2 BTC {100.00 USD}, все ще, як завжди, дорівнює нулю.

Тег витрат {100.00 USD} важливий, оскільки ви могли придбати той самий актив за різними цінами.

100 BTC {10.00 USD, 2012-08-08}
10 BTC {100.00 USD, 2014-08-08}

Якщо ви хочете спростити процес, ви можете налаштувати рахунок на початку з ФІФО або ЛІФО. ФІФО означає "першим прийшов — першим вийшов", тоді як ЛІФО означає "останнім прийшов — першим вийшов". У США Податкова служба використовує ФІФО для розрахунку ваших прибутків/збитків та відповідного оподаткування.

1970-01-01 open Assets:Trade:Positions "FIFO"

І тоді, коли ви продаєте його скорочено, наприклад -2 BTC {}, Beancount автоматично застосує стратегію ФІФО та продасть найстаріший актив.

Початок роботи з Beancount.io

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

Розпочніть свою фінансову подорож з Beancount.io – Безкоштовно під час нашого акційного періоду!

Основи бухгалтерського обліку з Beancount: шлях до чистого обліку через простий текст

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

Ви не можете керувати бізнесом, якщо не знаєте, куди йдуть гроші. Точний облік перетворює здогадки на розуміння. (Investopedia)

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

2019-03-24-bookkeeping-basics

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

Що таке бухгалтерський облік?

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

У світі Beancount ці записи не замкнені в пропрієтарному програмному забезпеченні. Вони живуть у простих, зрозумілих для людини текстових файлах. Цей підхід дозволяє вам контролювати версії вашої фінансової історії за допомогою таких інструментів, як Git, так само, як і з програмним проектом. Кожен запис регулюється правилом подвійного запису, елегантною системою, яка автоматично перевіряє вашу роботу та гарантує, що ваші книги завжди правильні. (beancount)

Чому це важливо?

Ретельний бухгалтерський облік – це не просто адміністративна акуратність; це стратегічна перевага.

  • Впевненість у податках: Коли настає податковий сезон, чисті записи – ваш найкращий друг. Податкова вимагає чіткої документації щодо доходів та відрахувань. Добре ведений реєстр означає, що ви можете подавати документи з упевненістю та значно скоротити будь-які потенційні аудити. (IRS)
  • Чіткіші рішення: Чи достатньо високі ваші ціни? Чи справді вигідний певний контракт на обслуговування? Чи зростають витрати на підписку поза контролем? Фінансові звіти, такі як звіт про прибутки та збитки та баланс, виявляють витоки цін, неконтрольовані витрати та проблеми з грошовими потоками, надаючи менеджерам та інвесторам дані, необхідні для прийняття розумних рішень. (Investopedia)
  • Легше фінансування: Кредитори та інвестори не приймають рішення на основі інтуїції. Перш ніж перераховувати кошти, вони попросять фінансові звіти. Хороші книги дозволяють вам за лічені секунди створити баланс або звіт про прибутки та збитки, демонструючи професіоналізм та фінансове здоров’я. (Investopedia)
  • Попередження про шахрайство та помилки: Регулярна звірка ваших книг з банківськими виписками – це ваша перша лінія захисту від помилок. Ця проста звичка допомагає вам швидко виявляти дублікати платежів, банківські помилки або шахрайську діяльність, перш ніж вони стануть серйозними проблемами. (IRS)

Семикроковий план простого тексту

Готові розпочати? Ось як побудувати вашу систему бухгалтерського обліку на базі Beancount з нуля.

1. Розділіть бізнес-рахунки та особисті рахунки

Це перший крок, який не підлягає обговоренню. Відкрийте окремий розрахунковий рахунок для бізнесу та, за потреби, бізнес-кредитну картку. Змішування коштів створює кошмар для бухгалтерського обліку та може розмити межі відповідальності між вами та вашим бізнесом. Чітке розділення є важливим для точного відрахування та правового захисту. (Small Business Administration)

У Beancount ви оголошуєте про існування цих рахунків за допомогою директиви open:

; Початкові залишки на ваших рахунках
2025-07-22 open Assets:Bank:Business USD
2025-07-22 open Assets:Bank:Personal USD

2. Виберіть систему бухгалтерського обліку

Beancount використовує метод подвійного запису, золотий стандарт бухгалтерського обліку протягом століть. Принцип простий: кожна транзакція впливає щонайменше на два рахунки. Для кожного дебету з одного рахунку має бути відповідний кредит на інший. Чарівність цієї системи полягає в тому, що сума всіх ваших рахунків завжди має дорівнювати нулю. Beancount автоматично застосовує це правило, тобто друкарська помилка або логічна помилка негайно піднімуть прапорець. Ви буквально не можете мати незбалансовані книги. (beancount)

3. Визначтеся з методом бухгалтерського обліку

У вас є два основних варіанти:

  • Касовий метод: Ви записуєте дохід, коли отримуєте гроші, і витрати, коли їх оплачуєте. Це простіше та безпосередньо відображає ваш грошовий потік.
  • Метод нарахування: Ви записуєте дохід, коли ви його заробляєте (наприклад, коли надсилається рахунок-фактура), і витрати, коли ви їх понесете (наприклад, коли отримуєте рахунок). Цей метод дає більш правдиве уявлення про фінансове здоров’я та діяльність компанії, особливо для компаній, що розвиваються. (Investopedia)

Ось приклад нарахування транзакції в Beancount. Ви записуєте дохід, коли надсилається рахунок, переміщуючи вартість у Assets:AccountsReceivable. Коли клієнт платить, ви переміщуєте готівку з AccountsReceivable на свій банківський рахунок.

; Приклад нарахування: виставлений рахунок, оплата пізніше
2025-07-22 * "Рахунок за дизайн №101"
Assets:AccountsReceivable 3000.00 USD
Income:Design

2025-08-15 * "Клієнт оплачує рахунок №101"
Assets:Bank:Business 3000.00 USD
Assets:AccountsReceivable

4. Зберіть свій набір інструментів

Краса Beancount полягає в його мінімалістській, модульній природі. Ваш основний набір включає:

  • Редактор + Git: Ваш улюблений текстовий редактор для журналювання транзакцій та Git для контролю версій, що дає вам повну, перевіряєму історію кожної зміни.
  • bean-report / bean-balance / Fava: Інструменти командного рядка, такі як bean-report, та приголомшливий веб-інтерфейс Fava, надають вам миттєві фінансові звіти, інформаційні панелі та потужні можливості фільтрації.
  • Імпортери: Багата екосистема імпортерів, створених спільнотою, може підключатися до ваших банківських каналів через CSV, Plaid або API для таких служб, як Stripe та PayPal, автоматизуючи більшу частину введення даних.

5. Класифікуйте кожну транзакцію

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

2025-07-30 * "Щомісячний рахунок AWS"
Expenses:Hosting:AWS 124.50 USD
Assets:Bank:Business
tag: "ops"

У цьому прикладі витрати чітко подані в розділі Expenses:Hosting:AWS. Використання tag: "ops" також дозволяє створювати перехресні звіти, наприклад, перегляд усіх операційних витрат незалежно від їхньої основної категорії. (IRS)

6. Зберігайте вихідні документи безпечно

IRS із задоволенням приймає цифрові копії квитанцій та рахунків-фактур. Скануйте паперові квитанції або пересилайте рахунки-фактури електронною поштою до спеціальної папки в хмарному сховищі (наприклад, Google Drive або Dropbox). Потім посилання на файл безпосередньо у вашому записі Beancount за допомогою метаданих. Це створює герметичний, автономний запис.

; Зображення квитанції, пов’язане як метадані
2025-07-18 * "Обід команди"
Expenses:Meals 85.10 USD
Assets:Bank:Business
receipt: "receipts/2025-07-18-team-lunch.jpg"

7. Зробіть бухгалтерський облік звичкою

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

Самостійна робота проти професійної допомоги

  • Самостійна робота: Для фрілансерів або малого бізнесу з передбачуваним обсягом транзакцій самостійний підхід з Beancount неймовірно ефективний. Однак доцільно провести коротку одноразову консультацію з CPA, щоб перевірити ваш план рахунків та переконатися, що ви на правильному шляху.
  • Професійний огляд: У міру масштабування вашого бізнесу, ускладнення транзакцій або зростання ризику відповідності, залучення професійного бухгалтера або аудитора для періодичних перевірок є безцінним. Ви можете продовжувати використовувати Beancount як основне джерело істини та просто експортувати потрібні їм звіти.

Контрольний список швидкого старту

  • Відкрийте окремі банківські рахунки для бізнесу.
  • Клонуйте стартовий репозиторій Beancount та визначте свої рахунки у accounts.bean.
  • Виберіть касовий метод або метод нарахування та дотримуйтесь його.
  • Налаштуйте імпортери для автоматизації введення даних з вашого банку (CSV), Stripe, PayPal тощо.
  • Позначайте та пишіть чіткі описи для кожної транзакції.
  • Звіряйте свою книгу з банківськими виписками щотижня або щомісяця.
  • Створюйте щомісячні звіти про доходи, баланс та грошові потоки за допомогою Fava або bean-report.
  • Регулярно створюйте резервні копії своїх файлів .bean (Git + зовнішнє сховище).

Додаткова література

Готові розпочати? Встановіть Beancount, здійсніть свій перший запис і замініть туман електронних таблиць на ясність простого тексту. Щасливого ведення обліку!