SwimdraftPricingSign inStart free

Warranty claim BPMN example

Warranty claims are mapped because they mix a legal obligation with a logistics problem: the organisation must honour valid claims within statutory timescales while filtering out claims that are out of cover or missing evidence. The process usually breaks in two places. Claims stall waiting for proof of purchase that nobody chased, and the repair or replace decision gets made inconsistently from one assessor to the next.

Here the process is one pool with three lanes: Customer service, Technical assessment, and Repairs and dispatch. Three exclusive gateways handle documents, cover, and the remedy. The choice worth noticing is the document chase loop at the front: incomplete claims cycle between "Request missing documents" and re-verification instead of being rejected outright, which mirrors how consumer law expects retailers to behave.

Warranty claim: BPMN 2.0 diagram
Warranty claim 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
Claim received
Ends with
Claim declined · Claim settled
Lanes
Customer service · Technical assessment · Repairs and dispatch
Decisions
Documents complete? · Fault covered by warranty? · Repair or replace?

How to read this diagram

Registration comes first: when a claim is received, Customer service registers it and verifies the proof of purchase. The gateway "Documents complete?" guards the rest of the process. On the No branch, a send task requests the missing documents and the flow loops back to verification, repeating until the paperwork is in order. The default Yes branch releases the claim to the Technical assessment lane.

An assessor then examines the product fault, and "Fault covered by warranty?" makes the pivotal decision. The default No branch returns to Customer service for a decline letter, ending at "Claim declined". Covered claims reach "Repair or replace?", which routes the token into the Repairs and dispatch lane: the Repair branch fixes the product and returns it to the customer, while the default Replace branch dispatches a replacement unit. Both remedies finish at the "Claim settled" end event.

BPMN elements used

