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

Въведение в Beancount.io

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

Част 1: "Защо" - Основи на интелигентното счетоводство

Преди да се потопим в "как", от решаващо значение е да разберем "защо". Ефективното счетоводство е основата на личното финансово управление и необходима стъпка към финансова яснота и свобода.

Отвъд проследяването на разходите: Пътят към финансова яснота

Обикновените приложения за проследяване на разходите ви казват къде са отишли парите ви. Една стабилна счетоводна система ви казва това и много повече: тя предоставя пълна картина на вашето финансово здраве, включително вашата нетна стойност, паричен поток и представянето на вашите инвестиции. Основната цел е наблюдаемост — придобиване на ясен, базиран на данни разбиране на вашия финансов живот, което ви позволява да вземате информирани решения, да оценявате риска и да работите за дългосрочни цели като пенсиониране.

Защо двойно счетоводство? Силата на балансирана система

За разлика от едностранното счетоводство (прост списък на разходите), методът на двойното счетоводство записва всяка транзакция като поток на стойност между най-малко два сметки. Неговият основен принцип е основното счетоводно уравнение:

Активи=Пасиви+Собствен капитал (Нетна стойност)\text{Активи} = \text{Пасиви} + \text{Собствен капитал (Нетна стойност)}

Тази система гарантира, че вашите книги винаги са балансирани, което драстично намалява грешките. Тя предоставя пълна финансова картина, като генерира основни отчети като Баланс (какво притежавате и дължите) и Отчет за приходите (какво сте спечелили и похарчили).

Част 2: Първи стъпки с Beancount

Beancount е мощен, базиран на Python инструмент за счетоводство в обикновен текст.

Първият ви поглед с Fava на Beancount.io

Beancount.io предоставя мощна среда, която комбинира Beancount двигателя с мобилно приложение (iOS, Android) и уеб приложение - Fava, фантастичен уеб-базиран интерфейс за визуализиране на вашата счетоводна книга. Не е необходима инсталация. Когато използвате платформата, вие директно взаимодействате с текстов редактор за вашия счетоводен файл (напр. main.bean) и виждате отчетите, генерирани от Fava, да се актуализират в реално време.

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

Петте основни типа сметки

Beancount използва пет типа сметки от най-високо ниво, които формират структурата на вашата счетоводна книга:

Тип сметкаОписаниеТипичен баланс
AssetsКакво притежавате (пари в брой, банкови сметки, инвестиции, имоти).Положителен
LiabilitiesКакво дължите (дълг по кредитна карта, заеми, ипотеки).Отрицателен
IncomeОткъде идват парите (заплата, бонуси, лихви).Отрицателен
ExpensesКъде отиват парите (храна, наем, пътуване, данъци).Положителен
EquityВашата нетна стойност; използва се за първоначални салда.Отрицателен

Уравнението на Beancount

Beancount налага своя собствена версия на счетоводното уравнение, където сумата на всички статии в цялата ви счетоводна книга е равна на нула:

Активи+Разходи+Пасиви+Приходи+Собствен капитал=0\text{Активи} + \text{Разходи} + \text{Пасиви} + \text{Приходи} + \text{Собствен капитал} = 0

Ето защо, по конвенция, сметките Income, Liabilities и Equity притежават отрицателни стойности — те са източниците на средства, които увеличават вашите Assets и Expenses.

Част 3: Езикът на Beancount - Основен синтаксис

Всички записи в Beancount са директиви, които започват с дата.

Дефиниране на сметки (open) и стоки

Преди да можете да използвате сметка, трябва да я декларирате с директивата open. Можете също така да посочите по избор валутите или "стоките", които ще съдържа.

; YYYY-MM-DD open Account:Name [Commodity1, Commodity2, ...]
2020-01-01 open Assets:Bank:US:Chase:Checking USD
2020-01-01 open Liabilities:CreditCard:US:Discover USD
2020-01-01 open Expenses:Food:Groceries
2020-01-01 open Income:Salary:Google

