Perpetual Accounting

From ADempiere ERP Wiki
Jump to navigationJump to search


ADempiere implements the modern Accounting Theory referred to here as 'Perpetual Accounting'. It refers to the process of financial reporting especially as it relates to the Year End Closing Process.

Executive Summary[edit]

Processes were created many years ago to help humans manage the high volume of accounting. An example process includes transferring totals from income or expense accounts to retained earnings to help report profit to owners. Modern computers are fast and capable of handling more complex high-volume math than humans.

This document discusses how to use the power of modern computing to simplify the financial reporting while managing the complexities of multiple calendars, currencies, and organizations. The solution is to create a special purpose account in the P&L section of the ledger and post a single calendar-end GL Journal debiting this account (assuming we made a profit) and crediting the Balance sheet - Retained Earnings Account. The sum of all P&L accounts will now be zero as will the sum of the balance sheet accounts.


When handwritten accounts books were kept and calculators/computers did not exist, certain processes were adopted to enable accounting to be done with the limited tools available at the time. Some examples:

  1. Subsidiary Ledgers for all kinds of transactions were kept and then just the totals of these were posted into the general ledger. The reasons were simplicity and the fact that two people could not write in the same account book at the same time. Computers don't have this problem but a common hang over in todays financial software is the breakdown of the General Ledger into Debtors, Creditor and General (sometimes referred to as Nominal) Ledgers.
  2. Debits and credits were kept in separate columns because it was easier to add all the positive numbers in the debit column and then all the 'positive' numbers in the credit column and then subtract one from the other to find the net movement. It was beyond people's capabilities to accurately add a column which contained both positive and negative numbers. Computers don't have this problem.
  3. At year end it was necessary to find the profit or loss and update the retained earnings of the owners. It was also necessary to start entering transactions in P&L accounts for the new year from a zero balance. This was done by actually posting entries in the manual ledgers at year end to bring each P&L account to a zero balance with entries like:
  • Income - (assume a credit balance of 100) - enter a debit of 100 and a credit to the P&L account of 100
  • Expenses - (assume a debit balance of 80) - enter a credit of 80 and a debit to the P&L account of 80
The Income and Expenses account now each have a balance of zero and the P&L account has a balance of 20 credit which could then be journalled to the retained earnings account in the balance sheet so the P&L account now also has a balance of zero and the sum of all P&L accounts is zero (as is the sum of all balance sheet accounts).
Computers don't need to do all this! They are happy to just add up all transactions between a start date and an end date and print the numbers on a report.
It is interesting that some people keep trying to make computers operate the same way as old manual accounting systems. [Many people will have heard the expression "closing the books". The following link has quite a good explanation of the steps to be followed It may have been written by an accountant who still owns a quill pen ;-) ]

The Solution[edit]

In ADempiere, if you are going to produce a balance sheet for a period for which you have not done a 'closing' journal, the Balance Sheet report layout must sum and include each P&L account into the Equity section of the Balance Sheet report. This is because the sum of whole trial balance will always be zero but the sum of just the balance sheet general ledger accounts will only be zero at the end of a group of periods where a 'closing' journal has been posted. The P&L accounts can be summed into a report line called Current Year Result (or similar) or can be added into the Retained Earnings account balance line. You could of course post a 'closing' entry each month if you wanted to but there does not seem a lot to gain from doing so.

It follows from the above paragraph that, in ADempiere, you could do no 'closing' entry at all and simply rely on the reports adding the correct figures from the ledger and including the P&L account balances in the equity section of the balance sheet. Since Assets minus Liabilities = Equity plus P&L accounts it really does not matter whether the P&L accounts add to zero (because their values have all been journalled to the retained earnings account) or whether they have a balance which is just added to retained earnings. However a possible reason to actually post a journal is that it shows exactly what was calculated and reported to be the result for a period and if something is subsequently changed in a P&L account (either intentionally or by some error) then the sum of the P&L accounts for a group of periods will no longer be zero and the accountant will be alerted.

No Closing Transactions[edit]

