Zum Hauptinhalt springen

Zukünftige Transaktionen prognostizieren

Erstellen Sie ein separates, validiertes Beancount-Szenario-Hauptbuch mit zukünftig datierten Einnahmen, Ausgaben und Kreditzahlungen.

Fügen Sie zukünftig datierte Transaktionen in ein separates Szenario-Hauptbuch ein, um Bargeld, Ausgaben und Schulden in Ihren Finanzberichten zu projizieren. Diese Anleitung verwendet gewöhnliche Beancount-Einträge und einen festen Planungszeitraum. Ihre realisierten Bücher bleiben getrennt von Ihren Annahmen.

Kompatibilität, geprüft am 7. September 2026: Die Beispiele wurden mit Standard-Beancount 3.2.3, beanquery 0.2.0 und Fava 1.30.16 getestet. Diese Fava-Version enthält kein Prognose-Plugin. Die benutzerdefinierte Quelle von Beancount.io enthält zwar eine fava.plugins.forecast-Implementierung; das ist eine andere Laufzeit, und die Verfügbarkeit der Quelle belegt nicht die auf Ihrem Konto bereitgestellte Version. Der unten beschriebene portable Workflow benötigt keine Erweiterung.

Schritt 1: Das Prognose-Plugin aktivieren

Überspringen Sie die Plugin-Aktivierung für diesen Workflow. Das Hinzufügen von plugin "fava.plugins.forecast" zur getesteten Standardinstallation führt zu einem Importfehler. Allgemeine Informationen zur Plugin-Einrichtung finden Sie im Plugin-Leitfaden; ein Modul muss tatsächlich installiert sein, bevor ein Hauptbuch es laden kann.

Voraussetzungen: Eine lokale Python-Umgebung mit installiertem beancount==3.2.3, beanquery==0.2.0 und fava==1.30.16. Folgen Sie der festgelegten Fava-Einrichtung, um diese Umgebung zu erstellen. Speichern Sie alle drei untenstehenden Dateien im selben Verzeichnis und führen Sie die Befehle dort aus.

Erstellen Sie books.beancount mit diesem vollständigen Beispiel-Schnappschuss. Sein Stichtag ist der 31. Dezember 2023, nach der Eröffnungstransaktion. Das Girokonto weist 10.000,00 USD auf und der ausstehende Autokredit beträgt 14.400,00 USD. Das Eigenkapital gleicht diesen vereinfachten Eröffnungsschnappschuss aus.

; books.beancount — realized balances as of 2023-12-31
option "operating_currency" "USD"
2023-12-31 open Assets:Checking USD
2023-12-31 open Liabilities:Auto-Loan USD
2023-12-31 open Equity:Opening-Balances USD
2023-12-31 open Income:Salary USD
2023-12-31 open Expenses:Housing:Rent USD
2023-12-31 open Expenses:Food:Groceries USD
2023-12-31 open Expenses:Health:Gym USD
2023-12-31 open Expenses:Insurance:Auto USD
2023-12-31 open Expenses:Transportation:Interest USD
 
2023-12-31 * "Opening snapshot"
  Assets:Checking                  10000.00 USD
  Liabilities:Auto-Loan            -14400.00 USD
  Equity:Opening-Balances           4400.00 USD

Erstellen Sie scenario.beancount als Planungs-Einstiegspunkt. Seine beiden Includes laden den realisierten Schnappschuss und die Annahmen, die Sie als Nächstes schreiben. Beancount liest die Include-Pfade relativ zu dieser Datei.

; scenario.beancount — planning entry point
option "title" "January 2024 planning scenario"
option "operating_currency" "USD"
include "books.beancount"
include "scenario-2024-01.beancount"

Binden Sie scenario.beancount oder scenario-2024-01.beancount niemals von books.beancount aus ein. Der realisierte Einstiegspunkt darf keine geplanten Transaktionen laden, auch nicht nachdem deren Daten überschritten wurden.

