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

Пълно ръководство за управление на сметки в Beancount и Fava

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

Вашият сметкоплан е гръбнакът на вашия Beancount леджър. Добре проектираната йерархия на сметките прави всеки отчет по-ясен, всяка заявка по-бърза и всеки данъчен сезон по-малко болезнен. В това ръководство ще разгледаме всичко, което трябва да знаете за създаването, преглеждането, актуализирането и закриването на сметки в Beancount и Fava -- от основите за начинаещи до напреднали модели.

Петте типа сметки

Beancount използва стандартния модел за двойно счетоводство с точно пет основни типа сметки:

ТипПредназначениеНормален знакОтчет
AssetsРесурси, които притежавате (пари в брой, инвестиции, имущество)Положителен (дебит)Баланс
LiabilitiesДългове, които дължите (кредитни карти, заеми, ипотеки)Отрицателен (кредит)Баланс
EquityСобствен капитал, неразпределена печалба, начални салдаОтрицателен (кредит)Баланс
IncomeИзточници на приходи (заплата, лихви, дивиденти)Отрицателен (кредит)Отчет за приходи и разходи
ExpensesКатегории разходи (храна, наем, комунални услуги)Положителен (дебит)Отчет за приходи и разходи

Основното счетоводно уравнение винаги е в сила:

Assets + Expenses + Equity + Income + Liabilities = 0

Полезно правило: ако сумите са релевантни само за определен период от време (напр. "Колко похарчих за храна този месец?"), използвайте Income или Expenses. Ако представляват текущо салдо (напр. "Колко има в разплащателната ми сметка?"), използвайте Assets или Liabilities.

Конвенции за именуване на сметки

Имената на сметките в Beancount са йерархични идентификатори, разделени с двоеточия. Правилата са:

  • Трябва да започват с един от петте основни типа: Assets, Liabilities, Equity, Income, Expenses
  • Всеки компонент започва с главна буква или цифра
  • Компонентите могат да съдържат букви, цифри и тирета (без интервали или долни черти)
  • Необходими са поне два компонента (напр. Expenses:Food, а не само Expenses)
  • Двоеточията (:) разделят нивата на йерархията
; Валидни имена на сметки
Assets:US:BofA:Checking
Liabilities:CA:RBC:CreditCard
Equity:Retained-Earnings
Income:US:Acme:Salary
Expenses:Food:Groceries
Assets:Crypto:BTC-Holdings

; Невалидни имена на сметки
assets:checking ; основен тип с малка буква
Assets:my checking ; интервалите не са позволени
Expenses ; само един компонент

Препоръчителният модел за именуване на сметки от баланса е:

Тип : Държава : Институция : Сметка : ПодСметка

Например: Assets:US:Vanguard:401k:VTSAX или Liabilities:US:Chase:Sapphire.

За сметки за разходи и приходи използвайте именуване по категории:

Expenses:Food:Groceries
Expenses:Housing:Utilities:Electric
Income:US:Employer:Salary

Персонализиране на основните имена

Можете да преименувате петте основни типа за локализация или лично предпочитание:

option "name_assets"       "Actifs"
option "name_liabilities" "Passifs"
option "name_equity" "Capital"
option "name_income" "Revenus"
option "name_expenses" "Depenses"

Създаване на сметки (директива Open)

Всяка сметка трябва да бъде декларирана с директива open, преди да можете да осчетоводявате транзакции в нея. Пълният синтаксис е:

YYYY-MM-DD open Account [ConstraintCurrency,...] ["BookingMethod"]

Основно отваряне

2014-05-01 open Assets:US:BofA:Checking

С валутни ограничения

Ограничаването на валутите предотвратява случайно осчетоводяване в грешна валута:

2014-05-01 open Assets:US:BofA:Checking       USD
2014-05-01 open Assets:Cash USD,CAD,EUR
2012-03-01 open Assets:US:ETrade:Main:ITOT ITOT

С методи за осчетоводяване

За инвестиционни сметки посочете как се съпоставят лотовете при продажба:

2014-02-11 open Assets:US:ETrade:IVV   IVV   "FIFO"
2014-02-11 open Assets:US:Schwab:AAPL AAPL "LIFO"
2014-02-11 open Assets:US:Fidelity GOOG "STRICT"

Налични методи за осчетоводяване:

