{"id":348491,"date":"2026-05-12T12:39:17","date_gmt":"2026-05-12T12:39:17","guid":{"rendered":"https:\/\/experlogix.com\/?p=348491"},"modified":"2026-10-20T18:00:20","modified_gmt":"2026-10-20T18:00:20","slug":"salesforce-cpq-threshold-based-approvals-discount-guardrails","status":"publish","type":"post","link":"https:\/\/experlogix.com\/es\/salesforce-cpq-threshold-based-approvals-discount-guardrails\/","title":{"rendered":"Upgrade from Salesforce CPQ and Get Discount Guardrails That Route Themselves: Threshold-Based Approvals in CPQ"},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.9&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_row _builder_version=&#8221;4.27.9&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.9&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.9&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;]<\/p>\n<style><!-- [et_pb_line_break_holder] -->.xpl-article{container-type:inline-size;--xpl-navy:#0C214C;--xpl-rust:#D94923;--xpl-soft:#F8FBFF;--xpl-ice:#F3F8FD;--xpl-border:#DCE6F2;color:#0C214C;font-size:1rem;line-height:1.68;}<!-- [et_pb_line_break_holder] -->.xpl-article *,.xpl-article *::before,.xpl-article *::after{box-sizing:border-box;}<!-- [et_pb_line_break_holder] -->.xpl-article p{font-size:1rem;line-height:1.68;color:#0C214C;margin:0 0 1.05rem;}<!-- [et_pb_line_break_holder] -->.xpl-article a{color:#0C214C;font-weight:600;text-decoration:underline;text-decoration-color:#9EB9DD;text-decoration-thickness:1px;text-underline-offset:3px;}<!-- [et_pb_line_break_holder] -->.xpl-article a:hover{text-decoration-color:#0C214C;}<!-- [et_pb_line_break_holder] -->.xpl-article a:focus-visible{outline:3px solid #D94923;outline-offset:3px;border-radius:3px;}<!-- [et_pb_line_break_holder] -->.xpl-article h2{color:#0C214C;font-size:1.72rem;line-height:1.24;margin:0 0 1rem;padding:0;border:0!important;text-decoration:none!important;box-shadow:none!important;}<!-- [et_pb_line_break_holder] -->.xpl-article h3{color:#0C214C;font-size:1.2rem;line-height:1.34;margin:0 0 .55rem;padding:0;border:0;text-decoration:none;}<!-- [et_pb_line_break_holder] -->.xpl-article ul,.xpl-article ol{margin:.8rem 0 1.2rem;padding-left:1.25rem;}<!-- [et_pb_line_break_holder] -->.xpl-article li{color:#0C214C;margin:0 0 .5rem;}<!-- [et_pb_line_break_holder] -->.xpl-article li::marker{color:#5879A7;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-intro{margin:0 0 1.5rem;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-intro p:first-child{font-size:1.08rem;line-height:1.65;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-section{margin:2.35rem 0;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-section> :last-child{margin-bottom:0;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-section--soft{background:#F3F8FD;border-radius:14px;padding:1.45rem 1.55rem;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-section--soft h2{margin-top:0;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-section--bottom{background:#F7FAFE;border-radius:14px;padding:1.5rem 1.6rem;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-section--bottom h2{margin-top:0;}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* Compact TL;DR: soft background, no orange rail, one marker system. *\/<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-tldr{background:#F3F8FD;border:1px solid #DCE6F2;border-radius:12px;padding:1rem;margin:1.45rem 0 2rem;box-shadow:none;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-tldr summary{cursor:pointer;list-style:none;font-size:1rem;line-height:1.25;font-weight:700;color:#0C214C;display:flex;align-items:center;justify-content:space-between;gap:1rem;margin:0;padding:0;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-tldr summary::-webkit-details-marker{display:none;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-tldr summary::after{content:\"+\";color:#0C214C;font-size:1.15rem;line-height:1;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-tldr[open] summary::after{content:\"\u2212\";}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-tldr[open] summary{margin-bottom:.7rem;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-tldr__body{padding:0;margin:0;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-tldr ul{list-style:none!important;padding:0!important;margin:0!important;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-tldr li{list-style:none!important;position:relative;padding:0 0 0 1rem!important;margin:0 0 .48rem!important;font-size:.9rem!important;line-height:1.48!important;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-tldr li::marker{content:\"\";}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-tldr li::before{content:\"\";position:absolute;left:0;top:.66em;width:.38rem;height:.38rem;background:#7EA2D3;border-radius:50%;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-tldr li:last-child{margin-bottom:0!important;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-tldr li p,.xpl-article .xpl-tldr li a,.xpl-article .xpl-tldr li strong{font-size:.9rem!important;line-height:1.48!important;}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* Editorial grids: varied soft surfaces, no orange rails, no hard shadows. *\/<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-card-grid,.xpl-article .xpl-step-grid{list-style:none!important;padding:0!important;margin:1.15rem 0 1.35rem;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.9rem;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-card-grid>li,.xpl-article .xpl-step-grid>li{list-style:none!important;margin:0!important;background:#F3F8FD;border:1px solid #DCE6F2;border-radius:12px;padding:1rem 1.08rem;box-shadow:none!important;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-card-grid>li:nth-child(even){background:#FAFCFF;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-section--soft .xpl-card-grid>li,.xpl-article .xpl-section--soft .xpl-step-grid>li,.xpl-article .xpl-section--bottom .xpl-card-grid>li{background:#fff;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-section--soft .xpl-card-grid>li:nth-child(even),.xpl-article .xpl-section--bottom .xpl-card-grid>li:nth-child(even){background:#F9FBFE;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-card-grid>li::marker,.xpl-article .xpl-step-grid>li::marker{content:\"\";}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-card-grid--stack{grid-template-columns:1fr;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-card-grid>li:last-child:nth-child(odd):not(:first-child){grid-column:1\/-1;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-step-grid{counter-reset:xplstep;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-step-grid>li{counter-increment:xplstep;position:relative;padding-left:3.2rem;min-height:4.1rem;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-step-grid>li::before{content:counter(xplstep);position:absolute;left:1rem;top:1rem;width:1.65rem;height:1.65rem;border-radius:7px;background:#0C214C;color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.84rem;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-list-box{list-style:none!important;padding:1rem 1.1rem!important;margin:1rem 0 1.3rem;background:#F3F8FD;border:1px solid #DCE6F2;border-radius:12px;box-shadow:none!important;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-list-box>li{list-style:none!important;position:relative;margin:0!important;padding:.58rem 0 .58rem 1rem;border-bottom:1px solid #DCE6F2;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-list-box>li:last-child{border-bottom:0;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-list-box>li::before{content:\"\";position:absolute;left:0;top:1.15rem;width:5px;height:5px;border-radius:50%;background:#5879A7;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-list-box>li::marker{content:\"\";}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.xpl-article .xpl-subgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;margin:1.15rem 0 1.25rem;align-items:stretch;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-subcard{background:#F3F8FD;border:1px solid #DCE6F2;border-radius:12px;padding:1.08rem 1.15rem;box-shadow:none!important;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-subcard:nth-child(even){background:#fff;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-section--soft .xpl-subcard{background:#fff;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-section--soft .xpl-subcard:nth-child(even){background:#F9FBFE;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-subcard:last-child:nth-child(odd):not(:first-child){grid-column:1\/-1;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-subcard h3{margin:0 0 .55rem!important;padding:0!important;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-subcard> :last-child{margin-bottom:0;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-subsection{background:#F3F8FD;border:1px solid #DCE6F2;border-radius:12px;padding:1.05rem 1.15rem;margin:1.15rem 0;box-shadow:none!important;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-subsection h3{margin-top:0!important;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-callout{background:#F8FBFF;border:1px solid #DCE6F2;border-radius:12px;padding:1rem 1.15rem;margin:1.15rem 0;box-shadow:none!important;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-callout> :last-child{margin-bottom:0;}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* A02 approved decision-map motion scene. *\/<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-motion-scene{max-width:760px;margin:0 auto;background:#fff;border:1px solid #DCE6F2;border-radius:16px;padding:1.1rem;overflow:hidden;box-shadow:none!important;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-motion-kicker{display:block;font-size:.76rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;margin-bottom:.25rem;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-motion-title{display:block;font-size:1.12rem;font-weight:700;line-height:1.3;margin-bottom:.75rem;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-motion-start{display:flex;align-items:center;justify-content:center;min-height:46px;padding:.6rem 1rem;border-radius:10px;background:#0C214C;color:#fff!important;-webkit-text-fill-color:#fff!important;font-weight:700;margin-bottom:.8rem;animation:xplStartPulse 7s ease-in-out infinite;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-motion-track{display:grid;gap:.65rem;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-motion-path{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:.7rem;padding:.7rem .85rem;border:1px solid #DCE6F2;border-radius:10px;background:#F3F8FD;opacity:.38;transform:translateY(4px);animation:xplPathReveal 7s ease-in-out infinite;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-motion-path:nth-child(2){animation-delay:1.1s;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-motion-path:nth-child(3){animation-delay:2.2s;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-motion-path--accent{border-color:#C9DAEF;background:#F8FBFF;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-motion-num{display:inline-flex;align-items:center;justify-content:center;width:1.85rem;height:1.85rem;border-radius:8px;background:#0C214C;color:#fff!important;-webkit-text-fill-color:#fff!important;font-weight:700;font-size:.86rem;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-motion-path--accent .xpl-motion-num{background:#5879A7;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-motion-note{font-size:.9rem;line-height:1.45;margin:.65rem 0 0;}<!-- [et_pb_line_break_holder] -->@keyframes xplPathReveal{0%,12%,100%{opacity:.38;transform:translateY(4px)}22%,58%{opacity:1;transform:translateY(0)}72%{opacity:.55;transform:translateY(0)}}<!-- [et_pb_line_break_holder] -->@keyframes xplStartPulse{0%,100%{transform:scale(1)}12%{transform:scale(1.01)}24%{transform:scale(1)}}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* Illustration and motion placements. *\/<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-illustration{width:100%;max-width:760px;margin:2rem auto;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-illustration img{display:block;width:100%;height:auto;border-radius:14px;border:1px solid #DCE6F2;box-shadow:none!important;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-animation-wrap{width:100%;max-width:800px;margin:2rem auto;overflow:hidden;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-animation-wrap>div{width:100%!important;max-width:760px!important;margin-left:auto!important;margin-right:auto!important;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-animation-wrap svg{max-width:100%;height:auto;}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* FAQ: calm contained section, white questions, no orange rails. *\/<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-faq-section{margin:2.45rem 0 1.8rem;background:#F3F8FD;border-radius:14px;padding:1.35rem 1.4rem;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-faq-section h2{margin-bottom:.8rem;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-faq-list{display:grid;grid-template-columns:1fr;gap:.65rem;margin-top:0;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-faq-item{border:1px solid #DCE6F2;border-radius:10px;background:#fff;padding:0;overflow:hidden;box-shadow:none!important;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-faq-item:nth-child(even){background:#FAFCFF;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-faq-item summary{cursor:pointer;list-style:none;display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding:.92rem 1rem;font-weight:700;font-size:1rem;line-height:1.4;color:#0C214C;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-faq-item summary::-webkit-details-marker{display:none;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-faq-item summary::after{content:\"+\";flex:0 0 auto;color:#5879A7;font-size:1.15rem;line-height:1.2;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-faq-item[open] summary::after{content:\"\u2212\";}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-faq-answer{padding:0 1rem .95rem;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-faq-answer> :last-child{margin-bottom:0;}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* Bottom CTA: pale blue\/white, no orange underline, no shadows. *\/<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-cta{position:relative;overflow:hidden;isolation:isolate;background:linear-gradient(135deg,#FFFFFF 0%,#F3F8FD 100%);border:1px solid #DCE6F2;border-radius:16px;padding:1.65rem 1.75rem;margin:2.5rem 0 0;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1.2rem 1.8rem;align-items:center;text-align:left;box-shadow:none!important;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-cta::after{content:\"\";position:absolute;width:210px;height:210px;border-radius:50%;right:-110px;bottom:-135px;background:rgba(126,162,211,.10);z-index:0;pointer-events:none;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-cta>*{position:relative;z-index:1;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-cta-heading{display:block!important;color:#0C214C!important;-webkit-text-fill-color:#0C214C!important;font-size:1.48rem!important;line-height:1.25!important;font-weight:700!important;margin:0 0 .48rem!important;text-align:left!important;border:0!important;text-decoration:none!important;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-cta p{color:#0C214C!important;-webkit-text-fill-color:#0C214C!important;margin:0!important;max-width:720px!important;text-align:left!important;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-cta a.xpl-btn,.xpl-article .xpl-cta a.xpl-btn:link,.xpl-article .xpl-cta a.xpl-btn:visited{display:inline-flex;align-items:center;justify-content:center;background:#0C214C!important;color:#fff!important;-webkit-text-fill-color:#fff!important;text-decoration:none!important;font-weight:700;font-size:1rem;line-height:1.4;padding:.35rem 1.8rem!important;border-radius:50px!important;border:2px solid #0C214C!important;box-shadow:none!important;transform:none!important;white-space:nowrap;transition:background-color .2s ease,border-color .2s ease;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-cta a.xpl-btn:hover,.xpl-article .xpl-cta a.xpl-btn:focus,.xpl-article .xpl-cta a.xpl-btn:active{background:#18386F!important;border-color:#18386F!important;color:#fff!important;-webkit-text-fill-color:#fff!important;box-shadow:none!important;transform:none!important;}<!-- [et_pb_line_break_holder] -->.xpl-article .xpl-cta a.xpl-btn:focus-visible{outline:3px solid #7EA2D3;outline-offset:3px;}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->@media(max-width:800px){<!-- [et_pb_line_break_holder] --> .xpl-article .xpl-card-grid,.xpl-article .xpl-step-grid,.xpl-article .xpl-subgrid{grid-template-columns:1fr;}<!-- [et_pb_line_break_holder] --> .xpl-article .xpl-card-grid>li:last-child:nth-child(odd):not(:first-child),.xpl-article .xpl-subcard:last-child:nth-child(odd):not(:first-child){grid-column:auto;}<!-- [et_pb_line_break_holder] --> .xpl-article .xpl-cta{grid-template-columns:1fr;align-items:start;}<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media(max-width:600px){<!-- [et_pb_line_break_holder] --> .xpl-article h2{font-size:1.45rem;}<!-- [et_pb_line_break_holder] --> .xpl-article h3{font-size:1.12rem;}<!-- [et_pb_line_break_holder] --> .xpl-article .xpl-section--soft,.xpl-article .xpl-section--bottom{padding:1.15rem;}<!-- [et_pb_line_break_holder] --> .xpl-article .xpl-faq-section{padding:1.1rem;}<!-- [et_pb_line_break_holder] --> .xpl-article .xpl-cta{padding:1.35rem 1.2rem;}<!-- [et_pb_line_break_holder] --> .xpl-article .xpl-illustration,.xpl-article .xpl-animation-wrap{max-width:100%;margin:1.55rem auto;}<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media(prefers-reduced-motion:reduce){.xpl-article *{transition:none!important;animation-duration:.01ms!important;animation-iteration-count:1!important;}}<!-- [et_pb_line_break_holder] --><\/style>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<article class=\"xpl-article xpl-article--cpq xpl-redesign-v9\" data-article-id=\"A21\"><!-- [et_pb_line_break_holder] --><\/p>\n<div class=\"xpl-intro\"><pee>Discounting is where margin quietly leaks, and approvals are where good deals quietly stall. If you run Salesforce CPQ today, you have probably built a CPQ approval workflow that works, but that now depends on a mix of rules, custom fields, and people who know which exceptions matter. This article explains what threshold-based approvals should do, how to evaluate your current setup, and what to look for if you decide to change the quoting layer.<\/pee><\/div>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<details class=\"xpl-tldr\" open>\n<summary>TL;DR<\/summary>\n<div class=\"xpl-tldr__body\">\n<ul><!-- [et_pb_line_break_holder] --><\/p>\n<li>A modern CPQ approval workflow applies discount guardrails automatically: standard deals pass straight through, and only quotes that cross a defined threshold route for review.<\/li>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<li>Salesforce CPQ can enforce approval thresholds, and it does this well for moderate complexity. The strain shows up when guardrails span product mix, margin, geography, and layered discounts, and when every policy change becomes an administrator or developer project.<\/li>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<li>Salesforce CPQ is end of sale as of March 2025, not end of life. Existing customers can keep using it, renew, add users, and get support. There is no announced end-of-life date, so this is a planning decision, not an emergency.<\/li>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<li>Experlogix CPQ defines discount floors, ceilings, and stacking rules, evaluates them in real time during configuration, routes exceptions automatically to the right approver, and records every selection and approval decision for audit.<\/li>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<li>Bottom line: audit which approvals actually protect margin, which are habit, and whether your business users can change a threshold without a dev ticket. That audit tells you whether your CPQ approval workflow needs rebuilding or replacing.<\/li>\n<p><!-- [et_pb_line_break_holder] --><\/ul>\n<\/div>\n<\/details>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<figure class=\"xpl-illustration\"><img alt=\"\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/experlogix.com\/wp-content\/uploads\/salesforce-cpq-threshold-based-approvals-discount-guardrails-illustration-1.webp\"\/><\/figure>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<section class=\"xpl-section\">\n<h2>What Threshold-Based Approvals Actually Mean<\/h2>\n<pee>Threshold-based approvals mean the system, not the salesperson, decides when a deal needs review. You define the conditions that require sign-off, such as margin below a floor, a discount above a ceiling, a non-standard product, a particular geography or customer type, or an SLA commitment. When a quote trips a condition, it routes to the named approver. When it trips nothing, it goes straight through.<\/pee><pee>That last part matters as much as the first. Discount guardrails fail when every quote needs a human look, because approvers stop reading carefully and reps start pre-negotiating around the process. CPQ (configure, price, quote) governance works when the exception path is genuinely exceptional.<\/pee><pee>Good guardrails have four parts:<\/pee>\n<ul class=\"xpl-card-grid\"><!-- [et_pb_line_break_holder] --><\/p>\n<li>Floors and ceilings that cap how far a price can move<\/li>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<li>Stacking rules that govern how multiple discounts combine on the same line or bundle<\/li>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<li>Thresholds that trigger routing only when a quote crosses them<\/li>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<li>An audit trail recording who approved what, when, and why<\/li>\n<p><!-- [et_pb_line_break_holder] --><\/ul>\n<\/section>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<section class=\"xpl-section\">\n<h2>Where Salesforce CPQ Approval Thresholds Start to Strain<\/h2>\n<pee>Salesforce CPQ supports approval thresholds and multi-step routing, and for low to moderate complexity it is a reasonable tool. The friction appears as discount policy grows more dimensional than the configuration model was designed to express.<\/pee>\n<div class=\"xpl-subgrid\">\n<div class=\"xpl-subcard\">\n<h3>Policy complexity outgrows the rules layer<\/h3>\n<pee>Most teams start with a simple rule: discounts over a set percentage go to the sales manager. Then finance adds a margin floor. Then a region needs different thresholds. Then bundled deals need a blended margin test rather than a line-level one. Each addition is workable on its own; together they become a web of product rules, price rules, custom fields, and Quote Calculator Plugin (QCP) customizations that only a few people fully understand.<\/pee><\/div>\n<div class=\"xpl-subcard\">\n<h3>Change requests queue behind specialists<\/h3>\n<pee>The practical cost is not runtime behavior, it is change velocity. When a threshold lives inside a managed package configuration or a QCP script, adjusting it for a new fiscal year or a new product line often means a developer, a sandbox, and a regression test cycle. Deal desk teams who own pricing policy end up filing tickets to change their own policy.<\/pee><\/div>\n<div class=\"xpl-subcard\">\n<h3>Bundled deals hide margin<\/h3>\n<pee>Line-level discount checks can pass while the bundle as a whole falls below target margin, especially when services, labor, or recurring revenue sit alongside hardware on the same quote. If your approval logic evaluates lines in isolation, your discount guardrails are measuring the wrong thing. Reps can catch some of this exposure before submission with <a href=\"https:\/\/experlogix.com\/salesforce-cpq-what-if-quoting\/\">what-if quoting<\/a>, but the approval logic itself still needs to test margin at the level the business actually cares about.<\/pee><\/div>\n<div class=\"xpl-subcard\">\n<h3>Feature development has moved on<\/h3>\n<pee>Salesforce stopped selling Salesforce CPQ to new customers in March 2025. Existing customers can continue to use it, renew, add users, and receive support, and Salesforce has not announced an end-of-life date. But strategic investment has moved to Revenue Cloud Advanced, now part of Agentforce Revenue Management, and Salesforce CPQ is no longer receiving meaningful new feature development. Approval logic you build today is logic you maintain yourself.<\/pee><\/div>\n<\/div>\n<\/section>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<div class=\"xpl-animation-wrap\">\n<style><!-- [et_pb_line_break_holder] -->.xg-wrap{max-width:440px;margin:0 auto;font-family:\"Object Sans\",system-ui,-apple-system,\"Segoe UI\",Arial,sans-serif}<!-- [et_pb_line_break_holder] -->.xg-wrap svg{display:block;width:100%;height:auto;background:#F3F8FD;border-radius:14px}<!-- [et_pb_line_break_holder] -->.xg-t{fill:#0C214C;font-weight:700;font-size:16px}<!-- [et_pb_line_break_holder] -->.xg-s{fill:#0C214C;font-size:12px}<!-- [et_pb_line_break_holder] -->.xg-l{fill:#0C214C;font-size:11px;font-weight:600}<!-- [et_pb_line_break_holder] -->.xg-w{fill:#F3F8FD;font-size:11px;font-weight:700}<!-- [et_pb_line_break_holder] -->.xg-track{fill:none;stroke:#8BB9FC;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}<!-- [et_pb_line_break_holder] -->.xg-floor{stroke:#F46134;stroke-width:2;stroke-dasharray:5 4}<!-- [et_pb_line_break_holder] -->.xg-pulse{animation:xgP .9s ease-in-out 2}<!-- [et_pb_line_break_holder] -->@keyframes xgP{50%{opacity:.35}}<!-- [et_pb_line_break_holder] -->.xg-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}<!-- [et_pb_line_break_holder] --><\/style>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<div class=\"xg-wrap\"><!-- [et_pb_line_break_holder] --><svg aria-labelledby=\"xgTitle xgDesc\" role=\"img\" viewbox=\"0 0 440 340\"><!-- [et_pb_line_break_holder] --><title id=\"xgTitle\">Discount guardrails that route themselves<\/title><!-- [et_pb_line_break_holder] --><desc id=\"xgDesc\">Discounts stack onto a quote price. When stacked discounts stay above the margin floor, the quote passes straight through. When they push the price below the floor, the quote routes to an approver, then continues. Every decision is added to the audit trail.<\/desc><!-- [et_pb_line_break_holder] --><text class=\"xg-t\" x=\"24\" y=\"38\">Only exceptions route<\/text><!-- [et_pb_line_break_holder] --><text class=\"xg-s\" id=\"xgStatus\" x=\"24\" y=\"60\">Stacking discounts\u2026<\/text><!-- [et_pb_line_break_holder] --><text class=\"xg-l\" x=\"292\" y=\"38\">Audit trail<\/text><!-- [et_pb_line_break_holder] --><g id=\"xgAudit\"><\/g><!-- [et_pb_line_break_holder] --><rect fill=\"#8BB9FC\" height=\"170\" opacity=\".35\" rx=\"4\" width=\"48\" x=\"56\" y=\"100\"><\/rect><!-- [et_pb_line_break_holder] --><rect fill=\"#0350D8\" height=\"170\" id=\"xgCol\" rx=\"4\" width=\"48\" x=\"56\" y=\"100\"><\/rect><!-- [et_pb_line_break_holder] --><g id=\"xgChips\"><\/g><!-- [et_pb_line_break_holder] --><line class=\"xg-floor\" id=\"xgFloor\" x1=\"44\" x2=\"116\" y1=\"190\" y2=\"190\"><\/line><!-- [et_pb_line_break_holder] --><text class=\"xg-l\" x=\"24\" y=\"194\">Floor<\/text><!-- [et_pb_line_break_holder] --><text class=\"xg-l\" x=\"56\" y=\"290\">Price<\/text><!-- [et_pb_line_break_holder] --><path class=\"xg-track\" d=\"M104 230 L372 230\"><\/path><!-- [et_pb_line_break_holder] --><path class=\"xg-track\" d=\"M214 248 L214 300 L390 300 L390 248\"><\/path><!-- [et_pb_line_break_holder] --><text class=\"xg-l\" x=\"262\" y=\"220\">Auto-pass<\/text><!-- [et_pb_line_break_holder] --><rect fill=\"#0C214C\" height=\"26\" id=\"xgGate\" rx=\"4\" transform=\"rotate(45 214 230)\" width=\"26\" x=\"201\" y=\"217\"><\/rect><!-- [et_pb_line_break_holder] --><text class=\"xg-l\" x=\"186\" y=\"206\">Threshold<\/text><!-- [et_pb_line_break_holder] --><rect fill=\"#0C214C\" height=\"28\" id=\"xgAppr\" rx=\"14\" width=\"72\" x=\"268\" y=\"286\"><\/rect><!-- [et_pb_line_break_holder] --><text class=\"xg-w\" text-anchor=\"middle\" x=\"304\" y=\"304\">Approver<\/text><!-- [et_pb_line_break_holder] --><circle cx=\"390\" cy=\"230\" fill=\"#0350D8\" id=\"xgEnd\" r=\"18\"><\/circle><!-- [et_pb_line_break_holder] --><path d=\"M382 230 l6 6 l10 -12\" fill=\"none\" stroke=\"#F3F8FD\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"3\"><\/path><!-- [et_pb_line_break_holder] --><text class=\"xg-l\" text-anchor=\"middle\" x=\"390\" y=\"202\">Quote out<\/text><!-- [et_pb_line_break_holder] --><circle cx=\"104\" cy=\"230\" fill=\"#F7D119\" id=\"xgTok\" opacity=\"0\" r=\"9\" stroke=\"#0C214C\" stroke-width=\"2\"><\/circle><!-- [et_pb_line_break_holder] --><\/svg><!-- [et_pb_line_break_holder] --><pee aria-live=\"polite\" class=\"xg-sr\" id=\"xgLive\"><\/pee><!-- [et_pb_line_break_holder] --><\/div>\n<p><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->(function(){<!-- [et_pb_line_break_holder] -->  var NS=\"http:\/\/www.w3.org\/2000\/svg\";<!-- [et_pb_line_break_holder] -->  var $=function(id){return document.getElementById(id);};<!-- [et_pb_line_break_holder] -->  var col=$(\"xgCol\"),chips=$(\"xgChips\"),tok=$(\"xgTok\"),gate=$(\"xgGate\"),appr=$(\"xgAppr\"),<!-- [et_pb_line_break_holder] -->      floor=$(\"xgFloor\"),status=$(\"xgStatus\"),audit=$(\"xgAudit\"),endN=$(\"xgEnd\"),live=$(\"xgLive\");<!-- [et_pb_line_break_holder] -->  var TOP=100,BASE=270,CH=34,FLOOR=190,auditN=0,cycle=0;<!-- [et_pb_line_break_holder] -->  var reduce=window.matchMedia&&window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function wait(ms){return new Promise(function(r){setTimeout(r,ms);});}<!-- [et_pb_line_break_holder] -->  function ease(t){return t<.5?2*t*t:1-Math.pow(-2*t+2,2)\/2;}<!-- [et_pb_line_break_holder] -->  function tween(ms,fn){return new Promise(function(r){var s=null;function f(n){if(s===null)s=n;var t=Math.min((n-s)\/ms,1);fn(ease(t));if(t<1)requestAnimationFrame(f);else r();}requestAnimationFrame(f);});}<!-- [et_pb_line_break_holder] -->  function mk(tag,a){var e=document.createElementNS(NS,tag);for(var k in a)e.setAttribute(k,a[k]);return e;}<!-- [et_pb_line_break_holder] -->  function pulse(el){el.classList.remove(\"xg-pulse\");void el.getBoundingClientRect();el.classList.add(\"xg-pulse\");}<!-- [et_pb_line_break_holder] -->  function setTop(y){col.setAttribute(\"y\",y);col.setAttribute(\"height\",BASE-y);}<!-- [et_pb_line_break_holder] -->  function say(t){status.textContent=t;live.textContent=t;}<!-- [et_pb_line_break_holder] -->  function move(pts,ms){<!-- [et_pb_line_break_holder] -->    var segs=[],len=0;for(var i=1;i<pts.length;i++){var d=Math.hypot(pts[i][0]-pts[i-1][0],pts[i][1]-pts[i-1][1]);segs.push(d);len+=d;}<!-- [et_pb_line_break_holder] -->    return tween(ms,function(t){var d=t*len,i=0;while(i<segs.length-1&#038;&#038;d>segs[i]){d-=segs[i];i++;}<!-- [et_pb_line_break_holder] -->      var p=segs[i]?Math.min(d\/segs[i],1):1,a=pts[i],b=pts[i+1];tok.setAttribute(\"cx\",a[0]+(b[0]-a[0])*p);tok.setAttribute(\"cy\",a[1]+(b[1]-a[1])*p);});<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function log(ex){<!-- [et_pb_line_break_holder] -->    if(auditN>=8){while(audit.firstChild)audit.removeChild(audit.firstChild);auditN=0;}<!-- [et_pb_line_break_holder] -->    var r=mk(\"rect\",{x:292+auditN*16,y:48,width:12,height:12,rx:3,fill:ex?\"#F46134\":\"#0350D8\",opacity:0});<!-- [et_pb_line_break_holder] -->    audit.appendChild(r);auditN++;return tween(300,function(t){r.setAttribute(\"opacity\",t);});<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function drop(i){<!-- [et_pb_line_break_holder] -->    var y=TOP+i*CH,c=mk(\"rect\",{x:58,y:TOP-40,width:44,height:CH-4,rx:4,fill:\"#F7D119\"});<!-- [et_pb_line_break_holder] -->    chips.appendChild(c);<!-- [et_pb_line_break_holder] -->    var from=+col.getAttribute(\"y\");<!-- [et_pb_line_break_holder] -->    return tween(450,function(t){c.setAttribute(\"y\",(TOP-40)+(y+2-(TOP-40))*t);setTop(from+(y+CH-from)*t);});<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function reset(){while(chips.firstChild)chips.removeChild(chips.firstChild);setTop(TOP);tok.setAttribute(\"opacity\",0);<!-- [et_pb_line_break_holder] -->    tok.setAttribute(\"cx\",104);tok.setAttribute(\"cy\",230);gate.setAttribute(\"fill\",\"#0C214C\");appr.setAttribute(\"fill\",\"#0C214C\");}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  async function run(){<!-- [et_pb_line_break_holder] -->    for(;;){<!-- [et_pb_line_break_holder] -->      var n=(cycle%2===0)?2:3,ex=TOP+n*CH>FLOOR;cycle++;<!-- [et_pb_line_break_holder] -->      reset();say(\"Stacking discountsu2026\");await wait(500);<!-- [et_pb_line_break_holder] -->      for(var i=0;i<n;i++){await drop(i);await wait(180);}<!-- [et_pb_line_break_holder] -->      if(ex){pulse(floor);}<!-- [et_pb_line_break_holder] -->      tok.setAttribute(\"opacity\",1);<!-- [et_pb_line_break_holder] -->      await move([[104,230],[214,230]],650);<!-- [et_pb_line_break_holder] -->      if(!ex){<!-- [et_pb_line_break_holder] -->        say(\"Within policy: passes instantly\");<!-- [et_pb_line_break_holder] -->        await move([[214,230],[372,230]],800);<!-- [et_pb_line_break_holder] -->      }else{<!-- [et_pb_line_break_holder] -->        gate.setAttribute(\"fill\",\"#F46134\");say(\"Below floor: routes for approval\");<!-- [et_pb_line_break_holder] -->        await move([[214,230],[214,300],[268,300]],700);<!-- [et_pb_line_break_holder] -->        appr.setAttribute(\"fill\",\"#0350D8\");pulse(appr);await move([[268,300],[304,300]],300);await wait(700);<!-- [et_pb_line_break_holder] -->        say(\"Approved and logged\");<!-- [et_pb_line_break_holder] -->        await move([[304,300],[390,300],[390,248]],750);<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->      tok.setAttribute(\"opacity\",0);pulse(endN);await log(ex);await wait(1300);<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if(reduce){<!-- [et_pb_line_break_holder] -->    for(var i=0;i<3;i++){chips.appendChild(mk(\"rect\",{x:58,y:TOP+i*CH+2,width:44,height:CH-4,rx:4,fill:\"#F7D119\"}));}<!-- [et_pb_line_break_holder] -->    setTop(TOP+3*CH);gate.setAttribute(\"fill\",\"#F46134\");appr.setAttribute(\"fill\",\"#0350D8\");<!-- [et_pb_line_break_holder] -->    tok.setAttribute(\"cx\",250);tok.setAttribute(\"cy\",300);tok.setAttribute(\"opacity\",1);<!-- [et_pb_line_break_holder] -->    status.textContent=\"Below floor: routes for approval\";<!-- [et_pb_line_break_holder] -->    [0,0,1,0].forEach(function(e,k){audit.appendChild(mk(\"rect\",{x:292+k*16,y:48,width:12,height:12,rx:3,fill:e?\"#F46134\":\"#0350D8\"}));});<!-- [et_pb_line_break_holder] -->  }else{run();}<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] --><\/script><\/div>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<section class=\"xpl-section xpl-section--soft\">\n<h2>Your Three Realistic Paths<\/h2>\n<pee>There are three honest options for teams on <a href=\"https:\/\/experlogix.com\/salesforce-cpq\/\">Salesforce CPQ<\/a>, and the right one depends on how much your approval policy actually changes.<\/pee>\n<ul class=\"xpl-card-grid\"><!-- [et_pb_line_break_holder] --><\/p>\n<li>Stay on Salesforce CPQ and tune what you have. This is sensible if your thresholds are stable, your catalog is moderate, and your deal desk is satisfied with current cycle times. You are supported, and nothing forces a move.<\/li>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<li>Reimplement on Revenue Cloud Advanced (RCA). Moving from Salesforce CPQ to RCA is a reimplementation, not an upgrade. The data model and configuration approach differ, so approval and pricing logic gets rebuilt and retested. If you want a broader revenue lifecycle platform inside the Salesforce ecosystem, that effort may be worth it.<\/li>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<li>Keep Salesforce CRM and replace the quoting layer. If the CRM is working fine and the quoting and approval engine is the constraint, you can change only the constraint.<\/li>\n<p><!-- [et_pb_line_break_holder] --><\/ul>\n<\/section>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<section class=\"xpl-section\">\n<h2>How Experlogix CPQ Handles Discount Guardrails and Routing<\/h2>\n<pee>Experlogix CPQ evaluates pricing and discount rules in real time during configuration. Standard deals pass instantly; exceptions route automatically to the appropriate approvers and stakeholders, without manual intervention.<\/pee><pee>On guardrails, you define ceilings, floors, and stacking rules that keep margins intact, so discounting flexibility does not turn into uncontrolled discounting. Approvals trigger only when thresholds are exceeded. Special pricing agreements (SPAs) are applied in concert with your CRM, and each quote&#8217;s use of the applicable agreement is documented and auditable, which reduces exposure to pricing disputes.<\/pee><pee>On routing, approval workflows can be configured to match your business structure, whether that means routing by product category, margin thresholds, geography, customer type, or SLA commitments. You can add as many levels as needed, and multi-level chains engage only when a quote actually requires them. Real-time notifications tell approvers what is waiting and tell reps where a deal stands.<\/pee><pee>On traceability, Experlogix CPQ records each configuration selection and decision, so you know who selected and approved what, when, and why. Approval outcomes are synchronized across ERP (enterprise resource planning) and CRM systems, so the record in Salesforce matches the quote.<\/pee><pee>On ownership, the Admin and Design Center gives business users <a href=\"https:\/\/experlogix.com\/salesforce-cpq-admin-day-one\/\">low-code administration<\/a> of rules, pricing, and workflows. Rules are created without programming knowledge, and calculations use the same formula syntax as Microsoft Excel. For a deal desk that adjusts thresholds each quarter, that is the difference between a configuration change and a development project.<\/pee><\/section>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<figure class=\"xpl-illustration\"><img alt=\"\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/experlogix.com\/wp-content\/uploads\/salesforce-cpq-threshold-based-approvals-discount-guardrails-illustration-2.webp\"\/><\/figure>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<section class=\"xpl-section\">\n<h2>Being Fair About Fit<\/h2>\n<pee>Threshold-based approvals are not a reason to change platforms on their own. If your catalog is simple, your discount policy is a single percentage ladder, and your approvals rarely change, Salesforce CPQ handles that today and will keep handling it. If your organization has already committed to an RCA reimplementation for billing and revenue reasons, rebuilding approvals there is part of a decision you have made for other reasons.<\/pee><pee>The case for changing the quoting layer gets stronger when discount policy is dimensional, when bundled deals put <a href=\"https:\/\/experlogix.com\/quote-products-services-subscriptions-one-deal\/\">products, services and recurring revenue on one quote<\/a> alongside labor, when approval changes queue behind specialists, and when deal desk cannot see a reliable audit trail of why a price was granted.<\/pee><\/section>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<section class=\"xpl-section xpl-section--bottom\">\n<h2>The Bottom Line on Threshold-Based Approvals in CPQ<\/h2>\n<pee>A CPQ approval workflow should do two things at once: keep margin inside policy and keep clean deals moving. Guardrails set in advance (floors, ceilings, stacking rules, and thresholds) handle the first. Automatic routing with real-time notification handles the second. An audit trail makes both defensible after the fact.<\/pee><pee>Salesforce CPQ remains supported, renewable, and adequate for moderate-complexity discount approvals, and no one is forcing you off it. What has changed is that the product is not advancing, so the burden of evolving your approval policy now sits entirely with your team. That is a manageable burden for stable policy and a growing one for policy that changes with every pricing cycle.<\/pee><pee>If you choose to change the quoting layer, look for guardrails evaluated during configuration rather than after submission, routing that engages only on exception, margin visibility across the whole bundle rather than line by line, synchronized approval outcomes in your CRM, and administration your deal desk can own without consultants.<\/pee><pee>Start with an audit. List every approval condition currently live in your Salesforce CPQ instance, mark which ones have actually stopped a bad deal in the last four quarters, note which ones require a developer to change, and measure how long an average exception sits in the queue. That one-page picture will tell you whether your discount guardrails need tuning or a different foundation.<\/pee><\/section>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<section class=\"xpl-faq-section\">\n<h2>FAQ<\/h2>\n<div class=\"xpl-faq-list\">\n<details class=\"xpl-faq-item\" open=\"\">\n<summary>How do threshold-based CPQ approvals protect margins?<\/summary>\n<div class=\"xpl-faq-answer\"><pee>They set the guardrails in advance. Discount floors, ceilings, and stacking rules define acceptable pricing, and approval triggers only when a quote crosses a threshold such as a margin floor. Standard quotes pass instantly, exceptions route to the right approver, and every pricing decision is logged. Reps keep their flexibility and finance keeps the policy.<\/pee><\/div>\n<\/details>\n<details class=\"xpl-faq-item\">\n<summary>What are discount guardrails in CPQ?<\/summary>\n<div class=\"xpl-faq-answer\"><pee>Discount guardrails are the rules that limit how far a price can move without review. They usually include floors and ceilings on price or discount, stacking rules for combined discounts, thresholds that trigger approval routing, and an audit trail of who approved each exception, when, and why.<\/pee><\/div>\n<\/details>\n<details class=\"xpl-faq-item\">\n<summary>What are discount stacking rules?<\/summary>\n<div class=\"xpl-faq-answer\"><pee>Stacking rules govern how multiple discounts combine on the same line or bundle, for example a volume break plus a promotional discount plus a negotiated account discount. Without them, individually reasonable discounts can compound into a price that falls below margin targets. Stacking rules cap or sequence those combinations so the final price stays within policy.<\/pee><\/div>\n<\/details>\n<details class=\"xpl-faq-item\">\n<summary>How should approval routing be configured by product, margin or region?<\/summary>\n<div class=\"xpl-faq-answer\"><pee>Define each condition that genuinely needs review, such as a product category, a margin threshold, a geography, a customer type, or an SLA commitment, and assign a named approver to each one. Add more approval levels only where the risk calls for them, so multi-level chains engage only on the quotes that need them. Then confirm that routing conditions are tested at the bundle level as well as the line level, and that your deal desk can adjust thresholds without a development cycle.<\/pee><\/div>\n<\/details>\n<\/div>\n<\/section>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<div class=\"xpl-cta\">\n<div class=\"xpl-cta-copy\"><span class=\"xpl-cta-heading\">Set Guardrails Once. Let Exceptions Route Themselves.<\/span><pee>Set Guardrails Once. Let Exceptions Route Themselves.<\/pee><\/div>\n<div class=\"xpl-cta-action\"><a class=\"xpl-btn\" href=\"https:\/\/experlogix.com\/demo\/\">Get a Demo<\/a><\/div>\n<\/div>\n<p><!-- [et_pb_line_break_holder] --><\/article>\n<p>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Discounting is where margin quietly leaks, and approvals are where good deals quietly stall. If you run Salesforce CPQ today, you have probably built a CPQ approval workflow that works, but that now depends on a mix of rules, custom fields, and people who know which exceptions matter. This article explains what threshold-based approvals should do, how to evaluate your current setup, and what to look for if you decide to change the quoting layer.<\/p>","protected":false},"author":1,"featured_media":348433,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[235],"tags":[],"xpl_cpq_related_topic":[188,186,184,200],"xpl_da_related_topic":[],"class_list":["post-348491","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-quoting-tools","xpl_cpq_related_topic-admin","xpl_cpq_related_topic-approvals","xpl_cpq_related_topic-pricing","xpl_cpq_related_topic-salesforce"],"acf":[],"_links":{"self":[{"href":"https:\/\/experlogix.com\/es\/wp-json\/wp\/v2\/posts\/348491","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/experlogix.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/experlogix.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/experlogix.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/experlogix.com\/es\/wp-json\/wp\/v2\/comments?post=348491"}],"version-history":[{"count":2,"href":"https:\/\/experlogix.com\/es\/wp-json\/wp\/v2\/posts\/348491\/revisions"}],"predecessor-version":[{"id":348600,"href":"https:\/\/experlogix.com\/es\/wp-json\/wp\/v2\/posts\/348491\/revisions\/348600"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/experlogix.com\/es\/wp-json\/wp\/v2\/media\/348433"}],"wp:attachment":[{"href":"https:\/\/experlogix.com\/es\/wp-json\/wp\/v2\/media?parent=348491"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/experlogix.com\/es\/wp-json\/wp\/v2\/categories?post=348491"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/experlogix.com\/es\/wp-json\/wp\/v2\/tags?post=348491"},{"taxonomy":"xpl_cpq_related_topic","embeddable":true,"href":"https:\/\/experlogix.com\/es\/wp-json\/wp\/v2\/xpl_cpq_related_topic?post=348491"},{"taxonomy":"xpl_da_related_topic","embeddable":true,"href":"https:\/\/experlogix.com\/es\/wp-json\/wp\/v2\/xpl_da_related_topic?post=348491"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}