Schritt 2: Eine Prognosetransaktion erstellen

Erstellen Sie scenario-2024-01.beancount mit diesem ersten Eintrag. Fügen Sie die vier späteren Szenario-Blöcke jeweils einmal zu derselben Datei hinzu. Dies sind kontextbezogene Transaktionsblöcke: Ihre Kontodeklarationen stammen aus books.beancount, und Sie validieren sie über scenario.beancount.

2024-01-01 ! "Scenario: January rent" #forecast
  Expenses:Housing:Rent              2500.00 USD
  Assets:Checking                  -2500.00 USD

Das !-Flag kennzeichnet eine Transaktion zur Überprüfung; #forecast ist ein gewöhnliches Transaktions-Tag. Weder das eine noch das andere erzeugt Wiederholungen oder schließt eine Transaktion aus Berichten aus. Der separate Einstiegspunkt steuert die Einbeziehung. Verwenden Sie dieses Tag nur für geplante Einträge, damit Sie sie während der Überprüfung identifizieren können.

Die Prognose-Syntax verstehen

Jeder datierte Eintrag stellt ein Vorkommnis dar. Erzähltext wie [MONTHLY] hat in Standard-Beancount keine Wiederholungswirkung. Die älteren UNTIL-, REPEAT- und SKIP-Anweisungen gehören zu einer benutzerdefinierten Plugin-Konvention, nicht zur Kernsprache. Dieser Workflow drückt ihre beabsichtigten Daten explizit aus.

Das Szenario umfasst den 1. bis 31. Januar 2024, einschließlich. Alle geplanten Daten liegen nach dem festen Stichtag und vor dem 1. Februar. Diese historischen Daten machen das Beispiel reproduzierbar; nichts hängt vom heutigen Datum ab. Wenn Sie es anpassen, wählen Sie einen neuen Stichtag und einen endlichen Zeithorizont, bevor Sie Einträge hinzufügen.

Häufigkeit

Schreiben Sie für jedes Fälligkeitsdatum innerhalb des Planungszeitraums eine Transaktion. Das vollständige Januar-Beispiel verwendet diese Regeln:

PostenZeitplanIm Januar 2024 enthaltene Daten
MieteMonatlich, am 1.1. Januar
LebensmittelAlle 7 Tage, beginnend am 1. Januar1., 8., 15., 22., 29. Januar
GehaltAlle 14 Tage, beginnend am 5. Januar5., 19. Januar
FitnessstudioMonatlich, am 15.15. Januar
KreditzahlungMonatlich, am 25.25. Januar
Kfz-VersicherungAlle 3 Kalendermonate, beginnend am 15. Januar15. Januar; nächste Zahlung am 15. April liegt außerhalb dieses Zeithorizonts

Für andere tägliche oder jährliche Pläne zählen Sie die tatsächlichen Fälligkeitsdaten auf dieselbe Weise auf. Legen Sie eine Richtlinie für Daten wie den 31. oder den 29. Februar fest, bevor Sie einen Zeitplan verlängern. Verschieben Sie sie nicht stillschweigend und gehen Sie nicht davon aus, dass jeder Monat gleich viele Tage hat.

Bedingungen (optional)

1. Ein Enddatum explizit festlegen

Angenommen, die Mitgliedschaft im Fitnessstudio endet am 31. Dezember 2024. Ihr Januar-Vorkommnis ist unten aufgeführt. Das Januar-Szenario endet am 31. Januar, enthält also keine Einträge für Februar bis Dezember. Wenn Sie den Zeithorizont verlängern, schreiben Sie jede spätere Zahlung bis zum 15. Dezember und hören Sie dort auf.

2024-01-15 ! "Scenario: gym membership" #forecast
  Expenses:Health:Gym                  80.00 USD
  Assets:Checking                    -80.00 USD

