As promised, here is my first cut at a single list of the rules of BPMN, both the official rules from the spec (prefixed BPMN) and my “method and style” rules (prefixed Style).  All are implemented in my Method and Style Validation tool.   Note: for now, this list assumes the model includes no event subprocesses.

  • BPMN 0101.  All flow objects other than start events, boundary events, and compensating activities must have an incoming sequence flow, if the process level includes any start or end events.
  • BPMN 0102.  All flow objects other than end events and compensating activities must have an outgoing sequence flow, if the process level includes any start or end events.
  • BPMN 0105.  A start event cannot have an incoming sequence flow.
  • BPMN 0106.  A start event cannot have an outgoing message flow.
  • BPMN 0107.  A start event with incoming message flow must have a Message trigger.
  • BPMN 0109.  A start event cannot have an Error trigger.
  • BPMN 0111.  A start event in a subprocess must have a None trigger.
  • BPMN 0112.  A boundary event must have an outgoing sequence flow.
  • BPMN 01122.  A boundary event trigger must be either Message, Timer, Signal, Error, Escalation, Conditional, Cancel, or Compensation.
  • BPMN 01123.  A boundary event cannot have incoming sequence flow.
  • BPMN 01124.  An Error boundary event on a subprocess requires a matching Error throw event.
  • BPMN 01126.  An Error boundary event cannot be non-interrupting.
  • BPMN 01127.  An Escalation boundary event on a subprocess requires a matching Escalation throw event.
  • BPMN 0113.  An intermediate event with incoming message flow must be catching type with Message trigger.
  • BPMN 0114.  An intermediate event with outgoing message flow must be throwing type with Message trigger.
  • BPMN 01151.  A throwing intermediate event result must be either Message, Signal, Escalation, Link, or Compensation.
  • BPMN 01161.  A catching intermediate event trigger must be either Message, Signal, Timer, Link, or Conditional.
  • BPMN 0119.  A throwing Link event cannot have outgoing sequence flow.
  • BPMN 0120.  A catching Link event cannot have incoming sequence flow.
  • BPMN 0124.  An end event cannot have outgoing sequence flow.
  • BPMN 0125.  An end event cannot have incoming message flow.
  • BPMN 0126.  An end event with outgoing message flow must have Message result.
  • BPMN 0132.  A gateway cannot have incoming message flow.
  • BPMN 0133.  A gateway cannot have outgoing message flow.
  • BPMN 0134.  A splitting gateway must have more than one gate.
  • BPMN 0138.  An event gateway must have either a catching intermediate event or Receive task on each gate.
  • BPMN 0202.  A sequence flow cannot cross a pool or subprocess boundary.
  • BPMN 0203.  A conditional sequence flow cannot be used if there is only one sequence flow out of the element.
  • BPMN 0204.  Sequence flow out of a parallel gateway cannot be conditional.
  • BPMN 0301.  A message flow cannot connect nodes in the same pool.
  • BPMN 0302.  A message flow can only come from a Messege end or intermediate event; Send, User, or Service task; Subprocess; or black box pool.
  • BPMN 0303.  A message flow can only go to a Message start or intermediate event; Receive, User, or Service task; Subprocess; or black box pool.
  • Style 0050.  A child-level diagram should not be enclosed in an expanded subprocess shape.
  • Style 0051.  The label of a child-level page should match the name of the subprocess.
  • Style 0103.  Activities should be labeled.
  • Style 0104.  Two activities in the same process should not have the same name.  (Use global activity to reuse a single activity in a process.)
  • Style 01041.  A Send task should have an outgoing message flow.
  • Style 01042. A Receive task should have an incoming message flow.
  • Style 0110.  A Message start event should have an incoming message flow.
  • Style 01101.  A Message start event should be labeled “Receive [message name]”.
  • Style 01102.  A Timer start event should be labeled to indicate the process schedule.
  • Style 01103.  A Signal start event should be labeled to indicate the Signal name.
  • Style 01104.  A Conditional start event should be labeled to indicate the condition.
  • Style 01105.  A start event in a top-level process should be labeled.  If a top-level process contains more than one start event, all should be labeled to identify the alternative start conditions.
  • Style 01106.  Only one start event should be used in a subprocess.
  • Style 01121.  A boundary event should be labeled.
  • Style 01125.  An Error boundary event on a subprocess should be labeled to match the throwing Error event.
  • Style 01128.  An Escalation boundary event on a subprocess should be labeled to match the throwing Escalation event.
  • Style 0115.  A throwing intermediate event should be labeled.
  • Style 01161.  A catching intermediate event should be labeled.
  • Style 0122.  A catching Message event should have incoming message flow.
  • Style 0123.  A throwing Message event should have outgoing message flow.
  • Style 0127.  Two end events in a process level should not have the same name.  If they mean the same end state, combine them; otherwise give them different names.
  • Style 0129.  An end event should be labeled with the name of the end state.
  • Style 0135.  An exclusive, inclusive, or event gateway should have at most one unlabeled gate.
  • Style 0136.  An exclusive, inclusive, or event gateway with an unlabeled gate should be labeled.
  • Style 0137.  If a subprocess is followed by a yes/no gateway, at least one end event of the subprocess should be labeled to match the gateway label.
  • Style 0304.  A message flow should be labeled with the name of the message.
  • Style 0305.  A message flow from a collapsed subprocess should be replicated in the child-level diagram.
  • Style 0306.  A message flow to a collapsed subprocess should be replicated in the child level diagram.
  • Style 0307.  An incoming message flow in child level diagram should be replicated in the parent level.
  • Style 0308.  An outgoing message flow in child level diagram should be replicated in the parent level.