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

Як Beancount забезпечує прозорість і підзвітність

Книги у звичайному текстовому форматі Beancount і Fava залишаються прозорими та підзвітними: кожна зміна — це перевірний файловий diff, який можна відстежити.

Вступ

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

Ознайомтеся з живим прикладом книги обліку:

Відкрити Приклад книги обліку у новій вкладці

Звіт про прибутки та збитки публічної книги обліку Apple на beancount.io з діаграмою чистого прибутку та розбивкою доходів і витрат

Дослідити живу книгу обліку →

Бухгалтерський облік у звичайному тексті за допомогою Beancount (технічні аспекти)

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

2024-07-29 * "Buy burger as lunch"
    Assets:Cash            -5.00 USD
    Expenses:Food           5.00 USD

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

Структура файлу: Файл книги обліку Beancount зазвичай містить директиви для відкриття рахунків, визначення товарів (валют), запису транзакцій, а також, можливо, перевірок балансу. Рахунки називаються ієрархічно (наприклад, Assets:Bank:Checking, Expenses:Food:Grocery), що робить структуру ваших фінансів явною. Ви можете організувати записи хронологічно або логічно і навіть розділити книгу обліку на декілька файлів (включивши їх в основний файл) для кращої організації. Оскільки дані — це просто текст, ви можете легко переставляти або реорганізовувати рахунки — наприклад, перейменування рахунку у всій книзі обліку можна зробити за допомогою простого пошуку та заміни або скрипта командного рядка. Мартін Бле, творець Beancount, зазначає, що "текст дає свободу" — ви навіть можете використовувати такі інструменти, як sed, щоб за секунди реорганізувати свої рахунки у всій історії.

Інтеграція з контролем версій (Git): Мабуть, найбільша технічна перевага бухгалтерського обліку у звичайному тексті — це безшовна інтеграція з системами контролю версій, такими як Git. Ваш файл (або файли) .beancount може зберігатися в репозиторії Git, тому після коміту зміни вона фіксується в історії. Це практика, яку ви налаштовуєте самі, а не те, що Beancount робить сам по собі: кожна правка потрапляє в журнал аудиту, коли її закомічено, тому дисципліна комітів (або хук, який комітить за вас) перетворює повсякденні правки на запис, який можна переглянути. З таким підходом кожне закомічене додавання або зміна транзакції стає diff, який можна переглядати по рядках, що забезпечує "журнал аудиту, безмежне 'скасування' та співпрацю". Для закоміченої зміни Git показує, хто її зробив, коли і що саме змінилося — подібно до відстеження змін у вихідному коді; незакомічена правка у вашому робочому файлі ще не є частиною цієї історії. Це різко контрастує з непрозорими бухгалтерськими базами даних, які можуть показувати лише дату останньої зміни або вимагати спеціальних журналів для аудиту. Компанія, яка впровадила Beancount, повідомила, що використання Git дозволило декільком бухгалтерам працювати одночасно і знати "хто, що, де і коли змінив", вирішивши проблеми співпраці та відстеження змін, з якими вони стикалися в традиційному програмному забезпеченні. На практиці ви навіть можете забезпечити перевірку в Git (наприклад, pre-commit hook для запуску перевірок Beancount і запобігання коміту незбалансованої книги обліку). Ставлення до книги обліку як до коду означає, що всі потужні інструменти управління кодом — diff, pull request, перегляд коду — стають доступними для ваших бухгалтерських записів.

Введення даних і переносимість: Оскільки формат Beancount — це звичайний текст, легко імпортувати дані з інших джерел або експортувати для інших цілей. Ви можете вручну писати записи або скриптувати конвертацію банківських виписок у формат Beancount. Спільнота Beancount надає імпортери для поширених форматів, а інші інструменти бухгалтерського обліку у звичайному тексті (Ledger, hledger) мають подібні формати з доступними конвертерами. Ваші дані не прив'язані до однієї програми — як підкреслює один посібник, "ви ніколи не опинитеся в ситуації, коли ваші дані про транзакції знаходяться в бінарному файлі невідомого формату". Фактично, ви можете взяти свій файл Beancount і написати простий парсер або використати інший інструмент для його читання, якщо це потрібно. Це робить технічну основу надзвичайно перспективною.

Переваги контролю звичайної текстової книги обліку

Зберігання фінансових записів у звичайному тексті дає значні переваги для контролю та перевірки помилок:

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

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

  • Автоматична перевірка помилок: Beancount включає надійну вбудовану перевірку. Коли ви обробляєте файл, він повідомляє про помилки, якщо будь-яка транзакція незбалансована (дебети ≠ кредити), якщо транзакції рахунку не збігаються із заявленим балансом або якщо є невідповідності, як-от дублікати ідентифікаторів транзакцій. Варто бути точним щодо механізму, оскільки це визначає, наскільки ви можете на нього покладатися. bea check завершується з ненульовим статусом і виводить ці проблеми, тому чистий запуск є реальним сигналом. Навпаки, завантажувач Python повертає розібрані записи та список помилок разом — він не зупиняється — тому будь-який інструмент, побудований на Beancount, повинен перевіряти цей список помилок; той, хто його ігнорує, може продовжувати працювати з недійсною книгою обліку. Перевірки балансу працюють так само: додайте щомісячні перевірки з ваших банківських виписок, і Beancount "видасть помилку, якщо ваші транзакції не збігаються" з очікуваним кінцевим балансом, виявляючи пропуски або помилки, щойно ви запустите перевірку. Чесною підсумковою оцінкою є те, що Beancount перевіряє те, що його просять перевірити — балансування, твердження, дублікати id — і безпосередньо показує результати; він не гарантує, що кожен подальший скрипт або звіт діє на основі цих результатів, тому ставтеся до чистого bea check як до контрольної точки, а не автоматичної гарантії. Оскільки 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, завдяки тому, що вони мають відкритий код і базуються на звичайному тексті, практично усувають залежність:

  • Ліцензія з відкритим кодом і спільнота: Beancount (розпочатий Мартіном Бле близько 2008 року) є безкоштовним і має відкритий код, як і Fava. Немає ліцензійних зборів, підписок або обмежень на використання. Ви можете використовувати ці інструменти для особистих фінансів, бухгалтерії бізнесу, некомерційних організацій або для будь-яких цілей без дозволу. Оскільки вихідний код відкритий, навіть якщо розробка Beancount сповільниться або зупиниться, спільнота зможе продовжити його підтримку або створити форк. Ваше програмне забезпечення раптово не зникне і не змінить умови. Це страховка порівняно з хмарними бухгалтерськими сервісами, які можуть закритися або змінити ціни. Це також означає, що ви можете володіти процесом: як сказав один користувач, "я можу повозитися з вихідним кодом, якщо щось мені не до вподоби, і бути впевненим, що мої дані будуть придатні для використання через 20 років". Довговічність даних — це основна обіцянка: оскільки формат даних — звичайний текст і задокументований, навіть через десятиліття його має бути тривіально просто розібрати. Для порівняння, згадайте файли QuickBooks багаторічної давнини або стародавні пропрієтарні формати, які сьогодні дуже важко відкрити (якщо програмне забезпечення взагалі працює на сучасних системах).

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

  • Уникнення комерційної залежності: Багато компаній переростають своє бухгалтерське програмне забезпечення або стикаються з обмеженнями постачальника. Згадана раніше компанія, яка перейшла на Beancount, зазначила проблеми як із локальними, так і з хмарними пропрієтарними рішеннями, включно із занепокоєннями про "довговічність або довготривалість компанії, що стоїть за програмним забезпеченням". Перейшовши на інструмент з відкритим кодом, вони забезпечили, що їхній бухгалтерський процес перебуває під їхнім контролем і не залежить від успіху постачальника. По суті, Beancount звільняє користувачів від залежності від одного постачальника або необхідності дорогих корпоративних оновлень у міру масштабування. Також немає нав'язування додаткових модулів — усе у ваших руках, щоб розширювати за потреби.

  • Переносимість даних: Оскільки дані Beancount можна легко експортувати в поширені формати (CSV, JSON за допомогою різних команд, або дані можна завантажити в Python для спеціального експорту), ви можете інтегруватися з іншими системами без обмежень. Наприклад, якщо вам потрібно надати фінансові дані програмі для подання податків, ви можете написати скрипт для експорту. Або якщо ви вирішите перейти на SQL-систему, ви зможете імпортувати туди книгу обліку. Ключове те, що ваші дані належать вам у придатній формі завжди. У пропрієтарних системах, навіть якщо ви можете експортувати, ви часто втрачаєте частину інформації або точності (наприклад, втрачаються вкладення, метадані або точний журнал аудиту змін). З Beancount вся інформація (окрім будь-яких прикріплених документів, які ви все одно зберігаєте у звичайних файлах) є звичайним текстом і залишається з вами.

  • Відсутність залежності від функцій: Філософія відкритого коду для Fava (вебінтерфейсу) також означає, що навіть розширені функції не спрямовані на те, щоб прив'язати вас. Наприклад, творець хостинг-сервісу Beancount зазначив, що вони уникають додавання будь-яких "приватних функцій для прив'язки користувачів" — натомість вони повертають покращення у проєкти з відкритим кодом Fava/Beancount. Це мислення в спільноті гарантує, що вдосконалення приносять користь усім, і ви не застрягнете на модифікованій версії. Іншими словами, ви можете самостійно розмістити сервіс або перейти на інший у будь-який час; робочий процес залишається стандартним. Це контрастує з постачальниками, які можуть пропонувати "експорт", але лише у форматі, який конкурент не може легко імпортувати, таким чином утримуючи вас, якщо ви не залишитеся з ними.

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