2. Vorkommnisse begrenzen und Kreditbetrag von Zinsen trennen

Angenommen, der Autokredit hat 36 verbleibende Zahlungen. Nehmen Sie nur die erste Zahlung in diesen Januar-Zeithorizont auf. Für diese hypothetische Rate nehmen Sie an, dass ihre 450,00-USD-Barzahlung aus 400,00 USD Tilgung und 50,00 USD Zinsen besteht. Dies sind Szenario-Annahmen; es werden keine späteren Raten generiert.

2024-01-25 ! "Scenario: car loan payment 1 of 36" #forecast
  Liabilities:Auto-Loan               400.00 USD
  Expenses:Transportation:Interest     50.00 USD
  Assets:Checking                   -450.00 USD

Die positive Verbindlichkeitsbuchung reduziert den Schuldenstand von −14.400,00 USD auf −14.000,00 USD. Das Bargeld sinkt um 450,00 USD, und nur 50,00 USD sind ein Aufwand. Die Buchungen gleichen sich aus, weil 400.00 + 50.00 - 450.00 = 0. Eine negative Verbindlichkeitsbuchung würde die Schulden erhöhen.

Wiederholen Sie nicht dieselbe Tilgungs-/Zinsaufteilung für alle 36 Zahlungen ohne einen unterstützenden Zeitplan. Zukünftige Zinsen und die Schlusszahlung können abweichen. Verwenden Sie bei der Erweiterung dieses Beispiels den Zahlungsplan des Kreditgebers; siehe Amortisation für den Unterschied zwischen Aufwandserfassung und Schuldentilgung.

3. Unregelmäßige Intervalle als tatsächliche Daten schreiben

Für ein zweiwöchentliches Gehalt ab dem 5. Januar sind die Januar-Daten der 5. und 19. Januar. Das nächste Vorkommnis ist der 2. Februar, außerhalb dieses Szenarios. Zweiwöchentlich bedeutet alle 14 Tage, nicht zweimal pro Kalendermonat.

2024-01-05 ! "Scenario: salary" #forecast
  Assets:Checking                   3000.00 USD
  Income:Salary                    -3000.00 USD
 
2024-01-19 ! "Scenario: salary" #forecast
  Assets:Checking                   3000.00 USD
  Income:Salary                    -3000.00 USD

Praktisches Beispiel: Ein monatliches Budget

Vervollständigen Sie Ihr monatliches Budget, indem Sie die Lebensmittel- und Kfz-Versicherungseinträge unten an scenario-2024-01.beancount anhängen. Zusammen mit Miete, Fitnessstudio, der Kreditzahlung und beiden Gehaltseinträgen oben ergibt dies 11 geplante Transaktionen.

2024-01-01 ! "Scenario: groceries" #forecast
  Expenses:Food:Groceries             150.00 USD
  Assets:Checking                   -150.00 USD
 
2024-01-08 ! "Scenario: groceries" #forecast
  Expenses:Food:Groceries             150.00 USD
  Assets:Checking                   -150.00 USD
 
2024-01-15 ! "Scenario: groceries" #forecast
  Expenses:Food:Groceries             150.00 USD
  Assets:Checking                   -150.00 USD
 
2024-01-22 ! "Scenario: groceries" #forecast
  Expenses:Food:Groceries             150.00 USD
  Assets:Checking                   -150.00 USD
 
2024-01-29 ! "Scenario: groceries" #forecast
  Expenses:Food:Groceries             150.00 USD
  Assets:Checking                   -150.00 USD
 
2024-01-15 ! "Scenario: quarterly car insurance" #forecast
  Expenses:Insurance:Auto             450.00 USD
  Assets:Checking                   -450.00 USD

Validieren Sie beide Einstiegspunkte und fragen Sie dann ihre Abschlussbestände ab. date < 2024-02-01 umfasst alle Januar-Buchungen. Die Bücher-Abfrage verwendet die feste Stichtagsgrenze date < 2024-01-01.

