Személyes Pénzügyek Könyvelése Szöveges Fájlként

Az ember nem is gondolná, hogy milyen hétköznapi tevékenységeknek van rajongói táboruk (első körben a porszívó-fanatikusok, a borotválkozás barátai és persze a kávégourmet fórumozók jutnak eszembe), azonban ezek közül mégis pénzügyi hippik csoportjának léte okozta számomra, akik nem csak úgy döntöttek, hogy kettős könyvviteli nyilvántartást vezetnek személyes pénzügyeikről (ami még bizonyos egyszerűsített vállalkozási formák esetén sem kötelező), de mindezt mindennemű grafikus felületet nélkülöző, parancssorban futó könyvelési szoftver segítségével teszik.

Miért is kell könyvelni?

Egyáltalán nem kell, sőt. Amíg valakinek rendben vannak a pénzügyei és az összes vagyonát a pénztárcájában hordja, addig erre semmi szükség.

Legtöbbünknek viszont általában van legalább egy bankszámlája, esetleg hitelkártyája, sokaknak hiteleik, másoknak pedig folyamatosan változó értékű befektetéseik vannak. Ha ezt megfejeljük még azzal, hogy néhányan biztosan adnak kölcsönt másoknak, illetve vannak olyanok is, akik egy széfben tartják vagyonuk egy részét, akkor beláthatjuk, hogy néha nem is olyan egyszerű választ adni arra az egészen triviálisnak tűnő kérdésre, hogy: Hogy állok anyagilag?

Sokan azért kezdik el követni pénzügyeiket, hogy kiderüljön számukra, hova is folyt el a pénzük. Ennek felderítésére az egyik legjobb módszer, ha néhány hónapig minden költésünket felírjuk. Ezt nem kell ott helyben megtenni, elég időnként leülni a bankszámlakivonattal / kiönteni az ember zsebéből az összegyűlt blokkokat, majd összeírni az adatokat.

A kísérlet vége általában azzal záródik, hogy az ember nagyon meglepődik azon, hogy a napi két büfés kávé költsége hogyan is duzzadhatott hónap végére 20.000 forintra, illetve miért is kellett 30.000 forintért tankolni egyetlen hónap alatt, amikor csak napi 20 percet kocsikázott (ami metróval 15 perc lett volna).

A költségeket persze lehet kockás papíron is vezetni, de sokkal hatékonyabb (és valamivel szórakoztatóbb), ha egy erre létrehozott szoftverben tesszük azt meg. Az egyik legismertebb alkalmazás erre a célra a YNAB (You Need a Budget), ami nevéből is adódóan nem csak követi a költségeket, hanem összeveti egy előre megadott költségvetéssel is. Ez a pénzügyi tudatosodás következő lépése, amikor már nem csak megértjük a múltbeli események okait, hanem aktívan követjük a jelent, és eszerint cselekszünk a jövőben. Most persze nem a YNAB-ról lesz szó, hiszen az se nem parancssoros, se nem nyílt forráskódú és még csak nem is kettős könyvviteli rendszerű.

Sőt, a bejegyzés nem is igazán pénzügyi problémáikra megoldást kereső illetőknek szól, hanem inkább olyanoknak, akik szívesen foglalkoznak dolgaik rendszerezésével, és nem idegen tőlük a kisebb scriptek megírása sem. Hiszen minek fizetni egy kész appért és banki integrációért, ha ugyanezt mi is összedrótozhatjuk egy kis szakértelem segítségével.

A kettős könyvvitelről

Mivel egyrészt régen volt már Számvitel I-II, másrészt amúgy sem lettem soha mérlegképes könyvelő, ezért csak nagyon felületesen mutatom be a különbséget az egyszeres és a kettős könyvvitel között:

Egyszeres könyvvitel

Ebben a példában a főszereplőnek 500.000 forintja van a bankban, amiből felvesz kétszázezret, majd egy részét elszórja bérletre. Egy barátjának korábban kölcsönadott 2.000 forintot, amit most visszakap. A készpénzfelvétel egyébként 100 forintjába került.

Pénztárca

