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

2 публикации маркиран с/със "ledger"

Вижте всички етикети

Избор на S-Corp, обяснен за потребители на Beancount

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

Какво представлява, кога се изплаща и как да го моделирате чисто във вашия ledger (с примери).

⚠️ Това ръководство е специфично за САЩ и е само за образователни цели. Консултирайте се с данъчен специалист за вашата ситуация.

TL;DR

  • S-corp е данъчен статус, който избирате с IRS (чрез Формуляр 2553), така че бизнес печалбите да преминават към личните данъчни декларации на собствениците. Ключово изискване е да плащате на собствениците-оператори разумна W-2 заплата, преди да вземете каквато и да е печалба като дивиденти или разпределения.
  • Крайните срокове са важни: За съществуващ бизнес трябва да подадете не по-късно от 15-ия ден на 3-тия месец от данъчната година, в която искате да започне статусът на S-corp. За избор за календарната 2025 година, 15 март 2025 г. се пада в събота, така че практическият краен срок е следващият работен ден, понеделник, 17 март 2025 г..
  • Защо да правите това? Основната атракция е потенциалното спестяване на данъци за самонаети лица. Докато вашата W-2 заплата е обект на данъци FICA, разпределенията не са. Тази полза обаче е свързана с допълнителни разходи за заплати, съответствие и в някои щати допълнителни данъци на ниво предприятие.
  • В Beancount е важно да разделяте заплатите от разпределенията. Ще трябва да проследявате задълженията за заплати, да обработвате специалното счетоводство за здравно осигуряване за акционери, притежаващи повече от 2% от компанията, и да записвате разпределенията изрично чрез сметки за собствен капитал.

2025-08-08-s-corp-election

Какво представлява изборът на S-corp?

По същество изборът на S-corp е заявка, която правите към IRS, за да промените начина, по който се облага вашият бизнес. Чрез подаване на Формуляр 2553 вие молите IRS да облага вашата корпорация или LLC съгласно Подглава S от Данъчния кодекс на вътрешните приходи. Това прави вашия бизнес "проходно" предприятие, което означава, че неговите приходи, загуби, удръжки и кредити се прехвърлят директно към личните данъчни декларации на акционерите. Това е чисто данъчна класификация, а не различен вид юридическо бизнес предприятие.

Ключови ефекти за собственик-оператор

След като изборът е активен, вашата роля fundamentalно се разделя на две: вие вече сте едновременно акционер и служител на вашата компания.

Това разграничение е от решаващо значение. Възнаграждението, което получавате за вашия труд, трябва да се изплаща като W-2 заплати, които са обект на стандартни данъци върху заплатите (социално осигуряване и Medicare). Всяка останала печалба може да бъде изплатена като разпределения, които обикновено не са обект на данъци за самонаети лица. IRS настоява да си плащате разумна заплата за вашата работа, преди да вземете каквито и да е разпределения.

Трябва ли да изберете статут на S-corp?

Изборът на S-corp често си струва да се оцени, след като вашият бизнес генерира стабилна и значителна печалба. Общо правило е да го обмислите, когато вашата текуща бизнес печалба може удобно да поддържа пазарна заплата за вашата роля, като остава достатъчно, за да направи разпределенията си струващи след покриване на всички нови административни разходи.

Точната точка на рентабилност е уникална за вашата ситуация и зависи от няколко фактора:

  • Вашата "Разумна заплата": Какво би платил бизнес за някой с вашите умения и отговорности във вашата индустрия? Тази цифра е базовата линия за вашите W-2 заплати и е обект на контрол от IRS.
  • Щатски данъци и такси: Някои щати имат свои собствени правила. Калифорния, например, налага данък от 1,5% върху нетния доход на S-corp, плюс минимален годишен франчайз данък от $800.
  • Допълнителни разходи: Ще ви е необходима услуга за заплати и ще плащате за осигуряване за безработица. Вашите такси за счетоводство и данъчна подготовка също вероятно ще се увеличат поради добавената сложност.
  • QBI приспадане (Раздел 199A): Изборът на S-corp може да повлияе на вашето приспадане на квалифициран бизнес доход. W-2 заплатите, които си плащате, могат или да ви помогнат да се класирате за пълното приспадане, или при по-високи нива на доход да се превърнат в ограничаващ фактор.