ElementCountIn this diagram
Start event1Claim received
End event2Claim declined, Claim settled
Task2Register warranty claim, Repair product
User task2Verify proof of purchase, Assess product fault
Service task1Dispatch replacement
Send task3Request missing documents, Send decline letter, Return product to customer
Exclusive gateway3Documents complete?, Fault covered by warranty?, Repair or replace?
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_wc" name="Warranty claims" processRef="Process_pool_wc" />
  </bpmn2:collaboration>
  <bpmn2:process id="Process_pool_wc" isExecutable="false">
    <bpmn2:laneSet id="LaneSet_pool_wc">
      <bpmn2:lane id="lane_wc_cs" name="Customer service">
        <bpmn2:flowNodeRef>start_wc</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_wc_register</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_wc_verify</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>g_wc_docs</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_wc_chase</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_wc_decline</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>end_wc_declined</bpmn2:flowNodeRef>
      </bpmn2:lane>
      <bpmn2:lane id="lane_wc_ta" name="Technical assessment">
        <bpmn2:flowNodeRef>t_wc_assess</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>g_wc_valid</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>g_wc_remedy</bpmn2:flowNodeRef>
      </bpmn2:lane>
      <bpmn2:lane id="lane_wc_ops" name="Repairs and dispatch">
        <bpmn2:flowNodeRef>t_wc_repair</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_wc_return</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_wc_replace</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>end_wc_settled</bpmn2:flowNodeRef>
      </bpmn2:lane>
    </bpmn2:laneSet>
    <bpmn2:startEvent id="start_wc" name="Claim received">
      <bpmn2:outgoing>f_wc1</bpmn2:outgoing>
    </bpmn2:startEvent>
    <bpmn2:task id="t_wc_register" name="Register warranty claim">
      <bpmn2:incoming>f_wc1</bpmn2:incoming>
      <bpmn2:outgoing>f_wc2</bpmn2:outgoing>
    </bpmn2:task>
    <bpmn2:userTask id="t_wc_verify" name="Verify proof of purchase">
      <bpmn2:incoming>f_wc2</bpmn2:incoming>
      <bpmn2:incoming>f_wc6</bpmn2:incoming>
      <bpmn2:outgoing>f_wc3</bpmn2:outgoing>
    </bpmn2:userTask>
    <bpmn2:exclusiveGateway id="g_wc_docs" name="Documents complete?" default="f_wc5">
      <bpmn2:incoming>f_wc3</bpmn2:incoming>
      <bpmn2:outgoing>f_wc4</bpmn2:outgoing>
      <bpmn2:outgoing>f_wc5</bpmn2:outgoing>
    </bpmn2:exclusiveGateway>
    <bpmn2:sendTask id="t_wc_chase" name="Request missing documents">
      <bpmn2:incoming>f_wc4</bpmn2:incoming>
      <bpmn2:outgoing>f_wc6</bpmn2:outgoing>
    </bpmn2:sendTask>
    <bpmn2:userTask id="t_wc_assess" name="Assess product fault">
      <bpmn2:incoming>f_wc5</bpmn2:incoming>
      <bpmn2:outgoing>f_wc7</bpmn2:outgoing>
    </bpmn2:userTask>
    <bpmn2:exclusiveGateway id="g_wc_valid" name="Fault covered by warranty?" default="f_wc9">
      <bpmn2:incoming>f_wc7</bpmn2:incoming>
      <bpmn2:outgoing>f_wc8</bpmn2:outgoing>
      <bpmn2:outgoing>f_wc9</bpmn2:outgoing>
    </bpmn2:exclusiveGateway>
    <bpmn2:sendTask id="t_wc_decline" name="Send decline letter">
      <bpmn2:incoming>f_wc9</bpmn2:incoming>
      <bpmn2:outgoing>f_wc10</bpmn2:outgoing>
    </bpmn2:sendTask>
    <bpmn2:endEvent id="end_wc_declined" name="Claim declined">
      <bpmn2:incoming>f_wc10</bpmn2:incoming>
    </bpmn2:endEvent>
    <bpmn2:exclusiveGateway id="g_wc_remedy" name="Repair or replace?" default="f_wc12">
      <bpmn2:incoming>f_wc8</bpmn2:incoming>
      <bpmn2:outgoing>f_wc11</bpmn2:outgoing>
      <bpmn2:outgoing>f_wc12</bpmn2:outgoing>
    </bpmn2:exclusiveGateway>
    <bpmn2:task id="t_wc_repair" name="Repair product">
      <bpmn2:incoming>f_wc11</bpmn2:incoming>
      <bpmn2:outgoing>f_wc13</bpmn2:outgoing>
    </bpmn2:task>
    <bpmn2:sendTask id="t_wc_return" name="Return product to customer">
      <bpmn2:incoming>f_wc13</bpmn2:incoming>
      <bpmn2:outgoing>f_wc14</bpmn2:outgoing>
    </bpmn2:sendTask>
    <bpmn2:serviceTask id="t_wc_replace" name="Dispatch replacement">
      <bpmn2:incoming>f_wc12</bpmn2:incoming>
      <bpmn2:outgoing>f_wc15</bpmn2:outgoing>
    </bpmn2:serviceTask>
    <bpmn2:endEvent id="end_wc_settled" name="Claim settled">
      <bpmn2:incoming>f_wc14</bpmn2:incoming>
      <bpmn2:incoming>f_wc15</bpmn2:incoming>
    </bpmn2:endEvent>
    <bpmn2:sequenceFlow id="f_wc1" sourceRef="start_wc" targetRef="t_wc_register" />
    <bpmn2:sequenceFlow id="f_wc2" sourceRef="t_wc_register" targetRef="t_wc_verify" />
    <bpmn2:sequenceFlow id="f_wc3" sourceRef="t_wc_verify" targetRef="g_wc_docs" />
    <bpmn2:sequenceFlow id="f_wc4" name="No" sourceRef="g_wc_docs" targetRef="t_wc_chase">
      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">No</bpmn2:conditionExpression>
    </bpmn2:sequenceFlow>
    <bpmn2:sequenceFlow id="f_wc5" name="Yes" sourceRef="g_wc_docs" targetRef="t_wc_assess" />
    <bpmn2:sequenceFlow id="f_wc6" sourceRef="t_wc_chase" targetRef="t_wc_verify" />
    <bpmn2:sequenceFlow id="f_wc7" sourceRef="t_wc_assess" targetRef="g_wc_valid" />
    <bpmn2:sequenceFlow id="f_wc8" name="Yes" sourceRef="g_wc_valid" targetRef="g_wc_remedy">
      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">Yes</bpmn2:conditionExpression>
    </bpmn2:sequenceFlow>
    <bpmn2:sequenceFlow id="f_wc9" name="No" sourceRef="g_wc_valid" targetRef="t_wc_decline" />
    <bpmn2:sequenceFlow id="f_wc10" sourceRef="t_wc_decline" targetRef="end_wc_declined" />
    <bpmn2:sequenceFlow id="f_wc11" name="Repair" sourceRef="g_wc_remedy" targetRef="t_wc_repair">
      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">Repair</bpmn2:conditionExpression>
    </bpmn2:sequenceFlow>
    <bpmn2:sequenceFlow id="f_wc12" name="Replace" sourceRef="g_wc_remedy" targetRef="t_wc_replace" />
    <bpmn2:sequenceFlow id="f_wc13" sourceRef="t_wc_repair" targetRef="t_wc_return" />
    <bpmn2:sequenceFlow id="f_wc14" sourceRef="t_wc_return" targetRef="end_wc_settled" />
    <bpmn2:sequenceFlow id="f_wc15" sourceRef="t_wc_replace" targetRef="end_wc_settled" />
  </bpmn2:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Collaboration_1">
      <bpmndi:BPMNShape id="pool_wc_di" bpmnElement="pool_wc" isHorizontal="true">
        <dc:Bounds x="20" y="20" width="1570" height="500" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="lane_wc_cs_di" bpmnElement="lane_wc_cs" isHorizontal="true">
        <dc:Bounds x="50" y="20" width="1540" height="130" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="lane_wc_ta_di" bpmnElement="lane_wc_ta" isHorizontal="true">
        <dc:Bounds x="50" y="150" width="1540" height="130" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="lane_wc_ops_di" bpmnElement="lane_wc_ops" isHorizontal="true">
        <dc:Bounds x="50" y="280" width="1540" height="240" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="start_wc_di" bpmnElement="start_wc">
        <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="t_wc_register_di" bpmnElement="t_wc_register">
        <dc:Bounds x="230" y="37" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_wc_verify_di" bpmnElement="t_wc_verify">
        <dc:Bounds x="380" y="37" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="g_wc_docs_di" bpmnElement="g_wc_docs">
        <dc:Bounds x="555" y="52" width="50" height="50" />
        <bpmndi:BPMNLabel><dc:Bounds x="524" y="32" width="112" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_wc_chase_di" bpmnElement="t_wc_chase">
        <dc:Bounds x="680" y="37" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_wc_assess_di" bpmnElement="t_wc_assess">
        <dc:Bounds x="680" y="167" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="g_wc_valid_di" bpmnElement="g_wc_valid">
        <dc:Bounds x="855" y="182" width="50" height="50" />
        <bpmndi:BPMNLabel><dc:Bounds x="838" y="238" width="84" height="28" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_wc_decline_di" bpmnElement="t_wc_decline">
        <dc:Bounds x="980" y="37" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="end_wc_declined_di" bpmnElement="end_wc_declined">
        <dc:Bounds x="1162" y="59" width="36" height="36" />
        <bpmndi:BPMNLabel><dc:Bounds x="1143" y="101" width="75" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="g_wc_remedy_di" bpmnElement="g_wc_remedy">
        <dc:Bounds x="1005" y="182" width="50" height="50" />
        <bpmndi:BPMNLabel><dc:Bounds x="984" y="162" width="93" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_wc_repair_di" bpmnElement="t_wc_repair">
        <dc:Bounds x="1130" y="297" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_wc_return_di" bpmnElement="t_wc_return">
        <dc:Bounds x="1280" y="297" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_wc_replace_di" bpmnElement="t_wc_replace">
        <dc:Bounds x="1130" y="407" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="end_wc_settled_di" bpmnElement="end_wc_settled">
        <dc:Bounds x="1462" y="319" width="36" height="36" />
        <bpmndi:BPMNLabel><dc:Bounds x="1447" y="361" width="66" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="f_wc1_di" bpmnElement="f_wc1">
        <di:waypoint x="148" y="77" />
        <di:waypoint x="230" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_wc2_di" bpmnElement="f_wc2">
        <di:waypoint x="330" y="77" />
        <di:waypoint x="380" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_wc3_di" bpmnElement="f_wc3">
        <di:waypoint x="480" y="77" />
        <di:waypoint x="555" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_wc4_di" bpmnElement="f_wc4">
        <di:waypoint x="605" y="77" />
        <di:waypoint x="680" y="77" />
        <bpmndi:BPMNLabel><dc:Bounds x="611" y="57" width="17" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_wc5_di" bpmnElement="f_wc5">
        <di:waypoint x="605" y="77" />
        <di:waypoint x="660" y="77" />
        <di:waypoint x="660" y="207" />
        <di:waypoint x="680" y="207" />
        <bpmndi:BPMNLabel><dc:Bounds x="611" y="83" width="21" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_wc6_di" bpmnElement="f_wc6">
        <di:waypoint x="780" y="77" />
        <di:waypoint x="810" y="77" />
        <di:waypoint x="810" y="132" />
        <di:waypoint x="360" y="132" />
        <di:waypoint x="360" y="77" />
        <di:waypoint x="380" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_wc7_di" bpmnElement="f_wc7">
        <di:waypoint x="780" y="207" />
        <di:waypoint x="855" y="207" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_wc8_di" bpmnElement="f_wc8">
        <di:waypoint x="905" y="207" />
        <di:waypoint x="1005" y="207" />
        <bpmndi:BPMNLabel><dc:Bounds x="911" y="187" width="21" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_wc9_di" bpmnElement="f_wc9">
        <di:waypoint x="905" y="207" />
        <di:waypoint x="960" y="207" />
        <di:waypoint x="960" y="77" />
        <di:waypoint x="980" y="77" />
        <bpmndi:BPMNLabel><dc:Bounds x="911" y="213" width="17" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_wc10_di" bpmnElement="f_wc10">
        <di:waypoint x="1080" y="77" />
        <di:waypoint x="1162" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_wc11_di" bpmnElement="f_wc11">
        <di:waypoint x="1055" y="207" />
        <di:waypoint x="1110" y="207" />
        <di:waypoint x="1110" y="337" />
        <di:waypoint x="1130" y="337" />
        <bpmndi:BPMNLabel><dc:Bounds x="1061" y="187" width="35" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_wc12_di" bpmnElement="f_wc12">
        <di:waypoint x="1055" y="207" />
        <di:waypoint x="1110" y="207" />
        <di:waypoint x="1110" y="447" />
        <di:waypoint x="1130" y="447" />
        <bpmndi:BPMNLabel><dc:Bounds x="1061" y="213" width="43" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_wc13_di" bpmnElement="f_wc13">
        <di:waypoint x="1230" y="337" />
        <di:waypoint x="1280" y="337" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_wc14_di" bpmnElement="f_wc14">
        <di:waypoint x="1380" y="337" />
        <di:waypoint x="1462" y="337" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_wc15_di" bpmnElement="f_wc15">
        <di:waypoint x="1230" y="447" />
        <di:waypoint x="1410" y="447" />
        <di:waypoint x="1410" y="337" />
        <di:waypoint x="1462" y="337" />
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn2:definitions>

Frequently asked questions

Why is the document chase modelled as a loop rather than an end event?

Rejecting a claim just because a receipt is missing would be poor practice and, in many jurisdictions, unlawful. The loop models the real behaviour: chase, re-verify, repeat. Every pass through the loop still sits on a path to an end event, so the model stays sound. A boundary timer on the verification task could cap how long the chase runs.

The remedy gateway has branches "Repair" and "Replace", not Yes and No. Is that allowed?

Yes. Condition labels on flows leaving an exclusive gateway can be any short expression of the condition, not just Yes or No. What matters under the BPMN 2.0 rules is that the gateway is phrased as a question, each non-default flow carries a label, and exactly one flow is marked as the default so the token always has a way out.

How would I involve an external manufacturer in this model?

Add a second pool for the manufacturer as a black box and connect it with message flows, for example sending a fault report from the assessment task and catching the authorisation with a message event before repair. Keep sequence flows inside your own pool; only messages cross the boundary between separate organisations.

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