Esemény Összeg
Nyitó egyenleg 0
ATM készpénzfelvétel +200.000
Bérlet -10.000
Kölcsön vissza +2.000
Záró egyenleg 210.000

Bankszámla

Esemény Összeg
Nyitó egyenleg 500.000
ATM készpénzfelvétel -200.000
Készpénzfelvétel díja -100
Záró egyenleg 299.900

Az egyszeres könyvvitelben minden egyes tranzakciót csak egyszer könyvelnek.

Kettős könyvvitel

A következő táblázatokban (főkönyvi számlákon) pontosan ugyanaz történik, mint fent, de a számviteli szabályok szerint könyveljük. Figyeljük meg, hogy nincsenek pozitív és negatív összegek, a könyvelés oldalától függ az, hogy az adott tranzakció hatására nő-e vagy csökken az egyenleg.

381: Pénztár

Esemény Tartozik Követel
Nyitó egyenleg
ATM készpénzfelvétel 200.000
Bérlet 10.000
Kölcsön vissza 2.000
Záró egyenleg 192.000

384. Elszámolási betétszámla

Esemény Tartozik Követel
Nyitó egyenleg 500.000
ATM készpénzfelvétel 200.000
Készpénzfelvétel díja 100
Záró egyenleg 299.900

532. Pénzügyi, befektetési szolgáltatási díja

Esemény Tartozik Követel
Nyitó egyenleg
Készpénzfelvétel díja 100
Záró egyenleg 100

526. Utazási és kiküldetési költségek (napidíj nélkül)

Esemény Tartozik Követel
Nyitó egyenleg
Bérlet 10.000
Záró egyenleg 10.000

311. Belföldi követelések

Esemény Tartozik Követel
Nyitó egyenleg 2.000
Kölcsön vissza 2.000
Záró egyenleg

A kettős könyvvitelben minden egyes tranzakciónak két lába van, azaz minden tranzakciót kétszer kell rögzíteni a könyvekben. Az adott összeget egyszer a tartozik, egyszer pedig a követel oldalra kell írni.

Ezt azért (is) találták ki, mert így kiszűrhetőek a hibalehetőségek. Ha összeadjuk az összes tartozik összeget, majd kivonjuk belőle az összes követel összeget, mindig nullát kell kapnunk. Ha nem jön ki nulla, valamit elrontottunk.

Számviteli szabály, hogy a 3-as kezdetű számlák tartozik oldalon nőnek, követel oldalon csökkennek. Ez amúgy az 5-ös kezdetű számlákra is igaz (a fenti példában tehát mindenre), de más számlák esetében (pl. 4-es) ez nincs mindig így.

Kövessük le a fenti példában a készpénzfelvételt:

  1. A 381: Pénztár számlára rögzítünk egy új sort az esemény nevével, majd a tartozik oldalra írjuk az összeget, mivel a pénztárca összege megnőtt a felvett pénz hatására
  2. Ugyanezt a tranzakciót beírjuk a 384. Elszámolási betétszámla számlára is, viszont itt a követel oldalra kerül. A fenti szabály értelmében ez azt jelenti, hogy az egyenlege ennyivel csökken
  3. Mivel ugyanannyit adtunk a tartozik és a követel oldalhoz, ezért az összes számla főegyenlege továbbra is 0

Megjegyzendő, hogy bár a fenti példa kedvéért direkt előszedtem egy hivatalosnak tűnő számlatükröt, ettől függetlenül előfordulhat, hogy a számlák nevei nem egyeznek meg a számviteli törvény ajánlásaival. Ez esetben mea culpa, de a hangsúly a logika bemutatásán volt.

Összegezve a fentieket a kettős könyvvitel azért hasznos, mert:

  • minden tranzakciót kétszer kell rögzíteni, ezért hacsak nem hibázunk kétszer ugyanúgy, minden hiba ki fog bukni
  • olyan számláknak is követhető az egyenlege, amit egyszeres könyvvitel esetén nem szokás (de legalábbis nem kötelező) vezetni
    • a fenti példában a 311. Belföldi követelések összegzésével bármikor megtudhatjuk, mennyi pénzzel tartoznak ismerőseink
    • ugyanígy a 526. Utazási és kiküldetési költségek (napidíj nélkül) egyenlege választ ad arra, hogy mennyit költöttünk utazásra

