---
title: Business rules
description: The numbered rules the product enforces. Cite them from workflows and features.
sidebar:
  order: 8
---

The rules the product enforces. Numbered so they can be cited. These are
Flowtech's rules as FlowOS applies them — not a dump of tables.

## Conversations and mail

**R1 — One conversation is one thread.**
Every reply on an email thread joins the same conversation rather than starting
a new one.

**R2 — A message is never stored twice.**
A message already held is skipped on any later sync.

**R3 — New mail reopens a closed conversation.**
Closing means "finished for now", not "finished forever".

**R4 — A closed conversation is left alone.**
It is off the open inbox and is not processed until new mail reopens it.

**R5 — Every message is typed by its body, not its subject.**
A thread titled "RE: Enquiry" whose body is a debit note is not an enquiry.
The newest message sets the conversation's type until a person corrects it.

**R6 — A person's correction of the type is never overwritten.**
Once someone sets the type by hand, later mail does not relabel it. Each
message still records what it was judged to be.

**R7 — When labelling cannot be reached, the message is treated as an enquiry.**
An unreachable service must never be the reason an RFQ is hidden.

**R8 — Conversations are linked to one job by the customer's own reference first.**
Customer's project reference, then project name, then our quotation number.
Several threads can belong to one opportunity.

**R8a — The useful address is the recovered origin, not the envelope sender.**
Resolving the customer from `from` on a forward creates leads against Flowtech
staff.

## What gets processed

**R9 — A conversation needs work when one of four things is true.**
Never processed; last run did not finish; mail has arrived that changes
something technical; documents remain unread.

**R10 — A reply that changes nothing does not trigger re-processing.**
"Please send the flow curve" leaves it alone. A revised size, pressure,
material, quantity or model does trigger it. When the judgement cannot be
made, it is processed — missing a real requirement is worse than re-reading.

**R11 — No stage ever stops the queue.**
A failure is recorded against that item; the rest of the batch continues.

**R12 — A conversation that still needs work after being attempted is not retried in the same run.**

**R13 — Reprocessing replaces the answer; it never patches it.**

**R14 — Among completed readings, the newest wins.**

## Reading the enquiry

**R16 — An assumed value never satisfies a required parameter.**
A derived or defaulted value is reported as assumed and still counts as
missing where the parameter is required.

**R17 — Ambient conditions are assumed only when the enquiry states nothing, and never for steam or a stated gas.**
Atmospheric pressure and 40 °C, marked assumed. Density on steam depends on
pressure; an assumed figure is indistinguishable downstream from a measured one.

**R18 — A length is never read as a pressure or a temperature.**
An install height of 5400 mm must not become 5400 bar.

**R19 — A size stated in the enquiry that reached no line item is flagged.**

**R20 — Line items are grouped by specification, not by tag.**
Several tags sharing one specification become one line, because that is how
the quotation is written. Each line is enriched with its own fluid properties.

**R21 — A failed reading is distinguished from an enquiry that stated nothing.**

**R22 — Documents are capped at a total size, and dropped whole.**
Never cut mid-way — a half-read annexure row reads as a real line item.

## Choosing a product

**R23 — A product is ruled out only when a stated requirement provably breaches a known rating.**
Absence is not proof. Verdicts are allowed, ruled out, or unconfirmed. Only
"ruled out" hides anything.

**R24 — A breach of an assumed value warns; a breach of a stated value excludes.**

**R25 — The product the customer asked for always stays on the shortlist.**
Even when rejected. It is what justifies the substitution.

**R26 — Any rejection reason on the requested product makes the quotation a deviation.**

**R27 — A requested flowmeter family narrows the answer; a requested level type does not.**
Flowmeter families are not substitutes for each other. Level device types are
alternatives — otherwise "you asked for reflex, but this fluid is dark" could
never be given.

**R28 — The top band requires a duty the customer stated.**
Where any value was assumed, the best rating is "suitable".

**R29 — A wrong bore is a correctable inconsistency; a duty no size reaches rules the family out.**
Rated limits say whether it survives the process; sizing tables say whether it
can read it.

**R30 — A severe corrosion band excludes only when the fluid is not mild overall.**
Water rates carbon steel at the worst letter yet is a mild fluid; carbon steel
is Flowtech's standard build for its most common application.

**R31 — A measured corrosion rate may condemn a material the chart cleared, but may not clear one the chart calls severe.**
A measured rate is blind to pitting and stress cracking.

**R32 — A "Custom" option is never ruled out, in any menu.**
It is what keeps any enquiry quotable when nothing else in a menu survives.

**R33 — A menu where every option is ruled out is a line-level problem.**
"This family is wrong for this duty", not an empty dropdown.

## Quotation and pricing

**R34 — What the customer stated outranks our defaults.**
Order: the person's override, then a rule, then what the customer stated, then
Custom, then the model template, then the family default, then a menu of one.

**R35 — A default filled over something the customer asked for is reported as a deviation.**

**R36 — An option choice made against a line item that has changed is withheld, not applied.**

**R37 — An unpriced option makes the whole quotation unpriced.**
Totals must not look computed when a line is still "price TBD".

**R38 — Only fully resolved lines print or send.**
An unanswered option stays on the person's screen and is left off the document.

**R40 — Every quotation must name the application.**
An empty value is a visible gap rather than a dropped row.

**R41 — Tax is charged on the taxable value, not on the basic value.**
Gross, less line discounts, less overall discount, gives basic; plus charges
gives taxable value; plus GST gives the grand total. GST is 18% — IGST, or
CGST and SGST at 9% each.

**R42 — A charge switched off means the buyer bears it; a charge at zero means we checked and it is free.**
They are not the same. A switched-off charge is left off the printed quotation.

**R43 — A discount can never become a surcharge.**

**R44 — Discounts apply in order: per line first, then across the quotation.**

**R45 — The quotation is recalculated from scratch on every view.**
Only overrides and header are stored.

**R59 — Setting a price at an existing key overwrites it.**
There is no approval step and no record of what it replaced — the latest
entry is the price, immediately.

## Mailboxes, documents, identity

**R46 — Only enrolled mailboxes are synced.**

**R48 — Removing a mailbox does not delete its conversations.**

**R49 — A document that fails to convert is final until retried by hand.**

**R50 — Poorly recognised text is kept and flagged, never discarded.**
The lowest page confidence is recorded — the lowest, not the average.

**R53 — A record belongs to one office; a person sees a union of offices.**
There is no switched "current office".

**R54 — A deny on a person beats every role grant.**

**R55 — Outbound reply-to is the shared office mailbox.**
Customers see the engineer; replies come back to a mailbox FlowOS syncs.

**R56 — Internet message ids of sent mail are recorded.**
Otherwise delta sync ingests our own quotation as inbound.

**R57 — Uncertainty is routed to a person, never guessed.**
Unknown sender, untyped document, PO mismatch — review items, not silent merges.

**R58 — Postgres is truth; the queue is transport.**
A handoff, a send, a sync cursor that must survive redelivery is a row.

Cite these from [workflows](/business/workflows/enquiry-to-quotation) and
[features](/business/features/product-suggestion).
