Aller au contenu principal

Prévoir les transactions futures

Créez un grand livre de scénario Beancount séparé et validé avec des revenus, dépenses et remboursements de prêt à date future.

Placez les transactions à date future dans un grand livre de scénario séparé pour projeter les liquidités, les dépenses et la dette dans vos rapports financiers. Cette procédure utilise des écritures Beancount ordinaires et une période de planification fixe. Vos livres réalisés restent séparés de vos hypothèses.

Compatibilité, vérifiée le 7 septembre 2026 : les exemples ont été testés avec Beancount standard 3.2.3, beanquery 0.2.0 et Fava 1.30.16. Cette version de Fava n'inclut pas de plugin de prévision. La source personnalisée de Beancount.io contient bien une implémentation fava.plugins.forecast ; il s'agit d'un environnement d'exécution différent, et la disponibilité de la source n'établit pas la version déployée sur votre compte. La procédure portable ci-dessous ne nécessite aucune extension.

Étape 1 : Activer le plugin de prévision

Ignorez l'activation du plugin pour cette procédure. L'ajout de plugin "fava.plugins.forecast" à l'installation standard testée produit une erreur d'import. Pour la configuration générale des plugins, consultez le guide des plugins ; un module doit réellement être installé avant qu'un grand livre puisse le charger.

Prérequis : un environnement Python local avec beancount==3.2.3, beanquery==0.2.0 et fava==1.30.16 installés. Suivez la configuration Fava épinglée pour créer cet environnement. Enregistrez les trois fichiers ci-dessous dans le même répertoire et exécutez les commandes à cet endroit.

Créez books.beancount avec cet instantané complet d'exemple. Sa date de référence est le 31 décembre 2023, après la transaction d'ouverture. Le compte courant détient 10 000,00 USD et le capital restant dû du prêt automobile est de 14 400,00 USD. Les capitaux propres équilibrent cet instantané d'ouverture simplifié.

; 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

Créez scenario.beancount comme point d'entrée de planification. Ses deux inclusions chargent l'instantané réalisé et les hypothèses que vous écrirez ensuite. Beancount lit les chemins d'inclusion relatifs à ce fichier.

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

N'incluez jamais scenario.beancount ou scenario-2024-01.beancount depuis books.beancount. Le point d'entrée réalisé ne doit pas charger de transactions planifiées, même après que leurs dates soient passées.

Étape 2 : Créer une transaction de prévision

Créez scenario-2024-01.beancount avec cette première écriture. Ajoutez les quatre blocs de scénario suivants à ce même fichier une fois chacun. Ce sont des blocs de transactions contextuels : leurs déclarations de comptes proviennent de books.beancount, et vous les validez via scenario.beancount.

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

Le drapeau ! marque une transaction pour examen ; #forecast est une étiquette de transaction ordinaire. Ni l'un ni l'autre ne crée de récurrences ni n'exclut une transaction des rapports. Le point d'entrée séparé contrôle l'inclusion. Utilisez cette étiquette uniquement sur les écritures planifiées afin de pouvoir les identifier lors de l'examen.

Comprendre la syntaxe de prévision

Chaque écriture datée représente une occurrence. Le texte de narration tel que [MONTHLY] n'a aucun effet de récurrence dans Beancount standard. Les instructions plus anciennes UNTIL, REPEAT et SKIP appartiennent à une convention de plugin personnalisée, pas au langage de base. Cette procédure exprime explicitement les dates qu'elles étaient censées représenter.

Le scénario couvre du 1er au 31 janvier 2024 inclus. Toutes les dates planifiées sont postérieures à la date de référence fixe et antérieures au 1er février. Ces dates historiques rendent l'exemple reproductible ; rien ne dépend de la date d'aujourd'hui. Pour l'adapter, choisissez une nouvelle date de référence et un horizon fini avant d'ajouter des écritures.

Fréquence

Écrivez une transaction pour chaque date d'échéance dans la période de planification. L'exemple complet de janvier utilise ces règles :

ÉlémentCalendrierDates incluses en janvier 2024
LoyerMensuel, le 1er1er janvier
ÉpicerieTous les 7 jours, à partir du 1er janvier1, 8, 15, 22, 29 janvier
SalaireTous les 14 jours, à partir du 5 janvier5, 19 janvier
Salle de sportMensuel, le 1515 janvier
Remboursement de prêtMensuel, le 2525 janvier
Assurance automobileTous les 3 mois civils, à partir du 15 janvier15 janvier ; le prochain paiement le 15 avril est hors de cet horizon

Pour d'autres plans quotidiens ou annuels, énumérez les dates d'échéance réelles de la même manière. Définissez une politique pour les dates comme le 31 ou le 29 février avant d'étendre un calendrier. Ne les déplacez pas silencieusement et ne supposez pas que chaque mois a le même nombre de jours.

Conditions (optionnel)

1. Définir une date de fin explicitement

