Passer au contenu principal

Guide de migration de QuickBooks vers Beancount

· 36 min de lecture
Mike Thrift
Mike Thrift
Marketing Manager

Étape 1 : Exportation des données depuis QuickBooks

La migration de cinq années de données commence par l'extraction de tous les enregistrements de QuickBooks dans un format utilisable. QuickBooks Desktop et QuickBooks Online ont des options d'exportation différentes :

2021-12-01-from-quickbooks-to-plain-text-a-migration-playbook

1.1 QuickBooks Desktop – Options d’exportation

IIF (Intuit Interchange Format) : QuickBooks Desktop peut exporter des listes (comme le plan comptable, les clients, les fournisseurs) vers des fichiers texte .IIF. Dans QuickBooks Desktop, allez dans Fichier → Utilitaires → Exporter → Listes vers fichiers IIF, puis sélectionnez les listes dont vous avez besoin (par ex. Plan comptable, Clients, Fournisseurs). Cela produit un fichier texte qui inclut les noms de comptes, les types et les données des listes. IIF est un format propriétaire mais en texte brut, relativement facile à analyser. Utilisez-le pour capturer votre plan comptable et vos listes de contacts pour référence dans Beancount.

Grand livre/Journal général via CSV : Pour les données de transactions, QuickBooks Desktop ne fournit pas d'exportation complète en un clic, mais vous pouvez utiliser les rapports. La méthode recommandée est d'exporter le Journal général (toutes les transactions) sur la plage de dates souhaitée. Dans QuickBooks Desktop, ouvrez Rapports → Comptable et impôts → Journal, définissez les Dates de la première transaction à aujourd'hui, et cliquez sur Exporter → Excel. Enregistrez le résultat en CSV après avoir supprimé les en-têtes/pieds de page du rapport et les colonnes vides. Assurez-vous que les données numériques sont propres : incluez les centimes (par ex. 3.00 et non 3), pas de guillemets supplémentaires, et pas de symboles monétaires ou de doubles négations dans le CSV. Le CSV devrait avoir des colonnes comme Date, N° Trans., Nom, Compte, Mémo, Débit, Crédit, Solde (ou une seule colonne Montant selon le format du rapport).

Astuce : QuickBooks Desktop 2015+ peut également exporter des transactions via la boîte de dialogue Rechercher. Utilisez Édition → Rechercher → Avancé, définissez la plage de dates sur cinq ans, puis exportez les résultats en CSV. Attention : Certaines versions limitent l'exportation à 32 768 lignes. Si vous avez de très grandes quantités de données, exportez année par année (ou par plus petits morceaux) pour éviter la troncature, puis combinez-les plus tard. Assurez-vous que les plages de dates ne se chevauchent pas pour éviter les doublons.

Autres formats (QBO/QFX/QIF) : QuickBooks Desktop peut importer des transactions bancaires via des fichiers .QBO (Web Connect) ou .QFX/.OFX, mais pour exporter depuis QuickBooks, ce ne sont pas des formats typiques. Si votre objectif est d'extraire uniquement les transactions bancaires, vous les avez peut-être déjà en QBO/OFX depuis votre banque. Cependant, pour une exportation complète du grand livre, tenez-vous-en à l'IIF et au CSV. QuickBooks Desktop ne peut pas exporter directement en QIF (Quicken Interchange Format) sans outils tiers. Si vous trouvez un moyen d'obtenir du QIF, notez que certains outils de comptabilité (anciennes versions de Ledger 2.x) pouvaient lire le QIF, mais il est préférable de travailler avec le CSV dans notre processus.

1.2 QuickBooks Online – Options d’exportation

Exportation Excel/CSV intégrée : QuickBooks Online (QBO) fournit un outil Exporter les données. Allez dans Paramètres ⚙ → Outils → Exporter les données. Dans la boîte de dialogue d'exportation, utilisez l'onglet Rapports pour sélectionner les données (par ex. Grand livre général ou Liste des transactions) et l'onglet Listes pour les listes (plan comptable, etc.), choisissez Toutes les dates, et exportez vers Excel. QuickBooks Online téléchargera un ZIP contenant plusieurs fichiers Excel pour les rapports et listes sélectionnés (par exemple, Compte de résultat, Bilan, Grand livre général, Clients, Fournisseurs, Plan comptable, etc.). Vous pouvez ensuite convertir ces fichiers Excel en CSV pour le traitement.

Rapport détaillé des transactions : Si l'exportation par défaut de QBO n'inclut pas un seul fichier de Grand livre général, vous pouvez générer manuellement un rapport détaillé :

  1. Allez dans Rapports et trouvez Détail des transactions par compte (ou Grand livre général dans certaines versions de QBO).
  2. Définissez la Période du rapport sur la plage complète de cinq ans.
  3. Sous les options du rapport, définissez Grouper par = Aucun (pour lister les transactions individuelles sans sous-totaux).
  4. Personnalisez les colonnes pour inclure au moins : Date, Type de transaction, Numéro, Nom (Bénéficiaire/Client), Mémo/Description, Compte, Débit, Crédit (ou une seule colonne Montant), et Solde. Incluez toute classe ou emplacement si utilisé.
  5. Générez le rapport puis Exporter vers Excel.

Cela produit un grand livre détaillé de toutes les transactions. Enregistrez-le en CSV. Chaque ligne représentera une ventilation (écriture) d'une transaction. Vous devrez plus tard regrouper les lignes par transaction pour la conversion.

Plan comptable et autres listes : QuickBooks Online peut exporter le plan comptable via Comptabilité → Plan comptable → Actions groupées → Exporter vers Excel. Faites cela pour obtenir les noms et types de comptes. De même, exportez les Clients, Fournisseurs, etc., si vous souhaitez conserver les noms pour les métadonnées.

