Voorraadbeheer in Beancount
Het voorraadsysteem van Beancount is een krachtige functie voor het volgen van activa die in de loop van de tijd worden gekocht en verkocht, zoals aandelen, beleggingsfondsen of vreemde valuta. Het maakt een nauwkeurige tracking van de kostprijs mogelijk, wat essentieel is voor het berekenen van vermogenswinst en het begrijpen van de prestaties van de portefeuille. Deze tutorial behandelt de kernmechanismen van het beheren van voorraden in uw grootboek.
Kernconcepten
In de kern draait voorraadbeheer om het volgen van posities. Een "positie" is simpelweg een hoeveelheid van een commodity die in een account wordt aangehouden. Beancount maakt onderscheid tussen twee fundamentele soorten posities.
Positie types
-
Simpele Positie (Geen Kostprijs): Dit is een standaard balansboeking. Het vertegenwoordigt een hoeveelheid van een commodity zonder enige bijbehorende acquisitiekost. Het is geschikt voor contant geld of simpele balansbeweringen.
Assets:Bank:Checking 100.00 USD -
Positie met Kostprijs: Dit type positie omvat niet alleen het aantal eenheden en de commodity, maar ook de kostprijs waartegen het is verworven. Dit is de basis van voorraadtracking. De kostprijs wordt gespecificeerd tussen accolades
{}.Assets:Invest:VTSAX 10 VTSAX {100.00 USD, "lot-1"}In dit voorbeeld houden we 10 eenheden
VTSAXaan. Elke eenheid is verworven tegen een kostprijs van $100.00 USD. Deze specifieke batch aandelen wordt aangeduid als een "lot".
Voorraad Operaties
Er zijn twee primaire bewerkingen die u op een voorraad kunt uitvoeren:
-
Augmentaties (Toevoegen aan voorraad): Wanneer u een commodity koopt, vergroot u uw voorraad. U maakt een nieuw lot met een specifiek aantal eenheden en een kostprijs.
2024-01-15 * "Aandelen kopen"
Assets:Invest:STOCK 50 STOCK {25.00 USD, "lot-1"}
Assets:Bank:Checking -1250.00 USDHier kopen we 50 eenheden
STOCKtegen een kostprijs van $25.00 USD per eenheid. Dit creëert een lot in deAssets:Invest:STOCKaccount. -
Reducties (Verwijderen uit voorraad): Wanneer u een commodity verkoopt, verlaagt u uw voorraad. U moet specificeren van welk lot u verkoopt. Dit gebeurt door overeenkomende informatie in de accolades te verstrekken.
2024-01-20 * "Aandelen verkopen"
Assets:Invest:STOCK -25 STOCK {25.00 USD}
Assets:Bank:Checking 625.00 USDIn deze transactie verkopen we 25 eenheden
STOCKuit het lot dat is gekocht voor $25.00 USD per eenheid.
Boekingsmethoden
Wanneer u een voorraad verlaagt, heeft Beancount een regel nodig om te bepalen van welk specifiek lot moet worden gepakt als meerdere lots overeenkomen of als de overeenkomst dubbelzinnig is. Deze regel wordt de "boekingsmethode" genoemd. U kunt een standaardmethode instellen voor uw hele bestand of er een specificeren voor elke account.
1. STRICT (Standaard)
De STRICT methode is de standaard en veiligste boekingsmethode. Het dwingt expliciete en ondubbelzinnige overeenkomsten af.
2024-01-01 open Assets:Invest:STOCK "STRICT"
- Vereist Exacte Lot Overeenkomst: U moet voldoende informatie in de reductieboeking (
{...}) verstrekken om het lot dat wordt verkocht uniek te identificeren. - Fouten bij Dubbelzinnige Overeenkomsten: Als de verstrekte informatie overeenkomt met meerdere lots, zal Beancount een foutmelding geven, waardoor u specifieker moet zijn.
- Uitzondering: Als een reductieboeking exact het totale aantal eenheden dat in een account wordt aangehouden verwijdert, is een lege kostenspecificatie (
{}) toegestaan.
2. FIFO (First-In, First-Out)
De FIFO methode boekt reducties automatisch tegen de oudste beschikbare lots eerst.
2024-01-01 open Assets:Invest:STOCK "FIFO"
- Automatische Resolutie: Het lost dubbelzinnigheid op door de oudste overeenkomende lots te selecteren.
- Chronologische Overeenkomst: Dit is een veelgebruikte accountingmethode waarbij u aanneemt dat u de activa verkoopt die u het langst in bezit heeft. Dit is de vereiste methode voor belastingdoeleinden in veel landen.
3. LIFO (Last-In, First-Out)
De LIFO methode is het tegenovergestelde van FIFO. Het boekt reducties tegen de nieuwste beschikbare lots eerst.
2024-01-01 open Assets:Invest:STOCK "LIFO"
- Omgekeerde Chronologische Volgorde: Het selecteert de meest recent verworven lots die voldoen aan de reductiecriteria.
- Belasting Optimalisatie: In sommige rechtsgebieden kan deze methode worden gebruikt voor belastingoptimalisatie, bijvoorbeeld door de aandelen met de hoogste kostprijs eerst te verkopen om de vermogenswinst te minimaliseren.
4. NONE
De NONE methode schakelt lot matching volledig uit.
2024-01-01 open Assets:Invest:STOCK "NONE"
- Geen Lot Matching: Beancount probeert niet om reducties te matchen met augmentaties.
- Staat Gemengde Tekens Toe: Hierdoor kan een account zowel positieve als negatieve saldi van dezelfde commodity tegelijkertijd aanhouden. Dit gedrag is vergelijkbaar met hoe de Ledger CLI tool omgaat met commodities.
Lot Specificatie
Een "lot" is een specifiek blok van een commodity dat is verworven op een bepaald moment en tegen een bepaalde prijs. Wanneer u een positie creëert of verlaagt, kunt u de lot attributen in detail specificeren.
Volledige Specificatie
Bij het vergroten van een voorraad (kopen), kunt u maximaal drie attributen voor het lot specificeren:
Assets:Invest:STOCK 10 STOCK {
100.00 USD, # Kostprijs (kostprijs per eenheid)
2024-01-15, # Acquisitiedatum
"lot-identifier" # Een uniek string label
}
Hoewel alle drie optioneel zijn, is het verstrekken van ten minste de kostprijs de standaardpraktijk.
Matching Methoden
Bij het verlagen van een voorraad (verkopen), gebruikt u dezelfde syntax om te specificeren van welke lot(s) u wilt verkopen.
-
Match op kostprijs: Dit is de meest gebruikte methode.
Assets:Invest:STOCK -5 STOCK {100.00 USD} -
Match op datum: Als de kosten identiek zijn, kunt u ze onderscheiden met behulp van de acquisitiedatum.
Assets:Invest:STOCK -5 STOCK {2024-01-15} -
Match op label: Labels bieden een foolproof manier om een lot te identificeren.
Assets:Invest:STOCK -5 STOCK {"lot-identifier"} -
Match elk lot: Een lege set accolades
{}zal overeenkomen met elk beschikbaar lot. Dit wordt vaak gebruikt metFIFOofLIFOboeking, waarbij het specifieke lot automatisch wordt geselecteerd.Assets:Invest:STOCK -5 STOCK {}
Prijs Afhandeling
Het is cruciaal om het verschil te begrijpen tussen kostprijs ({}) en prijs (@). Ze dienen verschillende doelen en zijn niet uitwisselbaar.
Prijs vs Kostprijs
{cost}: Definieert de acquisitiekost van een asset. Het is onderdeel van het voorraad lot zelf en wordt gebruikt voor het boeken van reducties en het berekenen van vermogenswinst.@ price: Een annotatie die een marktprijs registreert op het moment van een transactie. Het wordt gebruikt voor valutaomrekeningen of om de marktwaarde op een bepaalde datum te noteren.
Hier zijn de drie scenario's:
-
Prijs Annotatie (Conversie): Gebruik
@om van de ene valuta naar de andere om te rekenen.Assets:Forex 1000 USD @ 0.85 EUR -
Kostprijs (Acquisitie): Gebruik
{}bij het kopen van een asset om de kostprijs vast te stellen.Assets:Invest 10 STOCK {100.00 USD} -
Beide (Verkoop met Prijs Record): Bij het verkopen van een asset, gebruik
{}om het lot te identificeren dat wordt verkocht en@om de verkoopprijs vast te leggen. Dit maakt geautomatiseerde vermogenswinstberekening mogelijk.Assets:Invest -10 STOCK {100.00 USD} @ 105.00 USDDeze entry verkoopt 10
STOCKvan het lot dat 105.00 per stuk.
Prijs Gebruiksregels
- Prijs annotaties (
@) hebben geen invloed op welk lot wordt geboekt. Lot matching wordt uitsluitend afgehandeld door de kostprijs ({}) en de boekingsmethode van de account. - Het
@symbool wordt alleen gebruikt voor:
- Valutaomrekeningen.
- Het registreren van de marktwaarde van een asset op het moment van een transactie.
- Het verstrekken van de verkoopprijs voor vermogenswinstberekeningen.
Configuratie
U kunt boekingsmethoden globaal of per account configureren.
Globale Boekingsmethode
U kunt een standaardboekingsmethode instellen voor uw hele Beancount bestand met behulp van de option directive.
option "booking_method" "STRICT"
De beschikbare opties zijn "STRICT", "FIFO", "LIFO" en "NONE".
Per-Account Override
Het is vaak handig om verschillende methoden te hebben voor verschillende accounts. U wilt bijvoorbeeld FIFO voor een pensioenrekening, maar STRICT voor een belastbare effectenrekening om ervoor te zorgen dat u specifieke belasting lots verkoopt. U kunt de boekingsmethode instellen wanneer u de account opent.
2024-01-01 open Assets:Retirement:401K "FIFO"
2024-01-01 open Assets:Taxable:Stock "STRICT"
Best Practices
-
Voorraad Organisatie: Om uw grootboek schoon en eenvoudig te houden, wordt het ten zeerste aanbevolen om afzonderlijke accounts te gebruiken voor elke unieke commodity die u aanhoudt.
# GOED: Afzonderlijke accounts per commodity
Assets:Invest:VTSAX ; Alleen VTSAX posities hier
Assets:Invest:VFIAX ; Alleen VFIAX posities hierVermijd het mengen van verschillende aandelen of fondsen in dezelfde account, omdat dit het voorraadbeheer bemoeilijkt.
-
Lot Beheer:
-
Gebruik betekenisvolle labels voor lots, vooral voor specifieke transacties zoals tax-loss harvesting of aandelenopties van werknemers.
Assets:Invest:STOCK 10 STOCK {100.00 USD, "tax-loss-harvest-2024"} -
Documenteer uw trades met comments. Dit maakt uw grootboek gemakkelijker te lezen en later te begrijpen.
Assets:Invest:STOCK -10 STOCK {100.00 USD} @ 110.00 USD ; Winst: 10%
- Debuggen: Als u fouten of onverwacht gedrag tegenkomt, biedt Beancount tools om de status van uw voorraad te inspecteren.
-
Onderzoek Voorraad Status: De
bean-doctortool kan u de exacte status van alle voorraden op elk moment in uw bestand laten zien.Vervang
<LINENO>door het regelnummer direct na een transactie om het effect ervan te zien. -
Verifieer Lot Matching: De
bean-checktool valideert uw hele bestand. Het zal eventuele boekingsfouten opvangen, zoals dubbelzinnige lot matches inSTRICTmode.