Преминете към основното съдържание

Прозрачно и подлежащо на одит счетоводство с Beancount и Fava

Въведение

Beancount и Fava са инструменти за счетоводство с отворен код, предназначени да направят счетоводството прозрачно, проследимо и одитируемо. Beancount е система за двойно счетоводство, която използва обикновени текстови файлове за записване на транзакции, докато Fava е уеб интерфейс, който представя тези записи в лесни за четене от човека отчети и визуализации. Чрез елиминиране на патентовани формати на данни и използване на контрол на версиите, Beancount дава възможност за ниво на яснота и отчетност, което традиционният счетоводен софтуер често трудно осигурява. Този отчет разглежда как подходът на Beancount с обикновен текст и удобният за потребителя интерфейс на Fava работят заедно, за да подобрят прозрачността, одитируемостта и потребителския контрол в различни контексти.

transparent-and-auditable

Счетоводство с обикновен текст с 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 хранилище, което ви позволява да проследявате всяка промяна с история на коммитите. Всяко добавяне или модификация на транзакция става diff, който може да бъде прегледан ред по ред. Това осигурява “одиторска следа, неограничено „undo“ и сътрудничество” веднага. Например, ако запис е редактиран или премахнат, Git ще покаже кой го е променил, кога и точно какво е променено – подобно на проследяването на промени в изходния код. Това е ярък контраст с непрозрачните счетоводни бази данни, които може да показват само последната дата на модификация или да изискват специални логове за одит. Компания, която е внедрила Beancount, съобщава, че използването на Git е позволило на няколко счетоводители да работят едновременно и да знаят “кой каква промяна е направил къде и кога”, решавайки проблемите със сътрудничеството и проследяването на промени, с които са се сблъсквали в традиционния софтуер. На практика можете дори да наложите валидиране в Git (като например pre-commit hook за изпълнение на проверките на Beancount и предотвратяване на коммитиране на небалансирана счетоводна книга). Третирането на счетоводната книга като код означава, че всички мощни инструменти за управление на код – diffs, pull requests, code review – стават достъпни за вашите счетоводни записи.

Въвеждане и преносимост на данни: Тъй като форматът на Beancount е обикновен текст, е лесно да импортирате данни от други източници или да експортирате за други цели. Можете ръчно да пишете записи или да скриптирате конвертирането на банкови извлечения във формат Beancount. Общността на Beancount предоставя импорти за често срещани формати, а други инструменти за счетоводство с обикновен текст (Ledger, hledger) имат подобни формати, с налични конвертори. Вашите данни не са обвързани с една програма – както подчертава едно ръководство, “никога няма да попаднете в ситуация, в която вашите транзакционни данни седят в двоичен обект с неизвестен формат”. Всъщност, бихте могли да вземете своя Beancount файл и да напишете обикновен парсер или да използвате друг инструмент, за да го прочетете, ако е необходимо. Това прави техническата основа изключително устойчива на бъдещето.

Ползи за одитируемост от счетоводна книга с обикновен текст

