Hello everyone!
Welcome back to the Kaizen series!
Discount approvals are a standard part of sales governance.
Most organizations need something like this:
Discount % | Required Action |
< 10% | Auto-approve |
10–19.99% | Sales Manager approval |
≥ 20% | VP Sales approval |
Zoho CRM already includes a powerful
Approval Process feature capable of routing records, locking them, notifying approvers, and maintaining audit history.
So the natural question is "Isn’t the native Approval Process enough?". Often, yes. But when the discount logic depends on accurate percentage calculation across line items and header adjustments, we need a small architectural enhancement.
This Kaizen combines Functions(for decisions), Workflow Rules(for triggers), Approval Process(for governance), and Reporting Hierarchy(for routing) into a clean, scalable solution.
Understanding the native Approval Process
Before adding anything custom, it’s important to recognize what the Approval Process already does extremely well.
- Evaluates criteria based on field values
- Automatically submits records
- Locks records during review
- Routes to users, roles, or hierarchy levels
- Maintains approval history
- Sends notifications
It is a powerful governance engine.
However, it evaluates existing values and does not calculate new ones. That distinction matters in discount scenarios.
The missing piece: Reliable discount percentage
In Quotes:
- Discounts may be applied at line-item level
- Discounts may be applied at header level
- Grand Total reflects cumulative adjustments
There is no guaranteed native field that consistently represents
True Discount % = (Sub_Total - Grand_Total) / Sub_Total * 100
If approval rules rely directly on partial fields(like “Discount”), they may misrepresent the effective discount.
To ensure accuracy, we introduce a Function to calculate and store a reliable Discount Percentage.
We are not replacing the Approval Process, but preparing accurate data for it.
Here is the architectural flow with each component having a distinct responsibility. This makes the system sustainable.
Quote Saved --> Workflow triggers Function --> Function calculates Discount % --> Function sets Approval_Status --> Approval Process evaluates status --> Record submitted and locked |
Let's go over this one step at a time.
Step 1: Create Custom Fields(Quotes Module)
Field | Type | Purpose |
Discount_Percentage | Percent | Stores calculated discount |
Approval_Status | Picklist | Controls approval trigger. Values:
- Auto Approved
- Pending Manager Approval
- Pending VP Approval
- Approved
- Rejected
|
| Approval_Level | Single Line | Displays routing level |
Step 2: Write the CRM Function(Decision Layer)
This function calculates the effective discount and determines the approval level. This function becomes the decision engine.
void automation.Set_Quote_Approval_Level(String id) { quoteId = id.toLong(); quoteDetails = zoho.crm.getRecordById("Quotes",quoteId); if(quoteDetails != null) { subTotal = ifnull(quoteDetails.get("Sub_Total"),0).toDecimal(); grandTotal = ifnull(quoteDetails.get("Grand_Total"),0).toDecimal(); discount = subTotal - grandTotal; discountPercentage = 0.0; if(subTotal > 0) { discountPercentage = discount / subTotal * 100; } approvalStatus = ""; approvalLevel = ""; if(discountPercentage < 10) { approvalStatus = "Auto Approved"; approvalLevel = "None - Auto Approved"; } else if(discountPercentage < 20) { approvalStatus = "Pending Manager Approval"; approvalLevel = "Sales Manager"; } else { approvalStatus = "Pending VP Approval"; approvalLevel = "VP Sales"; } updateMap = Map(); updateMap.put("Discount_Percentage",discountPercentage.round(2)); updateMap.put("Approval_Status",approvalStatus); updateMap.put("Approval_Level",approvalLevel); updateResponse = zoho.crm.updateRecord("Quotes",quoteId,updateMap); } } |
Step 3: Workflow(Trigger Layer)
Every time a quote is saved, we want the discount to be evaluated automatically.
Create the following Workflow Rule:
Module: Quotes
Trigger: On Create or Edit
Action: Execute Function
Map the Quote ID with the "id" argument in the function.
Step 4: Approval Process(Governance Layer)
Rule 1 - Manager Approval when Discount% is 10 to 19.99
Approval_Status = "Pending Manager Approval" --> Route to Sales Manager(via hierarchy)
Rule 2 - VP Sales Approval when Discount% >= 20
Approval_Status = "Pending VP Approval" --> Route to VP Sales(via hierarchy)
When this process is triggered, CRM:
- Submits the record for approval
- Locks it
- Sends notification
- Tracks approval history
The outcome
Why is this layered approach strong?
This design works well because each component in the system has a clearly defined responsibility. The CRM Function acts as the decision layer. It performs the discount calculation, determines the appropriate approval level, and updates the control fields. This ensures that the logic behind the approval requirement is accurate and intentional.
The workflow serves as the trigger layer. Its only job is to execute the function whenever a quote is created or edited. It does not contain business logic; it simply initiates the evaluation process at the right time.
The approval process becomes the governance layer. Once the function sets the appropriate status, the approval engine evaluates the criteria, submits the record, locks it, routes it to the correct approver, and maintains the approval history. This is where enforcement happens.
Finally, the reporting hierarchy determines who the approver is. Instead of hard-coding specific users, the system dynamically identifies the appropriate manager or second-level supervisor based on the role structure. This keeps the design scalable and adaptable to organizational changes.
By separating calculation, triggering, enforcement, and routing into distinct layers, the solution remains clean, maintainable, and easy to extend. The Approval Process continues to do what it does best—govern and enforce—while the Function ensures that the decision it evaluates is accurate and business-driven.
Summary
Zoho CRM’s native Approval Process is powerful and reliable.
When business logic depends on calculated values, like true discount percentage, introducing a function strengthens the design by ensuring accurate, consistent decision-making.
Used together, Functions and Approval Process create:
- Intelligent routing
- Accurate governance
- Clean audit trails
- Scalable architecture
That combination is what makes this solution robust.
We hope you liked this post. We'll see you next week with another interesting one!
Write to us at
support@zohocrm.com or let us know your feedback in the comments section of this post.
Cheers!
==========================================================================
Recent Topics
Introducing the revamped What's New page
Hello everyone! We're happy to announce that Zoho Campaigns' What's New page has undergone a complete revamp. We've bid the old page adieu after a long time and have introduced a new, sleeker-looking page. Without further ado, let's dive into the main
How do i follow up my email campaign in-thread
Is there a way to follow up the email campaign so that it is in-thread using zoho campaigns? eg customer gets original email with subject line "hello" then 5 days later follow up would be with subject line "RE: hello".
Announcing new features in Trident for Mac (1.29.0)
Hello everyone! Trident for macOS (v1.29.0) is here with new features and enhancements to enhance your business communication. Let's take a quick look at them. Access shared mailboxes. You can now view and access shared mailboxes in Trident, which are
Books is extremely slow again today !
Everything is running slowly even with 500mb connection speed
Cyclic dependencies in many-to-many relationships...
I have an application which includes a form for companies, and a form for contacts. Each company can be assigned 1 technical and 1 administrative contact. I have this working okay so far, but I want to copy the scripts used so far to a new empty application. When I import the scripts it fails with a message that says: Problem encountered while creating the application Error in resolving form dependency:Cyclic dependency among the forms:[Company, Contact] What can I do to resolve this? After all,
Zoho API to create ticket
I'm developing an integration to create tickets via API, but, locally it works (send and recieve requests). In production it also works sending requests, but, my file don't recieve any response data. My URL is available in Zoho API Console and I have
Automate Timesheet Approvals with Multi-level Approval Rules
Introducing Approval Rules for Timesheets in Zoho Projects. With this automation, teams can manage how timesheets are reviewed and approved by setting up rules with criteria and assigning approvers to handle submissions. Timesheet, when associated to
Labels Part 2
Hey Zoho Mail Team, On the labels window on the left-hand pane, alphabetize label name display, rather than displaying in order created. This one should be easy. Thanks, Drew
Building Toppings #1 - Serving your needs with Bigin Toppings
Hey Biginners! We're excited to kick off our Developer Community series on building toppings for Bigin, and our goal is to provide an accessible, beginner-friendly, and relevant path for every developer. Imagine creating tiny pieces of software that unlock
Can we create Sprint with tasks from Multiple projects?
Hi Team, We were using Zoho Sprints for quite sometime. Currently we have started the process of Sprint method. We couldnt create the active sprint board with the tasks from multiple projects. I would like to know whether this is possible or Any timeline
Tip of the Week #74– Create automated workflows in MS Power Automate
Zoho TeamInbox now connects directly with Microsoft Power Automate, letting you streamline everyday routines tasks such as from sending emails to managing threads, with automated workflows. About the integration Zoho TeamInbox integrates with Microsoft
Account validation
Hello everyone, I registered my account on ZeptoMail to use the system, but the problem is that the verification period on Zepto's end has already passed and I have limited functionality.
Paste issues in ZOHO crm notes
Hi, since a week or so I have issues with the paste function in ZOHO CRM. I use "notes" to copy paste texts from Outlook emails and since a week or so, the pasting doesnt function as it should: some text just disappears and it gives a lot of empty lines/enters.....
Is it possible to add a gradient color to a newsletter im designing?
From where i sit it looks like you can only choose a single color but not combine 2 colors?
Account disabled
I have an issue I need help with. Whilst trialing ZOHO CRM I created the following: Account1 (-------------) using m__ame@m__rg___s__i__.___.__ and 2 personal emails Account2 (-------------) using a personal email and 2 users _al__1@______________._o_.__
Blocked Email
We are a Zoho One subscriber and use Yahoo as our MX provider. A few times each year, for the past four years, CRM blocks one or more of my Zoho One users from receiving internal email from CRM. This includes "@mentions" in all modules, and emails from
message var is empty in bot mention handler
Hi, I'm encountering a problem: in my bot's mention handler, I want to retrieve the text the user typed when mentioning the bot. Example: On the #tests-cyril channel, I send this message: “@Donna hello how are you ?” I expect the system variable "message"
Remembrance Day to Remember – Recalling Values
The phrase “at the eleventh hour” refers to the 11th hour of the 11th day of the 11th month in 1918, when the hostilities of World War I came to an end—but it still holds meaning today. Remembrance Day (Veterans Day in the US) is observed on November
How to display two measures (sales and price) divided by categories on one line chart
Hi everyone, I’m having trouble figuring out how to display two columns on a line chart with category breakdowns. What I need is a line chart where one line represents Sales and the other represents Price. However, the Price data is divided into around
Introducing the locking option for CRM records
Last modified on 06/04/2023: Record locking option in CRM is now available for all Zoho CRM users in all DCs. Note that it was an early access feature available only upon request. Hello All, Hope you're doing well! We're thrilled to introduce our latest
Two new enhancements in Zoho CRM: Introducing new criteria for user fields and displaying group information in users page
Announcement moderated on 14th June, 2023. Dear All, These enhancements are opened for all users in all DCs. ------------------------------------------------------------------------------------- Dear All, Hope you're well! We are here with two useful
Tip #49- Navigating the Remote Support Dashboard in Zoho Assist- 'Insider Insights'
The Remote Support dashboard in Zoho Assist is designed to help technicians quickly access, manage, and monitor all their support sessions from a single, intuitive interface. Whether you’re starting a new session, managing ongoing connections, or reviewing
BMI formula
I've been trying for hours to calculate BMI using height and weight as my only inputs. It's a simple calculation and I even went to ChatGPT to help me figure this out in Zoho Forms, but it led me down a path of "try this" and "try this". None of my attempts
SEO on blogs
Hello, google is not able to find my blogs. Can you advice me if I need to change some settings or anything else to make it retrievable via SEO many thanks, hans
Duplicated Notebooks
Out of the blue, almost all of my notebooks got duplicated and the different copies contain different information. Some seem like older copies than the others. I use the linux desktop app and sometimes the Android app. I assume that the sync failed at some point and was unable to merge the two versions together. But I'm afraid to add anything else to my notebook because if it can't properly sync 5 notebooks with only a handful of notes each, what will happen when I have hundreds of notes and I lose
Mind mapping in Zoho Projects
Good morning, I would like to congratulate the Zoho team for building such an inovative and responsive application that fits in the daily challenges of so many work groups. I would like suggest you another functionality that helps a lot in project planning and development: mind mapping. Mind mapping would be of great help for brianstorming, knowledge management and other needs in online collaboration. Thanks and wish you all the best! George Maha Empresa Júnior Multidisciplinar do Instituto de
Retainer invoice in Zoho Finance modlue
Hello, Is there a way of creating retainer invoices in the Zoho Finance module? If not can I request this is considered for future updates please.
Documents don't sync properly
Hello, My team recently moved to Zoho workDrive, some of my team, work remotely so we believed Zoho would be the best way to share and edit files as well as access files withing the team. However we are experiencing sync issues, when a file is uploaded in the file explorer and shows sync complete, same file can be seen on the Zoho web app but other team members can't see the said file because it is not syncing properly. i figured out that if i were to go to preferences in settings and resync the
We are looking for an experienced Zoho Developer
Hi Everyone! We’re on the lookout for a skilled Zoho Developer with hands-on experience in the Zoho Developer Platform (The Vertical CRM Platform) and if you don't know what that is, then you are not the person we are looking for. You would also need
Initiate approval workflow after "on edit --> on success"
Dear Community, currently I am working on a initiative tracker which should handle approval workflows based on different initiative status. As far as I understand, an approval workflow can be triggered (only?) when data is entered for the input form to the database. Example: A new initiative is created and submitted. --> Approval Workflow triggered Here comes my question: Is it also possible to trigger an approval workflow if the form was "simply" updated? (on edit --> on success) Imagine the initiative
Tax Deductible Donations to a Charity Organisation
For Australia, what's the best/proper method for entering an expense that is a tax deductible donation to a charitable organisation. And thus is appears correctly in Accounts and BAS as a GST payable deduction?
Simultaneous use of WhatsApp Account in SalesIQ and ZohoDesk
Hi, We have only one number registered in Meta, it's possible use same account for two apps? All times here we try is stopping in SalesIQ. Regards,
External lookup fields to synchronise with Analytics
Hello. I suggest adding external lookup custom fields to the Zoho Analytics integration settings. Currently, these types of fields are not available for synchronisation, so they cannot be used to generate reports with related tables in Analytics. Thank
We should have an option to Toggle Off KB Article Links in AI Answer Bot Replies
Hi everyone, I'm creating this topic to share a feature idea that I think would improve the customer experience when using the AI Answer Bot for self-service. The Current Behavior (The Problem) Currently, when the AI Answer Bot generates a summary or
Boot Loop After Removing Service from Client via Admin
We have multiple laptops experiencing a boot loop / unable to login after the Zoho Remote service was removed from their machine remotely via the desktop client. The Windows sign-in screen is not available, and users are unable to login. This seems like
Request Backend Correction — Domains Mapped to Same Help Center (Multi-Brand Setup Failure)
Hello Zoho Desk Support Team, I need assistance correcting a domain-to-brand mapping issue in our Zoho Desk instance (The Blue Ribbon Project). Both of our verified domains currently point to the same Help Center instead of separate brand portals. Current
is there any option to enable the participants interact - can write on the screen, while the screen is shared by the host?
this is most expected features - for teaching children. is there any option to enable the participants interact - can write on the screen, while the screen is shared by the host?
How to disable the Login button in Desk Helpcenter
Hey there, I'm testing out whether the help center within Zoho Desk could replace our existing Customer FAQ. I tried to customize the themes for the public help center frontend, but stumbled across the login button in the navigation bar. Is there any
Full Text Customization & Translation in SalesIQ Chat Widget Settings
Dear Zoho SalesIQ Team, Greetings, We would like to request an important enhancement to the chat widget customization options in Zoho SalesIQ. Current Limitation: At the moment, only some of the text shown in the chat widget is editable or translatable
Best way to display complex Bookings Consultation Descriptions on Zoho Site?
I am a new user so apologies if this has been asked before. I couldn't find any answers in the forum. We offer 18 complex Consultations to our subscribers. Our current platform lets me put detail on these Consultations thoroughly (200-300 words) during
Next Page