My Double Entry Bookkeeping Model

my double entry bookkeeping model

In the classical double-entry bookkeeping, one notes the flow of the cash ahead of time moving from one accounts to accounts.

Then, when the money moves for real, the transaction is reconciled.

Say I have three bank accounts, BA1, BA2 and BA3, a few Expense accounts and an Income account called work.

I would write the transactions (in green) between my bank accounts (in brown) and the expenses (in purple) or the income (in orange). Then, I would check the transactions that actually happened (in green). Generally, the reconciling process happen with some paper based monthly report from the bank as a source of truth.

So far so good.

But I happen to also use weboob to automatically get some ledger cli formatted entries. Those are my source of truth and I don’t want to modify them.

I then have something like the brown part of the following picture.

Henceforth, the brown part means “what is actually acknowledged by my bank”.

I then have to manually link the brown arrows to the associated accounts (the red waves).

When the transaction is between two of my bank accounts, I need to merge the associated transactions.

One of the main advantage of bookkeeping is the possibility to write the transaction ahead of time. This is a problem since this means that I write an arrow (in purple) from my bank account to the expense account but another link will appear when I will scrap my bank data.

I would then have to merge those links, which is cumbersome.

My solution is to add another category of accounts: virtual (in green).

Virtual accounts basically represent some temporary virtual location where my money is before it is actually moved.

When writing my transactions, I write them from/to virtual accounts and expenses/income accounts (in green). This still allows me to see where the money is expected to move.

When I get my bank information (in brown), I only need to link them to the associated virtual account (red waves).

My virtual accounts are sub accounts of my bank account (the blue cloud) so that I can easily see my net-worth balance and expected cash flow.

For sometime actually, I have a whole category virtual, not part of the assets. But then I needed to move money across my bank accounts.

I tried to have some kind of virtual account representing a transfer, but in contrast to classical flow, it did not have an expense or an income account to move the money to/from.

It needed some kind of loop transaction to show that no money was actually lost from my assets.

Then I realized that each bank account had its own horizon (the blue cloud), that the virtual account are basically interface between horizons and that having a virtual account for the other bank account totally made sense.

In this model, moving money from one bank account to another looks like this:

I first write down the transfer between the virtual accounts (in green). It shows the expected flow from one bank account to the other.

Then, when my bank report is got (in brown), I can simply reconcile (red waves).

Eventually, I get a system that works. See for instance this real life scenario.

In this drawing, I can see that my employer had to pay me (the orange part is linked to the virtual account) but did not pay me yet (not brown link to the bank account yet). I have then taken some money from BA2. When entering the transaction, I just had the green link from BA2:BA1 to BA1:BA2, then, when the bank actually moved the money, I could see the brown arrows from BA2 to BA2:BA1 and from BA1:BA2 to BA1.

The same goes in the part where I repay my loan or fill another bank account. Those happen automatically, so the green part are written at the beginning of the year and the brown links are reconciled when the money is actually moved.

With this model, I believe I finally can keep the data scrapped by weboob as-is while getting the advantage of the double-entry bookkeeping, writing the transactions ahead of time and reconciling them afterwards.

Notes linking here