Amortization
Imagine you pay for your annual car insurance in a single payment of $600. If you record this as a one-time expense, your books for that month will show a large cost, while the next 11 months will show zero insurance expense. This distorts your monthly financial picture, making it difficult to understand your true operational costs and budget effectively.
The solution is amortization: the accounting practice of spreading a single cost over the time period it benefits. This tutorial will show you how to implement amortization seamlessly in Beancount using a Fava plugin.
What is Amortization?
Amortization is the process of incrementally expensing the cost of an intangible asset or a prepaid item over its useful life.
Key Benefits:
- Accurate Reporting: Smooths out large expenses for a more realistic view of monthly profitability.
- Better Budgeting: Allows you to budget for a consistent monthly expense rather than a large, irregular one.
- Clearer Cash Flow Analysis: Separates the timing of a cash payment from the recognition of the expense.
The Beancount Solution: fava.plugins.amortize_over
Beancount, with the Fava web interface, provides a simple yet powerful plugin to automate amortization.
Step 1: Enable the Plugin
First, you must enable the plugin by adding the following line to the top of your Beancount file:
plugin "fava.plugins.amortize_over"
Important: Virtual Transactions Be aware that this plugin generates virtual postings. They appear dynamically in Fava's reports and in tools like
bean-report
(if the plugin is loaded), but they are not written back into your.bean
file. Your source file remains unchanged.
Step 2: Structure Your Accounts
For a typical prepaid expense, you need three key accounts:
Assets:Bank:Checking
: The source of the cash payment.Assets:Prepaid:Insurance
: A temporary holding account for the value you've paid for but not yet used.Expenses:Insurance:Auto
: The final destination for the monthly expense.
2024-01-01 open Assets:Bank:Checking
2024-01-01 open Assets:Prepaid:Insurance
2024-01-01 open Expenses:Insurance:Auto
Step 3: Record the Amortized Transaction
Let's record the $600 insurance payment for a 6-month policy. We move the money from our bank to a prepaid asset account and add the metadata tag.
2024-06-01 * "Pay 6-month car insurance premium"
amortize_months: 6
Assets:Prepaid:Insurance 600.00 USD
Assets:Bank:Checking -600.00 USD
Expenses:Insurance:Auto
amortize_months: 6
: Tells the plugin to spread the value over 6 months.- The transaction moves cash to a prepaid asset.
Expenses:Insurance:Auto
: This final, numberless leg tells the plugin where to book the monthly expense.
The plugin generates monthly entries that debit Expenses:Insurance:Auto
and credit Assets:Prepaid:Insurance
by $100 each, starting on the first of the month of the transaction.
Practical Examples
Annual Software License
2024-01-15 * "Adobe Creative Suite annual license"
amortize_months: 12
Assets:Prepaid:Software 1200.00 USD
Assets:Bank:Checking -1200.00 USD
Expenses:Software:Adobe
Result: An expense of $100.00
is recognized in Expenses:Software:Adobe
each month for 12 months.
Professional Services Retainer
; Quarterly legal retainer, paid upfront from checking
2024-01-05 * "Legal services retainer Q1"
amortize_months: 3
Assets:Prepaid:Professional 4500.00 USD
Assets:Bank:Checking -4500.00 USD
Expenses:Professional:Legal
Result: A legal expense of $1500.00
is recognized each month for Q1.
Equipment Depreciation (Fixed Assets)
Depreciation for fixed assets requires a more formal approach to preserve the original cost of the asset on your books. This is done using a contra-asset account, typically named Accumulated-Depreciation
.
The process involves two separate transactions:
; Open required accounts, including the contra-asset
2024-01-01 open Assets:Equipment:Computers:Cost
2024-01-01 open Assets:Equipment:Computers:AccumDep
2024-01-01 open Expenses:Depreciation:Computers
; Step 1: Record the initial purchase. This is a simple, non-amortized transaction.
2024-01-20 * "Purchase MacBook Pro for business"
Assets:Equipment:Computers:Cost 3000.00 USD
Assets:Bank:Checking -3000.00 USD
; Step 2: Set up the depreciation schedule. This zero-sum transaction
; tells the plugin to create the monthly depreciation entries.
2024-01-20 * "Depreciation schedule for MacBook Pro"
amortize_months: 36
Expenses:Depreciation:Computers 3000.00 USD
Assets:Equipment:Computers:AccumDep -3000.00 USD
Result: The plugin will generate a monthly entry for 36 months that debits Expenses:Depreciation:Computers
by $83.33
and credits the contra-asset account Assets:Equipment:Computers:AccumDep
by $83.33
.
Reporting and Verification
1. Monitor Prepaid Balances with Assertions
Use Beancount's balance
directive to verify that your prepaid account is being drawn down correctly.
Note: The assertion date must be on or after the date of the virtual posting (which defaults to the 1st of the month). A good practice is to date it on the 2nd.
; For the insurance example, check the balance after the first month.
2024-07-02 balance Assets:Prepaid:Insurance 500.00 USD
2. Advanced Verification with bean-query
For a quick overview of how your prepaid balances change over time, you can use bean-query
in your terminal:
bean-query your-ledger.beancount "SELECT date, account, SUM(position) WHERE account ~ 'Prepaid' GROUP BY date, account ORDER BY date"
Limitations and Final Tips
- Equal Splits Only: The
amortize_over
plugin is designed for equal splits over a whole number of months. It does not handle irregular schedules or daily pro-rating. For those, a manual approach is needed. - Tax vs. Management Accounting: The amortization schedules shown here are for management accounting (getting a clear view of your finances). If you are doing statutory bookkeeping, ensure your depreciation schedules comply with local regulations (GAAP/IFRS).
- Date Handling: The plugin generates monthly entries on the first day of each month, starting with the month of the source transaction. If you want amortization to begin in February, for instance, date the source transaction on or after
2024-02-01
.