Inventárny systém Beancountu je výkonná funkcia na sledovanie aktív, ktoré sa časom nakupujú a predávajú, ako sú akcie, podielové fondy alebo cudzie meny. Umožňuje presné sledovanie nákladovej bázy, čo je nevyhnutné pre výpočet kapitálových ziskov a pochopenie výkonu portfólia. Tento tutoriál pokrýva základné mechaniky správy zásob vo vašom účtovnom denníku.
Základné koncepty
V jadre správy zásob je sledovanie 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ý zápis zostatku. Reprezentuje množstvo komodity bez spojenej obstarávacej ceny. Je vhodná pre hotovosť alebo jednoduché tvrdenia o zostatku.
Assets:Bank:Checking 100.00 USD -
Pozícia s nákladovou bázou: Tento typ pozície zahŕňa nielen počet jednotiek a komoditu, ale aj cenu, za ktorú bola nadobudnutá. Toto je základ sledovania zásob. Cena je uvedená 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 nadobudnutá za cenu 100,00 USD. Táto konkrétna dávka akcií sa označuje ako „šarža.“
Operácie so zásobami
Existujú dve hlavné operácie, ktoré možno so zásobami vykonať:
-
Prírastky (Pridávanie do zásob): Keď kupujete komoditu, zväčšujete svoje zásoby. Vytvoríte novú šaržu so špecifickým počtom jednotiek a nákladovou bázou.
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í šarža na účteAssets:Invest:STOCK. -
Úbytky (Odoberanie zo zásob): Keď predávate komoditu, znižujete svoje zásoby. Musíte špecifikovať, z ktorej šarže predávate. Toto sa robí 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
STOCKzo šarže, ktorá bola zakúpená za 25,00 USD za jednotku.
Metódy zaúčtovania
Keď znižujete zásobu, Beancount potrebuje pravidlo, podľa ktorého rozhodne, z ktorej konkrétnej šarže sa má zobrať, ak niekoľko šarží vyhovuje úbytku. Toto pravidlo sa nazýva „metóda zaúčtovania.“ Môžete nastaviť predvolené pre celý súbor pomocou možnosti alebo udeliť určitému účtu vlastnú metódu na direktíve open.
Beancount 3.2.3 akceptuje sedem názvov metód: STRICT (predvolená), STRICT_WITH_SIZE, NONE, FIFO, LIFO, HIFO a AVERAGE. Šesť z nich je implementovaných; AVERAGE parsing prejde, ale vyvolá chybu v momente, keď má zaúčtovať zníženie, ako ukazuje sekcia AVERAGE nižšie.
1. STRICT (Predvolený)
Metóda STRICT je predvolená a najbezpečnejšia metóda zaúčtovania. Vynucuje explicitné a jednoznačné zhody.
2024-01-01 open Assets:Invest:STOCK "STRICT"- Vyžaduje presnú zhodu lotu: Specifikátor nákladov pre zaúčtovanie zníženia (
{...}) musí identifikovať jediný lot — podľa ceny, dátumu nadobudnutia, označenia alebo ich ľubovoľnej kombinácie. - Chyby pri nejednoznačných zhodách: Ak špecifikátor zodpovedá viacerým lotom, Beancount vyvolá
AmbiguousMatchErrornamiesto hádania. - Výnimka: Ak zníženie odstráni presne celkový počet jednotiek, ktoré špecifikátor zodpovedá, je povolený prázdny špecifikátor (
{}) a zníženie sa rozdelí medzi tie loty.
Táto účtovná kniha obsahuje dva loty a predáva jeden z nich tým, že špecifikuje jeho cenu, č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 $300.00 zisku na Income:Gains a ponechá 10 STK {100.00 USD} na účte.
Nahradením posledného zaúčtovania prázdnym špecifikátorom tento 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 nahlási Ambiguous matches for "-10 STK {}" a uvedie kandidátov. Predaj celého pozície je však v poriadku, pretože už nie je z čoho vyberať:
; 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 $800.00 zisku — $3,000.00 príjmov proti $1,000.00 + $1,200.00 základu — a ponechá účet prázdny. Toto je vlastnosť samotného STRICT, nie niečo, pre čo by ste sa museli prepnúť na STRICT_WITH_SIZE.
2. FIFO (First-In, First-Out)
Metóda FIFO automaticky zaúčtuje zníženia najskôr proti najstarším dostupným lotom.
2024-01-01 open Assets:Invest:STOCK "FIFO"- Automatické vyriešenie: Rozhoduje nejednoznačnosť výberom najstarších zodpovedajúcich lotov.
- Chronologická zhoda: Predpokladáte, že predávate aktíva, ktoré vlastníte najdlhšie. Niekoľko daňových úradov to považuje za predvolenú metódu, ak nešpecifikujete lot.
3. LIFO (Last-In, First-Out)
Metóda LIFO je opakom FIFO. Zaúčtuje zníženia najskôr proti najnovším dostupným lotom.
2024-01-01 open Assets:Invest:STOCK "LIFO"- Reverzný chronologický poriadok: Vyberie najnovšie nadobudnuté zodpovedajúce série.
- Najnovšie, nie najdrahšie: LIFO vyberá podľa dátumu nadobudnutia. Pri raste cien sa predávajú akcie s najvyššími nákladmi, ale ak je vaša najnovšia séria najlacnejšia — čo ukazuje príklad nižšie — LIFO dosiahne najväčší zisk, nie najmenší. Metóda, ktorá vždy predáva najdrahšie akcie, je
HIFO, popísaná ďalej.
4. HIFO (Highest-In, First-Out)
Metóda HIFO vykazuje zníženia najskôr proti najdrahším dostupným sériám, bez ohľadu na dátum.
2024-01-01 open Assets:Invest:STOCK "HIFO"- Zladenie podľa nákladov: Vyberie zodpovedajúce série s najvyššou nákladovou základňou.
- Najmenší realizovaný zisk: Pri zadanej predajnej cene predaj najdrahších akcií prináša najmenší zisk (alebo najväčšiu stratu). Použitie závisí od jurisdikcie — v USA napríklad výber série vyžaduje špecifickú identifikáciu v čase predaja — preto považujte túto metódu za účtovný nástroj a individuálne potvrďte daňovú voľbu.
5. Porovnanie FIFO, LIFO a HIFO na rovnakých sériách
Tieto tri metódy sa odlišujú iba vtedy, keď najstaršia, najnovšia a najdrahšia séria sú tri rozdielne série. Tento denník práve tie usporiada — séria A je najstaršia, séria C je najnovšia a stredná séria B je najdrahšia — a predáva 10 akcií z troch účtov, ktoré sa líšia len metódou účtovania:
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 bez chýb a zaznamená celkový zisk $1,400.00 rozdelený takto:
| Účet | Metóda | Séria zaúčtovaná | Nákladová základňa | Realizovaný zisk | Zostávajúce série |
|---|---|---|---|---|---|
Assets:Broker:Fifo | FIFO | séria A, 2024-01-10 | $100.00 | $500.00 | 10 @ $120.00, 10 @ $90.00 |
Assets:Broker:Lifo | LIFO | séria C, 2024-03-10 | $90.00 | $600.00 | 10 @ $100.00, 10 @ $120.00 |
Assets:Broker:Hifo | HIFO | séria B, 2024-02-10 | $120.00 | $300.00 | 10 @ $100.00, 10 @ $90.00 |
Riadok LIFO stojí za pozornosť: dosiahol najväčší zisk z troch, pretože najnovšia séria bola zároveň najlacnejšia.
6. STRICT_WITH_SIZE
STRICT_WITH_SIZE je STRICT rozšírený o dodatočný rozlišovací prvok: ak viaceré série zodpovedajú, ale presne jedna z nich obsahuje práve počet jednotiek, ktoré odoberáte, vyberie sa táto séria.
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 vo výške 210,00 $ proti dávke 120,00 $. 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" a open … "AVERAGE" sa oba parsujú — ale Beancount 3.2.3 za tým nemá 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ď musí byť táto redukcia zaúčtovaná, načítač sa zastaví s:
AVERAGE method is not supportedNeočkaávajte, že na tom postavíte celý účtovný systém. Ak chcete dnešné správanie s priemernými nákladmi, držte pozíciu na účte NONE a priemer si vypočítajte sami, alebo sledujte každú dávku a akceptujte zisky na úrovni dávky.
8. ŽIADNE
Metóda NONE úplne vypína párovanie dávok.
2024-01-01 open Assets:Invest:STOCK "NONE"- Bez párovania dávok: Beancount sa nesnaží párovať redukcie so zvýšeniami.
- Povoľuje zmiešané znamienka: Toto umožňuje účtu držať zároveň kladné aj záporné zostatky tej istej komodity. Toto správanie je podobné ako pri nástroji Ledger CLI pri spracovaní komodít.
Špecifikácia dávky
"Dávka" je konkrétny blok komodity získaný v určitom čase a za určitú cenu. Keď vytvárate alebo redukujete pozíciu, môžete podrobne špecifikovať jej atribúty dávky.
Plná špecifikácia
Pri zvyšovaní zásob (nákup) môžete špecifikovať až tri atribúty pre dávku, oddelené čiarkou v rámci jednej dvojice zložených zátvoriek:
Assets:Invest:STOCK 10 STOCK {100.00 USD, 2024-01-15, "lot-identifier"}100.00 USD— zúčtovacia cena, vyjadrená za jednotku.2024-01-15— dátum nadobudnutia. Beancount vyplní tento dátum podľa dátumu transakcie, keď ho vynecháte, preto chybové hlásenia vyššie ukazujú dátum pri každej dávke."lot-identifier"— voliteľný popisný reťazec.
Hoci sú všetky tri voliteľné, štandardnou praxou je poskytnúť aspoň zúčtovaciu cenu. Zátvorky musia byť na jednom riadku a komentáre v účtovnej knihe začínajú ;, nikdy #.
Metódy párovania
Pri redukcii zásob (predaji) používate rovnakú syntax na určenie, z ktorej dávky/dávok sa má predávať.
-
Párovanie podľa ceny: Toto je najčastejšia metóda.
Assets:Invest:STOCK -5 STOCK {100.00 USD} -
Párovanie podľa dátumu: Ak sú ceny identické, môžete rozlíšiť použitím dátumu nadobudnutia.
Assets:Invest:STOCK -5 STOCK {2024-01-15} -
Párovanie podľa popisu: Popisy poskytujú spoľahlivý spôsob identifikácie dávky.
Assets:Invest:STOCK -5 STOCK {"lot-identifier"} -
Nechať dávku na metódu zaúčtovania: Prázdny súbor zátvoriek
{}nešpecifikuje žiadnu dávku, takže vyberie metóda zaúčtovania účtu. PriFIFO,LIFOaleboHIFOje to najstaršia, najnovšia alebo najdrahšia zodpovedajúca dávka; pri predvolenejSTRICTje toAmbiguousMatchError, pokiaľ redukcia presne nevyprázdni vybrané dávky.Assets:Invest:STOCK -5 STOCK {}
Spracovanie cien
Je nevyhnutné pochopiť rozdiel medzi nákupnou cenou ({}) a cenou (@). Slúžia na odlišné účely a nedajú sa vzájomne zamieňať.
Cena vs Nákupná cena
{cost}: Definuje nákupnú cenu aktíva. Je súčasťou evidencie inventárnej položky a používa sa na zaznamenávanie úbytkov a výpočet kapitálových ziskov.@ price: Poznámka, ktorá zaznamenáva trhovú cenu v čase transakcie. Používa sa na konverzie mien alebo na zaznamenanie trhovej hodnoty k danému dátumu.
Tu sú tri scenáre:
-
Poznámka o cene (konverzia): Použite
@na prevod z jednej meny do druhej.Assets:Forex 1000 USD @ 0.85 EUR -
Nákupná cena (nadobudnutie): Použite
{}pri kúpe aktíva na stanovenie jeho nákladov.Assets:Invest 10 STOCK {100.00 USD} -
Oboje (predaj so záznamom ceny): Pri predaji aktíva použite
{}na identifikáciu predávanej položky a@na zaznamenanie predajnej ceny. Toto umožňuje automatizovaný výpočet kapitálových ziskov.Assets:Invest -10 STOCK {100.00 USD} @ 105.00 USDTento zápis predáva 10
STOCKzo zásoby, ktorá stála 100,00 $ za kus, za predajnú cenu 105,00 $ za kus.
Pravidlá používania ceny
- Poznámky o cene (
@) neovplyvňujú výber zásoby, ktorá sa účtuje. Spárovanie zásob zabezpečuje výhradne nákupná cena ({}) a zvolená metóda účtovania účtu. - Symbol
@sa používa len 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 účtovania môžete nakonfigurovať globálne alebo pre jednotlivé účty.
Globálna metóda účtovania
Predvolenú metódu účtovania pre celý súbor Beancount nastavíte pomocou direktívy option.
option "booking_method" "STRICT"Akceptované hodnoty sú "STRICT" (predvolené, ak nič nenastavíte), "STRICT_WITH_SIZE", "NONE", "FIFO", "LIFO", "HIFO" a "AVERAGE". Akýkoľvek iný reťazec je odmietnutý pri načítaní s Error for option 'booking_method'. "AVERAGE" sa akceptuje tu a na open, ale účtovanie zníženia pod týmto nastavením 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ý maklérsky účet, aby ste mali istotu, že predávate konkrétne daňové položky. Metódu účtovania nastavíte 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 ste si udržali prehľadnú a jednoduchú účtovnú knihu, dôrazne sa odporúča používať samostatné účty pre každú jedinečnú komoditu, ktorú vlastníte, a obmedziť každý účet na túto komoditu pomocou direktívy
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 rovnakom účte, pretože to komplikuje správu inventáru. Zoznam tovarov na
openspôsobuje, že Beancount odmietne nesprávny zápis namiesto toho, aby ticho miešal dva inventáre. -
Správa dávok (Lot Management):
-
Používajte zmysluplné označenia dávok, najmä pri špecifických transakciách, ako je tax-loss harvesting alebo prerozdelenie akcií zamestnancom.
Assets:Invest:STOCK 10 STOCK {100.00 USD, "tax-loss-harvest-2024"} -
Dokumentujte svoje obchody komentármi. To uľahčuje neskoršie čítanie a pochopenie vášho účtovníctva.
Assets:Invest:STOCK -10 STOCK {100.00 USD} @ 110.00 USD ; Gain: 10%
- Ladenie (Debugging): Ak narazíte na chyby alebo neočakávané správanie, Beancount poskytuje nástroje na kontrolu stavu vášho inventára.
-
Skontrolujte stav inventára: Použite
bea doctor context main.beancount 42na kontrolu transakcie na riadku 42, vrátane jej zápisov a ovplyvnených zostatkov na účtoch. Nahraďte názov súboru a číslo riadka transakciou, ktorú chcete skontrolovať.Nahraďte
<LINENO>číslom riadku hneď za transakciou, aby ste videli jej efekt. -
Overte zhodu dávok (Lot Matching): Nástroj
bea checkvaliduje celý váš súbor. Odhalí všetky chyby účtovania, napríklad nejednoznačné zhody dávok v režimeSTRICT.