Plain Text Accounting

Kettős könyvvitelre teljesen jó választás pl. a GnuCash nevű, grafikus felülettel is ellátott szabad szoftver, de mivel ez adatbázisba vagy XML fájlokba dolgozik, ezért nem felel meg a plain text accounting követelményeinek.

De is az a plain text accounting? A plain text accounting egyfajta mozgalomként fogható fel, ami a következő feltételeket szabja egy könyvelőszoftverrel szemben:

  • feleljen meg a kettős könyvvitel elveinek
  • a főkönyv bárki által olvasható szöveges fájlban tárolódjon
  • a főkönyvet klasszikus szövegszerkesztővel lehessen szerkeszteni
  • a könyvelőszoftver soha ne írjon a főkönyvbe
  • ne legyen kötött a számlák neve, struktúrája, pénzneme

Ez a következő előnyökkel jár:

  • verziókontroll alá lehet helyezni a főkönyvet
  • könyvelőszoftverek váltása esetén semmi teendő nincs, egyszerűen az egyik program helyett a másikat futtatjuk ugyanazon a szöveges fájlon
  • gyors
  • átlátható

A fenti feltételeknek ugyan több szoftver is megfelel, de én most a terület úttörőjét emelném ki, amelyet mind a mai napig a legtöbben használnak.

Meet ledger-cli.

A ledger-cli egy C-ben fejlesztett kettős könyvviteli szoftver, amelyet UNIX-szerű platformokra kezdett el fejleszteni John Wiegley 2003-ban. A szoftver azóta közösségi módon fejlődik tovább szabad licencelésének köszönhetően. A projekt a bejegyzés írásakor kb. 6.000 commitnál és 2.800 csillagnál jár a GitHub-on. Elérhető Windowsra fordított bináris, illetve .NET-ben teljesen újraimplementált verziója is.

Aki idáig eljutott, annak már valószínűleg viszket a tenyere, hogy a sok elméletet átültesse gyakorlatba is. Lássuk, hogyan is lehet telepíteni a szoftvert.

Telepítés

Ledger

UNIX-szerű rendszerek esetében általában csomagkezelőből telepíthető a szoftver. Debian alapú rendszerek esetén pl. így:

apt update
apt install ledger

Windows alatt három opció van:

  • Windowsra fordított ledger-cli letöltése, kicsomagolása, majd felvitele a PATH környezeti változóba
  • .NET alatt újraimplementált, viselkedésében a fentivel teljesen megegyező .NET Ledger letöltése és telepítése
  • Windows Subsystem for Linux alatt valamelyik Linux disztribúció ledger-cli csomagjának telepítése

A fenti opciók közül csak az első működik együtt a Visual Studio Code ledger kiegészítőjével, a másodikat a legegyszerűbb telepíteni, a harmadik viszont teljesítményben némileg jobb a másodiknál. Színes konzolt csak a második és harmadik opció támogat.

Személy szerint azt javaslom, hogy telepítsd fel a .NET Ledger-t (ezzel fogsz kimutatást készíteni), emellett pedig valahová tömörítsd ki az első opcióban szereplő eredeti binárist is a Visual Studio Code számára (pl. C:\Program Files (x86)\ledger.exe), ami mindössze pár megabyte méretű.

Visual Studio Code

Aki nem ismerné a Microsoft ingyenes és kifejezetten jó szövegszerkesztőjét, annak érdemes most megismernie. A megfelelő kiegészítő telepítése és beállítása után a ledger kiterjesztésű fájlokban nem csak a szintaxist emeli ki, hanem egyfajta Intellisense-hez hasonlóan felajánlja a korábban már létrehozott megjegyzések és számlák használatát akár Emmet formátumban is.

  1. Code letöltése, majd telepítése
  2. CTRL+SHIFT+X megnyitja a bővítménykezelőt
  3. ledger megkeresése, letöltése és aktiválása
  4. CTRL+, (vessző) megnyomásával beállítások megnyitása
  5. a ledger keresőkifejezést begépelve felugrik a Ledger: Binary beállítási lehetőség
  6. ide gépeljük be a fent kicsomagolt exe fájl elérési útját: pl. C:\Program Files (x86)\ledger\ledger.exe