МетодПоведение
"STRICT"По подразбиране. Изисква точно определяне на лота; грешка при неяснота
"FIFO"Първи влязъл, първи излязъл -- намалява най-старите лотове първо
"LIFO"Последен влязъл, първи излязъл -- намалява най-новите лотове първо
"AVERAGE"Обединява всички лотове и преизчислява средната цена
"NONE"Без съпоставяне на лотове; всяка цена се приема

С метаданни

2013-03-14 open Assets:US:BTrade:HOOLI
category: "taxable"
institution: "BTrade Corp"
account-number: "XX-1234-5678"

Стратегически избор на дати за отваряне

  • Използвайте датата си на раждане за универсални сметки като Expenses:Groceries (това ви дава суми за цял живот)
  • Използвайте датата на започване на работа за сметки, свързани с трудови доходи
  • Използвайте действителната дата на създаване на сметката за институционални сметки (банкови сметки, кредитни карти)

Автоматично отваряне с плъгин

Ако искате да пропуснете ръчните директиви open по време на прототипиране:

plugin "beancount.plugins.auto_accounts"

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

Преглед и заявки за сметки

Използване на bean-query (BQL)

# Списък на всички сметки със салда
bean-query ledger.beancount "SELECT account, units(sum(position)) GROUP BY 1"

# Списък само на сметки за разходи
bean-query ledger.beancount "SELECT account WHERE account ~ 'Expenses'"

# Извлечение по сметка с текущо салдо
bean-query ledger.beancount \
"SELECT date, account, position, balance WHERE account ~ 'BofA:Checking'"

# Дневник за конкретна сметка
bean-query ledger.beancount "JOURNAL 'Assets:US:BofA:Checking'"

Използване на bean-report

# Оборотна ведомост (всички сметки с крайни салда)
bean-report ledger.beancount balances

# Баланс
bean-report ledger.beancount balsheet

# Отчет за приходи и разходи
bean-report ledger.beancount income

# Дневник за конкретна сметка
bean-report ledger.beancount journal -a Assets:US:BofA:Checking

Използване на Fava

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

  • Страница Баланс: интерактивно дърво на всички Assets, Liabilities и Equity
  • Страница Отчет за приходи и разходи: интерактивно дърво на всички Income и Expenses
  • Страница на сметката: щракнете върху името на сметка, за да видите разделите Дневник, Промени и Салда
  • Лента за филтриране: използвайте регулярни изрази, за да покажете само съвпадащи сметки (напр. Assets:US)

Актуализиране на сметки (преименуване и реорганизиране)

Beancount няма вградена директива за преименуване, но съществуват няколко подхода.

1. Търсене и замяна

Простото търсене и замяна работи, но бъдете внимателни -- Assets:Bank ще съвпадне и с Assets:Bank:Cash. Използвайте шаблони с граници на думи:

sed -i 's/Assets:US:OldBank:Checking/Assets:US:NewBank:Checking/g' *.beancount

2. Плъгинът rename_accounts

Пакетът beancount_reds_plugins предоставя мощен плъгин за преименуване:

plugin "beancount_reds_plugins.rename_accounts.rename_accounts" "{
'Expenses:Taxes' : 'Income:Taxes',
'Assets:House:Capital-Improvements' : 'Expenses:House:Appliances',
}"

Този плъгин:

  • Използва съпоставяне по подниз (Expenses:Taxes:Federal автоматично става Income:Taxes:Federal)
  • Поддържа регулярни изрази с обратни препратки
  • Автоматично генерира директиви Open за преименуваните сметки
  • Не модифицира вашите изходни файлове -- променя само представянето в паметта
  • Може да се включва/изключва чрез коментиране на реда с плъгина

3. Модел "закриване и повторно отваряне"

За реални миграции на сметки (напр. смяна на банка):

; Стара сметка
2010-01-01 open Assets:US:OldBank:Checking USD

; Закриване на старата, отваряне на нова
2024-06-15 close Assets:US:OldBank:Checking
2024-06-15 open Assets:US:NewBank:Checking USD

; Прехвърляне на оставащото салдо
2024-06-15 * "Прехвърляне към нова банка"
Assets:US:OldBank:Checking -5000.00 USD
Assets:US:NewBank:Checking 5000.00 USD

Закриване на сметки

Директивата close маркира сметка като неактивна:

2016-11-28 close Liabilities:CreditCard:CapitalOne

Какво прави закриването

  • Генерира грешка, ако има осчетоводявания след датата на закриване
  • Филтрира сметката от отчетите извън нейния активен период
  • Казва на Fava да скрие сметката от дървовидните изгледи (конфигурируемо)

