Tested on: ProjOps version 188.8.131.52 (public preview, UR1)
Advances and Retainers is a new feature that was released with the UR1 update of Dynamics 365 Project Operations. With this feature, upfront payments can be defined. The value of delivered services can then be reduced from the advance/retainer amount. If delivered services exceed the advance/retainer amount, the difference is invoiced from the customer. If delivered services fall below the advance/retainer amount, a refund for the difference can be issued or the remainder of the advance/retainer can be used later. To read more about advances/retainers and how they’re used in corporate finances, check out this article on Investopedia.
This blog post is a walk-through of the new Advances and Retainers feature in the non-integrated story of D365 Project Operations. As I’m writing this blog post, the feature is not available in the integrated story. There is thus no reference to D365 Finance and how advances/retainers are used with it in a D365 Project Operations context.
Advances and Retainers
Advances and Retainers are defined on a Project Contract. The new feature adds a new entity called Project Contract Retainer to the ProjOps data model. An advance is synonymous with a retainer so from a ProjOps point of view they are one and the same thing. The name of the feature is simply called Advances and Retainers to convey a message that the feature can be used for advance payments or retainer fees.
Before the Advances and Retainers feature was introduced, milestones on fixed price order lines were the only supported concept for retainers/advances/pre-payments. With the introduction of the new feature, milestones can be used for their original purpose on fixed price order lines. The new feature can be leveraged as retainers/advances/pre-payments on both fixed price and time and material order lines.
Setting up Advances and Retainers in ProjOps
Let’s walk through Advances and Retainers on a time and material order line. Time Entries are used to reflect delivered services. For this example, a Time Entry of 1 h will have a sales price of USD 200. Advances and Retainers are defined on the Advances and Retainers tab on an Order. It’s possible to either create a retainer schedule or individual retainer records. Example use cases of the differences between an individual retainer record and a retainer schedule could be:
- A retainer record is created to secure an advance/pre-payment from a customer. A common scenario would be where a customer’s creditworthiness is low.
- A retainer schedule is created to secure a monthly payment from a customer for example for managed services. An X amount of hours are included in a managed services agreement. Hours exceeding the defined contracted amount are invoiced on a T&M basis.
For this example, a retainer schedule from August to December is created. An Invoice Frequency can be used to define the number of retainers created for a given period of time. If an Invoice Frequency is not defined, it’s possible to manually enter the number of retainers a retainer schedule should have. To invoice a retainer, either a T&M or a Fixed Price Order Line is needed. Otherwise, an error is given when a retainer invoice is being created. Having a project associated with an Order Line is optional.
Invoicing a retainer
Another important step to remember is to set a retainer as Ready for invoicing. ProjOps looks at a retainer’s Invoice Date (msdyn_invoicedate) so if you’re trying to invoice a retainer sooner than what its Invoice Date is, the retainer will not be picked up on an invoice. Image 2 below shows a retainer schedule where retainers for 08/01/2020 and 09/01/2020 are set as Ready to invoice. The date on which I ran the demo was 08/17/2020. As we can see in image 3, only the first retainer for 08/01/2020 was picked up on an invoice.
When a retainer is picked up on an invoice and there is are no delivered services (i.e no approved time entries exist), the Project-based Lines section will have an Amount of 0.00. The Advances and Retainers section will display the retainer amount in the Extended Amount column. The Total Amount of the invoice will match the retainer amount, which in this example is USD 1000.
When a retainer invoice is confirmed, the related Project Contract will display an updated status for the invoiced retainers. The Invoice Status will change to Customer invoice posted, the Available Amount will match the invoiced amount (in this example USD 1000) and the Used Amount will be USD 0.00 as services haven’t been delivered against the Project Contract.
Delivering services against a retainer
Delivering services against a retainer works in the same way as when fixed price or time and material work is delivered without a retainer. The value of delivered services are subtracted from the retainer amount. Beyond this, the process of using time and material or fixed price Order Lines is the same. In this example, I’ve created a time and material Order Line and have submitted Time Entries for 6 h. As the sales price is set at USD 200 per hour, the total for the delivered 6 h will be USD 1200.
When Time Entries are approved, ProjOps will have Actuals for the invoiced retainer and the unbilled Time Entries. A new Transaction Class of Retainer indicates when a retainer Actual is in question. An invoiced retainer will have a Transaction Type of Billed Sales.
Invoicing delivered services
When services have been delivered, a new invoice can be created from the Project Contract. In this example, the retainer amount doesn’t cover the sum total of the delivered services. The Amount on the new invoice’s Project-based Lines is USD 1200 while the Applied Advances and Retainers section will show how much was used of the retainer. As the retainer doesn’t cover the sum total of the delivered services, the invoice has a Total Amount of USD 200. Continue reading for an example of a scenario where the sum total of delivered services is less than a retainer amount and the remaining amount is refunded to the customer.
After confirming the invoice, the Project Contract will indicate that the Available Amount for the retainer is USD 0.00 and the Used Amount is USD 1000.
Looking at Actuals, the Billed Sales Actuals for the retainer is reversed and a Billed Sales Actual with an amount of USD 1200 is created for the delivered services.
Discarding a retainer at invoicing
Sometimes there might be a need to invoice a customer for delivered services even though a retainer has already been invoiced. A scenario could be where a contract with a retainer for managed services is in place but there’s a need to invoice the customer for work that doesn’t fall under managed services.
Let’s look at an example where there’s a retainer for USD 200 that has been invoiced. Next, delivered services for 1 h are invoiced at USD 200 / h. Normally, the retainer would cover this and the Total Amount on an invoice would be USD 0.00. This is illustrated in the image below.
To discard the active retainer for USD 200, the reversed value in the Extended Amount column is set to USD 0.00. This way the retainer is not applied and the invoice’s Total Amount will be set to USD 200.00.
Let’s look at an example where the sum total of delivered services is less than a retainer amount. There is a small “gotcha” at the end of the process to refund a customer for an unused amount. For this example, a single retainer for USD 400 exist. A T&M Order Line exists on a Project Contract and an hour of services is delivered.
When an invoice for the delivered services is created, the Applied Advances and Retainers section will display a Balance Retainer Amount of USD 200 as the sum total of the delivered services is less than the retainer amount. The Total Amount is naturally USD 0.00 as there’s nothing to invoice from the customer.
When looking at the Project Contract, the retainer has an Available Amount of USD 200. The Actuals that were created when the previous invoice was confirmed also look slightly different than in the previous example as the value of the retainer wasn’t used in full.
The next step is to partially refund the retainer to the customer. This could be done in situations where services were delivered in a shorter period of time than what was anticipated during a contracting phase. Refunding is done by opening the original invoice for the retainer and correcting it from the Correct this invoice button on the record’s ribbon. The result of the invoice correction is a new draft invoice that has the remaining retainer amount reversed. In this example, it’s USD 200 as that was the Available Amount seen in image 15.
After the retainer invoice is corrected and the correction is confirmed, the Available Amount field on the Project Contract will be USD 0.00 and the correction is also displayed on related Actuals.