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
Zoho Mail iOS app update - RTL languages support and access emails using permalink and universal link, image upload resolution
Hello everyone! In the most recent version of the Zoho Mail iOS app update, we have brought in support for RTL languages(Arabic and Urudu), providing a seamless reading experience with proper text alignment and layout throughout the app. We have also
Why are emails sending with @viazohocrm.com ?
I just sent out mass emails from CRM. They are sending from the email below and people cannot reply, and they are getting this message: Address not found Your message wasn't delivered to sales.XXXXXXXX.com.au@viazohocrm.com because the address couldn't
Duplicating and referencing datasets
I am moving from PowerBI to Zoho Analytics and while I find Zoho easier to use in many ways, there is one function that I use in PowerBI that I have not been able to find in Zoho. I have several data sets that I need to modify in different ways to get
Zoho Inventory Now Supports VeriFactu for Businesses in Spain
Starting from January 1, 2026, Spain requires real-time invoice reporting for all B2B transactions. From July 2026, this requirement will extend to B2C transactions as well. All reporting must be carried out through the VeriFactu to AEAT (Agencia Estatal
Enhancements to Zoho Map integration tasks
Hello everyone, We're excited to announce enhancements to the Zoho Map integration tasks in Deluge, which will boost its performance. This post will walk you through the upcoming changes, explain why we're making them, and detail the steps you need to
Let’s Talk Recruit: Meet Zia, your all-in-one AI assistant (Part-3)
Welcome back to the Let’s Talk Recruit series. In the part 2 post, we explored how Zia has evolved with smarter summaries and seamless AI-assisted content creation. This time, we’re diving into the latest upgrades that take productivity even further —
Announcing Early Access to "Zoho CRM for Everyone" — A new and exciting update to Zoho CRM
Update : Zoho CRM For Everyone's Nextgen Interface gets an upgrade! Hello everyone, We’ve updated the Zoho CRM for Everyone Nextgen interface based on your feedback. The UI is now simpler with a unified sidebar, a more visible global search and features
Unable to verify domain for Zoho People
I have added TXT records in my DNS (GoDaddy) [screenshot attached], but unable to verify even after 12 hours after adding. On checking the console, it shows some errors [screenshot attached]. It appears that the verification flow is broken - please provide
Zoho Invoice Now Supports VeriFactu for Businesses in Spain
Starting from January 1, 2026, Spain requires real-time invoice reporting for all B2B transactions. From July 2026, this requirement will extend to B2C transactions as well. All reporting must be carried out through the VeriFactu to AEAT (Agencia Estatal
Zoho Billing Now Supports VeriFactu for Businesses in Spain
Starting from January 1, 2026, Spain requires real-time invoice reporting for all B2B transactions. From July 2026, this requirement will extend to B2C transactions as well. All reporting must be carried out through the VeriFactu to AEAT (Agencia Estatal
Weekly Tips : Make your email content error free with Spell check in Zoho Mail
As someone who writes multiple emails a day, we are bound to make both grammatical and spelling errors. Most of them we may not even notice, and even if we do, we may not have the time to correct each one individually when we are in a hurry. So how do
Introducing Enhanced Storage Management
We’re excited to roll out two new enhancements in Zoho Recruit, Subscription Information and Storage Management — designed to give admins complete visibility into subscription details, feature limits, and storage consumption — all from one place inside
how to download all my files
We are in the middle of zoho docs to zoho workdrive migration. I can not access my zoho docs page. I get redirected immediately to a zoho workdrive page. I would like to download all my files so that I have a backup in case something goes wrong with the
Convert Zoho Books SalesOrder - Invoice
Converting a Zoho Books Sales Order into an Invoice Using the SalesOrder Convert API Hello Zoho Developers, Today, we are sharing a simple and effective solution to convert a Zoho Books Sales Order into a Zoho Books Invoice using the SalesOrder Convert
Zoho Expense - Report Templates
Hi Expense Team, I do a recurring trip once every week which has the same cost: Per diem Milage Toll Payment It would be great if there was a feature which allowed me to clone a previously submitted report or create a template reports. This would save
Tip #51- Centralized Contact Management for Better Remote Support- 'Insider Insights'
For our final topic of November, we’re diving into one of the most helpful features in Zoho Assist, the Contacts section on Zoho Assist;s dashboard. Whether you’re managing multiple clients, tracking past sessions, or simply looking to streamline your
Say Hello to Telephony in Zoho FSM
Zoho FSM now brings complete telephony support so your team can manage inbound and outbound calls without switching tabs. Faster responses, smarter routing, and total call visibility—all in one place. Choose the telephony setup that works for you Zoho’s
E-Invoicing in Belgium with Zoho Inventory
Starting January 1, 2026, Belgium is introducing mandatory electronic invoices (e-invoicing) for all B2B transactions between VAT-registered businesses. Invoices and credits notes must be exchanged in a prescribed digital format. How E-Invoicing Works
Employee ID is not correct in get records api V2 for leave
Hi Team, We are facing an issue when calling the Get Records API V2. The employee.id returned in the response is not the actual employee record ID in Zoho People. As a result, our integration is forced to make an additional Get Record API call for every
Formatting Mailing Labels
I want to use the "Print Mailing Labels" function on the drop down list, but I am not seeing a way to change the formatting on the mailing labels. At the moment, the information that appears on the mailing labels ARE NOT mailing addresses, but random
Canvas View - Print
What is the best way to accomplish a print to PDF of the canvas view? Latest update (27th November 2025): We are excited to announce that the Canvas Print View is now available! We encourage you all to try it out and share your feedback with us. Learn
Zia Conversation Summary: Context at a glance for every customer interaction
Hello everyone! Every customer conversation tells a story—but in CRM, that story is rarely in one place. A sales rep moving between multiple leads has to reopen long email threads, check call remarks, and revisit meeting notes just to remember what was
How to set a fixed width of column/cells
Is there a way to set a 'fixed' width for cells in zoho sheet? I know how to adjust the size of the colums.... but after I past a large block of text into a cell, it expands the cell size again. (yes, I have turned off word wrap) How can I set a fixed width so the cells don't change size each time I add data to a cell? Thanks.
Single Portal for Multiple Apps
Hello, I'm just getting started with Zoho and I'm very overwhelmed. I am currently using the free trial of Zoho One, but if I can figure it out, I intend to upgrade to the paid version. Zoho One, of course, gives me access to an entire suite of services/applications. One of the things I'd like to do is have a single place for clients (customers?) to log in and view current projects, invoices, contact information, etc. A single login for my clients. A single portal. I've come across documentation
【開催報告】 大阪 ユーザー交流会 2025/11/20(木)Zoho CRM Plus 活用のアイデアとデータの“見える化”
皆さま、こんにちは。コミュニティチームの中野です。 11/20(木)に、大阪 ユーザー交流会を開催しました。本投稿では、その様子をお届けします。 当日の登壇資料などもこちらに共有しますので、参加できなかった皆さまもご参照ください。 (Zoho 社員セッションの登壇資料については、11/28(金)に開催予定の東京回の開催報告で共有いたします) 今年2回目の開催となる大阪 ユーザー交流会では、株式会社KDDIウェブコミュニケーションズ 山田さんによる Zoho CRM Plus の事例セッションのほか、「Zoho
Every rating counts: Shaping customer experience
We are back to that beautiful time of the year. It is the season to reflect, be thankful, and appreciate everything that has happened throughout the year. Thanksgiving is a time we connect with our family, friends, and relatives to strengthen relationships,
How to remove duplicate contacts
Custom Field for Subscription
Hi, I can't find a way to add a custom field (to contain a license key generated from our software) against a subscription? Is the only place to add this information in the Invoice module (as custom field for invoice)? When a customer views his subscription via the customer portal, there appears no way to display a license key for them? The invoice is not the natural place to store a license key for a particular subscription, so where else can this be stored and displayed?
Custom View and Custom Fields on Zoho Books
Hi, I have some custom fields on Estimates and Invoices. I also use Custom Views so I can have a lot of information at a glance. I want to include my custom fields as columns in my custom views of estimates / invoice, but it looks like is not possible.
Dropdown data depends on filters in another field.
In my quote form I have a lookup field called Reseller that pulls from Accounts. I would like it to pull from Accounts, but only those accounts with an account field 'Type' where that is 'Reseller'. Does anyone know a way to do this? Similarly, I'd like
Is it possible to adjust the web browser tab title (when a ZoHo Desk ticket is opened)
Hi All, When I open a ZoHo Desk ticket in a web browser, the tab title (text that appears at the top of the browser tab) uses the logic: *company icon picture* (xxxx) #ticket number - company name See below (highlighted in red) for reference. Company
Collections Management: #7 Common Mistakes during Payment Collection
Payment collection may appear straightforward in most cases. Still, as your customer base expands and transaction volume increases, it becomes clear that even small inefficiencies can lead to delayed payments, increased support load, or even revenue loss.
Rename Record Summary PDF in SendMail task
So I've been tasked with renaming a record summary PDF to be sent as part of a sendmail task. Normally I would offer the manual solution, a user exports the PDF and uploads it to a file upload field, however this is not acceptable to the client in this
Text/SMS With Zoho Desk
Hi Guys- Considering using SMS to get faster responses from customers that we are helping. Have a bunch of questions; 1) Which provider is better ClickaTell or Screen Magic. Screen Magic seems easier to setup, but appears to be 2x as expensive for United States. I cannot find the sender id for Clickatell to even complete the configuration. 2) Can customer's reply to text messages? If so are responses linked back to the zoho ticket? If not, how are you handling this, a simple "DO NOT REPLY" as
Custom Field in Zoho Projects pulling into Analytics
We have a client that we have built our their new business process using Zoho Projects, and we have build a lot of custom fields with their their Projects where they are capturing specific data points that we want to be able to track and pull data, as
Marketer's Space - Holiday season email marketing tips you should know
Hello Marketers! Welcome back to another post in Marketer's Space! 'Tis the season—that time of the year everyone eagerly anticipates. While most look forward to relaxing, marketers will be super-busy from late November to early January. Mistakes can
Zia Competitor Alerts made easy with Zia's suggestions
Hi everyone, In addition to the existing manually added competitors, Zia will now find your competitors for you - instantly. Earlier, you had to identify competitors through research manually, support tickets, or tradeshows—a time-consuming process that
Add Custom Field Inside Parts Section
How to Add Custom Field Inside Parts Section in Workorder like Category and Sub- Category
Zoho CRM Community Digest October 2025 | Part 2
Hello Everyone! From new mobile capabilities and smarter integrations to real-world workflow fixes and developer insights, all the highlights from the second half of October is covered right here. Let’s dive in. Product Updates: Zoho CRM Mobile Updates:
Understanding Zoho Contracts
Effective contract management relies on systems that are structured, organized, and reliable. Every feature, workflow, rule, and restriction in Zoho Contracts are designed the way they are to ensure consistency, compliance, and control across every stage
Next Page