Fava: Зручний для людини інтерфейс для Beancount

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

(Fava) Вебінтерфейс Fava надає багаті, зрозумілі людині подання вашої книги обліку. Наприклад, на скріншоті показано діаграму-дерево "Звіту про прибутки та збитки" з розбивкою доходів і витрат за категоріями. Такі візуалізації та звіти допомагають користувачам та аудиторам швидко осягнути фінансові закономірності та виявити аномалії.

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

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

Прозорість даних у Fava: Важливо зазначити, що Fava не приховує дані і не дозволяє "таємних" редагувань. Будь-яка транзакція, додана через вебредактор Fava (Fava має редактор і форму введення транзакцій), фактично записується у текстовий файл Beancount. Це означає, що єдиним джерелом істини залишається текстова книга обліку. Роль Fava полягає в тому, щоб представити це джерело істини у різні корисні способи. Наприклад, діаграми Fava можуть показувати ваш чистий капітал з часом або кругову діаграму витрат за категоріями. Вони динамічно генеруються з даних і дають прозоре уявлення про тенденції, які може бути важко помітити в необроблених даних. Аномалії, такі як раптовий стрибок у категорії витрат, стають візуально очевидними, і на них можна натиснути, щоб переглянути базові записи. У традиційній системі вам, можливо, доведеться запускати кілька звітів або запитів, щоб дослідити аномалію; Fava робить це інтерактивним.

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

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

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

Приклади використання та реальні сценарії