Стоките могат да бъдат валути от реалния свят (напр. USD, JPY) или всяка потребителска единица, която дефинирате, като например самолетни мили (MILES_UA) или стокови символи (HOOL).

Записване на първата ви транзакция (*)

Транзакциите са най-честият запис. Те започват с дата, флаг (* за пълна транзакция или ! за непълна), незадължителен платец и описание. Всеки ред, който следва (отстъпен с два интервала), е "статия" в сметка.

; YYYY-MM-DD * "Payee" "Description"
; Account1 Amount Commodity
; Account2 -Amount Commodity

2024-07-28 * "Trader Joe's" "Weekly groceries"
Expenses:Food:Groceries 125.50 USD
Liabilities:CreditCard:US:Discover -125.50 USD

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

2024-07-28 * "Trader Joe's" "Weekly groceries"
Expenses:Food:Groceries 125.50 USD
Liabilities:CreditCard:US:Discover

Балансиране на ниво транзакция: По-важното за ежедневната употреба е, че всяка отделна транзакция също трябва да бъде балансирана — сумата на всички статии в рамките на една транзакция трябва да бъде равна на нула. Ако транзакцията не е балансирана, Beancount ще покаже грешка като тази:

Beancount Error Alert

Работа с многовалутни транзакции (@ и @@)

Beancount се отличава с многовалутното счетоводство.

  • Използвайте @, за да посочите цена на преобразуване на единица.
  • Използвайте @@, за да посочите общата цена на преобразуването.
; Buying a flight in EUR with a USD card
2024-08-01 * "Lufthansa" "Flight to Berlin"
Expenses:Travel:Flights 500.00 EUR @@ 545.00 USD ; 500 EUR cost me 545 USD in total
Liabilities:CreditCard:US:Discover -545.00 USD

Част 4: Гарантиране на точност - Изкуството на съгласуване

Ключова практика за поддържане на точна счетоводна книга е редовното съгласуване. Това включва сравняване на салдата във вашата счетоводна книга Beancount с официални извлечения от вашите финансови институции.

Автоматизиране на проверки с твърдения за баланс (balance)

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

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

; From your monthly credit card statement
2024-08-01 balance Liabilities:CreditCard:US:Discover -1432.78 USD

Свързване на поддържащи документи (document)

Можете да свържете към външни файлове като банкови извлечения или разписки, създавайки одиторска пътека. Fava прави тези връзки кликаеми.

2024-08-01 document Liabilities:CreditCard:US:Discover "statements/discover-2024-07.pdf"

Коригиране на грешки и инициализиране на салда

Когато започнете своята счетоводна книга или откриете несъответствие, което не можете да проследите, трябва да направите корекция. Стандартната практика е да използвате специална сметка Equity.

; Initializing a cash account when starting your ledger
2020-01-01 * "Initial Balance" "Setting up cash account"
Assets:Cash:Wallet 200.00 USD
Equity:Opening-Balances -200.00 USD

Сметката Equity:Opening-Balances държи суми, които влизат във вашата счетоводна книга от неизвестни или външни източници.

За бързи корекции, когато точното несъответствие е маловажно, директивата pad може автоматично да коригира салдото на сметката, за да отговори на последващо твърдение balance, като резервира разликата в сметка на собствен капитал. Използвайте това с повишено внимание, тъй като може да скрие по-големи проблеми. Изричните корекции обикновено са по-безопасни.

Част 5: Разширени и реалистични модели на транзакции

Проследяване на дългове: Управление на вземания и задължения

Двойното счетоводство е идеално за проследяване на пари, дължими на вас (Assets:Receivables) или от вас (Liabilities:Payable).

