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

Счетоводният цикъл, в стил Beancount

· 8 минути четене
Mike Thrift
Mike Thrift
Marketing Manager

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

Ще видим как подходът на Beancount, ориентиран към текста, премахва досадните стъпки, какво трябва да автоматизирате и кои отчети ви дават най‑ясната картина за финансовото ви здраве. 🧑‍💻

2025-08-13-the-accounting-cycle-beancount-style


TL;DR: Работен процес в Beancount

  • Capture & Journal: Записвайте всяка транзакция като чисто двойно записване в .beancount текстовия файл.
  • Validate & Reconcile: Използвайте balance асерции, за да потвърдите, че вашият главен регистър съвпада с банковите извлечения, и пуснете bean-check, за да откриете грешки.
  • Review: Генерирайте необработен пробен баланс за бърза проверка.
  • Adjust: Публикувайте записи за начисления, отлагания, амортизация и други елементи в края на периода.
  • Re-review: Проверете коригирания пробен баланс, за да се уверите, че всичко е правилно.
  • Publish & Close: Генерирайте вашия Отчет за приходите и разходите, Баланс и Отчет за паричните потоци. Затварянето на книгите е опционално в Beancount, тъй като отчетите са датово‑осведомени.

Този поток може да се визуализира така:


Стъпка 1: Заснемане и записване на транзакциите

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

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

2025-08-10 * "Walmart" "Purchase of office supplies"
Expenses:Office:Supplies 45.67 USD
Assets:Bank:Checking -45.67 USD
  • Pro‑Tip: Използвайте етикети като #project-phoenix или #client-acme, за да добавите измерения към данните си. Това прави заявките и отчетите изключително гъвкави по-късно.

Хигиена при съгласуване ✅

Най‑мощната функция за осигуряване на точност е асерцията за баланс. В края на отчетния период (например края на месеца) декларирате какъв трябва да бъде балансът на сметка трябва да бъде.

2025-08-31 balance Assets:Bank:Checking  12345.67 USD

Ако сумата от всички транзакции, засягащи Assets:Bank:Checking до тази дата, не е равна на 12345.67 USD, Beancount ще изведе грешка. Тази проста директива превръща вашия главен регистър в самопроверяващ се документ.

За тези, които въвеждат исторически данни, директивата pad може автоматично да създаде балансираща транзакция, за да съвпаднат началните ви баланси с първата ви асерция.


Стъпка 2: „Публикуване в главния регистър“ (Безплатно!)

В традиционните счетоводни системи първо записвате в „журнал“, а след това отделна стъпка „публикува“ стойностите в „главния регистър“.

С Beancount, вашият .beancount файл е едновременно журнал и главен регистър. Когато напишете и запазите транзакция, вече я сте публикували. Няма отделна стъпка. Тази директност е основно предимство на простия текстов счетоводен подход – това, което виждате, е това, което получавате.


Стъпка 3: Подготовка на необработен пробен баланс

Преди да започнете корекции, ви е нужен бърз „всичко ли се сумира?“ контрол. Пробният баланс е прост отчет, който изброява всяка сметка и нейния общ баланс. Общата сума на дебитните баланси трябва да е равна на общата сума на кредитните баланси.

Можете да го генерирате с проста заявка:

bean-query main.beancount \
"SELECT account, sum(position) GROUP BY 1 ORDER BY 1"

Или, за по‑визуален подход, отворете вашия регистър във Fava (уеб интерфейсът за Beancount) и отидете в отчета „Trial Balance“. Търсете нещо необичайно – активна сметка с кредитен баланс или разходна сметка с странна стойност.


Стъпка 4: Публикуване на коригиращи записи

Коригиращите записи са от съществено значение за точно отчитане по начин на начисляване. Те гарантират, че приходите се признават, когато са спечелени, а разходите – когато са понесени, независимо от момента на паричното движение.

Чести корекции включват:

  • Начисления: Записване на приход, който сте спечелили, но още не сте фактурирали, или разход, който сте понесли, но още не сте платили.
  • Отлагания: Обработка на предварителни плащания. Ако клиент ви плати за година услуги предварително, го записвате като пасив (Liabilities:UnearnedRevenue) и признавате 1/12 от него като приход всеки месец.
  • Не‑парични елементи: Записване на неща като амортизация на активи.
  • Корекции: Поправка на грешки или отчитане на пропуснати елементи от банкови източници, като малка лихва.

Пример: Начисляване на приход

Завършихте проект на 31 август, но фактурата ще изпратите през септември. За да признаете дохода в правилния период (август), правите коригиращ запис:

2025-08-31 * "Accrue revenue for client project #1042"
Assets:AccountsReceivable 3000.00 USD
Income:Consulting -3000.00 USD

Пример: Записване на амортизация

Вашата компания има график за амортизация на активи. В края на периода записвате разхода:

2025-12-31 * "Annual depreciation on computer equipment"
Expenses:Depreciation 4800.00 USD
Assets:Fixed:AccumulatedDepreciation -4800.00 USD

Стъпка 5: Пускане на коригиран пробен баланс и валидация