Кога да закривате сметки

  • Когато закриете реална банкова сметка или кредитна карта
  • Когато смените работодател
  • Когато консолидирате или реорганизирате вашия сметкоплан
  • Когато продадете имот или закриете инвестиционна позиция

Винаги проверявайте за нулево салдо преди закриване

Beancount не проверява автоматично за нулево салдо при закриване. Добавете ръчна проверка:

2023-12-31 balance Assets:US:OldBank:Savings  0.00 USD
2023-12-31 close Assets:US:OldBank:Savings

Организиране на вашия сметкоплан

Започнете просто, усъвършенствайте с времето

Не се нуждаете от перфектен сметкоплан от първия ден. Започнете с широки категории и ги разделяйте, когато нуждите ви от отчетност нараснат. Авторът на Beancount съобщава, че има 250+ сметки за разходи, всички създадени органично с времето.

Често срещани модели за организация

Модел 1: По институция (за сметки от баланса)

Assets:US:BofA:Checking
Assets:US:BofA:Savings
Assets:US:Vanguard:401k:VTSAX
Assets:US:Vanguard:401k:VBTLX
Liabilities:US:Amex:Platinum
Liabilities:US:Chase:Sapphire

Модел 2: По категория (за сметки за приходи и разходи)

Expenses:Food:Groceries
Expenses:Food:Restaurant
Expenses:Food:Coffee
Expenses:Housing:Rent
Expenses:Housing:Insurance
Expenses:Housing:Utilities:Electric
Expenses:Housing:Utilities:Water
Expenses:Transport:Subway
Expenses:Transport:Gas
Expenses:Health:Medical
Expenses:Health:Dental

Модел 3: По географско положение (за финанси в няколко държави)

Assets:US:BofA:Checking
Assets:CA:RBC:Checking
Assets:UK:HSBC:Current
Income:US:Acme:Salary
Income:CA:Freelance:Consulting

Модел 4: По имот или проект (за недвижими имоти или бизнес)

Assets:US:Loft4530:Property
Income:US:Loft4530:Rental
Expenses:Loft4530:Electricity
Expenses:Loft4530:Insurance
Expenses:Loft4530:Maintenance

Модел 5: Огледално отразяване на свързани сметки (еднакъв компонент на институцията)

Assets:US:ETrade:Cash
Assets:US:ETrade:AAPL
Income:US:ETrade:Dividends
Income:US:ETrade:PnL
Expenses:US:ETrade:Commissions

Колко дълбоки да бъдат йерархиите?

  • 2-3 нива е обичайно за категории разходи (Expenses:Food:Restaurant)
  • 3-4 нива за структурирани позиции от баланса (Assets:US:Vanguard:401k:VTSAX)
  • Избягвайте повече от 5 нива, освен ако нямате сериозна причина за отчетност
  • Дълбоките йерархии работят добре, когато Fava ги свива в дървовидни изгледи

Пример от реалния живот

Ето практически сметкоплан за лични финанси:

; ── Активи ──
Assets:US:BofA:Checking USD
Assets:US:BofA:Savings USD
Assets:US:Vanguard:401k:VTSAX VTSAX
Assets:US:Vanguard:Roth:VTSAX VTSAX
Assets:US:ETrade:Cash USD
Assets:US:ETrade:AAPL AAPL
Assets:Cash:Wallet USD

; ── Пасиви ──
Liabilities:US:Amex:Platinum USD
Liabilities:US:Chase:Freedom USD
Liabilities:US:BofA:Mortgage USD

; ── Приходи ──
Income:US:Employer:Salary
Income:US:Employer:Bonus
Income:US:Employer:Match401k
Income:US:ETrade:Dividends
Income:US:BofA:Interest

; ── Разходи ──
Expenses:Food:Groceries
Expenses:Food:Restaurant
Expenses:Food:Coffee
Expenses:Housing:Rent
Expenses:Housing:Insurance
Expenses:Housing:Utilities:Electric
Expenses:Housing:Utilities:Water
Expenses:Transport:Subway
Expenses:Transport:Taxi
Expenses:Transport:Gas
Expenses:Health:Medical
Expenses:Health:Dental
Expenses:Health:Pharmacy
Expenses:Shopping:Clothing
Expenses:Shopping:Electronics
Expenses:Entertainment:Streaming
Expenses:Entertainment:Books
Expenses:Travel:Flights
Expenses:Travel:Hotels
Expenses:Taxes:Federal
Expenses:Taxes:State
Expenses:Taxes:SocialSecurity
Expenses:Taxes:Medicare

