Dynamics 365 Project Operations: Not-to-exceed limits

Tested on: ProjOps version 4.0.0.726 (public preview)

The 2020 release wave 1 introduces quite a few really exciting new features to the Dynamics 365 Customer Engagement core of Dynamics 365 Project Operations. One of the new features is the ability to set up not-to-exceed limits for project contracts and quotes, with the possibility of enforcing them at invoicing. While some additional usability enhancements to NTEs will be released at general availability, this blog post will serve as a guide to setting up NTEs in ProjOps. The functionality covered on this blog post is accessed and used through Dynamics 365 Customer Engagement.

The concept of NTE limits

The concept of NTE limits is straightforward. When an NTE limit is set, the NTE status for time and expense entries is first evaluated at Project Approval. When time and expense entries are approved, the resulting Unbilled Sales Actuals will have a status of Committed or Failed. If the amount of a created Unbilled Sales Actual is withing an NTE limit, its Not-to-exceed Status is Committed. If the amount of an Unbilled Sales Actual is over an NTE limit, its Not-to-exceed Status is Failed.

Actuals with a Transaction Class of Milestone work slightly differently. They are evaluated at invoicing: When an invoice is being confirmed, an error is produced if the resulting Billed Sales Actual will exceed a set NTE limit. While time or expense based Unbilled Sales Actuals can’t be set as Ready to invoice when they have a status of Failed, Milestones can always be set as Ready to invoice as a Milestone doesn’t have an NTE status.

Not-to-exceed limits can be set on one or all of the following four levels (entities):

  1. Project Contract Line Customer
  2. Order Line (T&M Order Lines only)
  3. Project Contract Customer
  4. Order
NTE limit on a Project Contact Line Customer.
NTE limit on an Order Line (T&M only).
NTE limit on a Project Contract Customer.
NTE limit on an Order (Project Contract).

When the NTE status of a Project Approval or an Unbilled Sales Actual is being validated, it’s done against limits set up on all of the previously mentioned levels. The validation order also follows those levels: Project Contract Line Customer is validated first and Order is validated last. If the validation fails at any level, the NTE status of a Project Approval or an Unbilled Sales Actual is set to Failed.

Both the Order and Order Line (T&M Order Lines) entities have Committed Amount, Spent Amount and Remaining Amount fields. The Committed Amount and Spent Amount fields are rollup fields while the Remaining Amount field is a calculated field. Remember to take the field types and their limits into consideration if you’re planning on referencing those fields in workflows. The purpose of the fields is described below.

Committed Amount: When time or expense is approved but not invoiced, its amount is classified as Committed. This indicates how much is being committed for invoicing from the NTE limit.

Spent Amount: When time or expense is approved and invoiced or when a milestone is invoiced, its amount is classified as Spent. Whenever an invoice is confirmed, the transactions on the invoice will reduce the Committed Amount and increase the Spent Amount. This indicates how much has been spent from the NTE limit.

Remaining Amount: Not-to-exceed Limit – Committed Amount – Spent Amount. This indicates how much is left of the NTE limit. If the value is in round brackets, the Remaining Amount is negative.

NTE limit demo

It’s time to put the NTE limits to a test. This demo will cover a scenario for time entries by a T&M Order Line. For this demo, the role of Project Manager is used and the sales price for that role is USD 150 per hour. This means that any time entries exceeding approximately 3.3 hours will exceed the set NTE limit. Let’s start by creating a new Project Contract (Order). For this example, an NTE limit will be set on an Order Line. The NTE field on Order doesn’t need to be populated as the desired outcome is for the validation to look at an Order Line’s NTE limit. If a fixed price Order Line would be present, an Order level NTE limit would need to be set as FP Order Lines don’t have an NTE limit field.

NTE limit will be set on a T&M Order Line so the Order level NTE field doesn’t need a value as fixed price Order Lines are not created.

Next, a T&M Order Line is created and an NTE limit is set. The NTE limit can be different than the Contracted Amount as the fields are not dependent on each other. For this example, an NTE limit is not set on Project Contract Customer or Project Contract Line Customer.

NTE on Order Line.

Next, two Time Entries will be created against two different project tasks. The first Time Entry is for 3 h and the second for 1 h. Both Time Entries are then submitted for approval.

Created Time Entries.

Looking at Project Approvals we can see that both Time Entries have an NTE status of Success. Why does this happen if the combined value of both entries will exceed the NTE limit set on the T&M Order Line (3 x USD 150 + 1 x USD 150 vs. Order Line’s NTE limit of USD 498)? The reason is that as I’m writing this blog post, ProjOps doesn’t currently have validation logic that would evaluate the sum of multiple Time Entries on Project Approval. This means that it’s currently not possible to reset or re-evaluate the NTE status for Time Entries on Project Approval the same way it’s done on Actuals. If you feel the feature is important, be sure to vote my idea up on Experience.