Право на участие и време

Не всеки бизнес може да стане S-corp. Ето основните изисквания:

  • Трябва да е местна корпорация или отговаряща на условията LLC.
  • Може да има не повече от 100 акционери.
  • Може да има само един клас акции.
  • Акционерите трябва да бъдат физически лица, определени тръстове или имущества (т.е. без партньорства, корпорации или акционери, които не са местни чужденци).

Кога да подадете формуляр 2553

Времето е от решаващо значение и правилата се различават леко за новите спрямо съществуващите бизнеси.

  • За нов бизнес: Трябва да подадете в рамките на 2 месеца и 15 дни след първия ден от вашата първа данъчна година. Например, ако данъчната година на вашия бизнес започва на 7 януари, крайният ви срок е 21 март.
  • За съществуваща C-corp (или LLC, облагана като C-corp): Можете да подадете по всяко време през предходната данъчна година или до 15-ия ден на 3-тия месец от годината, в която искате изборът да влезе в сила. Ако тази дата се пада в уикенд или празник, крайният срок се измества към следващия работен ден, разпоредба, предоставена съгласно Раздел 7503 от IRC.

Какво ще стане, ако сте пропуснали крайния срок? Не се паникьосвайте. IRS предоставя път за облекчение при късен избор съгласно Резолюция за приходите 2013-30. Често можете да подадете заявление за това облекчение в рамките на 3 години и 75 дни от предвидената дата на влизане в сила, при условие че имате основателна причина за късното подаване.

Разумна заплата: Частта, която спъва хората

Това е най-проверяваният аспект на структурата на S-corp. IRS е много ясен: на акционерите-служители трябва да се изплаща разумно възнаграждение за услугите, които предоставят преди каквато и да е печалба да бъде взета като разпределения.

Какво означава "разумно"? Няма единна сума в долари. IRS и съдилищата разглеждат различни фактори, за да определят дали вашата заплата е подходяща, включително вашите задължения и отговорности, времето, което прекарвате в работа, вашето ниво на опит и какво биха платили сравними бизнеси за подобни услуги. Очаквайте IRS да разгледа внимателно, ако си плащате много ниска W-2 заплата, докато вземате големи разпределения. Това често се разглежда като червен флаг за опит за избягване на данъци върху заплатите.

Здравно осигуряване и допълнителни обезщетения за акционери >2%

Има специално правило за това как S-corps обработват здравното осигуряване за акционери, които притежават повече от 2% от компанията. Ако S-corp плаща или възстановява тези премии за здравно осигуряване, разходът е приспадаем от S-corp.

Стойността на тези премии обаче трябва също да бъде включена в W-2 заплатите на акционера-служител. Докато тази сума е обект на удържане на федерален данък върху дохода, тя е освободена от данъци за социално осигуряване и Medicare (FICA), стига да се обработва правилно. Трябва да се координирате с вашия доставчик на заплати, за да гарантирате, че тези суми са отчетени правилно във вашия W-2.

Щатски уловки (примери)

Федералният статус на S-corp не винаги се превежда директно на щатско ниво. Винаги проверявайте специфичните правила на вашия щат.

  • Калифорния: S-corps подлежат на 1,5% данък върху нетния си доход от Калифорния. Освен това повечето корпорации трябва да плащат минимален франчайз данък от $800 всяка година (въпреки че някои изключения важат за първата година).
  • Ню Йорк: Само федералният избор на S-corp не е достатъчен. Трябва също да подадете отделен избор на щатско ниво, Формуляр CT-6, за да бъдете третирани като S-корпорация в Ню Йорк. Ако не го направите, означава, че ще бъдете облагани като стандартна C-corp на щатско ниво.

