Approvals

Tiered approval for large opportunities — what triggers it, who approves at each tier, and what happens on approve/reject.

Approvals

HotCRM ships with one built-in approval: the Opportunity Approval flow. It enforces a tiered "extra pairs of eyes" rule on large deals so no rep can commit a big-ticket opportunity without the right level of sign-off.

Since ObjectStack 7.4 this is modeled as a flow with approval nodes (ADR-0019), not a standalone approval-process object. The flow chains the approval steps, locks the record while a step is pending, and mirrors the live decision onto the opportunity's approval_status field. Auto-launch requires the triggers capability (see Administration › Automation).

What triggers an approval

The flow runs automatically when an opportunity is saved and its amount crosses a threshold — no manual "submit" step:

  • Amount > $100KSales Manager review.
  • Amount > $500KSales Manager review and Sales Director sign-off.

Below $100K, no approval is needed — the rep can progress the deal directly. The entry guard (approval_status = not_required) means the flow's own status writes don't re-trigger it.

The tiered process

TierApproverApplies whenWhy
1. Sales ManagerThe sales_manager roleAmount > $100KFirst line of defense — sanity-check the deal
2. Sales DirectorThe sales_director roleAmount > $500KFinal sign-off — protect company margin on the largest deals

A > $500K deal goes Manager → (decision gate) → Director. A $100K–$500K deal needs only the Manager. Rejection at either tier ends the run as rejected and notifies the owner.

What submitters see

When a rep saves an opportunity whose amount crosses the threshold, the flow submits it automatically:

  1. The opportunity is locked — the approval node holds the record until the step resolves.
  2. approval_status flips to pending (shown as In Approval).
  3. The first approver gets an in-app notification and email.

There's no separate "Submit for Approval" click — crossing the amount threshold on save is the trigger.

What approvers see

Each approver receives:

  • An email with the opportunity summary, amount, account, stage, and the submitter's comment.
  • An in-app task in their Approval Inbox.
  • A one-click Approve / Reject with a comment box.

Approvers can also delegate during PTO (configured in their profile).

First-response behavior

The process uses first-response behavior — the first approver to respond at each step (in case of delegates or multiple eligible approvers) decides the outcome. No "wait for all" voting.

What happens on each outcome

✅ Approved (all required tiers)

  1. The opportunity is unlocked.
  2. approval_status is stamped approved and approved_date is set to today.
  3. The owner is notified ("Deal approved").

❌ Rejected (at any tier)

  • The run ends immediately as rejected — a reject at the Manager tier never reaches the Director.
  • approval_status is stamped rejected and the owner is notified to revise and resubmit.
  • The rejection is captured in the approval request's history.

Record locking

Each approval node sets lockRecord: true, so while a step is pending the opportunity is locked by the approval engine — edits are blocked until the step resolves. The lock is released automatically on the final approve/reject.

The approval audit trail

Every action is recorded on the approval request (sys_approval_request) created by the flow:

DateTierActorActionComment
2024-03-12 09:14systemSubmittedAuto-submitted (amount $620K > $500K)
2024-03-12 11:30ManagerSam LeeApproved"OK given strategic logo"
2024-03-12 14:02DirectorPat WongApproved"Approved — book it"

This history is permanent and surfaces in deal-review reports.

Where to find pending approvals

In the Enterprise CRM app, the Approvals group:

  • Approval Requests — everything pending, with views Pending My Approval, Submitted by Me, Recently Approved.
  • Action History — the full audit trail across all approvals.

Tips for sales reps

  • Mind the thresholds — an amount over $100K (and especially over $500K) will auto-launch approval the moment you save. Plan for the review window before promising a close date.
  • Get the deal right before saving over the threshold — the record locks while a tier is pending; you can't tweak it mid-review.
  • Watch for the rejection notification — a reject ends the run; revise and save again to re-submit.

Tips for managers

  • Respond within 24 hours — sales velocity matters; a stuck approval kills deal momentum.
  • Use the comment field even on approvals — "Approved; please attach signed NDA before booking".
  • Reject with specifics"Need exec sponsor letter from customer" is far more useful than "Not yet".

Tips for admins

  • The thresholds ($100K / $500K), the tiers (manager → director), and lockRecord are all defined in the Opportunity Approval flow — edit the approval nodes and the decision gate to change them.
  • Add more approvals by dropping approval nodes into any flow (contract approval, expense approval, etc.) — see Administration › Automation.
  • The flow lives alongside other automation in the codebase (src/flows/opportunity-approval.flow.ts).
  • Delegated approvers are set in user profile preferences. See Administration › Profiles.

On this page