Last active
October 19, 2025 12:42
-
-
Save derselbst/fd0d0529ed810434f914e9731dc53ab6 to your computer and use it in GitHub Desktop.
Moneyplex zu Finanzblick Buchungs-Import
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # Usage: ./xmlToCSV.sh input.xml > output.csv | |
| # Requires: xmlstarlet | |
| # | |
| # Dieses Skript konvertiert die Buchungen von Moneyplex in ein CSV Format, welches von Finanzblick genutzt wird. | |
| # Die alten Buchungen können so bequem in Finanzblick nachgenutzt werden. | |
| # Splitt-Buchungen werden unterstützt und in Finanzblick als solche ausgewiesen. | |
| # [Umbuchungen] werden zwar importiert, aber nicht als solche ausgewiesen. Stattdessen erhalten sie die Notiz "Umbuchung" und | |
| # die Kategorie "Unkategorisiert" (gerne hätte ich Schlagworte statt Notizen verwandt, aber das funktioniert nicht zuverlässig). | |
| # | |
| # Vorgehensweise: | |
| # 1. Alle Buchungen über Moneyplex als XML exportieren (mit Splittbuchungen!) | |
| # 2. Die XML mit einem Texteditor öffnen | |
| # a. die Kategorien händisch anpassen, siehe Info unten (optional) | |
| # b. alle Null-Euro-Buchungen (=bei denen <BETRAG> fehlt) händisch korrigieren, durch einfügen von <BETRAG>0,00</BETRAG> | |
| # PS: Um diese Buchungen zu identifizeren hilft: xmlstarlet sel -T -t -m "//BUCHUNG[not(BETRAG)]" -c "." -n input.xml | |
| # c. Suchen und Ersetzen von "BLZ>" durch "BIC>" | |
| # d. Suchen und Ersetzen von "KONTONR>" durch "IBAN>" (weil wir IBAN+BIC statt alter Kontonr.+BLZ haben wollen) | |
| # 3. Konto in Finanzblick erstellen und Kontonamen bzw. IBAN notieren. | |
| # 4. Variable "KontoName" unten anpassen. | |
| # 5. xmlstarlet installieren (auf allen Linux Distros verfügbar). | |
| # 6. Skript wie in der Usage beschrieben ausführen, unter Angabe der zuvor von Moneyplex exportierten XML (evtl. zuvor chmod +x erforderlich). | |
| # 7. Erzeugte CSV in Finanzblick über "CSV Import" importieren. | |
| # 8. Dabei aufpassen, dass die "Eröffnungsbuchung" in den Buchungen nun nicht zweimal enthalten ist. | |
| # | |
| # Info Re-Kategorisierung: | |
| # Finanzblick erwartet eine "ParentKategorie" sowie eine "Kategorie". | |
| # Diese sind in der XML in der Form <KATEGORIE>ParentKategorie:Kategorie</KATEGORIE> anzugeben | |
| # Beispiel: Die Kategroie "Miete" aus Moneyplex muss händisch in | |
| # <KATEGORIE>Wohnen:Warmmiete</KATEGORIE> | |
| # angepasst werden. "Wohnen" ist die (vordefinierte) ParentKategorie von Finanzblick. "Warmmiete" ist irgendeine beliebig | |
| # verschachtelte Kategorie unterhalb dessen. | |
| # Anderes Beispiel: Zuweisung einer Moneyplex-Kategroie einer ParentKategorie direkt. "Freizeit" wird händisch angepasst zu | |
| # <KATEGORIE>Freizeit:Freizeit</KATEGORIE> | |
| # | |
| # Falsch kategorisierte Buchungen sowie unbekannte Kategorien werden als "Unkategorisiert" importiert. | |
| # Bei Online-Konten, hier die IBAN Ihres neuen Finanzblick-Import-Kontos angeben (ohne Leerzeichen). | |
| # Bei Offline-Konten, hier den Namen des Finanzblick-Import-Kontos angeben. | |
| KontoName="123456789" | |
| # Nicht ändern! | |
| delim=';' | |
| echo "Buchungsdatum${delim}Wertstellungsdatum${delim}Empfaenger${delim}Verwendungszweck${delim}Buchungstext${delim}Betrag${delim}IBAN${delim}BIC${delim}Kategorie${delim}Konto${delim}Umbuchung${delim}Notiz${delim}Schlagworte${delim}SteuerKategorie${delim}ParentKategorie${delim}AbweichenderEmpfaenger${delim}Splitbuchung${delim}Auswertungsdatum" | |
| xmlstarlet sel -T -t \ | |
| -m "//BUCHUNG" \ | |
| -v "normalize-space(DATUM)" -o "$delim" \ | |
| -v "normalize-space(VALUTA)" -o "$delim" \ | |
| -v "normalize-space(EMPFAENGER/NAME)" -o "$delim" \ | |
| -v "normalize-space(ZWECK)" -o "$delim" \ | |
| -o "$delim" \ | |
| -v "normalize-space(BETRAG)" -o "$delim" \ | |
| -v "normalize-space(EMPFAENGER/IBAN)" -o "$delim" \ | |
| -v "normalize-space(EMPFAENGER/BIC)" -o "$delim" \ | |
| -i "normalize-space(KATEGORIE)='[Umbuchung]'" -o 'Unkategorisiert' -b \ | |
| -i "string-length(normalize-space(KATEGORIE))=0" -o 'Unkategorisiert' -b \ | |
| -v "substring-after(KATEGORIE,':')" -o "$delim" \ | |
| -o "${KontoName}${delim}" \ | |
| -o "$delim" \ | |
| -i "normalize-space(KATEGORIE)='[Umbuchung]'" -o 'Umbuchung' -b -o '' -o "$delim" \ | |
| -o "$delim" \ | |
| -o "$delim" \ | |
| -i "normalize-space(KATEGORIE)='[Umbuchung]'" -o 'Unkategorisiert' -b -v "substring-before(KATEGORIE,':')" -o "$delim" \ | |
| -o "$delim" \ | |
| -o "false$delim" \ | |
| -v "normalize-space(DATUM)" -n \ | |
| -m "SPLITT/PART" \ | |
| -v "normalize-space(ancestor::BUCHUNG/DATUM)" -o "$delim" \ | |
| -v "normalize-space(ancestor::BUCHUNG/VALUTA)" -o "$delim" \ | |
| -o "$delim" \ | |
| -v "normalize-space(ZWECK)" -o "$delim" \ | |
| -o "$delim" \ | |
| -v "normalize-space(BETRAG)" -o "$delim" \ | |
| -o "$delim" \ | |
| -o "$delim" \ | |
| -i "substring-after(KATEGORIE,':')=''" -v "normalize-space(KATEGORIE)" -b -v "substring-after(KATEGORIE,':')" -o "$delim" \ | |
| -o "${KontoName}${delim}" \ | |
| -o "$delim" \ | |
| -o "$delim" \ | |
| -o "$delim" \ | |
| -o "$delim" \ | |
| -i "contains(KATEGORIE,':')" -v "substring-before(KATEGORIE,':')" -b -o "$delim" \ | |
| -o "$delim" \ | |
| -o "true$delim" \ | |
| -v "normalize-space(ancestor::BUCHUNG/DATUM)" -n \ | |
| -b \ | |
| -n "$1" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment