Skip to content
BPMN 2.0 templates

Quote follow-up with an event-based gateway

A worked example of the event-based gateway: after a quotation is sent the process waits for whichever happens first — the customer accepts (purchase order), declines, or 14 days pass — with up to two follow-ups before the opportunity is recorded as lost. Accepted quotes become sales orders. Illustrative follow-up timing.

Template previewBPMN 2.0
Rendering…

Make it your own.

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="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="Process_QuoteFollowUp_defs" targetNamespace="http://flowss.ai/bpmn">
  <bpmn:message id="Msg_RFQ" name="Request for quotation"/>
  <bpmn:message id="Msg_PurchaseOrder" name="Purchase order"/>
  <bpmn:message id="Msg_Decline" name="Decline"/>
  <bpmn:process id="Process_QuoteFollowUp" name="Quote follow-up" isExecutable="false">
    <bpmn:documentation>Event-based gateway pattern. The gateway is followed only by intermediate catch events — two message events and a timer — and the first one to occur wins; the others are withdrawn. When the timer wins, the follow-up count is checked first: with fewer than two follow-ups the sales representative contacts the customer and the process returns to the gateway; once two follow-ups have gone unanswered the quote is treated as lost, alongside an explicit decline. Discount authority is checked by a business-rule task before the quote is sent. The 14-day wait and two follow-ups are illustrative.</bpmn:documentation>
    <bpmn:laneSet id="Process_QuoteFollowUp_lanes">
      <bpmn:lane id="Lane_SalesRep" name="Sales representative"><bpmn:flowNodeRef>Start_RFQ</bpmn:flowNodeRef><bpmn:flowNodeRef>Task_Prepare</bpmn:flowNodeRef><bpmn:flowNodeRef>Task_SendQuote</bpmn:flowNodeRef><bpmn:flowNodeRef>Gw_WaitMerge</bpmn:flowNodeRef><bpmn:flowNodeRef>Gw_AwaitResponse</bpmn:flowNodeRef><bpmn:flowNodeRef>Catch_Accepted</bpmn:flowNodeRef><bpmn:flowNodeRef>Catch_Declined</bpmn:flowNodeRef><bpmn:flowNodeRef>Catch_NoReply</bpmn:flowNodeRef><bpmn:flowNodeRef>Gw_FollowUps</bpmn:flowNodeRef><bpmn:flowNodeRef>Task_FollowUp</bpmn:flowNodeRef><bpmn:flowNodeRef>Gw_LostMerge</bpmn:flowNodeRef><bpmn:flowNodeRef>Task_LossReason</bpmn:flowNodeRef><bpmn:flowNodeRef>End_Lost</bpmn:flowNodeRef><bpmn:flowNodeRef>Task_Confirm</bpmn:flowNodeRef><bpmn:flowNodeRef>End_Won</bpmn:flowNodeRef></bpmn:lane>
      <bpmn:lane id="Lane_SalesOps" name="Sales operations"><bpmn:flowNodeRef>Task_Price</bpmn:flowNodeRef><bpmn:flowNodeRef>Task_Convert</bpmn:flowNodeRef></bpmn:lane>
    </bpmn:laneSet>
    <bpmn:startEvent id="Start_RFQ" name="Quote requested"><bpmn:messageEventDefinition id="Start_RFQ_ed" messageRef="Msg_RFQ"/></bpmn:startEvent>
    <bpmn:userTask id="Task_Prepare" name="Prepare quotation"/>
    <bpmn:businessRuleTask id="Task_Price" name="Check discount authority"/>
    <bpmn:sendTask id="Task_SendQuote" name="Send quotation"/>
    <bpmn:exclusiveGateway id="Gw_WaitMerge"/>
    <bpmn:eventBasedGateway id="Gw_AwaitResponse" name="Await response"/>
    <bpmn:intermediateCatchEvent id="Catch_Accepted" name="Quote accepted"><bpmn:messageEventDefinition id="Catch_Accepted_ed" messageRef="Msg_PurchaseOrder"/></bpmn:intermediateCatchEvent>
    <bpmn:intermediateCatchEvent id="Catch_Declined" name="Quote declined"><bpmn:messageEventDefinition id="Catch_Declined_ed" messageRef="Msg_Decline"/></bpmn:intermediateCatchEvent>
    <bpmn:intermediateCatchEvent id="Catch_NoReply" name="14 days without reply"><bpmn:timerEventDefinition id="Catch_NoReply_ed"><bpmn:timeDuration xsi:type="bpmn:tFormalExpression">P14D</bpmn:timeDuration></bpmn:timerEventDefinition></bpmn:intermediateCatchEvent>
    <bpmn:exclusiveGateway id="Gw_FollowUps" name="Two follow-ups sent?" default="Flow_10"/>
    <bpmn:userTask id="Task_FollowUp" name="Follow up with customer"/>
    <bpmn:exclusiveGateway id="Gw_LostMerge"/>
    <bpmn:userTask id="Task_LossReason" name="Record loss reason"/>
    <bpmn:endEvent id="End_Lost" name="Opportunity lost"/>
    <bpmn:serviceTask id="Task_Convert" name="Convert to sales order"/>
    <bpmn:sendTask id="Task_Confirm" name="Send order confirmation"/>
    <bpmn:endEvent id="End_Won" name="Quote won"/>
    <bpmn:sequenceFlow id="Flow_1" sourceRef="Start_RFQ" targetRef="Task_Prepare"/>
    <bpmn:sequenceFlow id="Flow_2" sourceRef="Task_Prepare" targetRef="Task_Price"/>
    <bpmn:sequenceFlow id="Flow_3" sourceRef="Task_Price" targetRef="Task_SendQuote"/>
    <bpmn:sequenceFlow id="Flow_4" sourceRef="Task_SendQuote" targetRef="Gw_WaitMerge"/>
    <bpmn:sequenceFlow id="Flow_5" sourceRef="Gw_WaitMerge" targetRef="Gw_AwaitResponse"/>
    <bpmn:sequenceFlow id="Flow_6" sourceRef="Gw_AwaitResponse" targetRef="Catch_Accepted"/>
    <bpmn:sequenceFlow id="Flow_7" sourceRef="Gw_AwaitResponse" targetRef="Catch_Declined"/>
    <bpmn:sequenceFlow id="Flow_8" sourceRef="Gw_AwaitResponse" targetRef="Catch_NoReply"/>
    <bpmn:sequenceFlow id="Flow_9" sourceRef="Catch_NoReply" targetRef="Gw_FollowUps"/>
    <bpmn:sequenceFlow id="Flow_10" name="no" sourceRef="Gw_FollowUps" targetRef="Task_FollowUp"/>
    <bpmn:sequenceFlow id="Flow_11" sourceRef="Task_FollowUp" targetRef="Gw_WaitMerge"/>
    <bpmn:sequenceFlow id="Flow_12" name="yes" sourceRef="Gw_FollowUps" targetRef="Gw_LostMerge"><bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=followUps &gt;= 2</bpmn:conditionExpression></bpmn:sequenceFlow>
    <bpmn:sequenceFlow id="Flow_13" sourceRef="Catch_Declined" targetRef="Gw_LostMerge"/>
    <bpmn:sequenceFlow id="Flow_14" sourceRef="Gw_LostMerge" targetRef="Task_LossReason"/>
    <bpmn:sequenceFlow id="Flow_15" sourceRef="Task_LossReason" targetRef="End_Lost"/>
    <bpmn:sequenceFlow id="Flow_16" sourceRef="Catch_Accepted" targetRef="Task_Convert"/>
    <bpmn:sequenceFlow id="Flow_17" sourceRef="Task_Convert" targetRef="Task_Confirm"/>
    <bpmn:sequenceFlow id="Flow_18" sourceRef="Task_Confirm" targetRef="End_Won"/>
    <bpmn:textAnnotation id="Note_Timing"><bpmn:text>14-day wait and two follow-ups are illustrative sales-policy values.</bpmn:text></bpmn:textAnnotation>
  </bpmn:process>
  <bpmn:collaboration id="Process_QuoteFollowUp_collab">
    <bpmn:participant id="Process_QuoteFollowUp_pool" name="Seller — sales" processRef="Process_QuoteFollowUp"/>
    <bpmn:participant id="Participant_Customer" name="Customer"/>
    <bpmn:messageFlow id="MsgFlow_RFQ" name="Request for quotation" sourceRef="Participant_Customer" targetRef="Start_RFQ"/>
    <bpmn:messageFlow id="MsgFlow_Quote" name="Quotation" sourceRef="Task_SendQuote" targetRef="Participant_Customer"/>
    <bpmn:messageFlow id="MsgFlow_PO" name="Purchase order" sourceRef="Participant_Customer" targetRef="Catch_Accepted"/>
    <bpmn:messageFlow id="MsgFlow_Decline" name="Decline" sourceRef="Participant_Customer" targetRef="Catch_Declined"/>
    <bpmn:messageFlow id="MsgFlow_Confirm" name="Order confirmation" sourceRef="Task_Confirm" targetRef="Participant_Customer"/>
  </bpmn:collaboration>
  <bpmndi:BPMNDiagram id="Process_QuoteFollowUp_di">
    <bpmndi:BPMNPlane id="Process_QuoteFollowUp_plane" bpmnElement="Process_QuoteFollowUp_collab">
      <bpmndi:BPMNShape id="Process_QuoteFollowUp_pool_di" bpmnElement="Process_QuoteFollowUp_pool" isHorizontal="true"><dc:Bounds x="160" y="200" width="1848" height="540"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Lane_SalesRep_di" bpmnElement="Lane_SalesRep" isHorizontal="true"><dc:Bounds x="190" y="200" width="1818" height="390"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Lane_SalesOps_di" bpmnElement="Lane_SalesOps" isHorizontal="true"><dc:Bounds x="190" y="590" width="1818" height="150"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Participant_Customer_di" bpmnElement="Participant_Customer" isHorizontal="true"><dc:Bounds x="160" y="60" width="1848" height="60"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Start_RFQ_di" bpmnElement="Start_RFQ"><dc:Bounds x="262" y="257" width="36" height="36"/><bpmndi:BPMNLabel><dc:Bounds x="238" y="298" width="84" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Task_Prepare_di" bpmnElement="Task_Prepare"><dc:Bounds x="380" y="235" width="100" height="80"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Task_Price_di" bpmnElement="Task_Price"><dc:Bounds x="530" y="625" width="100" height="80"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Task_SendQuote_di" bpmnElement="Task_SendQuote"><dc:Bounds x="680" y="235" width="100" height="80"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Gw_WaitMerge_di" bpmnElement="Gw_WaitMerge" isMarkerVisible="true"><dc:Bounds x="855" y="250" width="50" height="50"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Gw_AwaitResponse_di" bpmnElement="Gw_AwaitResponse"><dc:Bounds x="1005" y="250" width="50" height="50"/><bpmndi:BPMNLabel><dc:Bounds x="991" y="231" width="78" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Catch_Accepted_di" bpmnElement="Catch_Accepted"><dc:Bounds x="1162" y="257" width="36" height="36"/><bpmndi:BPMNLabel><dc:Bounds x="1140" y="298" width="80" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Catch_Declined_di" bpmnElement="Catch_Declined"><dc:Bounds x="1312" y="357" width="36" height="36"/><bpmndi:BPMNLabel><dc:Bounds x="1292" y="398" width="76" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Catch_NoReply_di" bpmnElement="Catch_NoReply"><dc:Bounds x="1162" y="457" width="36" height="36"/><bpmndi:BPMNLabel><dc:Bounds x="1141" y="498" width="79" height="28"/></bpmndi:BPMNLabel></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Gw_FollowUps_di" bpmnElement="Gw_FollowUps" isMarkerVisible="true"><dc:Bounds x="1305" y="450" width="50" height="50"/><bpmndi:BPMNLabel><dc:Bounds x="1338" y="420" width="76" height="28"/></bpmndi:BPMNLabel></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Task_FollowUp_di" bpmnElement="Task_FollowUp"><dc:Bounds x="1430" y="435" width="100" height="80"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Gw_LostMerge_di" bpmnElement="Gw_LostMerge" isMarkerVisible="true"><dc:Bounds x="1605" y="350" width="50" height="50"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Task_LossReason_di" bpmnElement="Task_LossReason"><dc:Bounds x="1730" y="335" width="100" height="80"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="End_Lost_di" bpmnElement="End_Lost"><dc:Bounds x="1912" y="357" width="36" height="36"/><bpmndi:BPMNLabel><dc:Bounds x="1890" y="398" width="80" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Task_Convert_di" bpmnElement="Task_Convert"><dc:Bounds x="1430" y="625" width="100" height="80"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Task_Confirm_di" bpmnElement="Task_Confirm"><dc:Bounds x="1580" y="235" width="100" height="80"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="End_Won_di" bpmnElement="End_Won"><dc:Bounds x="1762" y="257" width="36" height="36"/><bpmndi:BPMNLabel><dc:Bounds x="1752" y="298" width="56" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="Flow_1_di" bpmnElement="Flow_1"><di:waypoint x="298" y="275"/><di:waypoint x="380" y="275"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_2_di" bpmnElement="Flow_2"><di:waypoint x="480" y="275"/><di:waypoint x="505" y="275"/><di:waypoint x="505" y="665"/><di:waypoint x="530" y="665"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_3_di" bpmnElement="Flow_3"><di:waypoint x="630" y="665"/><di:waypoint x="655" y="665"/><di:waypoint x="655" y="275"/><di:waypoint x="680" y="275"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_4_di" bpmnElement="Flow_4"><di:waypoint x="780" y="275"/><di:waypoint x="855" y="275"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_5_di" bpmnElement="Flow_5"><di:waypoint x="905" y="275"/><di:waypoint x="1005" y="275"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_6_di" bpmnElement="Flow_6"><di:waypoint x="1055" y="275"/><di:waypoint x="1162" y="275"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_7_di" bpmnElement="Flow_7"><di:waypoint x="1030" y="300"/><di:waypoint x="1030" y="375"/><di:waypoint x="1312" y="375"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_8_di" bpmnElement="Flow_8"><di:waypoint x="1030" y="300"/><di:waypoint x="1030" y="475"/><di:waypoint x="1162" y="475"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_9_di" bpmnElement="Flow_9"><di:waypoint x="1198" y="475"/><di:waypoint x="1305" y="475"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_10_di" bpmnElement="Flow_10"><di:waypoint x="1355" y="475"/><di:waypoint x="1430" y="475"/><bpmndi:BPMNLabel><dc:Bounds x="1361" y="456" width="15" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_11_di" bpmnElement="Flow_11"><di:waypoint x="1480" y="515"/><di:waypoint x="1480" y="560"/><di:waypoint x="880" y="560"/><di:waypoint x="880" y="300"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_12_di" bpmnElement="Flow_12"><di:waypoint x="1330" y="500"/><di:waypoint x="1330" y="535"/><di:waypoint x="1630" y="535"/><di:waypoint x="1630" y="400"/><bpmndi:BPMNLabel><dc:Bounds x="1336" y="503" width="20" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_13_di" bpmnElement="Flow_13"><di:waypoint x="1348" y="375"/><di:waypoint x="1605" y="375"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_14_di" bpmnElement="Flow_14"><di:waypoint x="1655" y="375"/><di:waypoint x="1730" y="375"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_15_di" bpmnElement="Flow_15"><di:waypoint x="1830" y="375"/><di:waypoint x="1912" y="375"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_16_di" bpmnElement="Flow_16"><di:waypoint x="1198" y="275"/><di:waypoint x="1221" y="275"/><di:waypoint x="1221" y="665"/><di:waypoint x="1430" y="665"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_17_di" bpmnElement="Flow_17"><di:waypoint x="1530" y="665"/><di:waypoint x="1555" y="665"/><di:waypoint x="1555" y="275"/><di:waypoint x="1580" y="275"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_18_di" bpmnElement="Flow_18"><di:waypoint x="1680" y="275"/><di:waypoint x="1762" y="275"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="Note_Timing_di" bpmnElement="Note_Timing"><dc:Bounds x="820" y="640" width="230" height="44"/></bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="MsgFlow_RFQ_di" bpmnElement="MsgFlow_RFQ"><di:waypoint x="280" y="120"/><di:waypoint x="280" y="257"/><bpmndi:BPMNLabel><dc:Bounds x="286" y="146" width="59" height="28"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="MsgFlow_Quote_di" bpmnElement="MsgFlow_Quote"><di:waypoint x="730" y="235"/><di:waypoint x="730" y="120"/><bpmndi:BPMNLabel><dc:Bounds x="736" y="153" width="50" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="MsgFlow_PO_di" bpmnElement="MsgFlow_PO"><di:waypoint x="1180" y="120"/><di:waypoint x="1180" y="257"/><bpmndi:BPMNLabel><dc:Bounds x="1186" y="153" width="78" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="MsgFlow_Decline_di" bpmnElement="MsgFlow_Decline"><di:waypoint x="1330" y="120"/><di:waypoint x="1330" y="357"/><bpmndi:BPMNLabel><dc:Bounds x="1336" y="153" width="39" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="MsgFlow_Confirm_di" bpmnElement="MsgFlow_Confirm"><di:waypoint x="1630" y="235"/><di:waypoint x="1630" y="120"/><bpmndi:BPMNLabel><dc:Bounds x="1636" y="146" width="62" height="28"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn:definitions>