Advance Payments - Generally Accepted Accounting Rules - Changes Proposed

My accountant has a deep concern with the manner in which ERPNEXT accounting deals with advance payments because the advance payments are recorded, not as a liability, but as an asset (or negative asset). This is wrong, incorrect and does not pass muster with generally accepted accounting principles.

This is an attempt to put forward a proposal to handle advance payments as a general use case.

Just to recap on the accounting principles: In a double entry accounting system such as ERPNEXT, every transaction is entered into the company’s books twice: once as a credit in one account, and once as a debit in another account. If the debits and credits are entered correctly, they will equal one another, or balance out, at the end of each accounting period; if the debits and credits do not balance out, then there is an error somewhere in the accounting. One very important point to keep in mind: **A credit is not always an increase in an account, and a debit is not always a decrease; instead, forget everything you know about debiting and crediting your bank accounts, or invoices, or anything else. Think of debits and credits as nothing more than Column 1 and Column 2. For every entry in Column 1, there must be a matching entry in Column 2, and that’s all that debits and credits refer to.

Accounting for Customer Advance Payments: Two accounts are typically involved:

(1) the customer’s “advance payment” bank account (marked specifically in the accounting entry as an advance payment). Think of this as a separate bank account, separate from your operating bank account. In other words, for illustrative purposes, we have two bank accounts, the first being an operating bank account, let’s call this your Company Operating Bank Account, and the second a dedicated bank account where advance payments are deposited. Let’s call this your Advance Payments Bank Account; and

(2) a liability account, let us call that a Customer Liability Account (or something similar).

When a customer deposits funds into our Advance Payments Bank Account, the bookkeeper makes two entries: one to the Advance Payments Bank Account, and one to the Customer Liability Account. When your customer makes a deposit into your Advance Payments Bank Account, your accounting software will ask you what other account you want to adjust. For example, let’s assume a customer makes a $10,000.00 advance deposit. The bookkeeper will record the transaction as follows:

Account Column 1 (Debit) Column 2 (Credit) Explanation
Advance Payments Bank Account $10,000.00 customer 1’s Initial Advance Payment Deposit
Customer Liability Account $10,000.00

This will tell your bookkeeper that your Advance Payments Bank Account now has $10,000.00 of your customer’s advance payment funds in it, and that you have a liability to that customer in the same amount, with the liability shown in the customer Advance Payment Liability Account.

As you can see in the table above, so long as the accounting entries are made correctly, Column 1 (Debit) always equals Column 2 (Credit). To further illustrate this concept, let’s add another advance payment deposit in the amount of $5,000.00:

Account Column 1 (Debit) Column 2 (Credit) Explanation
Advance Payments Bank Account $10,000.00 Customer 1’s Initial Advance Payment Deposit
Customer Liability Account $10,000.00
Advance Payments Bank Account $5,000.00 Customer 2’s Initial Advance Payment Deposit
Customer Liability Account $5,000.00

Just as before, the total in Column 1 (Debit) is $15,000.00, and the total in Column 2 (Credit) is $15,000.00, and the two columns balance one another.

Now, let’s assume the $5,000.00 from customer 2 is withdrawn to apply to our invoice. First, the bookkeeper will withdraw the funds from the Advance Payments Bank Account by entering the following transactions:

Account Column 1 (Debit) Column 2 (Credit) Explanation
Advance Payments Bank Account $10,000.00 Customer 1’s Initial Advance Payment Deposit
Customer Liability Account $10,000.00
Advance Payments Bank Account $5,000.00 Customer 2’s Initial Advance Payment Deposit
Customer Liability Account $5,000.00
Advance Payments Bank Account $5,000.00 Withdrawal of Customer 2’s Funds From Bank Balance
Customer Liability Account $5,000.00

Again, the total in each column balances. Now, the bookkeeper must apply the funds to the invoice. Assuming the funds are now transferred and deposited into your Company Operating Bank Account, the bookkeeper enters the following transactions:

Account Column 1 (Debit) Column 2 (Credit) Explanation
Advance Payments Bank Account $10,000.00 Customer 1’s Initial Advance Payment Deposit
Customer Liability Account $10,000.00
Advance Payments Bank Account $5,000.00 Customer 2’s Initial Advance Payment Deposit
Customer Liability Account $5,000.00
Advance Payments Bank Account $5,000.00 Withdrawal of Customer 2’s funds from the Advance Payments Bank Account
Customer Liability Account $5,000.00
Company Operating Bank Account $5,000.00 Application of customer 2’s advance payment to pay our invoice
Income $5,000.00

Although it’s beginning to get slightly more complex at this point, with different accounts involved, it’s easy to see that the debits and credits still balance, and the general principle is clear.

The scenario above is how the accounting should work concerning advance payments. However, most, if not all businesses will not operate two separate accounts, an “Advance Payments Bank Account” and a “Company Operating Bank Account” because it is not practical neither is it required.

In order to use one bank account, perhaps the following suggestions can be made.

  1. Programmatically create a subaccount for a customer in the chart of accounts when a payment is marked as an advance payment – Application of Funds – Bank Accounts – Company Operating Bank Account – Customer 1.

  2. Programmatically create a Customer Liability Account for a customer in the chart of accounts when a payment is marked as an advance payment – Source of Funds - Customer Liability Account – Customer 1.

  3. On receipt of an advance payment, create a journal entry with a debit at Application of Funds – Bank Accounts – Company Operating Bank Account – Customer 1 & a credit at Source of Funds - Customer Liability Account – Customer 1.

  4. When we create an invoice for the customer, and we press the “Make a payment” button, create a journal entry as follows – after first checking if funds for advance payments are available.

A. Debit: Company Operating Bank Account by $5000

B. Credit: Debtors by $5000

C. Debit: Source of Funds - Customer Liability Account – Customer 1 by $5000

D. Credit: Advance Payments Bank Account by $5000

Is will be possible to create an additional binary field on the table level to indicate that a deposit in the Company Operating Bank Account is an advance payment. If so, create a subaccount for the customer under the Company Operating Bank Account and a similar subaccount under the Customer Liability Account under Source of Funds. Programmatically debit and credit the subaccounts as funds are deposited and withdrawn against our invoices (or at least create the journal entry programmatically), until there are no more advance payments left.

Check this out.

Very nice. This has been merged into develop?? Hoping to see the merge in V14 soon :slight_smile:

Not sure if this will be back ported to v14. Looks like it will be available from v15.