Visual Studio Code a ledger kiegészítővel

Könyvelés

Főkönyv szintaxisa

A fenti könyvelési példa jó alap arra, hogy bemutassam a szintaxist. Kezdjük a készpénzfelvétellel:

2019-03-02 ATM készpénzfelvétel
    ; Móricz Zsigmond körtéri automata
    3.KÖVETELÉSEK:38.PÉNZÜGYI ESZKÖZÖK ÉS AKTÍV IDŐBELI ELHATÁROLÁSOK:381.PÉNZESZKÖZÖK:Pénztár  200000 HUF
    3.KÖVETELÉSEK:38.PÉNZÜGYI ESZKÖZÖK ÉS AKTÍV IDŐBELI ELHATÁROLÁSOK:384.PÉNZESZKÖZÖK:Elszámolási betétszámla  -200000 HUF

Bár a fenti számlanevek számvitelileg így korrektek, ezen a ponton jött el az ideje annak, hogy az olvashatóság és a józan ész megőrzése érdekében elbúcsúzzunk tőlük, és innentől kezdve a GnuCash sablonja alapján megalkotott saját számlarendemet alkalmazzuk.

2019-03-02 ATM készpénzfelvétel
    ; Móricz Zsigmond körtéri automata
    Assets:Current Assets:Wallet  200000 HUF
    Assets:Current Assets:Checking account  -200000 HUF

Magyarázat

  • a tranzakciót a dátummal kezdjük
  • ezt szóközzel elválasztva a tranzakció megnevezése követi
  • új sorba kerülnek a tranzakció lábai, amelyeket 4 darab szóköz karakterrel kezdünk, majd
    • először a számla neve jön
      • a számlákat hierarchiába lehet rendezni
      • a hierarchiák szintjeit kettőspont választja el
    • majd legalább 2 db space következik
    • tranzakció összege
    • 1 db szóköz
    • végül a jószág típusa (ez legtöbbször a devizanem) zárja a sort
  • kommentet pontosvesszővel kezdve lehet írni

Figyeljük meg, hogy itt nincsen tartozik-követel, hanem a számok előjele jelzi a növekményt, illetve csökkenést. Ez a plain text accounting egyik premisszája, ami ellen nem sokat lehet (érdemes) tenni, viszont továbbra is követelmény, hogy egy tranzakción belül a lábak összege 0 legyen. Ha ezt nem sikerül elérnünk, akkor a szoftver hibát jelez.

Jó tudni, hogy Visual Studio Code-ban a fenti tranzakció lementésétől kezdve az Assets:Current Assets:Wallet számlát úgy is begépelhetjük, hogy miután a négy space-t (vagy tab-ot) leütöttük, elkezdjük begépelni a számlahierarchia részeinek első pár betűjét kettősponttal elválasztva (pl. as:cu:wa), majd ütünk egy entert. Ha jól állítottuk be a ledger kiegészítőt, akkor Code beírja helyettünk a számla teljes nevét.

Ezt demonstrálja ez a rövid videó:

Emmet működés közben

Mérlegkimutatás

Mentsük le a fenti főkönyvet pl. D:\Documents\pelda.ledger néven, de azért hagyjuk megnyitva a Code-ban! Ne feledjük, hogy a Code a példákban csak a szövegszerkesztő szerepét tölti be, ezért ízlés szerint akár notepad-et is használhatunk helyette, ha éppen ahhoz van kedvünk.

A szövegszerkesztő mellett indítsunk egy konzolt is, amiben a ledger-t fogjuk futtatni. A konzolban váltsunk a főkönyvet tartalmazó mappába, a fenti esetben pl így:

D:
cd \Documents

Ezután nincs más hátra, mint utasítani a ledger-t, hogy készítsen egy mérleget. A mérleg azt mutatja meg, hogy melyik számlán mekkora összeg áll rendelkezésre. Mivel a mérleg két serpenyőjébe ugyanakkora összegeket könyveltünk, ezért nevéből adódóan a mérleg főösszegének 0-t kell adnia:

ledger -f pelda.ledger balance

Az -f vagy --file paraméterrel adjuk meg, hogy hol található a főkönyv.

WSL képernyőkép

A mérlegben jobboldalt szerepel a számla neve, balra pedig annak egyenlege. Ha a számlának több alszámlája van, akkor az egyenlegek egyenlege jelenik meg. Korábban említettem, hogy a kettőspontok segítségével hierarchiába szervezhetőek a számlák. Ebben a példában az Assets:Current Assets alá két számla is tartozik, melyek egyenlege rendre -200.000 Ft és 200.000 Ft, így összegük 0 Ft. Az alsó vonal alatt található mérleg főösszege szintén 0 Ft, tehát jól dolgoztunk.

Viszont valami nem stimmel. A Checking Account egyenlegének ezen a ponton 300.000 Ft-nak kellene lennie, ehhez képest -200.000 Ft-on. Mi lehet a probléma?

A probléma természetesen a nyitó egyenlegek hiánya. A kettős könyvvitelben minden tranzakciót kétszer kell könyvelni, ezért nyilvánvalóan a betétszámla félmilliós kezdőegyenlegének is származnia kell valahonnan. Mivel általában senki sem 0 forinttal a birtokában kezdi a könyvelést, ezért ez a probléma minden olyan esetben felmerül, ha olyan magánszemélyről van szó, aki nem aznap született (vállalatok esetében a cégalapításkor kerül befizetésre a saját tőke).

A megoldás az Equity:Opening Balances nevű számla, amihez magánszemélyként csak és kizárólag akkor nyúlunk, amikor megnyitjuk a főkönyvet, soha többet.

Könyveljük is le a kezdő egyenleget:

2019-01-01 Kezdő egyenleg
    Assets:Current Assets:Checking Account  500000 HUF
    Equity:Opening Balances  -500000 HUF
2019-03-02 ATM készpénzfelvétel
    ; Móricz Zsigmond körtéri automata
    Assets:Current Assets:Wallet  200000 HUF
    Assets:Current Assets:Checking Account  -200000 HUF

Kérjünk egy újabb mérleget:

ledger -f pelda.ledger balance

Mérleg

Ez már sokkal jobban néz ki. Lekönyvelve az összes tranzakciót nagyjából ezt kapjuk:

2019-01-01 Kezdő egyenleg
    ; egy tranzakció bármennyi lábat tartalmazhat,
    ; feltéve, hogy összegük 0
    Assets:Current Assets:Checking Account  500000 HUF
    Assets:A/Receivable  2000 HUF
    Equity:Opening Balances  -502000 HUF
2019-03-02 ATM készpénzfelvétel
    ; ha az utolsó láb összege nincs kitöltve,
    ; akkor a ledger automatikusan kiegészíti 
    ; a tranzakció végösszegét 0-ra
    Assets:Current Assets:Wallet  200000 HUF
    Assets:Current Assets:Checking Account
2019-03-02 Készpénzfelvétel díja
    Expenses:Bank Service Charge  100 HUF
    Assets:Current Assets:Checking Account  
2019-03-02 Bérletvásárlás
    Expenses:Public Transportation  10000 HUF
    Assets:Current Assets:Wallet  
2019-03-03 Kölcsön vissza
    ; ez egy nappal később történik, mint a többi
    Assets:Current Assets:Wallet  2000 HUF
    Assets:A/Receivable  

Újabb mérleg:

ledger -f pelda.ledger bal

Mérleg

A balance rövidíthető bal-ra. Vessük össze a fenti egyenlegeket a cikk elején bemutatott példával. Ha mindent jól csináltunk, akkor egyeznek az értékek.

Vegyük észre, hogy a kintlevőségeinket nyilvántartó Assets:A/Receivable főszámla meg sem jelenik a mérlegben, mivel egyenlege zérus.

