Approvals

Pinion ships its own approval engine. It runs alongside (not on top of) Salesforce’s standard approval processes, and it knows about the things your quotes actually contain — products, bundle options, line aggregates, configuration draft state. You reach for Pinion approvals when a quote or opportunity has to clear a sign-off gate based on what the rep configured: a discount past a threshold, a margin under a floor, an enterprise SKU on the cart, a multi-year subscription over a certain total.

This section walks the model end to end. If you’re configuring a single rule, jump to Authoring a rule. If you’re auditing why a rule fired (or didn’t), see Runtime & Troubleshooting.

The data model in plain English

The approval subsystem is built out of seven custom objects. You won’t touch most of them directly — the wizard authors them for you — but knowing the shape makes the wizard’s vocabulary land.

ObjectPlain-English role
ApprovalChain__cA path — an ordered or parallel set of steps. “Discount escalation.”
ApprovalRule__cOne step in a chain (or a standalone rule). The unit that fires or doesn’t.
ApprovalCondition__cA single firing criterion attached to a rule. “Discount > 20%.”
ApprovalVariable__cA named expression you author once and reference from many conditions.
Approver__cA reusable approver record — wraps a User, Queue, Public Group, or Role.
ApprovalRuleApprover__cJunction. Attaches an Approver to a step, with an order.
ApprovalRequest__cA runtime row — created when a rule fires; tracks the actual sign-off.
ApprovalEvaluationLog__cAppend-only audit trail. One row per rule per evaluation, with a per-condition trace.

The mental model: chains contain rules, rules contain conditions and approvers, runtime requests get written when conditions match. Variables factor out values that appear in many conditions. Evaluation logs are the breadcrumbs the engine drops on every submit and preview.