Как да моделирате S-corp чисто в Beancount

Обикновеното текстово счетоводство е идеално за управление на добавената сложност на S-corp. Ето как да структурирате вашия ledger.

Предложена схема на сметките (начална)

Тази основна структура разделя вашите разходи за заплати от разпределенията и създава сметки за пасиви, за да проследява данъците, които дължите.

; Основна банка и доход
1970-01-01 open Assets:Bank:Checking USD
1970-01-01 open Income:Sales USD
1970-01-01 open Income:Other USD

; Разходи за заплати и пасиви
1970-01-01 open Expenses:Payroll:Wages USD
1970-01-01 open Expenses:Payroll:EmployerTaxes USD
1970-01-01 open Expenses:Benefits:HealthInsurance USD
1970-01-01 open Liabilities:Payroll:Federal:FIT USD
1970-01-01 open Liabilities:Payroll:FICA USD
1970-01-01 open Liabilities:Payroll:Medicare USD
1970-01-01 open Liabilities:Payroll:State:Withholding USD

; Собствен капитал
1970-01-01 open Equity:ContributedCapital USD
1970-01-01 open Equity:Distributions USD
1970-01-01 open Equity:RetainedEarnings USD

Типично изпълнение на заплати (опростено)

Вашият доставчик на заплати (напр. Gusto, ADP) ще дебитира вашата банкова сметка за вашата нетна заплата и общото данъчно задължение. Вашата Beancount транзакция трябва да разбие това на брутни заплати, данъци на работодателя и съответните пасиви.

; Тази транзакция записва годишна заплата от $100 000, изплащана месечно.
2025-01-31 * "Gusto" "Януарска заплата — акционер-служител"
Expenses:Payroll:Wages 8,333.33 USD ; Брутни заплати
Expenses:Payroll:EmployerTaxes 637.50 USD ; Данъци FICA/Medicare на работодателя
Liabilities:Payroll:Federal:FIT -1,200.00 USD ; Удържане на служител
Liabilities:Payroll:FICA -516.67 USD ; Удържане на служител
Liabilities:Payroll:Medicare -120.83 USD ; Удържане на служител
Assets:Bank:Checking -7,133.33 USD ; Нетна заплата, дебитирана от банката

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

; Това представлява данъчното плащане, извършено от вашия доставчик на заплати.
2025-02-15 * "EFTPS" "Федерален депозит за данък върху заплатите"
Liabilities:Payroll:Federal:FIT 1,200.00 USD
Liabilities:Payroll:FICA 516.67 USD
Liabilities:Payroll:Medicare 120.83 USD
Assets:Bank:Checking -1,837.50 USD ; Тази сума съответства на данъчната част от дебита на Gusto.

Здравно осигуряване за акционер >2%

Запишете плащането на премията като бизнес разход. Можете да използвате метаданни, за да си напомните, че това трябва да бъде отчетено във W-2.

2025-02-01 * "BlueCross" "Здравно осигуряване за акционер (отчет във W-2)"
Expenses:Benefits:HealthInsurance 600.00 USD ; w2: "true"
Assets:Bank:Checking -600.00 USD

Разпределения на собственика (не заплати)

Разпределенията са намаление на собствения капитал, а не бизнес разход. Записвайте ги отделно от заплатите.

2025-03-31 * "Разпределение на собственика" "Разпределение за Q1"
Equity:Distributions 20,000.00 USD
Assets:Bank:Checking -20,000.00 USD

Проследяване на базата на акционерите (по избор, но препоръчително)

Базата на вашите акционери определя дали разпределенията са освободени от данъци и дали можете да приспаднете бизнес загуби от вашата лична декларация. Докато официалното изчисление се извършва във вашата данъчна декларация, можете да проследите оценка в Beancount, като използвате специална подсметка за собствен капитал или метаданни. Ще съгласувате това с Приложение K-1, което получавате от S-corp годишно.

Забележка относно QBI приспадането (Раздел 199A)

Собствениците на проходни бизнеси, включително S-corps, могат да имат право на приспадане до 20% от квалифицирания си бизнес доход (QBI). За данъкоплатци с доход над определен праг обаче това приспадане може да бъде ограничено от размера на W-2 заплатите, които бизнесът плаща. Това създава сложно взаимодействие: плащането на разумна заплата е задължително за S-corp, а същите тези заплати могат да повлияят на вашето QBI приспадане — понякога му помагайки, понякога ограничавайки го. Това е ключова област, която да моделирате с вашия данъчен специалист.

Какво се променя оперативно след като изберете?

Преминаването към S-corp добавя няколко административни слоя:

  • Изпълнение на заплати: Трябва официално да изпълнявате заплати, заедно с удържане на данъци, плащане на данъци на работодателя, тримесечни подавания и W-2 в края на годината.
  • Подаване на формуляр 1120-S: Това е годишната данъчна декларация на S-корпорацията. Ще издадете и Приложение K-1 на всеки акционер, в което се посочва техният дял от финансовите резултати на компанията.
  • Правилно обработване на здравното осигуряване на акционерите: Уверете се, че премиите за собственици >2% са включени в техните W-2 заплати.
  • Спазване на щатските правила: Бъдете в крак с всички изисквани избори на S-corp на щатско ниво или данъци върху предприятията (както в Калифорния и Ню Йорк).

Често срещани клопки, които трябва да избягвате

  • Късен или невалиден избор: Проверете два пъти крайните срокове и се уверете, че всички необходими акционери са подписали Формуляр 2553. Ако го пропуснете, проучете облекчението съгласно Резолюция за приходите 2013-30.
  • Неразумна заплата: Не се изкушавайте да си плащате изкуствено ниска заплата. Документирайте защо вашето възнаграждение е разумно въз основа на вашата роля и пазарните данни.
  • Смесване на заплати и разпределения: Поддържайте тези транзакции чисти и отделни във вашите книги. Разпределенията не са заплати.
  • Пренебрегване на щатските изисквания: Забравянето на щатски избор или неплащането на данък на ниво предприятие може да доведе до глоби и проблеми със съответствието.

Бърз контролен списък

  • Потвърдете, че отговаряте на условията и че потенциалните данъчни спестявания надвишават новите разходи.
  • Отбележете в календара крайния срок за подаване на Формуляр 2553 (и не забравяйте правилото за уикенд/празник).
  • Създайте услуга за заплати и определете добре документирана, разумна заплата.
  • Планирайте да вземате разпределения само след като са платени заплатите и бизнес разходите.
  • Проучете и спазвайте специфичните изисквания за подаване и данъци за S-corp на вашия щат.
  • Актуализирайте вашия Beancount ledger с необходимите сметки за заплати, пасиви и собствен капитал на акционерите.

Beancount S‑Corp Starter (неутрален шаблон)

;
; Beancount S‑Corp Starter (неутрален шаблон)
; Генерирано: 2025-08-09
; ---
; Как да използвате това:
; 1) Потърсете "TODO" и попълнете вашия щат(и), доставчик на заплати, EIN и имена на банки.
; 2) Дръжте заплатите и разпределенията на собственика отделно.
; 3) Координирайте с вашия доставчик на заплати, за да отчетете здравното осигуряване на акционери >2% във W‑2 (Поле 1).
; 4) Изтрийте или адаптирайте примерите за Калифорния/Ню Йорк, ако сте в друг щат.
;
; Бележки:
; - Това е шаблон за счетоводство, а не данъчен съвет.
; - Валута на работа се приема USD. Променете, ако е необходимо.
;

