Прозора та аудійована бухгалтерія з Beancount і Fava
Вступ
Beancount і Fava – це інструменти бухгалтерського обліку з відкритим кодом, розроблені для того, щоб зробити ведення бухгалтерського обліку прозорим, відстежуваним і аудійованим. Beancount – це система бухгалтерського обліку з подвійним записом, яка використовує прості текстові файли для запису транзакцій, а Fava – це веб-інтерфейс, який представляє ці записи у вигляді зрозумілих звітів і візуалізацій. Завдяки усуненню пропрієтарних форматів даних і використанню контролю версій, Beancount забезпечує рівень ясності та підзвітності, який традиційному бухгалтерському програмному забезпеченню часто важко забезпечити. У цьому звіті розглядається, як підхід Beancount на основі простого тексту та зручний інтерфейс Fava працюють разом для підвищення прозорості, можливості аудиту та контролю користувачів у різних контекстах.
Ведення бухгалтерського обліку простим текстом за допомогою Beancount (технічні аспекти)
Дані у вигляді простого тексту: Beancount зберігає всі фінансові транзакції у простих текстових файлах. Кожен запис – це зрозумілий рядок (або набір рядків), що представляє транзакцію. Наприклад, готівкова покупка обіду на суму 5 доларів США може бути записана як:
2024-07-29 * "Купити бургер на обід"
Assets:Cash -5.00 USD
Expenses:Food 5.00 USD
У цьому форматі чітко видно дату, опис і рахунки. Кожна транзакція повинна бути збалансована (загальна сума дебетів дорівнює загальній сумі кредитів), тому помилки, такі як відсутній рахунок або неправильна сума, одразу виявляються парсером програмного забезпечення. Ця проста текстова спеціалізована мова для бухгалтерського обліку означає, що ваші фінансові дані можна читати або редагувати за допомогою будь-якого текстового редактора та обробляти за допомогою простих скриптів або команд.
Структура файлу: Файл бухгалтерської книги Beancount зазвичай містить директиви для ві дкриття рахунків, визначення товарів (валют), запису транзакцій і, можливо, твердження або перевірки балансу. Рахунки іменуються ієрархічно (наприклад, Assets:Bank:Checking, Expenses:Food:Grocery), що робить структуру ваших фінансів явною. Ви можете організовувати записи хронологічно або логічно, і навіть розділити книгу на кілька файлів (включивши їх в основний файл) для кращої організації. Оскільки дані – це просто текст, ви можете легко переставляти або реорганізовувати рахунки – наприклад, перейменування рахунку у всій книзі можна виконати за допомогою простої команди пошуку та заміни або командного рядка. Мартін Блез, творець Beancount, зазначає, що “текст розширює можливості” – ви навіть можете використовувати такі інструменти, як sed, щоб реорганізувати свої рахунки за всю історію за лічені секунди.
Інтеграція з системою контролю версій (Git): Мабуть, найбільшою технічною перевагою бухгалтерського обліку простим текстом є те, наскільки легко він інтегрується з системами контролю версій, такими як Git. Ваш файл .beancount (або файли) може зберігатися в репозиторії Git, що дозволяє відстежувати кожну зміну за допомогою історії комітів. Кожне додавання або зміна транзакції стає дифом, який можна переглянути рядок за рядком. Це забезпечує “аудиторський слід, необмежене скасування та співпрацю” з коробки. Наприклад, якщо запис редагується або видаляється, Git покаже, хто змінив його, коли і саме що було змінено – подібно до відстеження змін у вихідному коді. Це різко контрастує з непрозорими бухгалтерськими базами даних, які можуть показувати лише дату останньої зміни або вимагати спеціальних журналів для аудиту. Компанія, яка впровадила Beancount, повідомила, що використання Git дозволило кільком бухгалтерам працювати одночасно та знати “хто, де і коли вніс які зміни”, вирішивши проблеми співпраці та відстеження змін, з якими вони стикалися у традиційному програмному забезпеченні. На практиці ви навіть можете забезпечити перевірку у Git (наприклад, pre-commit hook, щоб запустити перевірки Beancount і запобігти фіксації незбалансованої книги). Розгляд книги як коду означає, що всі потужні інструменти для управління кодом – дифи, pull requests, code review – стають доступними для ваших бухгалтерських записів.
Введення та перенесення даних: Оскільки формат Beancount – це простий текст, легко імпортувати дані з інших джерел або експортувати для інших цілей. Ви можете вручну записувати записи або створити скрипт для перетворення банківських виписок у формат Beancount. Спільнота Beancount надає імпортери для поширених форматів, а інші інструменти бухгалтерського обліку простим текстом (Ledger, hledger) мають подібні формати, з доступними конвертерами. Ваші дані не прив’язані до однієї програми – як підкреслюється в одному з посібників, “ви ніколи не опинитеся в ситуації, коли ваші транзакційні дані зберігаються у двійковому об’єкті з невідомим форматом”. Фактично, ви можете взяти свій файл Beancount і написати простий парсер або використати інший інструмент для його читання, якщо це необхідно. Це робить технічну основу надзвичайно перспективною.
Переваги аудиту бухгалтерської книги у вигляді простого тексту
Зберігання фінансових записів у вигляді простого тексту дає значні переваги для аудиту та перевірки помилок:
-
Детальна історія змін: Кожна зміна в книгах відстежується за допомогою комітів контролю версій. Це створює хронологічний запис змін, який важко підробити, якщо використовувати такий сервіс, як GitHub, або практику підписаних комітів. Це подібно до наявності детального журналу аудиту для всіх транзакцій. Помилки можна відстежити до точного коміту, який їх вніс, а історичні версії книг легко отримати. У бухгалтерській книзі у вигляді простого тексту “дані можна ефективно контролювати версіями, забезпечуючи аудіторський слід і необмежене скасування” для виправлень. Навпаки, багато традиційних бухгалтерських систем або не зберігають повної історії змін, або змішують дані та коригування таким чином, що їх важко розплутати.
-
Відстежуваність і взаємний перегляд: Оскільки книга – це текст, кілька людей можуть переглядати її як код. Наприклад, у невеликій організації одна людина може пропонувати зміни до книги (додавання транзакцій, коригування записів) і відкривати pull request для перегляду другою людиною. Цей процес взаємного перегляду може виявити помилки або невідповідності до того, як вони будуть прийняті, так само як code review виявляє помилки. Згаданий вище спільний робочий процес був неможливим для команди, яка використовувала QuickBooks, що змусило їх перейти на Beancount для кращої підтримки кількох користувачів. Підхід на основі простого тексту робить співпрацю природною – легко узгоджувати розбіжності та об’єднувати зміни від різних бухгалтерів, уникаючи “блокування файлів” або обмежень для одного користувача, які є в деяких файлах бухгалтерського обліку настільних комп’ютерів.
-
Автоматична перевірка помилок: Beancount включає надійну вбудовану перевірку. Під час обробки файлу буде видано помилку, якщо будь-яка транзакція незбалансована (дебети ≠ кредити), якщо транзакції рахунку не відповідають заявленому балансу або якщо є невідповідності, такі як повторювані ідентифікатори транзакцій. Один користувач зазначає, що “завдяки внутрішнім перевіркам Beancount, я впевнений, що [мої записи] є правильними, щойно їх внесено до книги. Немає шансів на помилку…”. Іншими словами, якщо файл Beancount імпортується без помилок, ви маєте високий ступінь впевненості в тому, що основна бухгалтерська цілісність (наприклад, усі транзакції збалансовані) збережена. Наприклад, ви можете додати щомісячні твердження балансу з ваших банківських виписок, і Beancount “видасть помилку, якщо ваші транзакції не збігаються” з очікуваним кінцевим балансом. Це одразу виявляє пропуски або друкарські помилки. Традиційне програмне забезпечення також може забезпечувати збалансованість подвійного запису, але оскільки Beancount показує більше користувачеві, вам пропонується додавати явні перевірки (наприклад, твердження балансу) і бачити результати цих перевірок безпосередньо.
-
Виправлення записів зберігає історію: У належному бухгалтерському обліку не видаляють неправильну транзакцію, а додають виправний запис. Бухгалтерські книги у вигляді простого тексту заохочують цю практику (а з Git, навіть якщо ви змінили минулий запис, попередня версія залишається в історії). Аудитор може чітко бачити слід виправлень, а не підозрювати, що дані були змінені без запису. Хоча технічно ніщо не заважає користувачеві редагувати історію текстового файлу, якщо він має доступ, використання Git з цілісністю комітів (або навіть підписання комітів) може зменшити несанкціоновані або невідстежені зміни. Відкритість також сприяє хорошим звичкам: в одній дискусії було зазначено, що ви “не можете [просто] виправити запис” мовчки в бухгалтерському обліку у вигляді простого тексту, щоб це не було очевидно; ви повинні “робити виправні записи… [щоб] зберегти аудіторський слід”. Підсумовуючи, сама система є прозорою, тому будь-яка спроба підтасувати книги, ймовірно, залишить сліди.
-
Аудиторський слід для зовнішніх аудиторів: Якщо вам потрібно пройти формальний аудит (для бізнесу чи некомерційної організації), надання бухгалтерської книги Beancount – це як надання вихідного коду з повною історією версій. Аудитор може переглянути журнал необр облених транзакцій або ви можете створити супровідні документи (наприклад, звіти журналу або баланси) безпосередньо з вихідних даних, забезпечуючи узгодженість. Один користувач Beancount, якому потрібно було обґрунтувати податкові розрахунки владі, оцінив наявність “солідного запису всієї історії” кожної партії активів, що полегшило “дуже легко вказати” і довести, як були отримані цифри. Ясність запису у вигляді простого тексту в поєднанні з експортованими звітами може пришвидшити аудит, оскільки нічого не приховано за програмним забезпеченням – кожне число у звіті можна відстежити до рядка у файлі бухгалтерської книги.
-
Необмежене скасування та експерименти: Завдяки поєднанню тексту + контролю версій ви можете спробувати реструктуризувати або реорганізувати свої рахунки, не боячись. Якщо ідея не спрацює, ви можете повернутися до попереднього коміту. Ця свобода заохочує вдосконалення та коригування структури бухгалтерського обліку з часом (наприклад, розділення одного рахунку на кілька або додавання нових категорій), що в традиційній системі може бути ризикованим або незворотним після введення транзакцій. Користувачі відзначали, що з контрольними точками Git немає “жодних побоювань, що ми щось зламаємо під час експериментів” зі змінами в бухгалтерській книзі, оскільки завжди можна відкотитися назад. Це означає, що система бухгалтерського обліку може розвиватися плавно, а історія аудиту зберігається на кожному кроці.
Прозорість завдяки відкритим даним і відкритому коду
Підхід Beancount максимізує прозорість як у даних, так і в логіці:
-
Усунення непрозорих форматів: Beancount використовує простий, відкритий формат, який може прочитати будь-хто. На відміну від типового бухгалтерського програмного забезпечення, яке може зберігати дані у власному двійковому файлі або закритій базі даних, бухгалтерська книга Beancount – це просто тек ст. Цей “відкритий формат” означає “ваші дані відкриті і залишаться відкритими назавжди”. Вам не потрібен Beancount, щоб зрозуміти дані – у крайньому випадку ви можете відкрити книгу в текстовому редакторі або роздрукувати її. Усуваючи пропрієтарні сховища даних, Beancount гарантує, що ви ніколи не будете залежати від програмного забезпечення конкретного постачальника для доступу до власних фінансових записів. Наприклад, багато користувачів QuickBooks відчувають труднощі з експортом усіх своїх даних або перетворенням їх на нову систему. З Beancount перетворення є простим: дані вже у загальному форматі. За словами документації Beancount, “з відкритим форматом ви ніколи не опинитеся в ситуації, коли ваші дані зберігаються у двійковому об’єкті з невідомим форматом, а програмне забезпечення не підтримується”.
-
Ясність бухгалтерської логіки: Традиційні бухгалтерські програми виконують багато обчислень у фоновому режимі – підсумовують рахунки, застосовують обмінні курси, обчислюють залишки тощо. Хоча Beancount також це робить, логіка не прихована від користувача. Правила бухгалте рського обліку з подвійним записом є прозорими та послідовними: наприклад, якщо баланс неправильний, Beancount точно скаже вам, який рахунок і яка транзакція це спричинили. Крім того, сам Beancount – це код Python з відкритим кодом; якщо хтось дійсно захоче перевірити, як він обчислює, скажімо, середню собівартість інвестицій або як він генерує баланс, він може перевірити джерело або покластися на ретельний аналіз цього коду спільнотою. Поведінка програмного забезпечення задокументована та детермінована – немає жодного таємничого автоматичного виправлення записів або нерозголошених припущень. Це контрастує з деяким фінансовим програмним забезпеченням, яке може автоматично коригувати записи (створюючи приховані рахунки “різниці округлення” тощо) без повного усвідомлення користувача. З Beancount кожне окреме число в кожному звіті отримується з транзакцій, наданих користувачем, за допомогою відкритого процесу обчислення.
-
Розділення даних і програми: Ключовим аспектом дизайну бухгалтерського обліку простим текстом є те, що інструменти (Beancount, Fava) не володіють даними – ви володіє те. Файл даних є окремим і розглядається як вхідні дані лише для читання інструментами. Як зазначено у вступі на plaintextaccounting.org, програмне забезпечення “читає вхідні дані, не змінюючи їх, і [лише] виводить звіт”, що робить його “легким для розуміння та надійним”. Beancount ніколи не запише назад у ваш файл бухгалтерської книги самостійно; будь-яка зміна має надходити від вас (або інструменту редагування, який ви навмисно використовуєте). Це дає велику впевненість у тому, що те, що ви бачите, – це те, що ви ввели, без прихованих змін. Якщо програмне забезпечення поводиться неправильно або має помилку, ваші дані залишаються в безпеці та незмінними – критичний момент для довіри. Навпаки, непрозора система бухгалтерського обліку може змінювати дані під час оновлень або у разі виникнення помилки, і без прямого доступу до необроблених даних ви можете навіть не усвідомлювати цього. З Beancount, якщо щось здається неправильним у звіті, ви можете відкрити текстовий файл і перевірити його безпосередньо.
-
Спільнота з відкритим кодом і рецензування: Те, що Beancount і Fava є відкритим кодом, означає, що сотні очей можуть переглядати їх код і робити внесок у вдосконалення. Існує прозорість не лише в даних, але й у самому інструменті – жодних непрозорих алгоритмів. Наприклад, якщо виникнуть будь-які сумніви щодо того, як обчислюється амортизація або як обробляються конвертації валюти, можна перевірити вихідний код Beancount або обговорити це зі спільнотою розробників. Цей підхід, керований спільнотою, також призводить до швидкої ідентифікації помилок або невідповідностей, які зазвичай документуються публічно (наприклад, у випусках GitHub) і виправляються відкрито. Користувачі можуть навіть писати плагіни для розширення функціональності Beancount або забезпечення дотримання власних правил, і все це відкрито. У певному сенсі ця відкритість аналогічна науковій прозорості – методологія доступна для перевірки, а не “чорна скринька”.
-
Прозорість для нетехнічних зацікавлених сторін: Простий текст не означає, що нетехнічні люди залишаються в темряві. Насправді, це може підвищити прозорість для таких зацікавлених сторін, як бухгалтери, аудитори або члени команди, оскільки їм легко надати повний запис, який вони можуть перевірити за допомогою основних інструментів. Можна генерувати PDF- або HTML-звіти з книги для зручності читання, але вони завжди прив’язані до вихідних даних. Немає жодного секретного “другого набору книг”. Ця функція особливо важлива для організацій, які цінують відкритість. Наприклад, некомерційна організація може опублікувати свій файл бухгалтерської книги Beancount публічно в Інтернеті або на GitHub, щоб будь-хто міг перевірити, впевнена, що читачі можуть перевірити підсумки самостійно або побачити деталі транзакцій, не потребуючи спеціального програмного забезпечення. Дійсно, деякі припускали, що “відкриття вихідного коду [фінансових даних організації]” за допомогою таких інструментів принесе користь прозорості некомерційним організаціям і державним органам. Бухгалтерський облік простим текстом робить цей сценарій можливим.
Уникнення залежності від постачальника за допомогою інструментів з відкритим кодом
Залежність від постачальника виникає, коли використання власного бухгалтерського рішення прив’язує вас до певної компанії чи продукту, що ускладнює перенесення або підтримку ваших записів незалежно. Beancount і Fava, завдяки тому, що вони є відкритим кодом і базуються на простому тексті, фактично усувають залежність: