Inventárny systém Beancount je výkonná funkcia na sledovanie aktív, ktoré sa v priebehu času kupujú a predávajú, ako sú akcie, podielové fondy alebo cudzie meny. Umožňuje presné sledovanie nákladovej základne, čo je nevyhnutné pre výpočet kapitálových ziskov a pochopenie výkonu portfólia. Tento tutoriál pokrýva základné mechanizmy správy zásob vo vašom ledgeri.
Základné koncepty
V jadre sa správa zásob točí okolo sledovania pozícií. „Pozícia" je jednoducho množstvo komodity držanej na účte. Beancount rozlišuje dva základné typy pozícií.
Typy pozícií
-
Jednoduchá pozícia (bez nákladov): Toto je štandardné zaúčtovanie zostatku. Predstavuje množstvo komodity bez akýchkoľvek súvisiacich nákladov na obstaranie. Je vhodná pre hotovosť alebo jednoduché overenia zostatku.
Assets:Bank:Checking 100.00 USD -
Pozícia s nákladovou základňou: Tento typ pozície zahŕňa nielen počet jednotiek a komoditu, ale aj náklady, za ktoré bola obstaraná. Toto je základ sledovania zásob. Náklady sa špecifikujú v zložených zátvorkách
{}.Assets:Invest:VTSAX 10 VTSAX {100.00 USD, "lot-1"}V tomto príklade držíme 10 jednotiek
VTSAX. Každá jednotka bola obstaraná za cenu 100,00 USD. Táto konkrétna dávka akcií sa označuje ako „lot."
Operácie so zásobami
Existujú dve primárne operácie, ktoré môžete vykonávať so zásobami:
-
Navýšenie (pridanie do zásob): Keď kupujete komoditu, navýšite svoje zásoby. Vytvoríte nový lot s konkrétnym počtom jednotiek a nákladovou základňou.
2024-01-15 * "Buy shares" Assets:Invest:STOCK 50 STOCK {25.00 USD, "lot-1"} Assets:Bank:Checking -1250.00 USDTu kupujeme 50 jednotiek
STOCKza jednotkovú cenu 25,00 USD. Tým sa vytvorí lot na účteAssets:Invest:STOCK. -
Zníženie (odobratie zo zásob): Keď predávate komoditu, znižujete svoje zásoby. Musíte určiť, z ktorého lotu predávate. To sa vykoná poskytnutím zodpovedajúcich informácií v zložených zátvorkách.
2024-01-20 * "Sell shares" Assets:Invest:STOCK -25 STOCK {25.00 USD} Assets:Bank:Checking 625.00 USDV tejto transakcii predávame 25 jednotiek
STOCKz lotu, ktorý bol zakúpený za 25,00 USD za jednotku.
Metódy zaúčtovania
Keď znižujete zásoby, Beancount potrebuje pravidlo na rozhodnutie, z ktorého konkrétneho lotu vybrať, ak zníženiu zodpovedá niekoľko lotov. Toto pravidlo sa nazýva „metóda priradenia." Môžete nastaviť predvolenú hodnotu pre celý súbor pomocou voliteľného parametra alebo priradiť konkrétnemu účtu vlastnú metódu v direktíve open.
Beancount 3.2.3 prijíma sedem názvov metód: STRICT (predvolená), STRICT_WITH_SIZE, NONE, FIFO, LIFO, HIFO a AVERAGE. Šesť z nich je implementovaných; AVERAGE sa spracuje, ale vyvolá chybu v momente, keď musí priradiť zníženie, ako ukazuje sekcia AVERAGE nižšie.
1. STRICT (Predvolený)
Metóda STRICT je predvolená a najbezpečnejšia metóda priradenia. Vynucuje explicitné a jednoznačné párovanie.
2024-01-01 open Assets:Invest:STOCK "STRICT"- Vyžaduje presnú zhodu lotu: Špecifikátor nákladov zníženia (
{...}) musí identifikovať jediný lot — podľa nákladov, dátumu obstarania, označenia alebo ľubovoľnej ich kombinácie. - Chyby pri nejednoznačných zhodách: Ak špecifikátor zodpovedá viac ako jednému lotu, Beancount vyvolá
AmbiguousMatchErrornamiesto hádania. - Výnimka: Ak zníženie odoberie presne celkový počet jednotiek, ktorým špecifikátor zodpovedá, prázdny špecifikátor (
{}) je povolený a zníženie sa rozdelí medzi tieto loty.
Tento ledger drží dva loty a predáva jeden z nich uvedením jeho nákladov, čo je jednoznačné:
1970-01-01 commodity STK
1970-01-01 open Assets:Broker:Strict STK "STRICT"
1970-01-01 open Assets:Broker:Cash USD
1970-01-01 open Income:Gains USD
2024-01-10 * "Buy the first lot"
Assets:Broker:Strict 10 STK {100.00 USD}
Assets:Broker:Cash -1000.00 USD
2024-02-10 * "Buy the second lot"
Assets:Broker:Strict 10 STK {120.00 USD}
Assets:Broker:Cash -1200.00 USD
; The cost identifies exactly one lot, so STRICT is satisfied.
2024-06-01 * "Sell the $120.00 lot"
Assets:Broker:Strict -10 STK {120.00 USD} @ 150.00 USD
Assets:Broker:Cash 1500.00 USD
Income:GainsNačíta sa bez chýb, zaúčtuje zisk 300,00 USD na Income:Gains a na účte zostane 10 STK {100.00 USD}.
Nahraďte posledné zaúčtovanie prázdnym špecifikátorom a ten istý súbor zlyhá:
; Rejected under STRICT: "-10 STK {}" matches both lots.
2024-06-01 * "Sell 10 shares"
Assets:Broker:Strict -10 STK {} @ 150.00 USD
Assets:Broker:Cash 1500.00 USD
Income:GainsBeancount hlási Ambiguous matches for "-10 STK {}" a uvádza kandidátov. Predaj celej pozície je však v poriadku, pretože nezostáva nič na výber:
; Allowed under STRICT: -20 STK is the entire holding, so the empty
; specifier is split across both lots.
2024-06-01 * "Close the position"
Assets:Broker:Strict -20 STK {} @ 150.00 USD
Assets:Broker:Cash 3000.00 USD
Income:GainsTo zaúčtuje zisk 800,00 USD — výnos 3 000,00 USD proti základni 1 000,00 USD + 1 200,00 USD — a účet zostane prázdny. Toto je vlastnosť samotnej metódy STRICT, nie niečo, na čo by ste museli prepnúť na STRICT_WITH_SIZE.
2. FIFO (First-In, First-Out)
Metóda FIFO automaticky priraďuje zníženia najprv proti najstarším dostupným lotom.
2024-01-01 open Assets:Invest:STOCK "FIFO"- Automatické rozlíšenie: Rieši nejednoznačnosť výberom najstarších zodpovedajúcich lotov.
- Chronologické párovanie: Predpokladáte, že predávate aktíva, ktoré ste držali najdlhšie. Viaceré daňové úrady to považujú za predvolené, keď ste neidentifikovali lot.
3. LIFO (Last-In, First-Out)
Metóda LIFO je opakom FIFO. Priraďuje zníženia najprv proti najnovším dostupným lotom.
2024-01-01 open Assets:Invest:STOCK "LIFO"- Opačné chronologické poradie: Vyberá najnovšie obstarané zodpovedajúce loty.
- Najnovšie, nie najdrahšie: LIFO vyberá iba podľa dátumu obstarania. Náhodou predáva akcie s najvyššími nákladmi, keď ceny rástli, ale ak je váš najnovší lot zároveň najlacnejší — čo je to, čo má príklad nižšie ukázať — LIFO realizuje najväčší zisk, nie najmenší. Metóda, ktorá vždy predáva najdrahšie akcie, je
HIFO, popísaná nižšie.
4. HIFO (Highest-In, First-Out)
Metóda HIFO priraďuje zníženia najprv proti najdrahším dostupným lotom, bez ohľadu na ich dátum.
2024-01-01 open Assets:Invest:STOCK "HIFO"- Párovanie podľa poradia nákladov: Vyberá zodpovedajúce loty s najvyššou nákladovou základňou.
- Najmenší realizovaný zisk: Pri danej predajnej cene predaj akcií s najvyššími nákladmi realizuje najmenší zisk (alebo najväčšiu stratu). Či ju môžete použiť, je otázka jurisdikcie — napríklad v Spojených štátoch si výber lotu vôbec vyžaduje špecifickú identifikáciu v čase predaja — preto berte túto metódu ako účtovný mechanizmus a daňovú voľbu si overte samostatne.
5. Porovnanie FIFO, LIFO a HIFO na rovnakých sériách
Tieto tri metódy sa líšia len vtedy, keď najstarší, najnovší a najdrahší lot sú tri rôzne loty. Tento ledger zariaďuje presne to — lot A je najstarší, lot C je najnovší a stredný lot B je najdrahší — a potom predáva 10 akcií z troch účtov, ktoré sa líšia iba svojou metódou priradenia:
1970-01-01 commodity STK
1970-01-01 open Assets:Broker:Fifo STK "FIFO"
1970-01-01 open Assets:Broker:Lifo STK "LIFO"
1970-01-01 open Assets:Broker:Hifo STK "HIFO"
1970-01-01 open Assets:Broker:Cash USD
1970-01-01 open Income:Gains USD
; Lot A - the oldest, at $100.00 per share
2024-01-10 * "Buy lot A"
Assets:Broker:Fifo 10 STK {100.00 USD}
Assets:Broker:Lifo 10 STK {100.00 USD}
Assets:Broker:Hifo 10 STK {100.00 USD}
Assets:Broker:Cash -3000.00 USD
; Lot B - the most expensive, at $120.00 per share
2024-02-10 * "Buy lot B"
Assets:Broker:Fifo 10 STK {120.00 USD}
Assets:Broker:Lifo 10 STK {120.00 USD}
Assets:Broker:Hifo 10 STK {120.00 USD}
Assets:Broker:Cash -3600.00 USD
; Lot C - the newest, at $90.00 per share
2024-03-10 * "Buy lot C"
Assets:Broker:Fifo 10 STK {90.00 USD}
Assets:Broker:Lifo 10 STK {90.00 USD}
Assets:Broker:Hifo 10 STK {90.00 USD}
Assets:Broker:Cash -2700.00 USD
; Sell 10 shares out of each account at $150.00 and let each
; account's booking method choose which lot leaves.
2024-06-01 * "Sell 10 shares from each account"
Assets:Broker:Fifo -10 STK {} @ 150.00 USD
Assets:Broker:Lifo -10 STK {} @ 150.00 USD
Assets:Broker:Hifo -10 STK {} @ 150.00 USD
Assets:Broker:Cash 4500.00 USD
Income:GainsNačíta sa s nulovými chybami a zaúčtuje celkový zisk 1 400,00 USD, rozdelený takto:
| Účet | Metóda | Priradený lot | Nákladová základňa | Realizovaný zisk | Zostávajúce loty |
|---|---|---|---|---|---|
Assets:Broker:Fifo | FIFO | lot A, 2024-01-10 | $100.00 | $500.00 | 10 @ $120.00, 10 @ $90.00 |
Assets:Broker:Lifo | LIFO | lot C, 2024-03-10 | $90.00 | $600.00 | 10 @ $100.00, 10 @ $120.00 |
Assets:Broker:Hifo | HIFO | lot B, 2024-02-10 | $120.00 | $300.00 | 10 @ $100.00, 10 @ $90.00 |
Na riadok LIFO sa oplatí pozerať: realizoval najväčší zisk z troch, pretože najnovší lot bol zároveň najlacnejší.
6. STRICT_WITH_SIZE
STRICT_WITH_SIZE je STRICT plus jeden dodatočný rozlišovač: keď zodpovedá niekoľko lotov, ale presne jeden z nich drží presne toľko jednotiek, koľko odoberáte, vyberie sa tento lot.
1970-01-01 commodity STK
1970-01-01 open Assets:Broker:Sized STK "STRICT_WITH_SIZE"
1970-01-01 open Assets:Broker:Cash USD
1970-01-01 open Income:Gains USD
2024-01-10 * "Buy 10 shares"
Assets:Broker:Sized 10 STK {100.00 USD}
Assets:Broker:Cash -1000.00 USD
2024-02-10 * "Buy 7 shares"
Assets:Broker:Sized 7 STK {120.00 USD}
Assets:Broker:Cash -840.00 USD
; Only one lot holds exactly 7 units, so the empty specifier resolves.
2024-06-01 * "Sell 7 shares"
Assets:Broker:Sized -7 STK {} @ 150.00 USD
Assets:Broker:Cash 1050.00 USD
Income:GainsTo zaúčtuje zisk 210,00 USD proti lotu za 120,00 USD. Identický súbor s "STRICT" na riadku open zlyhá s Ambiguous matches for "-7 STK {}".
7. PRIEMERNÁ (akceptovaná, ale neimplementovaná)
AVERAGE je platný názov — option "booking_method" "AVERAGE" aj open … "AVERAGE" sa spracujú — ale Beancount 3.2.3 za ňou nemá žiadnu implementáciu. Všetko sa tu načíta až po predaj:
1970-01-01 commodity STK
1970-01-01 open Assets:Broker:Avg STK "AVERAGE"
1970-01-01 open Assets:Broker:Cash USD
1970-01-01 open Income:Gains USD
2024-01-10 * "Buy 10 shares at $10.00"
Assets:Broker:Avg 10 STK {10.00 USD}
Assets:Broker:Cash -100.00 USD
2024-02-10 * "Buy 10 more at $8.00"
Assets:Broker:Avg 10 STK {8.00 USD}
Assets:Broker:Cash -80.00 USD
; An average-cost engine would book this at $9.00 per share. This one refuses.
2024-06-01 * "Sell 5 shares"
Assets:Broker:Avg -5 STK {}
Assets:Broker:Cash 45.00 USD
Income:GainsV momente, keď sa toto zníženie musí priradiť, zavádzač sa zastaví s:
AVERAGE method is not supportedNeplánujte okolo toho ledger. Ak dnes chcete správanie priemerných nákladov, držte pozíciu na účte NONE a priemernú hodnotu vypočítajte sami, alebo sledujte každý lot a akceptujte zisky na úrovni lotov.
8. ŽIADNE
Metóda NONE úplne vypína párovanie lotov.
2024-01-01 open Assets:Invest:STOCK "NONE"- Žiadne párovanie lotov: Beancount sa nepokúša párovať zníženia s navýšeniami.
- Povoľuje zmiešané znamienka: To umožňuje účtu držať súčasne kladné aj záporné zostatky tej istej komodity. Toto správanie je podobné tomu, ako s komoditami zaobchádza nástroj Ledger CLI.
Špecifikácia dávky
„Lot" je konkrétny blok komodity obstaraný v určitom čase a za určitú cenu. Keď vytvárate alebo znižujete pozíciu, môžete podrobne určiť jej atribúty lotu.
Plná špecifikácia
Pri navýšení zásob (kúpe) môžete pre lot určiť až tri atribúty, oddelené čiarkami v jednej dvojici zložených zátvoriek:
Assets:Invest:STOCK 10 STOCK {100.00 USD, 2024-01-15, "lot-identifier"}100.00 USD— nákladová základňa vyjadrená na jednotku.2024-01-15— dátum obstarania. Beancount ho doplní z dátumu transakcie, keď ho vynecháte, a preto chybové hlásenia vyššie zobrazujú dátum pri každom lote."lot-identifier"— voliteľné textové označenie.
Hoci všetky tri sú voliteľné, poskytnutie aspoň nákladovej základne je štandardná prax. Zložené zátvorky musia zostať na jednom riadku a komentáre v ledgeri začínajú znakom ;, nikdy nie znakom #.
Metódy párovania
Pri znížení zásob (predaji) používate rovnakú syntax na určenie, z ktorého lotu (lotov) predávate.
-
Párovanie podľa nákladov: Toto je najbežnejšia metóda.
Assets:Invest:STOCK -5 STOCK {100.00 USD} -
Párovanie podľa dátumu: Ak sú náklady identické, môžete rozlíšiť pomocou dátumu obstarania.
Assets:Invest:STOCK -5 STOCK {2024-01-15} -
Párovanie podľa označenia: Označenia poskytujú spoľahlivý spôsob identifikácie lotu.
Assets:Invest:STOCK -5 STOCK {"lot-identifier"} -
Nechať lot na metódu priradenia: Prázdna množina zložených zátvoriek
{}neoznačuje žiadny lot, takže vyberie metóda priradenia účtu. PriFIFO,LIFOaleboHIFOje to najstarší, najnovší alebo najdrahší zodpovedajúci lot; pri predvolenej metódeSTRICTje toAmbiguousMatchError, pokiaľ zníženie presne nevyprázdni zodpovedajúce loty.Assets:Invest:STOCK -5 STOCK {}
Spracovanie cien
Je dôležité pochopiť rozdiel medzi nákladovou základňou ({}) a cenou (@). Slúžia na rôzne účely a nie sú zameniteľné.
Cena vs Nákupná cena
{cost}: Definuje náklady na obstaranie aktíva. Je súčasťou samotného lotu zásob a používa sa na priradenie znížení a výpočet kapitálových ziskov.@ price: Anotácia, ktorá zaznamenáva trhovú cenu v čase transakcie. Používa sa na konverzie mien alebo na zaznamenanie trhovej hodnoty k určitému dátumu.
Tu sú tri scenáre:
-
Cenová anotácia (konverzia): Použite
@na konverziu z jednej meny na druhú.Assets:Forex 1000 USD @ 0.85 EUR -
Nákladová základňa (obstaranie): Použite
{}pri kúpe aktíva na stanovenie jeho nákladov.Assets:Invest 10 STOCK {100.00 USD} -
Obidve (predaj so záznamom ceny): Pri predaji aktíva použite
{}na identifikáciu predávaného lotu a@na zaznamenanie predajnej ceny. To umožňuje automatizovaný výpočet kapitálových ziskov.Assets:Invest -10 STOCK {100.00 USD} @ 105.00 USDTento záznam predáva 10
STOCKz lotu, ktorý stál 100,00 USD za kus, za predajnú cenu 105,00 USD za kus.
Samostatná direktíva price poskytuje referenčné údaje pre trhové ocenenie. Live Prices môže udržiavať tieto direktívy pre podporované aktíva v hostovaných ledgeroch. Obnovenie ponecháva vaše loty, metódu priradenia, náklady na obstaranie a zaznamenané výnosy z predaja nezmenené.
Pravidlá používania ceny
- Cenové anotácie (
@) neovplyvňujú, ktorý lot sa priradí. Párovanie lotov sa vykonáva výlučne prostredníctvom nákladovej základne ({}) a metódy priradenia účtu. - Symbol
@sa používa iba na:
- Konverzie mien.
- Zaznamenanie trhovej hodnoty aktíva v čase transakcie.
- Poskytnutie predajnej ceny pre výpočty kapitálových ziskov.
Konfigurácia
Metódy priradenia môžete nakonfigurovať globálne alebo na úrovni jednotlivých účtov.
Globálna metóda účtovania
Predvolenú metódu priradenia pre celý súbor Beancount môžete nastaviť pomocou direktívy option.
option "booking_method" "STRICT"Prijímané hodnoty sú "STRICT" (predvolená, keď nenastavíte nič), "STRICT_WITH_SIZE", "NONE", "FIFO", "LIFO", "HIFO" a "AVERAGE". Akýkoľvek iný reťazec je odmietnutý v čase načítania s Error for option 'booking_method'. "AVERAGE" je tu aj v open prijímaná, ale priradenie zníženia pod ňou zlyhá, ako ukazuje sekcia AVERAGE vyššie.
Prepis nastavenia na úrovni účtu
Často je užitočné mať rôzne metódy pre rôzne účty. Napríklad môžete chcieť FIFO pre dôchodkový účet, ale STRICT pre zdaniteľný brokerský účet, aby ste zaistili predaj konkrétnych daňových lotov. Metódu priradenia môžete nastaviť pri otvorení účtu.
2024-01-01 open Assets:Retirement:401K "FIFO"
2024-01-01 open Assets:Taxable:Stock "STRICT"Najlepšie postupy
-
Organizácia zásob: Aby váš ledger zostal čistý a jednoduchý, dôrazne sa odporúča používať samostatné účty pre každú jedinečnú komoditu, ktorú držíte, a obmedziť každý z nich na túto komoditu v jeho direktíve
open.; GOOD: separate accounts by commodity, each constrained to one 2024-01-01 open Assets:Invest:VTSAX VTSAX 2024-01-01 open Assets:Invest:VFIAX VFIAXVyhnite sa miešaniu rôznych akcií alebo fondov na tom istom účte, pretože to komplikuje správu zásob. Zoznam komodít v
openspôsobí, že Beancount odmietne zblúdilé zaúčtovanie namiesto tichého zmiešania dvoch zásob. -
Správa lotov:
-
Používajte zmysluplné označenia pre loty, najmä pre konkrétne transakcie, ako je zber daňových strát alebo pridelenie zamestnaneckých akcií.
Assets:Invest:STOCK 10 STOCK {100.00 USD, "tax-loss-harvest-2024"} -
Dokumentujte svoje obchody pomocou komentárov. To uľahčuje čítanie a neskoršie pochopenie vášho ledgra.
Assets:Invest:STOCK -10 STOCK {100.00 USD} @ 110.00 USD ; Gain: 10%
- Ladenie: Ak narazíte na chyby alebo neočakávané správanie, Beancount poskytuje nástroje na kontrolu stavu vašich zásob.
-
Preskúmanie stavu zásob: Použite
bea doctor context main.beancount 42na preskúmanie transakcie na riadku 42 vrátane jej zaúčtovaní a ovplyvnených zostatkov účtov. Nahraďte názov súboru a číslo riadku transakciou, ktorú chcete preskúmať.Nahraďte
<LINENO>číslom riadku hneď po transakcii, aby ste videli jej účinok. -
Overenie párovania lotov: Nástroj
bea checkoveruje celý váš súbor. Zachytí akékoľvek chyby priradenia, ako sú nejednoznačné zhody lotov v režimeSTRICT.