API QuickBooks Online (Optionnel) : Pour une approche programmatique, Intuit fournit une API REST pour les données QBO. Les utilisateurs avancés peuvent créer une application QuickBooks Online (nécessite un compte développeur) et utiliser l'API pour récupérer les données en JSON. Par exemple, vous pourriez interroger le point de terminaison Account pour le plan comptable et les points de terminaison de rapport JournalEntry ou GeneralLedger pour les transactions. Il existe des SDK Python comme python-quickbooks qui encapsulent l'API. Cependant, l'utilisation de l'API implique une authentification OAuth et est excessive pour une migration unique, à moins que vous ne préfériez l'automatisation. Pour la plupart des cas, l'exportation manuelle vers CSV/Excel est plus simple et moins sujette aux erreurs.


Étape 2 : Transformation et nettoyage des données

Une fois que vous avez les données QuickBooks en CSV (et/ou IIF), l'étape suivante consiste à les convertir au format de grand livre en texte brut de Beancount. Cela implique d'analyser les exports, de mapper les comptes QuickBooks à un plan comptable Beancount, et de formater les transactions dans la syntaxe Beancount.

2.1 Analyse des exports QuickBooks avec Python

L'utilisation de Python garantira la précision et la reproductibilité de la transformation. Nous décrirons des scripts pour deux tâches clés : l'importation du plan comptable et la conversion des transactions.

Importation et mappage des comptes : Il est crucial de configurer vos comptes dans Beancount avant d'ajouter des transactions. Les comptes QuickBooks ont des types (Banque, Comptes Clients, Dépense, etc.) que nous mapperons à la hiérarchie de Beancount (Actifs, Passifs, Revenus, Dépenses, etc.). Par exemple, nous pouvons utiliser un mappage comme :

# Mappage du type de compte QuickBooks à la catégorie racine de Beancount
AccountTypeMap = {
'BANK': 'Assets', # Compte bancaire -> Actifs
'CCARD': 'Liabilities', # Carte de crédit -> Passifs
'AR': 'Assets', # Comptes clients comme actif
'AP': 'Liabilities', # Comptes fournisseurs comme passif
'FIXASSET': 'Assets', # Immobilisation
'OASSET': 'Assets', # Autre actif
'OCASSET': 'Assets', # Autre actif circulant
'LTLIAB': 'Liabilities',# Passif à long terme
'OCLIAB': 'Liabilities',# Autre passif circulant
'EQUITY': 'Equity', # Capitaux propres
'INC': 'Income', # Revenus
'EXP': 'Expenses', # Dépenses
'EXINC': 'Income', # Autres revenus
'EXEXP': 'Expenses', # Autres dépenses
}

