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.
Standard BPMN 2.0 interchange XML: opens in Camunda Modeler, Signavio, Bizagi, and any other compliant tool.
The process at a glance
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
| Element | Count | In this diagram |
|---|---|---|
| Start event | 1 | Claim received |
| End event | 2 | Claim declined, Claim settled |
| Task | 2 | Register warranty claim, Repair product |
| User task | 2 | Verify proof of purchase, Assess product fault |
| Service task | 1 | Dispatch replacement |
| Send task | 3 | Request missing documents, Send decline letter, Return product to customer |
| Exclusive gateway | 3 | Documents 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
Customer complaint handling
A customer complaint handling process as a BPMN 2.0 swimlane diagram: logging, investigation, remedy, and a rework loop. View it and download the .bpmn file free.
Product returns
A product returns process in BPMN 2.0: eligibility check, return label, goods inspection, and refund, plus a customer pool with message flows. Free .bpmn download.
Refund request
A refund request process as a BPMN 2.0 diagram: policy check, approval threshold, manager sign off, and payment. View the swimlanes and download the .bpmn free.
Support ticket escalation
A support ticket escalation flow in BPMN 2.0: triage, tier 1 fix, tier 2 diagnosis, and a defect path into engineering. Free .bpmn file download included.
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 freeNo credit card required