option "title" "S‑Corp Ledger"
option "operating_currency" "USD"
commodity USD

; === Сметки (отворени от 2025-01-01; коригирайте датите, ако е необходимо) ==================
2025-01-01 open Assets:Bank:Checking USD ; TODO: Преименувайте на вашата банка (напр. Assets:Bank:Chase:Operating)
2025-01-01 open Assets:Bank:Savings USD
2025-01-01 open Assets:AccountsReceivable USD
2025-01-01 open Assets:PrepaidExpenses USD

2025-01-01 open Liabilities:CreditCard:Corporate USD
2025-01-01 open Liabilities:Payroll:Federal:FIT USD
2025-01-01 open Liabilities:Payroll:Federal:FICA USD
2025-01-01 open Liabilities:Payroll:Federal:Medicare USD
2025-01-01 open Liabilities:Payroll:Federal:FUTA USD
2025-01-01 open Liabilities:Payroll:State:Withholding USD ; TODO: Преименувайте щата (напр. CA, NY)
2025-01-01 open Liabilities:Payroll:State:Unemployment USD
2025-01-01 open Liabilities:Payroll:Local USD

2025-01-01 open Equity:ContributedCapital USD
2025-01-01 open Equity:Distributions USD
2025-01-01 open Equity:RetainedEarnings USD
2025-01-01 open Equity:OpeningBalances USD

2025-01-01 open Income:Sales USD
2025-01-01 open Income:Other USD

2025-01-01 open Expenses:COGS USD
2025-01-01 open Expenses:Payroll:Wages USD
2025-01-01 open Expenses:Payroll:EmployerTaxes:FICA USD
2025-01-01 open Expenses:Payroll:EmployerTaxes:Medicare USD
2025-01-01 open Expenses:Payroll:EmployerTaxes:FUTA USD
2025-01-01 open Expenses:Payroll:EmployerTaxes:State USD
2025-01-01 open Expenses:Benefits:HealthInsurance USD
2025-01-01 open Expenses:Benefits:HSA USD
2025-01-01 open Expenses:Benefits:Retirement:Match USD
2025-01-01 open Expenses:Taxes:State:S‑Corp USD ; напр. 1,5% данък върху предприятието в Калифорния
2025-01-01 open Expenses:Taxes:State:Franchise USD ; напр. минимален франчайз данък от $800 в Калифорния
2025-01-01 open Expenses:Professional:Payroll USD
2025-01-01 open Expenses:Professional:Accounting USD
2025-01-01 open Expenses:Professional:Legal USD
2025-01-01 open Expenses:BankFees USD
2025-01-01 open Expenses:Software USD
2025-01-01 open Expenses:Office USD
2025-01-01 open Expenses:Meals USD
2025-01-01 open Expenses:Travel USD
2025-01-01 open Expenses:Insurance:GeneralLiability USD

; === Пример: Капитализация на собственика =================================================
2025-01-02 * "Собственик" "Първоначален капиталов принос"
Assets:Bank:Checking 25,000.00 USD
Equity:ContributedCapital -25,000.00 USD

; === Пример: Плащане от клиент =====================================================
2025-01-15 * "Stripe" "Януарски постъпления от абонамент"
Assets:Bank:Checking 12,000.00 USD
Income:Sales -12,000.00 USD


