The Sales Pipeline is modelled as three connected domains, each representing a different stage in the commercial lifecycle.
They are not duplicates of the same data.
They are different truths at different moments in time.
Understanding how they relate is the key to building accurate, trustworthy reporting.
The three domains at a glance
Think of the pipeline as a journey from intent → commitment → reality:
- Busopp (Opportunities)
What we intend or hope to sell - Order (Orders)
What has been formally contracted - Invoice (Invoices)
What has actually been billed
Each domain answers a different business question — and none of them replaces the others.
What each domain is authoritative for
This distinction is important:
| Domain | Authoritative for |
|---|---|
| Busopp | Pipeline intent, forecast, probability |
| Order | Contracted commitment, backlog |
| Invoice | Delivered and billed value |
If a number disagrees between domains, that’s not an error — it’s usually telling you something meaningful.
How the domains relate to each other
The relationships are directional, not one-to-one.
Busopp → Order
- An opportunity:
- may never become an order
- may result in one order
- may result in multiple orders
Busopp is about possibility.
Order is about commitment.
Order → Invoice
- An order:
- may be invoiced once
- may be invoiced many times
- may be partially invoiced over time
Order is about agreement.
Invoice is about delivery and billing.
End-to-end view
Visually (conceptually):
Busopp (intent)
↓
Order (commitment)
↓
Invoice (billed reality)
But importantly:
- Data does not automatically “roll up”
- Each domain keeps its own grain, dates, codes and values
How this shows up in the datamarts
Each domain uses the same internal structure:
core_details→ identity and linksmeta_codes→ classification and contextmeta_dates→ lifecycle and timingitem_values_lines→ numeric values
This makes cross-domain reporting predictable, even when the business logic differs.
Joining domains safely
Within a domain:
- Always join using
OBJECT_SEQ
Across domains:
- Use the link keys provided in
core_detailsandmeta_codes - Be deliberate about direction:
- Busopp → Order
- Order → Invoice
Avoid assuming:
- one opportunity = one order
- one order = one invoice
Those assumptions are the most common cause of incorrect pipeline reporting.
Why values differ across domains (and why that’s OK)
It’s normal — expected, even — for values to change as you move through the pipeline:
- Opportunity value may reduce or split
- Order value may differ due to scope or pricing changes
- Invoice value may differ due to:
- partial delivery
- adjustments
- corrections
- tax treatment
Each domain tells the truth at that stage, not a corrected hindsight view.
A practical reporting mindset
When building reports, it helps to ask:
- Am I analysing intent, commitment, or reality?
- Which domain best answers this question?
- Am I comparing domains on purpose, or accidentally?
Good pipeline reporting often involves:
- Viewing domains side-by-side
- Reconciling differences
- Explaining movement, not hiding it
A common and healthy pattern
Many strong reports follow this shape:
- Busopp → forecast and probability
- Order → committed backlog
- Invoice → billed revenue
- Variance between them → insight
The model supports this naturally — without forcing the numbers to agree.
Key takeaway
The Sales Pipeline domains are complementary, not competing.
- Busopp shows what we aim to win
- Order shows what we’ve committed to deliver
- Invoice shows what we’ve actually billed
Use each domain for what it’s best at, join them deliberately, and let the differences tell the story — that’s where the real insight lives.