New Feature: Partial Invoicing

Hello to all,

as our customer requests a partial invoicing feature, I want to ask the community, how is the process to initiate such a new feature?
I am a programmer and have already an idea how to implement it. However, I will need consultation from some core developers, because after code analysis, it would be intertwined with the core and should find its way back to the core.

Imho partial invoicing is a very important feature for some companies and would help ERPNext to grow into new industries. It is different from scheduled payment, as taxes are calculated based on partial invoice value, not total value of services/goods. Especially in the construction industry, partial invoicing is a very common practice.

Can anyone advice on this or is willing to help?
Thank you


+1 to this
I am a structural engineer trying to make erpnext work for my start up firm. I send a proposal or contract and ask for a retainer to get started, typically 30 to 50% of the contract for small jobs. Once I receive the retainer I start the contract.

On large contracts, I would progress bill based on % completion. Then I would invoice the final payment COD before the work product is delivered to the client, typically a stamped letter or plans via email. Right now the only way I’ve found to invoice the COD is by giving a ‘discount’ manually setting the retainer to $0 on the final invoice. Partial payments recorded don’t reflect on the invoicing.

I program in visual basic and excel macros, but no experience in python. If there’s any way I can help I’d love to make this tool more versatile.

1 Like

@Jon_Talley, @Paul_Frydlewicz

I’m not a core developer, but I can give you some hints here!

For services, you can manage the whole process trought Sales Order, and just automate the issue of the invoices against payment terms.

If you are dealing with Renting Services, you may will be interested into Rent items in erpnext - #9 by max_morais_dmm

The biggest problem that come in my mind, is for partial billing for Physical Items.

Because, you cannot invoice the same physical item twice, so an intermediary item, to represent the “Transfer of value of the asset” for the customer, will be needed, and or you make an stock out at the first invoice, or at the last one.


Thank you Max,

Maybe this could help some others, ‘payment terms’ seems like it would be a good fit, but when I was playing with it before it didn’t show up in the sales order or the invoice printout and I was confused and dropped the idea. I’m reading through the documentation for payment-terms and it seems like I could get this to show up if I customize with the print-format-builder. Although when I was playing with it before I was disappointed it didn’t should show up automatically, but I’m glad I can include it this way.

Paul is right however, there are a few things that would need to change to fit the AEC (arch/eng/const) industry, namely progress invoicing based on project % complete and showing previous payments and (I would add) a timesheet view that could show multiple projects/tasks in one view that you could keep open in one browser tab as you work, where something like has done would be fantastic.

I’ve got a lot to learn with this, thanks for the tip to make me dig a little deeper.

1 Like

Thank you for the insight @max_morais_dmm.
In my case it’s indeed a physical item.

I was doing some prototype programming with a fork of erpnext and added a billed_amount into the backend calculation and a partial_invoice receivable account for tracking the progress. It worked, but the problem lies in the valuation process of the items. The code is very intertwined in this regard.

My next step would be to create a partial invoice doctype that holds references to all partial invoices of a particular payment process, just to be able to implement a work-process for accounting staff.

But as I said, the item valuation I didn’t figure correctly yet…

@Paul_Frydlewicz the item valuation never will be okay, in this scenario.

A simple way is do something like that


This prevent partial split of devices in account (What shouldn’t be done, due valuation and other technical aspects, like, that you can’t physically delivery 20% of a glass bottle.)

This flow, works pretty much like deferred revenue, the difference is.

On the first invoice, you carry the contract value in an non stock Item, in my case (Installment), and attach the itens to be delivered.

From invoice 2 - 5, only installments will be delived
And after invoice 5, a delivery note, is issued.

You can put the first invoice as “Recurring” also, just keeping in mind that the “Devices” will need to be cleaned on every invoice, until the end of the contract.

This scheme allow you to include interests on every invoice, due previous late payments, if your contract enforce that.

1 Like