Sales Pipeline: How the three domains fit together

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:

DomainAuthoritative for
BusoppPipeline intent, forecast, probability
OrderContracted commitment, backlog
InvoiceDelivered 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 links
  • meta_codes → classification and context
  • meta_dates → lifecycle and timing
  • item_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_details and meta_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.

Leave a Comment