Съхраняването на финансови записи в обикновен текст дава значителни ползи за одитируемост и проверка на грешки:

  • Детайлна история на промените: Всяка промяна в книгите се проследява чрез коммити в контрола на версиите. Това създава хронологичен запис на редакции, с който е трудно да се манипулира, ако използвате услуга като GitHub или практика на подписани коммити. Това е подобно на наличието на подробен одиторски лог за всички транзакции. Грешките могат да бъдат проследени до точния коммит, който ги е въвел, и историческите версии на книгите са лесно възстановими. В счетоводна книга с обикновен текст “данните могат ефективно да бъдат контролирани във версии, осигурявайки одиторска следа и неограничено „undo“ за корекции. За разлика от това, много традиционни счетоводни системи или не поддържат пълна история на редакциите, или смесват данни и корекции по начини, които е трудно да се разплетат.

  • Проследимост и партньорска проверка: Тъй като счетоводната книга е текст, няколко души могат да я прегледат като код. Например, в малка организация един човек може да предложи промени в счетоводната книга (добавяне на транзакции, коригиране на записи) и да отвори pull request за втори човек, който да го прегледа. Този процес на партньорска проверка може да улови грешки или несъответствия, преди да бъдат приети, подобно на това как код ревютата улавят бъгове. Споменатият по-горе съвместен работен процес е бил невъзможен за екип, използващ QuickBooks, което ги е накарало да мигрират към Beancount за по-добра поддръжка на много потребители. Подходът с обикновен текст прави сътрудничеството естествено – лесно е да се съгласуват разлики и да се обединят промени от различни счетоводители, избягвайки „заключването на файлове“ или ограниченията за един потребител на някои файлове за настолно счетоводство.

  • Автоматизирана проверка на грешки: Beancount включва стабилна вградена валидация. Когато обработите файла, той ще изведе грешка, ако някоя транзакция е небалансирана (дебити ≠ кредити), ако транзакциите на сметка не съответстват на заявения баланс или ако има несъответствия като дублирани идентификатори на транзакции. Един потребител отбелязва, че “поради вътрешните проверки на Beancount, съм сигурен, че [моите записи] са правилни, след като бъдат въведени в счетоводната книга. Няма шанс за грешка…”. С други думи, ако файлът Beancount се импортира без грешка, имате висока степен на увереност, че основната счетоводна цялост (напр. всички транзакции балансират) е непокътната. Например, можете да добавите месечни твърдения за баланс от вашите банкови извлечения и Beancount ще “хвърли грешка, ако вашите транзакции не съвпадат” с очаквания краен баланс. Това улавя пропуски или правописни грешки незабавно. Традиционният софтуер може също да прилага двойно счетоводно балансиране, но тъй като Beancount показва повече на потребителя, вие сте насърчавани да добавяте изрични проверки (като твърдения за баланс) и да виждате резултатите от тези проверки директно.

  • Коригиращите записи запазват историята: В правилното счетоводство не се изтрива грешна транзакция, а вместо това се добавя коригиращ запис. Счетоводните книги с обикновен текст насърчават тази практика (а с Git, дори и да промените минал запис, предишната версия остава в историята). Одиторът може да види ясно следата от корекции, вместо да подозира, че данните са променени без запис. Въпреки че технически нищо не спира потребителя да редактира историята на текстовия файл, ако има достъп, използването на Git с целостта на коммитите (или дори подписването на коммити) може да смекчи неоторизирани или непроследени промени. Отвореността също така насърчава добри навици: в една дискусия се отбелязва, че “не можете [просто] да коригирате запис” тихо в счетоводството с обикновен текст, без това да е очевидно; трябва да “правите коригиращи записи… [за да] запазите одиторската следа”. В заключение, самата система е прозрачна, така че всеки опит за фалшифициране на книгите вероятно ще остави следи.

  • Одиторска следа за външни одитори: Ако трябва да преминете формален одит (за бизнес или организация с нестопанска цел), предоставянето на Beancount счетоводна книга е като предоставяне на изходен код с пълна история на версиите. Одиторът може да прегледа необработения лог на транзакциите или можете да генерирате подкрепящи документи (като отчети на счетоводни статии или баланси) директно от изходните данни, осигурявайки последователност. Потребител на Beancount, който е трябвало да обоснове данъчни изчисления пред властите, е оценил, че има “солиден запис на цялата история” на всяка партида активи, което прави “много лесно да се посочи” и докаже как са получени цифрите. Яснотата на записа в обикновен текст, съчетана с експортирани отчети, може да ускори одитите, тъй като нищо не е скрито зад софтуер – всяка цифра в отчет може да бъде проследена до ред в счетоводната книга.

  • Неограничено undo и експериментиране: Поради комбинацията от текст + контрол на версиите, можете да опитате да преструктурирате или преработите своите сметки без страх. Ако дадена идея не се получи, можете да се върнете към предишен коммит. Тази свобода насърчава подобрения и корекции в счетоводната структура с течение на времето (например, разделяне на една сметка на няколко или добавяне на нови категории), което в традиционна система може да бъде рисковано или необратимо, след като транзакциите бъдат въведени. Потребителите са отбелязали, че с Git контролни точки, “няма притеснение, че ще счупим нещо, докато експериментираме” с промени в счетоводната книга, тъй като винаги може да се върне назад. Това означава, че счетоводната система може да се развива грациозно и одитируемата история се запазва на всяка стъпка.

Прозрачност чрез отворени данни и отворен код