След като въведете коригиращите записи, отново пуснете отчета за пробен баланс. Това е вашият коригиран пробен баланс. Той предоставя окончателните числа, които ще се използват за създаване на финансовите отчети.

Това е и идеалният момент да изпълните вградената проверка на Beancount:

bean-check main.beancount

Тази команда проверява синтаксиса, правилата за балансиране и асерциите. Ако не върне нищо, книгите ви са механично коректни.


Стъпка 6: Публикуване на финансови отчети 📊

Това е наградата. С помощта на числата от коригирания пробен баланс можете да генерирате ключовите финансови отчети. Fava е най‑лесният начин, тъй като предоставя интерактивни, детайлни отчети „извън кутията“.

  • Отчет за приходите и разходите (Profit & Loss): Показва вашите приходи и разходи за определен период, като води до чист приход или загуба.
  • Баланс: Снимка на това, което притежавате (Активи) и какво дължите (Пасиви), както и вашия нетен капитал (Equity) към конкретна дата.
  • Отчет за паричните потоци: Съгласува началния и крайния кеш, като показва откъде е дошли парите и къде са отишли.

За персонализирани отчети можете да използвате Beancount Query Language (BQL). Ето заявка за месечен отчет за приходите и разходите:

-- P&L for August 2025
SELECT account, sum(position)
WHERE account '^(Income|Expenses)'
AND date >= 2025-08-01 AND date <= 2025-08-31
GROUP BY account ORDER BY account;

Стъпка 7: Затваряне на книгите (по избор)

В традиционната счетоводна практика процесът на „затваряне“ включва създаване на запис, който нулира всички временни сметки (Приходи и Разходи) и прехвърля нетния приход в сметка за собствен капитал, наречена Retained Earnings. Това формално нулира временните сметки за следващата година.

В Beancount тази стъпка обикновено не е необходима. Отчетите във Fava са датово‑осведомени; ако поискате P&L за 2025, ще се използват само данните от 2025. Балансите не „преливат“. Повечето потребители просто оставят баланса както е.

Ако обаче ви е необходим формален затвор за съответствие или докладване пред акционери, можете да го направите с проста годишна транзакция, която прехвърля общите приходи и разходи в Equity:Retained-Earnings.


Практичен месечен чек‑лист за затваряне

Ето повторим контролен списък за затваряне на книгите всеки месец с Beancount.

  • Capture: Импортирайте всички банкови и кредитни транзакции. Ръчно въведете кеш разходи или други елементи извън системата.
  • Reconcile: Добавете balance асерции за всички банкови сметки, кредитни карти и заеми, съответстващи на извлеченията ви.
  • Review: Прегледайте необработения пробен баланс във Fava. Разследвайте всякакви необичайни или неочаквани баланси. Проверете за стари неплатени фактури (Assets:AccountsReceivable) или задължения (Liabilities:AccountsPayable).
  • Adjust: Запишете начисления доход/разход, отложени приходи и необходимите корекции.
  • Validate: Пуснете bean-check. Прегледайте окончателния коригиран пробен баланс.
  • Publish: Генерирайте P&L и Баланс. Изпратете ги на заинтересованите страни или запазете за вашия архив.
  • Wrap-up: По желание, извършете запис за затваряне, ако вашият бизнес го изисква. Архивирайте копие от вашите .beancount файлове за периода.

Защо Beancount блести в счетоводния цикъл

  • Прозрачност и проверяемост: Вашият регистър е текстов файл. Можете да използвате git за контрол на версии, да преглеждате промените с diff и да сътрудничите с вашия счетоводител в ясен, недвусмислен формат.
  • Пълен контрол: Вие определяте вашата сметкоплан. Не сте заключени в структурата на софтуерен доставчик. Данните ви са ваши завинаги, в отворен формат.
  • Несравнима мощ: Комбинацията от SQL‑подобни заявки (BQL) и богат уеб интерфейс (Fava) ви дава несравнима сила за нарязване, анализ и разбиране на финансовите ви данни.

Копирай‑пейст фрагменти за старт

Прост сметкоплан:

option "title" "My Personal Ledger"
option "operating_currency" "USD"

;; --- Accounts ---
1970-01-01 open Assets:Bank:Checking
1970-01-01 open Assets:AccountsReceivable
1970-01-01 open Liabilities:CreditCard
1970-01-01 open Liabilities:UnearnedRevenue
1970-01-01 open Equity:Owner:Capital
1970-01-01 open Equity:Retained-Earnings
1970-01-01 open Income:Consulting
1970-01-01 open Expenses:Office:Supplies
1970-01-01 open Expenses:Software
1970-01-01 open Expenses:Depreciation

Полезна BQL заявка:

-- Find all customers with an outstanding balance
SELECT payee, sum(position)
WHERE account = 'Assets:AccountsReceivable'
GROUP BY payee
HAVING sum(position) > 0
ORDER BY sum(position) DESC;

Като съчетаете вечния счетоводен цикъл с модерните, текстово‑базирани инструменти на Beancount, получавате система, която е издръжлива, прозрачна и създадена да трае. Приятно счетоводство!