Príručka k presnosti a toleranciám v Beancounte
Správa číselnej presnosti je základným kameňom podvojného účtovníctva. V digitálnom účtovníctve, najmä pri práci s viacerými menami, cenami akcií a zlomkovými akciami, môžu malé rozdiely pri zaokrúhľovaní rýchlo viesť k frustrujúcim chybám pri vyrovnávaní. Beancount poskytuje sofistikovaný, ale intuitívny systém na spracovanie presnosti a nastavenie prijateľných tolerancií. Táto príručka vás prevedie tým, ako to funguje. ⚙️
Základné koncepty presnosti
Hlavným cieľom Beancountu je zabezpečiť, aby sa každá transakcia vyrovnala na nulu. Výpočty zahŕňajúce ceny alebo náklady však často produkujú výsledky s väčším počtom desatinných miest, ako je praktické zaznamenávať. Tolerančný systém umožňuje malé, prijateľné nerovnováhy.
Automatické odvodenie tolerancie
Beancount štandardne automaticky odvodzuje požadovanú toleranciu pre každú transakciu. Toto odvodenie sa spracováva individuálne pre každú transakciu a vypočítava sa samostatne pre každú zahrnutú menu.
Pravidlo je jednoduché: tolerancia je polovica poslednej významnej číslice čísel prítomných v účtovných zápisoch transakcie.
Napríklad zvážte tento nákup:
2013-04-03 * "Kúpiť fond"
Assets:Fund 10.22626 FUND {37.61 USD}
Assets:Cash -384.61 USD
Beancount odvodzuje tolerancie nasledovne:
- Pre komoditu
FUNDmá číslo10.226265 desatinných miest. Tolerancia je polovica poslednej číslice, takžeFUND. - Pre komoditu
USDmá číslo-384.612 desatinné miesta. Tolerancia je polovica poslednej číslice, takžeUSD.
Pravidlá váhy transakcie
Pri kontrole, či je transakcia vyrovnaná, Beancount vypočíta „váhu“ každého účtovného zápisu. Pravidlá pre tento výpočet sú:
- Jednoduchá suma: Ak má účtovný zápis iba sumu (napr.
Assets:Cash -100.00 USD), jeho váha je táto presná suma. - Cenový zápis: Ak má účtovný zápis cenu za jednotku (napr.
10 FUND @ 38.46 USD), jeho váha jesuma × cena. - Nákladový zápis: Ak má účtovný zápis celkové náklady (napr.
10 FUND {384.61 USD}), jeho váha je suma celkových nákladov. - Náklady a cena: Ak má účtovný zápis celkové náklady aj cenu za jednotku (napr.
10 FUND {384.61 USD} @ 38.46 USD), na vyrovnávanie sa použijú iba celkové náklady. Cena za jednotku sa považuje za komentár alebo poznámku.
Pravidlá odvodenia presnosti
Systém automatického odvodenia sa riadi niekoľkými špecifickými pravidlami:
- Formát čísla
- Celé sumy (napr.
10 USD) neprispievajú k odvodeniu presnosti. - Maximálna tolerancia, ktorú je možné automaticky odvodiť, je
0.05jednotiek (napr. z čísla ako10.1 USD). Ak potrebujete väčšiu toleranciu, musíte ju zadať manuálne. - Náklady a ceny (napr.
{37.61 USD}) sú vylúčené z odvodenia tolerancie. Používajú sa iba primárne sumy účtovných zápisov. - Ak majú účtovné zápisy pre tú istú menu rôzne presnosti (napr.
-10.10 USDa5.123 USD), Beancount použije najhrubšiu (najväčšiu) toleranciu. V tomto prípade by to bolo založené na-10.10 USD, čo by dalo toleranciuUSD.
-
Predvolené spracovanie Môžete nastaviť globálnu alebo menovo špecifickú predvolenú toleranciu, ak transakcia nemá žiadne čísla s desatinnými miestami, z ktorých by sa dala odvodiť.
; Nastaví predvolenú toleranciu pre všetky meny bez explicitných pravidiel
option "inferred_tolerance_default" "*:0.001"
; Nastaví špecifickú predvolenú toleranciu pre USD
option "inferred_tolerance_default" "USD:0.003" -
Multiplikátor tolerancie Môžete globálne zvýšiť všetky odvodené tolerancie o pevný multiplikátor. To je užitočné na uvoľnenie kontrol v celom súbore bez zmeny každej transakcie. Multiplikátor
1.2zvýši všetky odvodené tolerancie o 20 %.option "inferred_tolerance_multiplier" "1.2" -
Odvodenie na základe nákladov Aj keď sa náklady zvyčajne ignorujú pri odvodení tolerancie, môžete Beancountu prikázať, aby ich použil. To je užitočné, keď je konečná suma (napr. výber hotovosti) najpresnejším číslom v transakcii.
option "infer_tolerance_from_cost" "TRUE"
Potvrdenia zostatku
Potvrdenia zostatku (balance) sa používajú na overenie, či sa zostatok vášho účtu zhoduje so známou hodnotou k určitému dátumu. Majú tiež priradenú toleranciu.
Základný formát
Podobne ako pri transakciách, tolerancia pre potvrdenie balance sa odvodzuje z počtu desatinných miest v sume.
; Potvrdzuje, že zostatok je 4.271 RGAGX s toleranciou ±0.0005
2015-05-08 balance Assets:Fund 4.271 RGAGX
; Potvrdzuje, že zostatok je 4.27 RGAGX s toleranciou ±0.005
2015-05-08 balance Assets:Fund 4.27 RGAGX
Vypočítaný zostatok musí spadať do tohto rozsahu. Pre druhý príklad by kontrolou prešiel akýkoľvek zostatok medzi a .
Explicitné tolerancie
Ak odvodená tolerancia nie je vhodn á, môžete ju explicitne zadať pomocou znaku tilda (~).
; Potvrdzuje, že zostatok je 4.271 RGAGX s vlastnou toleranciou ±0.01 RGAGX
2015-05-08 balance Assets:Fund 4.271 ~ 0.01 RGAGX
Tu potvrdenie prejde, ak je vypočítaný zostatok medzi a RGAGX.
Správa zaokrúhľovania
Pre prípady, keď sa očakávajú a sú prijateľné malé zvyšky z výpočtov, Beancount poskytuje nástroje na ich systematickú správu.
Sledovanie chýb zaokrúhľovania
Môžete určiť špeciálny účet na automatické zhromažďovanie chýb zaokrúhľovania. Tým sa zabezpečí dokonalé vyrovnanie vašich transakcií presunutím drobných zvyšných súm na jedno miesto.
Najprv povoľte možnosť a otvorte účet:
option "account_rounding" "Equity:RoundingError"
2000-01-01 open Equity:RoundingError
Teraz Beancount automaticky pridá tretiu časť k akejkoľvek transakcii, ktorá sa nevyrovná v rámci svojej tolerancie, a zaúčtuje rozdiel do Equity:RoundingError.
2013-02-23 * "Nákup"
Assets:Invest 1.245 RGAGX {43.23 USD}
Assets:Cash -53.82 USD
V tejto transakcii . Transakcia je nevyvážená o USD. Keď je povolená možnosť zaokrúhľovania, Beancount ju interne považuje za:
2013-02-23 * "Nákup"
Assets:Invest 1.245 RGAGX {43.23 USD}
Assets:Cash -53.82 USD
Equity:RoundingError -0.00135 USD ; Automaticky pridané