By filtering the data by periods, years and totals, we can generate the retained earnings number easily on the financial report. First, in your account schema, create a high level summary account called, say, 00 - Net Income and have all other accounts (or at least the income and expense accounts) subordinate to it. In the opening balances, record the opening retained earnings into a single account, say 39000-Opening Retained Earnings.

In your financial report, create the following lines:

  • In the area of the report dealing with retained earnings
    • Report Line: Retained Earnings
      • Printed: Yes
      • Line Type: Calculation
      • Operation: Subtract
      • Op1: Negative Net Income
      • Op2: Retained Earnings Total
    • Report Line: Net Income
      • Printed: Yes
      • Line Type: Calculation
      • Operation: Subtract
      • Op1: Net Income
      • Op2: Negative Net Income
  • At the end of the report
    • Report Line: Negative Net Income
      • Printed: No
      • Line Type: Segment Value
      • Amount Type: Balance (accounted sign)
      • Period Type: Year
      • Report Source Tab - single record
        • Type: Account
        • Account: 00 - Net Income
    • Report Line: Retained Earnings Total
      • Printed: No
      • Line Type: Segment Value
      • Amount Type: Balance (accounted sign)
      • Period Type: Total
      • Report Source Tab - first record
        • Type: Account
        • Account: 00 - Net Income
      • Report Source Tab - second record
        • Type: Account
        • Account: 39000-Opening Retained Earnings

Set the report columns to the appropriate values for your report and enjoy. The report will show the retained earnings up to the year in the column and the net income year to date. (You can modify this to get the information in periods rather than years if needed.) There are no general journal entries to close off the books, no 13th period, no hidden accounts. The only drawback, is the report generation may be slow.

With A Closing Transactions[edit]

If you want to avoid the complexity of the calculation on the financial reports, or want the balance sheet to be out of balance as an alert to changes in past periods, you can perform the equivalent of 'closing the books'. Simply create a special purpose account in the P&L section of the ledger and post a single GL Journal debiting this account (assuming we made a profit) and crediting the Balance sheet - Retained Earnings Account. The sum of all P&L accounts will now be zero as will the sum of the balance sheet accounts. Software can prevent additional transactions entered in these now 'closed' periods. Normal P&L Reports can simply exclude this 'transfer' account and add up all the transactions between the relevant start and end dates. The drawback here is the need to make the entry and correct it if there are any changes. The Balance Sheet will be out of balance if the corrections haven't been done. This adds some complexity to the company processes and may be forgotten easily if not well documented.

See also Discussion Thread:

Steps to implement[edit]

  1. Add a new Account of type Expense, called something like "Profit Transfer" (suggestion: make it the last of all the P&L accounts) and be sure it doesn't roll up into any other accounts
  2. Add the Profit Transfer account to Financial Reports that you use for any Trial Balances
  3. DO NOT ADD the Profit Transfer account to your P&L Statement
  4. Configure your P&L so that the Report Column/Amount Type uses "Year Balance" not "Total Balance"
  5. Configure your Balance Sheet so that the Report Column/Amount Type uses "Total Balance"
  6. At year end, make a single journal entry into Profit Transfer offsetting the Total of the Income and Expense Accounts. Post the other side of the entry to Retained Earnings
  7. Close the period


The benefit of these approaches are:

  • they are very simple,
  • the Profit & Loss information is always available for multi-year reporting because each P&L account has not had a transaction entered to make it balance to zero (regardless of whether this is done in some pretend 13th accounting period)
  • there is no need to make one sided journal entries into the retained earnings account so as to preserve the P&L history by not forcing each account to a zero balance.
  • they support multiple reporting calendars, say for a parent company balancing on 31st Dec but the subsidiary company balancing on 31st March. In the first solution, nothing else is required. In the second, all you need do is create 'closing' journals at each of 31 Dec and 31 March and you can easily report for both balance dates. With an approach where the balances are set to zero at a single point in time this is not possible. the journal that was entered explicitly shows the P&L figure that is being transferred to the equity general ledger account.