Design your quote process

Quote settings

Default validity, numbering, who may quote, and how much they may give away.
How this will work. The screens on this page are planned and not yet on your tenant — see the guide overview for what works today.

The settings on this page are decided once and then govern every quote your team sends. The discount authority section is the one that has money attached to it.

Before you begin: decide two numbers with the person who owns margin — the default validity in days, and the discount percentage a salesperson may grant without asking. Both are commercial decisions, not configuration.

Default validity

  1. Go to Configuration › Quotes.
  2. Set Default validity in days. Thirty is the common Mittelstand default.
  3. Save.

Every new quote starts with valid_until = send date + this many days, and every quote can override it.

Two constraints pull in opposite directions. Your own purchase prices move — steel, copper, freight — and a validity longer than your buying stability is a promise you may have to eat. The buyer's approval cycle also takes time, and a validity shorter than it guarantees the quote expires before their signature arrives. Fourteen days on a volatile commodity and sixty on a project is a better answer than one number for everything.

Number range

Quotes draw their number from a number range with the same fields as your order ranges: prefix, padding, counter, step.

  1. Go to Configuration › Number ranges.
  2. Create a range for quotes — for example prefix AN-, padding 6, step 1, producing AN-000412.
  3. Assign it on Configuration › Quotes.

Give quotes their own range rather than sharing the order range. A document numbered AN-000412 next to one numbered SO-000198 tells everyone on both sides which object they are holding, and it keeps your order numbering uninterrupted by offers that were never accepted. The same field-by-field mechanics are described in Number ranges.

Your quote numbers will have gaps. Cancelled and expired quotes keep their numbers. That is correct — the buyer holds a document with that number — but if your accounting expects a gapless sequence, confirm before you go live rather than after.

Who may do what

Quoting splits into four permissions, and they are deliberately not one:

PermissionHeld byAllows
quotes.readAnyone in salesSee quotes and the pipeline
quotes.draftInnendienstCreate and edit drafts
quotes.sendInnendienst, senior repsMove a quote to sent, which freezes it
quotes.approveSales managementRelease a quote that exceeds someone's authority

These are your users, in your Cockpit — configured on Users and roles. They are a different ledger from the roles your customers' people hold, which govern who at the buying company may request or place an order. That ledger lives on Contacts and roles. The two look alike and grant nothing to each other.

Discount authority

Authority has two dimensions, and you need both. A percentage alone lets someone give away €9,000 on a €300,000 quote; a value alone lets them halve the price of a small one.

  1. On Configuration › Quotes, open Discount authority.
  2. For each role, set:
    • Maximum discount as a percentage off the resolved price.
    • Maximum quote value that role may send without approval.
  3. Save.

A worked ladder:

RoleMax discountMax quote value
Innendienst5 %€10,000
Sales rep10 %€50,000
Key account15 %€250,000
Sales managementNo ceilingNo ceiling

A quote that breaches either number cannot go to sent. It goes to pending_approval and appears in the approver's queue with the breach named — "12 % discount, authority 10 %" — so the approver is deciding one thing, not re-reading a whole document.

The percentage is measured against the price the platform resolved for that buyer, not against your list price. This matters more than it sounds. A customer already on a contract price at €16.20 against a €19.90 list is already 18 % down; measuring the rep's 10 % from €19.90 would let them reach €14.30 without ever asking. Measured from €16.20 — the buyer's actual price — it reaches €14.58, which is the number you intended. The resolution that produces €16.20 is described in How pricing works.

Set a deputy, not an exception. The commonest reason a quote sits for three days is that the only person who may approve it is on holiday. Authority belongs to roles, and every role that can approve needs at least two people in it.

Approval thresholds and the floor

Two further guards are worth switching on:

  • Margin floor. A quote line whose price falls below a configured margin cannot be sent by anyone below management, whatever their percentage authority says. This catches the case where the list price itself was wrong.
  • Below-cost block. A line priced under its cost is refused outright, not warned about. Somebody typed a wrong number, and quotes are frozen on send.

What to check

  • Create a test quote as a user holding only quotes.draft. The send action should be absent, not merely fail.
  • Discount a line past the role's ceiling. The quote should move to pending_approval and name the breach.
  • Send a quote and confirm valid_until matches your default, in your own time zone rather than UTC.
  • Confirm the number came from the quote range, not the order range.

Next