Прозорість і контрольованість Beancount і Fava приносять користь у багатьох сценаріях — від особистих фінансів до бухгалтерії організацій. Ось кілька помітних прикладів використання:

  • Ентузіасти особистих фінансів: Люди, які самостійно керують своїми фінансами, можуть досягти високого рівня ясності та контролю за допомогою Beancount. Для того, хто комфортно почувається з технологіями, книга обліку у звичайному тексті означає, що вони можуть точно відстежувати кожну витрату, інвестицію та категорію бюджету. Контрольованість тут перетворюється на особисте заспокоєння — ви можете відповісти на такі питання, як "Чи записав я цю транзакцію?" або "Як змінилися мої витрати минулого місяця?", переглядаючи diff або використовуючи діаграми Fava. Система перевірки помилок і подвійний запис гарантують, що помилки у відстеженні мінімізовані або позначені. Один блогер описав свою ідеальну систему як "безвідмовну: важко зіпсувати мою звітність і легко зрозуміти, коли я роблю помилку", і саме це забезпечують перевірки Beancount. Такі користувачі також цінують, що система є вичерпною (може охопити всі аспекти їхніх фінансів) і орієнтованою на дані (дозволяє аналіз з часом). Інтерфейс Fava задовольняє потребу в "гарному інтерфейсі та можливостях експорту", щоб ділитися даними, наприклад, з фінансовим радником або просто візуалізувати їх самостійно. Той факт, що інструменти є ВПЗ (вільне та відкрите програмне забезпечення), дає людям впевненість, що "дані будуть придатні для використання через 20 років" — важливе міркування для довічних фінансових записів. На практиці користувачі автоматизували імпорт із банків, писали власні скрипти для категоризації витрат і навіть використовували Beancount для відстеження таких речей, як бонусні бали або криптовалюти. Вони ставляться до своїх фінансів із такою ж суворістю, як до програмного проєкту, що призводить до особистого журналу аудиту, який може бути неймовірно детальним. Це може бути безцінно, наприклад, якщо потрібно оскаржити транзакцію в банку або просто замислитися над своїми звичками витрачати з повною прозорістю щодо того, куди пішов кожен долар.

  • Малий бізнес і стартапи: Малі компанії та стартапи часто потребують спільного ведення книг і записів, готових до аудиту, але можуть не мати бюджету на дорогі бухгалтерські системи. Beancount із репозиторієм Git може служити легкою бухгалтерською системою з підтримкою кількох користувачів. Кілька членів команди можуть вносити зміни до книги обліку (наприклад, один вводить витрати, інший записує продажі) через pull request або спільний репозиторій, і кожна зміна відстежується. Наведений раніше приклад компанії з ~60 співробітниками, яка перейшла на Beancount, є показовим: вони назвали співпрацю кількох користувачів та відстеження історичних змін причинами відмови від QuickBooks. З Beancount вони могли точно бачити, хто вніс кожен запис, і за потреби відкотити зміни, чого було неможливо в попередньому програмному забезпеченні. Ще одна практична перевага для бізнесу — інтеграція з іншими системами — оскільки дані Beancount доступні, розробник у компанії може написати скрипт для інтеграції бухгалтерських даних з іншими інструментами (для бюджетування, фінансового моделювання тощо) без проблем із API постачальника чи експортом. Fava можна використовувати внутрішньо, щоб менеджери могли переглядати фінансові звіти на вимогу, не ризикуючи випадково змінити дані. Крім того, компанії можуть прикріплювати рахунки-фактури, квитанції та договори через посилання, тому книга обліку стає єдиним аудиторським файлом для кожної транзакції (чудово для бухгалтерів, які проводять квартальні огляди або готуються до подання податків). Важливо, що використання інструментів з відкритим кодом означає, що бізнес не платить абонентську плату та уникає ризику переростання можливостей програмного забезпечення. Якщо їм потрібен новий звіт чи спеціальна функція, вони можуть реалізувати плагін або зробити запит самостійно. Наприклад, стартап, який працює з мультивалютами та обліком опціонів на акції, виявив, що гнучкість Beancount (обробка собівартості, партій тощо) є кращою, і адаптував його під свої потреби — щось, що було б складно або неможливо в закритій системі. Коротше кажучи, малий бізнес отримує прозору книгу обліку, яку може перевірити будь-яка зацікавлена сторона або аудитор, і зберігає повний контроль над тим, як керувати та представляти свої фінансові дані.

  • Некомерційні організації та НУО: Організації, які цінують прозорість — як-от благодійні організації, групи фінансування проєктів з відкритим кодом або НУО — знаходять ідеологічну спорідненість із Beancount/Fava. Вони можуть тримати свої книги відкритими та підзвітними перед донорами, радами та громадськістю. Публікуючи книгу обліку (або надаючи її на запит), вони дозволяють зовнішнім спостерігачам перевірити, що кошти використовуються за призначенням. Оскільки все базується на подвійному записі та підлягає аудиту, донори отримують вищу впевненість, що фінансова звітність не сфабрикована — вони можуть простежити пожертву від книги доходів до її розподілу у витратах у файлі книги обліку. Деякі некомерційні організації також мають бухгалтерів-волонтерів; використання робочого процесу зі звичайним текстом означає, що волонтери можуть робити внесок із будь-якого місця, використовуючи стандартну співпрацю Git, без необхідності дорогих ліцензій. Зростає дискусія про "бухгалтерські книги з відкритим кодом" для некомерційних організацій і навіть державних бюджетів. Книги обліку у звичайному тексті роблять це можливим, оскільки бар'єр доступу низький (просто відкрийте файл або перегляньте його на такій платформі, як GitHub), а цілісність даних захищена форматом та історією. Уявіть НУО, яка отримує гранти — використання кожного гранту можна позначити тегом і відстежувати через книгу обліку, а рецензент міг би відфільтрувати за цим тегом у Fava, щоб побачити всі витрати, покриті грантом. Такий рівень прозорості будує довіру із зацікавленими сторонами. Крім того, відсутність залежності від постачальника тут є вирішальною: НУО можуть існувати десятиліттями, і їм потрібно гарантувати, що їхні фінансові записи не стануть нечитабельними, якщо компанія-розробник програмного забезпечення зникне або почне стягувати непомірну плату. Використання Beancount вирішує це, гарантуючи довгострокову доступність. Навіть дотримання нормативних вимог можна полегшити: якщо аудитору потрібен нестандартний звіт, відкритість даних означає, що його можна згенерувати без очікування на постачальника. Наприклад, якщо регулятор запитує розбивку всіх витрат, пов'язаних із конкретною програмою, НУО може написати швидкий запит у Beancount (або використати фільтри Fava), щоб отримати саме це, а не обмежуватися звітами, які надає постачальник програмного забезпечення.

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

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

