Le guide complet de la gestion des comptes dans Beancount et Fava
Votre plan comptable est la colonne vertebrale de votre registre Beancount. Une hierarchie de comptes bien concue rend chaque rapport plus clair, chaque requete plus rapide et chaque periode fiscale moins penible. Dans ce guide, nous allons parcourir tout ce que vous devez savoir sur la creation, la consultation, la modification et la cloture des comptes dans Beancount et Fava -- des bases pour les debutants aux modeles avances.
Les cinq types de comptes
Beancount utilise le modele standard de comptabilite en partie double avec exactement cinq types de comptes racines :
| Type | Objectif | Signe normal | Rapport |
|---|---|---|---|
| Assets | Ressources que vous possedez (liquidites, investissements, biens immobiliers) | Positif (debit) | Bilan |
| Liabilities | Dettes que vous devez (cartes de credit, prets, hypotheques) | Negatif (credit) | Bilan |
| Equity | Capitaux propres, benefices non distribues, soldes d'ouverture | Negatif (credit) | Bilan |
| Income | Sources de revenus (salaire, interets, dividendes) | Negatif (credit) | Compte de resultat |
| Expenses | Categories de depenses (alimentation, loyer, charges) | Positif (debit) | Compte de resultat |
L'equation comptable fondamentale est toujours verifiee :
Assets + Expenses + Equity + Income + Liabilities = 0
Une heuristique utile : si les montants ne sont pertinents que pour une periode donnee (par exemple, "Combien ai-je depense en alimentation ce mois-ci ?"), utilisez Income ou Expenses. S'ils representent un solde en cours (par exemple, "Combien y a-t-il sur mon compte courant ?"), utilisez Assets ou Liabilities.
Conventions de nommage des comptes
Les noms de comptes dans Beancount sont des identifiants hierarchiques separes par des deux-points. Les regles sont les suivantes :
- Doivent commencer par l'un des cinq types racines :
Assets,Liabilities,Equity,Income,Expenses - Chaque composant commence par une lettre majuscule ou un chiffre
- Les composants peuvent contenir des lettres, des chiffres et des tirets (pas d'espaces ni de tirets bas)
- Au moins deux composants sont requis (par exemple,
Expenses:Food, et non simplementExpenses) - Les deux-points (
:) separent les niveaux hierarchiques
; Noms de comptes valides
Assets:US:BofA:Checking
Liabilities:CA:RBC:CreditCard
Equity:Retained-Earnings
Income:US:Acme:Salary
Expenses:Food:Groceries
Assets:Crypto:BTC-Holdings
; Noms de comptes invalides
assets:checking ; type racine en minuscules
Assets:my checking ; les espaces ne sont pas autorises
Expenses ; un seul composant
Le modele de nommage recommande pour les comptes de bilan est :
Type : Pays : Institution : Compte : SousCompte
Par exemple : Assets:US:Vanguard:401k:VTSAX ou Liabilities:US:Chase:Sapphire.
Pour les comptes de depenses et de revenus, utilisez plutot un nommage par categorie :
Expenses:Food:Groceries
Expenses:Housing:Utilities:Electric
Income:US:Employer:Salary
Personnaliser les noms racines
Vous pouvez renommer les cinq types racines pour la localisation ou selon vos preferences personnelles :
option "name_assets" "Actifs"
option "name_liabilities" "Passifs"
option "name_equity" "Capital"
option "name_income" "Revenus"
option "name_expenses" "Depenses"
Creer des comptes (directive Open)
Chaque compte doit etre declare avec une directive open avant de pouvoir y enregistrer des transactions. La syntaxe complete est :
YYYY-MM-DD open Account [DeviseContrainte,...] ["MethodeComptable"]
Open basique
2014-05-01 open Assets:US:BofA:Checking
Avec contraintes de devise
Restreindre les devises empeche d'enregistrer accidentellement la mauvaise devise :
2014-05-01 open Assets:US:BofA:Checking USD
2014-05-01 open Assets:Cash USD,CAD,EUR
2012-03-01 open Assets:US:ETrade:Main:ITOT ITOT
Avec methodes de comptabilisation des lots
Pour les comptes d'investissement, specifiez comment les lots sont apparies lors d'une vente :
2014-02-11 open Assets:US:ETrade:IVV IVV "FIFO"
2014-02-11 open Assets:US:Schwab:AAPL AAPL "LIFO"
2014-02-11 open Assets:US:Fidelity GOOG "STRICT"
Methodes de comptabilisation disponibles :
| Methode | Comportement |
|---|---|
"STRICT" | Par defaut. Necessite une specification exacte du lot ; erreur en cas d'ambiguite |
"FIFO" | Premier entre, premier sorti -- reduit les lots les plus anciens en premier |
"LIFO" | Dernier entre, premier sorti -- reduit les lots les plus recents en premier |
"AVERAGE" | Fusionne tous les lots et recalcule le cout moyen |
"NONE" | Pas d'appariement de lots ; tout prix est accepte |
Avec des metadonnees
2013-03-14 open Assets:US:BTrade:HOOLI
category: "taxable"
institution: "BTrade Corp"
account-number: "XX-1234-5678"
Choisir strategiquement les dates d'ouverture
- Utilisez votre date de naissance pour les comptes universels comme
Expenses:Groceries(cela vous donne des totaux sur toute la vie) - Utilisez la date de debut d'emploi pour les comptes de revenus lies au travail
- Utilisez la date reelle de creation du compte pour les comptes lies a une institution (comptes bancaires, cartes de credit)
Ouverture automatique avec un plugin
Si vous souhaitez eviter les directives open manuelles pendant le prototypage :
plugin "beancount.plugins.auto_accounts"
Cela genere automatiquement des directives open pour tout compte reference dans les transactions. Cependant, cela reduit la detection des fautes de frappe, donc ce n'est pas recommande pour un usage en production.
Lister et interroger les comptes
Utiliser bean-query (BQL)
# Lister tous les comptes avec leurs soldes
bean-query ledger.beancount "SELECT account, units(sum(position)) GROUP BY 1"
# Lister uniquement les comptes de depenses
bean-query ledger.beancount "SELECT account WHERE account ~ 'Expenses'"
# Releve de compte avec solde courant
bean-query ledger.beancount \
"SELECT date, account, position, balance WHERE account ~ 'BofA:Checking'"
# Vue journal pour un compte specifique
bean-query ledger.beancount "JOURNAL 'Assets:US:BofA:Checking'"
Utiliser bean-report
# Balance de verification (tous les comptes avec soldes finaux)
bean-report ledger.beancount balances
# Bilan
bean-report ledger.beancount balsheet
# Compte de resultat
bean-report ledger.beancount income
# Journal pour un compte specifique
bean-report ledger.beancount journal -a Assets:US:BofA:Checking
Utiliser Fava
Fava fournit une interface visuelle riche pour explorer les comptes :
- Page Bilan : arborescence interactive de tous les Assets, Liabilities et Equity
- Page Compte de resultat : arborescence interactive de tous les Income et Expenses
- Page de compte : cliquez sur n'importe quel nom de compte pour voir ses onglets Journal, Variations et Soldes
- Barre de filtre : utilisez des expressions regulieres pour afficher uniquement les comptes correspondants (par exemple,
Assets:US)
Mettre a jour les comptes (renommer et reorganiser)
Beancount n'a pas de directive de renommage integree, mais plusieurs approches existent.
1. Rechercher et remplacer
Un simple rechercher-remplacer fonctionne, mais soyez prudent -- Assets:Bank correspondrait aussi a Assets:Bank:Cash. Utilisez des motifs tenant compte des limites de mots :
sed -i 's/Assets:US:OldBank:Checking/Assets:US:NewBank:Checking/g' *.beancount
2. Le plugin rename_accounts
Le paquet beancount_reds_plugins fournit un puissant plugin de renommage :
plugin "beancount_reds_plugins.rename_accounts.rename_accounts" "{
'Expenses:Taxes' : 'Income:Taxes',
'Assets:House:Capital-Improvements' : 'Expenses:House:Appliances',
}"
Ce plugin :
- Utilise la correspondance par sous-chaine (
Expenses:Taxes:Federaldevient automatiquementIncome:Taxes:Federal) - Prend en charge les expressions regulieres avec references arriere
- Genere automatiquement les directives Open pour les comptes renommes
- Ne modifie pas vos fichiers source -- change uniquement la representation en memoire
- Peut etre active/desactive en commentant la ligne du plugin
3. Modele fermeture et reouverture
Pour les migrations de comptes reelles (par exemple, changement de banque) :
; Ancien compte
2010-01-01 open Assets:US:OldBank:Checking USD
; Fermer l'ancien, ouvrir le nouveau
2024-06-15 close Assets:US:OldBank:Checking
2024-06-15 open Assets:US:NewBank:Checking USD
; Transferer le solde restant
2024-06-15 * "Transfert vers la nouvelle banque"
Assets:US:OldBank:Checking -5000.00 USD
Assets:US:NewBank:Checking 5000.00 USD
Cloturer des comptes
La directive close marque un compte comme n'etant plus actif :
2016-11-28 close Liabilities:CreditCard:CapitalOne
Ce que fait la cloture
- Declenche une erreur si des ecritures sont enregistrees apres la date de cloture
- Filtre le compte des rapports en dehors de sa periode d'activite
- Indique a Fava de masquer le compte dans les vues arborescentes (configurable)
Quand cloturer des comptes
- Lorsque vous fermez un compte bancaire ou une carte de credit dans le monde reel
- Lorsque vous changez d'employeur
- Lorsque vous consolidez ou reorganisez votre plan comptable
- Lorsque vous vendez un bien immobilier ou liquidez une position d'investissement
Toujours verifier un solde nul avant la cloture
Beancount ne verifie pas automatiquement un solde nul lors de la cloture. Ajoutez une verification manuelle :
2023-12-31 balance Assets:US:OldBank:Savings 0.00 USD
2023-12-31 close Assets:US:OldBank:Savings
Organiser votre plan comptable
Commencez simplement, affinez au fil du temps
Vous n'avez pas besoin du plan comptable parfait des le premier jour. Commencez avec des categories larges et subdivisez-les au fur et a mesure que vos besoins en rapports evoluent. L'auteur de Beancount rapporte avoir plus de 250 comptes de depenses, tous crees de maniere organique au fil du temps.
Modeles d'organisation courants
Modele 1 : Par institution (pour les comptes de bilan)
Assets:US:BofA:Checking
Assets:US:BofA:Savings
Assets:US:Vanguard:401k:VTSAX
Assets:US:Vanguard:401k:VBTLX
Liabilities:US:Amex:Platinum
Liabilities:US:Chase:Sapphire
Modele 2 : Par categorie (pour les comptes de revenus et de depenses)
Expenses:Food:Groceries
Expenses:Food:Restaurant
Expenses:Food:Coffee
Expenses:Housing:Rent
Expenses:Housing:Insurance
Expenses:Housing:Utilities:Electric
Expenses:Housing:Utilities:Water
Expenses:Transport:Subway
Expenses:Transport:Gas
Expenses:Health:Medical
Expenses:Health:Dental
Modele 3 : Par zone geographique (pour les finances multi-pays)
Assets:US:BofA:Checking
Assets:CA:RBC:Checking
Assets:UK:HSBC:Current
Income:US:Acme:Salary
Income:CA:Freelance:Consulting
Modele 4 : Par propriete ou projet (pour l'immobilier ou les entreprises)
Assets:US:Loft4530:Property
Income:US:Loft4530:Rental
Expenses:Loft4530:Electricity
Expenses:Loft4530:Insurance
Expenses:Loft4530:Maintenance
Modele 5 : Comptes miroirs lies (meme composant d'institution)
Assets:US:ETrade:Cash
Assets:US:ETrade:AAPL
Income:US:ETrade:Dividends
Income:US:ETrade:PnL
Expenses:US:ETrade:Commissions
Quelle profondeur pour les hierarchies ?
- 2-3 niveaux est courant pour les categories de depenses (
Expenses:Food:Restaurant) - 3-4 niveaux pour les elements structures du bilan (
Assets:US:Vanguard:401k:VTSAX) - Evitez de depasser 5 niveaux sauf si vous avez une raison forte liee aux rapports
- Les hierarchies profondes fonctionnent bien lorsque Fava les replie dans les vues arborescentes
Un exemple concret
Voici un plan comptable pratique pour les finances personnelles :
; -- Actifs --
Assets:US:BofA:Checking USD
Assets:US:BofA:Savings USD
Assets:US:Vanguard:401k:VTSAX VTSAX
Assets:US:Vanguard:Roth:VTSAX VTSAX
Assets:US:ETrade:Cash USD
Assets:US:ETrade:AAPL AAPL
Assets:Cash:Wallet USD
; -- Passifs --
Liabilities:US:Amex:Platinum USD
Liabilities:US:Chase:Freedom USD
Liabilities:US:BofA:Mortgage USD
; -- Revenus --
Income:US:Employer:Salary
Income:US:Employer:Bonus
Income:US:Employer:Match401k
Income:US:ETrade:Dividends
Income:US:BofA:Interest
; -- Depenses --
Expenses:Food:Groceries
Expenses:Food:Restaurant
Expenses:Food:Coffee
Expenses:Housing:Rent
Expenses:Housing:Insurance
Expenses:Housing:Utilities:Electric
Expenses:Housing:Utilities:Water
Expenses:Transport:Subway
Expenses:Transport:Taxi
Expenses:Transport:Gas
Expenses:Health:Medical
Expenses:Health:Dental
Expenses:Health:Pharmacy
Expenses:Shopping:Clothing
Expenses:Shopping:Electronics
Expenses:Entertainment:Streaming
Expenses:Entertainment:Books
Expenses:Travel:Flights
Expenses:Travel:Hotels
Expenses:Taxes:Federal
Expenses:Taxes:State
Expenses:Taxes:SocialSecurity
Expenses:Taxes:Medicare
; -- Capitaux propres --
Equity:Opening-Balances
Equity:Retained-Earnings
Fonctionnalites specifiques a Fava
Indicateurs de mise a jour
L'une des meilleures fonctionnalites de Fava pour la gestion des comptes. Ajoutez ces metadonnees a n'importe quel compte :
2014-05-01 open Assets:US:BofA:Checking USD
fava-uptodate-indication: TRUE
Fava affiche alors des points colores a cote du compte :
- Point vert : la derniere ecriture est une assertion de solde reussie (le compte est rapproche)
- Point rouge : la derniere ecriture est une assertion de solde echouee (necessite une attention)
- Point jaune : la derniere ecriture existe mais n'est pas une assertion de solde (pas encore rapproche)
- Point gris : aucune activite pendant la periode de retrospection
Configurez le seuil du point gris :
2016-06-14 custom "fava-option" "uptodate-indicator-grey-lookback-days" "60"
Controles de la vue arborescente
Controlez la facon dont Fava affiche les comptes :
; Afficher les comptes clotures dans l'arborescence
2016-06-14 custom "fava-option" "show-closed-accounts" "true"
; Afficher les comptes sans transactions
2016-06-14 custom "fava-option" "show-accounts-with-zero-transactions" "true"
; Afficher les comptes avec un solde nul
2016-06-14 custom "fava-option" "show-accounts-with-zero-balance" "true"
Modeles de repliage
Replier par defaut les comptes profondement imbriques :
; Replier tous les comptes a 3 niveaux ou plus
2016-06-14 custom "fava-option" "collapse-pattern" ".*:.*:.*"
; Replier des sous-arborescences specifiques
2016-06-14 custom "fava-option" "collapse-pattern" "Assets:US:Vanguard:.*"
Inclure les sous-comptes dans le journal du compte
Lors de la consultation du journal d'un compte dans Fava, inclure les ecritures des sous-comptes :
2016-06-14 custom "fava-option" "account-journal-include-children" "true"
Inverser les signes pour une meilleure lisibilite
Par defaut, les revenus et les passifs s'affichent en nombres negatifs (leur signe naturel). Pour les afficher en positif :
2016-06-14 custom "fava-option" "invert-income-liabilities-equity" "true"
Gestion des documents
Fava integre la gestion des documents dans votre hierarchie de comptes. Definissez un repertoire racine de documents :
option "documents" "/path/to/documents"
Puis organisez les fichiers selon le chemin du compte :
/path/to/documents/
Assets/
US/
BofA/
Checking/
2024-01-15.january-statement.pdf
2024-02-15.february-statement.pdf
Liabilities/
US/
Amex/
Platinum/
2024-03-15.march-bill.pdf
Les fichiers commencant par YYYY-MM-DD sont automatiquement decouverts par Fava et apparaissent dans la vue journal du compte.
Erreurs courantes et comment les eviter
1. Fautes de frappe dans les noms de comptes
Une simple faute de frappe comme Expenses:Grocries cree un compte completement nouveau et non souhaite.
Correction : N'utilisez pas le plugin auto_accounts en production. Exigez des directives open explicites. Beancount signalera immediatement une erreur pour tout compte non declare :
ERROR: Invalid reference to unknown account 'Expenses:Grocries'
2. Oublier les contraintes de devise
Sans contrainte de devise, vous pouvez accidentellement enregistrer des EUR dans un compte en USD uniquement.
Correction : Specifiez toujours les devises dans les directives open :
2014-01-01 open Assets:US:BofA:Checking USD
3. Ne pas verifier les soldes regulierement
Sans assertions de solde regulieres, les erreurs peuvent passer inapercues pendant des mois.
Correction : Ajoutez des assertions de solde mensuelles pour chaque compte actif :
2024-01-01 balance Assets:US:BofA:Checking 5,432.10 USD
2024-02-01 balance Assets:US:BofA:Checking 4,890.55 USD
2024-03-01 balance Assets:US:BofA:Checking 6,123.00 USD
4. Conventions de nommage incoherentes
Melanger les modeles (par exemple, Expenses:Food vs Expenses:US:Food) rend les requetes et les rapports confus.
Correction : Choisissez une convention et respectez-la. Utilisez des prefixes de pays pour les comptes de bilan, un nommage par categorie pour les revenus et les depenses.
5. Cloturer sans assertion de solde nul
La directive close ne verifie pas le solde. Vous pourriez cloturer un compte qui contient encore de l'argent.
Correction : Associez toujours la cloture a une assertion de solde :
2023-12-31 balance Assets:US:OldBank:Savings 0.00 USD
2023-12-31 close Assets:US:OldBank:Savings
Modeles avances
Astuces multi-devises
Declarez vos devises d'exploitation pour obtenir des colonnes dediees dans les rapports :
option "operating_currency" "USD"
option "operating_currency" "EUR"
Pour les comptes multi-devises, listez toutes les devises autorisees :
2014-01-01 open Assets:Cash USD,CAD,EUR
Les assertions de solde avec plusieurs devises doivent etre faites une devise a la fois :
2024-01-01 balance Assets:Cash 562.00 USD
2024-01-01 balance Assets:Cash 210.00 CAD
2024-01-01 balance Assets:Cash 60.00 EUR
Pad et Balance pour la configuration initiale
Utilisez la directive pad pour etablir les soldes d'ouverture sans calculer manuellement les montants :
2000-05-28 open Assets:US:BofA:Checking USD
2000-05-28 pad Assets:US:BofA:Checking Equity:Opening-Balances
2024-07-01 balance Assets:US:BofA:Checking 12,345.67 USD
Beancount synthetise automatiquement la transaction d'ajustement. Un point important : les assertions de solde verifient le solde au debut de la date specifiee. Donc un pad le 2 janvier necessite une assertion de solde le 3 janvier ou plus tard.
Metadonnees de compte pour la categorisation
Utilisez les metadonnees sur les directives open pour des rapports personnalises :
2014-01-01 open Assets:US:BofA:Checking USD
category: "liquid"
tax-status: "taxable"
2014-01-01 open Assets:US:Vanguard:401k USD
category: "retirement"
tax-status: "tax-deferred"
Interrogez les metadonnees avec BQL :
SELECT account, META("category") WHERE META("tax-status") = "taxable"
Notes pour l'historique du compte
Attachez des notes datees au journal de n'importe quel compte :
2024-03-20 note Assets:US:BofA:Checking "Appel concernant un debit conteste, ref #12345"
2024-06-01 note Liabilities:US:Chase:Sapphire "Frais annuels annules apres appel au service de retention"
Ces notes apparaissent dans le journal du compte dans Fava, fournissant une piste d'audit.
Comptes de suivi et affectation
Beancount n'a pas les ecritures virtuelles de Ledger, mais vous pouvez utiliser des sous-comptes pour l'affectation :
; Suivre le fonds d'urgence au sein du compte courant
Assets:US:BofA:Checking:EmergencyFund USD
Assets:US:BofA:Checking:Operating USD
; Suivre les remboursements
Assets:Receivables:Employer:Travel USD
Assets:Receivables:Friend:SharedDinner USD
Categories de depenses favorables a la fiscalite
Structurez les comptes de depenses pour faciliter la preparation fiscale :
Expenses:Health:Medical:Deductible
Expenses:Charity:Deductible
Expenses:Business:Office
Expenses:Business:Equipment
Expenses:Education:Professional
Aide-memoire rapide
| Tache | Syntaxe |
|---|---|
| Ouvrir un compte | 2024-01-01 open Assets:US:BofA:Checking USD |
| Cloturer un compte | 2024-12-31 close Assets:US:OldBank:Savings |
| Verifier le solde | 2024-01-01 balance Assets:US:BofA:Checking 5,432.10 USD |
| Ajuster au solde | 2024-01-01 pad Assets:Cash Equity:Opening-Balances |
| Ajouter une note | 2024-01-15 note Assets:US:BofA:Checking "Rapprochement mensuel effectue" |
| Joindre un document | 2024-01-15 document Assets:US:BofA:Checking "/path/to/statement.pdf" |
| Ajouter des metadonnees | Paire cle-valeur indentee sur la ligne apres open |
| Ouverture auto (dev) | plugin "beancount.plugins.auto_accounts" |
| Restreindre la devise | 2024-01-01 open Assets:Cash USD,EUR |
| Definir la methode de comptabilisation | 2024-01-01 open Assets:US:ETrade:AAPL AAPL "FIFO" |
Resume
Bien gerer ses comptes est le fondement d'une comptabilite efficace avec Beancount. Voici les points essentiels a retenir :
- Utilisez toujours des directives
openexplicites -- elles detectent les fautes de frappe et imposent de la rigueur - Ajoutez des contraintes de devise pour eviter les erreurs inter-devises
- Utilisez une convention de nommage coherente -- par institution pour le bilan, par categorie pour les revenus/depenses
- Commencez simplement et affinez -- subdivisez les comptes au fur et a mesure que vos besoins en rapports evoluent
- Verifiez les soldes regulierement -- le rapprochement mensuel detecte les erreurs tot
- Cloturez les comptes correctement -- avec une assertion de solde nul
- Tirez parti des fonctionnalites de Fava -- indicateurs de mise a jour, modeles de repliage et integration des documents
- Utilisez les metadonnees pour la categorisation personnalisee et les rapports
Bonne comptabilite !
- https://beancount.github.io/docs/beancount_language_syntax.html
- https://beancount.github.io/docs/command_line_accounting_cookbook.html
- https://beancount.github.io/docs/beancount_options_reference.html
- https://beancount.github.io/docs/beancount_query_language.html
- https://plaintextaccounting.org/Choosing-accounts
