Naar hoofdinhoud springen

Wat Beancount is: boekhouding in dubbele boekhouding in

Beancount is boekhouding in dubbele boekhouding in platte tekst voor aandelen, crypto en dagelijkse boeken — wat het is en waarom ingenieurs het gebruiken.

Deze gids bundelt de beste praktijken voor boekhouden in platte tekst met het krachtige, open-source boekhoudprogramma Beancount. Het behandelt de fundamentele filosofie, syntax van basis tot gevorderd, praktische casestudies voor complexe activa en strategieën voor het beheren van een grootboek op de lange termijn.

Deel 1: Het "Waarom" - Fundamenten van Slim Boekhouden​

Voordat je in het "hoe" duikt, is het cruciaal om het "waarom" te begrijpen. Effectief boekhouden is het fundament van persoonlijk financieel beheer en een noodzakelijke stap naar financiële duidelijkheid en vrijheid.

Voorbij Uitgavenregistratie: De Weg naar Financiële Helderheid​

Eenvoudige apps voor het bijhouden van uitgaven vertellen je waar je geld naartoe is gegaan. Een robuust boekhoudsysteem vertelt je dat en nog veel meer: het geeft een volledig beeld van je financiële gezondheid, inclusief je nettovermogen, cashflow en de prestaties van je beleggingen. Het primaire doel is observeerbaarheid—een helder, datagedreven begrip van je financiële leven, waarmee je weloverwogen beslissingen kunt nemen, risico's kunt inschatten en kunt werken aan langetermijndoelen zoals pensioen.

Waarom Dubbel Boekhouden? De Kracht van een Gebalanceerd Systeem​

Anders dan enkel boekhouden (een eenvoudige lijst met uitgaven), registreert de dubbel boekhoudmethode elke transactie als een stroom van waarde tussen ten minste twee rekeningen. Het kernprincipe is de fundamentele boekhoudkundige vergelijking:

Activa=Passiva+Eigen vermogen (Nettovermogen)\text{Activa} = \text{Passiva} + \text{Eigen vermogen (Nettovermogen)}

Dit systeem zorgt ervoor dat je boeken altijd in balans zijn, wat fouten aanzienlijk vermindert. Het biedt een volledig financieel beeld door essentiële rapporten te genereren zoals een balans (wat je bezit en verschuldigd bent) en een resultatenrekening (wat je hebt verdiend en uitgegeven).

Deel 2: Aan de Slag met Beancount​

Beancount is een krachtig, op Python gebaseerd programma voor boekhouden in platte tekst.

Je Eerste Kennismaking met Fava op Beancount.io​

Beancount.io biedt een krachtige omgeving die de Beancount-engine combineert met een mobiele app (iOS, Android) en een webapp - Fava, een fantastische webinterface voor het visualiseren van je grootboek. Er is geen installatie nodig. Wanneer je het platform gebruikt, werk je rechtstreeks met een teksteditor voor je grootboekbestand (bijv. main.bean) en zie je de door Fava gegenereerde rapporten in real-time bijwerken.

Fava neemt de platte tekst die je schrijft en zet deze om in interactieve grafieken, financiële overzichten en filterbare transactielijsten, zodat je een duidelijk beeld krijgt van je financiële rapporten.

Of start in de terminal met bea​

Als je liever vanuit een shell werkt, is bea de command line van Beancount.io. Je hebt geen account nodig: installeer het met brew install bex-co/tap/bea of uv tool install beancount-io, en het maakt, valideert, bevraagt en rapporteert op hetzelfde platte-tekstbestand. De CLI-snelstart levert je binnen enkele minuten een eerste grootboek, en Je eerste maand met bea rondt een volledige maand van begin tot eind af.

De Vijf Kernrekeningtypen​

Beancount gebruikt vijf rekeningtypen op het hoogste niveau, die de structuur van je grootboek vormen:

RekeningtypeBeschrijvingTypisch saldo
AssetsWat je bezit (contant geld, bankrekeningen, beleggingen, onroerend goed).Positief
LiabilitiesWat je verschuldigd bent (creditcardschuld, leningen, hypotheken).Negatief
IncomeWaar geld vandaan komt (salaris, bonussen, rente).Negatief
ExpensesWaar geld naartoe gaat (eten, huur, reizen, belastingen).Positief
EquityJe nettovermogen; gebruikt voor beginsaldi.Negatief

De Beancount-vergelijking​

Beancount handhaaft zijn eigen versie van de boekhoudkundige vergelijking, waarbij de som van alle boekingen over je hele grootboek gelijk is aan nul:

Activa+Uitgaven+Passiva+Inkomsten+Eigen vermogen=0\text{Activa} + \text{Uitgaven} + \text{Passiva} + \text{Inkomsten} + \text{Eigen vermogen} = 0

Daarom hebben Income-, Liabilities- en Equity-rekeningen conventioneel negatieve waarden—het zijn de bronnen van middelen die je Assets en Expenses verhogen.

Deel 3: De Taal van Beancount - Basissyntaxis​

Alle vermeldingen in Beancount zijn directives die beginnen met een datum.

Rekeningen Definiëren (open) en Grondstoffen​

Voordat je een rekening kunt gebruiken, moet je deze declareren met de open-directive. Je kunt optioneel ook de valuta's of "grondstoffen" specificeren die deze zal bevatten.

; 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

Grondstoffen kunnen echte valuta's zijn (bijv. USD, JPY) of elke aangepaste eenheid die je definieert, zoals vliegmijlen (MILES_UA) of aandelensymbolen (HOOL).

Je Eerste Transactie Registreren (*)​

Transacties zijn de meest voorkomende vermelding. Ze beginnen met een datum, een markering (* voor een volledige transactie of ! voor een onvolledige), een optionele begunstigde en een beschrijving. Elke volgende regel (met twee spaties ingesprongen) is een "boeking" op een rekening.

; 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

Voor het gemak, als een transactie slechts twee boekingen heeft, kun je het bedrag op de tweede regel weglaten, en Beancount berekent het automatisch.

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

Balans op transactieniveau: Belangrijker voor dagelijks gebruik is dat elke individuele transactie ook in balans moet zijn—de som van alle boekingen binnen één transactie moet gelijk zijn aan nul. Als een transactie niet in balans is, toont Beancount een fout zoals deze:

Beancount-foutmelding

Omgaan met Transacties in Meerdere Valuta's (@ en @@)​

Beancount blinkt uit in boekhouden met meerdere valuta's.

  • Gebruik @ om een conversieprijs per eenheid op te geven.
  • Gebruik @@ om de totale kosten van de conversie op te geven.
; 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

Deel 4: Nauwkeurigheid Waarborgen - De Kunst van Reconciliatie​

Een belangrijke praktijk voor het onderhouden van een nauwkeurig grootboek is regelmatige reconciliatie. Dit houdt in dat je de saldi in je Beancount-grootboek vergelijkt met officiële overzichten van je financiële instellingen.

Automatische Controles met Saldoasserties (balance)​

De balance-directive is je primaire hulpmiddel voor geautomatiseerde controles. Je verklaart dat een rekening op een bepaalde datum een specifiek saldo had. Beancount geeft een foutmelding als het berekende saldo niet overeenkomt met je verklaring. Dit is van onschatbare waarde om snel fouten op te sporen.

Opmerking: De balansassertie controleert de staat van de rekening aan het begin van de opgegeven dag (vóór eventuele transacties op die dag).

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

Koppelen van Ondersteunende Documenten (document)​

Je kunt linken naar externe bestanden zoals bankafschriften of bonnetjes, waardoor een controleerbaar spoor ontstaat. Fava maakt deze links klikbaar.

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

Fouten Corrigeren en Beginsaldi Initialiseren​

Wanneer je je grootboek start of een discrepantie vindt die je niet kunt traceren, moet je een aanpassing maken. De standaardpraktijk is om een speciale Equity-rekening te gebruiken.

; 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

De Equity:Opening-Balances-rekening bevat bedragen die vanuit onbekende of externe bronnen in je grootboek terechtkomen.

Voor snelle oplossingen waarbij de exacte discrepantie er niet toe doet, kan de pad-directive automatisch het saldo van een rekening aanpassen om aan een volgende balance-assertie te voldoen, waarbij het verschil op een eigenvermogensrekening wordt geboekt. Gebruik dit met voorzichtigheid, want het kan grotere problemen verbergen. Expliciete aanpassingen zijn over het algemeen veiliger.

Deel 5: Geavanceerde & Realistische Transactiepatronen​

Schulden Bijhouden: Vorderingen en Schulden Beheren​

Dubbel boekhouden is perfect voor het bijhouden van geld dat je tegoed hebt (Assets:Receivables) of dat je verschuldigd bent (Liabilities:Payable).

Voorbeeld: Je betaalt voor een groepsdiner van $90, en je vriend Bob is je zijn aandeel van $45 verschuldigd.

  1. Registreer de initiële uitgave en de vordering:

    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. Wanneer Bob je terugbetaalt:

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

De Assets:Receivables:Bob-rekening is nu nul, en je boeken zijn perfect in balans.

Activa vs. Uitgaven: Een Auto-aankoop en Afschrijving​

Een grote aankoop zoals een auto is geen eenvoudige uitgave; het is de verwerving van een actief dat in waarde afneemt (afschrijving).

  1. Registreer de aankoop als een actief:

    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. Registreer de jaarlijkse afschrijving: Stel dat je schat dat de auto elk jaar $3.000 aan waarde verliest. Aan het einde van het jaar registreer je dit als een uitgave.

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

Na deze boeking geeft je Assets:Car:ToyotaCamry-rekening correct de nieuwe waarde van de auto weer ($27.000), en heb je de gebruikskosten van dat jaar correct als uitgave verantwoord.

Deel 6: Diepgaande Analyse - Modelleren van Complexe Reële Activa​

Casestudy 1: Boekhouding voor Onroerend Goed​

Een huis is vaak je grootste actief en passief. Zo modelleer je het.

  1. Rekeningen en een aangepaste grondstof aanmaken:

    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. Registreer de aankoop: Stel dat je een huis van $500k koopt met een aanbetaling van $100k en een lening van $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
  3. Registreer maandelijkse hypotheekbetalingen: Je maandelijkse betaling bestaat uit aflossing (verlaagt de schuld) en rente (een uitgave).

    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. Waardestijging bijhouden (ongerealiseerde winsten): De marktwaarde van een huis verandert. Om dit bij te houden zonder je officiële nettovermogen te beïnvloeden (aangezien de winst pas wordt gerealiseerd wanneer je verkoopt), kun je een prijsdirective gebruiken met een "virtuele" valuta.

    Voor ondersteunde marktactiva en valutaparen kan Live Prices waarderingsquotes bijhouden in een gehost grootboek. Individuele onroerendgoedobjecten hebben nog steeds je eigen taxaties en gedateerde prijzen nodig, zoals in het onderstaande voorbeeld.

    ; 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

Hiermee kun je de geschatte waarde in Fava's grafieken zien zonder je balans onterecht op te blazen.

Verken een live voorbeeldgrootboek voor onroerend goed met hypotheekregistratie, afschrijving en verkoop van het onroerend goed:

Real Estate Example Ledger in een nieuw tabblad openen

Casestudy 2: Het Bijhouden van Restricted Stock Units (RSU's)​

RSU's zijn een veelvoorkomende vorm van aandelencompensatie. Het boekhouden ervan omvat het bijhouden van de initiële toekenning, het vesten en het inhouden van belasting.

  1. Initiële installatie: Maak grondstoffen aan voor geveste (HOOL) en niet-geveste (HOOL.UNVEST) aandelen, samen met elke rekening die de latere boekingen aanraken. Door ze allemaal vooraf te declareren, kunnen de twee onderstaande transacties zelfstandig laden.

    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
  2. Registreer de initiële toekenning: Deze transactie toont de totale toekenning die naar een niet-geveste activarekening gaat. Er is nog niets belastbaar, dus de hele boeking is in de volgwaarde HOOL.UNVEST.

    2021-02-01 * "Hooli" "Initial RSU Grant"
      Assets:Grant:Unvested        1000 HOOL.UNVEST
      Income:Grant:Awards         -1000 HOOL.UNVEST
  3. Registreer een vestinggebeurtenis: Dit is de belangrijkste transactie. Wanneer aandelen vesten, erken je inkomsten, houdt de werkgever aandelen in om de belasting te betalen, en houd je de rest. Stel dat 100 aandelen vesten tegen $150,00, dus:

    • Bruto vergoeding: 100 × $150,00 = $15.000,00
    • Aandelen ingehouden voor belasting: 40 × $150,00 = $6.000,00 (federale $4.800,00 + staatsbelasting $1.200,00)
    • Aandelen die je houdt: 60 × $150,00 = $9.000,00 aan kostenbasis
    • Contant geld voor jou: $0,00 — de hele inhouding wordt in aandelen betaald

    Die bedragen vormen de boeking, en ze kloppen: $6.000,00 aan belasting plus $9.000,00 aan behouden aandelen is precies de $15.000,00 aan inkomsten.

    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

Deze enkele, gebalanceerde transactie modelleert de hele gebeurtenis: de niet-geveste toekenning wordt verminderd, inkomsten worden erkend, belasting wordt ingehouden, en de 60 netto geveste aandelen verschijnen in je makelaarsrekening met de juiste kostenbasis voor toekomstige berekeningen van vermogenswinsten.

Twee details zijn het overnemen in je eigen grootboek waard. Ten eerste, schrijf de inhouding rekening voor rekening uit in plaats van een allesomvattende balanceringsrekening het te laten absorberen — als de federale en staatsboekingen niet optellen tot de waarde van de ingehouden aandelen, zal de transactie niet in balans zijn en zal Beancount dat melden. Ten tweede, laat geen lege regel tussen boekingen: een lege regel beëindigt de transactie, en Beancount rapporteert een syntaxfout op de boekingen die erop volgen.

Als je werkgever de ingehouden aandelen op de open markt verkoopt in plaats van ze terug te nemen tegen de vestingprijs, is de verkoop een aparte transactie — een vermindering van Assets:Brokerage:Etrade:HOOL tegen contant geld — en elk verschil tussen de verkoopprijs en de basis van $150,00 is een kleine vermogenswinst of -verlies. Houd het buiten de vestingboeking.

Deel 7: Projectbeheer voor Je Grootboek​

Naarmate je grootboek groeit, wordt organisatie essentieel.

Versiebeheer (Git) Gebruiken om Je Gegevens te Beschermen​

Aangezien je grootboek een tekstbestand is, is het perfect voor versiebeheer met Git. Dit geeft je een volledige geschiedenis van alle wijzigingen, waardoor je beschermd bent tegen accidentele verwijderingen of fouten. Waarschuwing: Je financiële gegevens zijn zeer gevoelig. Gebruik een privérepository op diensten zoals GitHub/GitLab, of host je eigen repository.

Organiseren met Tags (#) en Koppelingen (^)​

Beancount biedt twee manieren om transacties te groeperen naast rekeningen:

  • Tags (#): Gebruik voor gebeurtenissen of projecten. Je kunt bijvoorbeeld alle transacties met betrekking tot een specifieke reis filteren. 2024-07-20 * "Hotel" "Vienna" #trip-europe-2024
  • Links (^): Gebruik om financieel gerelateerde transacties die op verschillende tijdstippen plaatsvinden met elkaar te verbinden, zoals een geldopname en de bijbehorende bankkosten.

Een Schaalbare Strategie voor het Structureren van Je Bestanden (include)​

Een enkel, enorm bestand is moeilijk te beheren. Gebruik de include-directive om je grootboek op te splitsen in meerdere bestanden. 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"

Een robuuste organisatiestrategie, in volgorde van prioriteit:

  1. Op gebeurtenis: Maak een apart bestand voor een belangrijke, op zichzelf staande gebeurtenis (bijv. trip-europe-2024.bean).
  2. Op categorie/begunstigde: Voor zeer regelmatige, terugkerende transacties zoals energierekeningen of salaris, groepeer ze in hun eigen bestand (bijv. recurring-rent.bean).
  3. Op rekening: Voor transacties die nauw verbonden zijn met een specifieke rekening (rente, kosten, creditcardbetalingen), overweeg een rekingspecifiek bestand.
  4. Op datum: Voor alle andere algemene transacties is een eenvoudige splitsing per jaar (2024.bean) of maand (2024/07.bean) effectief.

Deel 8: Conclusie​

Beancount biedt een steile leercurve maar beloont de inspanning met ongeëvenaarde kracht, flexibiliteit en controle over je financiële gegevens. Door de principes van dubbel boekhouden en de praktische hulpmiddelen die Beancount biedt te omarmen, kun je van eenvoudige uitgavenregistratie overstappen naar een compleet, nauwkeurig en inzichtelijk systeem voor persoonlijk financieel beheer. Je grootboek wordt een permanent, privé en onschatbaar bezit voor het begrijpen van je verleden en het plannen van je toekomst.

Aan de Slag met Beancount.io​

Beancount.io is een modern cloudgebaseerd platform voor financieel beheer dat je op tekst gebaseerde transactieregistraties omzet in uitgebreide financiële overzichten, waaronder resultatenrekeningen, balansen en proefbalansen. Door de betrouwbaarheid van platte-tekstbestanden te combineren met krachtige visualisatietools, helpt Beancount.io je om nauwkeurige controle over je financiële leven te behouden terwijl je waardevolle inzichten krijgt in de prestaties van je beleggingen.

Begin je financiële reis met Beancount.io — bekijk huidige abonnementen en prijzen voor wat elk niveau omvat.

beancount.io grootboekdashboard met een nettovermogen-trendgrafiek, rekeningsaldi en een AI-assistentbalk

Verken het live grootboek →

Resultatenrekening van Apple's openbare Beancount-grootboek op beancount.io met nettowinstgrafiek en uitsplitsing van inkomsten en uitgaven

Verken het live grootboek →

Balans van Apple's openbare Beancount-grootboek op beancount.io met nettovermogen-grafiek en details van activa en passiva

Verken het live grootboek →

Bron: https://beancount.io/nl/docs/introduction-to-beancount