Pipeline and troubleshooting

Common quote problems

Wrong price frozen, expired quote accepted, order that does not match the offer.

Symptoms, causes and fixes. Almost every quote problem is one of three things: a price that was wrong before it was frozen, a clock read in the wrong time zone, or a change made after the freeze.

Symptom to cause

SymptomLikely causeFix
Quoted price is lower than expectedAn old contract price list still resolves for that account, so the quote drafted from itFix the list — Check which price a buyer sees — then revise the quote
Quoted price is higher than the customer's usualThe contract list expired between their last order and the quoteCheck Valid until on the account's list; renew before revising
Line shows "on request"Nothing prices the article for this buyer, or an explicit on-request entry outranks a pricePrice the line manually on the quote; fix the list separately
Quote expired a day earlyvalid_until evaluated in UTC by an integration rather than the tenant time zoneCompare the stored timestamp against the displayed date; see below
Buyer cannot acceptQuote is superseded or expiredRevise it. Never re-open by editing
Order total differs from the quoteLines were added after conversion, and were priced liveCompare order lines against the quote PDF
Order price differs on every lineThe order was created fresh rather than converted from the quoteCancel and convert properly — Convert a quote to an order
Quote sat unsent for daysIt was in pending_approval and the approving role has one person in itAdd a deputy — Quote settings
Two orders for one quoteManual conversion after the buyer already accepted onlineCancel one with a reason. Conversion is not idempotent
Customer quotes a price from an old versionVersion 1 was never superseded because version 2 was created as a new quoteAlways use Revise, never New quote, in a negotiation

A price list changed after the quote was sent

This is the situation people expect to be a problem and it is not: a sent quote holds its own prices and never re-resolves. A price increase on Monday does not touch a quote sent on Friday.

The genuine problem is the reverse case — the quote was drafted from a price list that was already wrong. The freeze preserved the error faithfully. There is no way to correct a sent quote, and that is deliberate: the buyer holds a document with that number on it.

What to do:

  1. Fix the price list. Every future quote and order is then correct.
  2. Revise the quote with the corrected prices, and say why in a comment. A buyer told "our list had an error, here is the corrected offer" three days later is annoyed. One told at invoicing is a lost customer.
  3. If the customer already accepted, honour it or negotiate it. Do not silently invoice a different number.
Never edit the price list to "fix" a sent quote. The quote does not read the list any more, so it changes nothing on the offer — and it does change the price for every other buyer on that list. Two problems where there was one.

Validity and time zones

valid_until is a timestamp. The document shows a date. The gap between those two is where the arguments live.

  • A quote valid "until 30 April" ends at 23:59:59 on 30 April in the tenant's time zone. For a German tenant in summer that is 21:59:59 UTC.
  • An integration that compares the stored UTC timestamp against its own local midnight will expire the quote up to two hours early, or hold it two hours late.
  • A buyer in another market reads the date in their own time zone. A quote that ends at midnight in Frankfurt ended at 15:00 in Chicago.

If quotes are expiring at times nobody expects, read the stored timestamp — not the rendered date — and check what time zone the consumer of that field is in. The same rule applies to price list validity, see Common pricing problems.

The order does not match the quote

Work through it in this order:

  1. Was it converted, or typed? An order created from scratch is live-priced, whatever the salesperson intended. external_ref empty means it was typed.
  2. Were lines added after conversion? Added lines take today's price. They are correct behaviour and a common surprise.
  3. Was a quantity changed? Changing 500 to 480 after conversion does not move the quoted unit price — it was frozen at the 500 rung. That may be exactly what you promised, or a gift you did not intend. Decide deliberately.
  4. Is the difference only rounding? Check the precision and rounding mode. Two systems rounding differently produce a cent per line, and forty lines produce a conversation — Rounding, defaults and resolution rules.

Quotes that never get answered

Not a technical fault, and the most expensive item in this area. See Reading the quote pipeline for the follow-up discipline. The single highest-yield habit: sort open quotes by days-to-expiry and work the top of the list every Monday.

Next