Quote settings
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.
Default validity
- Go to Configuration › Quotes.
- Set Default validity in days. Thirty is the common Mittelstand default.
- 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.
- Go to Configuration › Number ranges.
- Create a range for quotes — for example prefix
AN-, padding6, step1, producingAN-000412. - 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.
Who may do what
Quoting splits into four permissions, and they are deliberately not one:
| Permission | Held by | Allows |
|---|---|---|
quotes.read | Anyone in sales | See quotes and the pipeline |
quotes.draft | Innendienst | Create and edit drafts |
quotes.send | Innendienst, senior reps | Move a quote to sent, which freezes it |
quotes.approve | Sales management | Release 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.
- On Configuration › Quotes, open Discount authority.
- For each role, set:
- Maximum discount as a percentage off the resolved price.
- Maximum quote value that role may send without approval.
- Save.
A worked ladder:
| Role | Max discount | Max quote value |
|---|---|---|
| Innendienst | 5 % | €10,000 |
| Sales rep | 10 % | €50,000 |
| Key account | 15 % | €250,000 |
| Sales management | No ceiling | No 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.
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_approvaland name the breach. - Send a quote and confirm
valid_untilmatches your default, in your own time zone rather than UTC. - Confirm the number came from the quote range, not the order range.
Next
- Quote templates and documents — what the buyer actually receives.
- Handle a quote request — these settings in daily use.