En utilisant l'export IIF de QuickBooks Desktop ou le CSV de la liste de comptes de QBO, nous récupérons le nom et le type de chaque compte. Ensuite :

  • Créez les noms de compte Beancount : QuickBooks utilise parfois des deux-points (:) dans les noms de compte pour désigner des sous-comptes (par ex., "Actifs circulants:Chèques"). Beancount utilise la même notation pour la hiérarchie. Vous pouvez souvent réutiliser le nom directement. Si les noms de compte QuickBooks ne commencent pas par une catégorie, préfixez la catégorie mappée. Par exemple, un compte QuickBooks de type BANK nommé "Chèques" deviendra Actifs:Chèques dans Beancount. Un compte EXP (dépense) "Repas" devient Dépenses:Repas, etc.

  • Assurez une dénomination valide : Supprimez ou remplacez tout caractère qui pourrait perturber Beancount. QuickBooks autorise des caractères comme & ou / dans les noms. Il est sage de supprimer ou de remplacer les caractères spéciaux (par ex., remplacer & par et, supprimer les barres obliques ou les espaces). Assurez-vous également que tous les noms de compte sont uniques après la transformation – QuickBooks peut avoir autorisé le même nom de sous-compte sous différents parents, ce qui est acceptable, mais dans Beancount, le nom complet (avec les parents) doit être unique. Si nécessaire, renommez ou ajoutez un qualificateur pour les distinguer.

  • Générez les ouvertures de compte : Dans Beancount, chaque compte utilisé doit être ouvert avec une directive open. Vous pouvez choisir une date antérieure à votre première transaction (par ex., si vous migrez des données de 2019 à 2023, utilisez 2018-12-31 ou une date encore plus précoce pour toutes les ouvertures). Le script écrira des lignes comme : 2018-12-31 open Actifs:Chèques USD 2018-12-31 open Dépenses:Repas USD pour chaque compte (en supposant que l'USD est la devise principale). Utilisez la devise appropriée pour chaque compte (voir les notes sur le multi-devises ci-dessous).

Conversion des transactions : Le principal défi est de convertir l'export de transactions QuickBooks (CSV) en entrées Beancount. Chaque transaction QuickBooks (facture, facture fournisseur, chèque, écriture de journal, etc.) peut avoir plusieurs ventilations (lignes) qui doivent être regroupées en une seule transaction Beancount.

Nous utiliserons le lecteur CSV de Python pour itérer sur les lignes exportées et accumuler les ventilations :

import csv
from collections import defaultdict

# Lire toutes les lignes du CSV du Journal de QuickBooks
rows = []
with open('journal_exporte_quickbooks.csv', 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for line in reader:
rows.append(line)

# Regrouper les lignes par transaction (en supposant que 'N° Trans.' identifie les transactions)
transactions = defaultdict(list)
for line in rows:
trans_id = line.get('N° Trans.') or line.get('ID Transaction') or line.get('Num')
transactions[trans_id].append(line)

Maintenant, transactions est un dictionnaire où chaque clé est un ID/numéro de transaction et la valeur est la liste des ventilations pour cette transaction. Ensuite, nous convertissons chaque groupe en Beancount :

def format_date(qb_date):
# Les dates QuickBooks peuvent être comme "12/31/2019"
m, d, y = qb_date.split('/')
return f"{y}-{int(m):02d}-{int(d):02d}"

output_lines = []
for trans_id, splits in transactions.items():
# Trier les ventilations par ordre de ligne si nécessaire (elles sortent généralement dans l'ordre)
splits = sorted(splits, key=lambda x: x.get('Ligne') or 0)
first = splits[0]
date = format_date(first['Date'])
payee = first.get('Nom', "").strip()
memo = first.get('Mémo', "").strip()
# En-tête de la transaction
output_lines.append(f'{date} * "{payee}" "{memo}"')
if first.get('Num'): # inclure le numéro de référence si disponible
output_lines.append(f' number: "{first["Num"]}"')
# Boucle sur chaque ventilation/écriture
for split in splits:
acct_name = split['Compte'].strip()
# Mapper le nom du compte QuickBooks au compte Beancount (en utilisant le mappage précédent)
beancount_acct = account_map.get(acct_name, acct_name)
# Déterminer le montant avec le signe :
amount = split.get('Montant') or ""
debit = split.get('Débit') or ""
credit = split.get('Crédit') or ""
if amount:
# Certains exports ont une seule colonne Montant (négative pour les crédits)
amt_str = amount
else:
# Si des colonnes Débit/Crédit séparées
amt_str = debit if debit else f"-{credit}"
# Supprimer les virgules dans les nombres par sécurité
amt_str = amt_str.replace(",", "")
# Ajouter la devise
currency = split.get('Devise') or "USD"
amt_str = f"{amt_str} {currency}"
# Mémo/description pour la ventilation
line_memo = split.get('Mémo', "").strip()
comment = f" ; {line_memo}" if line_memo else ""
output_lines.append(f" {beancount_acct:<40} {amt_str}{comment}")
# Fin de la transaction – ligne vide
output_lines.append("")

Cette logique de script effectue les opérations suivantes :

  • Formate la date en YYYY-MM-DD pour Beancount.
  • Utilise le bénéficiaire (Nom) et le mémo pour la narration de la transaction. Par exemple : 2020-05-01 * "ACME Corp" "Paiement de facture" (S'il n'y a pas de bénéficiaire, vous pourriez utiliser le Type de transaction QuickBooks ou laisser les guillemets vides).
  • Ajoute une métadonnée number s'il y a un numéro de référence (n° de chèque, n° de facture, etc.).
  • Itère sur chaque ligne de ventilation :
    • Mappe le nom du compte QuickBooks au compte Beancount à l'aide d'un dictionnaire account_map (rempli à partir de l'étape du plan comptable).
    • Détermine le montant. Selon votre export, vous pourriez avoir une seule colonne Montant (avec des valeurs positives/négatives) ou des colonnes Débit et Crédit séparées. Le code ci-dessus gère les deux cas. Il s'assure que les crédits sont représentés comme des montants négatifs pour Beancount (puisque dans Beancount, un seul nombre avec signe est utilisé par écriture).
    • Ajoute la devise (en supposant USD sauf si une colonne de devise différente est présente).
    • Écrit la ligne d'écriture Beancount avec le compte, le montant, et un commentaire avec le mémo de la ligne. Par exemple : Actifs:Chèques 500.00 USD ; Dépôt Revenus:Ventes -500.00 USD ; Dépôt Cela reflète un dépôt de 500 $ (des Revenus vers le compte Chèques).
  • Après avoir listé toutes les ventilations, une ligne vide sépare la transaction.

Gestion multi-devises : Si vos données QuickBooks impliquent plusieurs devises, incluez le code de la devise sur chaque écriture (comme montré ci-dessus). Assurez-vous que les comptes en devises étrangères sont ouverts avec cette devise. Par exemple, si vous avez un compte bancaire en EUR, vous généreriez open Actifs:Banque:CompteCourant EUR et les transactions dans ce compte utiliseront l'EUR. Beancount prend en charge les grands livres multi-devises et suivra les conversions implicites, mais vous pourriez avoir besoin d'ajouter des entrées de prix pour les taux de change si vous voulez une conversion vers une devise de base dans les rapports. Il est également recommandé de déclarer votre devise opérationnelle principale en haut du fichier Beancount (par ex., option "operating_currency" "USD").

Exécution de la conversion : Enregistrez le script Python (par exemple, sous le nom qb_vers_beancount.py) et exécutez-le sur vos fichiers exportés. Il devrait produire un fichier .beancount contenant tous les comptes et transactions.

2.2 Gestion des cas particuliers et nettoyage des données

Pendant la transformation, soyez attentif à ces pièges courants et à la manière de les gérer :

  • Incohérences de noms de compte : QuickBooks peut avoir des noms de compte qui entrent en conflit avec les noms hiérarchiques de Beancount. Par exemple, QuickBooks pourrait avoir deux comptes parents différents, chacun avec un sous-compte nommé "Assurance". Dans Beancount, Dépenses:Assurance doit être unique. Résolvez ce problème en renommant l'un d'eux (par ex., "Assurance-Véhicule" vs "Assurance-Santé") avant l'exportation ou mappez-les à des comptes Beancount uniques dans votre script. Des conventions de nommage cohérentes (pas de caractères spéciaux et utilisation de la hiérarchie) vous épargneront des maux de tête. Utilisez l'approche du fichier de remappage si nécessaire : maintenez un CSV ou un dictionnaire de ancien nom → nouveau nom Beancount et appliquez-le lors de la conversion (notre exemple de code utilise un account_map et pourrait charger des substitutions depuis un fichier).

  • Dates et formats : Assurez-vous que toutes les dates sont formatées de manière cohérente. Le script ci-dessus normalise M/J/A au format ISO. Faites également attention aux problèmes d'exercice fiscal par rapport à l'année civile si votre période de cinq ans traverse une fin d'année. Beancount ne se soucie pas des limites de l'exercice fiscal, mais vous voudrez peut-être plus tard diviser les fichiers par année pour plus de commodité.

  • Précision numérique : QuickBooks gère la monnaie avec des centimes, donc travailler en centimes est généralement correct. Tous les montants devraient idéalement avoir deux décimales dans le CSV. Si des montants se sont transformés en entiers (pas de décimale) ou ont des virgules/parenthèses (pour les négatifs), nettoyez-les dans le script (supprimez les virgules, convertissez (100.00) en -100.00, etc.). L'export CSV, s'il est fait correctement (selon les instructions), devrait déjà éviter ces problèmes de formatage.

  • Montants négatifs et signes : Les rapports QuickBooks affichent parfois les négatifs comme -100.00 ou (100.00) ou même --100.00 dans certains exports Excel. L'étape de nettoyage devrait gérer cela. Assurez-vous que les débits et les crédits de chaque transaction s'équilibrent à zéro. Beancount l'imposera (s'il n'est pas équilibré, il lèvera une erreur à l'importation).

  • Doublons de transactions : Si vous avez dû exporter les transactions par lots (par ex., année par année ou compte par compte), faites attention de les fusionner sans chevauchement. Vérifiez que la première transaction d'une année n'est pas aussi la dernière du lot précédent, etc. Il est facile de dupliquer accidentellement quelques transactions aux limites. Si vous suspectez des doublons, vous pouvez trier les entrées Beancount finales par date et rechercher des entrées identiques, ou utiliser les balises de transaction uniques de Beancount pour les attraper. Une stratégie consiste à inclure les numéros de transaction QuickBooks comme métadonnées (par ex., utiliser le N° Trans. ou le numéro de facture comme une balise txn ou une métadonnée quickbooks_id) puis s'assurer qu'il n'y a pas de doublons de ces ID.

  • Ventilations non équilibrées / Comptes d'attente : QuickBooks peut avoir des cas étranges comme une transaction avec un déséquilibre que QuickBooks a auto-ajusté vers un compte "Capitaux propres d'ouverture" ou "Bénéfices non répartis". Par exemple, lors de la configuration des soldes de compte initiaux, QuickBooks impute souvent les différences à un compte de capitaux propres. Celles-ci apparaîtront dans les transactions exportées. Beancount exigera un équilibrage explicite. Vous pourriez avoir besoin d'introduire un compte de capitaux propres pour les soldes d'ouverture (communément CapitauxPropres:Soldes-Ouverture) pour refléter QuickBooks. Il est de bonne pratique d'avoir une écriture de solde d'ouverture le premier jour de votre grand livre qui établit les soldes de départ de tous les comptes (voir Étape 5).

  • Cas particuliers multi-devises : Si vous utilisez le multi-devises, l'export de QuickBooks peut lister tous les montants dans la devise de base ou dans leur devise native. Idéalement, obtenez les données dans la devise native pour chaque compte (les rapports de QuickBooks Online le font généralement). Dans Beancount, chaque écriture porte une devise. Si QuickBooks a fourni des taux de change ou une conversion en devise de base, vous pourriez les ignorer et vous fier aux entrées de prix de Beancount. Si QuickBooks n'a pas exporté les taux de change, vous voudrez peut-être ajouter manuellement des enregistrements de prix (par ex., en utilisant la directive price de Beancount) pour les dates clés afin de faire correspondre l'évaluation. Cependant, pour l'intégrité de base du grand livre, il suffit que les transactions s'équilibrent dans leurs devises d'origine – les gains/pertes latents n'ont pas besoin d'être explicitement enregistrés à moins que vous ne vouliez les mêmes rapports.

  • Comptes clients / Comptes fournisseurs : QuickBooks suit les détails des factures et des factures fournisseurs (dates d'échéance, statut de paiement, etc.) qui ne seront pas entièrement transférés dans un grand livre simple. Vous obtiendrez les transactions de Comptes Clients (A/R) et Comptes Fournisseurs (A/P) (les factures augmentant les A/R, les paiements diminuant les A/R, etc.), mais pas les documents de facturation ou les soldes clients par facture. Par conséquent, après la migration, vous devriez vérifier que les soldes de vos comptes A/R et A/P dans Beancount sont égaux aux soldes ouverts des clients/fournisseurs dans QuickBooks. Si vous devez suivre les factures, vous pouvez utiliser les métadonnées de Beancount (par ex., inclure une balise facture ou un lien). Les numéros de facture QuickBooks devraient être passés dans les champs Num ou Mémo – notre script préserve le Num en tant que number: "..." dans les métadonnées de la transaction.

  • Comptes inactifs ou clôturés : L'export IIF peut inclure des comptes inactifs (si vous avez choisi de les inclure). C'est bien de les importer (ils n'auront simplement aucune transaction et un solde nul s'ils sont vraiment inactifs). Vous pouvez les marquer comme clôturés dans Beancount après la date de la dernière transaction avec une directive close. Cela garde votre grand livre propre. Par exemple : 2023-12-31 close Dépenses:AncienCompte ; clôturé après migration Ceci est facultatif et principalement pour la propreté.

En nettoyant et en mappant soigneusement les données comme ci-dessus, vous aurez un fichier de grand livre Beancount qui reflète structurellement vos données QuickBooks. L'étape suivante consiste à vérifier qu'il reflète également numériquement QuickBooks.


Étape 3 : Validation et rapprochement des données

La validation est une étape critique dans une migration de données comptables. Nous devons nous assurer que le grand livre Beancount correspond aux livres de QuickBooks au centime près. Plusieurs stratégies et outils peuvent être utilisés :

3.1 Rapprochement de la balance de vérification

Un rapport de balance de vérification (ou balance comptable) liste les soldes de clôture de tous les comptes (avec débits et crédits ou positif/négatif indiqué) et devrait totaliser zéro. Lancer une balance de vérification dans les deux systèmes pour la même date est le moyen le plus rapide de confirmer l'exactitude globale.

  • Dans QuickBooks : Lancez un rapport de Balance de vérification pour le dernier jour de la dernière année (par ex., le 31 décembre 2023). Ce rapport montre le solde de chaque compte. Exportez-le ou notez les chiffres clés.

  • Dans Beancount : Utilisez les rapports de Beancount pour générer une balance de vérification. Une méthode simple est via la ligne de commande :

    bean-report migre.beancount balances

    Le rapport balances est une balance de vérification listant tous les comptes et leurs soldes. Vous pouvez également ouvrir le fichier dans Fava (l'interface web de Beancount) et regarder la section Soldes ou Bilan. Le solde de chaque compte dans Beancount doit correspondre à la balance de vérification de QuickBooks. Par exemple, si QuickBooks montre Comptes Clients = 5 000 $ , alors le compte Actifs:ComptesClients de Beancount devrait totaliser 5 000 $ (débit). Si Revenus de Ventes = 200 000 $ , le compte Revenus:Ventes dans Beancount devrait afficher 200 000 $ (crédit, qui pourrait s'afficher comme -200 000 si vous utilisez une balance de vérification qui présente les crédits comme des négatifs).

S'il y a des divergences, identifiez-les :

  • Vérifiez si un compte entier est manquant ou en trop (avons-nous oublié un compte ou inclus un qui était déjà clôturé avant la période de migration ?).
  • Si un solde est incorrect, analysez plus en détail : QuickBooks peut lancer un Rapport rapide de compte ou un détail de grand livre pour ce compte, et vous pouvez comparer avec le registre de Beancount pour ce compte (bean-report migre.beancount register -a NomDuCompte). Parfois, les différences proviennent d'une transaction manquante ou d'un doublon.

Vérifiez également que la somme de tous les comptes est nulle dans la balance de vérification de Beancount (il imprime un total qui devrait être zéro ou très proche de zéro). Beancount impose la partie double, donc si vous avez un déséquilibre non nul, cela signifie que les actifs moins les passifs et les capitaux propres ne totalisent pas zéro, indiquant un problème (ce que QuickBooks ne permettrait normalement pas non plus, mais qui pourrait arriver si des données ont été perdues).

3.2 Comparaisons des soldes de comptes

Au-delà de la balance de vérification, vous pouvez comparer des états financiers spécifiques :

  • Bilan : Lancez un Bilan de QuickBooks pour la date finale et un bilan de Beancount (bean-report migre.beancount balsheet). C'est similaire à la balance de vérification mais organisé par Actifs, Passifs, Capitaux propres. Les chiffres devraient correspondre par catégorie. Pour une vérification plus granulaire, comparez les totaux des comptes principaux : trésorerie, comptes clients, immobilisations, comptes fournisseurs, capitaux propres, etc.

  • Compte de résultat : Lancez un Compte de résultat pour la période de cinq ans (ou année par année) dans QuickBooks et dans Beancount (bean-report migre.beancount income pour un compte de résultat sur la période complète). Le résultat net de Beancount devrait être égal à celui de QuickBooks pour chaque période. Si vous avez migré les cinq années, le résultat net cumulé devrait correspondre. Vous pouvez également comparer les totaux de revenus et de dépenses individuels pour vous assurer qu'aucune catégorie n'a été manquée ou doublée.

  • Échantillonnage aléatoire de transactions : Choisissez quelques transactions au hasard (surtout de chaque année et de chaque compte majeur) et vérifiez qu'elles ont été migrées correctement. Par exemple, trouvez une facture d'il y a 3 ans dans QuickBooks, puis recherchez son montant ou son mémo dans le fichier Beancount (comme toutes les transactions sont du texte, vous pouvez ouvrir le fichier .beancount dans un éditeur de texte ou utiliser des outils de recherche). Vérifiez que la date, les montants et les comptes correspondent. Cela aide à détecter les problèmes de formatage de date ou les comptes mal mappés.

3.3 Contrôles d’intégrité automatisés

Tirez parti des propres outils de validation de Beancount :

  • bean-check : Exécutez bean-check migre.beancount. Cela analysera le fichier et signalera toute erreur de syntaxe ou d'équilibrage. Si le script a manqué quelque chose comme un compte non ouvert ou une transaction non équilibrée, bean-check le signalera. une exécution sans erreur (pas de sortie) signifie que le fichier est au moins cohérent en interne.

  • Assertions de solde : Vous pouvez ajouter des assertions de solde explicites dans le grand livre pour les comptes clés comme vérification supplémentaire. Par exemple, si vous connaissez le solde du compte bancaire à une certaine date, ajoutez une ligne : 2023-12-31 balance Actifs:Banque:Chèques 10000.00 USD Ensuite, bean-check s'assurera que dans le grand livre, à cette date, le solde est bien de 10 000 $. C'est facultatif mais peut être utile pour les comptes de haute importance. Vous pourriez prendre les soldes de clôture de QuickBooks (par ex., fin de chaque année) et les affirmer dans le fichier Beancount. Si une assertion échoue, Beancount signalera une différence.

  • Suivi de la balance de vérification : Si vous préférez, vous pouvez faire une vérification période par période. Pour chaque année, comparez la variation nette. Par exemple, le résultat net dans QuickBooks 2020 par rapport à Beancount 2020, etc., pour s'assurer que chaque année s'est correctement clôturée en capitaux propres (QuickBooks reporte automatiquement le résultat net dans les Bénéfices non répartis chaque nouvelle année ; dans Beancount, vous verrez simplement les capitaux propres cumulés). Si vous voyez des différences, cela peut indiquer un problème dans les données d'une année spécifique.

  • Nombre de transactions et doublons : Comptez le nombre de transactions dans QuickBooks par rapport à Beancount. QuickBooks n'affiche pas facilement un décompte direct, mais vous pouvez l'estimer en comptant les lignes dans le CSV (chaque en-tête de transaction par rapport aux ventilations). Dans Beancount, un moyen rapide est de compter les occurrences de txn ou * " dans le fichier. Ils devraient être égaux ou légèrement supérieurs à QuickBooks (si vous avez ajouté des transactions de solde d'ouverture ou des ajustements). un écart significatif signifie que quelque chose a pu être omis ou dupliqué. Notre utilisation d'ID uniques dans les métadonnées peut aider : si vous suspectez des doublons, recherchez dans le fichier Beancount le même numéro de chèque ou de facture apparaissant deux fois alors qu'il ne le devrait pas.

  • Statut de rapprochement : Nous avons inclus une métadonnée rec: "y" ou "n" basée sur le statut de rapprochement de QuickBooks dans notre script (comme rec dans l'exemple). Ce n'est pas une fonctionnalité standard de Beancount (Beancount ne suit pas le statut pointé/en attente de la même manière que Ledger), mais cela peut être une métadonnée utile. Vous pourriez vérifier que toutes les transactions qui ont été rapprochées dans QuickBooks sont présentes. En fin de compte, rapprocher à nouveau les comptes bancaires dans Beancount (en utilisant vos relevés) pourrait être la preuve finale que rien ne manque.

En effectuant ces validations, vous gagnez en confiance que la migration a préservé les données. Prenez votre temps avec cette étape – il est plus facile de corriger les anomalies maintenant que des mois plus tard, lorsque les livres pourraient être utilisés. Les problèmes courants si la validation échoue : le solde d'ouverture d'un compte manquant, une transaction datée en dehors de la plage, ou une inversion de signe sur une écriture. Tous sont réparables une fois identifiés.


Étape 4 : Finalisation du grand livre Beancount

Après le nettoyage et la validation, il est temps de formaliser les données dans la structure de votre grand livre Beancount. "Finaliser" ici signifie à la fois terminer les fichiers du grand livre et potentiellement les enregistrer dans un système de gestion de versions pour l'auditabilité.

4.1 Organisation des fichiers du grand livre et configuration

Décidez comment structurer les fichiers du grand livre Beancount. Pour cinq ans de données, vous pouvez tout garder dans un seul fichier ou diviser par année ou par catégorie. Une structure commune et claire est :

  • Fichier de grand livre principal : par ex., grand_livre.beancount – C'est le point d'entrée qui peut include d'autres fichiers. Il peut contenir des options globales puis inclure des fichiers annuels.
  • Fichier des comptes : Définissez le plan comptable et les soldes d'ouverture. Par exemple, comptes.beancount avec toutes les directives open (telles que générées par le script). Vous pourriez également lister les commodités (devises) ici.
  • Fichiers de transactions : Un par an, par ex., 2019.beancount, 2020.beancount, etc., contenant les transactions pour cette année. Cela maintient chaque fichier à une taille gérable et vous permet de vous concentrer sur une année si nécessaire. Alternativement, vous pouvez diviser par entité ou par compte, mais la division temporelle est simple pour les données financières.

Exemple de fichier principal :

option "title" "Grand livre de mon entreprise"
option "operating_currency" "USD"

include "comptes.beancount"
include "2019.beancount"
include "2020.beancount"
...
include "2023.beancount"

De cette façon, toutes les données sont agrégées lorsque vous lancez des rapports, mais vous maintenez l'ordre.

Beancount ne nécessite pas plusieurs fichiers – vous pourriez avoir un seul grand fichier – mais la structure ci-dessus améliore la clarté et la gestion de versions. Selon les meilleures pratiques de Beancount, il est bon d'utiliser des en-têtes de section clairs et de regrouper logiquement les entrées connexes.

4.2 Définition des soldes d’ouverture et des capitaux propres

Si votre migration ne part pas d'un zéro absolu, vous devrez gérer les soldes d'ouverture. Deux scénarios :

  • Livres partant de zéro : Si la période de cinq ans commence à la création de l'entreprise (par ex., vous avez commencé à utiliser QuickBooks en janvier 2019 avec tous les comptes à zéro sauf les capitaux propres initiaux), alors vous n'aurez peut-être pas besoin d'une transaction de solde d'ouverture séparée. Les premières transactions en 2019 (comme le financement initial sur un compte bancaire) établiront naturellement les soldes de départ. Assurez-vous simplement que tout capital initial ou bénéfices non répartis antérieurs sont comptabilisés via des transactions de capitaux propres.

  • Livres en cours de route (historique partiel) : Si vous avez commencé à utiliser QuickBooks plus tôt et que 2019 est un point intermédiaire, alors au 1er janvier 2019, chaque compte avait un solde à reporter. QuickBooks les aurait comme soldes d'ouverture ou bénéfices non répartis. Dans Beancount, il est typique de créer une écriture de Soldes d'Ouverture la veille de votre date de début :

    • Utilisez un compte de capitaux propres appelé CapitauxPropres:Soldes-Ouverture (ou similaire) pour contrebalancer la somme de tous les montants d'ouverture.
    • Exemple : si au 31/12/2018, la Trésorerie était de 10 000 $et les Comptes Clients de 5 000$ et les Comptes Fournisseurs de 3 000 $ (crédit), vous écririez une transaction : 2018-12-31 * "Soldes d'ouverture" Actifs:Trésorerie 10000.00 USD Actifs:ComptesClients 5000.00 USD Passifs:ComptesFournisseurs -3000.00 USD CapitauxPropres:Soldes-Ouverture -12000.00 USD Cela laisse Soldes-Ouverture avec la somme négative (–12k $) qui équilibre l'écriture. Maintenant, tous les comptes d'actifs/passifs commencent 2019 avec les bons soldes. Cela devrait refléter tout "Bénéfices non répartis" de QuickBooks ou les soldes reportés.
    • Alternativement, utilisez les directives pad et balance de Beancount : Pour chaque compte, vous pouvez le pad (remplir) depuis Soldes-Ouverture et affirmer le solde. C'est une manière plus automatisée. Par exemple : 2018-12-31 pad Actifs:Trésorerie CapitauxPropres:Soldes-Ouverture 2018-12-31 balance Actifs:Trésorerie 10000.00 USD Cela dit à Beancount d'insérer toute écriture nécessaire (vers Soldes-Ouverture) pour que la Trésorerie soit égale à 10000 USD à cette date. Faites cela pour chaque compte. Le résultat est similaire, mais écrire une transaction explicite comme dans la première méthode est également simple.
  • Bénéfices non répartis : QuickBooks n'exporte pas explicitement de transaction de "Bénéfices non répartis" – il le calcule simplement. Après la migration, vous pourriez remarquer que CapitauxPropres:BénéficesNonRépartis est à zéro si vous ne l'avez pas créé. Dans Beancount, les bénéfices non répartis sont simplement les bénéfices des années précédentes. Vous pouvez choisir de créer un compte de Bénéfices non répartis et d'y transférer les bénéfices antérieurs le premier jour de chaque nouvelle année, ou simplement laisser les capitaux propres être la somme de tous les revenus/dépenses (qui apparaît dans la section Capitaux Propres des rapports). Pour la transparence, certains utilisateurs passent des écritures de clôture annuellement. C'est facultatif et principalement pour la présentation. Puisque nous avons migré toutes les transactions, le bénéfice de chaque année s'accumulera naturellement si vous lancez un rapport par an.

  • Vérifications comparatives : Après avoir défini les soldes d'ouverture, lancez un bilan à la date de début pour vous assurer que tout est correct (il devrait montrer ces soldes d'ouverture par rapport aux Capitaux d'ouverture s'équilibrant à zéro).

4.3 Finalisation et gestion de versions

Maintenant que les données sont au format Beancount et structurées, il est sage de commiter les fichiers dans un dépôt de gestion de versions (par ex., git). Chaque changement au grand livre peut être suivi, et vous avez une piste d'audit de toutes les modifications. C'est un avantage majeur de la comptabilité en texte brut. Par exemple, dans QuickBooks, les changements peuvent ne pas être facilement "diffables", mais dans Beancount, vous pouvez voir les différences ligne par ligne. Comme le notent certains utilisateurs, avec Beancount, vous obtenez la transparence et la capacité d'annuler des changements si nécessaire – chaque écriture peut être liée à un historique de changements.

Pensez à marquer le commit de cette migration initiale comme v1.0 ou similaire, afin de savoir qu'il représente l'état des livres tels qu'importés de QuickBooks. À l'avenir, vous entrerez de nouvelles transactions directement dans Beancount (ou importerez depuis des flux bancaires, etc.), et vous pourrez utiliser des pratiques normales de développement logiciel (commiter mensuellement ou quotidiennement, utiliser des branches pour des expériences, etc.).

Configuration de Fava ou d'autres outils : Fava est une interface web pour Beancount qui facilite la consultation des rapports. Après avoir commité, exécutez fava grand_livre.beancount pour parcourir les états financiers et les comparer une dernière fois avec vos rapports QuickBooks. Vous pourriez repérer plus facilement de petites différences dans une interface utilisateur (par exemple, un compte qui devrait être à zéro mais qui affiche un petit solde indique une écriture de clôture manquante ou une transaction parasite).

Conventions de nommage et cohérence : Vous avez maintenant le contrôle total, alors assurez la cohérence :

  • Tous les comptes doivent avoir des noms clairs, commençant par des noms de catégorie en majuscules (Actifs, Passifs, etc.). Si certains semblent étranges (par ex., Actifs:actifs:UnCompte en raison d'une incohérence de casse de QuickBooks), renommez-les dans le fichier des comptes et mettez à jour les transactions (un rechercher/remplacer rapide sur le fichier peut le faire, ou utilisez bean-format de Beancount ou le multi-curseur de l'éditeur).
  • Les symboles de commodité (codes de devise) doivent être cohérents. Pour l'USD, utilisez USD partout (pas $ ou US$). Pour les autres, utilisez les codes standard (EUR, GBP, etc.). Cette cohérence est importante pour les recherches de prix et les rapports de Beancount.
  • Supprimez tous les comptes temporaires ou factices qui auraient pu être créés (par exemple, si vous avez utilisé Dépenses:Divers pour les comptes inconnus dans le script comme fourre-tout, essayez de les éliminer en mappant correctement tous les comptes).

Clôture de QuickBooks : À ce stade, vous devriez avoir des livres parallèles dans Beancount qui correspondent à QuickBooks. Certains choisissent de faire fonctionner les deux systèmes en parallèle pendant une courte période pour s'assurer que rien n'a été manqué. Mais si la validation est solide, vous pouvez "clôturer" les livres QuickBooks :

  • S'il s'agit d'un environnement d'entreprise, envisagez d'exporter tous les documents sources de QuickBooks (factures, factures fournisseurs, reçus) pour vos archives, car ils n'existeront pas dans Beancount à moins que vous ne les attachiez manuellement.
  • Conservez une sauvegarde des données QuickBooks (à la fois le fichier de l'entreprise et les fichiers d'exportation).
  • À l'avenir, maintenez le grand livre Beancount comme système d'enregistrement principal.

En finalisant les données dans le grand livre Beancount, vous avez terminé le processus de migration. L'étape finale consiste à effectuer un audit et à démontrer la cohérence des états financiers, pour vous satisfaire (ainsi que tout intervenant ou auditeur) que la migration a réussi.


Étape 5 : Audit post-migration et exemples

Pour illustrer le succès de la migration, préparez une comparaison avant/après des états financiers et éventuellement un diff des transactions. Cela fournit la preuve que les livres sont cohérents.

5.1 Vérification des états financiers

Produisez les principaux rapports financiers de QuickBooks et de Beancount pour les mêmes dates et comparez :

  • Bilan au 31 décembre 2023 : Comparez les totaux des Actifs, Passifs et Capitaux propres ligne par ligne. Ils devraient correspondre. Par exemple, si QuickBooks montrait Total Actifs = 150 000 $ et Total Passifs + Capitaux propres = 150 000 $, le bilan de Beancount devrait montrer les mêmes totaux. Si vous avez structuré les comptes légèrement différemment (disons que vous avez fusionné certains sous-comptes), ajustez pour cela dans la comparaison ou descendez au niveau suivant pour vous assurer que les sommes sont égales.

  • Compte de résultat 2019–2023 : Assurez-vous que le total des Revenus, le total des Dépenses et le Résultat Net pour chaque année (ou toute la période) sont identiques. Des différences mineures pourraient survenir si QuickBooks a fait des arrondis sur les rapports, mais les transactions portent généralement les centimes exactement, donc le résultat net devrait être exact. Si le bénéfice d'une année diffère, analysez les données de cette année – c'est souvent un indicateur d'une entrée manquante ou en double dans cette période.

  • Différences de la balance de vérification : Si possible, créez une feuille de calcul où vous listez chaque compte et le solde de QuickBooks par rapport à Beancount. Comme nous nous attendons à ce qu'ils correspondent, cela pourrait être une colonne entièrement à zéro. C'est essentiellement la contre-vérification de la balance que nous avons discutée, mais le mettre par écrit aide à le documenter.

5.2 Exemple de comparaison (Avant vs Après)

Voici un exemple de fragment démontrant la cohérence des données. Disons que notre balance de vérification QuickBooks pour le 31 décembre 2023 était :

CompteSolde QuickBooks (31 déc. 2023)
Actifs
  Actifs:Banque:Chèques12 500,00 $ (débit)
  Actifs:ComptesClients3 200,00 $ (débit)
Passifs
  Passifs:CarteDeCrédit-1 200,00 $ (crédit)
  Passifs:Emprunts-5 000,00 $ (crédit)
Capitaux propres
  CapitauxPropres:Soldes-Ouverture-7 500,00 $ (crédit)
  CapitauxPropres:BénéficesNonRépartis-2 000,00 $ (crédit)
  CapitauxPropres:RésultatDeLExercice0,00 $

Dans Beancount, après avoir importé et enregistré toutes les transactions jusqu'en 2023, un bean-report balances (balance de vérification) donne :

CompteSolde Beancount (31 déc. 2023)
Actifs
  Actifs:Banque:Chèques12,500.00 USD (débit)
  Actifs:ComptesClients3,200.00 USD (débit)
Passifs
  Passifs:CarteDeCrédit-1,200.00 USD (crédit)
  Passifs:Emprunts-5,000.00 USD (crédit)
Capitaux propres
  CapitauxPropres:Soldes-Ouverture-7,500.00 USD (crédit)
  CapitauxPropres:BénéficesNonRépartis-2,000.00 USD (crédit)
  CapitauxPropres:Bénéfice (2019-2023)0.00 USD

(Note : Les sections de capitaux propres peuvent être structurées différemment ; la clé est que les totaux s'alignent. Ici, "Bénéfice (2019-2023)" dans Beancount joue le rôle du bénéfice de l'année en cours/bénéfices non répartis combinés, montrant zéro car le bénéfice a été clôturé dans les Bénéfices non répartis.)

Comme montré, chaque compte correspond au centime près. La somme des débits est égale à la somme des crédits des deux côtés.

De plus, si nous lançons un Compte de résultat pour 2023 :

  • QuickBooks : Revenus 50 000 $, Dépenses 48 000 $, Résultat Net 2 000 $.
  • Beancount : Revenus 50 000 $, Dépenses 48 000 $, Résultat Net 2 000 $ (qui a ensuite été clôturé en Bénéfices non répartis ou apparaît sous Capitaux propres dans le bilan de fin d'année).

Vous pouvez créer un diff des transactions si nécessaire, mais comme les données QuickBooks ne sont pas sous forme de grand livre, il est plus efficace de se fier aux rapports. On pourrait trier à la fois le CSV de QuickBooks et les transactions Beancount par date et comparer les champs clés comme vérification finale (cela peut être fait dans Excel ou avec un script). Cependant, étant donné que nous faisons confiance à notre validation antérieure, la vérification des états financiers est généralement suffisante.

5.3 Conseils pour l’audit

  • Si un auditeur ou un intervenant a besoin d'être rassuré, présentez les états financiers avant et après côte à côte. La transparence de Beancount peut en fait simplifier les audits car vous pouvez tracer chaque chiffre d'un état à l'écriture source rapidement (en particulier en utilisant la fonctionnalité d'exploration de Fava).
  • Conservez la sauvegarde de QuickBooks et les CSV exportés dans le cadre de votre piste d'audit. Documentez tous les ajustements effectués pendant la migration (par exemple, "Renommé le compte X en Y pour la cohérence" ou "Divisé la transaction Z en deux écritures pour plus de clarté" si vous avez fait de tels changements).
  • À l'avenir, mettez en place des contrôles réguliers dans Beancount. Par exemple, le rapprochement mensuel des comptes bancaires et une assertion de leur solde de clôture aident à détecter tout problème de données ou erreur de saisie. La migration donne une bonne base ; maintenir la discipline dans le nouveau système assurera une précision continue.

Enfin, célébrez l'achèvement de la migration : vous avez réussi à transférer cinq ans de données comptables de QuickBooks à Beancount. Les données sont maintenant dans un format texte léger, versionné, avec une intégrité complète de la partie double. Vous avez exporté les données, les avez transformées avec des scripts Python, validé l'intégrité par des balances de vérification et des rapports, et les avez finalisées dans un grand livre Beancount bien organisé. Ce processus complet garantit que le grand livre Beancount est une réplique exacte et fidèle de vos livres QuickBooks sur la période de cinq ans, vous préparant pour une comptabilité simplifiée à l'avenir.