SwimdraftPricingSign inStart free

Supplier evaluation BPMN example

Supplier evaluation is the periodic health check on the vendors you already trade with: how they score on spend, delivery, and quality, and what happens when they fall short. Teams map it because evaluations that live in spreadsheets happen inconsistently or not at all, and underperforming suppliers drift on for years because nobody owns the consequence of a bad score.

The model is one pool with Procurement, Quality, and Category manager lanes. A parallel gateway is the feature worth noticing: spend analysis and the delivery audit genuinely do not depend on each other, so the model forks them with a parallel split and joins them before scoring, which halves the elapsed time compared with running them in sequence.

Supplier evaluation: BPMN 2.0 diagram
Supplier evaluation process modelled as a BPMN 2.0 diagram

Standard BPMN 2.0 interchange XML: opens in Camunda Modeler, Signavio, Bizagi, and any other compliant tool.

The process at a glance

Starts when
Evaluation due
Ends with
Improvement plan issued · Evaluation completed
Lanes
Procurement · Quality · Category manager
Decisions
Score below threshold?

How to read this diagram

Two streams of work run at once in this flow. When the evaluation falls due, a parallel gateway in the Procurement lane forks the token: Procurement compiles the spend report while Quality audits delivery performance. A parallel join waits for both to finish, then the Category manager scores the supplier using a business rule task that applies the weighted scorecard.

The single decision, "Score below threshold?", follows the scoring. On the Yes branch the category manager drafts an improvement plan and Procurement sends it to the supplier, ending at "Improvement plan issued". The default No branch has Procurement update the preferred supplier list, and the process completes at "Evaluation completed". Neither outcome removes the supplier; that would be a separate offboarding process.

BPMN elements used