; ── Собствен капитал ──
Equity:Opening-Balances
Equity:Retained-Earnings

Специфични функции на Fava

Индикатори за актуалност

Една от най-добрите функции на Fava за управление на сметки. Добавете тези метаданни към всяка сметка:

2014-05-01 open Assets:US:BofA:Checking  USD
fava-uptodate-indication: TRUE

Fava тогава показва цветни точки до сметката:

  • Зелена точка: последният запис е преминала проверка за салдо (сметката е съгласувана)
  • Червена точка: последният запис е неуспешна проверка за салдо (изисква внимание)
  • Жълта точка: последният запис съществува, но не е проверка за салдо (все още не е съгласувана)
  • Сива точка: няма активност в рамките на периода за преглед

Конфигуриране на прага за сива точка:

2016-06-14 custom "fava-option" "uptodate-indicator-grey-lookback-days" "60"

Контроли за дървовиден изглед

Контролирайте как Fava показва сметките:

; Показване на закрити сметки в дървото
2016-06-14 custom "fava-option" "show-closed-accounts" "true"

; Показване на сметки с нула транзакции
2016-06-14 custom "fava-option" "show-accounts-with-zero-transactions" "true"

; Показване на сметки с нулево салдо
2016-06-14 custom "fava-option" "show-accounts-with-zero-balance" "true"

Модели за свиване

Свиване на дълбоко вложени сметки по подразбиране:

; Свиване на всички сметки с 3+ нива дълбочина
2016-06-14 custom "fava-option" "collapse-pattern" ".*:.*:.*"

; Свиване на конкретни поддървета
2016-06-14 custom "fava-option" "collapse-pattern" "Assets:US:Vanguard:.*"

Включване на дъщерни сметки в дневника

Когато разглеждате дневника на сметка във Fava, включете осчетоводяванията от дъщерни сметки:

2016-06-14 custom "fava-option" "account-journal-include-children" "true"

Обръщане на знаците за по-добра четимост

По подразбиране приходите и пасивите се показват като отрицателни числа (техният естествен знак). За да ги показвате като положителни:

2016-06-14 custom "fava-option" "invert-income-liabilities-equity" "true"

Управление на документи

Fava интегрира обработката на документи с йерархията на вашите сметки. Задайте основна директория за документи:

option "documents" "/path/to/documents"

След това организирайте файловете по пътя на сметката:

/path/to/documents/
Assets/
US/
BofA/
Checking/
2024-01-15.january-statement.pdf
2024-02-15.february-statement.pdf
Liabilities/
US/
Amex/
Platinum/
2024-03-15.march-bill.pdf

Файловете, започващи с YYYY-MM-DD, се откриват автоматично от Fava и се появяват в дневника на сметката.

Често срещани грешки и как да ги избегнете

1. Правописни грешки в имената на сметки

Една единствена правописна грешка като Expenses:Grocries създава напълно нова, нежелана сметка.

Решение: Не използвайте плъгина auto_accounts в продуктивна среда. Изисквайте изрични директиви open. Beancount веднага ще генерира грешка за всяка недекларирана сметка:

ERROR: Invalid reference to unknown account 'Expenses:Grocries'

2. Пропускане на валутни ограничения

Без валутни ограничения можете случайно да осчетоводите EUR в сметка само за USD.

Решение: Винаги посочвайте валутите в директивите за отваряне:

2014-01-01 open Assets:US:BofA:Checking  USD

3. Нередовни проверки на салда

Без редовни проверки на салда грешките могат да останат незабелязани с месеци.

Решение: Добавяйте месечни проверки на салдата за всяка активна сметка:

2024-01-01 balance Assets:US:BofA:Checking   5,432.10 USD
2024-02-01 balance Assets:US:BofA:Checking 4,890.55 USD
2024-03-01 balance Assets:US:BofA:Checking 6,123.00 USD

4. Непоследователни конвенции за именуване

Смесването на модели (напр. Expenses:Food срещу Expenses:US:Food) прави заявките и отчетите объркващи.

Решение: Изберете конвенция и я следвайте. Използвайте префикси за държава за сметки от баланса, именуване по категории за приходи и разходи.

5. Закриване без проверка за нулево салдо

Директивата close не проверява салдото. Можете да закриете сметка, в която все още има пари.

Решение: Винаги съчетавайте закриването с проверка за нулево салдо:

2023-12-31 balance Assets:US:OldBank:Savings  0.00 USD
2023-12-31 close Assets:US:OldBank:Savings

Напреднали модели

Съвети за работа с множество валути