Пример: Плащате за групова вечеря от 90 долара, а вашият приятел Боб ви дължи за своя дял от 45 долара.

  1. Запишете първоначалния разход и вземането:

    2024-08-05 * "Dinner Place" "Dinner with Bob"
    Expenses:Food:Restaurant 45.00 USD ; Your share
    Assets:Receivables:Bob 45.00 USD ; Bob owes you
    Assets:Bank:US:Chase:Checking -90.00 USD
  2. Когато Боб ви върне парите:

    2024-08-06 * "Bob" "Paid me back for dinner"
    Assets:Bank:US:Chase:Checking 45.00 USD
    Assets:Receivables:Bob -45.00 USD

Сметката Assets:Receivables:Bob вече е нула и вашите книги са перфектно балансирани.

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

Голяма покупка като кола не е прост разход; това е придобиване на актив, който губи стойност с течение на времето (амортизация).

  1. Запишете покупката като актив:

    2023-01-15 * "Toyota Dealer" "Purchase of a new car"
    Assets:Car:ToyotaCamry 30000.00 USD
    Assets:Bank:US:Chase:Checking -30000.00 USD
  2. Запишете годишна амортизация: Приемете, че оценявате, че колата губи 3 000 долара стойност всяка година. В края на годината записвате това като разход.

    2023-12-31 * "Depreciation" "Annual car value depreciation"
    Expenses:Depreciation:Car 3000.00 USD
    Assets:Car:ToyotaCamry -3000.00 USD

След този запис, вашата сметка Assets:Car:ToyotaCamry правилно отразява новата стойност на колата (27 000 долара) и вие сте отчели правилно разходите за използване като разход за тази година.

Част 6: Дълбоко гмуркане - Моделиране на сложни реални активи

Казус 1: Счетоводство на недвижими имоти

Домът често е вашият най-голям актив и пасив. Ето как да го моделирате.

  1. Създайте сметки и стока по избор:

    2022-01-01 commodity HOUSE_123MAIN
    name: "Property at 123 Main St"
    2022-01-01 open Assets:Property:Home:123Main HOUSE_123MAIN
    2022-01-01 open Liabilities:Mortgage:HomeLoan USD
    2022-01-01 open Expenses:Home:Interest
    2022-01-01 open Expenses:Home:PropertyTax
  2. Запишете покупката: Да кажем, че купувате къща за 500 хиляди долара със 100 хиляди долара първоначална вноска и заем от 400 хиляди долара.

    2022-03-15 * "Settlement Company" "Purchase of 123 Main St"
    Assets:Property:Home:123Main 1 HOUSE_123MAIN {500000.00 USD}
    Assets:Bank:DownPayment -100000.00 USD
    Liabilities:Mortgage:HomeLoan -400000.00 USD
  3. Запишете месечни ипотечни плащания: Вашето месечно плащане се състои от главница (намалява пасивите) и лихва (разход).

    2022-04-01 * "Mortgage Bank" "Monthly Mortgage Payment"
    Liabilities:Mortgage:HomeLoan 800.00 USD ; Principal
    Expenses:Home:Interest 1200.00 USD ; Interest
    Assets:Bank:US:Chase:Checking -2000.00 USD
  4. Проследяване на повишаването на стойността (нереализирани печалби): Пазарната стойност на къщата се променя. За да проследите това, без да засягате официалната си нетна стойност (тъй като печалбата не е реализирана, докато не продадете), можете да използвате ценова директива с "виртуална" валута.

    ; The purchase price is the real cost basis
    2022-03-15 price HOUSE_123MAIN 500000.00 USD

    ; An updated market estimate is an unrealized gain
    2024-01-01 price HOUSE_123MAIN 550000.00 USD.UNREALIZED

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

Казус 2: Проследяване на ограничени акции (RSUs)