Szűrés

Ha csak azt szeretnénk megtudni, mennyi elkölthető pénzünk van, szűrhetünk az Assets főszámlára:

ledger -f pelda.ledger bal Assets

Szűrés

Ha a bankszámlánk egyenlege érdekel csak:

ledger -f pelda.ledger bal Checking

Egyenleg

Ha a március 2-i állapot érdekel, amikor még nem kaptuk vissza a kölcsönt (-e: időszak vége):

ledger -f pelda.ledger bal -e 03/02

Főkönyvi napló

Van, hogy az egyenleg mellett a részletekre is kiváncsiak vagyunk. Erre való a register (röviden reg) utasítás:

ledger -f pelda.ledger reg

Főkönyvi napló

Az utolsó sorban az adott tranzakció lábainak összege szerepel. Ennek az információnak így nem sok értelme van, de ha pl. szűrünk a pénztárcát érintő tranzakciókra, akkor rögtön értelmet nyer az egész:

ledger -f pelda.ledger reg wallet

Főkönyvi napló (pénztárca)

A kezdetben üres pénztárca egyenlege 200.000 Ft, 190.000 Ft, majd végül 192.000 Ft lett.

Hasznos infók

A számvitelben a költség- és a bevételi számlák pont fordítottan működnek. A nagyobb költségnek pozitív, a nagyobb bevételnek pedig negatív az előjele.

Könyveljünk le egy 300.000 forintos fizetést is, ami a bankszámlánkra érkezik:

2019-03-10 Fizetés
    Assets:Current Assets:Checking Account  300000 HUF
    Income:Salary  -300000 HUF

Ezek után a mérleg így fest:

ledger -f pelda.ledger bal

Fizetés után

A bevételek és kiadások ellenkező előjele azért fontos, hogy legyen értelme szembeállítani őket egymással:

ledger -f pelda.ledger bal Expenses Income

Bevétel és költség

A fenti kimutatás arra ad választ, hogy a főkönyv nyitása óta mennyit gyarapodott a vagyonunk. A kapott válasz szerint 289.900 forinttal. Ezt a kimutatást a számvitel egyébként cash flow-nak hívja.

A fentiekkel tovább lehet bűvészkedni, pl. a --monthly kapcsoló használatával, amelynek segítségével havi bontásban kapjuk meg, hogy melyik hónapban mennyivel csökkent/gyarapodott a vagyonunk.

Ha bármikor elakadnánk, a beépített súgó nagyon hasznos infókkal tud szolgálni. Emellett érdemes átfutni a ledger-cli eredeti dokumentációját is, mert bár elég hosszadalmas, de nagyon érthetően lett megírva.

ledger --help

Végszó

A fenti csak ízelítő volt abból, hogy mi mindent lehet megvalósítani a ledger, de tulajdonképpen bármelyik másik plain text accounting szoftver segítségével.

Nem volt szó például valuták, részvények és más vagyoni elemek adásáról-vételéről, az ehhez alkalmazott árfolyamok automatikus letöltéséről, valamint annak lehetőségéről, hogy a tranzakciókat automatikusan töltsük fel saját készítésű scriptek segítségével.

Az utolsó félmondatból sejthető az is, hogy a tranzakciókat épeszű ember nem kézzel pötyögi be, hanem az adott számlát vezető pénzintézet internetbankjából letöltött CSV fájlt alakítja át megfelelő formátumba, hogy abban már csak a kategorizálást végezze el. Mindkét feladatra léteznek kész scriptek, amelyekről talán majd egy másik alkalommal fogok írni.

A mait néhány jótanáccsal zárnám: a személyes pénzügyek könyvelését érdemes kicsiben kezdeni, hogy biztosan ne menjen tőle el az ember kedve már az elején. Érdemes kész számlatükröt használni mintaként, így nem kell sokat gondolkozni azon, mit hova lehet könyvelni. És persze az egésznek csak akkor van igazán értelme, ha a könyvelt adatok révén olyan új információk látnak napvilágot, amelyek segítenek a tudatosabb pénzügyi gondolkodás kialakításában.