Revenue recognition principle terms for ERPNext

According to current transaction process every sales transaction happens against sales invoice of a confirmed order in ERPNext and transaction logged in to respective account heads . Here is the process as I got in Doc

When selling service items it takes time to deliver it after getting the sales order , before delivery client can made payments in several stage. But until we deliver that item the sale will be UNREALIZED . In current process when we sale anything and place invoice here are the accounting entries

If I sale a service package of 50,000 to a customer which will took me 1 month to deliver and rise invoice of 50,000 to the customer:

Account Receivable - (Dr) 50,000
Cash - (Dr) 10,000 (Advance)
Income - (Cr) 50,000

but according to our business until we deliver it to client sale is not realized and transaction will not log under Income head , rather than that it will be logged under a liability account called unrealized sales.

According to accounting coach

revenue recognition principle

The accounting guideline requiring that revenues be shown on the income
statement in the period in which they are earned, not in the period when
the cash is collected. This is part of the accrual basis of accounting
(as opposed to the cash basis of accounting).

So I want my transactions to be like this

Accounting treatment – e.g. package @ Tk 50000 with booking money paid of Tk 5000

Cash/Bank Debit 5000

Account receivables (Debtors) Debit 45000

Unrealised Sales Credit 50000 (Liability account)

Step 2: Partial payment received from client

Cash/Bank Debit 20000

Accounts receivable Credit 20000

Step 3: Final Accounting treatment for the package sale

Cash/Bank Debit 25000

Accounts receivable Credit 25000

Unrealised sale Debit 50000

Income Credit 50000

What is the best way for this scenario to achieve this?

Here is an article on this Revenue recognition principle

Quick Answer:

You can take advance against a Sales Order and book an invoice only when you deliver.

Hello @rmehta

Thank you very much for your quick answer . In that case how can I check invoice amount and outstanding amount difference when client make partial payments before deliver for his order ?


  1. Create the Sales Order – let’s say for 50,000

  2. Record the advance the customer paid – let’s say 30,000

Use „Payment“ tab in the Sales Order.

  1. Create first Sales Invoice – let’s say for 25,000

Use „Invoice“ tab in the sales order.

If you scroll down when this invoice is being generated, you will see a section called Advances Received (if I remember correctly), go to this row and allocate 25,000 to this invoice. After you submit the invoice, you will see that it is paid.

  1. Create the second invoice – let’s say 25,000

You will now see that the system automatically allocated 5,000 to this second invoice so that only 20,000 remains to be paid.

After this you only have to make the customer pay the remaining 20,000 :slight_smile:

On every step you can check your Accounts –> Main Reports –> Trial Balance and Accounts → Main Reports → Accounts Receivable and you will see that your balances for accounts receivable, sales and bank are correct.

This is as good as it gets in much more complex and expensive ERPs than ERPNext, even better than most. If the accountants are giving you a hard time that the liability for advances received (what you call Unrealised Sales Credit) must be shown on a separate account – you have to explain them that this is only possible with a manual journal at the end of the period. In the above example this liability is equal to 50,000 after 1) and 5,000 after 3).

They should go through Accounts Receivable and summarize all invoices with a negative outstanding amount and then create a manual journal Dr Accounts Receivable / Cr Advances Received for this total. Immediately in the next period, the reversing manual journal Dr Advances Received / Cr Accounts Receivable for the same amounts should be made. This gives a more correct position of your assets and liabilities in the Trial Balance at the end of the period but this is not something that people who create sales orders and sales invoices should be bothered with.

Good luck.

1 Like

Hello @gorkas

Thank you very much for taking time and giving a long answer . In my scenario I have nothing to deal with advance received or not and which account head the advance is going .

As you said to create sales invoice , if I create a sales invoice for an order system log the invoice amount immediately to income account (whatever I create 1 or several for 1 order) . But as a service based organization it take me time to provide that service to customer . Maybe I can fail too . So Until I deliver it I can’t log the sales order amount to my income head because its not my income , instead of that it will be a liability until I deliver it .

So I want that when creating a sales invoice amount will not logged under income account , It will logged under a liability account and after its delivered it will be logged under income and liability head will be cleared.

After making successful delivery by creating delivery note or something else:

Unrealised sale (liability account) Debit 50000
Income Credit 50000

@inventobd Have you discussed this with your Accountant?

I suggest you check out IAS 18 and IFRS 15 for relevant Accounting Standards in respect of the correct treatment of Services which have long completion durations. I think you will find that in most circumstances you will be able to raise invoices as the goals of the contract are met rather than deferring all until service delivery.

@eamonn: I understand that revenue can only be recognized when work performance is completed or when specific % of work is completed for contract revenue. However, there are still cases that we need to recognize unrealized sales such as:

  1. We bill specific amount to the client when we signed the contract. Based on accounting standard, this does not qualify for revenue yet as we have not performed the work. So we need to:
    Debit: Account Receivable
    Credit Unrealized Sales (liability)

Until specific % of work is completed that we need to adjust:
Debit: Unrealized Sales (liability)
Credit: Sales (revenue)

  1. We provide monthly payroll service to a client with monthly fee of $500. Based on our contract, we will bill to the client every three months. Accounting standard requires that we recognized revenue every month in this case. So for the first two months the accounting entry will be:
    Debit: Unbilled Income (asset) $500
    Credit: Revenue $500

In month three that we bill the three months to the client, the accounting entry will be:
Debit: Account Receivable $1,500
Credit: Unbilled Income (asset) $1,000
Credit: Revenue $1000

For these two example, that is why we need to recognized unrealized sales and unbilled income in accounting transactions.
However, I do not know how to do it in ERPNext so that I can keep track of balance of unrealized sales and unbilled income by clients or project.

Issue is open on github for this.