; === Пример: Месечна заплата (единичен акционер-служител) ========================
; Числата са избрани да се балансират перфектно. Адаптирайте FIT/щатските числа към вашата реалност.
; Брутна заплата: 8,333.33 | Служител FIT: 1,200.00 | Щатско удържане: 300.00
; Служител FICA (6.2%): 516.67 | Служител Medicare (1.45%): 120.83
; Работодател FICA: 516.67 | Работодател Medicare: 120.83
; Нетна заплата: 6,195.83
2025-01-31 * "Gusto" "Януарска заплата — акционер-служител"
Expenses:Payroll:Wages 8,333.33 USD
Expenses:Payroll:EmployerTaxes:FICA 516.67 USD
Expenses:Payroll:EmployerTaxes:Medicare 120.83 USD
Liabilities:Payroll:Federal:FIT -1,200.00 USD
Liabilities:Payroll:Federal:FICA -1,033.34 USD ; служител + работодател
Liabilities:Payroll:Federal:Medicare -241.66 USD ; служител + работодател
Liabilities:Payroll:State:Withholding -300.00 USD
Assets:Bank:Checking -6,195.83 USD

; === Пример: Депозити за данък върху заплатите (EFTPS & Щат) =================================
2025-02-15 * "EFTPS" "Федерален депозит за заплата (FIT, FICA, Medicare)"
Liabilities:Payroll:Federal:FIT 1,200.00 USD
Liabilities:Payroll:Federal:FICA 1,033.34 USD
Liabilities:Payroll:Federal:Medicare 241.66 USD
Assets:Bank:Checking -2,475.00 USD

2025-02-16 * "STATE DOR" "Щатско удържане на заплата"
Liabilities:Payroll:State:Withholding 300.00 USD
Assets:Bank:Checking -300.00 USD

; === Пример: Здравно осигуряване за акционер >2% =================================
; Координирайте с отдела за заплати, така че общата годишна премия да бъде включена в W‑2 Поле 1.
; Самата премия е приспадаема тук; НЕ удържайте SS/Medicare върху нея, когато се обработва правилно.
2025-02-01 * "BlueCross" "Здравно осигуряване за акционер (включването във W‑2 се обработва от отдела за заплати)"
Expenses:Benefits:HealthInsurance 600.00 USD ; w2: "true"
Assets:Bank:Checking -600.00 USD

; === Пример: Разпределение на собственика (не заплати) =======================================
2025-03-31 * "Разпределение на собственика" "Разпределение за Q1"
Equity:Distributions 20,000.00 USD
Assets:Bank:Checking -20,000.00 USD

; === Примери за щати (изтрийте/редактирайте, ако не е приложимо) =================================
; Минимален франчайз данък в Калифорния (не винаги през първата година; проверете правилата)
2025-04-15 * "California FTB" "Годишен франчайз данък"
Expenses:Taxes:State:Franchise 800.00 USD
Assets:Bank:Checking -800.00 USD

; 1,5% данък върху предприятието S‑Corp в Калифорния (примерно плащане на оценка)
2025-06-15 * "California FTB" "Оценка на данък S‑Corp"
Expenses:Taxes:State:S‑Corp 1,500.00 USD
Assets:Bank:Checking -1,500.00 USD

; Отделният S избор в Ню Йорк (CT‑6) няма пряко въздействие върху книгата; заместваща бележка.
2025-01-05 note Equity:RetainedEarnings "S‑избор в Ню Йорк (CT‑6) подаден — само счетоводна бележка (без запис)"

; === Проследяване на базата (по избор — бележка извън книгата) =====================================
2025-12-31 note Equity:RetainedEarnings "Превъртане на базата: +Капитал 25,000 +Доход 60,000 −Разпределения 20,000 = Крайна база 65,000 (съгласуване с K‑1)"

