Felix Crux

Technology & Miscellanea

Tags: ,

One of the big differences between how most people start out with accounting, and how professionals and big companies do it, lies in the distinction between cash basis and accrual basis accounting. Cash basis accounting is the simple, obvious, kind: we record transactions as they happen, and our ledger account balances reflect how much money is really present (or owed) right now in various accounts.

It might seem at first like this is the only possible or sensible way of tracking things, but accrual basis methods also have an intuitive appeal of their own, despite being rather different.

Consider, for example, a scenario where you complete some contract work but haven’t been paid yet; or are at a job a week before your latest pay-cheque is due. Naturally, you’d consider that you’re owed your wages, even if you don’t have anything written down in your cash basis accounting ledger. Or, to flip it around, if you receive a bill for this past month’s utilities, you know you owe that money even if it too isn’t in your ledger yet. Accrual basis accounting just means writing down these obligations at the time they’re incurred, rather than at the time they’re paid.

(This post is part of a series describing how I use the Ledger accounting system. For an introduction to ledger and this series, or to see all the entries, have a look at the first post).

Ledger, naturally, supports either method, or a combination of both.

Why is this useful in practice? In addition to just keeping track of things like unpaid bills, it actually provides a more accurate and useful view into your finances. Imagine, for example, a monthly bill you typically receive on the 20th of each month. One month, you’re a bit slow, and don’t pay it off until the 4th of the following month. Then, later, when you get the next bill, imagine you pay it off immediately. A cash basis report on your spending would claim that in the first month you spent $0.00 on this service, and that in the second month your costs were double what you’d normally expect! This is strictly true if you’re interested in how much money was in the account at any given time, but it’s not useful if you’re trying to quantify your monthly spending. An accrual basis accounting system, on the other hand, would correctly tell you that you incurred the same cost each month.

In practice, for the majority of individuals who aren’t backed up by a team of accountants, a mixed or modified method is probably most workable. For example, an ultra-orthodox accrual basis system would involve somehow automatically (or manually!) calculating your salary for each day of work, and tracking those owed payments. Or perhaps they should be hourly? And how should you try to estimate how much your daily electricity usage is going to contribute to your next bill that you haven’t received yet? Those kinds of ledger entries might be technically the most correct, but they’re not useful.

Instead, we can use ledger’s “effective date” feature to get most of the benefit without any real extra work. The effective date of a transaction is a little annotation that can be applied to a ledger entry (right after the transaction date, preceded by an equals sign), and if ledger is invoked with the --effective flag, it is used instead of the regular transaction date.

So, using the example above, with a bill received on the 20th but paid on the 4th of the next month, followed by a bill paid almost immediately, we might have the following journal:


2016-11-04 The Phone Company
  Expenses:Utilities:Phone  $50.00
  Assets:SomeBank:Chequing

2016-11-21 The Phone Company
  Expenses:Utilities:Phone  $50.00
  Assets:SomeBank:Chequing

Then a simple “ledger reg --monthly” report would tell us:


16-Nov-01 - 16-Nov-30           Asse:SomeBank:Chequing     $-100.00     $-100.00
                                Expens:Utilities:Phone      $100.00            0

If, on the other hand, we add the date the bill was received as the effective date of the transaction, like so:


2016-11-04=2016-10-20 The Phone Company
  Expenses:Utilities:Phone  $50.00
  Assets:SomeBank:Chequing

2016-11-21=2016-11-20 The Phone Company
  Expenses:Utilities:Phone  $50.00
  Assets:SomeBank:Chequing

Then “ledger reg --monthly --effective” would give us the far more useful:


16-Oct-01 - 16-Oct-31           Asse:SomeBank:Chequing      $-50.00      $-50.00
                                Expens:Utilities:Phone       $50.00            0
16-Nov-01 - 16-Nov-30           Asse:SomeBank:Chequing      $-50.00      $-50.00
                                Expens:Utilities:Phone       $50.00            0

(Personally, I set the --effective option in my .ledgerrc, so it’s applied by default)

This lets us have the convenience of cash-basis accounting, where we don’t have to go around creating double the entries for every bill in advance of paying it, while still getting the benefits of accrual basis reports!

And, if you do have larger, more significant, accrued income or expenses that you do want to really track before they’re paid, you can still enter them as regular transactions in accounts like “accounts receivable” or “liabilities”.

The ledger documentation’s section on effective dates also shows another possible syntax for this feature that lets you put different effective dates on different line items in an entry. That enables neat features such as the one they highlight: spreading out the cost of a pre-paid subscription over the course of the time it’s used, instead of counting it as an up-front lump sum payment. I won’t duplicate the example here, so check out the manual!

Switching to an accrual basis accounting method, even a partial and simplified one, provides a more accurate and useful view of your finances; and ledger’s features make it very easy.


blog comments powered by Disqus