Skip to content

Order to cash

order to cash in BPMN 2.0 (`kind: process`): a Customer pool and a Supplier pool with Sales, Warehouse and Finance lanes, run top to bottom. A message start event, user, send, receive and service tasks, an exclusive gateway with Yes and No branches, a parallel split and join, and four message flows between the pools.

16 nodes5 groups12 edges
Open full size
BPMN order-to-cash process: a customer pool and a supplier pool with sales, warehouse and finance lanes, exchanging purchase order, invoice, payment and goods messagesBPMN order-to-cash process: a customer pool and a supplier pool with sales, warehouse and finance lanes, exchanging purchase order, invoice, payment and goods messagesBPMN order-to-cash process: a customer pool and a supplier pool with sales, warehouse and finance lanes, exchanging purchase order, invoice, payment and goods messagesBPMN order-to-cash process: a customer pool and a supplier pool with sales, warehouse and finance lanes, exchanging purchase order, invoice, payment and goods messages
process-order-to-cash.yamlOn GitHub
# yaml-language-server: $schema=../references/diagram.schema.json
title: Order to cash
subtitle: A customer order through sales, the warehouse and finance in BPMN 2.0, with message flows between the two participants
kind: process
# Pools run top to bottom here, so the collaboration reads on a phone; direction: right lays the
# same spec out as horizontal bands.
direction: down
layout: { spacing: compact }

groups:
  customer: { type: pool, label: Customer }
  supplier: { type: pool, label: Supplier }
  sales: { type: lane, in: supplier, label: Sales }
  warehouse: { type: lane, in: supplier, label: Warehouse }
  finance: { type: lane, in: supplier, label: Finance }

nodes:
  need: { bpmn: start, label: Goods needed, in: customer }
  place: { bpmn: user-task, label: Place order, in: customer }
  pay: { bpmn: user-task, label: Pay invoice, in: customer }
  receive: { bpmn: receive-task, label: Receive goods, in: customer }
  done: { bpmn: end, label: Order fulfilled, in: customer }

  received: { bpmn: start-message, label: Order received, in: sales }
  valid: { bpmn: exclusive, label: Stock and credit OK?, in: sales }
  reject: { bpmn: send-task, label: Reject order, in: sales }
  rejected: { bpmn: end, label: Order rejected, in: sales }
  split: { bpmn: parallel, in: sales }
  join: { bpmn: parallel, in: sales }
  closed: { bpmn: end, label: Order closed, in: sales }

  pick: { bpmn: manual-task, label: Pick and pack, in: warehouse }
  ship: { bpmn: send-task, label: Ship goods, in: warehouse }

  invoice: { bpmn: service-task, label: Send invoice, in: finance }
  payment: { bpmn: receive-task, label: Record payment, in: finance }

edges:
  - need -> place -> pay -> receive -> done
  - received -> valid
  - valid -> split: "Yes"
  - valid -> reject: "No"
  - reject -> rejected
  - split -> pick -> ship -> join
  - split -> invoice -> payment -> join
  - join -> closed
  - place -> received: { flow: message, label: Purchase order }
  - invoice -> pay: { flow: message, label: Invoice }
  - pay -> payment: { flow: message, label: Payment }
  - ship -> receive: { flow: message, label: Goods }

Start from this one

Copies the spec to diagram.yaml, then renders every format.

$ orrery init process-order-to-cash$ orrery render diagram.yaml -f all --theme both