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.
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>