; === Съвети за импортиране (CSV от Gusto/ADP) =============================================
; - За CSV регистри на заплати от Gusto, съпоставете колоните:
; Брутна заплата -> Expenses:Payroll:Wages
; Служител FIT/FICA/Medicare -> Liabilities:Payroll:Federal:FIT/FICA/Medicare (отрицателно)
; Щатско удържане -> Liabilities:Payroll:State:Withholding (отрицателно)
; Работодател FICA/Medicare/FUTA/SUTA -> Expenses:Payroll:EmployerTaxes:* (положително) И
; ако вашият CSV изброява данъците на работодателя като дължими суми, отразете ги като Liabilities:* (отрицателно),
; след това изчистете с вашите EFTPS/щатски плащания.
; Нетна заплата -> Assets:Bank:Checking (отрицателно, съответства на датата на плащане)
; - Здравно осигуряване, платено от компанията:
; Плащане на доставчика -> Expenses:Benefits:HealthInsurance (положително) / Bank (отрицателно);
; уверете се, че заплатата включва годишната премия в W‑2 Поле 1 за акционер >2%.
;
; Съвети:
; - Дръжте разпределенията извън сметките за заплати.
; - Използвайте етикети като #заплата #разпределение, за да филтрирате във Fava.
; - Обмислете отделни подсметки за банки за данъчни резерви (федерални/щатски).

Техническо предимство на Beancount спрямо Ledger, hledger и GnuCash

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

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

Въз основа на подробен сравнителен доклад, нека анализираме техническите спецификации на Beancount спрямо неговите популярни алтернативи с отворен код: Ledger-CLI, hledger и GnuCash.

2025-07-22-beancounts-technical-edge-a-deep-dive-on-performance-python-api-and-data-integrity-vs-ledger-hledger-and-gnucash


Скорост и производителност: Количествени показатели 🚀

За всеки сериозен набор от данни, производителността е от съществено значение. Beancount е проектиран да обработва десетилетия транзакционни данни без компромис със скоростта. Въпреки че е имплементиран в Python (v2), неговият силно оптимизиран парсер е изключително ефективен.

  • Beancount: Реалното използване показва, че може да зарежда и обработва счетоводни книги със стотици хиляди транзакции за приблизително 2 секунди. Използването на памет е умерено; парсирането на ~100 000 транзакции конвертира изходния текст в обекти в паметта, използвайки само десетки мегабайти RAM.
  • Тест за натоварване с 1 милион транзакции: Тест с използване на синтетична счетоводна книга с 1 милион транзакции, 1000 сметки и 1 милион ценови записи разкри значителни архитектурни разлики:
    • hledger (Haskell): Успешно завърши пълно парсиране и отчет за ~80,2 секунди, обработвайки ~12 465 транзакции/сек, използвайки ~2,58 GB RAM.
    • Ledger-CLI (C++): Процесът беше прекратен след 40 минути без завършване, вероятно поради известна регресия, причиняваща прекомерно използване на памет и процесор при силно сложни счетоводни книги.
    • Beancount: Въпреки че не е включен в този специфичен тест с 1 милион транзакции, неговата крива на производителност предполага, че би се справил ефективно със задачата. Освен това, предстоящият Beancount v3, с новото си C++ ядро и Python API, се очаква да достави още едно порядъчно подобрение в пропускателната способност.
  • GnuCash (C/Scheme): Като GUI приложение, зареждащо целия си набор от данни в паметта, производителността се влошава забележимо с размера. XML файл от ~50 MB (представляващ 100 000+ транзакции) отне 77 секунди за отваряне. Преминаването към SQLite backend само незначително подобри това до ~55 секунди.

Заключение: Beancount осигурява изключителна производителност, която се мащабира предвидимо, ключова характеристика за дългосрочно управление на данни. Той избягва проблемите с производителността, наблюдавани в Ledger, и латентността, свързана с потребителския интерфейс на GnuCash.


