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:
- 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
- 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
- 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.
- Code letöltése, majd telepítése
CTRL+SHIFT+X
megnyitja a bővítménykezelőt- ledger megkeresése, letöltése és aktiválása
CTRL+,
(vessző) megnyomásával beállítások megnyitása- a
ledger
keresőkifejezést begépelve felugrik aLedger: Binary
beállítási lehetőség - ide gépeljük be a fent kicsomagolt exe fájl elérési útját: pl.
C:\Program Files (x86)\ledger\ledger.exe
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
- először a számla neve jön
- 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ó:
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.
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
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
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
Ha a bankszámlánk egyenlege érdekel csak:
ledger -f pelda.ledger bal Checking
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
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
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
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
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.