ElementCountIn this diagram
Start event1Evaluation due
End event2Improvement plan issued, Evaluation completed
Task1Audit delivery performance
User task1Draft improvement plan
Service task2Compile spend report, Update preferred list
Send task1Send plan to supplier
Business rule task1Score supplier
Exclusive gateway1Score below threshold?
Parallel gateway2
View the BPMN 2.0 XML for this diagram
<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="swimdraft" exporterVersion="1.0">
  <bpmn2:collaboration id="Collaboration_1">
    <bpmn2:participant id="pool_se" name="Supplier evaluation" processRef="Process_pool_se" />
  </bpmn2:collaboration>
  <bpmn2:process id="Process_pool_se" isExecutable="false">
    <bpmn2:laneSet id="LaneSet_pool_se">
      <bpmn2:lane id="lane_se_proc" name="Procurement">
        <bpmn2:flowNodeRef>start_se</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>g_se_split</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_se_spend</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_se_sendplan</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>end_se_plan</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_se_update</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>end_se_done</bpmn2:flowNodeRef>
      </bpmn2:lane>
      <bpmn2:lane id="lane_se_qual" name="Quality">
        <bpmn2:flowNodeRef>t_se_quality</bpmn2:flowNodeRef>
      </bpmn2:lane>
      <bpmn2:lane id="lane_se_cat" name="Category manager">
        <bpmn2:flowNodeRef>g_se_join</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_se_score</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>g_se_threshold</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_se_plan</bpmn2:flowNodeRef>
      </bpmn2:lane>
    </bpmn2:laneSet>
    <bpmn2:startEvent id="start_se" name="Evaluation due">
      <bpmn2:outgoing>fse1</bpmn2:outgoing>
    </bpmn2:startEvent>
    <bpmn2:parallelGateway id="g_se_split">
      <bpmn2:incoming>fse1</bpmn2:incoming>
      <bpmn2:outgoing>fse2</bpmn2:outgoing>
      <bpmn2:outgoing>fse3</bpmn2:outgoing>
    </bpmn2:parallelGateway>
    <bpmn2:serviceTask id="t_se_spend" name="Compile spend report">
      <bpmn2:incoming>fse2</bpmn2:incoming>
      <bpmn2:outgoing>fse4</bpmn2:outgoing>
    </bpmn2:serviceTask>
    <bpmn2:task id="t_se_quality" name="Audit delivery performance">
      <bpmn2:incoming>fse3</bpmn2:incoming>
      <bpmn2:outgoing>fse5</bpmn2:outgoing>
    </bpmn2:task>
    <bpmn2:parallelGateway id="g_se_join">
      <bpmn2:incoming>fse4</bpmn2:incoming>
      <bpmn2:incoming>fse5</bpmn2:incoming>
      <bpmn2:outgoing>fse6</bpmn2:outgoing>
    </bpmn2:parallelGateway>
    <bpmn2:businessRuleTask id="t_se_score" name="Score supplier">
      <bpmn2:incoming>fse6</bpmn2:incoming>
      <bpmn2:outgoing>fse7</bpmn2:outgoing>
    </bpmn2:businessRuleTask>
    <bpmn2:exclusiveGateway id="g_se_threshold" name="Score below threshold?" default="fse9">
      <bpmn2:incoming>fse7</bpmn2:incoming>
      <bpmn2:outgoing>fse8</bpmn2:outgoing>
      <bpmn2:outgoing>fse9</bpmn2:outgoing>
    </bpmn2:exclusiveGateway>
    <bpmn2:userTask id="t_se_plan" name="Draft improvement plan">
      <bpmn2:incoming>fse8</bpmn2:incoming>
      <bpmn2:outgoing>fse10</bpmn2:outgoing>
    </bpmn2:userTask>
    <bpmn2:sendTask id="t_se_sendplan" name="Send plan to supplier">
      <bpmn2:incoming>fse10</bpmn2:incoming>
      <bpmn2:outgoing>fse11</bpmn2:outgoing>
    </bpmn2:sendTask>
    <bpmn2:endEvent id="end_se_plan" name="Improvement plan issued">
      <bpmn2:incoming>fse11</bpmn2:incoming>
    </bpmn2:endEvent>
    <bpmn2:serviceTask id="t_se_update" name="Update preferred list">
      <bpmn2:incoming>fse9</bpmn2:incoming>
      <bpmn2:outgoing>fse12</bpmn2:outgoing>
    </bpmn2:serviceTask>
    <bpmn2:endEvent id="end_se_done" name="Evaluation completed">
      <bpmn2:incoming>fse12</bpmn2:incoming>
    </bpmn2:endEvent>
    <bpmn2:sequenceFlow id="fse1" sourceRef="start_se" targetRef="g_se_split" />
    <bpmn2:sequenceFlow id="fse2" sourceRef="g_se_split" targetRef="t_se_spend" />
    <bpmn2:sequenceFlow id="fse3" sourceRef="g_se_split" targetRef="t_se_quality" />
    <bpmn2:sequenceFlow id="fse4" sourceRef="t_se_spend" targetRef="g_se_join" />
    <bpmn2:sequenceFlow id="fse5" sourceRef="t_se_quality" targetRef="g_se_join" />
    <bpmn2:sequenceFlow id="fse6" sourceRef="g_se_join" targetRef="t_se_score" />
    <bpmn2:sequenceFlow id="fse7" sourceRef="t_se_score" targetRef="g_se_threshold" />
    <bpmn2:sequenceFlow id="fse8" name="Yes" sourceRef="g_se_threshold" targetRef="t_se_plan">
      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">Yes</bpmn2:conditionExpression>
    </bpmn2:sequenceFlow>
    <bpmn2:sequenceFlow id="fse9" name="No" sourceRef="g_se_threshold" targetRef="t_se_update" />
    <bpmn2:sequenceFlow id="fse10" sourceRef="t_se_plan" targetRef="t_se_sendplan" />
    <bpmn2:sequenceFlow id="fse11" sourceRef="t_se_sendplan" targetRef="end_se_plan" />
    <bpmn2:sequenceFlow id="fse12" sourceRef="t_se_update" targetRef="end_se_done" />
  </bpmn2:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Collaboration_1">
      <bpmndi:BPMNShape id="pool_se_di" bpmnElement="pool_se" isHorizontal="true">
        <dc:Bounds x="20" y="20" width="1420" height="500" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="lane_se_proc_di" bpmnElement="lane_se_proc" isHorizontal="true">
        <dc:Bounds x="50" y="20" width="1390" height="240" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="lane_se_qual_di" bpmnElement="lane_se_qual" isHorizontal="true">
        <dc:Bounds x="50" y="260" width="1390" height="130" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="lane_se_cat_di" bpmnElement="lane_se_cat" isHorizontal="true">
        <dc:Bounds x="50" y="390" width="1390" height="130" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="start_se_di" bpmnElement="start_se">
        <dc:Bounds x="112" y="59" width="36" height="36" />
        <bpmndi:BPMNLabel><dc:Bounds x="93" y="101" width="75" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="g_se_split_di" bpmnElement="g_se_split">
        <dc:Bounds x="255" y="52" width="50" height="50" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_se_spend_di" bpmnElement="t_se_spend">
        <dc:Bounds x="380" y="37" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_se_quality_di" bpmnElement="t_se_quality">
        <dc:Bounds x="380" y="277" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="g_se_join_di" bpmnElement="g_se_join">
        <dc:Bounds x="555" y="422" width="50" height="50" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_se_score_di" bpmnElement="t_se_score">
        <dc:Bounds x="680" y="407" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="g_se_threshold_di" bpmnElement="g_se_threshold">
        <dc:Bounds x="855" y="422" width="50" height="50" />
        <bpmndi:BPMNLabel><dc:Bounds x="822" y="402" width="117" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_se_plan_di" bpmnElement="t_se_plan">
        <dc:Bounds x="980" y="407" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_se_sendplan_di" bpmnElement="t_se_sendplan">
        <dc:Bounds x="1130" y="37" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="end_se_plan_di" bpmnElement="end_se_plan">
        <dc:Bounds x="1312" y="59" width="36" height="36" />
        <bpmndi:BPMNLabel><dc:Bounds x="1268" y="101" width="125" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_se_update_di" bpmnElement="t_se_update">
        <dc:Bounds x="980" y="37" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="end_se_done_di" bpmnElement="end_se_done">
        <dc:Bounds x="1162" y="169" width="36" height="36" />
        <bpmndi:BPMNLabel><dc:Bounds x="1126" y="211" width="108" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="fse1_di" bpmnElement="fse1">
        <di:waypoint x="148" y="77" />
        <di:waypoint x="255" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fse2_di" bpmnElement="fse2">
        <di:waypoint x="305" y="77" />
        <di:waypoint x="380" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fse3_di" bpmnElement="fse3">
        <di:waypoint x="305" y="77" />
        <di:waypoint x="360" y="77" />
        <di:waypoint x="360" y="317" />
        <di:waypoint x="380" y="317" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fse4_di" bpmnElement="fse4">
        <di:waypoint x="480" y="77" />
        <di:waypoint x="510" y="77" />
        <di:waypoint x="510" y="447" />
        <di:waypoint x="555" y="447" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fse5_di" bpmnElement="fse5">
        <di:waypoint x="480" y="317" />
        <di:waypoint x="510" y="317" />
        <di:waypoint x="510" y="447" />
        <di:waypoint x="555" y="447" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fse6_di" bpmnElement="fse6">
        <di:waypoint x="605" y="447" />
        <di:waypoint x="680" y="447" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fse7_di" bpmnElement="fse7">
        <di:waypoint x="780" y="447" />
        <di:waypoint x="855" y="447" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fse8_di" bpmnElement="fse8">
        <di:waypoint x="905" y="447" />
        <di:waypoint x="980" y="447" />
        <bpmndi:BPMNLabel><dc:Bounds x="911" y="427" width="21" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fse9_di" bpmnElement="fse9">
        <di:waypoint x="905" y="447" />
        <di:waypoint x="960" y="447" />
        <di:waypoint x="960" y="77" />
        <di:waypoint x="980" y="77" />
        <bpmndi:BPMNLabel><dc:Bounds x="911" y="453" width="17" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fse10_di" bpmnElement="fse10">
        <di:waypoint x="1080" y="447" />
        <di:waypoint x="1110" y="447" />
        <di:waypoint x="1110" y="77" />
        <di:waypoint x="1130" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fse11_di" bpmnElement="fse11">
        <di:waypoint x="1230" y="77" />
        <di:waypoint x="1312" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fse12_di" bpmnElement="fse12">
        <di:waypoint x="1080" y="77" />
        <di:waypoint x="1110" y="77" />
        <di:waypoint x="1110" y="187" />
        <di:waypoint x="1162" y="187" />
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn2:definitions>

Frequently asked questions

Why a parallel gateway here instead of two exclusive branches?

Exclusive branches would mean choosing one activity or the other, but an evaluation needs both the spend report and the delivery audit. The parallel split releases a token down each path simultaneously, and the parallel join holds the flow until both arrive. That both-must-finish semantics is exactly what a scorecard needs.

What makes "Score supplier" a business rule task?

The score comes from applying a fixed scorecard, weighted criteria against gathered data, which is decision logic rather than human judgement or system integration. A business rule task signals that the logic could live in a decision table or rules engine. If your managers score by feel, model it as a user task instead.

How should the follow up on an improvement plan be modelled?

Keep it out of this process. The evaluation ends when the plan is issued; monitoring the supplier against the plan is a separate process that starts on a timer, say ninety days later, and re-runs the scoring. Bundling months of monitoring into this diagram would leave the instance running long after the evaluation itself is finished.

Related BPMN examples

Generate your own version of this diagram

Describe how the process works in your organisation: plain English, meeting notes, a transcript, or a spreadsheet. Swimdraft turns it into a spec-validated BPMN 2.0 diagram you can edit in the browser and export as .bpmn, SVG, or PNG.

Start free

No credit card required