Архитектура на данните: Обикновен текст срещу непрозрачни бази данни 📄

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

  • Компактен и ефективен: Файл на Beancount със 100 000 транзакции е само ~8,8 MB. Това е по-компактно от еквивалентния Ledger файл (~10 MB), отчасти защото синтаксисът на Beancount позволява извеждане на крайния балансиращ размер в транзакция, намалявайки излишъка.
  • Структурно наложен: Beancount изисква изрични директиви YYYY-MM-DD\ open\ Account. Този дисциплиниран подход предотвратява печатни грешки в имената на сметките да създават мълчаливо нови, неправилни сметки - често срещан капан в системи като Ledger и hledger, които създават сметки в движение. Тази структура прави данните по-надеждни за програмна манипулация.
  • Готов за контрол на версиите: Счетоводна книга в обикновен текст е идеално подходяща за контрол на версиите с Git. Получавате пълна, проверяема история на всяка финансова промяна, която правите.
  • Контраст с GnuCash: GnuCash използва по подразбиране gzip-компресиран XML файл, където данните са подробни и обвити в тагове с GUID за всяка единица. Въпреки че предлага SQLite, MySQL и PostgreSQL backends, това абстрахира данните от проста, директна текстова манипулация и версииране. Редактирането на суровия XML е възможно, но е много по-тромаво от редактирането на Beancount файл.

Заключение: Форматът на данните на Beancount не е просто текст; това е добре дефиниран език, който максимизира яснотата, налага коректност и се интегрира безпроблемно с инструменти за разработчици като git и grep.


Убийствената функция: Истинско Python API и плъгин архитектура 🐍

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

  • Директен програмен достъп: Можете да четете, заявявате и манипулирате данните от счетоводната си книга директно в Python. Ето защо разработчиците мигрират. Както отбеляза един потребител, фрустрацията от опитите за скриптиране срещу лошо документираните вътрешни връзки на Ledger изчезва с Beancount.
  • Плъгин тръбопровод: Зареждащото устройство на Beancount ви позволява да вмъквате персонализирани Python функции директно в тръбопровода за обработка. Това позволява произволни трансформации и валидации на потока от данни, докато се зарежда - например, писане на плъгин, за да се гарантира, че всеки разход от конкретен доставчик трябва да има определен етикет.
  • Мощна рамка за импортиране: Преминете отвъд тромавите CSV съветници за импортиране. С Beancount, вие пишете Python скриптове за парсиране на финансови отчети от всеки източник (OFX, QFX, CSV). Инструменти на общността като smart_importer дори използват модели за машинно обучение, за да предсказват и присвояват автоматично сметки за осчетоводяване, превръщайки часове ръчно категоризиране в процес от няколко секунди с една команда.
  • Как се сравняват другите:
    • Ledger/hledger: Разширяемостта е предимно външна. Вие предавате данни към/от изпълнимия файл. Въпреки че могат да извеждат JSON/CSV, не можете да инжектирате логика в основния им цикъл на обработка, без да модифицирате C++/Haskell изходния код.
    • GnuCash: Разширяемостта се обработва чрез стръмна крива на обучение с Guile (Scheme) за персонализирани отчети или чрез Python връзки (използвайки SWIG и библиотеки като PieCash), които взаимодействат с GnuCash двигателя. Той е мощен, но по-малко директен и "Pythonic" от родния библиотечен подход на Beancount.

Заключение: Beancount е проектиран за програмиста. Неговият дизайн, ориентиран към библиотеката, и дълбоката интеграция с Python го правят най-гъвкавата и автоматизируема система от четирите.


Философия: Строг компилатор за вашите финанси 🤓

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

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

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

За кого е Beancount?

Въз основа на този технически анализ, Beancount е оптималният избор за:

  • Разработчици и инженери, които искат да третират финансите си като контролиран от версии, програмируем набор от данни.
  • Любители на данните, които искат да пишат персонализирани заявки, да изграждат уникални визуализации с инструменти като Fava или да подават финансовите си данни в други аналитични модели.
  • Всеки, който цени доказуема коректност и автоматизация пред удобството на графичен потребителски интерфейс или снизходителността на по-малко структуриран формат.

Ако желаете сурова C++ производителност за стандартни отчети, Ledger е претендент. За изключителна мащабируемост във функционална парадигма на програмиране, hledger е впечатляващ. За GUI, пълен с функции, с минимална настройка, GnuCash е отличен.

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