Supposons que l'abonnement à la salle de sport se termine le 31 décembre 2024. Son occurrence de janvier est ci-dessous. Le scénario de janvier s'arrête au 31 janvier, il ne contient donc aucune écriture de février à décembre. Si vous étendez l'horizon, écrivez chaque paiement ultérieur jusqu'au 15 décembre et arrêtez-vous là.

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

2. Limiter les occurrences et séparer le principal du prêt des intérêts

Supposons que le prêt automobile ait 36 paiements restants. Incluez uniquement le premier paiement dans cet horizon de janvier. Pour cette échéance hypothétique, supposez que son paiement en espèces de 450,00 USD se compose de 400,00 USD de principal et de 50,00 USD d'intérêts. Ce sont des hypothèses de scénario ; aucune échéance ultérieure n'est générée.

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

L'écriture positive au passif réduit le solde de la dette de −14 400,00 USD à −14 000,00 USD. Les liquidités diminuent de 450,00 USD, et seulement 50,00 USD sont une dépense. Les écritures équilibrent parce que 400.00 + 50.00 - 450.00 = 0. Une écriture négative au passif augmenterait la dette.

Ne répétez pas la même répartition principal/intérêts pour les 36 paiements sans un calendrier justificatif. Les intérêts futurs et le paiement final peuvent différer. Utilisez le calendrier de remboursement du prêteur lors de l'extension de cet exemple ; voir amortissement pour la distinction entre la comptabilisation des dépenses et le remboursement de la dette.

3. Écrire les intervalles irréguliers comme des dates réelles

Pour un salaire bihebdomadaire commençant le 5 janvier, les dates de janvier sont le 5 et le 19 janvier. La prochaine occurrence est le 2 février, hors de ce scénario. Bihebdomadaire signifie tous les 14 jours, pas deux fois par mois civil.

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

Exemple pratique : un budget mensuel

Complétez votre budget mensuel en ajoutant les écritures d'épicerie et d'assurance automobile ci-dessous à scenario-2024-01.beancount. Avec le loyer, la salle de sport, le remboursement de prêt et les deux salaires ci-dessus, cela produit 11 transactions planifiées.

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

Validez les deux points d'entrée, puis interrogez leurs soldes de clôture. date < 2024-02-01 inclut toutes les écritures de janvier. La requête des livres utilise la limite fixe de la date de référence 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"

Les deux commandes bea check doivent se terminer avec succès. Conciliez les résultats de la requête avec ces calculs indépendants :

RésultatLivres réalisés, 31 décembreScénario de janvier, 31 janvier
Compte courant10 000,00 USD10 000 + 6 000 − 2 500 − 750 − 80 − 450 − 450 = 11 770,00 USD
Solde du prêt−14 400,00 USD−14 400 + 400 = −14 000,00 USD
Écriture de revenu salarial0,00 USD−6 000,00 USD
Total des écritures de dépenses0,00 USD2 500 + 750 + 80 + 450 + 50 = 3 830,00 USD

Le profit projeté de janvier est de 2 170,00 USD : 6 000 de revenus moins 3 830 de dépenses. Le compte courant augmente de 1 770,00 USD car les 400 supplémentaires de remboursement du principal réduisent la dette plutôt que le profit.

Ouvrez le scénario dans Fava standard :

fava scenario.beancount

Réglez le filtre Temporel de Fava sur 2024-01. Son filtrage temporel reporte les soldes des actifs et passifs antérieurs dans la période et supprime les écritures ultérieures. Vérifiez le bilan pour 11 770,00 USD de liquidités et 14 000,00 USD de dette restante. Le compte de résultat doit afficher 2 170,00 USD de profit projeté. Ouvrir books.beancount à la place donne l'instantané réalisé.

Dépannage et bonnes pratiques

  • Erreur d'import pour l'ancien plugin : supprimez la ligne d'activation lorsque vous utilisez cette procédure portable. Une installation Fava standard ne fournit pas les modules personnalisés de Beancount.io.
  • Compte inconnu ou fichier d'inclusion manquant : enregistrez les trois fichiers dans le même répertoire, copiez les ouvertures et validez scenario.beancount plutôt que le fragment de scénario seul.
  • Prévisions absentes de Fava : chargez scenario.beancount et réglez le filtre Temporel sur 2024-01. Une étiquette ou une narration ne génère pas d'écritures.
  • Soldes inattendus : comparez les 11 dates et montants planifiés avec le tableau. Charger une occurrence deux fois double son effet financier, même si chaque transaction équilibre.
  • Gardez les prévisions séparées : les drapeaux, étiquettes et dates futures ordinaires n'empêchent pas les écritures d'affecter un rapport non filtré. Utilisez books.beancount pour les résultats réels. Lorsqu'un paiement a lieu, enregistrez son montant réel là et retirez l'hypothèse correspondante de votre prochain scénario pour éviter de le compter deux fois.
  • Révisez l'horizon : conservez un instantané daté lors de l'enregistrement d'un scénario. Étendre sa date de fin signifie ajouter des occurrences spécifiques et revérifier les répartitions de prêt, les dates d'annulation et les arrondis.

Source : https://beancount.io/fr/docs/Tips/forecast-plugin