Skip to content
BPMN 2.0 templates

Invoice approval with timer escalation

Accounts-payable invoice approval: capture, duplicate check, GL coding, approver routing from an authority matrix, budget-holder approval guarded by a 3-day interrupting timer boundary event that escalates to the finance manager, rejection back to the supplier, and payment with remittance. Illustrative escalation period.

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_InvoiceApproval_defs" targetNamespace="http://flowss.ai/bpmn">
  <bpmn:message id="Msg_Invoice" name="Supplier invoice"/>
  <bpmn:process id="Process_InvoiceApproval" name="Invoice approval" isExecutable="false">
    <bpmn:documentation>Supplier invoice approval. Captured invoices are checked for duplicates (same supplier, number and amount) before coding. The approver is chosen by a business-rule task over the delegation-of-authority matrix. The budget holder's approval task carries an interrupting timer boundary event: with no decision after 3 days the task is cancelled and the invoice escalates to the finance manager. Duplicates and rejected invoices are returned to the supplier. The 3-day period is an illustrative policy value.</bpmn:documentation>
    <bpmn:laneSet id="Process_InvoiceApproval_lanes">
      <bpmn:lane id="Lane_AP" name="Accounts payable"><bpmn:flowNodeRef>Start_Invoice</bpmn:flowNodeRef><bpmn:flowNodeRef>Task_Capture</bpmn:flowNodeRef><bpmn:flowNodeRef>Task_DuplicateCheck</bpmn:flowNodeRef><bpmn:flowNodeRef>Gw_Duplicate</bpmn:flowNodeRef><bpmn:flowNodeRef>Task_Code</bpmn:flowNodeRef><bpmn:flowNodeRef>Task_Route</bpmn:flowNodeRef><bpmn:flowNodeRef>Gw_RejectMerge</bpmn:flowNodeRef><bpmn:flowNodeRef>Task_Return</bpmn:flowNodeRef><bpmn:flowNodeRef>End_Returned</bpmn:flowNodeRef><bpmn:flowNodeRef>Task_Schedule</bpmn:flowNodeRef><bpmn:flowNodeRef>Task_Pay</bpmn:flowNodeRef><bpmn:flowNodeRef>End_Paid</bpmn:flowNodeRef></bpmn:lane>
      <bpmn:lane id="Lane_BudgetHolder" name="Budget holder"><bpmn:flowNodeRef>Task_Approve</bpmn:flowNodeRef><bpmn:flowNodeRef>Timer_Escalate</bpmn:flowNodeRef><bpmn:flowNodeRef>Gw_BudgetHolder</bpmn:flowNodeRef><bpmn:flowNodeRef>Gw_ApproveMerge</bpmn:flowNodeRef></bpmn:lane>
      <bpmn:lane id="Lane_FinanceManager" name="Finance manager"><bpmn:flowNodeRef>Task_EscalatedApproval</bpmn:flowNodeRef><bpmn:flowNodeRef>Gw_FinanceManager</bpmn:flowNodeRef></bpmn:lane>
    </bpmn:laneSet>
    <bpmn:startEvent id="Start_Invoice" name="Invoice received"><bpmn:messageEventDefinition id="Start_Invoice_ed" messageRef="Msg_Invoice"/></bpmn:startEvent>
    <bpmn:serviceTask id="Task_Capture" name="Capture invoice data"/>
    <bpmn:serviceTask id="Task_DuplicateCheck" name="Check for duplicate"/>
    <bpmn:exclusiveGateway id="Gw_Duplicate" name="Duplicate?" default="Flow_4"/>
    <bpmn:userTask id="Task_Code" name="Code to GL and cost centre"/>
    <bpmn:businessRuleTask id="Task_Route" name="Determine approver"/>
    <bpmn:userTask id="Task_Approve" name="Approve invoice"/>
    <bpmn:boundaryEvent id="Timer_Escalate" name="No decision in 3 days" attachedToRef="Task_Approve"><bpmn:timerEventDefinition id="Timer_Escalate_ed"><bpmn:timeDuration xsi:type="bpmn:tFormalExpression">P3D</bpmn:timeDuration></bpmn:timerEventDefinition></bpmn:boundaryEvent>
    <bpmn:exclusiveGateway id="Gw_BudgetHolder" name="Approved?" default="Flow_10"/>
    <bpmn:userTask id="Task_EscalatedApproval" name="Approve escalated invoice"/>
    <bpmn:exclusiveGateway id="Gw_FinanceManager" name="Approved by finance?" default="Flow_14"/>
    <bpmn:exclusiveGateway id="Gw_RejectMerge"/>
    <bpmn:sendTask id="Task_Return" name="Return invoice to supplier"/>
    <bpmn:endEvent id="End_Returned" name="Invoice returned"/>
    <bpmn:exclusiveGateway id="Gw_ApproveMerge"/>
    <bpmn:serviceTask id="Task_Schedule" name="Schedule in payment run"/>
    <bpmn:sendTask id="Task_Pay" name="Pay and send remittance"/>
    <bpmn:endEvent id="End_Paid" name="Invoice paid"/>
    <bpmn:sequenceFlow id="Flow_1" sourceRef="Start_Invoice" targetRef="Task_Capture"/>
    <bpmn:sequenceFlow id="Flow_2" sourceRef="Task_Capture" targetRef="Task_DuplicateCheck"/>
    <bpmn:sequenceFlow id="Flow_3" sourceRef="Task_DuplicateCheck" targetRef="Gw_Duplicate"/>
    <bpmn:sequenceFlow id="Flow_4" name="no" sourceRef="Gw_Duplicate" targetRef="Task_Code"/>
    <bpmn:sequenceFlow id="Flow_5" name="duplicate" sourceRef="Gw_Duplicate" targetRef="Gw_RejectMerge"><bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=isDuplicate</bpmn:conditionExpression></bpmn:sequenceFlow>
    <bpmn:sequenceFlow id="Flow_6" sourceRef="Task_Code" targetRef="Task_Route"/>
    <bpmn:sequenceFlow id="Flow_7" sourceRef="Task_Route" targetRef="Task_Approve"/>
    <bpmn:sequenceFlow id="Flow_8" sourceRef="Task_Approve" targetRef="Gw_BudgetHolder"/>
    <bpmn:sequenceFlow id="Flow_9" sourceRef="Timer_Escalate" targetRef="Task_EscalatedApproval"/>
    <bpmn:sequenceFlow id="Flow_10" name="approved" sourceRef="Gw_BudgetHolder" targetRef="Gw_ApproveMerge"/>
    <bpmn:sequenceFlow id="Flow_11" name="rejected" sourceRef="Gw_BudgetHolder" targetRef="Gw_RejectMerge"><bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=approved = false</bpmn:conditionExpression></bpmn:sequenceFlow>
    <bpmn:sequenceFlow id="Flow_12" sourceRef="Task_EscalatedApproval" targetRef="Gw_FinanceManager"/>
    <bpmn:sequenceFlow id="Flow_13" name="rejected" sourceRef="Gw_FinanceManager" targetRef="Gw_RejectMerge"><bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=approved = false</bpmn:conditionExpression></bpmn:sequenceFlow>
    <bpmn:sequenceFlow id="Flow_14" name="approved" sourceRef="Gw_FinanceManager" targetRef="Gw_ApproveMerge"/>
    <bpmn:sequenceFlow id="Flow_15" sourceRef="Gw_RejectMerge" targetRef="Task_Return"/>
    <bpmn:sequenceFlow id="Flow_16" sourceRef="Task_Return" targetRef="End_Returned"/>
    <bpmn:sequenceFlow id="Flow_17" sourceRef="Gw_ApproveMerge" targetRef="Task_Schedule"/>
    <bpmn:sequenceFlow id="Flow_18" sourceRef="Task_Schedule" targetRef="Task_Pay"/>
    <bpmn:sequenceFlow id="Flow_19" sourceRef="Task_Pay" targetRef="End_Paid"/>
    <bpmn:textAnnotation id="Note_Policy"><bpmn:text>The 3-day escalation and the authority matrix are illustrative policy settings.</bpmn:text></bpmn:textAnnotation>
  </bpmn:process>
  <bpmn:collaboration id="Process_InvoiceApproval_collab">
    <bpmn:participant id="Process_InvoiceApproval_pool" name="Buyer — accounts payable" processRef="Process_InvoiceApproval"/>
    <bpmn:participant id="Participant_Supplier" name="Supplier"/>
    <bpmn:messageFlow id="MsgFlow_Invoice" name="Invoice" sourceRef="Participant_Supplier" targetRef="Start_Invoice"/>
    <bpmn:messageFlow id="MsgFlow_Return" name="Rejection notice" sourceRef="Task_Return" targetRef="Participant_Supplier"/>
    <bpmn:messageFlow id="MsgFlow_Remittance" name="Payment and remittance" sourceRef="Task_Pay" targetRef="Participant_Supplier"/>
  </bpmn:collaboration>
  <bpmndi:BPMNDiagram id="Process_InvoiceApproval_di">
    <bpmndi:BPMNPlane id="Process_InvoiceApproval_plane" bpmnElement="Process_InvoiceApproval_collab">
      <bpmndi:BPMNShape id="Process_InvoiceApproval_pool_di" bpmnElement="Process_InvoiceApproval_pool" isHorizontal="true"><dc:Bounds x="160" y="200" width="2298" height="490"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Lane_AP_di" bpmnElement="Lane_AP" isHorizontal="true"><dc:Bounds x="190" y="200" width="2268" height="190"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Lane_BudgetHolder_di" bpmnElement="Lane_BudgetHolder" isHorizontal="true"><dc:Bounds x="190" y="390" width="2268" height="150"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Lane_FinanceManager_di" bpmnElement="Lane_FinanceManager" isHorizontal="true"><dc:Bounds x="190" y="540" width="2268" height="150"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Participant_Supplier_di" bpmnElement="Participant_Supplier" isHorizontal="true"><dc:Bounds x="160" y="60" width="2298" height="60"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Start_Invoice_di" bpmnElement="Start_Invoice"><dc:Bounds x="262" y="297" width="36" height="36"/><bpmndi:BPMNLabel><dc:Bounds x="239" y="338" width="82" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Task_Capture_di" bpmnElement="Task_Capture"><dc:Bounds x="380" y="275" width="100" height="80"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Task_DuplicateCheck_di" bpmnElement="Task_DuplicateCheck"><dc:Bounds x="530" y="275" width="100" height="80"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Gw_Duplicate_di" bpmnElement="Gw_Duplicate" isMarkerVisible="true"><dc:Bounds x="705" y="290" width="50" height="50"/><bpmndi:BPMNLabel><dc:Bounds x="703" y="345" width="54" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Task_Code_di" bpmnElement="Task_Code"><dc:Bounds x="830" y="275" width="100" height="80"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Task_Route_di" bpmnElement="Task_Route"><dc:Bounds x="980" y="275" width="100" height="80"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Task_Approve_di" bpmnElement="Task_Approve"><dc:Bounds x="1130" y="425" width="100" height="80"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Timer_Escalate_di" bpmnElement="Timer_Escalate"><dc:Bounds x="1142" y="487" width="36" height="36"/><bpmndi:BPMNLabel><dc:Bounds x="1174" y="521" width="81" height="28"/></bpmndi:BPMNLabel></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Gw_BudgetHolder_di" bpmnElement="Gw_BudgetHolder" isMarkerVisible="true"><dc:Bounds x="1305" y="440" width="50" height="50"/><bpmndi:BPMNLabel><dc:Bounds x="1302" y="495" width="56" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Task_EscalatedApproval_di" bpmnElement="Task_EscalatedApproval"><dc:Bounds x="1280" y="575" width="100" height="80"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Gw_FinanceManager_di" bpmnElement="Gw_FinanceManager" isMarkerVisible="true"><dc:Bounds x="1455" y="590" width="50" height="50"/><bpmndi:BPMNLabel><dc:Bounds x="1448" y="645" width="64" height="28"/></bpmndi:BPMNLabel></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Gw_RejectMerge_di" bpmnElement="Gw_RejectMerge" isMarkerVisible="true"><dc:Bounds x="1455" y="290" width="50" height="50"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Task_Return_di" bpmnElement="Task_Return"><dc:Bounds x="1580" y="275" width="100" height="80"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="End_Returned_di" bpmnElement="End_Returned"><dc:Bounds x="1762" y="297" width="36" height="36"/><bpmndi:BPMNLabel><dc:Bounds x="1740" y="338" width="81" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Gw_ApproveMerge_di" bpmnElement="Gw_ApproveMerge" isMarkerVisible="true"><dc:Bounds x="1905" y="440" width="50" height="50"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Task_Schedule_di" bpmnElement="Task_Schedule"><dc:Bounds x="2030" y="275" width="100" height="80"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Task_Pay_di" bpmnElement="Task_Pay"><dc:Bounds x="2180" y="275" width="100" height="80"/></bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="End_Paid_di" bpmnElement="End_Paid"><dc:Bounds x="2362" y="297" width="36" height="36"/><bpmndi:BPMNLabel><dc:Bounds x="2350" y="338" width="61" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="Flow_1_di" bpmnElement="Flow_1"><di:waypoint x="298" y="315"/><di:waypoint x="380" y="315"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_2_di" bpmnElement="Flow_2"><di:waypoint x="480" y="315"/><di:waypoint x="530" y="315"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_3_di" bpmnElement="Flow_3"><di:waypoint x="630" y="315"/><di:waypoint x="705" y="315"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_4_di" bpmnElement="Flow_4"><di:waypoint x="755" y="315"/><di:waypoint x="830" y="315"/><bpmndi:BPMNLabel><dc:Bounds x="761" y="296" width="15" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_5_di" bpmnElement="Flow_5"><di:waypoint x="730" y="290"/><di:waypoint x="730" y="237"/><di:waypoint x="1480" y="237"/><di:waypoint x="1480" y="290"/><bpmndi:BPMNLabel><dc:Bounds x="736" y="271" width="47" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_6_di" bpmnElement="Flow_6"><di:waypoint x="930" y="315"/><di:waypoint x="980" y="315"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_7_di" bpmnElement="Flow_7"><di:waypoint x="1080" y="315"/><di:waypoint x="1105" y="315"/><di:waypoint x="1105" y="465"/><di:waypoint x="1130" y="465"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_8_di" bpmnElement="Flow_8"><di:waypoint x="1230" y="465"/><di:waypoint x="1305" y="465"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_9_di" bpmnElement="Flow_9"><di:waypoint x="1160" y="523"/><di:waypoint x="1160" y="615"/><di:waypoint x="1280" y="615"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_10_di" bpmnElement="Flow_10"><di:waypoint x="1355" y="465"/><di:waypoint x="1905" y="465"/><bpmndi:BPMNLabel><dc:Bounds x="1361" y="446" width="48" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_11_di" bpmnElement="Flow_11"><di:waypoint x="1330" y="440"/><di:waypoint x="1330" y="315"/><di:waypoint x="1455" y="315"/><bpmndi:BPMNLabel><dc:Bounds x="1336" y="421" width="42" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_12_di" bpmnElement="Flow_12"><di:waypoint x="1380" y="615"/><di:waypoint x="1455" y="615"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_13_di" bpmnElement="Flow_13"><di:waypoint x="1480" y="590"/><di:waypoint x="1480" y="340"/><bpmndi:BPMNLabel><dc:Bounds x="1486" y="571" width="42" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_14_di" bpmnElement="Flow_14"><di:waypoint x="1505" y="615"/><di:waypoint x="1930" y="615"/><di:waypoint x="1930" y="490"/><bpmndi:BPMNLabel><dc:Bounds x="1511" y="596" width="48" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_15_di" bpmnElement="Flow_15"><di:waypoint x="1505" y="315"/><di:waypoint x="1580" y="315"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_16_di" bpmnElement="Flow_16"><di:waypoint x="1680" y="315"/><di:waypoint x="1762" y="315"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_17_di" bpmnElement="Flow_17"><di:waypoint x="1930" y="440"/><di:waypoint x="1930" y="315"/><di:waypoint x="2030" y="315"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_18_di" bpmnElement="Flow_18"><di:waypoint x="2130" y="315"/><di:waypoint x="2180" y="315"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_19_di" bpmnElement="Flow_19"><di:waypoint x="2280" y="315"/><di:waypoint x="2362" y="315"/></bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="Note_Policy_di" bpmnElement="Note_Policy"><dc:Bounds x="2050" y="590" width="240" height="44"/></bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="MsgFlow_Invoice_di" bpmnElement="MsgFlow_Invoice"><di:waypoint x="280" y="120"/><di:waypoint x="280" y="297"/><bpmndi:BPMNLabel><dc:Bounds x="286" y="153" width="37" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="MsgFlow_Return_di" bpmnElement="MsgFlow_Return"><di:waypoint x="1630" y="275"/><di:waypoint x="1630" y="120"/><bpmndi:BPMNLabel><dc:Bounds x="1636" y="153" width="81" height="15"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="MsgFlow_Remittance_di" bpmnElement="MsgFlow_Remittance"><di:waypoint x="2230" y="275"/><di:waypoint x="2230" y="120"/><bpmndi:BPMNLabel><dc:Bounds x="2236" y="146" width="67" height="28"/></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn:definitions>