Това ръководство обобщава найдобрите практики за счетоводство в чист текст с помощта на мощния инструмент за счетоводство в чист текст с отворен код Beancount. То обхваща основната философия, синтаксиса от базов до напреднал, практически казуси за сложни активи и дългосрочни стратегии за управление на книгите.
Част 1: „Защо" — Основи на интелигентното водене на книги
Преди да се потопите в „как", е от решаващо значение да разберете „защо". Ефективното водене на книги е основата на личното финансово управление и необходима стъпка към финансова яснота и свобода.
Отвъд проследяването на разходи: Пътят към финансова яснота
Простите приложения за проследяване на разходи ви казват къде са отишли парите ви. Една стабилна счетоводна система ви казва това и много повече: тя предоставя пълна картина на финансовото ви здраве, включително нетната ви стойност, паричния поток и представянето на инвестициите ви. Основната цел е наблюдаемост — постигане на ясно, базирано на данни разбиране на финансовия ви живот, което ви позволява да вземате информирани решения, да оценявате риска и да работите към дългосрочни цели като пенсиониране.
Защо двоен запис? Силата на балансираната система
За разлика от счетоводството с единичен запис (прост списък с разходи), методът с двоен запис записва всяка транзакция като поток от стойност между поне две сметки. Неговият основен принцип е фундаменталното счетоводно уравнение:
Тази система гарантира, че книгите ви винаги са балансирани, което драстично намалява грешките. Тя предоставя пълна финансова картина чрез генериране на основни отчети като баланс (какво притежавате и дължите) и отчет за приходите и разходите (какво сте спечелили и похарчили).
Част 2: Първи стъпки с Beancount
Beancount е мощен, базиран на Python инструмент за счетоводство в чист текст.
Първи поглед с Fava в Beancount.io
Beancount.io предоставя мощна среда, която съчетава машината Beancount с мобилно приложение (iOS, Android) и уеб приложение — Fava, фантастичен уеб интерфейс за визуализиране на вашите книги. Не е необходима инсталация. Когато използвате платформата, вие директно взаимодействате с текстов редактор за файла с книги (напр. main.bean) и виждате как генерираните от Fava отчети се обновяват в реално време.
Fava взема написания от вас чист текст и го превръща в интерактивни графики, финансови отчети и филтрируеми списъци с транзакции, давайки ви ясен изглед на финансовите ви отчети.
Или започнете в терминала с bea
Ако предпочитате да работите от команден ред, bea е командният ред на Beancount.io. Не е необходим акаунт: инсталирайте го с brew install bex-co/tap/bea или uv tool install beancount-io и той създава, валидира, прави заявки и отчети върху същия файл в чист текст. Бързият старт с CLI ви дава първите книги за няколко минути, а Първият ви месец с bea затваря цял месец от начало до край.
Петте основни типа сметки
Beancount използва пет типа сметки от най-високо ниво, които формират структурата на вашите книги:
| Тип сметка | Описание | Типичен баланс |
|---|---|---|
Assets | Какво притежавате (пари в брой, банкови сметки, инвестиции, имущество). | Положителен |
Liabilities | Какво дължите (дълг по кредитни карти, заеми, ипотеки). | Отрицателен |
Income | Откъде идват пари (заплата, бонуси, лихви). | Отрицателен |
Expenses | Къде отиват пари (храна, наем, пътувания, данъци). | Положителен |
Equity | Вашата нетна стойност; използва се за начални баланси. | Отрицателен |
Уравнението на Beancount
Beancount налага своя собствена версия на счетоводното уравнение, при която сборът на всички осчетоводявания в цялата ви книга е равен на нула:
Ето защо по конвенция сметките 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 се отличава в счетоводството в множество валути.
- Използвайте
@, за да посочите цена на конверсия за единица. - Използвайте
@@, за да посочите общата цена на конверсията.
; 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.
-
Запишете първоначалния разход и вземането:
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 -
Когато Боб ви върне парите:
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 сега е нула и книгите ви са идеално балансирани.
Активи срещу разходи: Покупка на автомобил и амортизация
Голяма покупка като автомобил не е просто разход; това е придобиване на актив, който губи стойност с течение на времето (амортизация).
-
Запишете покупката като актив:
2023-01-15 * "Toyota Dealer" "Purchase of a new car" Assets:Car:ToyotaCamry 30000.00 USD Assets:Bank:US:Chase:Checking -30000.00 USD -
Запишете годишната амортизация: Да предположим, че оценявате, че автомобилът губи по $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: Счетоводно отчитане на недвижими имоти
Домът често е най-големият ви актив и пасив. Ето как да го моделирате.
-
Създайте сметки и персонализирана стока:
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 -
Запишете покупката: Да кажем, че купувате къща за $500k с първоначална вноска от $100k и заем от $400k.
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 -
Запишете месечните ипотечни плащания: Месечното ви плащане се състои от главница (намалява пасива) и лихва (разход).
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 -
Проследяване на увеличението на стойността (нереализирани печалби): Пазарната стойност на къщата се променя. За да проследите това, без да засягате официалната си нетна стойност (тъй като печалбата не е реализирана, докато не продадете), можете да използвате директива за цена с „виртуална" валута.
За поддържани пазарни активи и валутни двойки, Live Prices може да поддържа оценки на стойността в хоствани книги. Отделните имоти все още се нуждаят от вашите собствени оценки и датирани цени, както в примера по-долу.
; 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: Проследяване на ограничени акции (RSU)
RSU са често срещана форма на компенсация под формата на собствен капитал. Счетоводното им отчитане включва проследяване на първоначалното предоставяне, събитията на придобиване и удържането на данъци.
-
Първоначална настройка: Създайте стоки за придобити (
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:Grant:Awards HOOL.UNVEST 2021-01-01 open Expenses:Grant:Vested HOOL.UNVEST 2021-01-01 open Income:Salary:Hooli:RSU USD 2021-01-01 open Expenses:Taxes:Federal USD 2021-01-01 open Expenses:Taxes:State USD -
Запишете първоначалното предоставяне: Тази транзакция показва общото предоставяне, преминаващо в сметка за непридобит актив. Нищо все още не подлежи на данъчно облагане, така че целият запис е деноминиран в проследяващата стока
HOOL.UNVEST.2021-02-01 * "Hooli" "Initial RSU Grant" Assets:Grant:Unvested 1000 HOOL.UNVEST Income:Grant:Awards -1000 HOOL.UNVEST -
Запишете събитие на придобиване: Това е ключовата транзакция. Когато акциите се придобият, вие признавате приход, работодателят удържа акции за плащане на данъка, а вие задържате останалите. Да предположим, че 100 акции се придобиват при $150.00, така че:
- Брутна компенсация: 100 × $150.00 = $15,000.00
- Акции, удържани за данък: 40 × $150.00 = $6,000.00 (федерален $4,800.00 + щатски $1,200.00)
- Акции, които задържате: 60 × $150.00 = $9,000.00 данъчна основа
- Пари в брой за вас: $0.00 — цялото удържане е платено в акции
Тези суми са записът и те се съгласуват: $6,000.00 данък плюс $9,000.00 задържани акции е точно $15,000.00 приход.
2022-02-01 * "Hooli" "RSU Vesting Event" ; Ordinary income: 100 shares * $150.00 Income:Salary:Hooli:RSU -15000.00 USD ; Tax withheld, funded by 40 of the 100 shares (40 * $150.00 = $6,000.00) Expenses:Taxes:Federal 4800.00 USD Expenses:Taxes:State 1200.00 USD ; The 60 shares you keep, at their $150.00 vesting-day basis Assets:Brokerage:Etrade:HOOL 60 HOOL {150.00 USD} ; Retire the 100 unvested units the grant was tracking Assets:Grant:Unvested -100 HOOL.UNVEST Expenses:Grant:Vested 100 HOOL.UNVEST
Тази единствена, балансирана транзакция моделира цялото събитие: непридобитото предоставяне се намалява, приходът се признава, данъкът се удържа и 60-те нетни придобити акции се появяват в брокерската ви сметка с правилната данъчна основа за бъдещи изчисления на капиталови печалби.
Два детайла си струва да копирате в собствените си книги. Първо, изпишете удържането сметка по сметка, вместо да оставите обща балансираща сметка да го поеме — ако федералните и щатските осчетоводявания не се сумират до стойността на удържаните акции, транзакцията няма да се балансира и Beancount ще ви каже това. Второ, не оставяйте празен ред между осчетоводяванията: празният ред прекратява транзакцията и Beancount отчита синтактична грешка в осчетоводяванията, които го следват.
Ако работодателят ви продаде удържаните акции на открития пазар, вместо да ги вземе обратно на цената на придобиване, продажбата е отделна транзакция — намаление на Assets:Brokerage:Etrade:HOOL срещу пари в брой — и всяка разлика между продажната цена и основата от $150.00 е малка капиталова печалба или загуба. Дръжте я извън записа за придобиване.
Част 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"Стабилна организационна стратегия, по ред на приоритет:
- По събитие: Създайте отделен файл за голямо, самостоятелно събитие (напр.
trip-europe-2024.bean). - По категория/получател: За силно регулярни, повтарящи се транзакции като сметки за комунални услуги или заплата, групирайте ги в собствен файл (напр.
recurring-rent.bean). - По сметка: За транзакции, тясно свързани с конкретна сметка (лихви, такси, плащания по кредитни карти), обмислете файл, специфичен за сметката.
- По дата: За всички други общи транзакции, простото разделяне по година (
2024.bean) или месец (2024/07.bean) е ефективно.
Част 8: Заключение
Beancount предлага стръмна крива на обучение, но възнаграждава усилията с несравнима мощ, гъвкавост и контрол върху финансовите ви данни. Възприемайки принципите на счетоводството с двоен запис и практичните инструменти, които Beancount предоставя, можете да преминете от просто проследяване на разходи към пълна, точна и прозорлива система за лично финансово управление. Вашите книги се превръщат в постоянен, личен и безценен актив за разбиране на миналото ви и планиране на бъдещето ви.
Първи стъпки с Beancount.io
Beancount.io е модерна облачна платформа за финансово управление, която превръща вашите базирани на текст записи на транзакции в изчерпателни финансови отчети, включително отчети за приходите и разходите, баланси и оборотни ведомости. Съчетавайки надеждността на файловете в чист текст с мощни инструменти за визуализация, Beancount.io ви помага да поддържате прецизен контрол върху финансовия си живот, като същевременно получавате ценни прозрения за представянето на инвестициите си.
Започнете финансовото си пътуване с Beancount.io — вижте текущите планове и цени, за да разберете какво включва всяко ниво.