Validation on Project Approval for individual entries. The sum of the individual entries isn’t calculated and validated on Project Approval.

When the two Time Entries are approved, Unbilled Sales Actuals and Cost Actuals are created. As can be seen from the image below, validation kicks in for the Unbilled Sales Actuals. The original 3 h entry with the bigger value is evaluated as Committed and the smaller 1 h entry is evaluated as Failed. When setting an Actual with a failed NTE validation as Ready to invoice, an error is displayed. What happens if you feel clever and try to manually set the Actual’s NTE status to Committed? You guessed it! ProjOps outsmarts you and blocks your attempt!

Validation for NTE status takes place on the Actual entity.
If NTE validation fails, an Actual can’t be set as Ready to invoice.
Manually setting an NTE status on an Actual results in an error.

Looking at the T&M Order Line, the Committed Amount field now shows USD 480, which is what the amount of the Committed Unbilled Sales Actual for 3 h is. Nothing has been invoiced so the Spent Amount field hasn’t increased and the Remaining Amount still matches the NTE limit field. The same amount of USD 480 is also seen on the Committed Amount field on Order. As the Order has no NTE limit defined, the Remaining Amount field on Order is null.

Committed Amount on Order Line increases when Unbilled Sales Actuals with a status of Committed are created.
Committed Amount on Order increases as Unbilled Sales Actuals with an NTE status of Committed are created.

The next step is to mark the Unbilled Sales Actual of 3 h as Ready to invoice. After that an invoice is created and confirmed. Upon confirmation of the invoice, a Billed Sales Actual with an NTE status of Spent is created. Looking at both the Order and the Order Line, we can see that the Spent Amount field now matches the amount of the Actual that was invoiced.

Billed Sales Actual with an NTE status of Spent.
Spent Amount on Order Line increases as Billed Sales Actuals are created.
Spent Amount on Order increases as Billed Sales Actuals are created.

Project Approvals for Time Entries with an NTE status of Fail

Let’s look at a slightly different example and see what happens if instead of creating two Time Entries there’s a single entry for 4 h. As we can see from the image below, the new Project Approval record will have an NTE status of Fail because the entry would exceed the set NTE limit by USD 102 (4 x USD 150 vs. Order Line’s NTE limit of USD 498). It is nevertheless possible to approve an entry that has a status of Fail. However, marking the resulting Unbilled Sales Actual as Ready to invoice would not be possible as the Actual would have an NTE status of Failed. In such a case, the NTE limit would need to be increased and the Actual’s NTE status reset and re-evaluated.

Time Entry with an NTE status of Fail on Project Approvals.
When a Time Entry with a failed NTE validation is approved the resulting Unbilled Sales Actual will also have a status of Failed.

Let’s do that next and increase the NTE limit on the T&M Order Line to USD 2000. The Actual’s NTE status is then reset so that it changes to Not Evaluated. After resetting the status, it can be re-evaluated. This changes the NTE status to Committed as the NTE limit was increased. The Actual can now be set as Ready to invoice.

Resetting and re-evaluating an Actual’s NTE status.

Frequently Asked Questions

Q: If an Actual has an NTE status of Committed and an NTE limit is lowered so that the Actual in question exceeds the limit, what happens when that Actual is either set as Ready to invoice or it already is set as Ready to invoice and a draft invoice is created?
A: The Actual “flows through” to a draft invoice and a related Invoice Line Detail is created. When the NTE status is Committed, no further checks are made.

Q: Do Journal Lines have an NTE status?
A: Not at this point.

Q: Can the NTE status on Project Approval be reset and re-evaluated?
A: Not at this point.

Q: Do Milestones have an NTE status?
A: No.

Q: How are Milestones validated against an NTE limit?
A: The validation order follows the logic described on this blog post excluding fixed price Order Lines as they don’t have an NTE limit. Milestones are evaluated when an invoice is being confirmed. If an NTE limit is exceeded, invoice confirmation produces an error.

Q: How does validation work with split billing?
A: NTE limits are evaluated against all 4 validation points in split billing scenarios.

Q: Can an Actual’s NTE status be changed from Failed to Committed manually?
A: No.

Q: Can I set an NTE limit on an Order Line to null and increase the limit on Order if there are invoiced T&M Actuals?
A: Yes. NTE limits can be increased/decreased between all 4 validation points for T&M Order Lines. Fixed price Order Lines don’t have an NTE limit.

Q: Actuals keep getting an NTE status of Failed even though my Order/Order Line has an NTE limit that is greater than the amount of the Actual. What could be wrong?
A: Check the NTE limit field on all 4 validation points: Project Contract Line Customer, Order Line, Project Contract Customer, Order. Most likely you’ve forgotten an NTE limit on PCLC or PCC.

Disclaimer:
All my blog posts reflect my personal opinions and findings unless otherwise stated.