Подходът на Beancount максимизира прозрачността както в данните, така и в логиката:

  • Елиминиране на непрозрачни формати: Beancount използва обикновен, отворен формат, който всеки може да прочете. За разлика от типичния счетоводен софтуер, който може да съхранява данни в патентован двоичен файл или заключена база данни, Beancount счетоводната книга е само текст. Този “отворен формат” означава, че “вашите данни са отворени и ще останат отворени завинаги”. Не се нуждаете от Beancount, за да разберете данните – в краен случай бихте могли да отворите счетоводната книга в текстов редактор или да я отпечатате. Чрез премахване на патентованите силози за данни, Beancount гарантира, че никога не сте зависими от софтуера на конкретен доставчик, за да получите достъп до собствените си финансови записи. Например, много потребители на QuickBooks са имали трудности при експортирането на всички свои данни или конвертирането им в нова система. С Beancount конвертирането е лесно: данните вече са в универсален формат. По думите на документацията на Beancount, “с отворен формат никога няма да попаднете в ситуация, в която вашите данни седят в двоичен обект с неизвестен формат и софтуерът остава без поддръжка”.

  • Яснота на счетоводната логика: Традиционните счетоводни програми извършват много изчисления зад кулисите – сумиране на сметки, прилагане на обменни курсове, изчисляване на баланси и т.н. Докато 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 (уеб UI) също означава, че дори разширените функции не са насочени към заключване. Например, създателят на Beancount услуга за хостинг отбелязва, че те избягват да добавят каквито и да било “частни функции за обвързване на потребители” – вместо това, те допринасят за подобрения обратно към проектите с отворен код Fava/Beancount. Този начин на мислене в общността гарантира, че подобренията са от полза за всички и не сте заседнали на модифицирана версия. С други думи, можете сами да хоствате или да се преместите в друга услуга по всяко време; работният процес остава стандартен. Това е в контраст с доставчиците, които може да предлагат “експорт”, но само във формат, който друг конкурент не може лесно да импортира, като по този начин ви хваща в капан, освен ако не останете с тях.

В обобщение, чрез използване на Beancount и Fava, вие избягвате често срещаните клопки на заключването на доставчик. Вашите данни остават достъпни, софтуерът е под ваш контрол и имате свободата да се адаптирате или да мигрирате, както е необходимо, без да губите целостта на вашите записи. Няма годишни такси или принудителни надстройки – прозрачността и простотата ви предпазват от тези зависимости.

Fava: Лесен за четене от човека интерфейс за Beancount

Fava е уеб интерфейсът, който допълва двигателя с обикновен текст на Beancount. Той не въвежда патентовани слоеве – вместо това, той усилва прозрачността и одитируемостта, като улеснява проучването на данните:

(Fava) Уеб интерфейсът на Fava предоставя богати, лесни за четене от човека изгледи на вашата счетоводна книга. Например, екранната снимка показва „Отчет за приходите“ разбивка на приходите и разходите по категория. Такива визуализации и отчети помагат на потребителите и одиторите бързо да схванат финансови модели и да идентифицират аномалии.

Функции и отчети: Fava чете вашия Beancount файл и генерира различни отчети: Отчет за приходите, Баланс, Оборотна ведомост, Паричен поток и други, всички чрез уеб браузър. Той също така предоставя навигируема счетоводна статия на транзакции (можете да кликнете върху сметка и да видите всички счетоводни статии към нея), салда по сметки с течение на времето и дори интерфейс за заявки за персонализирани въпроси. От решаващо значение е, че тези отчети се генерират в движение от текстовата счетоводна книга, което означава, че те винаги са актуални с изходните данни и отразяват всяка промяна, направена в счетоводната книга. Няма отделна база данни, която да се разсинхронизира. За целите на одита Fava може да действа като портал само за четене (освен ако не активирате функциите за редактиране), за да могат заинтересованите страни да проверят книгите. Счетоводител или одитор може да използва Fava, за да се задълбочи от изявления на високо ниво в основните транзакции лесно, което е много по-удобно за потребителя, отколкото да проверява необработен текстов файл ред по ред.

Улесняване на одитите: Чрез представяне на данните в познати счетоводни извлечения и интерактивни графики, Fava позволява на нетехническите потребители да одитират и да разберат книгите, поддържани в Beancount. Например, на външен счетоводител може да бъде даден достъп до Fava (или експорт на отчетите на Fava). Компания, използваща Beancount, отбелязва, че за данъци те генерират HTML експорт на финансови данни и техният CPA “може да навигира във финансовите данни без проблеми” и те “използват Fava (уеб GUI на Beancount) за различни отчети”, за да подпомогнат този процес. Fava може също да подчертае грешки или предупреждения – ако Beancount съобщи за някакви проблеми (като небалансирана транзакция или неуспешно твърдение), интерфейсът на Fava ще покаже индикатор за грешка, така че веднага да знаете, че нещо се нуждае от внимание. Това ефективно извежда проверките на одита в GUI за удобство.

Прозрачност на данните във Fava: Важно е да се отбележи, че Fava не замъглява данните или позволява