Skriptovateľné pracovné postupy s Beancount a Fava
Beancount (nástroj na vedenie účtovníctva v čistom texte pomocou podvojného účtovníctva) a Fava (jeho webové rozhranie) sú vysoko rozšíriteľné a skriptovateľné. Ich dizajn vám umožňuje automatizovať finančné úlohy, generovať vlastné prehľady a nastavovať upozornenia pomocou písania skriptov v jazyku Python. Slovami jedného používateľa: "Veľmi sa mi páči, že mám svoje dáta v takomto pohodlnom formáte a páči sa mi, že si môžem automatizovať veci do sýtosti. Neexistuje žiadne API ako súbor na vašom disku; je jednoduché ho integrovať." Táto príručka vás prevedie vytváraním skriptovateľných pracovných postupov – od automatizácie vhodnej pre začiatočníkov až po pokročilé zásuvné moduly Fava.
Začíname: Spúšťanie Beancount ako skriptu v jazyku Python
Predtým, ako sa ponoríme do konkrétnych úloh, uistite sa, že máte nainštalovaný Beancount (napr. cez pip install beancount). Keďže je Beancount napísaný v jazyku Python, môžete ho používať ako knižnicu vo svojich vlastných skriptoch. Všeobecný prístup je:
-
Načítajte svoju účtovnú knihu Beancount: Použite nástroj na načítanie Beancount na analýzu súboru
.beancountdo objektov Python. Napríklad:from beancount import loader
entries, errors, options_map = loader.load_file("myledger.beancount")
if errors:
print("Errors:", errors)Týmto získate zoznam
entries(transakcie, zostatky atď.) aoptions_maps metadátami. Všetky vaše účty, transakcie a zostatky sú teraz prístupné v kóde. -
Využite dopytovací jazyk Beancount (BQL): Namiesto manuálneho opakovania môžete spúšťať dopyty podobné SQL na dátach. Napríklad, ak chcete získať celkové výdavky za mesiac, môžete použiť rozhranie API dopytu:
from beancount.query import query
q = query.Query(entries, options_map)
result = q.query("SELECT month, sum(position) WHERE account ~ 'Expenses' GROUP BY month")
print(result)Tento kód používa systém dopytov Beancount na agregáciu dát. (V skutočnosti je to podobné tomu, čo robí príkaz
bean-query, ale tu ho používate v skripte.) Autor Beancount poznamenáva, že môžete načítať súbor a zavolaťrun_query()priamo cez Python API, čím sa vyhnete potrebe volať externé príkazy v slučke. -
Nastavte štruktúru projektu: Usporiadajte svoje skripty spolu s vašou účtovnou knihou. Bežné rozloženie je mať adresáre pre importéry (na získavanie/analyzovanie externých dát), prehľady alebo dopyty (pre skripty analýzy) a dokumenty (na ukladanie stiahnutých výpisov). Napríklad, jeden používateľ uchováva:
importers/– vlastné skripty importu v jazyku Python (s testami),queries/– skripty na generovanie prehľadov (spustiteľné cezpython3 queries/...),documents/– stiahnuté CSV/PDF súbory banky usporiadané podľa účtu.
S týmto nastavením môžete spúšťať skripty manuálne (napr. python3 queries/cash_flow.py) alebo ich naplánovať (cez cron alebo nástroj na spúšťanie úloh) na automatizáciu vášho pracovného postupu.
Automatizácia úloh odsúhlasovania
Odsúhlasovanie znamená uistenie sa, že vaša účtovná kniha sa zhoduje s externými záznamami (bankové výpisy, správy o kreditných kartách atď.). Čistotextová účtovná kniha Beancount a Python API umožňujú automatizovať veľkú časť tohto procesu.
Importovanie a párovanie transakcií (začiatočník)
Pre začiatočníkov sa odporúča používať zásuvné moduly importéra Beancount. Napíšete malú triedu v jazyku Python podľa protokolu importéra Beancount na analýzu daného formátu (CSV, OFX, PDF atď.) a vytváranie transakcií. Potom použite príkaz bean-extract alebo skript na použitie týchto importérov:
- Napíšte importér (trieda v jazyku Python s metódami ako
identify(),extract()) pre formát CSV vašej banky. Dokumentácia Beancount poskytuje príručku a príklady. - Použite
bean-extractv skripte alebo Makefile (ako príkladjustfile) na analýzu nových výpisov. Napríklad, jeden pracovný postup spúšťabean-extractna všetkých súboroch v~/Downloadsa vypisuje transakcie do dočasného súboru. - Manuálne skontrolujte a skopírujte transakcie z dočasného súboru do vašej hlavnej účtovnej knihy, potom spustite
bean-checkna zabezpečenie odsúhlasenia zostatkov.
Hoci tento proces stále zahŕňa krok kontroly, veľká časť hrubej práce analýzy a formátovania záznamov je automatizovaná. Skripty importéra môžu tiež automaticky priraďovať kategórie a dokonca nastavovať asercie zostatku (vyhlásenia očakávaných zostatkov) na zachytenie nezrovnalostí. Napríklad, po importovaní môžete mať riadok ako 2025-04-30 balance Assets:Bank:Checking 1234.56 USD, ktorý tvrdí konečný zostatok. Keď spustíte bean-check, Beancount overí, či sú všetky tieto asercie zostatku správne a označí všetky chyby, ak chýbajú transakcie alebo sú duplicitné. Toto je osvedčený postup: automaticky generujte asercie zostatku pre každé obdobie výpisu, aby počítač mohol odhaliť neodstránené rozdiely za vás.
Vlastné skripty odsúhlasovania (stredne pokročilý)
Pre väčšiu kontrolu môžete napísať vlastný skript v jazyku Python na porovnanie zoznamu transakcií banky (CSV alebo cez API) s vašimi záznamami v účtovnej knihe:
- Prečítajte si externé dáta: Analyzujte súbor CSV banky pomocou modulu
csvjazyka Python (alebo Pandas). Normalizujte dáta do zoznamu transakcií, napr. každá s dátumom, sumou a popisom. - Načítajte transakcie účtovnej knihy: Použite
loader.load_file, ako bolo uvedené predtým, na získanie všetkých záznamov účtovnej knihy. Filtrujte tento zoznam na účet, ktorý vás zaujíma (napr. váš bežný účet) a možno dátumové rozpätie výpisu. - Porovnajte a nájdite nezrovnalosti:
- Pre každú externú transakciu skontrolujte, či v účtovnej knihe existuje identický záznam (zhoda podľa dátumu a sumy, možno popisu). Ak sa nenájde, označte ho ako "nový" a prípadne ho vypíšte ako transakciu formátovanú pre Beancount, ktorú si môžete prezrieť.
- Naopak, identifikujte všetky záznamy v účtovnej knihe, ktoré sa nezobrazujú v externom zdroji – mohli by to byť chyby pri zadávaní údajov alebo transakcie, ktoré neboli zúčtované bankou.
- Výstup výsledkov: Vytlačte prehľad alebo vytvorte nový útržok
.beancounts chýbajúcimi transakciami.
Napríklad, komunitný skript s názvom reconcile.py robí presne toto: vzhľadom na súbor Beancount a vstupný CSV súbor vytlačí zoznam nových transakcií, ktoré by sa mali importovať, ako aj všetky existujúce účtovné zápisy, ktoré sa nenachádzajú vo vstupe (potenciálne znak nesprávnej klasifikácie). S takýmto skriptom môže byť mesačné odsúhlasenie také jednoduché ako jeho spustenie a potom pripojenie navrhovaných transakcií do vašej účtovnej knihy. Jeden používateľ Beancount poznamenáva, že "robí proces odsúhlasenia na všetkých účtoch každý mesiac" a používa rastúcu zbierku kódu v jazyku Python na elimináciu veľkej časti manuálnej práce pri importovaní a odsúhlasovaní dát.
Tip: Počas odsúhlasovania využívajte nástroje Beancount na presnosť:
- Používajte asercie zostatku, ako bolo spomenuté, aby ste mali automatizované kontroly zostatkov na účtoch.
- Použite direktívu
pad, ak je to potrebné, ktorá môže automaticky vkladať vyrovnávacie záznamy pre drobné rozdiely zaokrúhlenia (používajte s opatrnosťou). - Napíšte jednotkové testy pre vašu logiku importéra alebo odsúhlasovania (Beancount poskytuje pomocníkov pre testovanie). Napríklad, jeden pracovný postup zahŕňal prevzatie vzorového CSV súboru, písanie neúspešných testov s očakávanými transakciami a potom implementáciu importéra, kým všetky testy neprešli. To zaisťuje, že váš skript importu funguje správne pre rôzne prípady.
Generovanie vlastných prehľadov a súhrnov
Hoci Fava poskytuje mnoho štandardných prehľadov (Výkaz ziskov a strát, Súvaha atď.), môžete vytvárať vlastné prehľady pomocou skriptov. Tieto môžu siahať od jednoduchých výstupov konzoly až po bohato formátované súbory alebo grafy.
Dopytovanie dát pre prehľady (začiatočník)
Na základnej úrovni môžete použiť dopytovací jazyk Beancount (BQL) na získanie súhrnných dát a ich vytlačenie alebo uloženie. Napríklad:
-
Súhrn peňažného toku: Použite dopyt na výpočet čistého peňažného toku. "Peňažný tok" by sa mohol definovať ako zmena zostatku určitých účtov za určité obdobie. Pomocou BQL by ste mohli urobiť:
SELECT year, month, sum(amount)
WHERE account LIKE 'Income:%' OR account LIKE 'Expenses:%'
GROUP BY year, monthToto by zosumarizovalo všetky príjmy a výdavky podľa mesiaca. Mohli by ste to spustiť cez rozhranie CLI
bean-queryalebo cez Python API (query.Query, ako bolo uvedené predtým) a potom formátovať výsledok. -
Prehľad výdavkov podľa kategórie: Dopytujte celkové výdavky na kategóriu:
SELECT account, round(sum(position), 2)
WHERE account ~ 'Expenses'
GROUP BY account
ORDER BY sum(position) ASCToto vygeneruje tabuľku v ýdavkov podľa kategórie. Môžete spustiť viacero dopytov v skripte a vypísať výsledky ako text, CSV alebo dokonca JSON na ďalšie spracovanie.
Jeden používateľ zistil, že je "triviálne analyzovať finančné dáta pomocou Fava alebo pomocou skriptov", pričom uviedol, že používa jeden skript v jazyku Python na extrahovanie dát z Beancount cez dopytovací jazyk a potom ich vloží do Pandas DataFrame na prípravu vlastného prehľadu. Napríklad, môžete načítať mesačné súčty pomocou dopytu a potom použiť Pandas/Matplotlib na vykreslenie grafu peňažného toku v priebehu času. Kombinácia BQL a knižníc dátovej vedy vám umožňuje vytvárať prehľady nad rámec toho, čo Fava ponúka štandardne.
Pokročilé výkazníctvo (grafy, výkon, atď.)
Pre pokročilejšie potreby môžu vaše skripty počítať metriky ako investičná výkonnosť alebo vytvárať vizuálne výstupy:
-
Investičná výkonnosť (IRR/XIRR): Keďže vaša účtovná kniha obsahuje všetky peňažné toky (nákupy, predaje, dividendy), môžete vypočítať miery návratnosti portfólia. Napríklad, môžete napísať skript, ktorý filtruje transakcie vašich investičných účtov a potom vypočíta vnútornú mieru návratnosti. Existujú knižnice (alebo vzorce) na výpočet IRR daných údajov peňažného toku. Niektoré komunitou vyvinuté rozšírenia Fava (ako PortfolioSummary alebo fava_investor) robia presne toto, vypočítavajú IRR a iné metriky pre investičné portfóliá. Ako skript môžete použiť funkciu IRR (z NumPy alebo vlastnú) na sérii príspevkov/výberov plus konečnú hodnotu.
-
Viacobdobové alebo vlastné metriky: Chcete prehľad o vašej miere úspor (pomer úspor k príjmu) každý mesiac? Skript v jazyku Python môže načítať účtovnú knihu, zosumarizovať všetky účty príjmov a všetky účty výdavkov, potom vypočítať úspory = príjem - výdavky a percento. Toto by mohlo vypísať peknú tabuľku alebo dokonca vygenerovať prehľad HTML/Markdown pre vaše záznamy.
-
Vizualizácia: Môžete generovať grafy mimo Fava. Napríklad, použite
matplotlibaleboaltairv skripte na vytvorenie grafu čistého majetku v priebehu času pomocou údajov z účtovnej knihy. Pretože účtovná kniha má všetky historické zostatky (alebo ich môžete akumulovať opakovaním záznamov), môžete vytvárať grafy časových radov. Uložte tieto grafy ako obrázky alebo interaktívne HTML. (Ak uprednostňujete vizuály v aplikácii, pozrite si časť rozšírenia Fava nižšie na pridanie grafov v rámci Fava.)
Možnosti výstupu: Rozhodnite sa, ako doručiť prehľad:
- Pre jednorazovú analýzu môže stačiť tlač na obrazovku alebo uloženie do súboru CSV/Excel.
- Pre panely zvážte generovanie súboru HTML s dátami (možno pomocou knižnice šablón ako Jinja2 alebo dokonca len písaním Markdown), ktorý môžete otvoriť v prehliadači.
- Môžete tiež integrovať s Jupyter Notebooks pre interaktívne prostredie výkazníctva, hoci to je viac na skúmanie ako na automatizáciu.
Spúšťanie upozornení z vašej účtovnej knihy
Ďalšie silné využitie skriptovateľných pracovných postupov je nastavenie upozornení na základe podmienok vo vašich finančných dátach. Pretože sa vaša účtovná kniha pravidelne aktualizuje (a môže obsahovať položky s budúcim dátumom, ako sú nadchádzajúce účty alebo rozpočty), môžete ju skenovať pomocou skriptu a dostávať upozornenia na dôležité udalosti.
Upozornenia na nízky zostatok na účte
Aby ste sa vyhli prečerpaniam alebo udržiavali minimálny zostatok, možno budete chcieť upozornenie, ak ktorýkoľvek účet (napr. bežný alebo sporiaci) klesne pod prahovú hodnotu. Tu je postup, ako to môžete implementovať:
-
Určite aktuálne zostatky: Po načítaní
entriescez nástroj na načítanie vypočítajte posledný zostatok účtov, ktoré vás zaujímajú. Môžete to urobiť agregáciou záznamov alebo pomocou dopytu. Napríklad, použite dopyt BQL pre zostatok konkrétneho účtu:SELECT sum(position) WHERE account = 'Assets:Bank:Checking'Toto vráti aktuálny zostatok tohto účtu (súčet všetkých jeho záznamov). Alternatívne použite interné funkcie Beancount na vytvorenie súvahy. Napríklad:
from beancount.core import realization
tree = realization.realize(entries, options_map)
acct = realization.get_or_create(tree, "Assets:Bank:Checking")
balance = acct.balance # an Inventory of commoditiesPotom extrahujte číselnú hodnotu (napr.
balance.get_currency_units('USD')môže dať Decimal). Použitie dopytu je však pre väčšinu prípadov jednoduchšie. -
Skontrolujte prahovú hodnotu: Porovnajte zostatok s vaším vopred definovaným limitom. Ak je pod ním, spustite upozornenie.
-
Spustite upozornenie: To môže byť také jednoduché ako vytlačenie varovania do konzoly, ale pre skutočné upozornenia môžete poslať e-mail alebo push notifikáciu. Môžete integrovať s e-mailom (cez
smtplib) alebo so službou ako IFTTT alebo Slack’s webhook API na odoslanie upozornenia. Napríklad:if balance < 1000:
send_email("Low balance alert", f"Account XYZ balance is {balance}")(Implementujte
send_emails podrobnosťami o vašom e-mailovom serveri.)
Spustením tohto skriptu denne (cez cron job alebo Windows Task Scheduler) získate proaktívne varovania. Pretože používa účtovnú knihu, môže zvážiť všetky transakcie vrátane tých, ktoré ste práve pridali.
Nadchádzajúce termíny splatnosti platieb
Ak používate Beancount na sledovanie účtov alebo termínov, môžete označiť budúce platby a nechať si ich skripty pripomenúť. Dva spôsoby, ako reprezentovať nadchádzajúce záväzky v Beancount:
-
Udalosti: Beancount podporuje direktívu
eventpre ľubovoľné poznámky s dátumom. Napríklad:2025-05-10 event "BillDue" "Mortgage payment due"Toto neovplyvňuje zostatky, ale zaznamenáva dátum s označením. Skript môže skenovať
entriespre záznamyEvent, kdeEvent.type == "BillDue"(alebo akýkoľvek vlastný typ, ktorý si vyberiete) a skontrolovať, či je dátum v priebehu, povedzme, nasledujúcich 7 dní od dnešného dňa. Ak áno, spustite upozornenie (e-mail, notifikácia alebo dokonca vyskakovacie okno). -
Budúce transakcie: Niektorí ľudia zadávajú transakcie s budúcim dátumom (oneskorené dátumom) pre veci ako plánované platby. Tieto sa nezobrazia v zostatkoch, kým neuplynie dátum (pokiaľ nespustíte prehľady k budúcim dátumom). Skript môže vyhľadať transakcie datované v blízkej budúcnosti a vypísať ich.
Pomocou týchto môžete vytvoriť skript "tickler", ktorý po spustení vypíše zoznam úloh alebo účtov, ktoré sú čoskoro splatné. Integrujte s API ako Google Calendar alebo správcom úloh, ak chcete automaticky vytvárať pripomienky tam.
Detekcia anomálií
Okrem známych prahových hodnôt alebo dátumov môžete skriptovať vlastné upozornenia pre nezvyčajné vzory. Napríklad, ak sa zvyčajne mesačný výdavok nevyskytol (možno ste zabudli zaplatiť účet) alebo ak sú výdavky kategórie tento mesiac abnormálne vysoké, váš skript by to mohol označiť. To zvyčajne zahŕňa dopytovanie nedávnych dát a porovnávanie s históriou (čo môže byť pokročilá téma – prípadne využitie štatistiky alebo ML).
V praxi sa mnohí používatelia spoliehajú na odsúhlasovanie na zachytenie anomálií (neočakávané transakcie). Ak dostávate bankové upozornenia (ako sú e-maily pre každú transakciu), môžete ich analyzovať pomocou skriptu a automaticky ich pridať do Beancount alebo aspoň overiť, či sú zaznamenané. Jeden nadšenec dokonca nakonfiguroval svoju banku tak, aby posielala e-maily s upozorneniami na transakcie, s plánom analyzovať ich a automaticky ich pripojiť do účtovnej knihy. Tento druh upozornenia riadeného udalosťami môže zabezpečiť, že žiadna transakcia nezostane nezaznamenaná.
Rozšírenie Fava pomocou vlastných zásuvných modulov a pohľadov
Fava je už skriptovateľná prostredníctvom svojho systému rozšírení. Ak chcete, aby sa vaša automatizácia alebo prehľady integrovali priamo do webového rozhrania, môžete napísať rozšírenie Fava (tiež nazývané zásuvný modul) v jazyku Python.
Ako fungujú rozšírenia Fava: Rozšírenie je modul v jazyku Python, ktorý definuje triedu dediaci od fava.ext.FavaExtensionBase. Zaregistrujete ho vo vašom súbore Beancount prostredníctvom vlastnej možnosti. Napríklad, ak máte súbor myextension.py s triedou MyAlerts(FavaExtensionBase), môžete ho povoliť pridaním do vašej účtovnej knihy:
1970-01-01 custom "fava-extension" "myextension"
Keď Fava načíta, importuje tento modul a inicializuje vašu triedu MyAlerts.
Rozšírenia môžu robiť niekoľko vecí:
- Hooks: Môžu sa pripojiť k udalostiam v životnom cykle Fava. Napríklad,
after_load_file()sa volá po načítaní účtovnej knihy. Mohli by ste to použiť na spustenie kontrol alebo predpočítanie dát. Ak ste chceli implementovať kontrolu nízkeho zostatku vo vnútri Fava,after_load_fileby mohol opakovať zostatky účtov a prípadne uložiť varovania (hoci ich zobrazenie v používateľskom rozhraní by si mohlo vyžadovať trochu viac práce, ako je vyvolanie FavaAPIError alebo použitie Javascriptu na zobrazenie notifikácie). - Vlastné prehľady/stránky: Ak vaša trieda rozšírenia nastaví atribút
report_title, Fava pridá novú stránku v bočnom paneli pre ňu. Potom poskytnete šablónu (HTML/Jinja2) pre obsah tejto stránky. Takto vytvárate úplne nové pohľady, ako je panel alebo súhrn, ktorý Fava nemá štandardne. Rozšírenie môže zhromaždiť všetky dáta, ktoré potrebuje (môžete pristupovať kself.ledger, ktorý má všetky záznamy, zostatky atď.) a potom vykresliť šablónu.
Napríklad, vstavané rozšírenie portfolio_list vo Fava pridáva stránku so zoznamom pozícií vášho portfólia. Komunitné rozšírenia idú ďalej:
- Panely: Zásuvný modul fava-dashboards umožňuje definovať vlastné grafy a panely (pomocou knižníc ako Apache ECharts). Číta konfiguráciu YAML spustených dopytov, spúšťa ich cez Beancount a generuje dynamickú stránku panela vo Fava. V podstate spája dáta Beancount a knižnicu grafov JavaScript na vytváranie interaktívnych vizualizácií.
- Analýza portfólia: Rozšírenie PortfolioSummary (prispievané používateľom) počíta súhrny investícií (zoskupovanie účtov, výpočet IRR atď.) a zobrazuje ich v používateľskom rozhraní Fava.
- Kontrola transakcií: Ďalšie rozšírenie, fava-review, pomáha kontrolovať transakcie v priebehu času (napr. na zabezpečenie, že ste nezmeškali žiadne potvrdenky).
Ak chcete vytvoriť jednoduché rozšírenie sami, začnite podtriedením FavaExtensionBase. Napríklad, minimálne rozšírenie, ktoré pridáva stránku, by mohlo vyzerať takto:
from fava.ext import FavaExtensionBase
class HelloReport(FavaExtensionBase):
report_title = "Hello World"
def __init__(self, ledger, config):
super().__init__(ledger, config)
# any initialization, perhaps parse config if provided
def after_load_file(self):
# (optional) run after ledger is loaded
print("Ledger loaded with", len(self.ledger.entries), "entries")
Ak ste to umiestnili do hello.py a pridali custom "fava-extension" "hello" do vašej účtovnej knihy, Fava by zobrazila novú stránku "Hello World" (potrebovali by ste aj súbor šablóny HelloReport.html v podpriečinku templates na definovanie obsahu stránky, pokiaľ rozšírenie používa iba hooks). Šablóna môže používať dáta, ktoré pripojíte k triede rozšírenia. Fava používa šablóny Jinja2, takže môžete vykresliť vaše dáta do tabuľky HTML alebo grafu v tejto šablóne.
Poznámka: Systém rozšírení Fava je výkonný, ale považuje sa za "nestabilný" (podlieha zmenám). Vyžaduje si určitú znalosť webového vývoja (HTML/JS), ak vytvárate vlastné stránky. Ak je vaším cieľom jednoducho spúšťať skripty alebo analýzy, môže byť jednoduchšie ponechať ich ako externé skripty. Používajte rozšírenia Fava, ak chcete prispôsobený zážitok v aplikácii pre váš pracovný postup.
Integrácia API tretích strán a dát
Jednou z výhod skriptovateľných pracovných postupov je možnosť načítavať externé dáta. Tu sú bežné integrácie:
-
Výmenné kurzy a komodity: Beancount automaticky nenačítava ceny podľa návrhu (aby boli prehľady deterministické), ale poskytuje direktívu Price na zadanie kurzov. Môžete automatizovať načítavanie týchto cien. Napríklad, skript môže dopytovať API (Yahoo Finance, Alpha Vantage atď.) pre najnovší výmenný kurz alebo cenu akcií a pripojiť záznam o cene do vašej účtovnej knihy:
2025-04-30 price BTC 30000 USD
2025-04-30 price EUR 1.10 USDExistujú nástroje ako
bean-price(teraz externý nástroj pod záštitou Beancount), ktoré načítavajú denné ponuky a vypisujú ich vo formáte Beancount. Môžete naplánovaťbean-pricena spustenie každý večer na aktualizáciu súboruprices.beancountinclude. Alebo použite Python: napr. s knižnicourequestsna volanie API. Dokumentácia Beancount naznačuje, že pre verejne obchodované aktíva môžete "vyvolať nejaký kód, ktorý stiahne ceny a vypíše pre vás direktívy." Inými slovami, nechajte skript vykonať vyhľadávanie a vložiť riadkyprice, namiesto toho, aby ste to robili manuálne. -
Dáta akciového portfólia: Podobne ako pri výmenných kurzoch, môžete integrovať s API na načítanie podrobných dát akcií alebo dividend. Napríklad, Yahoo Finance API (alebo komunitné knižnice ako
yfinance) môže načítať historické dáta pre ticker. Skript by mohol aktualizovať vašu účtovnú knihu s mesačnou históriou cien pre každú akciu, ktorú vlastníte, čo umožní presné historické prehľady trhovej hodnoty. Niektoré vlastné rozšírenia (ako fava_investor) dokonca načítavajú dáta o cenách za behu na zobrazenie, ale najjednoduchšie je pravidelne importovať ceny do účtovnej knihy. -
Bankové API (Otvorené bankovníctvo/Plaid): Namiesto sťahovania CSV súborov môžete použiť API na automatické načítanie transakcií. Služby ako Plaid agregujú bankové účty a umožňujú programový prístup k transakciám. V pokročilom nastavení by ste mohli mať skript v jazyku Python, ktorý používa Plaid’s API na denné načítanie nových transakcií a ich uloženie do súboru (alebo priamo importovať do účtovnej knihy). Jeden skúsený používateľ vytvoril systém, kde Plaid prúdi do ich importného potrubia, vďaka čomu sú ich knihy takmer automatické. Poznamenávajú, že "nič vám nebráni zaregistrovať sa v Plaid API a urobiť to isté lokálne" – t. j. môžete napísať lokálny skript na získanie bankových dát a potom použiť vašu logiku importéra Beancount na ich analýzu do záznamov účtovnej knihy. Niektoré regióny majú API otvoreného bankovníctva poskytované bankami; tie by sa mohli používať podobne.
-
Ostatné API: Môžete integrovať nástroje na rozpočtovanie (exportovať plánované rozpočty na porovnanie so skutočnými v Beancount) alebo použiť API OCR na čítanie potvrdeniek a ich automatické priradenie k transakciám. Pretože majú vaše skripty plný prístup k ekosystému Python, môžete integrovať všetko od e-mailových služieb (na odosielanie upozornení) po Google Sheets (napr. aktualizovať hárok s mesačnými finančnými metrikami) až po aplikácie na posielanie správ (poslať si súhrnnú správu prostredníctvom Telegram bota).
Pri používaní API tretích strán nezabudnite zabezpečiť svoje prihlasovacie údaje (používajte premenné prostredia alebo konfiguračné súbory pre API kľúče) a v skriptoch elegantne spracovávajte chyby (problémy so sieťou, výpadky API). Často je rozumné ukladať dáta do vyrovnávacej pamäte (napríklad ukladať načítané výmenné kurzy, aby ste opakovane nežiadali rovnaký historický kurz).
Osvedčené postupy pre modulárne a udržiavateľné skripty
Pri vytváraní skriptovateľných pracovných postupov udržujte svoj kód usporiadaný a robustný:
- Modularita: Rozdeľte rôzne záujmy do rôznych skriptov alebo modulov. Napríklad, majte samostatné skripty pre "import