Contract renewal BPMN example
Contract renewal is the decision point at the end of a supplier agreement: renew on better terms, renew as is, or let it lapse. Teams map it because renewals are where value quietly leaks; contracts auto-renew unexamined, notice periods pass unnoticed, and the organisation loses its one moment of negotiating leverage each cycle.
The model is a single pool with Contract manager, Legal, and Budget holder lanes. Two exclusive gateways shape it: the renew or terminate decision up front, and a legal review of negotiated terms that loops back to negotiation until the terms are acceptable. That negotiation loop is the modelling choice to notice, because term sheets rarely pass legal review first time.
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
When the renewal window opens, the Contract manager reviews the contract performance and the flow reaches "Renew contract?". The default No branch crosses to Legal, which issues the termination notice, and the process ends at "Contract terminated". On the Yes branch the contract manager negotiates the renewal terms with the supplier.
Legal then reviews the revised terms at the gateway "Terms acceptable?". Its default No branch loops straight back to "Negotiate renewal terms", so drafting and review cycle until Legal is satisfied. Once the Yes branch releases the flow, the Budget holder approves the renewal budget, Legal signs the renewed contract, the Contract manager updates the contract register, and the process closes at "Contract renewed".
BPMN elements used
| Element | Count | In this diagram |
|---|---|---|
| Start event | 1 | Renewal window open |
| End event | 2 | Contract terminated, Contract renewed |
| Task | 1 | Sign renewed contract |
| User task | 4 | Review contract performance, Negotiate renewal terms, Review revised terms, Approve renewal budget |
| Service task | 1 | Update contract register |
| Send task | 1 | Issue termination notice |
| Exclusive gateway | 2 | Renew contract?, Terms acceptable? |
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_cr" name="Contract renewal" processRef="Process_pool_cr" />
</bpmn2:collaboration>
<bpmn2:process id="Process_pool_cr" isExecutable="false">
<bpmn2:laneSet id="LaneSet_pool_cr">
<bpmn2:lane id="lane_cr_cm" name="Contract manager">
<bpmn2:flowNodeRef>start_cr</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>t_cr_review</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>g_cr_renew</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>t_cr_negotiate</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>t_cr_register</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>end_cr_renewed</bpmn2:flowNodeRef>
</bpmn2:lane>
<bpmn2:lane id="lane_cr_legal" name="Legal">
<bpmn2:flowNodeRef>t_cr_terminate</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>end_cr_term</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>t_cr_legal</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>g_cr_terms</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>t_cr_sign</bpmn2:flowNodeRef>
</bpmn2:lane>
<bpmn2:lane id="lane_cr_bh" name="Budget holder">
<bpmn2:flowNodeRef>t_cr_budget</bpmn2:flowNodeRef>
</bpmn2:lane>
</bpmn2:laneSet>
<bpmn2:startEvent id="start_cr" name="Renewal window open">
<bpmn2:outgoing>fcr1</bpmn2:outgoing>
</bpmn2:startEvent>
<bpmn2:userTask id="t_cr_review" name="Review contract performance">
<bpmn2:incoming>fcr1</bpmn2:incoming>
<bpmn2:outgoing>fcr2</bpmn2:outgoing>
</bpmn2:userTask>
<bpmn2:exclusiveGateway id="g_cr_renew" name="Renew contract?" default="fcr4">
<bpmn2:incoming>fcr2</bpmn2:incoming>
<bpmn2:outgoing>fcr3</bpmn2:outgoing>
<bpmn2:outgoing>fcr4</bpmn2:outgoing>
</bpmn2:exclusiveGateway>
<bpmn2:sendTask id="t_cr_terminate" name="Issue termination notice">
<bpmn2:incoming>fcr4</bpmn2:incoming>
<bpmn2:outgoing>fcr5</bpmn2:outgoing>
</bpmn2:sendTask>
<bpmn2:endEvent id="end_cr_term" name="Contract terminated">
<bpmn2:incoming>fcr5</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:userTask id="t_cr_negotiate" name="Negotiate renewal terms">
<bpmn2:incoming>fcr3</bpmn2:incoming>
<bpmn2:incoming>fcr9</bpmn2:incoming>
<bpmn2:outgoing>fcr6</bpmn2:outgoing>
</bpmn2:userTask>
<bpmn2:userTask id="t_cr_legal" name="Review revised terms">
<bpmn2:incoming>fcr6</bpmn2:incoming>
<bpmn2:outgoing>fcr7</bpmn2:outgoing>
</bpmn2:userTask>
<bpmn2:exclusiveGateway id="g_cr_terms" name="Terms acceptable?" default="fcr9">
<bpmn2:incoming>fcr7</bpmn2:incoming>
<bpmn2:outgoing>fcr8</bpmn2:outgoing>
<bpmn2:outgoing>fcr9</bpmn2:outgoing>
</bpmn2:exclusiveGateway>
<bpmn2:userTask id="t_cr_budget" name="Approve renewal budget">
<bpmn2:incoming>fcr8</bpmn2:incoming>
<bpmn2:outgoing>fcr10</bpmn2:outgoing>
</bpmn2:userTask>
<bpmn2:task id="t_cr_sign" name="Sign renewed contract">
<bpmn2:incoming>fcr10</bpmn2:incoming>
<bpmn2:outgoing>fcr11</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:serviceTask id="t_cr_register" name="Update contract register">
<bpmn2:incoming>fcr11</bpmn2:incoming>
<bpmn2:outgoing>fcr12</bpmn2:outgoing>
</bpmn2:serviceTask>
<bpmn2:endEvent id="end_cr_renewed" name="Contract renewed">
<bpmn2:incoming>fcr12</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:sequenceFlow id="fcr1" sourceRef="start_cr" targetRef="t_cr_review" />
<bpmn2:sequenceFlow id="fcr2" sourceRef="t_cr_review" targetRef="g_cr_renew" />
<bpmn2:sequenceFlow id="fcr3" name="Yes" sourceRef="g_cr_renew" targetRef="t_cr_negotiate">
<bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">Yes</bpmn2:conditionExpression>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="fcr4" name="No" sourceRef="g_cr_renew" targetRef="t_cr_terminate" />
<bpmn2:sequenceFlow id="fcr5" sourceRef="t_cr_terminate" targetRef="end_cr_term" />
<bpmn2:sequenceFlow id="fcr6" sourceRef="t_cr_negotiate" targetRef="t_cr_legal" />
<bpmn2:sequenceFlow id="fcr7" sourceRef="t_cr_legal" targetRef="g_cr_terms" />
<bpmn2:sequenceFlow id="fcr8" name="Yes" sourceRef="g_cr_terms" targetRef="t_cr_budget">
<bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">Yes</bpmn2:conditionExpression>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="fcr9" name="No" sourceRef="g_cr_terms" targetRef="t_cr_negotiate" />
<bpmn2:sequenceFlow id="fcr10" sourceRef="t_cr_budget" targetRef="t_cr_sign" />
<bpmn2:sequenceFlow id="fcr11" sourceRef="t_cr_sign" targetRef="t_cr_register" />
<bpmn2:sequenceFlow id="fcr12" sourceRef="t_cr_register" targetRef="end_cr_renewed" />
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Collaboration_1">
<bpmndi:BPMNShape id="pool_cr_di" bpmnElement="pool_cr" isHorizontal="true">
<dc:Bounds x="20" y="20" width="1570" height="500" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="lane_cr_cm_di" bpmnElement="lane_cr_cm" isHorizontal="true">
<dc:Bounds x="50" y="20" width="1540" height="130" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="lane_cr_legal_di" bpmnElement="lane_cr_legal" isHorizontal="true">
<dc:Bounds x="50" y="150" width="1540" height="240" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="lane_cr_bh_di" bpmnElement="lane_cr_bh" isHorizontal="true">
<dc:Bounds x="50" y="390" width="1540" height="130" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="start_cr_di" bpmnElement="start_cr">
<dc:Bounds x="112" y="59" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="74" y="101" width="113" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="t_cr_review_di" bpmnElement="t_cr_review">
<dc:Bounds x="230" y="37" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="g_cr_renew_di" bpmnElement="g_cr_renew">
<dc:Bounds x="405" y="52" width="50" height="50" />
<bpmndi:BPMNLabel><dc:Bounds x="388" y="32" width="85" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="t_cr_terminate_di" bpmnElement="t_cr_terminate">
<dc:Bounds x="530" y="167" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="end_cr_term_di" bpmnElement="end_cr_term">
<dc:Bounds x="712" y="299" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="681" y="341" width="99" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="t_cr_negotiate_di" bpmnElement="t_cr_negotiate">
<dc:Bounds x="530" y="37" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="t_cr_legal_di" bpmnElement="t_cr_legal">
<dc:Bounds x="680" y="167" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="g_cr_terms_di" bpmnElement="g_cr_terms">
<dc:Bounds x="855" y="182" width="50" height="50" />
<bpmndi:BPMNLabel><dc:Bounds x="832" y="162" width="96" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="t_cr_budget_di" bpmnElement="t_cr_budget">
<dc:Bounds x="980" y="407" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="t_cr_sign_di" bpmnElement="t_cr_sign">
<dc:Bounds x="1130" y="167" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="t_cr_register_di" bpmnElement="t_cr_register">
<dc:Bounds x="1280" y="37" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="end_cr_renewed_di" bpmnElement="end_cr_renewed">
<dc:Bounds x="1462" y="59" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="1436" y="101" width="89" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="fcr1_di" bpmnElement="fcr1">
<di:waypoint x="148" y="77" />
<di:waypoint x="230" y="77" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcr2_di" bpmnElement="fcr2">
<di:waypoint x="330" y="77" />
<di:waypoint x="405" y="77" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcr3_di" bpmnElement="fcr3">
<di:waypoint x="455" y="77" />
<di:waypoint x="530" y="77" />
<bpmndi:BPMNLabel><dc:Bounds x="461" y="57" width="21" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcr4_di" bpmnElement="fcr4">
<di:waypoint x="455" y="77" />
<di:waypoint x="510" y="77" />
<di:waypoint x="510" y="207" />
<di:waypoint x="530" y="207" />
<bpmndi:BPMNLabel><dc:Bounds x="461" y="83" width="17" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcr5_di" bpmnElement="fcr5">
<di:waypoint x="630" y="207" />
<di:waypoint x="660" y="207" />
<di:waypoint x="660" y="317" />
<di:waypoint x="712" y="317" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcr6_di" bpmnElement="fcr6">
<di:waypoint x="630" y="77" />
<di:waypoint x="660" y="77" />
<di:waypoint x="660" y="207" />
<di:waypoint x="680" y="207" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcr7_di" bpmnElement="fcr7">
<di:waypoint x="780" y="207" />
<di:waypoint x="855" y="207" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcr8_di" bpmnElement="fcr8">
<di:waypoint x="905" y="207" />
<di:waypoint x="960" y="207" />
<di:waypoint x="960" y="447" />
<di:waypoint x="980" y="447" />
<bpmndi:BPMNLabel><dc:Bounds x="911" y="187" width="21" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcr9_di" bpmnElement="fcr9">
<di:waypoint x="905" y="207" />
<di:waypoint x="960" y="207" />
<di:waypoint x="960" y="262" />
<di:waypoint x="510" y="262" />
<di:waypoint x="510" y="77" />
<di:waypoint x="530" y="77" />
<bpmndi:BPMNLabel><dc:Bounds x="911" y="213" width="17" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcr10_di" bpmnElement="fcr10">
<di:waypoint x="1080" y="447" />
<di:waypoint x="1110" y="447" />
<di:waypoint x="1110" y="207" />
<di:waypoint x="1130" y="207" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcr11_di" bpmnElement="fcr11">
<di:waypoint x="1230" y="207" />
<di:waypoint x="1260" y="207" />
<di:waypoint x="1260" y="77" />
<di:waypoint x="1280" y="77" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcr12_di" bpmnElement="fcr12">
<di:waypoint x="1380" y="77" />
<di:waypoint x="1462" y="77" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn2:definitions>Frequently asked questions
Where would a reminder timer attach in this model?
Before the start event conceptually: the process should be triggered by a timer watching the contract end date, for example ninety days before expiry so the notice period is never missed. You could model that explicitly with a timer start event; this example keeps a plain start named "Renewal window open" for readability.
Why does the negotiation loop go back to the task and not through a gateway?
A sequence flow may target any earlier activity directly, and "Negotiate renewal terms" simply has two incoming flows: one from the renew decision and one from the failed review. An extra merge gateway in front of it would be legal BPMN but adds a symbol without adding clarity for a straightforward rework loop.
Should the supplier appear as a pool during negotiation?
Only if you want to model the exchange of offers explicitly. Negotiation is compressed into a single user task here, which suits an internal audience mapping roles and approvals. For a view of correspondence with the supplier, add a collapsed pool and message flows carrying the offer and counter offer, as the tender example does.
Related BPMN examples
Purchase requisition
A purchase requisition process as a BPMN 2.0 diagram: request, completeness check, manager approval, and PO creation. View the swimlanes and download the .bpmn file free.
Purchase order approval
A purchase order approval workflow as a BPMN 2.0 diagram, with a value threshold routing orders to the budget holder or finance. Free .bpmn file download included.
Vendor onboarding
A vendor onboarding process as a BPMN 2.0 diagram: document collection, sanctions screening, bank verification, and activation. Download the .bpmn file free.
Supplier evaluation
A supplier evaluation process as a BPMN 2.0 diagram: parallel data gathering, scoring, and an improvement plan branch. View it and download the .bpmn file free.
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