The "Transfer" account pattern

765 views
Skip to first unread message

Zack Williams

unread,
Feb 19, 2012, 8:39:17 PM2/19/12
to ledge...@googlegroups.com
I've come across an interesting pattern in a lot of my Ledger files,
that of a "Transfer" account. The general concept is that a Transfer
account should balance to zero, and if it doesn't balance to zero,
something is amiss - a transaction has been lost, or has yet to be
recorded.

Two examples where this is useful:

1. I tend to have a lot of files generated elsewhere and converted
from OFX/CSV. If you moved money from a checking account to savings,
and are also auto-converting both accounts with a OFX/CSV -> Ledger
tool, you'd end up with two nearly identical entries like this, one
from each converted file.

2012/01/01 Transfer from Checking to Savings
Assets:Savings $100
Assets:Checking

Having two records of the same transaction would cause your accounts
not to balance. One response would be to delete one of the
transactions, but that's a manual step that would need to be done
every time, or automatically deleted (which could be failure prone).

Using the Transfer account pattern, you'd tweak your CSV > ledger
conversion to generate the following records:

2012/01/01 Transfer from Checking to Savings
; Generated from Checking account CSV > ledger
Transfers:Checking_Savings $100
Assets:Checking

2012/01/01 Transfer from Checking to Savings
; Generated from Savings account CSV > ledger
Assets:Savings $100
Transfers:Checking_Savings

This has several upsides

- No manual tweaking after a CSV > ledger conversion.
- You can immediately know where any transfer went wrong (and which
account didn't register it)
- When everything has cleared, the balance in the Transfer account is
zero so it doesn't appear in any balance reports

2. As a business, you can get paid in many different ways, and there
often is a gap between recieving a check or credit card payment. In
my case, I do the following to track payments through the entire
process:

2012/01/01 Invoice
Company:Assets:Accounts Receivable $200
Customer:Invoice:Labor -$200

2012/01/01 Check #1000
Company:Assets:Accounts Receivable -$200
Company:Assets:Checking Deposits $200
Customer:Equity -$200
Customer:Payments:Check $200

2012/01/02 Deposit Checks at Bank
Company:Accounts:Checking $200
Company:Assets:Checking Deposits - $200

In this example, I'm using the Transfer pattern twice, once to
maintain a list of Accounts Receivable, and another time to balance
Checks after their received, but before they've cleared the bank.
As with before, once everything has been paid in full, these accounts
balance to zero, so they don't clutter the final output of balance
queries.

I hope someone else finds this useful - it's a very simple pattern
that has greatly helped me develop better, easier to work with Ledger
workflows.

- Zack

Simon Michael

unread,
Feb 20, 2012, 7:35:30 PM2/20/12
to ledge...@googlegroups.com
On 2/19/12 5:39 PM, Zack Williams wrote:
> 1. I tend to have a lot of files generated elsewhere and converted
> from OFX/CSV. If you moved money from a checking account to savings,
> and are also auto-converting both accounts with a OFX/CSV -> Ledger
> tool, you'd end up with two nearly identical entries like this, one
> from each converted file.

I've had that problem too, and worked around manually. Thanks for pointing out this clever trick!

> In this example, I'm using the Transfer pattern twice, once to
> maintain a list of Accounts Receivable, and another time to balance
> Checks after their received, but before they've cleared the bank.

I don't quite get the utility of the second use - those transactions look a little over-complex for my needs - but I
like the flexibility that we have to describe workflows that help us.

"Patterns" is a welcome term and topic in *ledger-land.

Reply all
Reply to author
Forward
0 new messages