RSUs са често срещана форма на компенсация на собствения капитал. Счетоводството за тях включва проследяване на първоначалната безвъзмездна помощ, събитията на придобиване и удържането на данъци.

  1. Първоначална настройка: Създайте стоки за придобити (HOOL) и непридобити (HOOL.UNVEST) акции, заедно с необходимите сметки.

    2021-01-01 commodity HOOL
    2021-01-01 commodity HOOL.UNVEST
    2021-01-01 open Assets:Brokerage:Etrade:HOOL HOOL
    2021-01-01 open Assets:Grant:Unvested HOOL.UNVEST
    2021-01-01 open Income:Salary:Hooli:RSU
    2021-01-01 open Expenses:Taxes:Federal
  2. Запишете първоначалната безвъзмездна помощ: Тази транзакция показва общата безвъзмездна помощ, която се премества в сметка за непридобити активи.

    2021-02-01 * "Hooli" "Initial RSU Grant"
    Assets:Grant:Unvested 1000 HOOL.UNVEST
    Income:Grant:Awards -1000 HOOL.UNVEST
  3. Запишете събитие на придобиване: Това е ключовата транзакция. Когато акциите се придобият, вие признавате доход, плащате данъци (често чрез продажба на някои акции) и получавате нетните акции. Приемете, че 100 акции се придобиват при 150 долара на акция.

    2022-02-01 * "Hooli" "RSU Vesting Event"
    ; Recognize total income of 100 * $150 = $15,000
    Income:Salary:Hooli:RSU -15000.00 USD

    ; Show taxes paid from this income
    Expenses:Taxes:Federal 4000.00 USD
    Expenses:Taxes:State 1000.00 USD

    ; You receive the net shares (assume 60 shares) at their cost basis
    Assets:Brokerage:Etrade:HOOL 60 HOOL {150.00 USD}

    ; The other 40 shares were sold to cover $6000 in taxes.
    ; This transaction balances the income, taxes, and received shares.
    ; We must also show the reduction in unvested shares.
    Assets:Grant:Unvested -100 HOOL.UNVEST
    Expenses:Grant:Vested 100 HOOL.UNVEST

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

Част 7: Управление на проекти за вашата счетоводна книга

С разрастването на вашата счетоводна книга организацията става ключова.

Използване на контрол на версиите (Git) за защита на вашите данни

Тъй като вашата счетоводна книга е текстов файл, тя е идеална за контрол на версиите с Git. Това ви дава пълна история на всички промени, предпазвайки ви от случайни изтривания или грешки. Предупреждение: Вашите финансови данни са изключително чувствителни. Използвайте частно хранилище в услуги като GitHub/GitLab или хоствайте свое собствено.

Организиране с тагове (#) и връзки (^)

Beancount предоставя два начина за групиране на транзакции отвъд сметките:

  • Тагове (#): Използвайте за събития или проекти. Можете да филтрирате всички транзакции, свързани с конкретно пътуване, например. 2024-07-20 * "Hotel" "Vienna" #trip-europe-2024
  • Връзки (^): Използвайте, за да свържете финансово свързани транзакции, които се случват по различно време, като например теглене на пари в брой и свързаната банкова такса.

Мащабируема стратегия за структуриране на вашите файлове (include)

Един огромен файл е труден за управление. Използвайте директивата include, за да разделите вашата счетоводна книга на множество файлове. main.bean:

; Main ledger file

; Global options
option "title" "My Personal Ledger"
option "operating_currency" "USD"

; Include account declarations and other files
include "accounts.bean"
include "years/2023.bean"
include "years/2024.bean"
include "events/trip-europe-2024.bean"

Стабилна организационна стратегия, по ред на старшинство:

  1. По събитие: Създайте отделен файл за голямо, самостоятелно събитие (напр. trip-europe-2024.bean).
  2. По категория/платец: За много редовни, повтарящи се транзакции като сметки за комунални услуги или заплата, ги групирайте в техен собствен файл (напр. recurring-rent.bean).
  3. По сметка: За транзакции, тясно свързани с конкретна сметка (лихви, такси, плащания с кредитна карта), помислете за файл, специфичен за сметката.
  4. По дата: За всички други общи транзакции е ефективно просто разделяне по година (2024.bean) или месец (2024/07.bean).

Част 8: Заключение

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

Първи стъпки с Beancount.io

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

Започнете своето финансово пътешествие с Beancount.io - Безплатно по време на нашия промоционален период!

Expenses

Income Statement

Balance Sheet