In order to control price deviations at One Quote level, a custom approval process has been built. We built it in order to manage potentially different approvers per product lines.
Depending on the deviation one of the 3 roles below may need to approve:
To calculate the RMD and GMD approver role we use the corresponding approval thresholds % stored on the related volume bracket and we calculate at OQLI level the "GMD approval" and "RMD approval" threshold unit values.
The logic of these two fields calculation is different depending on the GBU:
For GBU = "Novecare":
For GBU different than "Novecare":
TS only use the last part linked to the price floor. They don't need any GMD or RMD approvals. But it's important to know that the logic is in place for future GBU's we'll onboard on the process.
If the "enable scaling price" checkbox is enabled at OQLI level we compare the minimum price between Quoted price/ Price (Bracket 2) / Price (Bracket 3) to know if there is an approval needed or not.
We also implemented an absolute threshold logic to request an approval if the annual impact of the deviation will raise a certain amount.
Absolute thresholds are maintained at Custom metadata level (One Quote Approval) and at the moment only Novecare use it.
For Novecare values are the below:
To give a concrete example how it works the system calculates the price impact versus the estimated annual volume.
Egs:
If an OQLI has a estimated annual volume at 150 000 kg, a price guidance at 2€/kg and a quoted price at 1,5€/kg. The annual impact is (2€-1,5€)*150 000 = 75 000€. On this example we meet the RMD aboslute thresold and an approval will be require even if we are above the RMD approval threshold.
For the system to find the right approver after an approver role is defined at OQLI level we maintain a matrix at utility level on the "One Quotes price deviation" record type.
We look at the record with the same combination of GBU/BU/Region/Role and we retrieve the approver.
Edit access to this matrix is managed via sharing rule:
| Field Name | Comment |
|---|---|
| GBU | Use to know which logic to use. For Novecare margin logic. For other GBU's logic based on prices. |
| Estimated Annual volume | Use to calculate the annual impact to be compared with absolute thresholds. |
| Quoted Price | To be compared with thresholds to know if there is an approval needed. Use for GBU different than Novecare. |
Price (Bracket 2) | Use if scaling price is true. We compare the minum value between quoted price, price (bracket 2) and price (bracket 3) with thresholds to know if there is an approval needed. |
Price (Bracket 3) | Use if scaling price is true. We compare the minum value between quoted price, price (bracket 2) and price (bracket 3) with thresholds to know if there is an approval needed. |
| Quoted Margin | To be compared with thresholds to know if there is an approval needed. Used on the Novecare logic. |
| Price Guidance | Use to calculate GMD and RMD Approval fields for GBU different than Novecare. |
| Margin Guidance | Use to calculate GMD and RMD Approval fields for Novecare. |
| Price Floor | To be compared with the quoted price to know if there is a PAM approval needed when below. For GBU different than Novecare. |
| Margin Floor | To be compared with the quoted margin to know if there is a PAM approval needed when below. For Novecare. |
| GMD Approval | To be compared with the quoted margin and the quoted price to know if there is a GMD approval needed when below. |
| RMD Approval | To be compared with the quoted margin and the quoted price to know if there is an RMD approval needed when below. |
| Approver Role | To track who will be the approver role to retrieve from the matrix. |
| Approval Status | To track the status of the OQLI on the approval process. |
| Approver | To track the approver Name. |
For more information on fields formulas please check
To send a quote for approval the One Quote owner has to click on the "Send for approval" button at the top right of the LWC on the "Configuration and Product" tab.
Condition for the button to be displayed:
All the product lines have to be configured. An OQLI is considered configured as soon the "Product & Plant" and "Customer & demand" columns are fully populated.
As soon the button is pushed with no errors, the One Quote status is updated to "Sent for approval", the OQLI status of the lines requiring approval are updated to "Approval pending". All the lines with no approval needed are updated to approve.
The table and the quote are now in read only for the One Quote owner.
When the approver goes to the quote, all the lines where he's the approver are highlited in orange. A new "Approved" column is now displayed for him to let him the possibility to approve or reject all his lines individually.
The approver has also the possibility to write a comment on the approval comment field on the LWC.
As soon all his decision are made, a "Send decision" button is displayed at the top right of the LWC.
When the button is pushed, all approved lines are updated to approve and all rejected lines are updated to rejected.
Rejection process:
If a line is rejected, the One Quote owner has the possibility to edit again the line and review the approver comment to edit the price or delete the line. Then he will need to send for approval again to move forward.
As soon all the lines status are "Approved", the One Quote status is automatically updated to "Approved" and the owner can move forwards on the process.
Notifications are send by email and on the salesforce bell when the events below happens: