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

Бухгалтерський облік у звичайному тексті за допомогою Beancount (технічні аспекти)
Дані у простому тексті: Beancount зберігає всі фінансові транзакції у файлах простого тексту. Кожен запис — це зрозумілий людині рядок (або набір рядків), що представляє транзакцію. Наприклад, покупка обіду за готівку на $5 може бути записана так:
2024-07-29 * "Buy burger as lunch"
Assets:Cash -5.00 USD
Expenses:Food 5.00 USDУ цьому форматі дата, опис і рахунки чітко видимі. Кожна транзакція повинна збалансовуватися (загальні дебети дорівнюють загальним кредитам), тому такі помилки, як пропущений рахунок чи неправильна сума, негайно виявляються парсером програмного забезпечення. Ця проста текстова предметно-орієнтована мова для бухгалтерського обліку означає, що ваші фінансові дані можна читати чи редагувати в будь-якому текстовому редакторі та обробляти простими скриптами чи командами.
Структура файлу: Файл книги Beancount зазвичай містить директиви для відкриття рахунків, визначення товарів (валют), запису транзакцій, а також, можливо, твердження (assertions) чи перевірки балансу. Рахунки називаються ієрархічно (наприклад, Assets:Bank:Checking, Expenses:Food:Grocery), що робить структуру ваших фінансів явною. Ви можете впорядковувати записи хронологічно чи логічно й навіть розділяти книгу на кілька файлів (включаючи їх у головний файл) для кращої організації. Оскільки дані — це просто текст, ви можете легко переставляти чи рефакторити рахунки — наприклад, перейменування рахунку по всій книзі можна зробити простим пошуком і заміною або скриптом командного рядка. Мартін Бле (Martin Blais), творець Beancount, зазначає, що «текст дає силу» — ви навіть можете використовувати такі інструменти, як sed, щоб реорганізувати свої рахунки по всій історії за секунди.
Інтеграція з контролем версій (Git): Мабуть, найбільша технічна перевага бухгалтерського обліку в простому тексті — це те, як безшовно він інтегрується з системами контролю версій, такими як Git. Ваш файл .beancount (чи файли) може жити в репозиторії Git, тож щойно ви зафіксуєте (commit) зміну, вона записується в історію. Це практика, яку налаштовуєте ви, а не щось, що Beancount робить сам: кожне редагування потрапляє до аудиторського сліду, коли його зафіксовано, тож саме дисципліна фіксації (або хук, який фіксує за вас) перетворює щоденні редагування на придатний для рецензування запис. Коли це налагоджено, кожне зафіксоване додавання чи зміна транзакції стає diff'ом, який можна переглянути рядок за рядком, забезпечуючи «аудиторський слід, необмежений "відкат" і співпрацю». Для зафіксованої зміни Git показує хто її зробив, коли і що саме змінилося — подібно до відстеження змін у вихідному коді; незафіксоване редагування, що лежить у вашому робочому файлі, ще не є частиною цієї історії. Це різкий контраст із непрозорими бухгалтерськими базами даних, які можуть показувати лише дату останньої зміни або вимагати спеціальних журналів для аудиту. Компанія, яка впровадила Beancount, повідомила, що використання Git дозволило кільком бухгалтерам працювати одночасно й знати «хто, що, де і коли змінив», вирішивши проблеми співпраці та відстеження змін, з якими вони стикалися в традиційному програмному забезпеченні. На практиці ви навіть можете забезпечити валідацію в Git (наприклад, pre-commit hook для запуску перевірок Beancount і запобігання фіксації незбалансованої книги). Ставлення до книги як до коду означає, що всі потужні інструменти для керування кодом — diff'и, pull requests, рецензування коду — стають доступними для ваших бухгалтерських записів.
Введення даних і портативність: Оскільки формат Beancount — це простий текст, легко імпортувати дані з інших джерел чи експортувати для інших цілей. Ви можете вручну писати записи або написати скрипт для конвертації банківських виписок у формат Beancount. Спільнота Beancount надає імпортери для поширених форматів, а інші інструменти бухгалтерського обліку в простому тексті (Ledger, hledger) мають схожі формати з доступними конвертерами. Ваші дані не прив'язані до однієї програми — як підкреслює один посібник, «ви ніколи не опинитеся в ситуації, коли ваші транзакційні дані лежать у бінарному blob'і з невідомим форматом». Насправді ви могли б узяти свій файл Beancount і написати простий парсер чи використати інший інструмент, щоб прочитати його за потреби. Це робить технічну основу надзвичайно стійкою до майбутнього.
Переваги контролю звичайної текстової книги обліку
Зберігання фінансових записів у простому тексті дає значні переваги для аудиту та перевірки помилок:
-
Детальна історія змін: Кожна зафіксована зміна в книгах відстежується через контроль версій. Це створює хронологічний запис редагувань, який важко підробити, якщо використовувати такий сервіс, як GitHub, чи практику підписаних commit'ів. Це схоже на наявність детального журналу аудиту для всіх транзакцій. Помилки можна простежити до точного commit'а, який їх увів, а історичні версії книг легко відновити. У книзі простого тексту «дані можна ефективно контролювати версіями, забезпечуючи аудиторський слід і необмежений "відкат"» для виправлень. На противагу цьому, багато традиційних бухгалтерських систем або не зберігають повної історії редагувань, або змішують дані та коригування так, що їх важко розплутати.
-
Простежуваність і колегіальний огляд: Оскільки книга — це текст, кілька людей можуть переглядати її як код. Наприклад, у невеликій організації одна людина могла б запропонувати зміни до книги (додавання транзакцій, коригувальні записи) і відкрити pull request для перегляду другою людиною. Цей процес колегіального огляду може виявити помилки чи невідповідності до їх прийняття, так само як рецензування коду виявляє баги. Згаданий вище робочий процес співпраці був неможливим для команди, яка використовувала QuickBooks, що спонукало їх перейти на Beancount для кращої підтримки багатьох користувачів. Підхід простого тексту робить співпрацю природною — легко узгоджувати розбіжності й об'єднувати зміни від різних бухгалтерів, уникаючи «блокування файлів» чи обмежень на одного користувача, властивих деяким настільним бухгалтерським файлам.
-
Автоматична перевірка помилок: Beancount має надійну вбудовану валідацію. Коли ви обробляєте файл, він повідомляє про помилки, якщо будь-яка транзакція незбалансована (дебети ≠ кредити), якщо транзакції рахунку не відповідають затвердженому балансу, або якщо є невідповідності, як-от дубльовані ідентифікатори транзакцій. Варто бути точним щодо механізму, бо це визначає, наскільки на нього можна покладатися. Чиста книга завершує
bea checkз кодом 0; помилки перелічуються з ненульовим кодом виходу, тож чистий запуск — це справжній сигнал. Завантажувач на Python, навпаки, повертає розібрані записи та список помилок разом — він не зупиняється — тож будь-який інструмент, побудований на Beancount, повинен перевіряти цей список помилок; той, що його ігнорує, може продовжити роботу з недійсною книгою. Твердження про баланс працюють так само: додайте щомісячні твердження з ваших банківських виписок, і Beancount «видасть помилку, якщо ваші транзакції не збігаються» з очікуваним кінцевим балансом, виявляючи пропуски чи друкарські помилки щойно ви запустите перевірку. Чесний підсумок такий: Beancount перевіряє те, що його просять перевірити — балансування, твердження, дубльовані ідентифікатори — і безпосередньо показує результати; він не гарантує, що кожен подальший скрипт чи звіт діє на основі цих результатів, тож ставтеся до чистогоbea checkяк до контрольної точки, а не автоматичної гарантії. Оскільки Beancount відкриває користувачеві більше, ніж закрите програмне забезпечення, вас заохочують додавати явні перевірки, як-от твердження про баланс, і самостійно читати їхні результати. -
Коригувальні записи зберігають історію: У належному бухгалтерському обліку неправильну транзакцію не видаляють, а натомість додають коригувальний запис. Книги простого тексту заохочують цю практику (а з Git, навіть якби ви таки змінили минулий запис, попередня версія залишається в історії). Аудитор може чітко бачити слід виправлень, а не підозрювати, що дані було змінено без запису. Хоча технічно ніщо не заважає користувачеві редагувати історію текстового файлу, якщо він має доступ, використання Git із цілісністю commit'ів (або навіть підписування commit'ів) може пом'якшити несанкціоновані чи невідстежені зміни. Відкритість також сприяє добрим звичкам: в одному обговоренні зазначалося, що ви «не можете [просто] виправити запис» непомітно в бухгалтерському обліку простого тексту, щоб це не стало очевидним; вам слід «робити коригувальні записи… [щоб] зберегти аудиторський слід». Підсумовуючи, сама система прозора, тож будь-яка спроба підробити книги, ймовірно, залишить сліди.
-
Аудиторський слід для зовнішніх аудиторів: Якщо вам потрібно пройти формальний аудит (для бізнесу чи неприбуткової організації), надання книги Beancount — це як надання вихідного коду з повною історією версій. Аудитор може переглянути необроблений журнал транзакцій, або ви можете згенерувати підтвердні документи (як-от журнальні звіти чи баланси) безпосередньо з вихідних даних, забезпечуючи узгодженість. Один користувач Beancount, якому потрібно було обґрунтувати розрахунки податків перед органами влади, оцінив наявність «надійного запису всієї історії» кожного лоту активу, що робило «дуже легким вказати» й довести, як були отримані цифри. Ясність запису в простому тексті разом з експортованими звітами може прискорити аудит, оскільки ніщо не приховано за програмним забезпеченням — кожне число у звіті можна простежити до рядка у файлі книги.
-
Необмежений відкат і експериментування: Завдяки поєднанню тексту й контролю версій ви можете спробувати реструктурувати чи рефакторити свої рахунки без страху. Якщо ідея не спрацює, ви можете повернутися до попереднього commit'а. Ця свобода заохочує вдосконалення й коригування бухгалтерської структури з часом (наприклад, розділення одного рахунку на кілька чи додавання нових категорій), що в традиційній системі могло б бути ризикованим чи незворотним після введення транзакцій. Користувачі зазначали, що з контрольними точками Git «немає хвилювання, що ми щось зламаємо під час експериментів» зі змінами в книзі, оскільки завжди можна відкотитися. Це означає, що бухгалтерська система може розвиватися плавно, а історія, придатна для аудиту, зберігається на кожному кроці.
Зберігайте ціни, що стоять за звітом
Живі ціни оновлюють керовані дані оцінки без перезапису вашої книги чи створення commit'ів. Метадані каналу визначають джерело та час спостереження, а ваші власні ціни мають пріоритет для тієї самої дати й пари. Лише Git-commit книги не зберігає ревізію каналу, використану минулим звітом. Зберігайте датовані ціни, використані з книгою та звітом, коли вам потрібні відтворювані результати.
Прозорість через відкриті дані та відкритий код
Підхід Beancount максимізує прозорість як даних, так і логіки:
-
Усунення непрозорих форматів: Beancount використовує простий, відкритий формат, який може прочитати будь-хто. На відміну від типового бухгалтерського програмного забезпечення, яке може зберігати дані у пропрієтарному бінарному файлі чи закритій базі даних, книга Beancount — це просто текст. Цей «відкритий формат» означає, що «ваші дані відкриті й залишаться відкритими назавжди». Вам не потрібен Beancount, щоб зрозуміти дані — за потреби ви могли б відкрити книгу в текстовому редакторі чи роздрукувати її. Усуваючи пропрієтарні сховища даних, Beancount гарантує, що ви ніколи не залежите від програмного забезпечення конкретного постачальника для доступу до власних фінансових записів. Наприклад, багато користувачів QuickBooks стикалися з труднощами при експорті всіх своїх даних чи конвертації їх у нову систему. З Beancount конвертація проста: дані вже в універсальному форматі. За словами документації Beancount, «з відкритим форматом ви ніколи не опинитеся в ситуації, коли ваші дані лежать у бінарному blob'і з невідомим форматом, а програмне забезпечення більше не підтримується».
-
Ясність бухгалтерської логіки: Традиційні бухгалтерські програми виконують багато обчислень за лаштунками — підсумовують рахунки, застосовують курси обміну, розраховують баланси тощо. Хоча Beancount також це робить, логіка не прихована від користувача. Правила подвійного запису прозорі й послідовні: наприклад, якщо баланс не збігається, Beancount точно скаже, який рахунок і яка транзакція це спричинили. Більше того, сам Beancount — це відкритий код Python; якби хтось справді захотів перевірити, як він обчислює, скажімо, середню вартість базису для інвестицій чи як генерує баланс, він міг би дослідити вихідний код або покластися на перевірку цього коду спільнотою. Поведінка програмного забезпечення задокументована й детермінована — немає загадкового автокоригування записів чи нерозкритих припущень. Це контрастує з деяким фінансовим програмним забезпеченням, яке може автоматично коригувати записи (створюючи приховані рахунки «округлень» тощо) без повного відома користувача. З Beancount кожне число в кожному звіті походить від транзакцій, наданих користувачем, через відкритий процес обчислень.
-
Розділення даних і застосунку: Ключовий аспект дизайну бухгалтерського обліку в простому тексті — інструменти (Beancount, Fava) не володіють даними — ви володієте. Файл даних окремий і трактується інструментами як вхідні дані лише для читання. Як зазначає вступ на plaintextaccounting.org, програмне забезпечення «читає вхідні дані, не змінюючи їх, і [лише] виводить звіт», що робить його «легким для розуміння й надійним». Beancount ніколи не писатиме назад у ваш файл книги сам; будь-яка зміна має надходити від вас (або інструмента-редактора, який ви свідомо використовуєте). Це дає велику впевненість, що те, що ви бачите, — це те, що ви ввели, без прихованих змін. Якщо програмне забезпечення працює некоректно чи має баг, ваші дані залишаються безпечними й незмінними — критично важливий момент для довіри. На противагу цьому, непрозора бухгалтерська система може змінювати дані під час оновлень чи в разі бага, і без прямого доступу до необроблених даних ви могли б навіть не помітити цього. З Beancount, якщо щось у звіті здається неправильним, ви можете відкрити текстовий файл і переглянути його безпосередньо.
-
Спільнота відкритого коду та перевірка: Те, що Beancount і Fava мають відкритий код, означає, що сотні очей можуть переглядати їхній код і долучатися до покращень. Прозорість є не лише в даних, а й в самому інструменті — жодних непрозорих алгоритмів. Наприклад, якби виникло будь-яке занепокоєння щодо того, як обчислюється амортизація чи як обробляються конвертації валют, можна було б перевірити вихідний код Beancount чи обговорити це зі спільнотою розробників. Цей підхід, керований спільнотою, також веде до швидкого виявлення багів чи невідповідностей, які зазвичай публічно документуються (наприклад, у GitHub issues) і виправляються відкрито. Користувачі навіть можуть писати плагіни, щоб розширити функціональність 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-експорт фінансів, і їхній бухгалтер «може без проблем орієнтуватися [у] фінансах», а вони «використовують 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 задовольняє потребу в «гарному інтерфейсі та можливостях експорту», щоб поділитися даними, скажімо, з фінансовим радником чи просто візуалізувати їх самостійно. Те, що інструменти є FOSS (вільне програмне забезпечення з відкритим кодом), дає людям впевненість, що «дані будуть придатними до використання й через 20 років» — важлива міркування для довічних фінансових записів. На практиці особисті користувачі автоматизували імпорт з банків, писали власні скрипти для категоризації витрат і навіть використовували Beancount для відстеження таких речей, як бонуси лояльності чи криптовалюти. Вони ставляться до своїх фінансів з тією ж строгістю, що й до програмного проєкту, в результаті чого отримують особистий аудиторський слід, який може бути неймовірно детальним. Це може бути безцінним, наприклад, якщо потрібно оскаржити транзакцію в банку чи просто поміркувати над звичками витрат із повною прозорістю щодо того, куди пішов кожен долар.
-
Малий бізнес і стартапи: Малі компанії та стартапи часто потребують спільного ведення книг і записів, готових до аудиту, але можуть не мати бюджету на висококласні бухгалтерські системи. Beancount із репозиторієм Git може слугувати легкою бухгалтерською системою з підтримкою багатьох користувачів. Кілька членів команди можуть долучатися до книги (наприклад, один вносить витрати, інший записує продажі) через pull requests чи спільний репозиторій, і кожна зміна відстежується. Згаданий раніше приклад компанії з ~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) — зрозумілі людині, легко експортувати чи обробляти. Жодного пропрієтарного кодування. Ви можете відкрити книгу в будь-якому текстовому редакторі й зрозуміти її. | Часто пропрієтарні формати файлів чи бази даних. Дані можуть зберігатися в бінарних blob'ах, які потребують програмного забезпечення для інтерпретації. Обмежена пряма читабельність — зазвичай потрібно використовувати функції експорту застосунку, щоб отримати дані. |
| Аудиторський слід та історія | Повна історія відстежується зовнішньо через Git чи іншу VCS. Кожне додавання/зміна реєструється з автором і часовою міткою (через метадані commit'а). Ніщо ніколи не втрачається по-справжньому; «відкат» необмежений завдяки поверненню до попереднього commit'а. Сама книга може містити анотації чи позначки для виправлень, а 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, веде до більшої прозорості, легшого аудиту й більшого контролю над власними фінансовими даними, ніж може запропонувати традиційне бухгалтерське програмне забезпечення.