bea --file books.beancount check
bea --file scenario.beancount check
bea --file books.beancount query "SELECT account, sum(position) WHERE date < 2024-01-01 GROUP BY account ORDER BY account"
bea --file scenario.beancount query "SELECT account, sum(position) WHERE date < 2024-02-01 GROUP BY account ORDER BY account"

Beide bea check-Befehle sollten erfolgreich beendet werden. Gleichen Sie die Abfrageergebnisse mit diesen unabhängigen Berechnungen ab:

ErgebnisRealisierte Bücher, 31. DezemberJanuar-Szenario, 31. Januar
Girokonto10.000,00 USD10.000 + 6.000 − 2.500 − 750 − 80 − 450 − 450 = 11.770,00 USD
Kreditsaldo−14.400,00 USD−14.400 + 400 = −14.000,00 USD
Gehaltseinkommensbuchung0,00 USD−6.000,00 USD
Gesamtaufwandsbuchungen0,00 USD2.500 + 750 + 80 + 450 + 50 = 3.830,00 USD

Der prognostizierte Gewinn für Januar beträgt 2.170,00 USD: 6.000 Einnahmen abzüglich 3.830 Ausgaben. Das Girokonto erhöht sich um 1.770,00 USD, da die zusätzliche Tilgungszahlung von 400 die Schulden statt den Gewinn reduziert.

Öffnen Sie das Szenario in Standard-Fava:

fava scenario.beancount

Setzen Sie Favas Zeitfilter auf 2024-01. Seine Zeitfilterung überträgt frühere Vermögens- und Verbindlichkeitssalden in den Zeitraum und entfernt spätere Einträge. Prüfen Sie die Bilanz auf 11.770,00 USD Bargeld und 14.000,00 USD ausstehende Schulden. Die Gewinn- und Verlustrechnung sollte 2.170,00 USD prognostizierten Gewinn ausweisen. Das Öffnen von books.beancount stattdessen ergibt den realisierten Schnappschuss.

Fehlerbehebung & Best Practices

  • Importfehler für das alte Plugin: Entfernen Sie die Aktivierungszeile, wenn Sie diesen portablen Workflow verwenden. Eine Standard-Fava-Installation bietet die benutzerdefinierten Module von Beancount.io nicht.
  • Unbekanntes Konto oder fehlende Include-Datei: Speichern Sie alle drei Dateien im selben Verzeichnis, kopieren Sie die Opens und validieren Sie scenario.beancount statt nur des Szenario-Fragments.
  • Prognosen fehlen in Fava: Laden Sie scenario.beancount und setzen Sie den Zeitfilter auf 2024-01. Ein Tag oder Erzähltext erzeugt keine Einträge.
  • Unerwartete Salden: Vergleichen Sie die 11 geplanten Daten und Beträge mit der Tabelle. Das doppelte Laden eines Vorkommnisses verdoppelt seine finanzielle Wirkung, auch wenn jede Transaktion ausgeglichen ist.
  • Prognosen getrennt halten: Gewöhnliche Flags, Tags und zukünftige Daten verhindern nicht, dass Einträge einen ungefilterten Bericht beeinflussen. Verwenden Sie books.beancount für tatsächliche Ergebnisse. Wenn eine Zahlung erfolgt, erfassen Sie ihren tatsächlichen Betrag dort und entfernen Sie die entsprechende Annahme aus Ihrem nächsten Szenario, um eine doppelte Zählung zu vermeiden.
  • Zeithorizont überprüfen: Bewahren Sie einen datierten Schnappschuss auf, wenn Sie ein Szenario speichern. Das Verlängern seines Enddatums bedeutet, spezifische Vorkommnisse hinzuzufügen und Kreditaufteilungen, Kündigungstermine und Rundungen erneut zu prüfen.

Quelle: https://beancount.io/de/docs/Tips/forecast-plugin