Remind im Einsatz zur Finanzplanung

Wie schon im Blogeintrag "Auch der Kalender wird 'text-only'":/2013/kalenderkram.html beschrieben nutze ich seit einiger Zeit als Kalender die Anwendung 'Remind'. Als ich dann den Bedarf nach einer einfach Finanzplanung hatte, war ich überrascht, das mir die Software, die eigentlich für Termine gemacht ist, auch hier weiterhelfen konnte.

Ich hatte schon einige Programme durchprobiert, und war doch mit keiner so richtig zufrieden. Das konkrete Problem, welches ich lösen wollte, war, das ich gerne wissen wollte, wie sich meine Finanzen entwickeln, wenn alle Einnahmen und Ausgaben so verlaufen, wie geplant. Wenn es dann doch noch anders kommt als vorhergesagt ist es lediglich noch schlecht Planung, oder eine nicht eingeplante schlechte Ausgabendisziplin. Fast alle Programme versuchten dabei die zu erwartenden Ausgaben aus meinen vergangenen Ausgaben zu ermitteln, was aber auf der anderen Seite voraussetzt, das auch alle Ausgaben dort erfasst werden. Also neben der Homebanking-Software noch eine doppelte Erfassung aller Daten. Nix für mich.

Ich stellte mir eher vor, das ich aller Termine zu denen üblicherweise ab- und zugebucht wird in eine Textdatei schreibe, und die Software dann mit meinen Vorgaben arbeitet, am besten mit nur einem Eintrag für regelmäßig wiederkehrende Zahlungen. Als mir klar wurde, dass das Erstellen einer fortlaufenden Liste von wiederkehrenden Terminen eigentlich ein Kalenderproblem ist fiel bei mir der Groschen und ich habe mir ein kleines Skript zusammengehackt, welches aus ein paar Remind-Kalendereinträgen eine hübsche Finanzvorschau erstellt.

Zunächst habe ich mir eine Datei namens @finanzen@ geschrieben, die eine Art Inhaltsverzeichnis darstellt.

bc. INCLUDE home/andy.remind/finanzen/einnahmen INCLUDE home/andy.remind/finanzen/ausgaben INCLUDE home/andy.remind/finanzen/umbuchungen INCLUDE home/andy.remind/finanzen/versicherungen INCLUDE home/andy.remind/finanzen/geplanteAusgaben

Wie man sieht, wird hier einfach auf eine Handvoll anderer Dateien verwiesen, die gleich aufgebaut sind, und welche meine Einnahmen und Ausgaben lediglich ein wenig gliedern. Exemplarisch schauen wir mal in die Datei @versicherungen@

bc.. # Fixko Haush REM 1 MSG LebVersAndy -9.99 0 REM 1 MSG Riester -22.22 0 REM 3 MSG Unfall -11.11 0

REM 2 MSG Brille -10 0

REM Oct 1 MSG Rechtschutz -77.77 0 REM Jan 1 MSG Rechtschutz -77.77 0 REM Apr 1 MSG Rechtschutz -77.77 0 REM Jul 1 MSG Rechtschutz -77.77 0

REM Jan 1 MSG AutoVers -222.22 0 REM Jul 1 MSG AutoVers -222.22 0

REM Jan 31 MSG LebenFrauM04 -77 0 REM Jan 31 MSG LebenAndyM04 -77 0 REM Dec 1 MSG Zähne -222.22 0 REM Mar 5 MSG WohnGebVers -222.22 0 REM Apr 1 MSG Haftpflicht -99.99 0 REM May 18 MSG HausrVers -111.11 0

p. Schauen wir uns das mal etwas näher an. Zunächst kommen die Monatlichen Zahlungen. Das REM zeigt an, das nun ein Reminder (also eine Erinnerung) kommt, der an jedem Monatsersten die Message @LebVersAndy -9.99 0@ ausgibt. Das erste Wort 'LebVersAndy' ist lediglich ein Hinweis, wofür die Zahlung ist, und spielt für die Verarbeitung keine Rolle. Wichtig ist nur das es sich wirklich um ein Wort handelt, also keine Leerzeichen enthalten sind.

Danach folgen zwei Werte, die dem Geldfluss auf meinen beiden Konten entsprechen. Gemäß den Überschriften werden also 9.99 Euro vom Fixkostenkonto abgebucht, und 0 Euro vom Haushaltskonto. Das Vorzeichen gibt also an, ob abgebucht oder zugebucht wird, wie man an der nächsten Beispieldatei @umbuchungen@ gut erkennen kann.

