<?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:zeebe="http://camunda.org/schema/zeebe/1.0" xmlns:modeler="http://camunda.org/schema/modeler/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="@bpmnkit/core" exporterVersion="0.0.23" modeler:executionPlatform="Camunda Cloud" modeler:executionPlatformVersion="8.9.0">
  <bpmn:process id="expense-approval" name="Expense Report Approval" isExecutable="true">
    <bpmn:extensionElements>
      <zeebe:versionTag value="1.0.0"/>
    </bpmn:extensionElements>
    <bpmn:startEvent id="report-submitted" name="Expense report submitted">
      <bpmn:outgoing>Flow_report-submitted_total-expenses</bpmn:outgoing>
    </bpmn:startEvent>
    <bpmn:scriptTask id="total-expenses" name="Total the report">
      <bpmn:extensionElements>
        <zeebe:script expression="=sum(for line in expenses return line.amount)" resultVariable="total"/>
      </bpmn:extensionElements>
      <bpmn:incoming>Flow_report-submitted_total-expenses</bpmn:incoming>
      <bpmn:outgoing>Flow_total-expenses_needs-review</bpmn:outgoing>
    </bpmn:scriptTask>
    <bpmn:exclusiveGateway id="needs-review" name="Over 100?" default="Flow_needs-review_manager-review">
      <bpmn:incoming>Flow_total-expenses_needs-review</bpmn:incoming>
      <bpmn:outgoing>Flow_needs-review_pay-merge</bpmn:outgoing>
      <bpmn:outgoing>Flow_needs-review_manager-review</bpmn:outgoing>
    </bpmn:exclusiveGateway>
    <bpmn:userTask id="manager-review" name="Manager review">
      <bpmn:extensionElements>
        <zeebe:userTask/>
        <zeebe:assignmentDefinition assignee="=managerId"/>
      </bpmn:extensionElements>
      <bpmn:incoming>Flow_needs-review_manager-review</bpmn:incoming>
      <bpmn:outgoing>Flow_manager-review_review-merge</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:boundaryEvent id="review-overdue" name="2 days without action" attachedToRef="manager-review">
      <bpmn:outgoing>Flow_review-overdue_finance-review</bpmn:outgoing>
      <bpmn:timerEventDefinition>
        <bpmn:timeDuration>P2D</bpmn:timeDuration>
      </bpmn:timerEventDefinition>
    </bpmn:boundaryEvent>
    <bpmn:userTask id="finance-review" name="Finance review">
      <bpmn:extensionElements>
        <zeebe:userTask/>
        <zeebe:assignmentDefinition candidateGroups="finance"/>
      </bpmn:extensionElements>
      <bpmn:incoming>Flow_review-overdue_finance-review</bpmn:incoming>
      <bpmn:outgoing>Flow_finance-review_review-merge</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:exclusiveGateway id="review-merge">
      <bpmn:incoming>Flow_manager-review_review-merge</bpmn:incoming>
      <bpmn:incoming>Flow_finance-review_review-merge</bpmn:incoming>
      <bpmn:outgoing>Flow_review-merge_decision</bpmn:outgoing>
    </bpmn:exclusiveGateway>
    <bpmn:exclusiveGateway id="decision" name="Approved?" default="Flow_decision_return-report">
      <bpmn:incoming>Flow_review-merge_decision</bpmn:incoming>
      <bpmn:outgoing>Flow_decision_pay-merge</bpmn:outgoing>
      <bpmn:outgoing>Flow_decision_return-report</bpmn:outgoing>
    </bpmn:exclusiveGateway>
    <bpmn:serviceTask id="return-report" name="Return report to employee">
      <bpmn:extensionElements>
        <zeebe:taskDefinition type="employee-notify"/>
        <zeebe:taskHeaders>
          <zeebe:header key="template" value="expense-rejected"/>
        </zeebe:taskHeaders>
      </bpmn:extensionElements>
      <bpmn:incoming>Flow_decision_return-report</bpmn:incoming>
      <bpmn:outgoing>Flow_return-report_report-rejected</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:endEvent id="report-rejected" name="Report rejected">
      <bpmn:incoming>Flow_return-report_report-rejected</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:exclusiveGateway id="pay-merge">
      <bpmn:incoming>Flow_needs-review_pay-merge</bpmn:incoming>
      <bpmn:incoming>Flow_decision_pay-merge</bpmn:incoming>
      <bpmn:outgoing>Flow_pay-merge_reimburse</bpmn:outgoing>
    </bpmn:exclusiveGateway>
    <bpmn:serviceTask id="reimburse" name="Reimburse employee">
      <bpmn:extensionElements>
        <zeebe:taskDefinition type="payment-reimburse"/>
        <zeebe:ioMapping>
          <zeebe:input source="=total" target="payoutAmount"/>
          <zeebe:output source="=paymentId" target="paymentId"/>
        </zeebe:ioMapping>
      </bpmn:extensionElements>
      <bpmn:incoming>Flow_pay-merge_reimburse</bpmn:incoming>
      <bpmn:outgoing>Flow_reimburse_reimbursed</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:endEvent id="reimbursed" name="Reimbursed">
      <bpmn:incoming>Flow_reimburse_reimbursed</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="Flow_report-submitted_total-expenses" sourceRef="report-submitted" targetRef="total-expenses"/>
    <bpmn:sequenceFlow id="Flow_total-expenses_needs-review" sourceRef="total-expenses" targetRef="needs-review"/>
    <bpmn:sequenceFlow id="Flow_needs-review_pay-merge" sourceRef="needs-review" targetRef="pay-merge" name="small">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=total &lt;= 100</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:sequenceFlow id="Flow_needs-review_manager-review" sourceRef="needs-review" targetRef="manager-review" name="review"/>
    <bpmn:sequenceFlow id="Flow_manager-review_review-merge" sourceRef="manager-review" targetRef="review-merge"/>
    <bpmn:sequenceFlow id="Flow_review-overdue_finance-review" sourceRef="review-overdue" targetRef="finance-review"/>
    <bpmn:sequenceFlow id="Flow_finance-review_review-merge" sourceRef="finance-review" targetRef="review-merge"/>
    <bpmn:sequenceFlow id="Flow_review-merge_decision" sourceRef="review-merge" targetRef="decision"/>
    <bpmn:sequenceFlow id="Flow_decision_pay-merge" sourceRef="decision" targetRef="pay-merge" name="approved">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">=approved</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:sequenceFlow id="Flow_decision_return-report" sourceRef="decision" targetRef="return-report" name="rejected"/>
    <bpmn:sequenceFlow id="Flow_return-report_report-rejected" sourceRef="return-report" targetRef="report-rejected"/>
    <bpmn:sequenceFlow id="Flow_pay-merge_reimburse" sourceRef="pay-merge" targetRef="reimburse"/>
    <bpmn:sequenceFlow id="Flow_reimburse_reimbursed" sourceRef="reimburse" targetRef="reimbursed"/>
  </bpmn:process>
  <bpmndi:BPMNDiagram id="expense-approval_di">
    <bpmndi:BPMNPlane id="expense-approval_di_plane" bpmnElement="expense-approval">
      <bpmndi:BPMNShape id="report-submitted_di" bpmnElement="report-submitted">
        <dc:Bounds x="86" y="42" width="36" height="36"/>
        <bpmndi:BPMNLabel>
          <dc:Bounds x="20" y="82" width="168" height="14"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="total-expenses_di" bpmnElement="total-expenses">
        <dc:Bounds x="222" y="20" width="100" height="80"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="needs-review_di" bpmnElement="needs-review">
        <dc:Bounds x="422" y="35" width="50" height="50"/>
        <bpmndi:BPMNLabel>
          <dc:Bounds x="416" y="89" width="63" height="14"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="manager-review_di" bpmnElement="manager-review">
        <dc:Bounds x="572" y="20" width="100" height="80"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="review-overdue_di" bpmnElement="review-overdue">
        <dc:Bounds x="604" y="82" width="36" height="36"/>
        <bpmndi:BPMNLabel>
          <dc:Bounds x="549" y="122" width="147" height="14"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="finance-review_di" bpmnElement="finance-review">
        <dc:Bounds x="772" y="180" width="100" height="80"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="review-merge_di" bpmnElement="review-merge">
        <dc:Bounds x="972" y="35" width="50" height="50"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="decision_di" bpmnElement="decision">
        <dc:Bounds x="1122" y="35" width="50" height="50"/>
        <bpmndi:BPMNLabel>
          <dc:Bounds x="1116" y="89" width="63" height="14"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="return-report_di" bpmnElement="return-report">
        <dc:Bounds x="1272" y="20" width="100" height="80"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="report-rejected_di" bpmnElement="report-rejected">
        <dc:Bounds x="1504" y="42" width="36" height="36"/>
        <bpmndi:BPMNLabel>
          <dc:Bounds x="1470" y="82" width="105" height="14"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="pay-merge_di" bpmnElement="pay-merge">
        <dc:Bounds x="1297" y="195" width="50" height="50"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="reimburse_di" bpmnElement="reimburse">
        <dc:Bounds x="1472" y="180" width="100" height="80"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="reimbursed_di" bpmnElement="reimbursed">
        <dc:Bounds x="1672" y="202" width="36" height="36"/>
        <bpmndi:BPMNLabel>
          <dc:Bounds x="1655" y="242" width="70" height="14"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="Flow_report-submitted_total-expenses_di" bpmnElement="Flow_report-submitted_total-expenses">
        <di:waypoint x="122" y="60"/>
        <di:waypoint x="222" y="60"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_total-expenses_needs-review_di" bpmnElement="Flow_total-expenses_needs-review">
        <di:waypoint x="322" y="60"/>
        <di:waypoint x="422" y="60"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_needs-review_pay-merge_di" bpmnElement="Flow_needs-review_pay-merge">
        <di:waypoint x="447" y="85"/>
        <di:waypoint x="447" y="149"/>
        <di:waypoint x="1322" y="149"/>
        <di:waypoint x="1322" y="195"/>
        <bpmndi:BPMNLabel>
          <dc:Bounds x="865" y="125" width="40" height="14"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_needs-review_manager-review_di" bpmnElement="Flow_needs-review_manager-review">
        <di:waypoint x="472" y="60"/>
        <di:waypoint x="572" y="60"/>
        <bpmndi:BPMNLabel>
          <dc:Bounds x="501" y="36" width="42" height="14"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_manager-review_review-merge_di" bpmnElement="Flow_manager-review_review-merge">
        <di:waypoint x="672" y="60"/>
        <di:waypoint x="972" y="60"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_review-overdue_finance-review_di" bpmnElement="Flow_review-overdue_finance-review">
        <di:waypoint x="622" y="118"/>
        <di:waypoint x="622" y="220"/>
        <di:waypoint x="772" y="220"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_finance-review_review-merge_di" bpmnElement="Flow_finance-review_review-merge">
        <di:waypoint x="822" y="180"/>
        <di:waypoint x="822" y="60"/>
        <di:waypoint x="972" y="60"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_review-merge_decision_di" bpmnElement="Flow_review-merge_decision">
        <di:waypoint x="1022" y="60"/>
        <di:waypoint x="1122" y="60"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_decision_pay-merge_di" bpmnElement="Flow_decision_pay-merge">
        <di:waypoint x="1147" y="85"/>
        <di:waypoint x="1147" y="220"/>
        <di:waypoint x="1297" y="220"/>
        <bpmndi:BPMNLabel>
          <dc:Bounds x="1194" y="196" width="56" height="14"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_decision_return-report_di" bpmnElement="Flow_decision_return-report">
        <di:waypoint x="1172" y="60"/>
        <di:waypoint x="1272" y="60"/>
        <bpmndi:BPMNLabel>
          <dc:Bounds x="1194" y="36" width="56" height="14"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_return-report_report-rejected_di" bpmnElement="Flow_return-report_report-rejected">
        <di:waypoint x="1372" y="60"/>
        <di:waypoint x="1504" y="60"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_pay-merge_reimburse_di" bpmnElement="Flow_pay-merge_reimburse">
        <di:waypoint x="1347" y="220"/>
        <di:waypoint x="1472" y="220"/>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_reimburse_reimbursed_di" bpmnElement="Flow_reimburse_reimbursed">
        <di:waypoint x="1572" y="220"/>
        <di:waypoint x="1672" y="220"/>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn:definitions>