Стає зрозуміло, що Beancount+Fava значно відрізняються від традиційного бухгалтерського програмного забезпечення (такого як QuickBooks, Xero, Sage або навіть деяких інструментів з відкритим кодом, як GnuCash) за прозорістю, контрольованістю та контролем. Таблиця нижче підкреслює ключові відмінності:

АспектBeancount та Fava (бухгалтерський облік у звичайному тексті)Традиційне бухгалтерське програмне забезпечення
Формат данихЗвичайні текстові файли (UTF-8) — зрозумілі людині, легко експортувати або маніпулювати. Жодного пропрієтарного кодування взагалі. Ви можете відкрити книгу обліку в будь-якому текстовому редакторі та зрозуміти її.Часто пропрієтарні формати файлів або бази даних. Дані можуть зберігатися в бінарних файлах, які потребують програмного забезпечення для інтерпретації. Обмежена пряма читабельність — зазвичай потрібно використовувати функції експорту програми, щоб отримати дані.
Журнал аудиту та історіяПовна історія відстежується зовнішньо через Git або іншу систему контролю версій. Кожне додавання/зміна фіксується з автором та часовою міткою (через метадані коміту). Ніщо ніколи по-справжньому не втрачається; "скасування" безмежне за допомогою повернення до попереднього коміту. Сама книга обліку може містити анотації або прапорці для виправлень, а Git забезпечує підзвітність змін.Журнал аудиту зазвичай є опційною функцією (якщо він взагалі існує). Деяке програмне забезпечення фіксує, хто востаннє редагував транзакцію, але детальна історія версій кожної зміни поля є рідкістю. Часто можна редагувати або навіть видаляти транзакції без постійного сліду, особливо в однокористувацьких настільних конфігураціях. Багатокористувацькі системи (як QuickBooks Enterprise або Oracle Netsuite) мають певне відстеження змін, але воно не таке прозоре та доступне, як історія Git.
Прозорість логікиПовністю прозорі обчислення. Правила подвійного запису застосовуються відкрито, а звіти генеруються підсумовуванням даних книги обліку. Алгоритми (код з відкритим кодом) підлягають перевірці спільнотою. Якщо число з'являється у звіті, ви можете точно простежити, які транзакції сприяли йому. Нічого не відбувається, крім того, що визначено директивами книги обліку або добре задокументованими правилами Beancount.Непрозорі внутрішні процеси. Користувачі повинні довіряти модулю звітності програмного забезпечення, що він точно відображає дані. Якщо виникає невідповідність, може знадобитися підтримка постачальника для розслідування. Формули для певних розрахунків (наприклад, визнання доходу, амортизація) можуть бути недоступні кінцевому користувачу, якщо програмне забезпечення їх не показує. У закритих системах помилки або особливості можуть залишатися прихованими.
Перевірка помилокЖорстке застосування подвійного запису та опційні перевірки. Запуск bea check повідомляє про кожну незбалансовану транзакцію або невдалу перевірку та завершується з ненульовим статусом, тому проблеми виникають негайно, і їх слід виправити, перш ніж покладатися на звіти (вбудований завантажувач повертає ці помилки разом із записами, а не зупиняється). Додаткові плагіни можна використовувати для індивідуальних перевірок. Користувач дізнається про проблеми під час запуску інструмента або через індикатори помилок у Fava.Дуже варіюється — багато систем забезпечують баланс у кожній транзакції, але деякі дозволяють тимчасово незбалансовані стани або автоматичне балансування записів. Пакетний імпорт даних може не позначати дублікати або логічні помилки, якщо вручну не запустити звіт аудиту. Користувач може виявити помилки лише під час звірки або взагалі не виявити. Деяке програмне забезпечення має звіти аудиту, але їх потрібно викликати та інтерпретувати, а не помилки показуються одразу.
Контроль і налаштуванняКористувачі мають повний контроль: вони можуть писати власні скрипти (на Python або з використанням мови запитів Beancount) для генерації спеціалізованих звітів або автоматизації завдань. Дані можна масово редагувати стандартними текстовими інструментами. Будучи відкритим кодом, можна розширювати функціональність або виправляти помилки. Існує система плагінів для Beancount, і Fava також підтримує розширення. Це означає, що бухгалтерська система може адаптуватися до унікальних потреб (наприклад, відстеження немонетарних одиниць, інтеграція з іншими системами), не чекаючи на постачальника.Зазвичай обмежено тим, що надає постачальник. Деяке програмне забезпечення дозволяє плагіни або додаткові модулі, але в обмеженій структурі. Індивідуальна звітність може вимагати використання мови скриптів постачальника або зовнішнього API (якщо він є) — що може бути обмеженим або вимагати додаткової оплати. Масові правки або глобальні зміни (наприклад, перейменування рахунку у всіх транзакціях) можуть вимагати написання SQL (для тих, хто має доступ) або бути взагалі неможливими без експорту в CSV та повторного імпорту. Користувач, як правило, не може сам виправити проблеми в програмному забезпеченні та повинен чекати офіційних оновлень.
Залежність від постачальникаЖодної. Програмне забезпечення безкоштовне у використанні, а формат даних відкритий. Ви можете будь-коли мігрувати на іншу систему, конвертувавши текст (навіть на інші системи зі звичайним текстом, як Ledger/hledger, або в CSV для електронних таблиць). Жодної залежності від однієї компанії; оновлення керуються спільнотою. Ваші дані залишаються доступними, навіть якщо Beancount буде припинено, завдяки простоті формату.Високий ризик залежності. Дані часто потребують спеціальних процедур експорту для використання в інших місцях, які можуть не охоплювати все (наприклад, вкладення або повні журнали аудиту можуть не експортуватися). Перехід на інше програмне забезпечення може бути дорогим і трудомістким, часто вимагаючи сторонніх інструментів конвертації або початку з нуля. Якщо програмне забезпечення є передплатним, ви можете втратити доступ до даних, коли перестанете платити, або якщо компанія закриє свій сервіс. Навіть програмне забезпечення з відкритим кодом із графічним інтерфейсом (як GnuCash), яке використовує XML або SQL-бекенди, важче контролювати версіями і може прив'язати вас до цього формату.

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

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

Висновок

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

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

Джерела: Уся інформація в цьому звіті взята з офіційної документації Beancount, досвіду користувачів та обговорень у спільноті бухгалтерського обліку у звичайному тексті. Ключові джерела включають нотатки про дизайн Beancount Мартіна Бле, базу знань plaintextaccounting.org, тематичні дослідження користувачів з Hacker News та форумів спільноти, а також документацію Fava. Вони ілюструють консенсус, що бухгалтерський облік у звичайному тексті з такими інструментами, як Beancount і Fava, веде до більшої прозорості, легшого аудиту та більшого контролю над фінансовими даними, ніж традиційне бухгалтерське програмне забезпечення.

Джерело: https://beancount.io/uk/docs/Solutions/transparent-and-auditable