bc. # Fixko Haush REM 26 Msg Umbuchung -350 350

Hier werden an jedem 26. des Monats 350 Euro vom Fixkostenkonto auf das Haushaltskonto umgebucht. Um mit diesen Werten noch in die Zukunft planen zu können benötigen wir noch den aktuellen Kontostand. Hier ist die einzige Stelle, an der wir Handarbeit leisten müssen. Der Kontostand vom vergangenen Sonntag muß von beiden Konten in die Datei @basis.dat@ eingetragen werden.

bc. 2014/07/02 * * * * Basis -782.09 416.27

Dazu wird vorne das Datum des entsprechenden Sonntags eingetragen, und hinten, die Stände der beiden Konten. Den Rest läßt man in Ruhe, er entspricht von der Gestaltung dem Zwischenformat von Remind. Leider kann Remind nur Wochenweise arbeiten, daher beginnt die Darstellung immer mit einem Montag, und der Kontostand sollte vom Vortag sein.

Doch nun zu dem bash Skript, welches die eigentlich Arbeit macht:

bc.. #! /bin/bash

cat ~/.remind/finanzen/basis.dat > tmp/test1.dat remind -s+$1 -m ~.remind/finanzen/finanzen $2 >>/tmp/test1.dat cat tmp/test1.dat |sort| gawk '{ fix += $7 ; haush += $8 }; { print $1 " " fix " " haush } '| uniq -w10 > /tmp/test.dat gnuplot ~.remind/finanzen/gp.dat eog /tmp/finanzen.png &

p. Die erste Zeile kopiert unseren Kontostand in eine temporäre Datei. In Zeile 2 beginnt dann der erste Teil der Magie. Remind gibt für die vorgegebene Anzahl von Wochen jeweils eine Zeile für jede anstehende Zahlung aus. Hübsch Zeitlich sortiert, und wiederkehrende Zahlungen werden, wie sich das bei einer Kalendersoftware gehört, ebenfalls berücksichtigt. Diese Zeilen werden einfach an unseren Kontostand angehängt.

In Zeile 3 passiert dann die restliche Magie. Mittels gawk wird aus den einzelnen Zu- und Abbuchungen eine laufende Summe gebildet, so das wir nun nicht mehr den Betrag der Buchung stehen haben, sondern den Kontostand nach dieser Buchung. Mittels uniq sorgt das Skript nur noch dafür, dass für jeden Tag nur noch die letzte Buchung stehen bleibt, und der Rest heraus gefiltert wird.

Wir haben nun also bereits eine Liste aller Kontostände, welche wir in Zeile 4 nur noch gnuplot zur grafischen Darstellung vor die Füße werfen. Gnuplot benötigt ein paar Informationen, wo es in der Datei die Daten findet, und wie es diese Daten in der Grafik darstellen soll. Das geschieht in der @gp.dat@

bc. set xdata time set timefmt "%Y/%m/%d" set format x "%m/%d" set zeroaxis set grid set size 1, 1 set term png size 1600, 1000 set output "/tmp/finanzen.png" f(x)=-2300 plot '/tmp/test.dat' using 1:2 with lines title "Fixkosten" ,'' using 1:3 with lines title "Haushalt" , f(x) with lines title "Dispo"

Interessant ist hier lediglich die size, die auf meinen Monitor angepasst ist, sowie die -2300 Euro, die ich mal Beispielhaft als Markierung für ein Dispolimit eingezeichnet habe. Als Grafik sieht dass dann mit eog dargestellt so aus:

!finanzen.png(Finanzausblick)!

Man erkennt den Puls, welcher eigentlich schon von selbst erklärt, wo die Monatsgrenze liegt. Die hohen Spitzen entstehen dadurch, dass Gehalt eintrifft, und kurz drauf die Raten fürs Haus abgebucht werden. Der kleine Peak kurz darauf ist z.B. das Kindergeld.

Je genauer die zu erwartenden Zahlungen erfasst werden, desto genauer ist natürlich das Ergebnis. So trage ich z.B. schon mal pauschal 500€ fürs Auto in dem Monat ein, wo der TÜV-Termin ansteht. Wenn es überraschend weniger ist, wird sich ja niemand beschweren. Ebenso ehrlich muß man bei dieser Methode dabei sein, wenn man pro Woche 50 Euro in der Kneipe lässt, oder ähnliches. Wir verplanen z.B. einen festen Betrag pro Woche, der für Freizeitkrams wie Kino, Bücher, etc drauf geht.