Декларирайте вашите оперативни валути за отделни колони в отчетите:

option "operating_currency" "USD"
option "operating_currency" "EUR"

За сметки с множество валути посочете всички разрешени валути:

2014-01-01 open Assets:Cash  USD,CAD,EUR

Проверките на салда с множество валути трябва да се правят по една валута наведнъж:

2024-01-01 balance Assets:Cash     562.00 USD
2024-01-01 balance Assets:Cash 210.00 CAD
2024-01-01 balance Assets:Cash 60.00 EUR

Pad и Balance за първоначална настройка

Използвайте директивата pad, за да установите начални салда без ръчно изчисляване на суми:

2000-05-28 open Assets:US:BofA:Checking  USD
2000-05-28 pad Assets:US:BofA:Checking Equity:Opening-Balances
2024-07-01 balance Assets:US:BofA:Checking 12,345.67 USD

Beancount автоматично синтезира коригиращата транзакция. Важна забележка: проверките на салда проверяват салдото в началото на посочената дата. Следователно pad на 2 януари изисква проверка на салдото на 3 януари или по-късно.

Метаданни за категоризация на сметки

Използвайте метаданни в директивите open за персонализирана отчетност:

2014-01-01 open Assets:US:BofA:Checking  USD
category: "liquid"
tax-status: "taxable"

2014-01-01 open Assets:US:Vanguard:401k USD
category: "retirement"
tax-status: "tax-deferred"

Заявка за метаданни с BQL:

SELECT account, META("category") WHERE META("tax-status") = "taxable"

Бележки за историята на сметката

Прикачете датирани бележки към дневника на всяка сметка:

2024-03-20 note Assets:US:BofA:Checking "Обадих се за оспорено плащане, реф. #12345"
2024-06-01 note Liabilities:US:Chase:Sapphire "Годишната такса бе отменена след обаждане за задържане"

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

Проследяващи сметки и целево разпределяне

Beancount няма виртуални осчетоводявания като Ledger, но можете да използвате подсметки за целево разпределяне:

; Проследяване на авариен фонд в разплащателната сметка
Assets:US:BofA:Checking:EmergencyFund USD
Assets:US:BofA:Checking:Operating USD

; Проследяване на възстановявания
Assets:Receivables:Employer:Travel USD
Assets:Receivables:Friend:SharedDinner USD

Категории разходи, удобни за данъци

Структурирайте сметките за разходи, за да улесните подготовката на данъчната декларация:

Expenses:Health:Medical:Deductible
Expenses:Charity:Deductible
Expenses:Business:Office
Expenses:Business:Equipment
Expenses:Education:Professional

Кратка справка

ЗадачаСинтаксис
Отваряне на сметка2024-01-01 open Assets:US:BofA:Checking USD
Закриване на сметка2024-12-31 close Assets:US:OldBank:Savings
Проверка на салдо2024-01-01 balance Assets:US:BofA:Checking 5,432.10 USD
Запълване до салдо2024-01-01 pad Assets:Cash Equity:Opening-Balances
Добавяне на бележка2024-01-15 note Assets:US:BofA:Checking "Monthly reconciliation done"
Прикачване на документ2024-01-15 document Assets:US:BofA:Checking "/path/to/statement.pdf"
Добавяне на метаданниОтстъпен ключ-стойност на реда след open
Автоматично отваряне (разработка)plugin "beancount.plugins.auto_accounts"
Ограничаване на валута2024-01-01 open Assets:Cash USD,EUR
Задаване на метод за осчетоводяване2024-01-01 open Assets:US:ETrade:AAPL AAPL "FIFO"

Обобщение

Доброто управление на сметките е основата на ефективното счетоводство с Beancount. Ето ключовите изводи:

  1. Винаги използвайте изрични директиви open -- те улавят правописни грешки и налагат дисциплина
  2. Добавяйте валутни ограничения, за да предотвратите грешки между валутите
  3. Използвайте последователна конвенция за именуване -- по институция за баланса, по категория за приходи/разходи
  4. Започнете просто и усъвършенствайте -- разделяйте сметки, когато нуждите ви от отчетност нараснат
  5. Проверявайте салдата редовно -- месечното съгласуване улавя грешките рано
  6. Закривайте сметките правилно -- с проверка за нулево салдо
  7. Възползвайте се от функциите на Fava -- индикатори за актуалност, модели за свиване и интеграция на документи
  8. Използвайте метаданни за персонализирана категоризация и отчетност

Приятно счетоводство!

References: